Home / Function/ createMonorepoProject() — ui Function Reference

createMonorepoProject() — ui Function Reference

Architecture documentation for the createMonorepoProject() function in create-project.ts from the ui codebase.

Entity Profile

Dependency Diagram

graph TD
  e89cc6ee_836f_1ddc_f90e_984178e4153e["createMonorepoProject()"]
  f570a109_148e_1b68_ffd0_6e7f2f8ca03d["create-project.ts"]
  e89cc6ee_836f_1ddc_f90e_984178e4153e -->|defined in| f570a109_148e_1b68_ffd0_6e7f2f8ca03d
  ee4c31b0_cc12_35da_90d1_168cb9e6c7f0["createProject()"]
  ee4c31b0_cc12_35da_90d1_168cb9e6c7f0 -->|calls| e89cc6ee_836f_1ddc_f90e_984178e4153e
  style e89cc6ee_836f_1ddc_f90e_984178e4153e fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

packages/shadcn/src/utils/create-project.ts lines 229–292

async function createMonorepoProject(
  projectPath: string,
  options: {
    packageManager: string
  }
) {
  const createSpinner = spinner(
    `Creating a new Next.js monorepo. This may take a few minutes.`
  ).start()

  try {
    // Get the template.
    const templatePath = path.join(os.tmpdir(), `shadcn-template-${Date.now()}`)
    await fs.ensureDir(templatePath)
    const response = await fetch(GITHUB_TEMPLATE_URL)
    if (!response.ok) {
      throw new Error(`Failed to download template: ${response.statusText}`)
    }

    // Write the tar file
    const tarPath = path.resolve(templatePath, "template.tar.gz")
    await fs.writeFile(tarPath, Buffer.from(await response.arrayBuffer()))
    await execa("tar", [
      "-xzf",
      tarPath,
      "-C",
      templatePath,
      "--strip-components=2",
      "ui-main/templates/monorepo-next",
    ])
    const extractedPath = path.resolve(templatePath, "monorepo-next")
    await fs.move(extractedPath, projectPath)
    await fs.remove(templatePath)

    // Run install.
    await execa(options.packageManager, ["install"], {
      cwd: projectPath,
    })
    // await execa("cd", [cwd])

    // Write project name to the package.json
    const packageJsonPath = path.join(projectPath, "package.json")
    if (fs.existsSync(packageJsonPath)) {
      const packageJsonContent = await fs.readFile(packageJsonPath, "utf8")
      const packageJson = JSON.parse(packageJsonContent)
      packageJson.name = projectPath.split("/").pop()
      await fs.writeFile(packageJsonPath, JSON.stringify(packageJson, null, 2))
    }

    // Try git init.
    const cwd = process.cwd()
    await execa("git", ["--version"], { cwd: projectPath })
    await execa("git", ["init"], { cwd: projectPath })
    await execa("git", ["add", "-A"], { cwd: projectPath })
    await execa("git", ["commit", "-m", "Initial commit"], {
      cwd: projectPath,
    })

    createSpinner?.succeed("Creating a new Next.js monorepo.")
  } catch (error) {
    createSpinner?.fail("Something went wrong creating a new Next.js monorepo.")
    handleError(error)
  }
}

Subdomains

Called By

Frequently Asked Questions

What does createMonorepoProject() do?
createMonorepoProject() is a function in the ui codebase, defined in packages/shadcn/src/utils/create-project.ts.
Where is createMonorepoProject() defined?
createMonorepoProject() is defined in packages/shadcn/src/utils/create-project.ts at line 229.
What calls createMonorepoProject()?
createMonorepoProject() is called by 1 function(s): createProject.

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free