sortBuckets() — tailwindcss Function Reference
Architecture documentation for the sortBuckets() function in sort-buckets.ts from the tailwindcss codebase.
Entity Profile
Dependency Diagram
graph TD bbbe5224_64f9_042a_8b85_2e287c62c4d1["sortBuckets()"] a1d91fdc_e00f_534f_abf6_a58adf4778f1["sort-buckets.ts"] bbbe5224_64f9_042a_8b85_2e287c62c4d1 -->|defined in| a1d91fdc_e00f_534f_abf6_a58adf4778f1 1957fb3b_c8b6_a30f_cecf_5df5d54d6e6f["migrate()"] 1957fb3b_c8b6_a30f_cecf_5df5d54d6e6f -->|calls| bbbe5224_64f9_042a_8b85_2e287c62c4d1 084f6f8b_fe90_a5cf_9cf6_6fcc92cc6163["migrate()"] 084f6f8b_fe90_a5cf_9cf6_6fcc92cc6163 -->|calls| bbbe5224_64f9_042a_8b85_2e287c62c4d1 65a804da_70aa_285d_ae64_4a33e3ecc639["migrate()"] 65a804da_70aa_285d_ae64_4a33e3ecc639 -->|calls| bbbe5224_64f9_042a_8b85_2e287c62c4d1 2c0c1b71_9ba4_613a_e0ea_df6593217df6["migrate()"] 2c0c1b71_9ba4_613a_e0ea_df6593217df6 -->|calls| bbbe5224_64f9_042a_8b85_2e287c62c4d1 8116723c_3519_f19a_98fa_20694cdfd6fa["migrate()"] 8116723c_3519_f19a_98fa_20694cdfd6fa -->|calls| bbbe5224_64f9_042a_8b85_2e287c62c4d1 691801e2_532e_484c_34a4_aad4e82d7102["migrate()"] 691801e2_532e_484c_34a4_aad4e82d7102 -->|calls| bbbe5224_64f9_042a_8b85_2e287c62c4d1 74585675_6a09_6523_3821_3c9717327602["migrate()"] 74585675_6a09_6523_3821_3c9717327602 -->|calls| bbbe5224_64f9_042a_8b85_2e287c62c4d1 d9bea0e2_8cac_1f78_0da8_1b218d06e7f5["migrate()"] d9bea0e2_8cac_1f78_0da8_1b218d06e7f5 -->|calls| bbbe5224_64f9_042a_8b85_2e287c62c4d1 cfbc0a63_75ff_e07f_f568_e9b2cd8c59dc["migrate()"] cfbc0a63_75ff_e07f_f568_e9b2cd8c59dc -->|calls| bbbe5224_64f9_042a_8b85_2e287c62c4d1 817bb61a_7ad0_1186_790a_6a40126eed80["run()"] 817bb61a_7ad0_1186_790a_6a40126eed80 -->|calls| bbbe5224_64f9_042a_8b85_2e287c62c4d1 2820372c_b982_9e06_fc23_f8f4ac308d00["get()"] bbbe5224_64f9_042a_8b85_2e287c62c4d1 -->|calls| 2820372c_b982_9e06_fc23_f8f4ac308d00 dd7577d7_bdb0_88c5_438f_51bb090ec42a["walk()"] bbbe5224_64f9_042a_8b85_2e287c62c4d1 -->|calls| dd7577d7_bdb0_88c5_438f_51bb090ec42a 71d7e8ed_526a_e8f2_fddf_555fe17518fc["distance()"] bbbe5224_64f9_042a_8b85_2e287c62c4d1 -->|calls| 71d7e8ed_526a_e8f2_fddf_555fe17518fc style bbbe5224_64f9_042a_8b85_2e287c62c4d1 fill:#6366f1,stroke:#818cf8,color:#fff
Relationship Graph
Source Code
packages/@tailwindcss-upgrade/src/codemods/css/sort-buckets.ts lines 24–150
export function sortBuckets(): Plugin {
async function migrate(root: Root) {
// 1. Move items that are not in a bucket, into a bucket
{
let comments: Comment[] = []
let buckets = new DefaultMap<string, AtRule>((name) => {
let bucket = postcss.atRule({ name: 'tw-bucket', params: name, nodes: [] })
root.append(bucket)
return bucket
})
// Seed the buckets with existing buckets
root.walkAtRules('tw-bucket', (node) => {
buckets.set(node.params, node)
})
let lastLayer = 'user'
function injectInto(name: string, ...nodes: ChildNode[]) {
lastLayer = name
buckets.get(name).nodes?.push(...comments.splice(0), ...nodes)
}
walk(root, (node) => {
// Already in a bucket, skip it
if (node.type === 'atrule' && node.name === 'tw-bucket') {
return WalkAction.Skip
}
// Comments belong to the bucket of the nearest node, which is typically
// in the "next" bucket.
if (node.type === 'comment') {
// We already have comments, which means that we already have nodes
// that belong in the next bucket, so we should move the current
// comment into the next bucket as well.
if (comments.length > 0) {
comments.push(node)
return
}
// Figure out the closest node to the comment
let prevDistance = distance(node.prev(), node) ?? Infinity
let nextDistance = distance(node, node.next()) ?? Infinity
if (prevDistance < nextDistance) {
buckets.get(lastLayer).nodes?.push(node)
} else {
comments.push(node)
}
}
// Known at-rules
else if (
node.type === 'atrule' &&
['config', 'plugin', 'source', 'theme', 'utility', 'custom-variant'].includes(node.name)
) {
injectInto(node.name, node)
}
// Imports bucket, which also contains the `@charset` and body-less `@layer`
else if (
(node.type === 'atrule' && node.name === 'layer' && !node.nodes) || // @layer foo, bar;
(node.type === 'atrule' && node.name === 'import') ||
(node.type === 'atrule' && node.name === 'charset') || // @charset "UTF-8";
(node.type === 'atrule' && node.name === 'tailwind')
) {
injectInto('import', node)
}
// User CSS
else if (node.type === 'rule' || node.type === 'atrule') {
injectInto('user', node)
}
// Fallback
else {
injectInto('user', node)
}
return WalkAction.Skip
})
Domain
Subdomains
Calls
Source
Frequently Asked Questions
What does sortBuckets() do?
sortBuckets() is a function in the tailwindcss codebase, defined in packages/@tailwindcss-upgrade/src/codemods/css/sort-buckets.ts.
Where is sortBuckets() defined?
sortBuckets() is defined in packages/@tailwindcss-upgrade/src/codemods/css/sort-buckets.ts at line 24.
What does sortBuckets() call?
sortBuckets() calls 3 function(s): distance, get, walk.
What calls sortBuckets()?
sortBuckets() is called by 10 function(s): migrate, migrate, migrate, migrate, migrate, migrate, migrate, migrate, and 2 more.
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free