Files
shadcn-ui/packages/shadcn/test/utils/registry.test.ts
shadcn 07eda36b13 feat(shadcn): add namespaced registries support (#7919)
* chore(shadcn): implement registries poc

* feat(shadcn): refactor our initial implementation

* feat(shadcn): properly resolve namespaced registryDependencies

* feat(shadcn): resolve namespaced registries recursively

* fix

* feat(shadcn): implement dotenv support

* test(shadcn): mock shadcn registry

* fix

* fix

* fix

* refactor(shadcn): update functions and tests

* refactor(shadcn): add fetchFromRegistry (#7937)

* fix

* feat(shadcn): add shadcn as a built-in registry

* fix

* feat(shadcn): update no framework and shadcn
2025-08-04 14:35:41 +04:00

73 lines
2.0 KiB
TypeScript

import { expect, test } from "vitest"
import { z } from "zod"
import { resolveTree } from "../../src/registry/api"
import { registryItemSchema } from "../../src/registry/schema"
test("resolve tree", async () => {
const index = [
{
name: "button",
dependencies: ["@radix-ui/react-slot"],
type: "registry:ui",
files: [{ type: "registry:ui", path: "button.tsx" }],
},
{
name: "dialog",
dependencies: ["@radix-ui/react-dialog"],
registryDependencies: ["button"],
type: "registry:ui",
files: [{ type: "registry:ui", path: "dialog.tsx" }],
},
{
name: "input",
registryDependencies: ["button"],
type: "registry:ui",
files: [{ type: "registry:ui", path: "input.tsx" }],
},
{
name: "alert-dialog",
dependencies: ["@radix-ui/react-alert-dialog"],
registryDependencies: ["button", "dialog"],
type: "registry:ui",
files: [{ type: "registry:ui", path: "alert-dialog.tsx" }],
},
{
name: "example-card",
type: "registry:component",
files: [{ type: "registry:component", path: "example-card.tsx" }],
registryDependencies: ["button", "dialog", "input"],
},
] satisfies z.infer<typeof registryItemSchema>[]
expect(
(await resolveTree(index, ["button"])).map((entry) => entry.name).sort()
).toEqual(["button"])
expect(
(await resolveTree(index, ["dialog"])).map((entry) => entry.name).sort()
).toEqual(["button", "dialog"])
expect(
(await resolveTree(index, ["alert-dialog", "dialog"]))
.map((entry) => entry.name)
.sort()
).toEqual(["alert-dialog", "button", "dialog"])
expect(
(await resolveTree(index, ["example-card"]))
.map((entry) => entry.name)
.sort()
).toEqual(["button", "dialog", "example-card", "input"])
expect(
(await resolveTree(index, ["foo"])).map((entry) => entry.name).sort()
).toEqual([])
expect(
(await resolveTree(index, ["button", "foo"]))
.map((entry) => entry.name)
.sort()
).toEqual(["button"])
})