From 40c3ff513a88ca8e6f02bf798a7cf73b88401024 Mon Sep 17 00:00:00 2001 From: Ziad Beyens Date: Tue, 14 Oct 2025 15:14:05 +0200 Subject: [PATCH] fix(registry): handle universal registry items with no files (#8420) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix(registry): handle universal registry items with no files Allow registry items with registryDependencies but no files to be considered universal registry items. Previously the function required files.length to be truthy, which excluded valid items with only registryDependencies. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude * test --------- Co-authored-by: Claude Co-authored-by: shadcn --- .../fix-universal-registry-item-empty-files.md | 5 +++++ packages/shadcn/src/registry/utils.test.ts | 8 ++++---- packages/shadcn/src/registry/utils.ts | 17 ++++++++++------- 3 files changed, 19 insertions(+), 11 deletions(-) create mode 100644 .changeset/fix-universal-registry-item-empty-files.md diff --git a/.changeset/fix-universal-registry-item-empty-files.md b/.changeset/fix-universal-registry-item-empty-files.md new file mode 100644 index 0000000000..863599f638 --- /dev/null +++ b/.changeset/fix-universal-registry-item-empty-files.md @@ -0,0 +1,5 @@ +--- +"shadcn": patch +--- + +Fix support for universal registry items that only have dependencies without files diff --git a/packages/shadcn/src/registry/utils.test.ts b/packages/shadcn/src/registry/utils.test.ts index e94198b1c9..79b42fe393 100644 --- a/packages/shadcn/src/registry/utils.test.ts +++ b/packages/shadcn/src/registry/utils.test.ts @@ -216,16 +216,16 @@ describe("isUniversalRegistryItem", () => { expect(isUniversalRegistryItem(registryItem)).toBe(false) }) - it("should return false when files array is empty", () => { + it("should return true when files array is empty", () => { const registryItem = { files: [], } - expect(isUniversalRegistryItem(registryItem)).toBe(false) + expect(isUniversalRegistryItem(registryItem)).toBe(true) }) - it("should return false when files is undefined", () => { + it("should return true when files is undefined", () => { const registryItem = {} - expect(isUniversalRegistryItem(registryItem)).toBe(false) + expect(isUniversalRegistryItem(registryItem)).toBe(true) }) it("should return false when registryItem is null", () => { diff --git a/packages/shadcn/src/registry/utils.ts b/packages/shadcn/src/registry/utils.ts index 84fd4cdc62..d17abe197f 100644 --- a/packages/shadcn/src/registry/utils.ts +++ b/packages/shadcn/src/registry/utils.ts @@ -278,13 +278,16 @@ export function isUniversalRegistryItem( | null | undefined ): boolean { - return ( - !!registryItem?.files?.length && - registryItem.files.every( - (file) => - !!file.target && - (file.type === "registry:file" || file.type === "registry:item") - ) + if (!registryItem) { + return false + } + + const files = registryItem.files ?? [] + + return files.every( + (file) => + !!file.target && + (file.type === "registry:file" || file.type === "registry:item") ) }