ai made goop, ai fix goop
This commit is contained in:
parent
090d299a84
commit
4e1f26646c
1 changed files with 11 additions and 6 deletions
|
|
@ -4,24 +4,29 @@
|
||||||
* This is just cause I gotta stick to not touching Public templates
|
* This is just cause I gotta stick to not touching Public templates
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
// keys whose Go field name can't be derived from separators alone
|
||||||
|
type Special = { id: "ID"; flatrate: "FlatRate" };
|
||||||
|
|
||||||
type Camel<S extends string> =
|
type Camel<S extends string> =
|
||||||
S extends "id" ? "ID" :
|
S extends "id" ? "ID" :
|
||||||
S extends `${infer H}.${infer T}` ? `${H}${Capitalize<Camel<T>>}` :
|
S extends `${infer H}.${infer T}` ? `${H}${Capitalize<Camel<T>>}` :
|
||||||
S extends `${infer H}_${infer T}` ? `${H}${Capitalize<Camel<T>>}` : S;
|
S extends `${infer H}_${infer T}` ? `${H}${Capitalize<Camel<T>>}` : S;
|
||||||
|
|
||||||
type Pascal<S extends string> = S extends "id" ? "ID" : Capitalize<Camel<S>>;
|
type Pascal<S extends string> =
|
||||||
|
S extends keyof Special ? Special[S] : Capitalize<Camel<S>>;
|
||||||
|
|
||||||
export type Camelize<T> =
|
export type Camelize<T> =
|
||||||
T extends readonly (infer U)[] ? Camelize<U>[] :
|
T extends readonly (infer U)[] ? Camelize<U>[] :
|
||||||
T extends object ? { [K in keyof T as Pascal<K & string>]: Camelize<T[K]> } :
|
T extends object ? { [K in keyof T as Pascal<K & string>]: Camelize<T[K]> } :
|
||||||
T;
|
T;
|
||||||
|
|
||||||
|
const special: Record<string, string> = { id: "ID", flatrate: "FlatRate" };
|
||||||
|
|
||||||
const pascalKey = (k: string) =>
|
const pascalKey = (k: string) =>
|
||||||
k === "id"
|
special[k] ??
|
||||||
? "ID"
|
k
|
||||||
: k
|
.replace(/[._](\w)/g, (_, c) => c.toUpperCase())
|
||||||
.replace(/[._](\w)/g, (_, c) => c.toUpperCase())
|
.replace(/^\w/, (c) => c.toUpperCase());
|
||||||
.replace(/^\w/, (c) => c.toUpperCase());
|
|
||||||
|
|
||||||
export default function ungoop<T>(obj: T): Camelize<T> {
|
export default function ungoop<T>(obj: T): Camelize<T> {
|
||||||
return (
|
return (
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue