Skip to content

Commit c114399

Browse files
committed
Fix Identifier/MemberExpression values in createSliceBuilder codemod
1 parent f7a8282 commit c114399

File tree

5 files changed

+36
-27
lines changed

5 files changed

+36
-27
lines changed

packages/rtk-codemods/transforms/createSliceBuilder/__testfixtures__/basic-ts.input.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,11 @@ const slice1 = createSlice({
22
name: "a",
33
initialState,
44
extraReducers: {
5-
[todoAdded]: (state: SliceState, action: PayloadAction<string>) => {
5+
[todoAdded1a]: (state: SliceState, action: PayloadAction<string>) => {
66
// stuff
77
},
8+
[todoAdded1b]: someFunc,
9+
todoAdded1c: adapter.someFunc,
810
}
911
});
1012

packages/rtk-codemods/transforms/createSliceBuilder/__testfixtures__/basic-ts.output.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,12 @@ const slice1 = createSlice({
33
initialState,
44

55
extraReducers: (builder) => {
6-
builder.addCase(todoAdded, (state: SliceState, action: PayloadAction<string>) => {
6+
builder.addCase(todoAdded1a, (state: SliceState, action: PayloadAction<string>) => {
77
// stuff
88
});
9+
10+
builder.addCase(todoAdded1b, someFunc);
11+
builder.addCase(todoAdded1c, adapter.someFunc);
912
}
1013
});
1114

packages/rtk-codemods/transforms/createSliceBuilder/__testfixtures__/basic.input.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,9 @@ const slice1 = createSlice({
1717
},
1818
todoAdded1f: (state, action) => {
1919
//stuff
20-
}
20+
},
21+
[todoAdded1g]: someFunc,
22+
todoAdded1h: adapter.someFunc
2123
}
2224
});
2325

packages/rtk-codemods/transforms/createSliceBuilder/__testfixtures__/basic.output.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,9 @@ const slice1 = createSlice({
2424
builder.addCase(todoAdded1f, (state, action) => {
2525
//stuff
2626
});
27+
28+
builder.addCase(todoAdded1g, someFunc);
29+
builder.addCase(todoAdded1h, adapter.someFunc);
2730
}
2831
});
2932

packages/rtk-codemods/transforms/createSliceBuilder/index.ts

Lines changed: 23 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,5 @@
1-
import { namedTypes } from 'ast-types';
2-
import { ExpressionKind, PatternKind } from 'ast-types/gen/kinds';
1+
import { ExpressionKind, SpreadElementKind } from 'ast-types/gen/kinds';
32
import {
4-
BlockStatement,
5-
CallExpression,
6-
Expression,
73
ExpressionStatement,
84
JSCodeshift,
95
ObjectExpression,
@@ -16,48 +12,51 @@ type ObjectKey = ObjectMethod['key'] & ObjectProperty['key'];
1612

1713
function wrapInAddCaseExpression(
1814
j: JSCodeshift,
19-
key: ObjectKey,
20-
params: PatternKind[],
21-
body: BlockStatement | ExpressionKind
15+
addCaseArgs: (ExpressionKind | SpreadElementKind)[]
2216
) {
2317
const identifier = j.identifier('builder');
2418
return j.expressionStatement(
25-
j.callExpression(j.memberExpression(identifier, j.identifier('addCase'), false), [
26-
key,
27-
j.arrowFunctionExpression(params, body),
28-
])
19+
j.callExpression(j.memberExpression(identifier, j.identifier('addCase'), false), addCaseArgs)
2920
);
3021
}
3122

3223
export function reducerPropsToBuilderExpression(j: JSCodeshift, defNode: ObjectExpression) {
3324
const caseExpressions: ExpressionStatement[] = [];
3425
for (let property of defNode.properties) {
35-
let key: ObjectKey = null as any;
36-
let params: PatternKind[] = [];
37-
let body: BlockStatement | ExpressionKind = null as any;
26+
let addCaseArgs: (ExpressionKind | SpreadElementKind)[] = [];
3827
switch (property.type) {
3928
case 'ObjectMethod': {
40-
key = property.key;
41-
params = property.params;
42-
body = property.body;
29+
const { key, params, body } = property;
30+
if (body) {
31+
addCaseArgs = [key, j.arrowFunctionExpression(params, body)];
32+
}
4333
break;
4434
}
45-
case 'ObjectProperty': {
35+
case 'ObjectProperty': {
36+
const { key } = property;
37+
4638
switch (property.value.type) {
4739
case 'ArrowFunctionExpression':
4840
case 'FunctionExpression': {
49-
key = property.key;
50-
params = property.value.params;
51-
body = property.value.body;
41+
const { params, body } = property.value;
42+
if (body) {
43+
addCaseArgs = [key, j.arrowFunctionExpression(params, body)];
44+
}
45+
break;
46+
}
47+
case 'Identifier':
48+
case 'MemberExpression': {
49+
const { value } = property;
50+
addCaseArgs = [key, value];
5251
break;
5352
}
5453
}
5554
}
5655
}
57-
if (!body) {
56+
if (!addCaseArgs.length) {
5857
continue;
5958
}
60-
caseExpressions.push(wrapInAddCaseExpression(j, key, params, body));
59+
caseExpressions.push(wrapInAddCaseExpression(j, addCaseArgs));
6160
}
6261

6362
return j.arrowFunctionExpression([j.identifier('builder')], j.blockStatement(caseExpressions));

0 commit comments

Comments
 (0)