Skip to content

Commit 6b52f24

Browse files
committed
feat(codemod): Add buffer-equal codemod
1 parent e6f23a3 commit 6b52f24

File tree

11 files changed

+124
-0
lines changed

11 files changed

+124
-0
lines changed

codemods/buffer-equal/index.js

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
import jscodeshift from 'jscodeshift';
2+
import {
3+
DEFAULT_IMPORT,
4+
getImportIdentifierMap,
5+
removeImport,
6+
} from '../shared.js';
7+
8+
/**
9+
* @typedef {import('../../types.js').Codemod} Codemod
10+
* @typedef {import('../../types.js').CodemodOptions} CodemodOptions
11+
*/
12+
13+
/**
14+
* @param {CodemodOptions} [options]
15+
* @returns {Codemod}
16+
*/
17+
export default function (options) {
18+
return {
19+
name: 'buffer-equal',
20+
transform: ({ file }) => {
21+
const j = jscodeshift;
22+
const root = j(file.source);
23+
let transformCount = 0;
24+
let dirtyFlag = false;
25+
26+
const map = getImportIdentifierMap('buffer-equal', root, j);
27+
28+
const identifier = map[DEFAULT_IMPORT];
29+
30+
const callExpressions = root.find(j.CallExpression, {
31+
callee: {
32+
name: identifier,
33+
},
34+
});
35+
36+
if (!callExpressions.length) {
37+
removeImport('buffer-equal', root, j);
38+
return root.toSource(options);
39+
}
40+
41+
callExpressions.forEach((p) => {
42+
const args = p.node.arguments;
43+
if (args.length === 2 && args[0].type !== 'SpreadElement') {
44+
const [firstArg, secondArg] = args;
45+
j(p).replaceWith(
46+
j.callExpression(
47+
j.memberExpression(firstArg, j.identifier('equals')),
48+
[secondArg],
49+
),
50+
);
51+
dirtyFlag = true;
52+
transformCount++;
53+
}
54+
});
55+
56+
if (transformCount === callExpressions.length) {
57+
removeImport('buffer-equal', root, j);
58+
}
59+
60+
return dirtyFlag ? root.toSource(options) : file.source;
61+
},
62+
};
63+
}

index.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ import arrayPrototypeUnshift from './codemods/array.prototype.unshift/index.js';
3636
import arrayPrototypeValues from './codemods/array.prototype.values/index.js';
3737
import arrayPrototypeWith from './codemods/array.prototype.with/index.js';
3838
import arraybufferPrototypeSlice from './codemods/arraybuffer.prototype.slice/index.js';
39+
import bufferEqual from './codemods/buffer-equal/index.js';
3940
import chalk from './codemods/chalk/index.js';
4041
import cloneRegexp from './codemods/clone-regexp/index.js';
4142
import concatMap from './codemods/concat-map/index.js';
@@ -203,6 +204,7 @@ export const codemods = {
203204
"array.prototype.values": arrayPrototypeValues,
204205
"array.prototype.with": arrayPrototypeWith,
205206
"arraybuffer.prototype.slice": arraybufferPrototypeSlice,
207+
"buffer-equal": bufferEqual,
206208
"chalk": chalk,
207209
"clone-regexp": cloneRegexp,
208210
"concat-map": concatMap,
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
const { Buffer } = require('node:buffer');
2+
3+
const buf1 = Buffer.from('abc');
4+
5+
const arr = Buffer.from([253, 254, 255]).equals(Buffer.from([253, 254, 255]));
6+
const str = buf1.equals(Buffer.from('def'));
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
const { Buffer } = require('node:buffer');
2+
const bufferEqual = require('buffer-equal');
3+
4+
const buf1 = Buffer.from('abc');
5+
6+
const arr = bufferEqual(Buffer.from([253, 254, 255]), Buffer.from([253, 254, 255]));
7+
const str = bufferEqual(buf1, Buffer.from('def'));
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
const { Buffer } = require('node:buffer');
2+
3+
const buf1 = Buffer.from('abc');
4+
5+
const arr = Buffer.from([253, 254, 255]).equals(Buffer.from([253, 254, 255]));
6+
const str = buf1.equals(Buffer.from('def'));
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
const { Buffer } = require('node:buffer');
2+
const bufferEqual = require('buffer-equal');
3+
4+
const buf1 = Buffer.from('abc');
5+
const buffs = [Buffer.from([253, 254, 255]), Buffer.from([253, 254, 255])]
6+
7+
const arr = bufferEqual(...buffs);
8+
const str = buf1.equals(Buffer.from('def'));
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
const { Buffer } = require('node:buffer');
2+
const bufferEqual = require('buffer-equal');
3+
4+
const buf1 = Buffer.from('abc');
5+
const buffs = [Buffer.from([253, 254, 255]), Buffer.from([253, 254, 255])]
6+
7+
const arr = bufferEqual(...buffs);
8+
const str = bufferEqual(buf1, Buffer.from('def'));
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
const { Buffer } = require('node:buffer');
2+
const bufferEqual = require('buffer-equal');
3+
4+
const buf1 = Buffer.from('abc');
5+
const buffs = [Buffer.from([253, 254, 255]), Buffer.from([253, 254, 255])]
6+
7+
const arr = bufferEqual(...buffs);
8+
const str = buf1.equals(Buffer.from('def'));
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
const { Buffer } = require('node:buffer');
2+
3+
const buf1 = Buffer.from('abc');
4+
5+
const str = buf1.equals(Buffer.from('def'));
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
const { Buffer } = require('node:buffer');
2+
const bufferEqual = require('buffer-equal');
3+
4+
const buf1 = Buffer.from('abc');
5+
6+
const str = buf1.equals(Buffer.from('def'));

0 commit comments

Comments
 (0)