def preview_command()

in src/doc_builder/commands/preview.py [0:0]


def preview_command(args):
    if not is_watchdog_available():
        raise ImportError(
            "Please install `watchdog` to run `doc-builder preview` command.\nYou can do so through pip: `pip install watchdog`"
        )

    read_doc_config(args.path_to_docs)
    # Error at the beginning if node is not properly installed.
    check_node_is_available()
    # Error at the beginning if we can't locate the kit folder
    kit_folder = locate_kit_folder()
    if kit_folder is None:
        raise EnvironmentError(
            "Requires the kit subfolder of the doc-builder repo. We couldn't find it with "
            "the doc-builder package installed, so you need to run the command from inside the doc-builder repo."
        )

    with tempfile.TemporaryDirectory() as tmp_dir:
        output_path = Path(tmp_dir) / args.library_name / args.version / args.language

        print("Initial build docs for", args.library_name, args.path_to_docs, output_path)
        source_files_mapping = build_doc(
            args.library_name,
            args.path_to_docs,
            output_path,
            clean=True,
            version=args.version,
            language=args.language,
            is_python_module=not args.not_python_module,
        )

        # convert the MDX files into HTML files.
        tmp_dir = Path(tmp_dir)
        # Copy everything in a tmp dir
        shutil.copytree(kit_folder, tmp_dir / "kit")
        # Manual copy and overwrite from output_path to tmp_dir / "kit" / "src" / "routes"
        # We don't use shutil.copytree as tmp_dir / "kit" / "src" / "routes" exists and contains important files.
        kit_routes_folder = tmp_dir / "kit" / "src" / "routes"
        # files/folders cannot have a name that starts with `__` since it is a reserved Sveltekit keyword
        for p in output_path.glob("**/*__*"):
            if p.exists():
                p.rmdir if p.is_dir() else p.unlink()
        for f in output_path.iterdir():
            dest = kit_routes_folder / f.name
            if f.is_dir():
                # Remove the dest folder if it exists
                if dest.is_dir():
                    shutil.rmtree(dest)
                shutil.copytree(f, dest)
            else:
                shutil.copy(f, dest)

        # make mdx file paths comply with the sveltekit 1.0 routing mechanism
        # see more: https://learn.svelte.dev/tutorial/pages
        for mdx_file_path in kit_routes_folder.rglob("*.mdx"):
            new_path = sveltify_file_route(mdx_file_path)
            parent_path = os.path.dirname(new_path)
            os.makedirs(parent_path, exist_ok=True)
            shutil.move(mdx_file_path, new_path)

        # Node
        env = os.environ.copy()
        env["DOCS_LIBRARY"] = env["package_name"] or args.library_name if "package_name" in env else args.library_name
        env["DOCS_VERSION"] = args.version
        env["DOCS_LANGUAGE"] = args.language
        Thread(target=start_sveltekit_dev, args=(tmp_dir, env, args)).start()

        git_folder = find_root_git(args.path_to_docs)
        event_handler = WatchEventHandler(args, source_files_mapping, kit_routes_folder)
        start_watcher(git_folder, event_handler)