Skip to content

Commit 56bb58b

Browse files
committed
Sorta get TS-based transforms running
1 parent ef872b7 commit 56bb58b

File tree

17 files changed

+177
-72
lines changed

17 files changed

+177
-72
lines changed

.prettierignore

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
**/dist/**
22
**/etc/**
3-
**/temp/**
3+
**/temp/**
4+
**/__testfixtures__/**

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@
5050
"react": "npm:18.1.0",
5151
"react-dom": "npm:18.1.0",
5252
"resolve": "1.22.1",
53+
"ts-node": "10.4.0",
5354
"@types/react": "npm:18.0.12",
5455
"@types/react-dom": "npm:18.0.5",
5556
"@types/inquirer": "npm:8.2.1",
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
1-
createReducer(initialState, builder => {
2-
builder.addCase(todoAdded, (state, action) => {});
1+
createReducer(initialState, (builder) => {
2+
builder.addCase(todoAdded, (state, action) => {})
33
})
Lines changed: 37 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,26 @@
1-
// @ts-nocheck
1+
import { namedTypes } from 'ast-types'
2+
import { ExpressionKind } from 'ast-types/gen/kinds'
3+
import { JSCodeshift, Transform } from 'jscodeshift'
24

3-
function wrapInAddCaseExpression(j, member, arrowArguments) {
5+
function wrapInAddCaseExpression(
6+
j: JSCodeshift,
7+
member: namedTypes.Identifier,
8+
arrowArguments: any[]
9+
) {
410
return j.callExpression(
511
j.memberExpression(member, j.identifier('addCase'), false),
612
arrowArguments
713
)
814
}
915

10-
export function reducerPropsToBuilderExpression(j, defNode) {
16+
export function reducerPropsToBuilderExpression(
17+
j: JSCodeshift,
18+
defNode: namedTypes.SpreadElement | ExpressionKind
19+
) {
20+
// @ts-ignore
1121
const [firstCase, ...restOfCases] = defNode.properties
1222

13-
const expressionStatement = restOfCases.reduce((acc, c) => {
23+
const expressionStatement = restOfCases.reduce((acc: any, c: any) => {
1424
return wrapInAddCaseExpression(j, acc, [c.key, c.value])
1525
}, wrapInAddCaseExpression(j, j.identifier('builder'), [firstCase.key, firstCase.value]))
1626

@@ -20,21 +30,29 @@ export function reducerPropsToBuilderExpression(j, defNode) {
2030
)
2131
}
2232

23-
export default function transformer(file, api) {
33+
const transform: Transform = (file, api) => {
2434
const j = api.jscodeshift
2535

26-
return j(file.source)
27-
.find(j.CallExpression, {
28-
callee: { name: 'createReducer' },
29-
arguments: { 1: { type: 'ObjectExpression' } },
30-
})
31-
.forEach((path) => {
32-
j(path).replaceWith(
33-
j.callExpression(j.identifier('createReducer'), [
34-
path.node.arguments[0],
35-
reducerPropsToBuilderExpression(j, path.node.arguments[1]),
36-
])
37-
)
38-
})
39-
.toSource()
36+
return (
37+
j(file.source, {})
38+
// @ts-ignore some expression mismatch
39+
.find(j.CallExpression, {
40+
callee: { name: 'createReducer' },
41+
// @ts-ignore some expression mismatch
42+
arguments: { 1: { type: 'ObjectExpression' } },
43+
})
44+
.forEach((path) => {
45+
j(path).replaceWith(
46+
j.callExpression(j.identifier('createReducer'), [
47+
path.node.arguments[0],
48+
reducerPropsToBuilderExpression(j, path.node.arguments[1]),
49+
])
50+
)
51+
})
52+
.toSource({
53+
arrowParensAlways: true,
54+
})
55+
)
4056
}
57+
58+
export default transform

packages/rtk-codemods2/.babelrc

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
{
2+
"presets": ["@babel/preset-typescript"]
3+
}

packages/rtk-codemods2/bin/cli.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
#!/usr/bin/env node
2-
'use strict';
2+
3+
require('ts-node').register();
34

45
require('codemod-cli').runTransform(
56
__dirname,

packages/rtk-codemods2/jest.config.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
module.exports = {
2+
testEnvironment: 'node',
3+
automock: false,
4+
// roots: ['v2.0/__tests__'],
5+
transform: { '\\.ts$': ['ts-jest'] },
6+
};

packages/rtk-codemods2/package.json

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,18 +16,18 @@
1616
"codemod-cli": "^3.2.0"
1717
},
1818
"devDependencies": {
19+
"@types/jest": "^27",
20+
"@types/jscodeshift": "^0.11.5",
1921
"coveralls": "^3.1.0",
2022
"eslint": "^7.25.0",
2123
"eslint-config-prettier": "^8.3.0",
2224
"eslint-plugin-node": "^11.1.0",
2325
"eslint-plugin-prettier": "^3.4.0",
2426
"jest": "^27",
25-
"prettier": "^2.2.1"
27+
"prettier": "^2.2.1",
28+
"ts-jest": "^27"
2629
},
2730
"engines": {
2831
"node": ">= 14"
29-
},
30-
"jest": {
31-
"testEnvironment": "node"
3232
}
3333
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
createReducer(initialState, {
2+
[todoAdded]: (state: SliceState, action: PayloadAction<string>) => {
3+
// stuff
4+
},
5+
});
6+
7+
createReducer(initialState, {
8+
[todoAdded](state: SliceState, action: PayloadAction<string>) {
9+
// stuff
10+
},
11+
});
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
createReducer(initialState, (builder) => {
2+
builder.addCase(todoAdded, (state: SliceState, action: PayloadAction<string>) => {
3+
// stuff
4+
});
5+
});
6+
7+
createReducer(initialState, (builder) => {
8+
builder.addCase(todoAdded, function(state: SliceState, action: PayloadAction<string>) {
9+
// stuff
10+
});
11+
});

0 commit comments

Comments
 (0)