linkConfigs() — tailwindcss Function Reference
Architecture documentation for the linkConfigs() function in link.ts from the tailwindcss codebase.
Entity Profile
Dependency Diagram
graph TD 4f9fee38_d67e_7a5e_2399_4ea7bba30391["linkConfigs()"] 391ead49_f8b5_2b23_a9fe_31a150c72620["link.ts"] 4f9fee38_d67e_7a5e_2399_4ea7bba30391 -->|defined in| 391ead49_f8b5_2b23_a9fe_31a150c72620 d3ccc5ce_e370_63df_a97d_a2f004fd83ca["highlight()"] 4f9fee38_d67e_7a5e_2399_4ea7bba30391 -->|calls| d3ccc5ce_e370_63df_a97d_a2f004fd83ca af4df363_0f48_b01c_23c9_2fbbbb45c164["detectConfigPath()"] 4f9fee38_d67e_7a5e_2399_4ea7bba30391 -->|calls| af4df363_0f48_b01c_23c9_2fbbbb45c164 2820372c_b982_9e06_fc23_f8f4ac308d00["get()"] 4f9fee38_d67e_7a5e_2399_4ea7bba30391 -->|calls| 2820372c_b982_9e06_fc23_f8f4ac308d00 6c5b3bb2_4069_e0af_8887_216e1c995446["error()"] 4f9fee38_d67e_7a5e_2399_4ea7bba30391 -->|calls| 6c5b3bb2_4069_e0af_8887_216e1c995446 1c806fef_a933_285c_65d9_c10998b12c7d["relative()"] 4f9fee38_d67e_7a5e_2399_4ea7bba30391 -->|calls| 1c806fef_a933_285c_65d9_c10998b12c7d a8400c40_f6b4_6c1d_1812_df53f33aaafc["success()"] 4f9fee38_d67e_7a5e_2399_4ea7bba30391 -->|calls| a8400c40_f6b4_6c1d_1812_df53f33aaafc style 4f9fee38_d67e_7a5e_2399_4ea7bba30391 fill:#6366f1,stroke:#818cf8,color:#fff
Relationship Graph
Source Code
packages/@tailwindcss-upgrade/src/codemods/css/link.ts lines 9–122
export async function linkConfigs(
stylesheets: Stylesheet[],
{ configPath, base }: { configPath: string | null; base: string },
) {
let rootStylesheets = stylesheets.filter((sheet) => sheet.isTailwindRoot)
if (rootStylesheets.length === 0) {
throw new Error(
`Cannot find any CSS files that reference Tailwind CSS.\nBefore your project can be upgraded you need to create a CSS file that imports Tailwind CSS or uses ${highlight('@tailwind')}.`,
)
}
let withoutAtConfig = rootStylesheets.filter((sheet) => {
let hasConfig = false
sheet.root.walkAtRules('config', (node) => {
let configPath = path.resolve(path.dirname(sheet.file!), node.params.slice(1, -1))
sheet.linkedConfigPath = configPath
hasConfig = true
return false
})
return !hasConfig
})
// All stylesheets have a `@config` directives
if (withoutAtConfig.length === 0) return
// Find the config file path for each stylesheet
let configPathBySheet = new Map<Stylesheet, string>()
let sheetByConfigPath = new DefaultMap<string, Set<Stylesheet>>(() => new Set())
for (let sheet of withoutAtConfig) {
if (!sheet.file) continue
let localConfigPath = configPath as string
if (configPath === null) {
localConfigPath = await detectConfigPath(path.dirname(sheet.file), base)
} else if (!path.isAbsolute(localConfigPath)) {
localConfigPath = path.resolve(base, localConfigPath)
}
configPathBySheet.set(sheet, localConfigPath)
sheetByConfigPath.get(localConfigPath).add(sheet)
}
let problematicStylesheets = new Set<Stylesheet>()
for (let sheets of sheetByConfigPath.values()) {
if (sheets.size > 1) {
for (let sheet of sheets) {
problematicStylesheets.add(sheet)
}
}
}
// There are multiple "root" files without `@config` directives. Manual
// intervention is needed to link to the correct Tailwind config files.
if (problematicStylesheets.size > 1) {
for (let sheet of problematicStylesheets) {
error(
`Could not determine configuration file for: ${highlight(relative(sheet.file!, base))}\nUpdate your stylesheet to use ${highlight('@config')} to specify the correct configuration file explicitly and then run the upgrade tool again.`,
{ prefix: '↳ ' },
)
}
process.exit(1)
}
let relativePath = relative
for (let [sheet, configPath] of configPathBySheet) {
try {
if (!sheet || !sheet.file) return
success(
`Linked ${highlight(relativePath(configPath, base))} to ${highlight(relativePath(sheet.file, base))}`,
{ prefix: '↳ ' },
)
// Link the `@config` directive to the root stylesheets
// Track the config file path on the stylesheet itself for easy access
// without traversing the CSS ast and finding the corresponding
// `@config` later.
sheet.linkedConfigPath = configPath
// Create a relative path from the current file to the config file.
let relative = path.relative(path.dirname(sheet.file), configPath)
Domain
Subdomains
Source
Frequently Asked Questions
What does linkConfigs() do?
linkConfigs() is a function in the tailwindcss codebase, defined in packages/@tailwindcss-upgrade/src/codemods/css/link.ts.
Where is linkConfigs() defined?
linkConfigs() is defined in packages/@tailwindcss-upgrade/src/codemods/css/link.ts at line 9.
What does linkConfigs() call?
linkConfigs() calls 6 function(s): detectConfigPath, error, get, highlight, relative, success.
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free