mirror of
https://github.com/hanzoai/shadcn.git
synced 2026-10-30 18:22:59 +00:00
* refactor: decouple @hanzo/ui from hanzogui Make @hanzo/ui shadcn-only — no hanzogui/Tamagui coupling. - remove primitives/bases (gui/admin/svelte/vue) re-exports - drop @hanzogui peerDependencies + peerDependenciesMeta entries - add check-no-hanzogui guard, wired into build - fix latent NodeJS.Timeout types to keep the build green * refactor: remove duplicate @hanzo/brand from the monorepo @hanzo/brand is owned by the standalone hanzoai/brand (the npm-canonical source); this monorepo's copy was unused and had drifted. - delete pkg/brand - add check-no-brand-pkg guard (wired into `check`) so it can't reappear * refactor(ui): stop importing from the app; use own cn util pkg/ui pulled `cn` from @/lib/utils (../../app) — an inverted dependency on the consuming app. Point the animation components at pkg/ui's own cn and drop the @/app, @/registry, @/lib tsconfig path aliases. * fix(ui): type errors; stop tracking the root lockfile - ModelCard: lucide-react dropped the Github icon → use Code - drawer: annotate DrawerTrigger/DrawerClose (radix type portability) - untrack root pnpm-lock.yaml; CI → --no-frozen-lockfile * release: bump @hanzo/ui to 5.7.0 * refactor: rename pkg/ → pkgs/, merge packages/ into it standardize on 'pkgs/': move pkg/* and packages/* into pkgs/. Update workspace globs, CI, scripts, and config references accordingly.
57 lines
1.7 KiB
TypeScript
57 lines
1.7 KiB
TypeScript
import { describe, expect, it } from "vitest"
|
|
|
|
import { parseRegistryArg } from "../../src/commands/registry/add"
|
|
|
|
describe("parseRegistryArg", () => {
|
|
it("should parse namespace without URL", () => {
|
|
expect(parseRegistryArg("@magicui")).toEqual({ namespace: "@magicui" })
|
|
expect(parseRegistryArg("@aceternity")).toEqual({ namespace: "@aceternity" })
|
|
})
|
|
|
|
it("should parse namespace with URL", () => {
|
|
expect(
|
|
parseRegistryArg("@mycompany=https://example.com/r/{name}.json")
|
|
).toEqual({
|
|
namespace: "@mycompany",
|
|
url: "https://example.com/r/{name}.json",
|
|
})
|
|
})
|
|
|
|
it("should handle URL with query params containing =", () => {
|
|
expect(
|
|
parseRegistryArg("@foo=https://example.com/r/{name}.json?token=abc")
|
|
).toEqual({
|
|
namespace: "@foo",
|
|
url: "https://example.com/r/{name}.json?token=abc",
|
|
})
|
|
})
|
|
|
|
it("should handle URL with multiple = in query params", () => {
|
|
expect(
|
|
parseRegistryArg(
|
|
"@bar=https://example.com/r/{name}.json?token=abc&key=xyz"
|
|
)
|
|
).toEqual({
|
|
namespace: "@bar",
|
|
url: "https://example.com/r/{name}.json?token=abc&key=xyz",
|
|
})
|
|
})
|
|
|
|
it("should handle URL with port number", () => {
|
|
expect(
|
|
parseRegistryArg("@local=http://localhost:8080/r/{name}.json")
|
|
).toEqual({
|
|
namespace: "@local",
|
|
url: "http://localhost:8080/r/{name}.json",
|
|
})
|
|
})
|
|
|
|
it("should throw for namespace without @", () => {
|
|
expect(() => parseRegistryArg("foo")).toThrow("must start with @")
|
|
expect(() => parseRegistryArg("magicui")).toThrow("must start with @")
|
|
expect(() =>
|
|
parseRegistryArg("mycompany=https://example.com/r/{name}.json")
|
|
).toThrow("must start with @")
|
|
})
|
|
})
|