Skip to content

Commit 6ea304b

Browse files
authored
Merge pull request #1365 from maxmind/greg/no-snakecase
Replace snakecase-keys
2 parents 23203cb + b1490a8 commit 6ea304b

File tree

6 files changed

+123
-167
lines changed

6 files changed

+123
-167
lines changed

package-lock.json

Lines changed: 4 additions & 163 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,6 @@
6868
"@maxmind/geoip2-node": "^5.0.0",
6969
"maxmind": "^4.1.0",
7070
"punycode": "^2.1.1",
71-
"snakecase-keys": "^6.0.0",
7271
"validator": "^13.0.0"
7372
}
7473
}

src/request/transaction-report.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { isIP } from 'net';
2-
import snakecaseKeys from 'snakecase-keys';
32
import { Tag } from '../constants';
43
import { ArgumentError } from '../errors';
4+
import { snakecaseKeys } from '../utils';
55

66
interface TransactionReportProps {
77
/**

src/request/transaction.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import snakecaseKeys from 'snakecase-keys';
21
import { ArgumentError } from '../errors';
32
import Account from './account';
43
import Billing from './billing';
@@ -11,6 +10,7 @@ import Order from './order';
1110
import Payment from './payment';
1211
import Shipping from './shipping';
1312
import ShoppingCartItem from './shopping-cart-item';
13+
import { snakecaseKeys } from '../utils';
1414

1515
export interface TransactionProps {
1616
/**

src/utils.spec.ts

Lines changed: 92 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { snakeToCamelCase, camelizeResponse } from './utils';
1+
import { snakecaseKeys, snakeToCamelCase, camelizeResponse } from './utils';
22

33
describe('src/Utils', () => {
44
describe('snakeToCamelCase()', () => {
@@ -146,4 +146,95 @@ describe('src/Utils', () => {
146146
});
147147
});
148148
});
149+
describe('snakecaseKeys()', () => {
150+
it("converts an object's keys from camelCase to snake_case", () => {
151+
const cases = [
152+
{
153+
input: { snakeCase: 1 },
154+
expected: { snake_case: 1 },
155+
},
156+
{
157+
input: { snakeCase: 1, anotherSnakeCase: 2 },
158+
expected: { snake_case: 1, another_snake_case: 2 },
159+
},
160+
];
161+
cases.forEach((testCase) => {
162+
expect(snakecaseKeys(testCase.input)).toEqual(testCase.expected);
163+
});
164+
});
165+
166+
it("converts a nested object's keys from camelCase to snake_case", () => {
167+
const cases = [
168+
{
169+
input: { snakeCase: { abCd: 1 } },
170+
expected: { snake_case: { ab_cd: 1 } },
171+
},
172+
{
173+
input: { snakeCase: { enGb: 1 } },
174+
expected: { snake_case: { en_gb: 1 } },
175+
},
176+
{
177+
input: { enGb: { snakeCasePlus: { anotherOne: 1 } } },
178+
expected: { en_gb: { snake_case_plus: { another_one: 1 } } },
179+
},
180+
{
181+
input: {
182+
enGb: { snakeCasePlus: { anotherOne: { yetAnother: 1 } } },
183+
},
184+
expected: {
185+
en_gb: { snake_case_plus: { another_one: { yet_another: 1 } } },
186+
},
187+
},
188+
];
189+
cases.forEach((testCase) => {
190+
expect(snakecaseKeys(testCase.input)).toEqual(testCase.expected);
191+
});
192+
});
193+
194+
it('converts keys of objects contained in an array', () => {
195+
const cases = [
196+
{
197+
input: { snakeCase: { abCd: [{ qwertyDvorak: 1 }] } },
198+
expected: { snake_case: { ab_cd: [{ qwerty_dvorak: 1 }] } },
199+
},
200+
{
201+
input: {
202+
snakeCase: [
203+
{ abCd: [{ qwertyDvorak: 1 }] },
204+
'dont_change_me',
205+
{ zxyWt: [7, { pp: 42, llllMmm: 'aa_aa' }] },
206+
],
207+
caseSnake: {
208+
snakeCamel: [
209+
{ mnOpQrSt: [[{ objKey: ['a', 7, { keyObj: 99 }] }]] },
210+
],
211+
},
212+
},
213+
expected: {
214+
snake_case: [
215+
{ ab_cd: [{ qwerty_dvorak: 1 }] },
216+
'dont_change_me',
217+
{ zxy_wt: [7, { pp: 42, llll_mmm: 'aa_aa' }] },
218+
],
219+
case_snake: {
220+
snake_camel: [
221+
{ mn_op_qr_st: [[{ obj_key: ['a', 7, { key_obj: 99 }] }]] },
222+
],
223+
},
224+
},
225+
},
226+
{
227+
input: [42, { snakeCase: { abCd: [{ qwertyDvorak: 1 }] } }, '180'],
228+
expected: [
229+
42,
230+
{ snake_case: { ab_cd: [{ qwerty_dvorak: 1 }] } },
231+
'180',
232+
],
233+
},
234+
];
235+
cases.forEach((testCase) => {
236+
expect(snakecaseKeys(testCase.input)).toEqual(testCase.expected);
237+
});
238+
});
239+
});
149240
});

0 commit comments

Comments
 (0)