build.ts — ui Source File
Architecture documentation for build.ts, a typescript file in the ui codebase. 10 imports, 0 dependents.
Entity Profile
Dependency Diagram
graph LR 60e84aa7_59a8_dec8_e6ff_bc217496a380["build.ts"] 85d52bbd_4b11_bf06_ed3a_d8f77f5fee6d["promises"] 60e84aa7_59a8_dec8_e6ff_bc217496a380 --> 85d52bbd_4b11_bf06_ed3a_d8f77f5fee6d d05ec4ea_7a68_3a36_bfa4_9ba7f8409ee5["path"] 60e84aa7_59a8_dec8_e6ff_bc217496a380 --> d05ec4ea_7a68_3a36_bfa4_9ba7f8409ee5 733bbbcd_6f22_5f0d_0ee1_b46a6a058a6a["preflight-build"] 60e84aa7_59a8_dec8_e6ff_bc217496a380 --> 733bbbcd_6f22_5f0d_0ee1_b46a6a058a6a a3b2545e_3d8c_699d_ef11_6ab18db14666["schema"] 60e84aa7_59a8_dec8_e6ff_bc217496a380 --> a3b2545e_3d8c_699d_ef11_6ab18db14666 6be7d8a9_c93c_8743_3ef7_968efff25479["handle-error"] 60e84aa7_59a8_dec8_e6ff_bc217496a380 --> 6be7d8a9_c93c_8743_3ef7_968efff25479 15e8bad0_00cc_3d96_8e33_2f062120ea7f["highlighter"] 60e84aa7_59a8_dec8_e6ff_bc217496a380 --> 15e8bad0_00cc_3d96_8e33_2f062120ea7f 1df8bbed_5110_29f0_12f0_996fc7a1eda1["logger"] 60e84aa7_59a8_dec8_e6ff_bc217496a380 --> 1df8bbed_5110_29f0_12f0_996fc7a1eda1 a3e9bc4e_1faf_6261_a1db_396981c7761d["spinner"] 60e84aa7_59a8_dec8_e6ff_bc217496a380 --> a3e9bc4e_1faf_6261_a1db_396981c7761d 7d629454_eee6_73fe_2526_919af8d00ef9["commander"] 60e84aa7_59a8_dec8_e6ff_bc217496a380 --> 7d629454_eee6_73fe_2526_919af8d00ef9 6802ce19_522d_e5fb_e458_8826d9f6952e["zod"] 60e84aa7_59a8_dec8_e6ff_bc217496a380 --> 6802ce19_522d_e5fb_e458_8826d9f6952e style 60e84aa7_59a8_dec8_e6ff_bc217496a380 fill:#6366f1,stroke:#818cf8,color:#fff
Relationship Graph
Source Code
import * as fs from "fs/promises"
import * as path from "path"
import { preFlightBuild } from "@/src/preflights/preflight-build"
import { registryItemSchema, registrySchema } from "@/src/schema"
import { handleError } from "@/src/utils/handle-error"
import { highlighter } from "@/src/utils/highlighter"
import { logger } from "@/src/utils/logger"
import { spinner } from "@/src/utils/spinner"
import { Command } from "commander"
import { z } from "zod"
export const buildOptionsSchema = z.object({
cwd: z.string(),
registryFile: z.string(),
outputDir: z.string(),
})
export const build = new Command()
.name("build")
.description("build components for a shadcn registry")
.argument("[registry]", "path to registry.json file", "./registry.json")
.option(
"-o, --output <path>",
"destination directory for json files",
"./public/r"
)
.option(
"-c, --cwd <cwd>",
"the working directory. defaults to the current directory.",
process.cwd()
)
.action(async (registry: string, opts) => {
try {
const options = buildOptionsSchema.parse({
cwd: path.resolve(opts.cwd),
registryFile: registry,
outputDir: opts.output,
})
const { resolvePaths } = await preFlightBuild(options)
const content = await fs.readFile(resolvePaths.registryFile, "utf-8")
const result = registrySchema.safeParse(JSON.parse(content))
if (!result.success) {
logger.error(
`Invalid registry file found at ${highlighter.info(
resolvePaths.registryFile
)}.`
)
process.exit(1)
}
const buildSpinner = spinner("Building registry...")
for (const registryItem of result.data.items) {
buildSpinner.start(`Building ${registryItem.name}...`)
// Add the schema to the registry item.
registryItem["$schema"] =
"https://ui.shadcn.com/schema/registry-item.json"
// Loop through each file in the files array.
for (const file of registryItem.files ?? []) {
file["content"] = await fs.readFile(
path.resolve(resolvePaths.cwd, file.path),
"utf-8"
)
}
// Validate the registry item.
const result = registryItemSchema.safeParse(registryItem)
if (!result.success) {
logger.error(
`Invalid registry item found for ${highlighter.info(
registryItem.name
)}.`
)
continue
}
// Write the registry item to the output directory.
await fs.writeFile(
path.resolve(resolvePaths.outputDir, `${result.data.name}.json`),
JSON.stringify(result.data, null, 2)
)
}
// Copy registry.json to the output directory.
await fs.copyFile(
resolvePaths.registryFile,
path.resolve(resolvePaths.outputDir, "registry.json")
)
buildSpinner.succeed("Building registry.")
} catch (error) {
logger.break()
handleError(error)
}
})
Domain
Subdomains
Functions
Dependencies
- commander
- handle-error
- highlighter
- logger
- path
- preflight-build
- promises
- schema
- spinner
- zod
Source
Frequently Asked Questions
What does build.ts do?
build.ts is a source file in the ui codebase, written in typescript. It belongs to the FrameworkTooling domain, TemplateSync subdomain.
What functions are defined in build.ts?
build.ts defines 1 function(s): build.
What does build.ts depend on?
build.ts imports 10 module(s): commander, handle-error, highlighter, logger, path, preflight-build, promises, schema, and 2 more.
Where is build.ts in the architecture?
build.ts is located at packages/shadcn/src/commands/build.ts (domain: FrameworkTooling, subdomain: TemplateSync, directory: packages/shadcn/src/commands).
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free