Home / Function/ resolveRegistryTree() — ui Function Reference

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

Subdomains

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