Skip to content

Commit 0fcd6b8

Browse files
committed
working for function expressions
1 parent c31ea27 commit 0fcd6b8

File tree

2 files changed

+84
-19
lines changed

2 files changed

+84
-19
lines changed

community/memoize-one/src/5.0.0/transform.spec.ts

Lines changed: 54 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,17 @@ import * as transformer from './transform';
33
import prettier from 'prettier';
44

55
function format(source: string): string {
6-
return prettier.format(source, { parser: 'typescript' }).trim();
6+
return prettier
7+
.format(source, {
8+
parser: 'typescript',
9+
trailingComma: 'all',
10+
semi: true,
11+
tabWidth: 2,
12+
useTabs: false,
13+
singleQuote: true,
14+
printWidth: 100,
15+
})
16+
.trim();
717
}
818

919
describe('memoize-one@5.0.0 transform', () => {
@@ -35,7 +45,47 @@ describe('memoize-one@5.0.0 transform', () => {
3545
);
3646
});
3747

38-
it.only('should wrap inline equality functions', () => {
48+
it.only('should wrap inline equality arrow functions', () => {
49+
const result = applyTransform(
50+
transformer,
51+
format(`
52+
import memoize from 'memoize-one';
53+
54+
function add(a: number, b: number) {
55+
return a + b;
56+
}
57+
58+
const memoized = memoize(add, (a, b) => {
59+
return a === b;
60+
});
61+
`),
62+
{ parser: 'tsx' },
63+
);
64+
65+
expect(result).toEqual(
66+
format(`
67+
import memoize from 'memoize-one';
68+
69+
function add(a: number, b: number) {
70+
return a + b;
71+
}
72+
73+
const memoized = memoize(add, (newArgs, lastArgs) => {
74+
if (newArgs.length !== lastArgs.length) {
75+
return false;
76+
}
77+
78+
const __equalityFn = (a, b) => {
79+
return a === b;
80+
};
81+
82+
return newArgs.every((newArg, index) => __equalityFn(newArg, lastArgs[index]));
83+
});
84+
`),
85+
);
86+
});
87+
88+
it('should wrap inline equality function declarations', () => {
3989
const result = applyTransform(
4090
transformer,
4191
format(`
@@ -65,11 +115,11 @@ describe('memoize-one@5.0.0 transform', () => {
65115
return false;
66116
}
67117
68-
function isEqual(a, b) {
118+
const __equalityFn = function isEqual(a, b) {
69119
return a === b;
70120
}
71121
72-
return newArgs.every((newArg, index) => isEqual(newArg, lastArgs[index]));
122+
return newArgs.every((newArg, index) => __equalityFn(newArg, lastArgs[index]));
73123
});
74124
`),
75125
);

community/memoize-one/src/5.0.0/transform.ts

Lines changed: 30 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,10 @@ export default function transformer(
4040
if (second == null) {
4141
return;
4242
}
43-
if (second.type === 'FunctionExpression') {
43+
if (
44+
second.type === 'FunctionExpression' ||
45+
second.type === 'ArrowFunctionExpression'
46+
) {
4447
const customEqualityFn = j.arrowFunctionExpression(
4548
[j.identifier('newArgs'), j.identifier('lastArgs')],
4649
j.blockStatement([
@@ -56,25 +59,37 @@ export default function transformer(
5659
j.identifier('length'),
5760
),
5861
),
59-
j.returnStatement(j.booleanLiteral(false)),
62+
j.blockStatement([j.returnStatement(j.booleanLiteral(false))]),
63+
),
64+
j.variableDeclaration('const', [
65+
j.variableDeclarator(j.identifier('__equalityFn'), second),
66+
]),
67+
j.returnStatement(
68+
j.callExpression(
69+
j.memberExpression(
70+
j.identifier('newArgs'),
71+
j.identifier('every'),
72+
),
73+
[
74+
j.arrowFunctionExpression(
75+
[j.identifier('newArg'), j.identifier('index')],
76+
j.callExpression(j.identifier('__equalityFn'), [
77+
j.identifier('newArg'),
78+
j.memberExpression(
79+
j.identifier('lastArgs'),
80+
j.identifier('index'),
81+
// computed lastArgs[index]
82+
true,
83+
),
84+
]),
85+
),
86+
],
87+
),
6088
),
61-
j.returnStatement(j.booleanLiteral(true)),
6289
]),
6390
);
6491

65-
// (newArgs, lastArgs) => {
66-
// if (newArgs.length !== lastArgs.length) {
67-
// return false;
68-
// }
69-
70-
// return newArgs.every((newArg, index) =>
71-
// isEqual(newArg, lastArgs[index]),
72-
// );
73-
// };
74-
7592
call.value.arguments = [first, customEqualityFn];
76-
// console.log('FunctionExpression', call);
77-
// call.replace(j.functionExpression([first, 'hi']));
7893
return;
7994
}
8095

0 commit comments

Comments
 (0)