@babel/traverse 7.1.0 → 7.23.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +1 -1
- package/README.md +1 -1
- package/lib/cache.js +27 -7
- package/lib/cache.js.map +1 -0
- package/lib/context.js +22 -59
- package/lib/context.js.map +1 -0
- package/lib/hub.js +2 -6
- package/lib/hub.js.map +1 -0
- package/lib/index.js +42 -77
- package/lib/index.js.map +1 -0
- package/lib/path/ancestry.js +15 -62
- package/lib/path/ancestry.js.map +1 -0
- package/lib/path/comments.js +31 -24
- package/lib/path/comments.js.map +1 -0
- package/lib/path/context.js +68 -91
- package/lib/path/context.js.map +1 -0
- package/lib/path/conversion.js +275 -273
- package/lib/path/conversion.js.map +1 -0
- package/lib/path/evaluation.js +84 -149
- package/lib/path/evaluation.js.map +1 -0
- package/lib/path/family.js +189 -94
- package/lib/path/family.js.map +1 -0
- package/lib/path/index.js +106 -132
- package/lib/path/index.js.map +1 -0
- package/lib/path/inference/index.js +81 -64
- package/lib/path/inference/index.js.map +1 -0
- package/lib/path/inference/inferer-reference.js +22 -52
- package/lib/path/inference/inferer-reference.js.map +1 -0
- package/lib/path/inference/inferers.js +110 -125
- package/lib/path/inference/inferers.js.map +1 -0
- package/lib/path/inference/util.js +30 -0
- package/lib/path/inference/util.js.map +1 -0
- package/lib/path/introspection.js +182 -168
- package/lib/path/introspection.js.map +1 -0
- package/lib/path/lib/hoister.js +37 -54
- package/lib/path/lib/hoister.js.map +1 -0
- package/lib/path/lib/removal-hooks.js +4 -4
- package/lib/path/lib/removal-hooks.js.map +1 -0
- package/lib/path/lib/virtual-types-validator.js +161 -0
- package/lib/path/lib/virtual-types-validator.js.map +1 -0
- package/lib/path/lib/virtual-types.js +21 -189
- package/lib/path/lib/virtual-types.js.map +1 -0
- package/lib/path/modification.js +103 -98
- package/lib/path/modification.js.map +1 -0
- package/lib/path/removal.js +18 -23
- package/lib/path/removal.js.map +1 -0
- package/lib/path/replacement.js +91 -144
- package/lib/path/replacement.js.map +1 -0
- package/lib/scope/binding.js +28 -16
- package/lib/scope/binding.js.map +1 -0
- package/lib/scope/index.js +407 -414
- package/lib/scope/index.js.map +1 -0
- package/lib/scope/lib/renamer.js +45 -70
- package/lib/scope/lib/renamer.js.map +1 -0
- package/lib/traverse-node.js +29 -0
- package/lib/traverse-node.js.map +1 -0
- package/lib/types.js +3 -0
- package/lib/types.js.map +1 -0
- package/lib/visitors.js +77 -113
- package/lib/visitors.js.map +1 -0
- package/package.json +28 -17
@@ -3,210 +3,42 @@
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
4
4
|
value: true
|
5
5
|
});
|
6
|
-
exports.
|
7
|
-
|
8
|
-
function t() {
|
9
|
-
const data = _interopRequireWildcard(require("@babel/types"));
|
10
|
-
|
11
|
-
t = function () {
|
12
|
-
return data;
|
13
|
-
};
|
14
|
-
|
15
|
-
return data;
|
16
|
-
}
|
17
|
-
|
18
|
-
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)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; return newObj; } }
|
19
|
-
|
20
|
-
const ReferencedIdentifier = {
|
21
|
-
types: ["Identifier", "JSXIdentifier"],
|
22
|
-
|
23
|
-
checkPath({
|
24
|
-
node,
|
25
|
-
parent
|
26
|
-
}, opts) {
|
27
|
-
if (!t().isIdentifier(node, opts) && !t().isJSXMemberExpression(parent, opts)) {
|
28
|
-
if (t().isJSXIdentifier(node, opts)) {
|
29
|
-
if (t().react.isCompatTag(node.name)) return false;
|
30
|
-
} else {
|
31
|
-
return false;
|
32
|
-
}
|
33
|
-
}
|
34
|
-
|
35
|
-
return t().isReferenced(node, parent);
|
36
|
-
}
|
37
|
-
|
38
|
-
};
|
6
|
+
exports.Var = exports.User = exports.Statement = exports.SpreadProperty = exports.Scope = exports.RestProperty = exports.ReferencedMemberExpression = exports.ReferencedIdentifier = exports.Referenced = exports.Pure = exports.NumericLiteralTypeAnnotation = exports.Generated = exports.ForAwaitStatement = exports.Flow = exports.Expression = exports.ExistentialTypeParam = exports.BlockScoped = exports.BindingIdentifier = void 0;
|
7
|
+
const ReferencedIdentifier = ["Identifier", "JSXIdentifier"];
|
39
8
|
exports.ReferencedIdentifier = ReferencedIdentifier;
|
40
|
-
const ReferencedMemberExpression =
|
41
|
-
types: ["MemberExpression"],
|
42
|
-
|
43
|
-
checkPath({
|
44
|
-
node,
|
45
|
-
parent
|
46
|
-
}) {
|
47
|
-
return t().isMemberExpression(node) && t().isReferenced(node, parent);
|
48
|
-
}
|
49
|
-
|
50
|
-
};
|
9
|
+
const ReferencedMemberExpression = ["MemberExpression"];
|
51
10
|
exports.ReferencedMemberExpression = ReferencedMemberExpression;
|
52
|
-
const BindingIdentifier =
|
53
|
-
types: ["Identifier"],
|
54
|
-
|
55
|
-
checkPath({
|
56
|
-
node,
|
57
|
-
parent
|
58
|
-
}) {
|
59
|
-
return t().isIdentifier(node) && t().isBinding(node, parent);
|
60
|
-
}
|
61
|
-
|
62
|
-
};
|
11
|
+
const BindingIdentifier = ["Identifier"];
|
63
12
|
exports.BindingIdentifier = BindingIdentifier;
|
64
|
-
const Statement =
|
65
|
-
types: ["Statement"],
|
66
|
-
|
67
|
-
checkPath({
|
68
|
-
node,
|
69
|
-
parent
|
70
|
-
}) {
|
71
|
-
if (t().isStatement(node)) {
|
72
|
-
if (t().isVariableDeclaration(node)) {
|
73
|
-
if (t().isForXStatement(parent, {
|
74
|
-
left: node
|
75
|
-
})) return false;
|
76
|
-
if (t().isForStatement(parent, {
|
77
|
-
init: node
|
78
|
-
})) return false;
|
79
|
-
}
|
80
|
-
|
81
|
-
return true;
|
82
|
-
} else {
|
83
|
-
return false;
|
84
|
-
}
|
85
|
-
}
|
86
|
-
|
87
|
-
};
|
13
|
+
const Statement = ["Statement"];
|
88
14
|
exports.Statement = Statement;
|
89
|
-
const Expression =
|
90
|
-
types: ["Expression"],
|
91
|
-
|
92
|
-
checkPath(path) {
|
93
|
-
if (path.isIdentifier()) {
|
94
|
-
return path.isReferencedIdentifier();
|
95
|
-
} else {
|
96
|
-
return t().isExpression(path.node);
|
97
|
-
}
|
98
|
-
}
|
99
|
-
|
100
|
-
};
|
15
|
+
const Expression = ["Expression"];
|
101
16
|
exports.Expression = Expression;
|
102
|
-
const Scope =
|
103
|
-
types: ["Scopable"],
|
104
|
-
|
105
|
-
checkPath(path) {
|
106
|
-
return t().isScope(path.node, path.parent);
|
107
|
-
}
|
108
|
-
|
109
|
-
};
|
17
|
+
const Scope = ["Scopable", "Pattern"];
|
110
18
|
exports.Scope = Scope;
|
111
|
-
const Referenced =
|
112
|
-
checkPath(path) {
|
113
|
-
return t().isReferenced(path.node, path.parent);
|
114
|
-
}
|
115
|
-
|
116
|
-
};
|
19
|
+
const Referenced = null;
|
117
20
|
exports.Referenced = Referenced;
|
118
|
-
const BlockScoped =
|
119
|
-
checkPath(path) {
|
120
|
-
return t().isBlockScoped(path.node);
|
121
|
-
}
|
122
|
-
|
123
|
-
};
|
21
|
+
const BlockScoped = null;
|
124
22
|
exports.BlockScoped = BlockScoped;
|
125
|
-
const Var =
|
126
|
-
types: ["VariableDeclaration"],
|
127
|
-
|
128
|
-
checkPath(path) {
|
129
|
-
return t().isVar(path.node);
|
130
|
-
}
|
131
|
-
|
132
|
-
};
|
23
|
+
const Var = ["VariableDeclaration"];
|
133
24
|
exports.Var = Var;
|
134
|
-
const User =
|
135
|
-
checkPath(path) {
|
136
|
-
return path.node && !!path.node.loc;
|
137
|
-
}
|
138
|
-
|
139
|
-
};
|
25
|
+
const User = null;
|
140
26
|
exports.User = User;
|
141
|
-
const Generated =
|
142
|
-
checkPath(path) {
|
143
|
-
return !path.isUser();
|
144
|
-
}
|
145
|
-
|
146
|
-
};
|
27
|
+
const Generated = null;
|
147
28
|
exports.Generated = Generated;
|
148
|
-
const Pure =
|
149
|
-
checkPath(path, opts) {
|
150
|
-
return path.scope.isPure(path.node, opts);
|
151
|
-
}
|
152
|
-
|
153
|
-
};
|
29
|
+
const Pure = null;
|
154
30
|
exports.Pure = Pure;
|
155
|
-
const Flow =
|
156
|
-
types: ["Flow", "ImportDeclaration", "ExportDeclaration", "ImportSpecifier"],
|
157
|
-
|
158
|
-
checkPath({
|
159
|
-
node
|
160
|
-
}) {
|
161
|
-
if (t().isFlow(node)) {
|
162
|
-
return true;
|
163
|
-
} else if (t().isImportDeclaration(node)) {
|
164
|
-
return node.importKind === "type" || node.importKind === "typeof";
|
165
|
-
} else if (t().isExportDeclaration(node)) {
|
166
|
-
return node.exportKind === "type";
|
167
|
-
} else if (t().isImportSpecifier(node)) {
|
168
|
-
return node.importKind === "type" || node.importKind === "typeof";
|
169
|
-
} else {
|
170
|
-
return false;
|
171
|
-
}
|
172
|
-
}
|
173
|
-
|
174
|
-
};
|
31
|
+
const Flow = ["Flow", "ImportDeclaration", "ExportDeclaration", "ImportSpecifier"];
|
175
32
|
exports.Flow = Flow;
|
176
|
-
const RestProperty =
|
177
|
-
types: ["RestElement"],
|
178
|
-
|
179
|
-
checkPath(path) {
|
180
|
-
return path.parentPath && path.parentPath.isObjectPattern();
|
181
|
-
}
|
182
|
-
|
183
|
-
};
|
33
|
+
const RestProperty = ["RestElement"];
|
184
34
|
exports.RestProperty = RestProperty;
|
185
|
-
const SpreadProperty =
|
186
|
-
types: ["RestElement"],
|
187
|
-
|
188
|
-
checkPath(path) {
|
189
|
-
return path.parentPath && path.parentPath.isObjectExpression();
|
190
|
-
}
|
191
|
-
|
192
|
-
};
|
35
|
+
const SpreadProperty = ["RestElement"];
|
193
36
|
exports.SpreadProperty = SpreadProperty;
|
194
|
-
const ExistentialTypeParam =
|
195
|
-
types: ["ExistsTypeAnnotation"]
|
196
|
-
};
|
37
|
+
const ExistentialTypeParam = ["ExistsTypeAnnotation"];
|
197
38
|
exports.ExistentialTypeParam = ExistentialTypeParam;
|
198
|
-
const NumericLiteralTypeAnnotation =
|
199
|
-
types: ["NumberLiteralTypeAnnotation"]
|
200
|
-
};
|
39
|
+
const NumericLiteralTypeAnnotation = ["NumberLiteralTypeAnnotation"];
|
201
40
|
exports.NumericLiteralTypeAnnotation = NumericLiteralTypeAnnotation;
|
202
|
-
const ForAwaitStatement =
|
203
|
-
|
204
|
-
|
205
|
-
checkPath({
|
206
|
-
node
|
207
|
-
}) {
|
208
|
-
return node.await === true;
|
209
|
-
}
|
41
|
+
const ForAwaitStatement = ["ForOfStatement"];
|
42
|
+
exports.ForAwaitStatement = ForAwaitStatement;
|
210
43
|
|
211
|
-
|
212
|
-
exports.ForAwaitStatement = ForAwaitStatement;
|
44
|
+
//# sourceMappingURL=virtual-types.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"names":["ReferencedIdentifier","exports","ReferencedMemberExpression","BindingIdentifier","Statement","Expression","Scope","Referenced","BlockScoped","Var","User","Generated","Pure","Flow","RestProperty","SpreadProperty","ExistentialTypeParam","NumericLiteralTypeAnnotation","ForAwaitStatement"],"sources":["../../../src/path/lib/virtual-types.ts"],"sourcesContent":["import type * as t from \"@babel/types\";\n\nexport interface VirtualTypeAliases {\n BindingIdentifier: t.Identifier;\n BlockScoped: t.Node;\n ExistentialTypeParam: t.ExistsTypeAnnotation;\n Expression: t.Expression;\n Flow: t.Flow | t.ImportDeclaration | t.ExportDeclaration | t.ImportSpecifier;\n ForAwaitStatement: t.ForOfStatement;\n Generated: t.Node;\n NumericLiteralTypeAnnotation: t.NumberLiteralTypeAnnotation;\n Pure: t.Node;\n Referenced: t.Node;\n ReferencedIdentifier: t.Identifier | t.JSXIdentifier;\n ReferencedMemberExpression: t.MemberExpression;\n RestProperty: t.RestElement;\n Scope: t.Scopable | t.Pattern;\n SpreadProperty: t.RestElement;\n Statement: t.Statement;\n User: t.Node;\n Var: t.VariableDeclaration;\n}\n\ntype VirtualTypeMapping = readonly (t.Node[\"type\"] | keyof t.Aliases)[] | null;\n\nexport const ReferencedIdentifier: VirtualTypeMapping = [\n \"Identifier\",\n \"JSXIdentifier\",\n] as const;\n\nexport const ReferencedMemberExpression: VirtualTypeMapping = [\n \"MemberExpression\",\n] as const;\n\nexport const BindingIdentifier: VirtualTypeMapping = [\"Identifier\"] as const;\n\nexport const Statement: VirtualTypeMapping = [\"Statement\"] as const;\n\nexport const Expression: VirtualTypeMapping = [\"Expression\"] as const;\n\nexport const Scope: VirtualTypeMapping = [\"Scopable\", \"Pattern\"] as const;\n\nexport const Referenced: VirtualTypeMapping = null;\n\nexport const BlockScoped: VirtualTypeMapping = null;\n\nexport const Var: VirtualTypeMapping = [\"VariableDeclaration\"];\n\nexport const User: VirtualTypeMapping = null;\n\nexport const Generated: VirtualTypeMapping = null;\n\nexport const Pure: VirtualTypeMapping = null;\n\nexport const Flow: VirtualTypeMapping = [\n \"Flow\",\n \"ImportDeclaration\",\n \"ExportDeclaration\",\n \"ImportSpecifier\",\n] as const;\n\n// TODO: 7.0 Backwards Compat\nexport const RestProperty: VirtualTypeMapping = [\"RestElement\"] as const;\n\nexport const SpreadProperty: VirtualTypeMapping = [\"RestElement\"] as const;\n\nexport const ExistentialTypeParam: VirtualTypeMapping = [\n \"ExistsTypeAnnotation\",\n] as const;\n\nexport const NumericLiteralTypeAnnotation: VirtualTypeMapping = [\n \"NumberLiteralTypeAnnotation\",\n] as const;\n\nexport const ForAwaitStatement: VirtualTypeMapping = [\n \"ForOfStatement\",\n] as const;\n"],"mappings":";;;;;;AAyBO,MAAMA,oBAAwC,GAAG,CACtD,YAAY,EACZ,eAAe,CACP;AAACC,OAAA,CAAAD,oBAAA,GAAAA,oBAAA;AAEJ,MAAME,0BAA8C,GAAG,CAC5D,kBAAkB,CACV;AAACD,OAAA,CAAAC,0BAAA,GAAAA,0BAAA;AAEJ,MAAMC,iBAAqC,GAAG,CAAC,YAAY,CAAU;AAACF,OAAA,CAAAE,iBAAA,GAAAA,iBAAA;AAEtE,MAAMC,SAA6B,GAAG,CAAC,WAAW,CAAU;AAACH,OAAA,CAAAG,SAAA,GAAAA,SAAA;AAE7D,MAAMC,UAA8B,GAAG,CAAC,YAAY,CAAU;AAACJ,OAAA,CAAAI,UAAA,GAAAA,UAAA;AAE/D,MAAMC,KAAyB,GAAG,CAAC,UAAU,EAAE,SAAS,CAAU;AAACL,OAAA,CAAAK,KAAA,GAAAA,KAAA;AAEnE,MAAMC,UAA8B,GAAG,IAAI;AAACN,OAAA,CAAAM,UAAA,GAAAA,UAAA;AAE5C,MAAMC,WAA+B,GAAG,IAAI;AAACP,OAAA,CAAAO,WAAA,GAAAA,WAAA;AAE7C,MAAMC,GAAuB,GAAG,CAAC,qBAAqB,CAAC;AAACR,OAAA,CAAAQ,GAAA,GAAAA,GAAA;AAExD,MAAMC,IAAwB,GAAG,IAAI;AAACT,OAAA,CAAAS,IAAA,GAAAA,IAAA;AAEtC,MAAMC,SAA6B,GAAG,IAAI;AAACV,OAAA,CAAAU,SAAA,GAAAA,SAAA;AAE3C,MAAMC,IAAwB,GAAG,IAAI;AAACX,OAAA,CAAAW,IAAA,GAAAA,IAAA;AAEtC,MAAMC,IAAwB,GAAG,CACtC,MAAM,EACN,mBAAmB,EACnB,mBAAmB,EACnB,iBAAiB,CACT;AAACZ,OAAA,CAAAY,IAAA,GAAAA,IAAA;AAGJ,MAAMC,YAAgC,GAAG,CAAC,aAAa,CAAU;AAACb,OAAA,CAAAa,YAAA,GAAAA,YAAA;AAElE,MAAMC,cAAkC,GAAG,CAAC,aAAa,CAAU;AAACd,OAAA,CAAAc,cAAA,GAAAA,cAAA;AAEpE,MAAMC,oBAAwC,GAAG,CACtD,sBAAsB,CACd;AAACf,OAAA,CAAAe,oBAAA,GAAAA,oBAAA;AAEJ,MAAMC,4BAAgD,GAAG,CAC9D,6BAA6B,CACrB;AAAChB,OAAA,CAAAgB,4BAAA,GAAAA,4BAAA;AAEJ,MAAMC,iBAAqC,GAAG,CACnD,gBAAgB,CACR;AAACjB,OAAA,CAAAiB,iBAAA,GAAAA,iBAAA"}
|
package/lib/path/modification.js
CHANGED
@@ -3,165 +3,179 @@
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
4
4
|
value: true
|
5
5
|
});
|
6
|
-
exports.insertBefore = insertBefore;
|
7
6
|
exports._containerInsert = _containerInsert;
|
8
|
-
exports._containerInsertBefore = _containerInsertBefore;
|
9
7
|
exports._containerInsertAfter = _containerInsertAfter;
|
10
|
-
exports.
|
11
|
-
exports.updateSiblingKeys = updateSiblingKeys;
|
8
|
+
exports._containerInsertBefore = _containerInsertBefore;
|
12
9
|
exports._verifyNodeList = _verifyNodeList;
|
13
|
-
exports.unshiftContainer = unshiftContainer;
|
14
|
-
exports.pushContainer = pushContainer;
|
15
10
|
exports.hoist = hoist;
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
var
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
11
|
+
exports.insertAfter = insertAfter;
|
12
|
+
exports.insertBefore = insertBefore;
|
13
|
+
exports.pushContainer = pushContainer;
|
14
|
+
exports.unshiftContainer = unshiftContainer;
|
15
|
+
exports.updateSiblingKeys = updateSiblingKeys;
|
16
|
+
var _cache = require("../cache.js");
|
17
|
+
var _hoister = require("./lib/hoister.js");
|
18
|
+
var _index = require("./index.js");
|
19
|
+
var _t = require("@babel/types");
|
20
|
+
const {
|
21
|
+
arrowFunctionExpression,
|
22
|
+
assertExpression,
|
23
|
+
assignmentExpression,
|
24
|
+
blockStatement,
|
25
|
+
callExpression,
|
26
|
+
cloneNode,
|
27
|
+
expressionStatement,
|
28
|
+
isAssignmentExpression,
|
29
|
+
isCallExpression,
|
30
|
+
isExportNamedDeclaration,
|
31
|
+
isExpression,
|
32
|
+
isIdentifier,
|
33
|
+
isSequenceExpression,
|
34
|
+
isSuper,
|
35
|
+
thisExpression
|
36
|
+
} = _t;
|
37
|
+
function insertBefore(nodes_) {
|
38
38
|
this._assertUnremoved();
|
39
|
-
|
40
|
-
nodes = this._verifyNodeList(nodes);
|
39
|
+
const nodes = this._verifyNodeList(nodes_);
|
41
40
|
const {
|
42
|
-
parentPath
|
41
|
+
parentPath,
|
42
|
+
parent
|
43
43
|
} = this;
|
44
|
-
|
45
|
-
if (parentPath.isExpressionStatement() || parentPath.isLabeledStatement() || parentPath.isExportNamedDeclaration() || parentPath.isExportDefaultDeclaration() && this.isDeclaration()) {
|
44
|
+
if (parentPath.isExpressionStatement() || parentPath.isLabeledStatement() || isExportNamedDeclaration(parent) || parentPath.isExportDefaultDeclaration() && this.isDeclaration()) {
|
46
45
|
return parentPath.insertBefore(nodes);
|
47
|
-
} else if (this.isNodeType("Expression") && this.
|
46
|
+
} else if (this.isNodeType("Expression") && !this.isJSXElement() || parentPath.isForStatement() && this.key === "init") {
|
48
47
|
if (this.node) nodes.push(this.node);
|
49
48
|
return this.replaceExpressionWithStatements(nodes);
|
50
49
|
} else if (Array.isArray(this.container)) {
|
51
50
|
return this._containerInsertBefore(nodes);
|
52
51
|
} else if (this.isStatementOrBlock()) {
|
53
|
-
const
|
54
|
-
this.
|
52
|
+
const node = this.node;
|
53
|
+
const shouldInsertCurrentNode = node && (!this.isExpressionStatement() || node.expression != null);
|
54
|
+
this.replaceWith(blockStatement(shouldInsertCurrentNode ? [node] : []));
|
55
55
|
return this.unshiftContainer("body", nodes);
|
56
56
|
} else {
|
57
57
|
throw new Error("We don't know what to do with this node type. " + "We were previously a Statement but we can't fit in here?");
|
58
58
|
}
|
59
59
|
}
|
60
|
-
|
61
60
|
function _containerInsert(from, nodes) {
|
62
61
|
this.updateSiblingKeys(from, nodes.length);
|
63
62
|
const paths = [];
|
64
63
|
this.container.splice(from, 0, ...nodes);
|
65
|
-
|
66
64
|
for (let i = 0; i < nodes.length; i++) {
|
65
|
+
var _this$context;
|
67
66
|
const to = from + i;
|
68
67
|
const path = this.getSibling(to);
|
69
68
|
paths.push(path);
|
70
|
-
|
71
|
-
if (this.context && this.context.queue) {
|
69
|
+
if ((_this$context = this.context) != null && _this$context.queue) {
|
72
70
|
path.pushContext(this.context);
|
73
71
|
}
|
74
72
|
}
|
75
|
-
|
76
73
|
const contexts = this._getQueueContexts();
|
77
|
-
|
78
74
|
for (const path of paths) {
|
79
75
|
path.setScope();
|
80
76
|
path.debug("Inserted.");
|
81
|
-
|
82
77
|
for (const context of contexts) {
|
83
78
|
context.maybeQueue(path, true);
|
84
79
|
}
|
85
80
|
}
|
86
|
-
|
87
81
|
return paths;
|
88
82
|
}
|
89
|
-
|
90
83
|
function _containerInsertBefore(nodes) {
|
91
84
|
return this._containerInsert(this.key, nodes);
|
92
85
|
}
|
93
|
-
|
94
86
|
function _containerInsertAfter(nodes) {
|
95
87
|
return this._containerInsert(this.key + 1, nodes);
|
96
88
|
}
|
97
|
-
|
98
|
-
function
|
89
|
+
const last = arr => arr[arr.length - 1];
|
90
|
+
function isHiddenInSequenceExpression(path) {
|
91
|
+
return isSequenceExpression(path.parent) && (last(path.parent.expressions) !== path.node || isHiddenInSequenceExpression(path.parentPath));
|
92
|
+
}
|
93
|
+
function isAlmostConstantAssignment(node, scope) {
|
94
|
+
if (!isAssignmentExpression(node) || !isIdentifier(node.left)) {
|
95
|
+
return false;
|
96
|
+
}
|
97
|
+
const blockScope = scope.getBlockParent();
|
98
|
+
return blockScope.hasOwnBinding(node.left.name) && blockScope.getOwnBinding(node.left.name).constantViolations.length <= 1;
|
99
|
+
}
|
100
|
+
function insertAfter(nodes_) {
|
99
101
|
this._assertUnremoved();
|
100
|
-
|
101
|
-
|
102
|
+
if (this.isSequenceExpression()) {
|
103
|
+
return last(this.get("expressions")).insertAfter(nodes_);
|
104
|
+
}
|
105
|
+
const nodes = this._verifyNodeList(nodes_);
|
102
106
|
const {
|
103
|
-
parentPath
|
107
|
+
parentPath,
|
108
|
+
parent
|
104
109
|
} = this;
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
110
|
+
if (parentPath.isExpressionStatement() || parentPath.isLabeledStatement() || isExportNamedDeclaration(parent) || parentPath.isExportDefaultDeclaration() && this.isDeclaration()) {
|
111
|
+
return parentPath.insertAfter(nodes.map(node => {
|
112
|
+
return isExpression(node) ? expressionStatement(node) : node;
|
113
|
+
}));
|
114
|
+
} else if (this.isNodeType("Expression") && !this.isJSXElement() && !parentPath.isJSXElement() || parentPath.isForStatement() && this.key === "init") {
|
109
115
|
if (this.node) {
|
116
|
+
const node = this.node;
|
110
117
|
let {
|
111
118
|
scope
|
112
119
|
} = this;
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
120
|
+
if (scope.path.isPattern()) {
|
121
|
+
assertExpression(node);
|
122
|
+
this.replaceWith(callExpression(arrowFunctionExpression([], node), []));
|
123
|
+
this.get("callee.body").insertAfter(nodes);
|
124
|
+
return [this];
|
125
|
+
}
|
126
|
+
if (isHiddenInSequenceExpression(this)) {
|
127
|
+
nodes.unshift(node);
|
128
|
+
} else if (isCallExpression(node) && isSuper(node.callee)) {
|
129
|
+
nodes.unshift(node);
|
130
|
+
nodes.push(thisExpression());
|
131
|
+
} else if (isAlmostConstantAssignment(node, scope)) {
|
132
|
+
nodes.unshift(node);
|
133
|
+
nodes.push(cloneNode(node.left));
|
134
|
+
} else if (scope.isPure(node, true)) {
|
135
|
+
nodes.push(node);
|
136
|
+
} else {
|
137
|
+
if (parentPath.isMethod({
|
138
|
+
computed: true,
|
139
|
+
key: node
|
140
|
+
})) {
|
141
|
+
scope = scope.parent;
|
142
|
+
}
|
143
|
+
const temp = scope.generateDeclaredUidIdentifier();
|
144
|
+
nodes.unshift(expressionStatement(assignmentExpression("=", cloneNode(temp), node)));
|
145
|
+
nodes.push(expressionStatement(cloneNode(temp)));
|
119
146
|
}
|
120
|
-
|
121
|
-
const temp = scope.generateDeclaredUidIdentifier();
|
122
|
-
nodes.unshift(t().expressionStatement(t().assignmentExpression("=", t().cloneNode(temp), this.node)));
|
123
|
-
nodes.push(t().expressionStatement(t().cloneNode(temp)));
|
124
147
|
}
|
125
|
-
|
126
148
|
return this.replaceExpressionWithStatements(nodes);
|
127
149
|
} else if (Array.isArray(this.container)) {
|
128
150
|
return this._containerInsertAfter(nodes);
|
129
151
|
} else if (this.isStatementOrBlock()) {
|
130
|
-
const
|
131
|
-
this.
|
152
|
+
const node = this.node;
|
153
|
+
const shouldInsertCurrentNode = node && (!this.isExpressionStatement() || node.expression != null);
|
154
|
+
this.replaceWith(blockStatement(shouldInsertCurrentNode ? [node] : []));
|
132
155
|
return this.pushContainer("body", nodes);
|
133
156
|
} else {
|
134
157
|
throw new Error("We don't know what to do with this node type. " + "We were previously a Statement but we can't fit in here?");
|
135
158
|
}
|
136
159
|
}
|
137
|
-
|
138
160
|
function updateSiblingKeys(fromIndex, incrementBy) {
|
139
161
|
if (!this.parent) return;
|
140
|
-
|
141
|
-
const
|
142
|
-
|
143
|
-
for (let i = 0; i < paths.length; i++) {
|
144
|
-
const path = paths[i];
|
145
|
-
|
146
|
-
if (path.key >= fromIndex) {
|
162
|
+
const paths = (0, _cache.getCachedPaths)(this.hub, this.parent) || [];
|
163
|
+
for (const [, path] of paths) {
|
164
|
+
if (typeof path.key === "number" && path.key >= fromIndex) {
|
147
165
|
path.key += incrementBy;
|
148
166
|
}
|
149
167
|
}
|
150
168
|
}
|
151
|
-
|
152
169
|
function _verifyNodeList(nodes) {
|
153
170
|
if (!nodes) {
|
154
171
|
return [];
|
155
172
|
}
|
156
|
-
|
157
|
-
if (nodes.constructor !== Array) {
|
173
|
+
if (!Array.isArray(nodes)) {
|
158
174
|
nodes = [nodes];
|
159
175
|
}
|
160
|
-
|
161
176
|
for (let i = 0; i < nodes.length; i++) {
|
162
177
|
const node = nodes[i];
|
163
178
|
let msg;
|
164
|
-
|
165
179
|
if (!node) {
|
166
180
|
msg = "has falsy node";
|
167
181
|
} else if (typeof node !== "object") {
|
@@ -171,50 +185,41 @@ function _verifyNodeList(nodes) {
|
|
171
185
|
} else if (node instanceof _index.default) {
|
172
186
|
msg = "has a NodePath when it expected a raw object";
|
173
187
|
}
|
174
|
-
|
175
188
|
if (msg) {
|
176
189
|
const type = Array.isArray(node) ? "array" : typeof node;
|
177
190
|
throw new Error(`Node list ${msg} with the index of ${i} and type of ${type}`);
|
178
191
|
}
|
179
192
|
}
|
180
|
-
|
181
193
|
return nodes;
|
182
194
|
}
|
183
|
-
|
184
195
|
function unshiftContainer(listKey, nodes) {
|
185
196
|
this._assertUnremoved();
|
186
|
-
|
187
197
|
nodes = this._verifyNodeList(nodes);
|
188
|
-
|
189
198
|
const path = _index.default.get({
|
190
199
|
parentPath: this,
|
191
200
|
parent: this.node,
|
192
201
|
container: this.node[listKey],
|
193
202
|
listKey,
|
194
203
|
key: 0
|
195
|
-
});
|
196
|
-
|
197
|
-
return path.insertBefore(nodes);
|
204
|
+
}).setContext(this.context);
|
205
|
+
return path._containerInsertBefore(nodes);
|
198
206
|
}
|
199
|
-
|
200
207
|
function pushContainer(listKey, nodes) {
|
201
208
|
this._assertUnremoved();
|
202
|
-
|
203
|
-
nodes = this._verifyNodeList(nodes);
|
209
|
+
const verifiedNodes = this._verifyNodeList(nodes);
|
204
210
|
const container = this.node[listKey];
|
205
|
-
|
206
211
|
const path = _index.default.get({
|
207
212
|
parentPath: this,
|
208
213
|
parent: this.node,
|
209
214
|
container: container,
|
210
215
|
listKey,
|
211
216
|
key: container.length
|
212
|
-
});
|
213
|
-
|
214
|
-
return path.replaceWithMultiple(nodes);
|
217
|
+
}).setContext(this.context);
|
218
|
+
return path.replaceWithMultiple(verifiedNodes);
|
215
219
|
}
|
216
|
-
|
217
220
|
function hoist(scope = this.scope) {
|
218
221
|
const hoister = new _hoister.default(this, scope);
|
219
222
|
return hoister.run();
|
220
|
-
}
|
223
|
+
}
|
224
|
+
|
225
|
+
//# sourceMappingURL=modification.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"names":["_cache","require","_hoister","_index","_t","arrowFunctionExpression","assertExpression","assignmentExpression","blockStatement","callExpression","cloneNode","expressionStatement","isAssignmentExpression","isCallExpression","isExportNamedDeclaration","isExpression","isIdentifier","isSequenceExpression","isSuper","thisExpression","insertBefore","nodes_","_assertUnremoved","nodes","_verifyNodeList","parentPath","parent","isExpressionStatement","isLabeledStatement","isExportDefaultDeclaration","isDeclaration","isNodeType","isJSXElement","isForStatement","key","node","push","replaceExpressionWithStatements","Array","isArray","container","_containerInsertBefore","isStatementOrBlock","shouldInsertCurrentNode","expression","replaceWith","unshiftContainer","Error","_containerInsert","from","updateSiblingKeys","length","paths","splice","i","_this$context","to","path","getSibling","context","queue","pushContext","contexts","_getQueueContexts","setScope","debug","maybeQueue","_containerInsertAfter","last","arr","isHiddenInSequenceExpression","expressions","isAlmostConstantAssignment","scope","left","blockScope","getBlockParent","hasOwnBinding","name","getOwnBinding","constantViolations","insertAfter","get","map","isPattern","unshift","callee","isPure","isMethod","computed","temp","generateDeclaredUidIdentifier","pushContainer","fromIndex","incrementBy","getCachedPaths","hub","msg","type","NodePath","listKey","setContext","verifiedNodes","replaceWithMultiple","hoist","hoister","PathHoister","run"],"sources":["../../src/path/modification.ts"],"sourcesContent":["// This file contains methods that modify the path/node in some ways.\n\nimport { getCachedPaths } from \"../cache.ts\";\nimport PathHoister from \"./lib/hoister.ts\";\nimport NodePath from \"./index.ts\";\nimport {\n arrowFunctionExpression,\n assertExpression,\n assignmentExpression,\n blockStatement,\n callExpression,\n cloneNode,\n expressionStatement,\n isAssignmentExpression,\n isCallExpression,\n isExportNamedDeclaration,\n isExpression,\n isIdentifier,\n isSequenceExpression,\n isSuper,\n thisExpression,\n} from \"@babel/types\";\nimport type * as t from \"@babel/types\";\nimport type Scope from \"../scope/index.ts\";\n\n/**\n * Insert the provided nodes before the current one.\n */\n\nexport function insertBefore(\n this: NodePath,\n nodes_: t.Node | t.Node[],\n): NodePath[] {\n this._assertUnremoved();\n\n const nodes = this._verifyNodeList(nodes_);\n\n const { parentPath, parent } = this;\n\n if (\n parentPath.isExpressionStatement() ||\n parentPath.isLabeledStatement() ||\n // https://github.com/babel/babel/issues/15293\n // When Babel transforms `export class String { field }`, the class properties plugin will inject the defineProperty\n // helper, which depends on the builtins e.g. String, Number, Symbol, etc. To prevent them from being shadowed by local\n // exports, the helper injector replaces the named export into `class _String { field }; export { _String as String }`,\n // with `parentPath` here changed to the moved ClassDeclaration, causing rare inconsistency between `parent` and `parentPath`.\n // Here we retrieve the parent type from the `parent` property. This is a temporary fix and we should revisit when\n // helpers should get injected.\n isExportNamedDeclaration(parent) ||\n (parentPath.isExportDefaultDeclaration() && this.isDeclaration())\n ) {\n return parentPath.insertBefore(nodes);\n } else if (\n (this.isNodeType(\"Expression\") && !this.isJSXElement()) ||\n (parentPath.isForStatement() && this.key === \"init\")\n ) {\n if (this.node) nodes.push(this.node);\n // @ts-expect-error todo(flow->ts): check that nodes is an array of statements\n return this.replaceExpressionWithStatements(nodes);\n } else if (Array.isArray(this.container)) {\n return this._containerInsertBefore(nodes);\n } else if (this.isStatementOrBlock()) {\n const node = this.node as t.Statement;\n const shouldInsertCurrentNode =\n node &&\n (!this.isExpressionStatement() ||\n (node as t.ExpressionStatement).expression != null);\n\n this.replaceWith(blockStatement(shouldInsertCurrentNode ? [node] : []));\n return (this as NodePath<t.BlockStatement>).unshiftContainer(\n \"body\",\n // @ts-expect-error Fixme: refine nodes to t.BlockStatement[\"body\"] when this is a BlockStatement path\n nodes,\n );\n } else {\n throw new Error(\n \"We don't know what to do with this node type. \" +\n \"We were previously a Statement but we can't fit in here?\",\n );\n }\n}\n\nexport function _containerInsert<N extends t.Node>(\n this: NodePath,\n from: number,\n nodes: N[],\n): NodePath<N>[] {\n this.updateSiblingKeys(from, nodes.length);\n\n const paths: NodePath<N>[] = [];\n\n // @ts-expect-error todo(flow->ts): this.container could be a NodePath\n this.container.splice(from, 0, ...nodes);\n for (let i = 0; i < nodes.length; i++) {\n const to = from + i;\n const path = this.getSibling(to) as NodePath<N>;\n paths.push(path);\n\n if (this.context?.queue) {\n path.pushContext(this.context);\n }\n }\n\n const contexts = this._getQueueContexts();\n\n for (const path of paths) {\n path.setScope();\n path.debug(\"Inserted.\");\n\n for (const context of contexts) {\n context.maybeQueue(path, true);\n }\n }\n\n return paths;\n}\n\nexport function _containerInsertBefore<N extends t.Node>(\n this: NodePath,\n nodes: N[],\n) {\n return this._containerInsert(this.key as number, nodes);\n}\n\nexport function _containerInsertAfter<N extends t.Node>(\n this: NodePath,\n nodes: N[],\n) {\n return this._containerInsert((this.key as number) + 1, nodes);\n}\n\nconst last = <T>(arr: T[]) => arr[arr.length - 1];\n\nfunction isHiddenInSequenceExpression(path: NodePath): boolean {\n return (\n isSequenceExpression(path.parent) &&\n (last(path.parent.expressions) !== path.node ||\n isHiddenInSequenceExpression(path.parentPath))\n );\n}\n\nfunction isAlmostConstantAssignment(\n node: t.Node,\n scope: Scope,\n): node is t.AssignmentExpression & { left: t.Identifier } {\n if (!isAssignmentExpression(node) || !isIdentifier(node.left)) {\n return false;\n }\n\n // Not every scope can contain variables. For example, we might be in\n // a ClassScope either in the ClassHeritage or in a computed key.\n const blockScope = scope.getBlockParent();\n\n // If the variable is defined in the current scope and only assigned here,\n // we can be sure that its value won't change.\n return (\n blockScope.hasOwnBinding(node.left.name) &&\n blockScope.getOwnBinding(node.left.name).constantViolations.length <= 1\n );\n}\n\n/**\n * Insert the provided nodes after the current one. When inserting nodes after an\n * expression, ensure that the completion record is correct by pushing the current node.\n */\n\nexport function insertAfter(\n this: NodePath,\n nodes_: t.Node | t.Node[],\n): NodePath[] {\n this._assertUnremoved();\n\n if (this.isSequenceExpression()) {\n return last(this.get(\"expressions\")).insertAfter(nodes_);\n }\n\n const nodes = this._verifyNodeList(nodes_);\n\n const { parentPath, parent } = this;\n if (\n parentPath.isExpressionStatement() ||\n parentPath.isLabeledStatement() ||\n // see insertBefore\n isExportNamedDeclaration(parent) ||\n (parentPath.isExportDefaultDeclaration() && this.isDeclaration())\n ) {\n return parentPath.insertAfter(\n nodes.map(node => {\n // Usually after an expression we can safely insert another expression:\n // A.insertAfter(B)\n // foo = A; -> foo = (A, B);\n // If A is an expression statement, it isn't safe anymore so we need to\n // convert B to an expression statement\n // A; -> A; B // No semicolon! It could break if followed by [!\n return isExpression(node) ? expressionStatement(node) : node;\n }),\n );\n } else if (\n (this.isNodeType(\"Expression\") &&\n !this.isJSXElement() &&\n !parentPath.isJSXElement()) ||\n (parentPath.isForStatement() && this.key === \"init\")\n ) {\n if (this.node) {\n const node = this.node as t.Expression | t.VariableDeclaration;\n let { scope } = this;\n\n if (scope.path.isPattern()) {\n assertExpression(node);\n\n this.replaceWith(callExpression(arrowFunctionExpression([], node), []));\n (this.get(\"callee.body\") as NodePath<t.Expression>).insertAfter(nodes);\n return [this];\n }\n\n if (isHiddenInSequenceExpression(this)) {\n nodes.unshift(node);\n }\n // We need to preserve the value of this expression.\n else if (isCallExpression(node) && isSuper(node.callee)) {\n nodes.unshift(node);\n // `super(...)` always evaluates to `this`.\n nodes.push(thisExpression());\n } else if (isAlmostConstantAssignment(node, scope)) {\n nodes.unshift(node);\n nodes.push(cloneNode(node.left));\n } else if (scope.isPure(node, true)) {\n // Insert the nodes before rather than after; it's not observable.\n nodes.push(node);\n } else {\n // Inserting after the computed key of a method should insert the\n // temporary binding in the method's parent's scope.\n if (parentPath.isMethod({ computed: true, key: node })) {\n scope = scope.parent;\n }\n const temp = scope.generateDeclaredUidIdentifier();\n nodes.unshift(\n expressionStatement(\n // @ts-expect-error todo(flow->ts): This can be a variable\n // declaration in the \"init\" of a for statement, but that's\n // invalid here.\n assignmentExpression(\"=\", cloneNode(temp), node),\n ),\n );\n nodes.push(expressionStatement(cloneNode(temp)));\n }\n }\n // @ts-expect-error todo(flow->ts): check that nodes is an array of statements\n return this.replaceExpressionWithStatements(nodes);\n } else if (Array.isArray(this.container)) {\n return this._containerInsertAfter(nodes);\n } else if (this.isStatementOrBlock()) {\n const node = this.node as t.Statement;\n const shouldInsertCurrentNode =\n node &&\n (!this.isExpressionStatement() ||\n (node as t.ExpressionStatement).expression != null);\n\n this.replaceWith(blockStatement(shouldInsertCurrentNode ? [node] : []));\n // @ts-expect-error Fixme: refine nodes to t.BlockStatement[\"body\"] when this is a BlockStatement path\n return this.pushContainer(\"body\", nodes);\n } else {\n throw new Error(\n \"We don't know what to do with this node type. \" +\n \"We were previously a Statement but we can't fit in here?\",\n );\n }\n}\n\n/**\n * Update all sibling node paths after `fromIndex` by `incrementBy`.\n */\n\nexport function updateSiblingKeys(\n this: NodePath,\n fromIndex: number,\n incrementBy: number,\n) {\n if (!this.parent) return;\n\n const paths = getCachedPaths(this.hub, this.parent) || ([] as never[]);\n\n for (const [, path] of paths) {\n if (typeof path.key === \"number\" && path.key >= fromIndex) {\n path.key += incrementBy;\n }\n }\n}\n\nexport function _verifyNodeList<N extends t.Node>(\n this: NodePath,\n nodes: N | N[],\n): N[] {\n if (!nodes) {\n return [];\n }\n\n if (!Array.isArray(nodes)) {\n nodes = [nodes];\n }\n\n for (let i = 0; i < nodes.length; i++) {\n const node = nodes[i];\n let msg;\n\n if (!node) {\n msg = \"has falsy node\";\n } else if (typeof node !== \"object\") {\n msg = \"contains a non-object node\";\n } else if (!node.type) {\n msg = \"without a type\";\n } else if (node instanceof NodePath) {\n msg = \"has a NodePath when it expected a raw object\";\n }\n\n if (msg) {\n const type = Array.isArray(node) ? \"array\" : typeof node;\n throw new Error(\n `Node list ${msg} with the index of ${i} and type of ${type}`,\n );\n }\n }\n\n return nodes;\n}\n\nexport function unshiftContainer<N extends t.Node, K extends keyof N & string>(\n this: NodePath<N>,\n listKey: K,\n nodes: N[K] extends (infer E)[]\n ? E | E[]\n : // todo: refine to t.Node[]\n // ? E extends t.Node\n // ? E | E[]\n // : never\n never,\n) {\n // todo: NodePaths<Nodes>\n this._assertUnremoved();\n\n // @ts-expect-error fixme\n nodes = this._verifyNodeList(nodes);\n\n // get the first path and insert our nodes before it, if it doesn't exist then it\n // doesn't matter, our nodes will be inserted anyway\n const path = NodePath.get({\n parentPath: this,\n parent: this.node,\n container: this.node[listKey] as unknown as t.Node | t.Node[],\n listKey,\n key: 0,\n }).setContext(this.context);\n\n return path._containerInsertBefore(\n // @ts-expect-error typings needed to narrow down nodes as t.Node[]\n nodes,\n );\n}\n\nexport function pushContainer<N extends t.Node, K extends keyof N & string>(\n this: NodePath<N>,\n listKey: K,\n nodes: N[K] extends (infer E)[]\n ? E | E[]\n : // todo: refine to t.Node[]\n // ? E extends t.Node\n // ? E | E[]\n // : never\n never,\n) {\n this._assertUnremoved();\n\n const verifiedNodes = this._verifyNodeList(\n // @ts-expect-error refine typings\n nodes,\n );\n\n // get an invisible path that represents the last node + 1 and replace it with our\n // nodes, effectively inlining it\n\n const container = this.node[listKey];\n const path = NodePath.get({\n parentPath: this,\n parent: this.node,\n container: container as unknown as t.Node | t.Node[],\n listKey,\n // @ts-expect-error TS cannot infer that container is t.Node[]\n key: container.length,\n }).setContext(this.context);\n\n return path.replaceWithMultiple(verifiedNodes);\n}\n\n/**\n * Hoist the current node to the highest scope possible and return a UID\n * referencing it.\n */\nexport function hoist<T extends t.Node>(\n this: NodePath<T>,\n scope: Scope = this.scope,\n) {\n const hoister = new PathHoister<T>(this, scope);\n return hoister.run();\n}\n"],"mappings":";;;;;;;;;;;;;;;AAEA,IAAAA,MAAA,GAAAC,OAAA;AACA,IAAAC,QAAA,GAAAD,OAAA;AACA,IAAAE,MAAA,GAAAF,OAAA;AACA,IAAAG,EAAA,GAAAH,OAAA;AAgBsB;EAfpBI,uBAAuB;EACvBC,gBAAgB;EAChBC,oBAAoB;EACpBC,cAAc;EACdC,cAAc;EACdC,SAAS;EACTC,mBAAmB;EACnBC,sBAAsB;EACtBC,gBAAgB;EAChBC,wBAAwB;EACxBC,YAAY;EACZC,YAAY;EACZC,oBAAoB;EACpBC,OAAO;EACPC;AAAc,IAAAf,EAAA;AAST,SAASgB,YAAYA,CAE1BC,MAAyB,EACb;EACZ,IAAI,CAACC,gBAAgB,CAAC,CAAC;EAEvB,MAAMC,KAAK,GAAG,IAAI,CAACC,eAAe,CAACH,MAAM,CAAC;EAE1C,MAAM;IAAEI,UAAU;IAAEC;EAAO,CAAC,GAAG,IAAI;EAEnC,IACED,UAAU,CAACE,qBAAqB,CAAC,CAAC,IAClCF,UAAU,CAACG,kBAAkB,CAAC,CAAC,IAQ/Bd,wBAAwB,CAACY,MAAM,CAAC,IAC/BD,UAAU,CAACI,0BAA0B,CAAC,CAAC,IAAI,IAAI,CAACC,aAAa,CAAC,CAAE,EACjE;IACA,OAAOL,UAAU,CAACL,YAAY,CAACG,KAAK,CAAC;EACvC,CAAC,MAAM,IACJ,IAAI,CAACQ,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAACC,YAAY,CAAC,CAAC,IACrDP,UAAU,CAACQ,cAAc,CAAC,CAAC,IAAI,IAAI,CAACC,GAAG,KAAK,MAAO,EACpD;IACA,IAAI,IAAI,CAACC,IAAI,EAAEZ,KAAK,CAACa,IAAI,CAAC,IAAI,CAACD,IAAI,CAAC;IAEpC,OAAO,IAAI,CAACE,+BAA+B,CAACd,KAAK,CAAC;EACpD,CAAC,MAAM,IAAIe,KAAK,CAACC,OAAO,CAAC,IAAI,CAACC,SAAS,CAAC,EAAE;IACxC,OAAO,IAAI,CAACC,sBAAsB,CAAClB,KAAK,CAAC;EAC3C,CAAC,MAAM,IAAI,IAAI,CAACmB,kBAAkB,CAAC,CAAC,EAAE;IACpC,MAAMP,IAAI,GAAG,IAAI,CAACA,IAAmB;IACrC,MAAMQ,uBAAuB,GAC3BR,IAAI,KACH,CAAC,IAAI,CAACR,qBAAqB,CAAC,CAAC,IAC3BQ,IAAI,CAA2BS,UAAU,IAAI,IAAI,CAAC;IAEvD,IAAI,CAACC,WAAW,CAACrC,cAAc,CAACmC,uBAAuB,GAAG,CAACR,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IACvE,OAAQ,IAAI,CAAgCW,gBAAgB,CAC1D,MAAM,EAENvB,KACF,CAAC;EACH,CAAC,MAAM;IACL,MAAM,IAAIwB,KAAK,CACb,gDAAgD,GAC9C,0DACJ,CAAC;EACH;AACF;AAEO,SAASC,gBAAgBA,CAE9BC,IAAY,EACZ1B,KAAU,EACK;EACf,IAAI,CAAC2B,iBAAiB,CAACD,IAAI,EAAE1B,KAAK,CAAC4B,MAAM,CAAC;EAE1C,MAAMC,KAAoB,GAAG,EAAE;EAG/B,IAAI,CAACZ,SAAS,CAACa,MAAM,CAACJ,IAAI,EAAE,CAAC,EAAE,GAAG1B,KAAK,CAAC;EACxC,KAAK,IAAI+B,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG/B,KAAK,CAAC4B,MAAM,EAAEG,CAAC,EAAE,EAAE;IAAA,IAAAC,aAAA;IACrC,MAAMC,EAAE,GAAGP,IAAI,GAAGK,CAAC;IACnB,MAAMG,IAAI,GAAG,IAAI,CAACC,UAAU,CAACF,EAAE,CAAgB;IAC/CJ,KAAK,CAAChB,IAAI,CAACqB,IAAI,CAAC;IAEhB,KAAAF,aAAA,GAAI,IAAI,CAACI,OAAO,aAAZJ,aAAA,CAAcK,KAAK,EAAE;MACvBH,IAAI,CAACI,WAAW,CAAC,IAAI,CAACF,OAAO,CAAC;IAChC;EACF;EAEA,MAAMG,QAAQ,GAAG,IAAI,CAACC,iBAAiB,CAAC,CAAC;EAEzC,KAAK,MAAMN,IAAI,IAAIL,KAAK,EAAE;IACxBK,IAAI,CAACO,QAAQ,CAAC,CAAC;IACfP,IAAI,CAACQ,KAAK,CAAC,WAAW,CAAC;IAEvB,KAAK,MAAMN,OAAO,IAAIG,QAAQ,EAAE;MAC9BH,OAAO,CAACO,UAAU,CAACT,IAAI,EAAE,IAAI,CAAC;IAChC;EACF;EAEA,OAAOL,KAAK;AACd;AAEO,SAASX,sBAAsBA,CAEpClB,KAAU,EACV;EACA,OAAO,IAAI,CAACyB,gBAAgB,CAAC,IAAI,CAACd,GAAG,EAAYX,KAAK,CAAC;AACzD;AAEO,SAAS4C,qBAAqBA,CAEnC5C,KAAU,EACV;EACA,OAAO,IAAI,CAACyB,gBAAgB,CAAE,IAAI,CAACd,GAAG,GAAc,CAAC,EAAEX,KAAK,CAAC;AAC/D;AAEA,MAAM6C,IAAI,GAAOC,GAAQ,IAAKA,GAAG,CAACA,GAAG,CAAClB,MAAM,GAAG,CAAC,CAAC;AAEjD,SAASmB,4BAA4BA,CAACb,IAAc,EAAW;EAC7D,OACExC,oBAAoB,CAACwC,IAAI,CAAC/B,MAAM,CAAC,KAChC0C,IAAI,CAACX,IAAI,CAAC/B,MAAM,CAAC6C,WAAW,CAAC,KAAKd,IAAI,CAACtB,IAAI,IAC1CmC,4BAA4B,CAACb,IAAI,CAAChC,UAAU,CAAC,CAAC;AAEpD;AAEA,SAAS+C,0BAA0BA,CACjCrC,IAAY,EACZsC,KAAY,EAC6C;EACzD,IAAI,CAAC7D,sBAAsB,CAACuB,IAAI,CAAC,IAAI,CAACnB,YAAY,CAACmB,IAAI,CAACuC,IAAI,CAAC,EAAE;IAC7D,OAAO,KAAK;EACd;EAIA,MAAMC,UAAU,GAAGF,KAAK,CAACG,cAAc,CAAC,CAAC;EAIzC,OACED,UAAU,CAACE,aAAa,CAAC1C,IAAI,CAACuC,IAAI,CAACI,IAAI,CAAC,IACxCH,UAAU,CAACI,aAAa,CAAC5C,IAAI,CAACuC,IAAI,CAACI,IAAI,CAAC,CAACE,kBAAkB,CAAC7B,MAAM,IAAI,CAAC;AAE3E;AAOO,SAAS8B,WAAWA,CAEzB5D,MAAyB,EACb;EACZ,IAAI,CAACC,gBAAgB,CAAC,CAAC;EAEvB,IAAI,IAAI,CAACL,oBAAoB,CAAC,CAAC,EAAE;IAC/B,OAAOmD,IAAI,CAAC,IAAI,CAACc,GAAG,CAAC,aAAa,CAAC,CAAC,CAACD,WAAW,CAAC5D,MAAM,CAAC;EAC1D;EAEA,MAAME,KAAK,GAAG,IAAI,CAACC,eAAe,CAACH,MAAM,CAAC;EAE1C,MAAM;IAAEI,UAAU;IAAEC;EAAO,CAAC,GAAG,IAAI;EACnC,IACED,UAAU,CAACE,qBAAqB,CAAC,CAAC,IAClCF,UAAU,CAACG,kBAAkB,CAAC,CAAC,IAE/Bd,wBAAwB,CAACY,MAAM,CAAC,IAC/BD,UAAU,CAACI,0BAA0B,CAAC,CAAC,IAAI,IAAI,CAACC,aAAa,CAAC,CAAE,EACjE;IACA,OAAOL,UAAU,CAACwD,WAAW,CAC3B1D,KAAK,CAAC4D,GAAG,CAAChD,IAAI,IAAI;MAOhB,OAAOpB,YAAY,CAACoB,IAAI,CAAC,GAAGxB,mBAAmB,CAACwB,IAAI,CAAC,GAAGA,IAAI;IAC9D,CAAC,CACH,CAAC;EACH,CAAC,MAAM,IACJ,IAAI,CAACJ,UAAU,CAAC,YAAY,CAAC,IAC5B,CAAC,IAAI,CAACC,YAAY,CAAC,CAAC,IACpB,CAACP,UAAU,CAACO,YAAY,CAAC,CAAC,IAC3BP,UAAU,CAACQ,cAAc,CAAC,CAAC,IAAI,IAAI,CAACC,GAAG,KAAK,MAAO,EACpD;IACA,IAAI,IAAI,CAACC,IAAI,EAAE;MACb,MAAMA,IAAI,GAAG,IAAI,CAACA,IAA4C;MAC9D,IAAI;QAAEsC;MAAM,CAAC,GAAG,IAAI;MAEpB,IAAIA,KAAK,CAAChB,IAAI,CAAC2B,SAAS,CAAC,CAAC,EAAE;QAC1B9E,gBAAgB,CAAC6B,IAAI,CAAC;QAEtB,IAAI,CAACU,WAAW,CAACpC,cAAc,CAACJ,uBAAuB,CAAC,EAAE,EAAE8B,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;QACtE,IAAI,CAAC+C,GAAG,CAAC,aAAa,CAAC,CAA4BD,WAAW,CAAC1D,KAAK,CAAC;QACtE,OAAO,CAAC,IAAI,CAAC;MACf;MAEA,IAAI+C,4BAA4B,CAAC,IAAI,CAAC,EAAE;QACtC/C,KAAK,CAAC8D,OAAO,CAAClD,IAAI,CAAC;MACrB,CAAC,MAEI,IAAItB,gBAAgB,CAACsB,IAAI,CAAC,IAAIjB,OAAO,CAACiB,IAAI,CAACmD,MAAM,CAAC,EAAE;QACvD/D,KAAK,CAAC8D,OAAO,CAAClD,IAAI,CAAC;QAEnBZ,KAAK,CAACa,IAAI,CAACjB,cAAc,CAAC,CAAC,CAAC;MAC9B,CAAC,MAAM,IAAIqD,0BAA0B,CAACrC,IAAI,EAAEsC,KAAK,CAAC,EAAE;QAClDlD,KAAK,CAAC8D,OAAO,CAAClD,IAAI,CAAC;QACnBZ,KAAK,CAACa,IAAI,CAAC1B,SAAS,CAACyB,IAAI,CAACuC,IAAI,CAAC,CAAC;MAClC,CAAC,MAAM,IAAID,KAAK,CAACc,MAAM,CAACpD,IAAI,EAAE,IAAI,CAAC,EAAE;QAEnCZ,KAAK,CAACa,IAAI,CAACD,IAAI,CAAC;MAClB,CAAC,MAAM;QAGL,IAAIV,UAAU,CAAC+D,QAAQ,CAAC;UAAEC,QAAQ,EAAE,IAAI;UAAEvD,GAAG,EAAEC;QAAK,CAAC,CAAC,EAAE;UACtDsC,KAAK,GAAGA,KAAK,CAAC/C,MAAM;QACtB;QACA,MAAMgE,IAAI,GAAGjB,KAAK,CAACkB,6BAA6B,CAAC,CAAC;QAClDpE,KAAK,CAAC8D,OAAO,CACX1E,mBAAmB,CAIjBJ,oBAAoB,CAAC,GAAG,EAAEG,SAAS,CAACgF,IAAI,CAAC,EAAEvD,IAAI,CACjD,CACF,CAAC;QACDZ,KAAK,CAACa,IAAI,CAACzB,mBAAmB,CAACD,SAAS,CAACgF,IAAI,CAAC,CAAC,CAAC;MAClD;IACF;IAEA,OAAO,IAAI,CAACrD,+BAA+B,CAACd,KAAK,CAAC;EACpD,CAAC,MAAM,IAAIe,KAAK,CAACC,OAAO,CAAC,IAAI,CAACC,SAAS,CAAC,EAAE;IACxC,OAAO,IAAI,CAAC2B,qBAAqB,CAAC5C,KAAK,CAAC;EAC1C,CAAC,MAAM,IAAI,IAAI,CAACmB,kBAAkB,CAAC,CAAC,EAAE;IACpC,MAAMP,IAAI,GAAG,IAAI,CAACA,IAAmB;IACrC,MAAMQ,uBAAuB,GAC3BR,IAAI,KACH,CAAC,IAAI,CAACR,qBAAqB,CAAC,CAAC,IAC3BQ,IAAI,CAA2BS,UAAU,IAAI,IAAI,CAAC;IAEvD,IAAI,CAACC,WAAW,CAACrC,cAAc,CAACmC,uBAAuB,GAAG,CAACR,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IAEvE,OAAO,IAAI,CAACyD,aAAa,CAAC,MAAM,EAAErE,KAAK,CAAC;EAC1C,CAAC,MAAM;IACL,MAAM,IAAIwB,KAAK,CACb,gDAAgD,GAC9C,0DACJ,CAAC;EACH;AACF;AAMO,SAASG,iBAAiBA,CAE/B2C,SAAiB,EACjBC,WAAmB,EACnB;EACA,IAAI,CAAC,IAAI,CAACpE,MAAM,EAAE;EAElB,MAAM0B,KAAK,GAAG,IAAA2C,qBAAc,EAAC,IAAI,CAACC,GAAG,EAAE,IAAI,CAACtE,MAAM,CAAC,IAAK,EAAc;EAEtE,KAAK,MAAM,GAAG+B,IAAI,CAAC,IAAIL,KAAK,EAAE;IAC5B,IAAI,OAAOK,IAAI,CAACvB,GAAG,KAAK,QAAQ,IAAIuB,IAAI,CAACvB,GAAG,IAAI2D,SAAS,EAAE;MACzDpC,IAAI,CAACvB,GAAG,IAAI4D,WAAW;IACzB;EACF;AACF;AAEO,SAAStE,eAAeA,CAE7BD,KAAc,EACT;EACL,IAAI,CAACA,KAAK,EAAE;IACV,OAAO,EAAE;EACX;EAEA,IAAI,CAACe,KAAK,CAACC,OAAO,CAAChB,KAAK,CAAC,EAAE;IACzBA,KAAK,GAAG,CAACA,KAAK,CAAC;EACjB;EAEA,KAAK,IAAI+B,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG/B,KAAK,CAAC4B,MAAM,EAAEG,CAAC,EAAE,EAAE;IACrC,MAAMnB,IAAI,GAAGZ,KAAK,CAAC+B,CAAC,CAAC;IACrB,IAAI2C,GAAG;IAEP,IAAI,CAAC9D,IAAI,EAAE;MACT8D,GAAG,GAAG,gBAAgB;IACxB,CAAC,MAAM,IAAI,OAAO9D,IAAI,KAAK,QAAQ,EAAE;MACnC8D,GAAG,GAAG,4BAA4B;IACpC,CAAC,MAAM,IAAI,CAAC9D,IAAI,CAAC+D,IAAI,EAAE;MACrBD,GAAG,GAAG,gBAAgB;IACxB,CAAC,MAAM,IAAI9D,IAAI,YAAYgE,cAAQ,EAAE;MACnCF,GAAG,GAAG,8CAA8C;IACtD;IAEA,IAAIA,GAAG,EAAE;MACP,MAAMC,IAAI,GAAG5D,KAAK,CAACC,OAAO,CAACJ,IAAI,CAAC,GAAG,OAAO,GAAG,OAAOA,IAAI;MACxD,MAAM,IAAIY,KAAK,CACZ,aAAYkD,GAAI,sBAAqB3C,CAAE,gBAAe4C,IAAK,EAC9D,CAAC;IACH;EACF;EAEA,OAAO3E,KAAK;AACd;AAEO,SAASuB,gBAAgBA,CAE9BsD,OAAU,EACV7E,KAMS,EACT;EAEA,IAAI,CAACD,gBAAgB,CAAC,CAAC;EAGvBC,KAAK,GAAG,IAAI,CAACC,eAAe,CAACD,KAAK,CAAC;EAInC,MAAMkC,IAAI,GAAG0C,cAAQ,CAACjB,GAAG,CAAC;IACxBzD,UAAU,EAAE,IAAI;IAChBC,MAAM,EAAE,IAAI,CAACS,IAAI;IACjBK,SAAS,EAAE,IAAI,CAACL,IAAI,CAACiE,OAAO,CAAiC;IAC7DA,OAAO;IACPlE,GAAG,EAAE;EACP,CAAC,CAAC,CAACmE,UAAU,CAAC,IAAI,CAAC1C,OAAO,CAAC;EAE3B,OAAOF,IAAI,CAAChB,sBAAsB,CAEhClB,KACF,CAAC;AACH;AAEO,SAASqE,aAAaA,CAE3BQ,OAAU,EACV7E,KAMS,EACT;EACA,IAAI,CAACD,gBAAgB,CAAC,CAAC;EAEvB,MAAMgF,aAAa,GAAG,IAAI,CAAC9E,eAAe,CAExCD,KACF,CAAC;EAKD,MAAMiB,SAAS,GAAG,IAAI,CAACL,IAAI,CAACiE,OAAO,CAAC;EACpC,MAAM3C,IAAI,GAAG0C,cAAQ,CAACjB,GAAG,CAAC;IACxBzD,UAAU,EAAE,IAAI;IAChBC,MAAM,EAAE,IAAI,CAACS,IAAI;IACjBK,SAAS,EAAEA,SAAyC;IACpD4D,OAAO;IAEPlE,GAAG,EAAEM,SAAS,CAACW;EACjB,CAAC,CAAC,CAACkD,UAAU,CAAC,IAAI,CAAC1C,OAAO,CAAC;EAE3B,OAAOF,IAAI,CAAC8C,mBAAmB,CAACD,aAAa,CAAC;AAChD;AAMO,SAASE,KAAKA,CAEnB/B,KAAY,GAAG,IAAI,CAACA,KAAK,EACzB;EACA,MAAMgC,OAAO,GAAG,IAAIC,gBAAW,CAAI,IAAI,EAAEjC,KAAK,CAAC;EAC/C,OAAOgC,OAAO,CAACE,GAAG,CAAC,CAAC;AACtB"}
|