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.
158 lines
4.4 KiB
TypeScript
158 lines
4.4 KiB
TypeScript
import path from "path"
|
|
import { execa } from "execa"
|
|
import prompts from "prompts"
|
|
import { afterEach, describe, expect, test, vi } from "vitest"
|
|
|
|
import { updateDependencies } from "../../../src/utils/updaters/update-dependencies"
|
|
|
|
vi.mock("execa")
|
|
vi.mock("prompts")
|
|
|
|
describe("updateDependencies", () => {
|
|
afterEach(() => {
|
|
vi.restoreAllMocks()
|
|
})
|
|
|
|
test.each([
|
|
{
|
|
description:
|
|
"npm without react-day-picker v8 includes no additional flags",
|
|
options: { silent: true },
|
|
dependencies: ["first", "second", "third"],
|
|
devDependencies: ["fourth"],
|
|
config: {
|
|
resolvedPaths: {
|
|
cwd: path.resolve(__dirname, "../../fixtures/project-npm"),
|
|
},
|
|
},
|
|
expectedPackageManager: "npm",
|
|
expectedArgs: ["install", "first", "second", "third"],
|
|
expectedDevArgs: ["install", "-D", "fourth"],
|
|
},
|
|
{
|
|
description:
|
|
"npm with react-day-picker v8 applies force prompt when silent",
|
|
options: { silent: true },
|
|
dependencies: ["first", "second", "third"],
|
|
devDependencies: ["fourth"],
|
|
config: {
|
|
resolvedPaths: {
|
|
cwd: path.resolve(__dirname, "../../fixtures/project-npm-react19"),
|
|
},
|
|
},
|
|
expectedPackageManager: "npm",
|
|
expectedArgs: ["install", "--force", "first", "second", "third"],
|
|
expectedDevArgs: ["install", "--force", "-D", "fourth"],
|
|
},
|
|
{
|
|
description:
|
|
"npm with react-day-picker v8 prompts for flag when not silent",
|
|
flagPrompt: "legacy-peer-deps",
|
|
dependencies: ["first", "second", "third"],
|
|
devDependencies: ["fourth"],
|
|
config: {
|
|
resolvedPaths: {
|
|
cwd: path.resolve(__dirname, "../../fixtures/project-npm-react19"),
|
|
},
|
|
},
|
|
expectedPackageManager: "npm",
|
|
expectedArgs: [
|
|
"install",
|
|
"--legacy-peer-deps",
|
|
"first",
|
|
"second",
|
|
"third",
|
|
],
|
|
expectedDevArgs: ["install", "--legacy-peer-deps", "-D", "fourth"],
|
|
},
|
|
{
|
|
description: "deno uses npm: package prefix",
|
|
dependencies: ["first", "second", "third"],
|
|
devDependencies: ["fourth"],
|
|
config: {
|
|
resolvedPaths: {
|
|
cwd: path.resolve(__dirname, "../../fixtures/project-deno"),
|
|
},
|
|
},
|
|
expectedPackageManager: "deno",
|
|
expectedArgs: ["add", "npm:first", "npm:second", "npm:third"],
|
|
expectedDevArgs: ["add", "-D", "npm:fourth"],
|
|
},
|
|
{
|
|
description: "bun uses bun",
|
|
dependencies: ["first", "second", "third"],
|
|
devDependencies: ["fourth"],
|
|
config: {
|
|
resolvedPaths: {
|
|
cwd: path.resolve(__dirname, "../../fixtures/project-bun"),
|
|
},
|
|
},
|
|
expectedPackageManager: "bun",
|
|
expectedArgs: ["add", "first", "second", "third"],
|
|
expectedDevArgs: ["add", "-D", "fourth"],
|
|
},
|
|
{
|
|
description: "pnpm uses pnpm",
|
|
dependencies: ["first", "second", "third"],
|
|
devDependencies: ["fourth"],
|
|
config: {
|
|
resolvedPaths: {
|
|
cwd: path.resolve(__dirname, "../../fixtures/project-pnpm"),
|
|
},
|
|
},
|
|
expectedPackageManager: "pnpm",
|
|
expectedArgs: ["add", "first", "second", "third"],
|
|
expectedDevArgs: ["add", "-D", "fourth"],
|
|
},
|
|
{
|
|
description: "deduplicates input dependencies",
|
|
options: { silent: true },
|
|
dependencies: ["first", "first"],
|
|
devDependencies: ["second", "second"],
|
|
config: {
|
|
resolvedPaths: {
|
|
cwd: path.resolve(__dirname, "../../fixtures/project-npm"),
|
|
},
|
|
},
|
|
expectedPackageManager: "npm",
|
|
expectedArgs: ["install", "first"],
|
|
expectedDevArgs: ["install", "-D", "second"],
|
|
},
|
|
])(
|
|
"$description",
|
|
async ({
|
|
options,
|
|
flagPrompt,
|
|
config,
|
|
dependencies,
|
|
devDependencies,
|
|
expectedPackageManager,
|
|
expectedArgs,
|
|
expectedDevArgs,
|
|
}) => {
|
|
vi.mocked(prompts).mockResolvedValue({ flag: flagPrompt })
|
|
|
|
await updateDependencies(
|
|
dependencies,
|
|
devDependencies,
|
|
config,
|
|
options ?? {}
|
|
)
|
|
|
|
if (flagPrompt) {
|
|
expect(prompts).toHaveBeenCalled()
|
|
}
|
|
|
|
expect(execa).toHaveBeenCalledWith(expectedPackageManager, expectedArgs, {
|
|
cwd: config?.resolvedPaths.cwd,
|
|
})
|
|
|
|
expect(execa).toHaveBeenCalledWith(
|
|
expectedPackageManager,
|
|
expectedDevArgs,
|
|
{ cwd: config?.resolvedPaths.cwd }
|
|
)
|
|
}
|
|
)
|
|
})
|