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) {
Domain
Subdomains
Defined In
Source
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