Home / Function/ migratePostCSSJsonConfig() — tailwindcss Function Reference

migratePostCSSJsonConfig() — tailwindcss Function Reference

Architecture documentation for the migratePostCSSJsonConfig() function in migrate-postcss.ts from the tailwindcss codebase.

Entity Profile

Dependency Diagram

graph TD
  0ccb260e_2714_f920_2a7e_d2bdd00bcf77["migratePostCSSJsonConfig()"]
  5987acc9_de8e_d765_ba48_301e64c09fab["migratePostCSSConfig()"]
  5987acc9_de8e_d765_ba48_301e64c09fab -->|calls| 0ccb260e_2714_f920_2a7e_d2bdd00bcf77
  64689fb8_6d6d_4841_5824_0d7f46f7e654["isEmptyObject()"]
  0ccb260e_2714_f920_2a7e_d2bdd00bcf77 -->|calls| 64689fb8_6d6d_4841_5824_0d7f46f7e654
  style 0ccb260e_2714_f920_2a7e_d2bdd00bcf77 fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

packages/@tailwindcss-upgrade/src/codemods/config/migrate-postcss.ts lines 214–290

async function migratePostCSSJsonConfig(json: any): Promise<{
  json: any
  didAddPostcssClient: boolean
  didRemoveAutoprefixer: boolean
  didRemovePostCSSImport: boolean
} | null> {
  function isTailwindCSSPlugin(plugin: string, options: any) {
    return plugin === 'tailwindcss' && isEmptyObject(options)
  }
  function isPostCSSImportPlugin(plugin: string, options: any) {
    return plugin === 'postcss-import' && isEmptyObject(options)
  }
  function isAutoprefixerPlugin(plugin: string, options: any) {
    return plugin === 'autoprefixer' && isEmptyObject(options)
  }
  function isTailwindCSSNestingPlugin(plugin: string, options: any) {
    return (
      plugin === 'tailwindcss/nesting' && (options === 'postcss-nesting' || isEmptyObject(options))
    )
  }

  let didAddPostcssClient = false
  let didRemoveAutoprefixer = false
  let didRemovePostCSSImport = false

  let plugins = Object.entries(json.plugins || {})

  let newPlugins: [string, any][] = []
  for (let i = 0; i < plugins.length; i++) {
    let [plugin, options] = plugins[i]

    if (isTailwindCSSPlugin(plugin, options)) {
      didAddPostcssClient = true
      newPlugins.push(['@tailwindcss/postcss', options])
    } else if (isAutoprefixerPlugin(plugin, options)) {
      didRemoveAutoprefixer = true
    } else if (isPostCSSImportPlugin(plugin, options)) {
      // Check that there are no unknown plugins before the tailwindcss plugin
      let hasUnknownPluginsBeforeTailwindCSS = false
      for (let j = i + 1; j < plugins.length; j++) {
        let [nextPlugin, nextOptions] = plugins[j]
        if (isTailwindCSSPlugin(nextPlugin, nextOptions)) {
          break
        }
        if (isTailwindCSSNestingPlugin(nextPlugin, nextOptions)) {
          continue
        }
        hasUnknownPluginsBeforeTailwindCSS = true
        break
      }

      if (!hasUnknownPluginsBeforeTailwindCSS) {
        didRemovePostCSSImport = true
      } else {
        newPlugins.push([plugin, options])
      }
    } else if (isTailwindCSSNestingPlugin(plugin, options)) {
      // Check if the following rule is the tailwindcss plugin
      let [nextPlugin, nextOptions] = plugins[i + 1]
      if (isTailwindCSSPlugin(nextPlugin, nextOptions)) {
        // Since this plugin is bundled with `tailwindcss`, we don't need to
        // clean up a package when deleting this line.
      } else {
        newPlugins.push([plugin, options])
      }
    } else {
      newPlugins.push([plugin, options])
    }
  }

  return {
    json: { ...json, plugins: Object.fromEntries(newPlugins) },
    didAddPostcssClient,
    didRemoveAutoprefixer,
    didRemovePostCSSImport,
  }
}

Subdomains

Frequently Asked Questions

What does migratePostCSSJsonConfig() do?
migratePostCSSJsonConfig() is a function in the tailwindcss codebase.
What does migratePostCSSJsonConfig() call?
migratePostCSSJsonConfig() calls 1 function(s): isEmptyObject.
What calls migratePostCSSJsonConfig()?
migratePostCSSJsonConfig() is called by 1 function(s): migratePostCSSConfig.

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free