Home / Function/ sortBuckets() — tailwindcss Function Reference

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
      })

Subdomains

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