Skip to content

Commit 6a3748d

Browse files
authored
Fixed formatting
1 parent 0743ec7 commit 6a3748d

File tree

1 file changed

+131
-130
lines changed

1 file changed

+131
-130
lines changed

src/caseConvert.ts

+131-130
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
function convertObject<
22
TInput extends object,
33
TResult extends
4-
| ObjectToCamel<TInput>
5-
| ObjectToSnake<TInput>
6-
| ObjectToPascal<TInput>,
4+
| ObjectToCamel<TInput>
5+
| ObjectToSnake<TInput>
6+
| ObjectToPascal<TInput>,
77
>(obj: TInput, keyConverter: (arg: string) => string): TResult {
88
if (obj === null || typeof obj === 'undefined' || typeof obj !== 'object') {
99
return obj;
@@ -16,31 +16,31 @@ function convertObject<
1616
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
1717
out[keyConverter(k)] = Array.isArray(v)
1818
? (v.map(<ArrayItem extends object>(item: ArrayItem) =>
19-
typeof item === 'object' &&
19+
typeof item === 'object' &&
2020
!(item instanceof Uint8Array) &&
2121
!(item instanceof Date)
22-
? convertObject<
23-
ArrayItem,
24-
TResult extends ObjectToCamel<TInput>
25-
? ObjectToCamel<ArrayItem>
26-
: TResult extends ObjectToPascal<TInput>
27-
? ObjectToPascal<ArrayItem>
28-
: ObjectToSnake<ArrayItem>
29-
>(item, keyConverter)
30-
: item,
31-
) as unknown[])
22+
? convertObject<
23+
ArrayItem,
24+
TResult extends ObjectToCamel<TInput>
25+
? ObjectToCamel<ArrayItem>
26+
: TResult extends ObjectToPascal<TInput>
27+
? ObjectToPascal<ArrayItem>
28+
: ObjectToSnake<ArrayItem>
29+
>(item, keyConverter)
30+
: item,
31+
) as unknown[])
3232
: v instanceof Uint8Array || v instanceof Date
33-
? v
34-
: typeof v === 'object'
35-
? convertObject<
36-
typeof v,
37-
TResult extends ObjectToCamel<TInput>
33+
? v
34+
: typeof v === 'object'
35+
? convertObject<
36+
typeof v,
37+
TResult extends ObjectToCamel<TInput>
3838
? ObjectToCamel<typeof v>
3939
: TResult extends ObjectToPascal<TInput>
4040
? ObjectToPascal<typeof v>
4141
: ObjectToSnake<typeof v>
42-
>(v, keyConverter)
43-
: (v as unknown);
42+
>(v, keyConverter)
43+
: (v as unknown);
4444
}
4545
return out;
4646
}
@@ -50,8 +50,8 @@ export function toCamel<T extends string>(term: T): ToCamel<T> {
5050
term.length === 1
5151
? term.toLowerCase()
5252
: term
53-
.replace(/^([A-Z])/, (m) => m[0].toLowerCase())
54-
.replace(/[_-]([a-z0-9])/g, (m) => m[1].toUpperCase())
53+
.replace(/^([A-Z])/, (m) => m[0].toLowerCase())
54+
.replace(/[_-]([a-z0-9])/g, (m) => m[1].toUpperCase())
5555
) as ToCamel<T>;
5656
}
5757

@@ -107,134 +107,135 @@ export function objectToPascal<T extends object>(obj: T): ObjectToPascal<T> {
107107

108108
export type ToCamel<S extends string | number | symbol> = S extends string
109109
? S extends `${infer Head}_${infer Tail}`
110-
? `${ToCamel<Uncapitalize<Head>>}${Capitalize<ToCamel<Tail>>}`
111-
: S extends `${infer Head}-${infer Tail}`
112-
? `${ToCamel<Uncapitalize<Head>>}${Capitalize<ToCamel<Tail>>}`
113-
: Uncapitalize<S>
114-
: never;
110+
? `${ToCamel<Uncapitalize<Head>>}${Capitalize<ToCamel<Tail>>}`
111+
: S extends `${infer Head}-${infer Tail}`
112+
? `${ToCamel<Uncapitalize<Head>>}${Capitalize<ToCamel<Tail>>}`
113+
: Uncapitalize<S>
114+
: never;
115115

116116
export type ObjectToCamel<T extends object | undefined | null> =
117117
T extends undefined
118-
? undefined
119-
: T extends null
120-
? null
121-
: T extends Array<infer ArrayType extends string | number>
122-
? Array<ArrayType>
123-
: T extends Array<infer ArrayType extends object>
124-
? Array<ObjectToCamel<ArrayType>>
125-
: T extends Uint8Array
126-
? Uint8Array
127-
: T extends Date
128-
? Date
129-
: {
130-
[K in keyof T as ToCamel<K>]: T[K] extends Array<infer ArrayType extends string | number>
118+
? undefined
119+
: T extends null
120+
? null
121+
: T extends Array<infer ArrayType extends string | number>
131122
? Array<ArrayType>
132123
: T extends Array<infer ArrayType extends object>
133124
? Array<ObjectToCamel<ArrayType>>
134-
: T[K] extends object | undefined | null
135-
? ObjectToCamel<T[K]>
136-
: T[K];
137-
};
125+
: T extends Uint8Array
126+
? Uint8Array
127+
: T extends Date
128+
? Date
129+
: {
130+
[K in keyof T as ToCamel<K>]: T[K] extends Array<infer ArrayType extends string | number>
131+
? Array<ArrayType>
132+
: T extends Array<infer ArrayType extends object>
133+
? Array<ObjectToCamel<ArrayType>>
134+
: T[K] extends object | undefined | null
135+
? ObjectToCamel<T[K]>
136+
: T[K];
137+
};
138138

139139
export type ToPascal<S extends string | number | symbol> = S extends string
140140
? S extends `${infer Head}_${infer Tail}`
141-
? `${Capitalize<ToCamel<Head>>}${Capitalize<ToCamel<Tail>>}`
142-
: S extends `${infer Head}-${infer Tail}`
143-
? `${Capitalize<ToCamel<Head>>}${Capitalize<ToCamel<Tail>>}`
144-
: Capitalize<S>
145-
: never;
141+
? `${Capitalize<ToCamel<Head>>}${Capitalize<ToCamel<Tail>>}`
142+
: S extends `${infer Head}-${infer Tail}`
143+
? `${Capitalize<ToCamel<Head>>}${Capitalize<ToCamel<Tail>>}`
144+
: Capitalize<S>
145+
: never;
146146

147147
export type ObjectToPascal<T extends object | undefined | null> =
148148
T extends undefined
149-
? undefined
150-
: T extends null
151-
? null
152-
: T extends Array<infer ArrayType extends string | number>
153-
? Array<ArrayType>
154-
: T extends Array<infer ArrayType extends object>
155-
? Array<ObjectToPascal<ArrayType>>
156-
: T extends Uint8Array
157-
? Uint8Array
158-
: T extends Date
159-
? Date
160-
: {
161-
[K in keyof T as ToPascal<K>]: T[K] extends Array<infer ArrayType extends string | number>
149+
? undefined
150+
: T extends null
151+
? null
152+
: T extends Array<infer ArrayType extends string | number>
162153
? Array<ArrayType>
163-
: T extends Array<infer ArrayType extends object>
164-
? Array<ObjectToPascal<ArrayType>>
165-
: T[K] extends object | undefined | null
166-
? ObjectToPascal<T[K]>
167-
: T[K];
168-
};
154+
: T extends Array<infer ArrayType extends object>
155+
? Array<ObjectToPascal<ArrayType>>
156+
: T extends Uint8Array
157+
? Uint8Array
158+
: T extends Date
159+
? Date
160+
: {
161+
[K in keyof T as ToPascal<K>]: T[K] extends Array<infer ArrayType extends string | number>
162+
? Array<ArrayType>
163+
: T extends Array<infer ArrayType extends object>
164+
? Array<ObjectToPascal<ArrayType>>
165+
: T[K] extends object | undefined | null
166+
? ObjectToPascal<T[K]>
167+
: T[K];
168+
};
169169

170170
export type ToSnake<S extends string | number | symbol> = S extends string
171171
? S extends `${infer Head}${CapitalChars}${infer Tail}` // string has a capital char somewhere
172-
? Head extends '' // there is a capital char in the first position
173-
? Tail extends ''
174-
? Lowercase<S> /* 'A' */
175-
: S extends `${infer Caps}${Tail}` // tail exists, has capital characters
176-
? Caps extends CapitalChars
177-
? Tail extends CapitalLetters
178-
? `${Lowercase<Caps>}_${Lowercase<Tail>}` /* 'AB' */
179-
: Tail extends `${CapitalLetters}${string}`
180-
? `${ToSnake<Caps>}_${ToSnake<Tail>}` /* first tail char is upper? 'ABcd' */
181-
: `${ToSnake<Caps>}${ToSnake<Tail>}` /* 'AbCD','AbcD', */ /* TODO: if tail is only numbers, append without underscore */
182-
: never /* never reached, used for inference of caps */
183-
: never
184-
: Tail extends '' /* 'aB' 'abCD' 'ABCD' 'AB' */
185-
? S extends `${Head}${infer Caps}`
186-
? Caps extends CapitalChars
187-
? Head extends Lowercase<Head> /* 'abcD' */
188-
? Caps extends Numbers
189-
? // Head exists and is lowercase, tail does not, Caps is a number, we may be in a sub-select
190-
// if head ends with number, don't split head an Caps, keep contiguous numbers together
191-
Head extends `${string}${Numbers}`
192-
? never
193-
: // head does not end in number, safe to split. 'abc2' -> 'abc_2'
194-
`${ToSnake<Head>}_${Caps}`
195-
: `${ToSnake<Head>}_${ToSnake<Caps>}` /* 'abcD' 'abc25' */
196-
: never /* stop union type forming */
197-
: never
198-
: never /* never reached, used for inference of caps */
199-
: S extends `${Head}${infer Caps}${Tail}` /* 'abCd' 'ABCD' 'AbCd' 'ABcD' */
200-
? Caps extends CapitalChars
201-
? Head extends Lowercase<Head> /* is 'abCd' 'abCD' ? */
202-
? Tail extends CapitalLetters /* is 'abCD' where Caps = 'C' */
203-
? `${ToSnake<Head>}_${ToSnake<Caps>}_${Lowercase<Tail>}` /* aBCD Tail = 'D', Head = 'aB' */
204-
: Tail extends `${CapitalLetters}${string}` /* is 'aBCd' where Caps = 'B' */
205-
? Head extends Numbers
206-
? never /* stop union type forming */
207-
: Head extends `${string}${Numbers}`
208-
? never /* stop union type forming */
209-
: `${Head}_${ToSnake<Caps>}_${ToSnake<Tail>}` /* 'aBCd' => `${'a'}_${Lowercase<'B'>}_${ToSnake<'Cd'>}` */
210-
: `${ToSnake<Head>}_${Lowercase<Caps>}${ToSnake<Tail>}` /* 'aBcD' where Caps = 'B' tail starts as lowercase */
211-
: never
212-
: never
213-
: never
172+
? Head extends '' // there is a capital char in the first position
173+
? Tail extends ''
174+
? Lowercase<S> /* 'A' */
175+
: S extends `${infer Caps}${Tail}` // tail exists, has capital characters
176+
? Caps extends CapitalChars
177+
? Tail extends CapitalLetters
178+
? `${Lowercase<Caps>}_${Lowercase<Tail>}` /* 'AB' */
179+
: Tail extends `${CapitalLetters}${string}`
180+
? `${ToSnake<Caps>}_${ToSnake<Tail>}` /* first tail char is upper? 'ABcd' */
181+
: `${ToSnake<Caps>}${ToSnake<Tail>}` /* 'AbCD','AbcD', */ /* TODO: if tail is only numbers, append without underscore */
182+
: never /* never reached, used for inference of caps */
183+
: never
184+
: Tail extends '' /* 'aB' 'abCD' 'ABCD' 'AB' */
185+
? S extends `${Head}${infer Caps}`
186+
? Caps extends CapitalChars
187+
? Head extends Lowercase<Head> /* 'abcD' */
188+
? Caps extends Numbers
189+
? // Head exists and is lowercase, tail does not, Caps is a number, we may be in a sub-select
190+
// if head ends with number, don't split head an Caps, keep contiguous numbers together
191+
Head extends `${string}${Numbers}`
192+
? never
193+
: // head does not end in number, safe to split. 'abc2' -> 'abc_2'
194+
`${ToSnake<Head>}_${Caps}`
195+
: `${ToSnake<Head>}_${ToSnake<Caps>}` /* 'abcD' 'abc25' */
196+
: never /* stop union type forming */
197+
: never
198+
: never /* never reached, used for inference of caps */
199+
: S extends `${Head}${infer Caps}${Tail}` /* 'abCd' 'ABCD' 'AbCd' 'ABcD' */
200+
? Caps extends CapitalChars
201+
? Head extends Lowercase<Head> /* is 'abCd' 'abCD' ? */
202+
? Tail extends CapitalLetters /* is 'abCD' where Caps = 'C' */
203+
? `${ToSnake<Head>}_${ToSnake<Caps>}_${Lowercase<Tail>}` /* aBCD Tail = 'D', Head = 'aB' */
204+
: Tail extends `${CapitalLetters}${string}` /* is 'aBCd' where Caps = 'B' */
205+
? Head extends Numbers
206+
? never /* stop union type forming */
207+
: Head extends `${string}${Numbers}`
208+
? never /* stop union type forming */
209+
: `${Head}_${ToSnake<Caps>}_${ToSnake<Tail>}` /* 'aBCd' => `${'a'}_${Lowercase<'B'>}_${ToSnake<'Cd'>}` */
210+
: `${ToSnake<Head>}_${Lowercase<Caps>}${ToSnake<Tail>}` /* 'aBcD' where Caps = 'B' tail starts as lowercase */
211+
: never
212+
: never
213+
: never
214214
: S /* 'abc' */
215215
: never;
216216

217-
export type ObjectToSnake<T extends object | undefined | null> = T extends undefined
218-
? undefined
219-
: T extends null
220-
? null
221-
: T extends Array<infer ArrayType extends string | number>
222-
? Array<ArrayType>
223-
: T extends Array<infer ArrayType extends object>
224-
? Array<ObjectToSnake<ArrayType>>
225-
: T extends Uint8Array
226-
? Uint8Array
227-
: T extends Date
228-
? Date
229-
: {
230-
[K in keyof T as ToSnake<K>]: T[K] extends Array<infer ArrayType extends string | number>
217+
export type ObjectToSnake<T extends object | undefined | null> =
218+
T extends undefined
219+
? undefined
220+
: T extends null
221+
? null
222+
: T extends Array<infer ArrayType extends string | number>
231223
? Array<ArrayType>
232224
: T extends Array<infer ArrayType extends object>
233-
? Array<ObjectToPascal<ArrayType>>
234-
: T[K] extends object | undefined | null
235-
? ObjectToSnake<T[K]>
236-
: T[K];
237-
};
225+
? Array<ObjectToSnake<ArrayType>>
226+
: T extends Uint8Array
227+
? Uint8Array
228+
: T extends Date
229+
? Date
230+
: {
231+
[K in keyof T as ToSnake<K>]: T[K] extends Array<infer ArrayType extends string | number>
232+
? Array<ArrayType>
233+
: T extends Array<infer ArrayType extends object>
234+
? Array<ObjectToPascal<ArrayType>>
235+
: T[K] extends object | undefined | null
236+
? ObjectToSnake<T[K]>
237+
: T[K];
238+
};
238239

239240
type CapitalLetters =
240241
| 'A'

0 commit comments

Comments
 (0)