flow-upgrade 2.34.0 → 2.36.0
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/dist/Styled.js +0 -5
- package/dist/Types.js +2 -2
- package/dist/bin/runSpecificCodemod.js +2 -22
- package/dist/bin/upgrade.js +1 -9
- package/dist/codemodUtils/getClassMemberName.js +0 -3
- package/dist/codemodUtils/replaceMethodWithArrowProp.js +0 -2
- package/dist/codemods/collapseObjectInitialization.js +2 -55
- package/dist/codemods/convertImplicitInexactObjectTypes.js +2 -7
- package/dist/codemods/convertLegacyUtilityTypes.js +2 -17
- package/dist/codemods/convertShapeToPartial.js +2 -7
- package/dist/codemods/eliminateAbstractComponent.js +2 -18
- package/dist/codemods/removeAnnotationsInDestructuring.js +2 -8
- package/dist/codemods/removeDuplicateClassProperties.js +2 -60
- package/dist/codemods/removeExplicitlyExactObjectTypeSyntax.js +2 -7
- package/dist/codemods/renamePartial.js +2 -7
- package/dist/codemods/replaceReactDollarUtilityTypes.js +2 -13
- package/dist/codemods/replaceTemporaryTypes.js +2 -14
- package/dist/codemods/typeCastToAsExpression.js +2 -9
- package/dist/codemods/typeParameterBoundExactEmptyObjectToInexact.js +2 -9
- package/dist/findFlowFiles.js +1 -21
- package/dist/runCodemods.js +1 -9
- package/dist/upgrade.js +1 -22
- package/dist/upgrades/0.170.0/index.js +3 -7
- package/dist/upgrades/0.176.0/index.js +3 -7
- package/dist/upgrades/0.201.0/index.js +3 -7
- package/dist/upgrades/0.84.0/index.js +3 -7
- package/dist/upgrades/index.js +2 -9
- package/dist/utils/redirectConsole.js +1 -12
- package/package.json +1 -1
|
@@ -4,50 +4,36 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.default = void 0;
|
|
7
|
-
|
|
8
7
|
var _getClassMemberName = require("../codemodUtils/getClassMemberName");
|
|
9
|
-
|
|
10
8
|
var _replaceMethodWithArrowProp = require("../codemodUtils/replaceMethodWithArrowProp");
|
|
11
|
-
|
|
12
9
|
var _Types = require("../Types");
|
|
13
|
-
|
|
14
10
|
function getKind(member) {
|
|
15
11
|
switch (member.type) {
|
|
16
12
|
case 'MethodDefinition':
|
|
17
13
|
switch (member.kind) {
|
|
18
14
|
case 'get':
|
|
19
15
|
return 'Getter';
|
|
20
|
-
|
|
21
16
|
case 'set':
|
|
22
17
|
return 'Setter';
|
|
23
|
-
|
|
24
18
|
case 'method':
|
|
25
19
|
case 'constructor':
|
|
26
20
|
return 'Method';
|
|
27
21
|
}
|
|
28
|
-
|
|
29
22
|
throw new Error(`Unexpected method kind: ${member.kind}`);
|
|
30
|
-
|
|
31
23
|
case 'PropertyDefinition':
|
|
32
24
|
return 'Property';
|
|
33
25
|
}
|
|
34
|
-
|
|
35
26
|
throw new Error(`Unexpected member type: ${member.type}`);
|
|
36
27
|
}
|
|
37
|
-
|
|
38
28
|
function findDuplicates(membersMap) {
|
|
39
29
|
const toDelete = [];
|
|
40
|
-
|
|
41
30
|
for (const [, members] of membersMap) {
|
|
42
31
|
if (members.length === 1) {
|
|
43
32
|
continue;
|
|
44
33
|
}
|
|
45
|
-
|
|
46
34
|
let lastMember = null;
|
|
47
|
-
|
|
48
35
|
for (const member of members) {
|
|
49
36
|
const kind = getKind(member);
|
|
50
|
-
|
|
51
37
|
if (lastMember == null) {
|
|
52
38
|
lastMember = {
|
|
53
39
|
kind,
|
|
@@ -55,7 +41,6 @@ function findDuplicates(membersMap) {
|
|
|
55
41
|
};
|
|
56
42
|
continue;
|
|
57
43
|
}
|
|
58
|
-
|
|
59
44
|
switch (lastMember.kind) {
|
|
60
45
|
case 'GetterSetter':
|
|
61
46
|
if (kind === 'Getter') {
|
|
@@ -69,9 +54,7 @@ function findDuplicates(membersMap) {
|
|
|
69
54
|
toDelete.push(oldSetter);
|
|
70
55
|
continue;
|
|
71
56
|
}
|
|
72
|
-
|
|
73
57
|
break;
|
|
74
|
-
|
|
75
58
|
case 'Getter':
|
|
76
59
|
if (kind === 'Setter') {
|
|
77
60
|
lastMember = {
|
|
@@ -81,9 +64,7 @@ function findDuplicates(membersMap) {
|
|
|
81
64
|
};
|
|
82
65
|
continue;
|
|
83
66
|
}
|
|
84
|
-
|
|
85
67
|
break;
|
|
86
|
-
|
|
87
68
|
case 'Setter':
|
|
88
69
|
if (kind === 'Getter') {
|
|
89
70
|
lastMember = {
|
|
@@ -93,28 +74,23 @@ function findDuplicates(membersMap) {
|
|
|
93
74
|
};
|
|
94
75
|
continue;
|
|
95
76
|
}
|
|
96
|
-
|
|
97
77
|
break;
|
|
98
78
|
}
|
|
99
|
-
|
|
100
79
|
if (lastMember.kind === 'GetterSetter') {
|
|
101
80
|
toDelete.push(lastMember.getter);
|
|
102
81
|
toDelete.push(lastMember.setter);
|
|
103
82
|
} else {
|
|
104
83
|
toDelete.push(lastMember.member);
|
|
105
84
|
}
|
|
106
|
-
|
|
107
85
|
lastMember = {
|
|
108
86
|
kind,
|
|
109
87
|
member
|
|
110
88
|
};
|
|
111
89
|
}
|
|
112
90
|
}
|
|
113
|
-
|
|
114
91
|
return toDelete;
|
|
115
92
|
}
|
|
116
|
-
|
|
117
|
-
var _default = (0, _Types.codemod)({
|
|
93
|
+
var _default = exports.default = (0, _Types.codemod)({
|
|
118
94
|
title: 'Remove Duplicate Class Properties',
|
|
119
95
|
describe: 'Removes useless duplicate class properties and fixes bad constructor binding in those classes',
|
|
120
96
|
transform: context => {
|
|
@@ -123,125 +99,91 @@ var _default = (0, _Types.codemod)({
|
|
|
123
99
|
'ClassDeclaration, ClassExpression'(node) {
|
|
124
100
|
const staticMembers = new Map();
|
|
125
101
|
const instanceMembers = new Map();
|
|
126
|
-
|
|
127
102
|
for (const member of node.body.body) {
|
|
128
103
|
const membersMap = member.static ? staticMembers : instanceMembers;
|
|
129
104
|
const name = (0, _getClassMemberName.getClassMemberName)(member);
|
|
130
|
-
|
|
131
105
|
if (name == null) {
|
|
132
106
|
continue;
|
|
133
107
|
}
|
|
134
|
-
|
|
135
108
|
const existingMember = membersMap.get(name);
|
|
136
|
-
|
|
137
109
|
if (existingMember == null) {
|
|
138
110
|
membersMap.set(name, [member]);
|
|
139
111
|
} else {
|
|
140
112
|
existingMember.push(member);
|
|
141
113
|
}
|
|
142
114
|
}
|
|
143
|
-
|
|
144
115
|
const toDelete = new Set(findDuplicates(staticMembers).concat(findDuplicates(instanceMembers)));
|
|
145
|
-
|
|
146
116
|
if (toDelete.size === 0) {
|
|
147
117
|
return;
|
|
148
118
|
}
|
|
149
|
-
|
|
150
119
|
for (const memberToDelete of toDelete) {
|
|
151
120
|
var _memberToDelete$value;
|
|
152
|
-
|
|
153
121
|
if (memberToDelete.type === 'PropertyDefinition' && ((_memberToDelete$value = memberToDelete.value) === null || _memberToDelete$value === void 0 ? void 0 : _memberToDelete$value.type) === 'CallExpression') {
|
|
154
122
|
console.log(context.buildCodeFrame(memberToDelete.value, 'Deleted a property with a CallExpression value. You should double check this was safe.'));
|
|
155
123
|
}
|
|
156
|
-
|
|
157
124
|
context.removeNode(memberToDelete);
|
|
158
125
|
}
|
|
159
|
-
|
|
160
126
|
const newInstanceMembers = new Map();
|
|
161
|
-
|
|
162
127
|
for (const member of node.body.body) {
|
|
163
128
|
if (toDelete.has(member)) {
|
|
164
129
|
continue;
|
|
165
130
|
}
|
|
166
|
-
|
|
167
131
|
if (member.static) {
|
|
168
132
|
continue;
|
|
169
133
|
}
|
|
170
|
-
|
|
171
134
|
const name = (0, _getClassMemberName.getClassMemberName)(member);
|
|
172
|
-
|
|
173
135
|
if (name == null) {
|
|
174
136
|
continue;
|
|
175
137
|
}
|
|
176
|
-
|
|
177
138
|
const kind = getKind(member);
|
|
178
139
|
newInstanceMembers.set(name, {
|
|
179
140
|
kind,
|
|
180
141
|
member
|
|
181
142
|
});
|
|
182
143
|
}
|
|
183
|
-
|
|
184
144
|
classStack = {
|
|
185
145
|
current: node,
|
|
186
146
|
instanceMembers: newInstanceMembers,
|
|
187
147
|
parent: classStack
|
|
188
148
|
};
|
|
189
149
|
},
|
|
190
|
-
|
|
191
150
|
'MethodDefinition[kind = "constructor"] ExpressionStatement > AssignmentExpression[operator = "="] > MemberExpression[object.type = "ThisExpression"].left'(node) {
|
|
192
151
|
if (!classStack) {
|
|
193
152
|
return;
|
|
194
153
|
}
|
|
195
|
-
|
|
196
154
|
const instanceMembers = classStack.instanceMembers;
|
|
197
|
-
|
|
198
155
|
if (node.property.type !== 'Identifier') {
|
|
199
156
|
return;
|
|
200
157
|
}
|
|
201
|
-
|
|
202
158
|
const subjectName = node.property.name;
|
|
203
159
|
const member = instanceMembers.get(subjectName);
|
|
204
|
-
|
|
205
160
|
if ((member === null || member === void 0 ? void 0 : member.kind) !== 'Method') {
|
|
206
161
|
return;
|
|
207
162
|
}
|
|
208
|
-
|
|
209
163
|
const assignmentExpr = node.parent;
|
|
210
164
|
const exprStatement = assignmentExpr.parent;
|
|
211
|
-
|
|
212
165
|
if (assignmentExpr.type !== 'AssignmentExpression' || exprStatement.type !== 'ExpressionStatement') {
|
|
213
166
|
throw new Error('this cannot happen');
|
|
214
167
|
}
|
|
215
|
-
|
|
216
168
|
const right = assignmentExpr.right;
|
|
217
|
-
|
|
218
169
|
if (right.type !== 'CallExpression' || right.arguments.length !== 1 || right.arguments[0].type !== 'ThisExpression' || right.callee.type !== 'MemberExpression' || right.callee.computed || right.callee.property.type !== 'Identifier' || right.callee.property.name !== 'bind' || right.callee.object.type !== 'MemberExpression' || right.callee.object.computed || right.callee.object.object.type !== 'ThisExpression' || right.callee.object.property.type !== 'Identifier' || right.callee.object.property.name !== subjectName) {
|
|
219
170
|
console.log(context.buildCodeFrame(right, `${subjectName} was reassigned, but not to a bind. You can probably manually correct this.`));
|
|
220
171
|
return;
|
|
221
172
|
}
|
|
222
|
-
|
|
223
173
|
context.removeStatement(exprStatement);
|
|
224
174
|
const method = member.member;
|
|
225
|
-
|
|
226
175
|
if (method.type !== 'MethodDefinition') {
|
|
227
176
|
throw new Error('this cannot happen');
|
|
228
177
|
}
|
|
229
|
-
|
|
230
178
|
(0, _replaceMethodWithArrowProp.replaceMethodWithArrowProp)(context, method, subjectName);
|
|
231
179
|
},
|
|
232
|
-
|
|
233
180
|
'ClassDeclaration, ClassExpression:exit'(node) {
|
|
234
181
|
var _classStack;
|
|
235
|
-
|
|
236
182
|
if (classStack && ((_classStack = classStack) === null || _classStack === void 0 ? void 0 : _classStack.current) === node) {
|
|
237
183
|
var _classStack2;
|
|
238
|
-
|
|
239
184
|
classStack = (_classStack2 = classStack) === null || _classStack2 === void 0 ? void 0 : _classStack2.parent;
|
|
240
185
|
}
|
|
241
186
|
}
|
|
242
|
-
|
|
243
187
|
};
|
|
244
188
|
}
|
|
245
|
-
});
|
|
246
|
-
|
|
247
|
-
exports.default = _default;
|
|
189
|
+
});
|
|
@@ -4,10 +4,8 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.default = void 0;
|
|
7
|
-
|
|
8
7
|
var _Types = require("../Types");
|
|
9
|
-
|
|
10
|
-
var _default = (0, _Types.codemod)({
|
|
8
|
+
var _default = exports.default = (0, _Types.codemod)({
|
|
11
9
|
title: 'Remove explicitly exact object type syntax',
|
|
12
10
|
describe: 'Convert explicitly exact object type syntax `{| |}` to be just be `{ }`. To be done after you turn on `exact_by_default=true` in your `.flowconfig`.',
|
|
13
11
|
transform: context => {
|
|
@@ -17,9 +15,6 @@ var _default = (0, _Types.codemod)({
|
|
|
17
15
|
exact: false
|
|
18
16
|
});
|
|
19
17
|
}
|
|
20
|
-
|
|
21
18
|
};
|
|
22
19
|
}
|
|
23
|
-
});
|
|
24
|
-
|
|
25
|
-
exports.default = _default;
|
|
20
|
+
});
|
|
@@ -4,10 +4,8 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.default = void 0;
|
|
7
|
-
|
|
8
7
|
var _Types = require("../Types");
|
|
9
|
-
|
|
10
|
-
var _default = (0, _Types.codemod)({
|
|
8
|
+
var _default = exports.default = (0, _Types.codemod)({
|
|
11
9
|
title: 'Rename `$Partial` to `Partial`',
|
|
12
10
|
describe: 'Renames the `$Partial` type utility to `Partial`.',
|
|
13
11
|
transform: context => {
|
|
@@ -17,9 +15,6 @@ var _default = (0, _Types.codemod)({
|
|
|
17
15
|
name: 'Partial'
|
|
18
16
|
});
|
|
19
17
|
}
|
|
20
|
-
|
|
21
18
|
};
|
|
22
19
|
}
|
|
23
|
-
});
|
|
24
|
-
|
|
25
|
-
exports.default = _default;
|
|
20
|
+
});
|
|
@@ -4,14 +4,10 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.default = void 0;
|
|
7
|
-
|
|
8
7
|
var _hermesTransform = require("hermes-transform");
|
|
9
|
-
|
|
10
8
|
var _Types = require("../Types");
|
|
11
|
-
|
|
12
9
|
const UTILITY_TYPES = new Set(['React$ComponentType', 'React$AbstractComponent', 'React$Element', 'React$MixedElement', 'React$ElementType', 'React$Key', 'React$Ref', 'React$RefSetter', 'React$Node', 'React$Context', 'React$Portal', 'React$ElementProps', 'React$ElementConfig', 'React$ElementRef', 'React$Config', 'React$Config', 'React$RefObject']);
|
|
13
|
-
|
|
14
|
-
var _default = (0, _Types.codemod)({
|
|
10
|
+
var _default = exports.default = (0, _Types.codemod)({
|
|
15
11
|
title: 'Replace React$SomeUtilityType with React.SomeUtilityType.',
|
|
16
12
|
transform: context => {
|
|
17
13
|
return {
|
|
@@ -19,13 +15,10 @@ var _default = (0, _Types.codemod)({
|
|
|
19
15
|
if (typeof node.id.name !== 'string') {
|
|
20
16
|
return;
|
|
21
17
|
}
|
|
22
|
-
|
|
23
18
|
const utilTypeName = node.id.name;
|
|
24
|
-
|
|
25
19
|
if (!UTILITY_TYPES.has(utilTypeName)) {
|
|
26
20
|
return;
|
|
27
21
|
}
|
|
28
|
-
|
|
29
22
|
const newNode = _hermesTransform.t.GenericTypeAnnotation({
|
|
30
23
|
id: _hermesTransform.t.QualifiedTypeIdentifier({
|
|
31
24
|
id: _hermesTransform.t.Identifier({
|
|
@@ -37,12 +30,8 @@ var _default = (0, _Types.codemod)({
|
|
|
37
30
|
}),
|
|
38
31
|
typeParameters: node.typeParameters
|
|
39
32
|
});
|
|
40
|
-
|
|
41
33
|
context.replaceNode(node, newNode);
|
|
42
34
|
}
|
|
43
|
-
|
|
44
35
|
};
|
|
45
36
|
}
|
|
46
|
-
});
|
|
47
|
-
|
|
48
|
-
exports.default = _default;
|
|
37
|
+
});
|
|
@@ -4,19 +4,15 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.default = void 0;
|
|
7
|
-
|
|
8
7
|
var _hermesTransform = require("hermes-transform");
|
|
9
|
-
|
|
10
8
|
var _Types = require("../Types");
|
|
11
|
-
|
|
12
|
-
var _default = (0, _Types.codemod)({
|
|
9
|
+
var _default = exports.default = (0, _Types.codemod)({
|
|
13
10
|
title: 'Replace $TEMPORARY$ types',
|
|
14
11
|
describe: ['Converts:', ' - `$TEMPORARY$object<{props}>` to `$ReadOnly<{props}>`', ' - `$TEMPORARY$array<T>` to `$ReadOnlyArray<T>`', ' - `$TEMPORARY$number<42>` annotations to `number`', ' - `$TEMPORARY$string<"foo">` annotations to `string`'].join('\n'),
|
|
15
12
|
transform: context => {
|
|
16
13
|
return {
|
|
17
14
|
GenericTypeAnnotation(node) {
|
|
18
15
|
const id = node.id;
|
|
19
|
-
|
|
20
16
|
if (id.type === 'Identifier' && id.name === '$TEMPORARY$object' && node.typeParameters != null) {
|
|
21
17
|
context.modifyNodeInPlace(node, {
|
|
22
18
|
id: _hermesTransform.t.Identifier({
|
|
@@ -24,7 +20,6 @@ var _default = (0, _Types.codemod)({
|
|
|
24
20
|
})
|
|
25
21
|
});
|
|
26
22
|
}
|
|
27
|
-
|
|
28
23
|
if (id.type === 'Identifier' && id.name === '$TEMPORARY$array' && node.typeParameters != null) {
|
|
29
24
|
context.modifyNodeInPlace(node, {
|
|
30
25
|
id: _hermesTransform.t.Identifier({
|
|
@@ -32,26 +27,19 @@ var _default = (0, _Types.codemod)({
|
|
|
32
27
|
})
|
|
33
28
|
});
|
|
34
29
|
}
|
|
35
|
-
|
|
36
30
|
if (id.type === 'Identifier' && id.name === '$TEMPORARY$number') {
|
|
37
31
|
const new_node = _hermesTransform.t.NumberTypeAnnotation();
|
|
38
|
-
|
|
39
32
|
context.replaceNode(node, new_node, {
|
|
40
33
|
keepComments: true
|
|
41
34
|
});
|
|
42
35
|
}
|
|
43
|
-
|
|
44
36
|
if (id.type === 'Identifier' && id.name === '$TEMPORARY$string') {
|
|
45
37
|
const new_node = _hermesTransform.t.StringTypeAnnotation();
|
|
46
|
-
|
|
47
38
|
context.replaceNode(node, new_node, {
|
|
48
39
|
keepComments: true
|
|
49
40
|
});
|
|
50
41
|
}
|
|
51
42
|
}
|
|
52
|
-
|
|
53
43
|
};
|
|
54
44
|
}
|
|
55
|
-
});
|
|
56
|
-
|
|
57
|
-
exports.default = _default;
|
|
45
|
+
});
|
|
@@ -4,11 +4,8 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.default = void 0;
|
|
7
|
-
|
|
8
7
|
var _Types = require("../Types");
|
|
9
|
-
|
|
10
8
|
var _hermesTransform = require("hermes-transform");
|
|
11
|
-
|
|
12
9
|
function convertTypeCast(node) {
|
|
13
10
|
const {
|
|
14
11
|
expression,
|
|
@@ -21,8 +18,7 @@ function convertTypeCast(node) {
|
|
|
21
18
|
typeAnnotation
|
|
22
19
|
});
|
|
23
20
|
}
|
|
24
|
-
|
|
25
|
-
var _default = (0, _Types.codemod)({
|
|
21
|
+
var _default = exports.default = (0, _Types.codemod)({
|
|
26
22
|
title: 'Update type casting syntax',
|
|
27
23
|
describe: 'Convert type cast expressions `(<expr>: <type>)` to as expressions `<expr> as <type>`',
|
|
28
24
|
transform: context => {
|
|
@@ -33,9 +29,6 @@ var _default = (0, _Types.codemod)({
|
|
|
33
29
|
});
|
|
34
30
|
context.skipTraversal();
|
|
35
31
|
}
|
|
36
|
-
|
|
37
32
|
};
|
|
38
33
|
}
|
|
39
|
-
});
|
|
40
|
-
|
|
41
|
-
exports.default = _default;
|
|
34
|
+
});
|
|
@@ -4,12 +4,9 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.default = void 0;
|
|
7
|
-
|
|
8
7
|
var _Types = require("../Types");
|
|
9
|
-
|
|
10
8
|
var _hermesTransform = require("hermes-transform");
|
|
11
|
-
|
|
12
|
-
var _default = (0, _Types.codemod)({
|
|
9
|
+
var _default = exports.default = (0, _Types.codemod)({
|
|
13
10
|
title: 'Replace `T: {}` with `T: {...}` in type parameter bounds',
|
|
14
11
|
describe: 'Replace `T: {}` with `T: {...}` in type parameter bounds',
|
|
15
12
|
transform: context => {
|
|
@@ -17,7 +14,6 @@ var _default = (0, _Types.codemod)({
|
|
|
17
14
|
TypeParameter(node) {
|
|
18
15
|
if (node.bound != null) {
|
|
19
16
|
const annotation = node.bound.typeAnnotation;
|
|
20
|
-
|
|
21
17
|
if (annotation.type === 'ObjectTypeAnnotation' && !annotation.inexact && annotation.properties.length === 0 && annotation.callProperties.length === 0 && annotation.indexers.length === 0 && annotation.internalSlots.length === 0) {
|
|
22
18
|
context.replaceNode(annotation, _hermesTransform.t.ObjectTypeAnnotation({
|
|
23
19
|
properties: [],
|
|
@@ -30,9 +26,6 @@ var _default = (0, _Types.codemod)({
|
|
|
30
26
|
}
|
|
31
27
|
}
|
|
32
28
|
}
|
|
33
|
-
|
|
34
29
|
};
|
|
35
30
|
}
|
|
36
|
-
});
|
|
37
|
-
|
|
38
|
-
exports.default = _default;
|
|
31
|
+
});
|
package/dist/findFlowFiles.js
CHANGED
|
@@ -5,19 +5,12 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.findFlowFiles = findFlowFiles;
|
|
7
7
|
exports.findFlowFilesWithSpinner = findFlowFilesWithSpinner;
|
|
8
|
-
|
|
9
8
|
var _path = _interopRequireDefault(require("path"));
|
|
10
|
-
|
|
11
9
|
var _fsExtra = _interopRequireDefault(require("fs-extra"));
|
|
12
|
-
|
|
13
10
|
var _ora = _interopRequireDefault(require("ora"));
|
|
14
|
-
|
|
15
11
|
var _chalk = _interopRequireDefault(require("chalk"));
|
|
16
|
-
|
|
17
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
18
|
-
|
|
12
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
19
13
|
const PRAGMA_BYTES = 5000;
|
|
20
|
-
|
|
21
14
|
async function findFlowFiles({
|
|
22
15
|
includeNonAtFlow,
|
|
23
16
|
rootDirectory
|
|
@@ -25,17 +18,13 @@ async function findFlowFiles({
|
|
|
25
18
|
const filePaths = [];
|
|
26
19
|
await processDirectory(rootDirectory);
|
|
27
20
|
return filePaths;
|
|
28
|
-
|
|
29
21
|
async function processDirectory(directory) {
|
|
30
22
|
const fileNames = await _fsExtra.default.readdir(directory);
|
|
31
23
|
await Promise.all(fileNames.map(fileName => processFilePath(directory, fileName)));
|
|
32
24
|
}
|
|
33
|
-
|
|
34
25
|
async function processFilePath(directory, fileName) {
|
|
35
26
|
const filePath = _path.default.join(directory, fileName);
|
|
36
|
-
|
|
37
27
|
const stats = await _fsExtra.default.lstat(filePath);
|
|
38
|
-
|
|
39
28
|
if (stats.isDirectory()) {
|
|
40
29
|
if (fileName !== 'node_modules' && fileName !== 'flow-typed' && fileName !== '__flowtests__') {
|
|
41
30
|
await processDirectory(filePath);
|
|
@@ -43,36 +32,29 @@ async function findFlowFiles({
|
|
|
43
32
|
} else if (stats.isFile()) {
|
|
44
33
|
const fileIsJsOrJsx = /\.jsx?$/.test(fileName);
|
|
45
34
|
const fileIsIgnored = fileName.endsWith('-flowtest.js');
|
|
46
|
-
|
|
47
35
|
if (fileIsJsOrJsx && !fileIsIgnored) {
|
|
48
36
|
await processJavaScriptFilePath(filePath, stats.size);
|
|
49
37
|
}
|
|
50
|
-
|
|
51
38
|
if (fileName.endsWith('.flow')) {
|
|
52
39
|
filePaths.push(filePath);
|
|
53
40
|
}
|
|
54
41
|
}
|
|
55
42
|
}
|
|
56
|
-
|
|
57
43
|
async function processJavaScriptFilePath(filePath, fileByteSize) {
|
|
58
44
|
if (includeNonAtFlow) {
|
|
59
45
|
filePaths.push(filePath);
|
|
60
46
|
return;
|
|
61
47
|
}
|
|
62
|
-
|
|
63
48
|
const file = await _fsExtra.default.open(filePath, 'r');
|
|
64
49
|
const bytes = Math.min(PRAGMA_BYTES, fileByteSize);
|
|
65
50
|
const buffer = Buffer.alloc(bytes);
|
|
66
51
|
await _fsExtra.default.read(file, buffer, 0, bytes, 0);
|
|
67
|
-
|
|
68
52
|
if (buffer.includes('@flow')) {
|
|
69
53
|
filePaths.push(filePath);
|
|
70
54
|
}
|
|
71
|
-
|
|
72
55
|
await _fsExtra.default.close(file);
|
|
73
56
|
}
|
|
74
57
|
}
|
|
75
|
-
|
|
76
58
|
async function findFlowFilesWithSpinner(rootDirectory, options) {
|
|
77
59
|
const spinner = (0, _ora.default)({
|
|
78
60
|
text: _chalk.default.italic.cyan('Finding all the Flow files to be upgraded...'),
|
|
@@ -92,11 +74,9 @@ async function findFlowFilesWithSpinner(rootDirectory, options) {
|
|
|
92
74
|
}
|
|
93
75
|
})();
|
|
94
76
|
spinner.stop();
|
|
95
|
-
|
|
96
77
|
if (!options.silent) {
|
|
97
78
|
console.log(`Found ${_chalk.default.bold.cyan(filePaths.length)} Flow files.`);
|
|
98
79
|
console.log();
|
|
99
80
|
}
|
|
100
|
-
|
|
101
81
|
return filePaths;
|
|
102
82
|
}
|
package/dist/runCodemods.js
CHANGED
|
@@ -4,11 +4,8 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.default = runCodemods;
|
|
7
|
-
|
|
8
7
|
var _fsExtra = _interopRequireDefault(require("fs-extra"));
|
|
9
|
-
|
|
10
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
11
|
-
|
|
8
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
12
9
|
async function runCodemods(codemods, filePaths, options) {
|
|
13
10
|
const results = await Promise.allSettled(filePaths.map(async filePath => {
|
|
14
11
|
if (typeof require !== 'undefined' && require.cache) {
|
|
@@ -18,22 +15,17 @@ async function runCodemods(codemods, filePaths, options) {
|
|
|
18
15
|
}
|
|
19
16
|
});
|
|
20
17
|
}
|
|
21
|
-
|
|
22
18
|
const originalContents = await _fsExtra.default.readFile(filePath, 'utf8');
|
|
23
19
|
let contents = originalContents;
|
|
24
|
-
|
|
25
20
|
for (const codemod of codemods) {
|
|
26
21
|
if (typeof jest !== 'undefined') {
|
|
27
22
|
jest.resetModules();
|
|
28
23
|
}
|
|
29
|
-
|
|
30
24
|
const {
|
|
31
25
|
transform
|
|
32
26
|
} = require('hermes-transform');
|
|
33
|
-
|
|
34
27
|
contents = await transform(contents, codemod.transform, options.prettierOptions);
|
|
35
28
|
}
|
|
36
|
-
|
|
37
29
|
if (originalContents !== contents) {
|
|
38
30
|
await _fsExtra.default.writeFile(filePath, contents, 'utf8');
|
|
39
31
|
}
|
package/dist/upgrade.js
CHANGED
|
@@ -4,50 +4,35 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.default = upgrade;
|
|
7
|
-
|
|
8
7
|
var _semver = _interopRequireDefault(require("semver"));
|
|
9
|
-
|
|
10
8
|
var _chalk = _interopRequireDefault(require("chalk"));
|
|
11
|
-
|
|
12
9
|
var _ora = _interopRequireDefault(require("ora"));
|
|
13
|
-
|
|
14
10
|
var _promptConfirm = _interopRequireDefault(require("prompt-confirm"));
|
|
15
|
-
|
|
16
11
|
var _Styled = _interopRequireDefault(require("./Styled"));
|
|
17
|
-
|
|
18
12
|
var _findFlowFiles = require("./findFlowFiles");
|
|
19
|
-
|
|
20
13
|
var _runCodemods = _interopRequireDefault(require("./runCodemods"));
|
|
21
|
-
|
|
22
14
|
var _upgrades = require("./upgrades");
|
|
23
|
-
|
|
24
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
25
|
-
|
|
15
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
26
16
|
async function upgrade(directory, currentVersion, nextVersion, options) {
|
|
27
17
|
const log = options.silent ? () => {} : (...messages) => console.log(...messages);
|
|
28
18
|
const allUpgrades = [];
|
|
29
|
-
|
|
30
19
|
for (let i = 0; i < _upgrades.VERSION_UPGRADES.length; i++) {
|
|
31
20
|
const {
|
|
32
21
|
version,
|
|
33
22
|
upgrades
|
|
34
23
|
} = _upgrades.VERSION_UPGRADES[i];
|
|
35
|
-
|
|
36
24
|
if (_semver.default.cmp(version, '>', nextVersion)) {
|
|
37
25
|
break;
|
|
38
26
|
}
|
|
39
|
-
|
|
40
27
|
if (_semver.default.cmp(version, '>', currentVersion)) {
|
|
41
28
|
upgrades.forEach(upgrade => allUpgrades.push(upgrade));
|
|
42
29
|
}
|
|
43
30
|
}
|
|
44
|
-
|
|
45
31
|
log();
|
|
46
32
|
log(_Styled.default.sectionHeader('flow-upgrade'));
|
|
47
33
|
log();
|
|
48
34
|
{
|
|
49
35
|
const titleStyled = _chalk.default.bold('flow-upgrade');
|
|
50
|
-
|
|
51
36
|
const message = `
|
|
52
37
|
Thank you for choosing to upgrade Flow. In every release the Flow community adds
|
|
53
38
|
new features and improves the performance of Flow to better serve you and your
|
|
@@ -87,25 +72,20 @@ directories, in __flowtests__ directories, or files ending in -flowtest.js.
|
|
|
87
72
|
log(_chalk.default.bold.red('Please review this information to make sure that it is correct before proceeding.'));
|
|
88
73
|
log();
|
|
89
74
|
const answer = options.yes || (await new _promptConfirm.default('Are you ready to begin the upgrade?').run());
|
|
90
|
-
|
|
91
75
|
if (!answer) {
|
|
92
76
|
log();
|
|
93
77
|
return;
|
|
94
78
|
}
|
|
95
|
-
|
|
96
79
|
while (allUpgrades.length) {
|
|
97
80
|
log();
|
|
98
81
|
const upgrade = allUpgrades.shift();
|
|
99
|
-
|
|
100
82
|
switch (upgrade.kind) {
|
|
101
83
|
case 'codemod':
|
|
102
84
|
{
|
|
103
85
|
const codemods = [upgrade];
|
|
104
|
-
|
|
105
86
|
while (allUpgrades[0] && allUpgrades[0].kind === 'codemod') {
|
|
106
87
|
codemods.push(allUpgrades.shift());
|
|
107
88
|
}
|
|
108
|
-
|
|
109
89
|
log(_Styled.default.sectionHeader('Codemods'));
|
|
110
90
|
log();
|
|
111
91
|
log('We are now going to run the following codemods:');
|
|
@@ -129,7 +109,6 @@ directories, in __flowtests__ directories, or files ending in -flowtest.js.
|
|
|
129
109
|
await (0, _runCodemods.default)(codemods, filePaths, options);
|
|
130
110
|
break;
|
|
131
111
|
}
|
|
132
|
-
|
|
133
112
|
default:
|
|
134
113
|
throw new Error(`Unexpected upgrade kind: '${upgrade.kind}'`);
|
|
135
114
|
}
|
|
@@ -4,13 +4,9 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.default = void 0;
|
|
7
|
-
|
|
8
7
|
var _removeDuplicateClassProperties = _interopRequireDefault(require("../../codemods/removeDuplicateClassProperties"));
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
var _default = {
|
|
8
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
9
|
+
var _default = exports.default = {
|
|
13
10
|
version: '0.170.0',
|
|
14
11
|
upgrades: [_removeDuplicateClassProperties.default]
|
|
15
|
-
};
|
|
16
|
-
exports.default = _default;
|
|
12
|
+
};
|
|
@@ -4,13 +4,9 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.default = void 0;
|
|
7
|
-
|
|
8
7
|
var _removeAnnotationsInDestructuring = _interopRequireDefault(require("../../codemods/removeAnnotationsInDestructuring"));
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
var _default = {
|
|
8
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
9
|
+
var _default = exports.default = {
|
|
13
10
|
version: '0.176.0',
|
|
14
11
|
upgrades: [_removeAnnotationsInDestructuring.default]
|
|
15
|
-
};
|
|
16
|
-
exports.default = _default;
|
|
12
|
+
};
|