From 7142b315ddc246e61c8a70295248c0f87151f5a4 Mon Sep 17 00:00:00 2001 From: xixiibn5100 <1584914306@qq.com> Date: Tue, 22 Oct 2024 00:32:54 +0800 Subject: [PATCH 1/3] =?UTF-8?q?feat(utils):=20=E6=96=B0=E5=A2=9EcamelCase?= =?UTF-8?q?=E8=BD=AC=E6=8D=A2=E5=87=BD=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/types/Camelize.ts | 12 ++++++++++++ src/utils/camelize.ts | 20 ++++++++++++++++++++ 2 files changed, 32 insertions(+) create mode 100644 src/types/Camelize.ts create mode 100644 src/utils/camelize.ts diff --git a/src/types/Camelize.ts b/src/types/Camelize.ts new file mode 100644 index 00000000..f96b0951 --- /dev/null +++ b/src/types/Camelize.ts @@ -0,0 +1,12 @@ +export type stringToCamelCase = + S extends `${infer T}_${infer U}` ? + U extends "" ? `${T}_` : `${T}${stringToCamelCase>}` + : S; + +export type toCamelCase = { + [Key in keyof T as stringToCamelCase]: T[Key] extends Array + ? Array> + : T[Key] extends object + ? toCamelCase + : T[Key] +}; diff --git a/src/utils/camelize.ts b/src/utils/camelize.ts new file mode 100644 index 00000000..b6155d87 --- /dev/null +++ b/src/utils/camelize.ts @@ -0,0 +1,20 @@ +import { toCamelCase } from "@/types/Camelize"; + +function stringToCamelCase(str:string): string{ + return str.replace(/_([a-z])/g,(_match,letter) => { + return letter.toUpperCase(); + }); +} + +export function toCamelCase(obj: T): toCamelCase { + if (Array.isArray(obj)) { + return obj.map(item => toCamelCase(item)) as toCamelCase; + } else if (obj !== null && typeof obj === "object") { + return Object.keys(obj).reduce((acc, key) => { + const camelKey = stringToCamelCase(key); + acc[camelKey] = toCamelCase(obj[key]); + return acc; + }, {}) as toCamelCase; + } + return obj as toCamelCase; +} From 9e6291d766a15069c0fcda6d547e951402fb36fa Mon Sep 17 00:00:00 2001 From: xixiibn5100 <1584914306@qq.com> Date: Tue, 22 Oct 2024 00:45:45 +0800 Subject: [PATCH 2/3] =?UTF-8?q?fix(type):=20=E4=BF=AE=E6=94=B9=E7=B1=BB?= =?UTF-8?q?=E5=9E=8B=E5=90=8D=E7=A7=B0=E4=B8=BA=E5=A4=A7=E9=A9=BC=E5=B3=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/types/Camelize.ts | 12 ++++++------ src/utils/camelize.ts | 14 +++++++------- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/src/types/Camelize.ts b/src/types/Camelize.ts index f96b0951..4aa88e5c 100644 --- a/src/types/Camelize.ts +++ b/src/types/Camelize.ts @@ -1,12 +1,12 @@ -export type stringToCamelCase = +export type StringToCamelCase = S extends `${infer T}_${infer U}` ? - U extends "" ? `${T}_` : `${T}${stringToCamelCase>}` + U extends "" ? `${T}_` : `${T}${StringToCamelCase>}` : S; -export type toCamelCase = { - [Key in keyof T as stringToCamelCase]: T[Key] extends Array - ? Array> +export type ToCamelCase = { + [Key in keyof T as StringToCamelCase]: T[Key] extends Array + ? Array> : T[Key] extends object - ? toCamelCase + ? ToCamelCase : T[Key] }; diff --git a/src/utils/camelize.ts b/src/utils/camelize.ts index b6155d87..a4607a08 100644 --- a/src/utils/camelize.ts +++ b/src/utils/camelize.ts @@ -1,20 +1,20 @@ -import { toCamelCase } from "@/types/Camelize"; +import { ToCamelCase } from "@/types/Camelize"; -function stringToCamelCase(str:string): string{ - return str.replace(/_([a-z])/g,(_match,letter) => { +function stringToCamelCase(str:string): string { + return str.replace(/_([a-z])/g, (_match, letter) => { return letter.toUpperCase(); }); } -export function toCamelCase(obj: T): toCamelCase { +export function toCamelCase(obj: T): ToCamelCase { if (Array.isArray(obj)) { - return obj.map(item => toCamelCase(item)) as toCamelCase; + return obj.map(item => toCamelCase(item)) as ToCamelCase; } else if (obj !== null && typeof obj === "object") { return Object.keys(obj).reduce((acc, key) => { const camelKey = stringToCamelCase(key); acc[camelKey] = toCamelCase(obj[key]); return acc; - }, {}) as toCamelCase; + }, {}) as ToCamelCase; } - return obj as toCamelCase; + return obj as ToCamelCase; } From cefb6ae77ecec25611d285978136221c077e8d03 Mon Sep 17 00:00:00 2001 From: xixiibn5100 <1584914306@qq.com> Date: Tue, 22 Oct 2024 00:49:05 +0800 Subject: [PATCH 3/3] =?UTF-8?q?fix(lint):=20=E4=BF=AE=E5=A4=8Dlint?= =?UTF-8?q?=E6=8A=A5=E9=94=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/utils/camelize.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/utils/camelize.ts b/src/utils/camelize.ts index a4607a08..6730252c 100644 --- a/src/utils/camelize.ts +++ b/src/utils/camelize.ts @@ -1,6 +1,6 @@ import { ToCamelCase } from "@/types/Camelize"; -function stringToCamelCase(str:string): string { +function stringToCamelCase(str: string): string { return str.replace(/_([a-z])/g, (_match, letter) => { return letter.toUpperCase(); });