code: def _build(
      path: Annotated[
          Path,
          typer.Argument(help="The directory of the custom component."),
      ] = Path("."),
      build_frontend: Annotated[
          bool,
          typer.Option(help="Whether to build the frontend as well."),
      ] = True,
      bump_version: Annotated[
          bool,
          typer.Option(
              help="Whether to bump the version number automatically."
          ),
      ] = False,
  ):
      name = Path(path).resolve()
      if not (name / "pyproject.toml").exists():
          raise ValueError(f"Cannot find pyproject.toml file in {name}")
  
      with LivePanelDisplay() as live:
          live.update(
              f":package: Building package in [orange3]{str(name.name)}[/]",
              add_sleep=0.2,
          )
          pyproject_toml = parse((path / "pyproject.toml").read_text())
          if bump_version:
              pyproject_toml = parse(
                  (path / "pyproject.toml").read_text()
              )
              version = semantic_version.Version(
                  pyproject_toml["project"]["version"]  # type: ignore
              ).next_patch()
              live.update(
                  f":1234: Using version [bold][magenta]{version}[/][/]. "
                  "Set [bold][magenta]--no-bump-version[/][/] to use the version in pyproject.toml file."
              )
              pyproject_toml["project"]["version"] = str(version)  # type: ignore
              with open(path / "pyproject.toml", "w") as f:
                  dump(pyproject_toml, f)
          else:
              version = pyproject_toml["project"]["version"]  # type: ignore
              live.update(
                  f":1234: Package will use version [bold][magenta]{version}[/][/] defined in pyproject.toml file. "
                  "Set [bold][magenta]--bump-version[/][/] to automatically bump the version number."
              )
  
          if build_frontend:
              live.update(":art: Building frontend")
              component_directory = path.resolve()
  
              node = shutil.which("node")
              if not node:
                  raise ValueError(
                      "node must be installed in order to run build command."
                  )
  
              node_cmds = [
                  node,
                  gradio_node_path,
                  "--component-directory",
                  component_directory,
                  "--root",
                  gradio_template_path,
                  "--mode",
                  "build",
              ]
              pipe = subprocess.run(
                  node_cmds, capture_output=True, text=True
              )
              if pipe.returncode != 0:
                  live.update(":red_square: Build failed!")
                  live.update(pipe.stderr)
                  live.update(pipe.stdout)
                  return
              else:
                  live.update(":white_check_mark: Build succeeded!")
  
          cmds = [shutil.which("python"), "-m", "build", str(name)]
          live.update(
              f":construction_worker: Building... [grey37]({' '.join(cmds)})[/]"
          )
          pipe = subprocess.run(cmds, capture_output=True, text=True)
          if pipe.returncode != 0:
              live.update(":red_square: Build failed!")
              live.update(pipe.stderr)
          else:
              live.update(":white_check_mark: Build succeeded!")
              live.update(
                  f":ferris_wheel: Wheel located in [orange3]{str(name / 'dist')}[/]"
              )
  
file_path: gradio/gradio/cli/commands/components/build.py
imports: import shutil
  import subprocess
  from pathlib import Path
  import semantic_version
  import typer
  from tomlkit import dump, parse
  from typing_extensions import Annotated
  import gradio
  from gradio.cli.commands.display import LivePanelDisplay
label_desc: Use image node_id 1 for calling a global function with example usage: _build(path, build_frontend, bump_version) without return types