Home / Function/ resolveDependenciesRecursively() — ui Function Reference

resolveDependenciesRecursively() — ui Function Reference

Architecture documentation for the resolveDependenciesRecursively() function in resolver.ts from the ui codebase.

Entity Profile

Dependency Diagram

graph TD
  f476bcff_f29a_8f7d_eaa0_e8bc5b1e6faf["resolveDependenciesRecursively()"]
  c819bacb_5122_731b_64d6_d23131b1f806["resolver.ts"]
  f476bcff_f29a_8f7d_eaa0_e8bc5b1e6faf -->|defined in| c819bacb_5122_731b_64d6_d23131b1f806
  e645527e_af9e_1457_dc85_48f0a4c79a9a["resolveRegistryTree()"]
  e645527e_af9e_1457_dc85_48f0a4c79a9a -->|calls| f476bcff_f29a_8f7d_eaa0_e8bc5b1e6faf
  67ca7e01_f1eb_1259_9498_c32d357af4d6["resolveRegistryDependencies()"]
  67ca7e01_f1eb_1259_9498_c32d357af4d6 -->|calls| f476bcff_f29a_8f7d_eaa0_e8bc5b1e6faf
  d55b2df0_7c6f_b6fc_7615_359b44b0b05d["fetchRegistryItems()"]
  f476bcff_f29a_8f7d_eaa0_e8bc5b1e6faf -->|calls| d55b2df0_7c6f_b6fc_7615_359b44b0b05d
  a58cd53f_1cbe_da72_d846_9463c4f0a106["resolveRegistryItemsFromRegistries()"]
  f476bcff_f29a_8f7d_eaa0_e8bc5b1e6faf -->|calls| a58cd53f_1cbe_da72_d846_9463c4f0a106
  style f476bcff_f29a_8f7d_eaa0_e8bc5b1e6faf fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

packages/shadcn/src/registry/resolver.ts lines 366–473

async function resolveDependenciesRecursively(
  dependencies: string[],
  config: Config,
  options: { useCache?: boolean } = {},
  visited: Set<string> = new Set()
) {
  const items: z.infer<typeof registryItemSchema>[] = []
  const registryNames: string[] = []

  for (const dep of dependencies) {
    if (visited.has(dep)) {
      continue
    }
    visited.add(dep)

    // Handle URLs and local files directly.
    if (isUrl(dep) || isLocalFile(dep)) {
      const [item] = await fetchRegistryItems([dep], config, options)
      if (item) {
        items.push(item)
        if (item.registryDependencies) {
          // Resolve namespaced dependencies to set proper headers.
          const resolvedDeps = config?.registries
            ? resolveRegistryItemsFromRegistries(
                item.registryDependencies,
                config
              )
            : item.registryDependencies

          const nested = await resolveDependenciesRecursively(
            resolvedDeps,
            config,
            options,
            visited
          )
          items.push(...nested.items)
          registryNames.push(...nested.registryNames)
        }
      }
    }
    // Handle namespaced items (e.g., @one/foo, @two/bar).
    else if (dep.startsWith("@") && config?.registries) {
      // Check if the registry exists.
      const { registry } = parseRegistryAndItemFromString(dep)
      if (registry && !(registry in config.registries)) {
        throw new RegistryNotConfiguredError(registry)
      }

      // Let getRegistryItem handle the namespaced item with config
      // This ensures proper authentication headers are used
      const [item] = await fetchRegistryItems([dep], config, options)
      if (item) {
        items.push(item)
        if (item.registryDependencies) {
          // Resolve namespaced dependencies to set proper headers.
          const resolvedDeps = config?.registries
            ? resolveRegistryItemsFromRegistries(
                item.registryDependencies,
                config
              )
            : item.registryDependencies

          const nested = await resolveDependenciesRecursively(
            resolvedDeps,
            config,
            options,
            visited
          )
          items.push(...nested.items)
          registryNames.push(...nested.registryNames)
        }
      }
    }
    // Handle regular component names.
    else {
      registryNames.push(dep)

      if (config) {
        try {
          const [item] = await fetchRegistryItems([dep], config, options)
          if (item && item.registryDependencies) {

Subdomains

Frequently Asked Questions

What does resolveDependenciesRecursively() do?
resolveDependenciesRecursively() is a function in the ui codebase, defined in packages/shadcn/src/registry/resolver.ts.
Where is resolveDependenciesRecursively() defined?
resolveDependenciesRecursively() is defined in packages/shadcn/src/registry/resolver.ts at line 366.
What does resolveDependenciesRecursively() call?
resolveDependenciesRecursively() calls 2 function(s): fetchRegistryItems, resolveRegistryItemsFromRegistries.
What calls resolveDependenciesRecursively()?
resolveDependenciesRecursively() is called by 2 function(s): resolveRegistryDependencies, resolveRegistryTree.

Analyze Your Own Codebase

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

Try Supermodel Free