From 8c25682b9d68025f62e13908d475cae0dfff93a5 Mon Sep 17 00:00:00 2001 From: 2qp <56475797+2qp@users.noreply.github.com> Date: Fri, 26 Sep 2025 19:37:10 +0530 Subject: [PATCH 1/2] refactor(registry/utils): move `determineFileType` to dedicated file to `utils/registry/determine-file-type.ts` avoid upcoming circular deps - `createFileObject` (to be imported into `utils.ts`) will use `determineFileType`, which currently lives in `utils.ts`. - moving it out prevents circular imports between `utils.ts` and `createFileObject`. --- packages/shadcn/src/registry/utils.ts | 25 +------------------ .../src/utils/registry/determine-file-type.ts | 25 +++++++++++++++++++ 2 files changed, 26 insertions(+), 24 deletions(-) create mode 100644 packages/shadcn/src/utils/registry/determine-file-type.ts diff --git a/packages/shadcn/src/registry/utils.ts b/packages/shadcn/src/registry/utils.ts index 84fd4cdc62c..3f703a60c6c 100644 --- a/packages/shadcn/src/registry/utils.ts +++ b/packages/shadcn/src/registry/utils.ts @@ -8,6 +8,7 @@ import { } from "@/src/schema" import { Config } from "@/src/utils/get-config" import { ProjectInfo, getProjectInfo } from "@/src/utils/get-project-info" +import { determineFileType } from "@/src/utils/registry/determine-file-type" import { resolveImport } from "@/src/utils/resolve-import" import { findCommonRoot, @@ -227,30 +228,6 @@ async function createTempSourceFile(filename: string) { return path.join(dir, filename) } -// This is a bit tricky to accurately determine. -// For now we'll use the module specifier to determine the type. -function determineFileType( - moduleSpecifier: string -): z.infer["type"] { - if (moduleSpecifier.includes("/ui/")) { - return "registry:ui" - } - - if (moduleSpecifier.includes("/lib/")) { - return "registry:lib" - } - - if (moduleSpecifier.includes("/hooks/")) { - return "registry:hook" - } - - if (moduleSpecifier.includes("/components/")) { - return "registry:component" - } - - return "registry:component" -} - // Additional utility functions for local file support export function isUrl(path: string) { try { diff --git a/packages/shadcn/src/utils/registry/determine-file-type.ts b/packages/shadcn/src/utils/registry/determine-file-type.ts new file mode 100644 index 00000000000..021c4e0d9ee --- /dev/null +++ b/packages/shadcn/src/utils/registry/determine-file-type.ts @@ -0,0 +1,25 @@ +import type { RegistryItem } from "@/src/registry/schema" + +// This is a bit tricky to accurately determine. +// For now we'll use the module specifier to determine the type. +const determineFileType = (moduleSpecifier: string): RegistryItem["type"] => { + if (moduleSpecifier.includes("/ui/")) { + return "registry:ui" + } + + if (moduleSpecifier.includes("/lib/")) { + return "registry:lib" + } + + if (moduleSpecifier.includes("/hooks/")) { + return "registry:hook" + } + + if (moduleSpecifier.includes("/components/")) { + return "registry:component" + } + + return "registry:component" +} + +export { determineFileType } From 97c801571dfef6b78190ddeec0485bea9b4f17c9 Mon Sep 17 00:00:00 2001 From: 2qp <56475797+2qp@users.noreply.github.com> Date: Tue, 30 Sep 2025 11:41:12 +0530 Subject: [PATCH 2/2] refactor(registry/utils): replace inline original file creation with `createRegistryFile` utility - improve modularity and upcoming reusability - added Type alias `RegistryItemFile` of `registryItemFileSchema` --- packages/shadcn/src/registry/schema.ts | 2 ++ packages/shadcn/src/registry/utils.ts | 7 ++----- .../src/utils/registry/create-registry-file.ts | 16 ++++++++++++++++ 3 files changed, 20 insertions(+), 5 deletions(-) create mode 100644 packages/shadcn/src/utils/registry/create-registry-file.ts diff --git a/packages/shadcn/src/registry/schema.ts b/packages/shadcn/src/registry/schema.ts index 01fafada9cc..30f9608bd94 100644 --- a/packages/shadcn/src/registry/schema.ts +++ b/packages/shadcn/src/registry/schema.ts @@ -36,6 +36,8 @@ export const registryItemFileSchema = z.discriminatedUnion("type", [ }), ]) +export type RegistryItemFile = z.infer + export const registryItemTailwindSchema = z.object({ config: z .object({ diff --git a/packages/shadcn/src/registry/utils.ts b/packages/shadcn/src/registry/utils.ts index 3f703a60c6c..187006222f9 100644 --- a/packages/shadcn/src/registry/utils.ts +++ b/packages/shadcn/src/registry/utils.ts @@ -8,6 +8,7 @@ import { } from "@/src/schema" import { Config } from "@/src/utils/get-config" import { ProjectInfo, getProjectInfo } from "@/src/utils/get-project-info" +import { createRegistryFile } from "@/src/utils/registry/create-registry-file" import { determineFileType } from "@/src/utils/registry/determine-file-type" import { resolveImport } from "@/src/utils/resolve-import" import { @@ -107,11 +108,7 @@ export async function recursivelyResolveFileImports( // Add the original file first const fileType = determineFileType(filePath) - const originalFile = { - path: relativeRegistryFilePath, - type: fileType, - target: "", - } + const originalFile = createRegistryFile(relativeRegistryFilePath, fileType) files.push(originalFile) // 1. Find all import statements in the file. diff --git a/packages/shadcn/src/utils/registry/create-registry-file.ts b/packages/shadcn/src/utils/registry/create-registry-file.ts new file mode 100644 index 00000000000..33b4b1740f9 --- /dev/null +++ b/packages/shadcn/src/utils/registry/create-registry-file.ts @@ -0,0 +1,16 @@ +import { RegistryItemFile } from "@/src/schema" + +const createRegistryFile = ( + filePath: string, + fileType: RegistryItemFile["type"], + target: string = "" +): RegistryItemFile => { + // + return { + path: filePath, + type: fileType, + target: target, + } +} + +export { createRegistryFile }