Skip to content

Commit

Permalink
Sorta get TS-based transforms running
Browse files Browse the repository at this point in the history
  • Loading branch information
markerikson committed Oct 12, 2022
1 parent ef872b7 commit 56bb58b
Show file tree
Hide file tree
Showing 17 changed files with 177 additions and 72 deletions.
3 changes: 2 additions & 1 deletion .prettierignore
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
**/dist/**
**/etc/**
**/temp/**
**/temp/**
**/__testfixtures__/**
1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@
"react": "npm:18.1.0",
"react-dom": "npm:18.1.0",
"resolve": "1.22.1",
"ts-node": "10.4.0",
"@types/react": "npm:18.0.12",
"@types/react-dom": "npm:18.0.5",
"@types/inquirer": "npm:8.2.1",
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
createReducer(initialState, builder => {
builder.addCase(todoAdded, (state, action) => {});
createReducer(initialState, (builder) => {
builder.addCase(todoAdded, (state, action) => {})
})
56 changes: 37 additions & 19 deletions packages/rtk-codemods/v2.0/createReducerBuilder.ts
Original file line number Diff line number Diff line change
@@ -1,16 +1,26 @@
// @ts-nocheck
import { namedTypes } from 'ast-types'
import { ExpressionKind } from 'ast-types/gen/kinds'
import { JSCodeshift, Transform } from 'jscodeshift'

function wrapInAddCaseExpression(j, member, arrowArguments) {
function wrapInAddCaseExpression(
j: JSCodeshift,
member: namedTypes.Identifier,
arrowArguments: any[]
) {
return j.callExpression(
j.memberExpression(member, j.identifier('addCase'), false),
arrowArguments
)
}

export function reducerPropsToBuilderExpression(j, defNode) {
export function reducerPropsToBuilderExpression(
j: JSCodeshift,
defNode: namedTypes.SpreadElement | ExpressionKind
) {
// @ts-ignore
const [firstCase, ...restOfCases] = defNode.properties

const expressionStatement = restOfCases.reduce((acc, c) => {
const expressionStatement = restOfCases.reduce((acc: any, c: any) => {
return wrapInAddCaseExpression(j, acc, [c.key, c.value])
}, wrapInAddCaseExpression(j, j.identifier('builder'), [firstCase.key, firstCase.value]))

Expand All @@ -20,21 +30,29 @@ export function reducerPropsToBuilderExpression(j, defNode) {
)
}

export default function transformer(file, api) {
const transform: Transform = (file, api) => {
const j = api.jscodeshift

return j(file.source)
.find(j.CallExpression, {
callee: { name: 'createReducer' },
arguments: { 1: { type: 'ObjectExpression' } },
})
.forEach((path) => {
j(path).replaceWith(
j.callExpression(j.identifier('createReducer'), [
path.node.arguments[0],
reducerPropsToBuilderExpression(j, path.node.arguments[1]),
])
)
})
.toSource()
return (
j(file.source, {})
// @ts-ignore some expression mismatch
.find(j.CallExpression, {
callee: { name: 'createReducer' },
// @ts-ignore some expression mismatch
arguments: { 1: { type: 'ObjectExpression' } },
})
.forEach((path) => {
j(path).replaceWith(
j.callExpression(j.identifier('createReducer'), [
path.node.arguments[0],
reducerPropsToBuilderExpression(j, path.node.arguments[1]),
])
)
})
.toSource({
arrowParensAlways: true,
})
)
}

export default transform
3 changes: 3 additions & 0 deletions packages/rtk-codemods2/.babelrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"presets": ["@babel/preset-typescript"]
}
3 changes: 2 additions & 1 deletion packages/rtk-codemods2/bin/cli.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
#!/usr/bin/env node
'use strict';

require('ts-node').register();

require('codemod-cli').runTransform(
__dirname,
Expand Down
6 changes: 6 additions & 0 deletions packages/rtk-codemods2/jest.config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
module.exports = {
testEnvironment: 'node',
automock: false,
// roots: ['v2.0/__tests__'],
transform: { '\\.ts$': ['ts-jest'] },
};
8 changes: 4 additions & 4 deletions packages/rtk-codemods2/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -16,18 +16,18 @@
"codemod-cli": "^3.2.0"
},
"devDependencies": {
"@types/jest": "^27",
"@types/jscodeshift": "^0.11.5",
"coveralls": "^3.1.0",
"eslint": "^7.25.0",
"eslint-config-prettier": "^8.3.0",
"eslint-plugin-node": "^11.1.0",
"eslint-plugin-prettier": "^3.4.0",
"jest": "^27",
"prettier": "^2.2.1"
"prettier": "^2.2.1",
"ts-jest": "^27"
},
"engines": {
"node": ">= 14"
},
"jest": {
"testEnvironment": "node"
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
createReducer(initialState, {
[todoAdded]: (state: SliceState, action: PayloadAction<string>) => {
// stuff
},
});

createReducer(initialState, {
[todoAdded](state: SliceState, action: PayloadAction<string>) {
// stuff
},
});
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
createReducer(initialState, (builder) => {
builder.addCase(todoAdded, (state: SliceState, action: PayloadAction<string>) => {
// stuff
});
});

createReducer(initialState, (builder) => {
builder.addCase(todoAdded, function(state: SliceState, action: PayloadAction<string>) {
// stuff
});
});
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
createReducer(initialState, {
[todoAdded]: (state, action) => {
// stuff
},
});

createReducer(initialState, {
[todoAdded](state, action) {
// stuff
},
});
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
createReducer(initialState, (builder) => {
builder.addCase(todoAdded, (state, action) => {
// stuff
});
});

createReducer(initialState, (builder) => {
builder.addCase(todoAdded, function(state, action) {
// stuff
});
});
19 changes: 0 additions & 19 deletions packages/rtk-codemods2/transforms/createReducerBuilder/index.js

This file was deleted.

56 changes: 56 additions & 0 deletions packages/rtk-codemods2/transforms/createReducerBuilder/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
import { namedTypes } from 'ast-types';
import { ExpressionKind } from 'ast-types/gen/kinds';
import { JSCodeshift, Transform } from 'jscodeshift';

function wrapInAddCaseExpression(
j: JSCodeshift,
member: namedTypes.Identifier,
arrowArguments: any[]
) {
return j.callExpression(
j.memberExpression(member, j.identifier('addCase'), false),
arrowArguments
);
}

export function reducerPropsToBuilderExpression(
j: JSCodeshift,
defNode: namedTypes.SpreadElement | ExpressionKind
) {
// @ts-ignore
const [firstCase, ...restOfCases] = defNode.properties;

const expressionStatement = restOfCases.reduce((acc: any, c: any) => {
return wrapInAddCaseExpression(j, acc, [c.key, c.value]);
}, wrapInAddCaseExpression(j, j.identifier('builder'), [firstCase.key, firstCase.value]));

return j.arrowFunctionExpression(
[j.identifier('builder')],
j.blockStatement([j.expressionStatement(expressionStatement)])
);
}

const transform: Transform = (file, api) => {
const j = api.jscodeshift;

return (
j(file.source)
// @ts-ignore some expression mismatch
.find(j.CallExpression, {
callee: { name: 'createReducer' },
// @ts-ignore some expression mismatch
arguments: { 1: { type: 'ObjectExpression' } },
})
.forEach((path) => {
j(path).replaceWith(
j.callExpression(j.identifier('createReducer'), [
path.node.arguments[0],
reducerPropsToBuilderExpression(j, path.node.arguments[1]),
])
);
})
.toSource()
);
};

export default transform;
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
'use strict';
require('ts-node').register();

const { runTransformTest } = require('codemod-cli');

runTransformTest({
runTransformTest({
name: 'createReducerBuilder',
path: require.resolve('./index.js'),
path: require.resolve('./index.ts'),
fixtureDir: `${__dirname}/__testfixtures__/`,
});
});
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
createReducer(initialState, {
[todoAdded]: (state, action) => {
// stuff
},
});

createReducer(initialState, {
[todoAdded](state, action) {
// stuff
},
});
28 changes: 5 additions & 23 deletions yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -23476,6 +23476,8 @@ fsevents@^1.2.7:
version: 0.0.0-use.local
resolution: "rtk-codemods2@workspace:packages/rtk-codemods2"
dependencies:
"@types/jest": ^27
"@types/jscodeshift": ^0.11.5
codemod-cli: ^3.2.0
coveralls: ^3.1.0
eslint: ^7.25.0
Expand All @@ -23484,6 +23486,7 @@ fsevents@^1.2.7:
eslint-plugin-prettier: ^3.4.0
jest: ^27
prettier: ^2.2.1
ts-jest: ^27
bin:
rtk-codemods2: ./bin/cli.js
languageName: unknown
Expand Down Expand Up @@ -24413,7 +24416,7 @@ fsevents@^1.2.7:
languageName: node
linkType: hard

"source-map-support@npm:^0.5.16, source-map-support@npm:^0.5.17, source-map-support@npm:^0.5.6, source-map-support@npm:~0.5.12, source-map-support@npm:~0.5.20":
"source-map-support@npm:^0.5.16, source-map-support@npm:^0.5.6, source-map-support@npm:~0.5.12, source-map-support@npm:~0.5.20":
version: 0.5.21
resolution: "source-map-support@npm:0.5.21"
dependencies:
Expand Down Expand Up @@ -25769,7 +25772,7 @@ fsevents@^1.2.7:
languageName: node
linkType: hard

"ts-node@npm:^10.0.0, ts-node@npm:^10.4.0":
"ts-node@npm:10.4.0":
version: 10.4.0
resolution: "ts-node@npm:10.4.0"
dependencies:
Expand Down Expand Up @@ -25805,27 +25808,6 @@ fsevents@^1.2.7:
languageName: node
linkType: hard

"ts-node@npm:^9":
version: 9.1.1
resolution: "ts-node@npm:9.1.1"
dependencies:
arg: ^4.1.0
create-require: ^1.1.0
diff: ^4.0.1
make-error: ^1.1.1
source-map-support: ^0.5.17
yn: 3.1.1
peerDependencies:
typescript: ">=2.7"
bin:
ts-node: dist/bin.js
ts-node-script: dist/bin-script.js
ts-node-transpile-only: dist/bin-transpile.js
ts-script: dist/bin-script-deprecated.js
checksum: 356e2647b8b1e6ab00380c0537fa569b63bd9b6f006cc40fd650f81fae1817bd8fecc075300036950d8f45c1d85b95be33cd1e48a1a424a7d86c3dbb42bf60e5
languageName: node
linkType: hard

"ts-pnp@npm:^1.1.6":
version: 1.2.0
resolution: "ts-pnp@npm:1.2.0"
Expand Down

0 comments on commit 56bb58b

Please sign in to comment.