test
This commit is contained in:
		
							
								
								
									
										64
									
								
								registry-template/app/registry/[name]/route.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										64
									
								
								registry-template/app/registry/[name]/route.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,64 @@ | ||||
| import { NextResponse } from "next/server" | ||||
| import path from "path" | ||||
| import { promises as fs } from "fs" | ||||
| import { registryItemSchema } from "shadcn/registry" | ||||
|  | ||||
| // Use the registry.json file to generate static paths. | ||||
| export const generateStaticParams = async () => { | ||||
|   const registryData = await import("@/registry.json"); | ||||
|   const registry = registryData.default; | ||||
|  | ||||
|   return registry.items.map((item) => ({ | ||||
|     name: item.name, | ||||
|   })); | ||||
| }; | ||||
|  | ||||
| // This route shows an example for serving a component using a route handler. | ||||
| export async function GET( | ||||
|   request: Request, | ||||
|   { params }: { params: Promise<{ name: string }> } | ||||
| ) { | ||||
|   try { | ||||
|     const { name } = await params | ||||
|     // Cache the registry import | ||||
|     const registryData = await import("@/registry.json") | ||||
|     const registry = registryData.default | ||||
|  | ||||
|     // Find the component from the registry. | ||||
|     const component = registry.items.find((c) => c.name === name) | ||||
|  | ||||
|     // If the component is not found, return a 404 error. | ||||
|     if (!component) { | ||||
|       return NextResponse.json( | ||||
|         { error: "Component not found" }, | ||||
|         { status: 404 } | ||||
|       ) | ||||
|     } | ||||
|  | ||||
|     // Validate before file operations. | ||||
|     const registryItem = registryItemSchema.parse(component) | ||||
|  | ||||
|     // If the component has no files, return a 400 error. | ||||
|     if (!registryItem.files?.length) { | ||||
|       return NextResponse.json( | ||||
|         { error: "Component has no files" }, | ||||
|         { status: 400 } | ||||
|       ) | ||||
|     } | ||||
|  | ||||
|     // Read all files in parallel. | ||||
|     const filesWithContent = await Promise.all( | ||||
|       registryItem.files.map(async (file) => { | ||||
|         const filePath = path.join(process.cwd(), file.path) | ||||
|         const content = await fs.readFile(filePath, "utf8") | ||||
|         return { ...file, content } | ||||
|       }) | ||||
|     ) | ||||
|  | ||||
|     // Return the component with the files. | ||||
|     return NextResponse.json({ ...registryItem, files: filesWithContent }) | ||||
|   } catch (error) { | ||||
|     console.error("Error processing component request:", error) | ||||
|     return NextResponse.json({ error: "Something went wrong" }, { status: 500 }) | ||||
|   } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user