Skip to content

Commit 0c34d2f

Browse files
committed
make cloneCandidate and cloneVariant generic over T
This just means that if you pass in an static candidate, that a static candidate comes out. Otherwise an static candidate results in the generic `Candidate` type which is too wide.
1 parent f29f8f4 commit 0c34d2f

File tree

1 file changed

+16
-9
lines changed

1 file changed

+16
-9
lines changed

packages/tailwindcss/src/candidate.ts

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -215,7 +215,7 @@ export type Candidate =
215215
raw: string
216216
}
217217

218-
export function cloneCandidate(candidate: Candidate): Candidate {
218+
export function cloneCandidate<T extends Candidate>(candidate: T): T {
219219
switch (candidate.kind) {
220220
case 'arbitrary':
221221
return {
@@ -228,7 +228,7 @@ export function cloneCandidate(candidate: Candidate): Candidate {
228228
variants: candidate.variants.map(cloneVariant),
229229
important: candidate.important,
230230
raw: candidate.raw,
231-
}
231+
} satisfies Extract<Candidate, { kind: 'arbitrary' }> as T
232232

233233
case 'static':
234234
return {
@@ -237,7 +237,7 @@ export function cloneCandidate(candidate: Candidate): Candidate {
237237
variants: candidate.variants.map(cloneVariant),
238238
important: candidate.important,
239239
raw: candidate.raw,
240-
}
240+
} satisfies Extract<Candidate, { kind: 'static' }> as T
241241

242242
case 'functional':
243243
return {
@@ -262,21 +262,28 @@ export function cloneCandidate(candidate: Candidate): Candidate {
262262
variants: candidate.variants.map(cloneVariant),
263263
important: candidate.important,
264264
raw: candidate.raw,
265-
}
265+
} satisfies Extract<Candidate, { kind: 'functional' }> as T
266266

267267
default:
268268
candidate satisfies never
269269
throw new Error('Unknown candidate kind')
270270
}
271271
}
272272

273-
export function cloneVariant(variant: Variant): Variant {
273+
export function cloneVariant<T extends Variant>(variant: T): T {
274274
switch (variant.kind) {
275275
case 'arbitrary':
276-
return { kind: variant.kind, selector: variant.selector, relative: variant.relative }
276+
return {
277+
kind: variant.kind,
278+
selector: variant.selector,
279+
relative: variant.relative,
280+
} satisfies Extract<Variant, { kind: 'arbitrary' }> as T
277281

278282
case 'static':
279-
return { kind: variant.kind, root: variant.root }
283+
return { kind: variant.kind, root: variant.root } satisfies Extract<
284+
Variant,
285+
{ kind: 'static' }
286+
> as T
280287

281288
case 'functional':
282289
return {
@@ -286,7 +293,7 @@ export function cloneVariant(variant: Variant): Variant {
286293
modifier: variant.modifier
287294
? { kind: variant.modifier.kind, value: variant.modifier.value }
288295
: null,
289-
}
296+
} satisfies Extract<Variant, { kind: 'functional' }> as T
290297

291298
case 'compound':
292299
return {
@@ -296,7 +303,7 @@ export function cloneVariant(variant: Variant): Variant {
296303
modifier: variant.modifier
297304
? { kind: variant.modifier.kind, value: variant.modifier.value }
298305
: null,
299-
}
306+
} satisfies Extract<Variant, { kind: 'compound' }> as T
300307

301308
default:
302309
variant satisfies never

0 commit comments

Comments
 (0)