Skip to content

Commit 564d81e

Browse files
committed
Fix Identifier/MemberExpression values in createReducerBuilder
1 parent c663ba2 commit 564d81e

File tree

5 files changed

+35
-26
lines changed

5 files changed

+35
-26
lines changed

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
createReducer(initialState, {
2-
[todoAdded]: (state: SliceState, action: PayloadAction<string>) => {
2+
[todoAdded1a]: (state: SliceState, action: PayloadAction<string>) => {
33
// stuff
44
},
5+
[todoAdded1b]: someFunc,
6+
todoAdded1c: adapter.someFunc,
57
});
68

79
createReducer(initialState, {

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

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
11
createReducer(initialState, (builder) => {
2-
builder.addCase(todoAdded, (state: SliceState, action: PayloadAction<string>) => {
2+
builder.addCase(todoAdded1a, (state: SliceState, action: PayloadAction<string>) => {
33
// stuff
44
});
5+
6+
builder.addCase(todoAdded1b, someFunc);
7+
builder.addCase(todoAdded1c, adapter.someFunc);
58
});
69

710
createReducer(initialState, (builder) => {

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,9 @@ createReducer(initialState, {
1414
},
1515
todoAdded1f: (state, action) => {
1616
//stuff
17-
}
17+
},
18+
[todoAdded1g]: someFunc,
19+
todoAdded1h: adapter.someFunc
1820
});
1921

2022

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,9 @@ createReducer(initialState, (builder) => {
2020
builder.addCase(todoAdded1f, (state, action) => {
2121
//stuff
2222
});
23+
24+
builder.addCase(todoAdded1g, someFunc);
25+
builder.addCase(todoAdded1h, adapter.someFunc);
2326
});
2427

2528

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

Lines changed: 22 additions & 23 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
}
4535
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)