resolveRegistryTree() — ui Function Reference
Architecture documentation for the resolveRegistryTree() function in resolver.ts from the ui codebase.
Entity Profile
Dependency Diagram
graph TD e645527e_af9e_1457_dc85_48f0a4c79a9a["resolveRegistryTree()"] c819bacb_5122_731b_64d6_d23131b1f806["resolver.ts"] e645527e_af9e_1457_dc85_48f0a4c79a9a -->|defined in| c819bacb_5122_731b_64d6_d23131b1f806 d55b2df0_7c6f_b6fc_7615_359b44b0b05d["fetchRegistryItems()"] e645527e_af9e_1457_dc85_48f0a4c79a9a -->|calls| d55b2df0_7c6f_b6fc_7615_359b44b0b05d a58cd53f_1cbe_da72_d846_9463c4f0a106["resolveRegistryItemsFromRegistries()"] e645527e_af9e_1457_dc85_48f0a4c79a9a -->|calls| a58cd53f_1cbe_da72_d846_9463c4f0a106 f476bcff_f29a_8f7d_eaa0_e8bc5b1e6faf["resolveDependenciesRecursively()"] e645527e_af9e_1457_dc85_48f0a4c79a9a -->|calls| f476bcff_f29a_8f7d_eaa0_e8bc5b1e6faf 67ca7e01_f1eb_1259_9498_c32d357af4d6["resolveRegistryDependencies()"] e645527e_af9e_1457_dc85_48f0a4c79a9a -->|calls| 67ca7e01_f1eb_1259_9498_c32d357af4d6 90671d4d_bf58_54b1_e3f7_4070e03faa12["registryGetTheme()"] e645527e_af9e_1457_dc85_48f0a4c79a9a -->|calls| 90671d4d_bf58_54b1_e3f7_4070e03faa12 b52dca21_c127_9ab7_c3a4_02bb7ad550be["topologicalSortRegistryItems()"] e645527e_af9e_1457_dc85_48f0a4c79a9a -->|calls| b52dca21_c127_9ab7_c3a4_02bb7ad550be style e645527e_af9e_1457_dc85_48f0a4c79a9a fill:#6366f1,stroke:#818cf8,color:#fff
Relationship Graph
Source Code
packages/shadcn/src/registry/resolver.ts lines 124–364
export async function resolveRegistryTree(
names: z.infer<typeof registryItemSchema>["name"][],
config: Config,
options: { useCache?: boolean } = {}
) {
options = {
useCache: true,
...options,
}
let payload: z.infer<typeof registryItemWithSourceSchema>[] = []
let allDependencyItems: z.infer<typeof registryItemWithSourceSchema>[] = []
let allDependencyRegistryNames: string[] = []
const uniqueNames = Array.from(new Set(names))
const results = await fetchRegistryItems(uniqueNames, config, options)
const resultMap = new Map<string, z.infer<typeof registryItemSchema>>()
for (let i = 0; i < results.length; i++) {
if (results[i]) {
resultMap.set(uniqueNames[i], results[i])
}
}
for (const [sourceName, item] of Array.from(resultMap.entries())) {
// Add source tracking
const itemWithSource: z.infer<typeof registryItemWithSourceSchema> = {
...item,
_source: sourceName,
}
payload.push(itemWithSource)
if (item.registryDependencies) {
// Resolve namespace syntax and set headers for dependencies
let resolvedDependencies = item.registryDependencies
// Check for namespaced dependencies when no registries are configured
if (!config?.registries) {
const namespacedDeps = item.registryDependencies.filter((dep: string) =>
dep.startsWith("@")
)
if (namespacedDeps.length > 0) {
const { registry } = parseRegistryAndItemFromString(namespacedDeps[0])
throw new RegistryNotConfiguredError(registry)
}
} else {
resolvedDependencies = resolveRegistryItemsFromRegistries(
item.registryDependencies,
config
)
}
const { items, registryNames } = await resolveDependenciesRecursively(
resolvedDependencies,
config,
options,
new Set(uniqueNames)
)
allDependencyItems.push(...items)
allDependencyRegistryNames.push(...registryNames)
}
}
payload.push(...allDependencyItems)
// Handle any remaining registry names that need index resolution
if (allDependencyRegistryNames.length > 0) {
// Remove duplicates from registry names
const uniqueRegistryNames = Array.from(new Set(allDependencyRegistryNames))
// Separate namespaced and non-namespaced items
const nonNamespacedItems = uniqueRegistryNames.filter(
(name) => !name.startsWith("@")
)
const namespacedDepItems = uniqueRegistryNames.filter((name) =>
name.startsWith("@")
)
// Handle namespaced dependency items
if (namespacedDepItems.length > 0) {
Domain
Subdomains
Defined In
Calls
Source
Frequently Asked Questions
What does resolveRegistryTree() do?
resolveRegistryTree() is a function in the ui codebase, defined in packages/shadcn/src/registry/resolver.ts.
Where is resolveRegistryTree() defined?
resolveRegistryTree() is defined in packages/shadcn/src/registry/resolver.ts at line 124.
What does resolveRegistryTree() call?
resolveRegistryTree() calls 6 function(s): fetchRegistryItems, registryGetTheme, resolveDependenciesRecursively, resolveRegistryDependencies, resolveRegistryItemsFromRegistries, topologicalSortRegistryItems.
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free