migrate-variant-order.test.ts — tailwindcss Source File
Architecture documentation for migrate-variant-order.test.ts, a typescript file in the tailwindcss codebase. 6 imports, 0 dependents.
Entity Profile
Dependency Diagram
graph LR b23e89e2_6e80_9299_6f5e_65de34c32e16["migrate-variant-order.test.ts"] fff09679_e13c_392d_23bb_cebc04ddb008["version.ts"] b23e89e2_6e80_9299_6f5e_65de34c32e16 --> fff09679_e13c_392d_23bb_cebc04ddb008 e3144eb9_0666_0bdb_e31d_1094b50abdd7["migrate-variant-order.ts"] b23e89e2_6e80_9299_6f5e_65de34c32e16 --> e3144eb9_0666_0bdb_e31d_1094b50abdd7 4b9b4a6d_0786_22dc_60cb_a53dc01dd582["migrateVariantOrder"] b23e89e2_6e80_9299_6f5e_65de34c32e16 --> 4b9b4a6d_0786_22dc_60cb_a53dc01dd582 92f2d961_72a4_d195_92d7_2e66972f8894["node"] b23e89e2_6e80_9299_6f5e_65de34c32e16 --> 92f2d961_72a4_d195_92d7_2e66972f8894 211db6bb_9759_d0cf_acda_36d7f5733ce2["dedent"] b23e89e2_6e80_9299_6f5e_65de34c32e16 --> 211db6bb_9759_d0cf_acda_36d7f5733ce2 696bd648_5f24_1b59_8e8b_7a97a692869e["vitest"] b23e89e2_6e80_9299_6f5e_65de34c32e16 --> 696bd648_5f24_1b59_8e8b_7a97a692869e style b23e89e2_6e80_9299_6f5e_65de34c32e16 fill:#6366f1,stroke:#818cf8,color:#fff
Relationship Graph
Source Code
import { __unstable__loadDesignSystem } from '@tailwindcss/node'
import dedent from 'dedent'
import { expect, test, vi } from 'vitest'
import * as versions from '../../utils/version'
import { migrateVariantOrder } from './migrate-variant-order'
vi.spyOn(versions, 'isMajor').mockReturnValue(true)
let css = dedent
test.each([
// Does nothing unless there are at least two variants
['flex', 'flex'],
['hover:flex', 'hover:flex'],
['[color:red]', '[color:red]'],
['[&:focus]:[color:red]', '[&:focus]:[color:red]'],
// Reorders simple variants that include combinators
['*:first:flex', 'first:*:flex'],
// Does not reorder variants without combinators
['data-[invalid]:data-[hover]:flex', 'data-[invalid]:data-[hover]:flex'],
// Does not reorder some known combinations where the order does not matter
['hover:focus:flex', 'hover:focus:flex'],
['focus:hover:flex', 'focus:hover:flex'],
['[&:hover]:[&:focus]:flex', '[&:hover]:[&:focus]:flex'],
['[&:focus]:[&:hover]:flex', '[&:focus]:[&:hover]:flex'],
['data-[a]:data-[b]:flex', 'data-[a]:data-[b]:flex'],
// Handles pseudo-elements that cannot have anything after them
// c.f. https://github.com/tailwindlabs/tailwindcss/pull/13478/files#diff-7779a0eebf6b980dd3abd63b39729b3023cf9a31c91594f5a25ea020b066e1c0
['dark:before:flex', 'dark:before:flex'],
['before:dark:flex', 'dark:before:flex'],
// Puts some pseudo-elements that must appear at the end of the selector at
// the end of the candidate
['dark:*:before:after:flex', 'dark:*:before:after:flex'],
['dark:before:after:*:flex', 'dark:*:before:after:flex'],
// Some pseudo-elements are treated as regular variants
['dark:*:hover:file:focus:underline', 'dark:focus:file:hover:*:underline'],
// Keeps at-rule-variants and the dark variant in the beginning and keeps their
// order
['sm:dark:hover:flex', 'sm:dark:hover:flex'],
['[@media(print)]:group-hover:flex', '[@media(print)]:group-hover:flex'],
['sm:max-xl:data-[a]:data-[b]:dark:hover:flex', 'sm:max-xl:dark:data-[a]:data-[b]:hover:flex'],
[
'sm:data-[root]:*:data-[a]:even:*:data-[b]:even:before:underline',
'sm:even:data-[b]:*:even:data-[a]:*:data-[root]:before:underline',
],
['hover:[@supports(display:grid)]:flex', '[@supports(display:grid)]:hover:flex'],
])('%s => %s', async (candidate, result) => {
let designSystem = await __unstable__loadDesignSystem('@import "tailwindcss";', {
base: __dirname,
})
expect(migrateVariantOrder(designSystem, {}, candidate)).toEqual(result)
})
test('it works with custom variants', async () => {
let designSystem = await __unstable__loadDesignSystem(
css`
@import 'tailwindcss';
@custom-variant atrule {
@media (print) {
@slot;
}
}
@custom-variant combinator {
> * {
@slot;
}
}
@custom-variant pseudo {
&::before {
@slot;
}
}
`,
{
base: __dirname,
},
)
expect(migrateVariantOrder(designSystem, {}, 'combinator:pseudo:atrule:underline')).toEqual(
'atrule:combinator:pseudo:underline',
)
})
Domain
Dependencies
- dedent
- migrate-variant-order.ts
- migrateVariantOrder
- node
- version.ts
- vitest
Source
Frequently Asked Questions
What does migrate-variant-order.test.ts do?
migrate-variant-order.test.ts is a source file in the tailwindcss codebase, written in typescript. It belongs to the UpgradeToolkit domain.
What does migrate-variant-order.test.ts depend on?
migrate-variant-order.test.ts imports 6 module(s): dedent, migrate-variant-order.ts, migrateVariantOrder, node, version.ts, vitest.
Where is migrate-variant-order.test.ts in the architecture?
migrate-variant-order.test.ts is located at packages/@tailwindcss-upgrade/src/codemods/template/migrate-variant-order.test.ts (domain: UpgradeToolkit, directory: packages/@tailwindcss-upgrade/src/codemods/template).
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free