From f6e2db8891e6ea940117e88e6ea0fa9a6572a8c4 Mon Sep 17 00:00:00 2001 From: Hellings Date: Fri, 23 Oct 2026 09:12:49 -0400 Subject: [PATCH] better formatting --- index.ts | 5 ++++- package.json | 12 +++++++----- src/integration.ts | 44 ++++++++++++++++++++++++++++++++++---------- 3 files changed, 45 insertions(+), 16 deletions(-) diff --git a/index.ts b/index.ts index f93f5b4..8ce0548 100644 --- a/index.ts +++ b/index.ts @@ -1 +1,4 @@ -export { shadcnIntegration, type ShadcnIntegrationOptions } from "./src/integration.ts"; +export { + shadcnIntegration, + type ShadcnIntegrationOptions, +} from "./src/integration.ts"; diff --git a/package.json b/package.json index 06e46fe..e0533fc 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,9 @@ { - "name": "@muddle/shadcn", - "type": "module", - "exports": "./index.ts", - "version": "0.1.0", - "peerDependencies": { "muddle": "*" } + "name": "@muddle/shadcn", + "type": "module", + "exports": "./index.ts", + "version": "0.1.0", + "peerDependencies": { + "muddle": "*" + } } diff --git a/src/integration.ts b/src/integration.ts index 9d51f81..a9cd130 100644 --- a/src/integration.ts +++ b/src/integration.ts @@ -1,6 +1,11 @@ import { mkdir, writeFile } from "node:fs/promises"; import { basename, extname, join, resolve } from "node:path"; -import { cssToStcss, reactToSpug, type Integration, type IntegrationContext } from "muddle"; +import { + cssToStcss, + reactToSpug, + type Integration, + type IntegrationContext, +} from "muddle"; export interface ShadcnIntegrationOptions { components: string[]; @@ -15,32 +20,51 @@ interface RegistryItem { } /** Pulls ShadCN registry entries and writes their Muddle ports into the host project. */ -export function shadcnIntegration(options: ShadcnIntegrationOptions): Integration { +export function shadcnIntegration( + options: ShadcnIntegrationOptions, +): Integration { return { name: "shadcn", async setup(context: IntegrationContext) { const fetcher = options.fetch ?? globalThis.fetch; - const destination = resolve(context.config.root, options.dir ?? "modules/app/views/components"); + const destination = resolve( + context.config.root, + options.dir ?? "modules/app/views/components", + ); const styles = resolve(context.config.root, "styles/shadcn"); const seen = new Set(); const pull = async (name: string): Promise => { if (seen.has(name)) return; seen.add(name); - const base = options.registry ?? "https://ui.shadcn.com/r/styles/new-york/{name}.json"; - const url = base.includes("{name}") ? base.replace("{name}", encodeURIComponent(name)) : `${base.replace(/\/$/, "")}/${encodeURIComponent(name)}.json`; + const base = + options.registry ?? + "https://ui.shadcn.com/r/styles/new-york/{name}.json"; + const url = base.includes("{name}") + ? base.replace("{name}", encodeURIComponent(name)) + : `${base.replace(/\/$/, "")}/${encodeURIComponent(name)}.json`; const response = await fetcher(url); - if (!response.ok) throw new Error(`shadcn registry request failed for ${name} with ${response.status}`); - const item = await response.json() as RegistryItem; - for (const dependency of item.registryDependencies ?? []) await pull(dependency.replace(/^@[^/]+\//, "")); + if (!response.ok) + throw new Error( + `shadcn registry request failed for ${name} with ${response.status}`, + ); + const item = (await response.json()) as RegistryItem; + for (const dependency of item.registryDependencies ?? []) + await pull(dependency.replace(/^@[^/]+\//, "")); for (const file of item.files ?? []) { const extension = extname(file.path).toLowerCase(); const stem = basename(file.path).replace(/\.(tsx|jsx|css)$/i, ""); if (extension === ".tsx" || extension === ".jsx") { await mkdir(destination, { recursive: true }); - await writeFile(join(destination, `${stem}.spug`), reactToSpug(file.content, file.path)); + await writeFile( + join(destination, `${stem}.spug`), + reactToSpug(file.content, file.path), + ); } else if (extension === ".css") { await mkdir(styles, { recursive: true }); - await writeFile(join(styles, `${stem}.stcss`), cssToStcss(file.content, file.path)); + await writeFile( + join(styles, `${stem}.stcss`), + cssToStcss(file.content, file.path), + ); } } };