fix(common): toSnakeCase & toCamelCase (#144)

* fix toSnakeCase & toCamelCase

* xd
This commit is contained in:
MARCROCK22 2023-07-10 13:13:34 -04:00 committed by GitHub
parent 6b2a193ba5
commit 3f1d37ba68
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 19 additions and 11 deletions

View File

@ -61,18 +61,22 @@ export function toSnakeCase<Obj extends Record<string, any>>(target: Obj): Objec
case 'function': case 'function':
case 'symbol': case 'symbol':
case 'undefined': case 'undefined':
result[ReplaceRegex.camel(key)] = value; result[ReplaceRegex.snake(key)] = value;
break; break;
case 'object': case 'object':
if (Array.isArray(value)) { if (Array.isArray(value)) {
result[ReplaceRegex.camel(key)] = value.map((prop) => toSnakeCase(prop)); result[ReplaceRegex.snake(key)] = value.map((prop) => typeof prop === 'object' && prop ? toSnakeCase(prop) : prop);
break;
}
if (isObject(value)) {
result[ReplaceRegex.snake(key)] = toSnakeCase({ ...value })
break; break;
} }
if (!Number.isNaN(value)) { if (!Number.isNaN(value)) {
result[ReplaceRegex.camel(key)] = null; result[ReplaceRegex.snake(key)] = null;
break; break;
} }
result[ReplaceRegex.camel(key)] = toSnakeCase({ ...value }); result[ReplaceRegex.snake(key)] = toSnakeCase({ ...value });
break; break;
} }
} }
@ -94,18 +98,22 @@ export function toCamelCase<Obj extends Record<string, any>>(target: Obj): Objec
case 'function': case 'function':
case 'symbol': case 'symbol':
case 'undefined': case 'undefined':
result[ReplaceRegex.snake(key)] = value; result[ReplaceRegex.camel(key)] = value;
break; break;
case 'object': case 'object':
if (Array.isArray(value)) { if (Array.isArray(value)) {
result[ReplaceRegex.snake(key)] = value.map((prop) => toCamelCase(prop)); result[ReplaceRegex.camel(key)] = value.map((prop) => typeof prop === 'object' && prop ? toCamelCase(prop) : prop);
break;
}
if (isObject(value)) {
result[ReplaceRegex.camel(key)] = toCamelCase({ ...value })
break; break;
} }
if (!Number.isNaN(value)) { if (!Number.isNaN(value)) {
result[ReplaceRegex.snake(key)] = null; result[ReplaceRegex.camel(key)] = null;
break; break;
} }
result[ReplaceRegex.snake(key)] = toCamelCase({ ...value }); result[ReplaceRegex.camel(key)] = toCamelCase({ ...value });
break; break;
} }
} }
@ -113,10 +121,10 @@ export function toCamelCase<Obj extends Record<string, any>>(target: Obj): Objec
} }
export const ReplaceRegex = { export const ReplaceRegex = {
snake: (s: string) => { camel: (s: string) => {
return s.replace(/(_\S)/gi, (a) => a[1].toUpperCase()); return s.replace(/(_\S)/gi, (a) => a[1].toUpperCase());
}, },
camel: (s: string) => { snake: (s: string) => {
return s.replace(/[A-Z]/g, (a) => `_${a.toLowerCase()}`); return s.replace(/[A-Z]/g, (a) => `_${a.toLowerCase()}`);
} }
}; };

View File

@ -42,7 +42,7 @@ export function objectToParams(obj: object): URLSearchParams {
const query = new URLSearchParams(); const query = new URLSearchParams();
for (const [key, value] of Object.entries(obj)) { for (const [key, value] of Object.entries(obj)) {
if (!value) continue; if (!value) continue;
query.append(ReplaceRegex.camel(key), String(value)); query.append(ReplaceRegex.snake(key), String(value));
} }
return query; return query;