@echo off setlocal enabledelayedexpansion for %%I in ("%~dp0.") do set "SCRIPT_DIR=%%~fI" cd /d "!SCRIPT_DIR!" if not exist package.json ( echo package.json not found in !SCRIPT_DIR! exit /b 1 ) set "PKG_MANAGER=bun" set "MODE=dev" set "next_is_value=0" set "last_key=" for %%a in (%*) do ( set "arg=%%a" if "!next_is_value!"=="1" ( if "!last_key!"=="manager" ( set "PKG_MANAGER=%%a" ) if "!last_key!"=="mode" ( set "MODE=%%a" ) set "next_is_value=0" ) if "!arg!"=="clean" ( goto cleanup ) if "!arg!"=="cleanup" ( goto cleanup ) if "!arg!"=="manager" ( set "last_key=manager" set "next_is_value=1" ) if "!arg!"=="mode" ( set "last_key=mode" set "next_is_value=1" ) ) set "ALLOWED_MANAGERS=bun npm yarn pnpm" set "ALLOWED_MODES=dev prod development production" set "manager_allowed=0" for %%a in (!ALLOWED_MANAGERS!) do ( if "!PKG_MANAGER!"=="%%a" ( set "manager_allowed=1" ) ) set "mode_allowed=0" for %%a in (!ALLOWED_MODES!) do ( if "!MODE!"=="%%a" ( set "mode_allowed=1" ) ) if "!manager_allowed!"=="0" ( echo !PKG_MANAGER! is not a valid package manager, please use one of the following: !ALLOWED_MANAGERS! exit /b 1 ) if "!mode_allowed!"=="0" ( echo !MODE! is not a valid mode, please use one of the following: !ALLOWED_MODES! exit /b 1 ) echo Using package manager: !PKG_MANAGER! echo Mode: !MODE! set "NPM_MARKER=node_modules/.npm_used" set "YARN_MARKER=node_modules/.yarn_used" set "PNPM_MARKER=node_modules/.pnpm_used" set "BUN_MARKER=node_modules/.bun_used" if "!PKG_MANAGER!"=="npm" ( set "INSTALL_CMD=npm install" set "RUN_CMD=npm run !MODE!" set "CURRENT_MARKER=!NPM_MARKER!" ) else if "!PKG_MANAGER!"=="yarn" ( set "INSTALL_CMD=yarn" set "RUN_CMD=yarn !MODE!" set "CURRENT_MARKER=!YARN_MARKER!" ) else if "!PKG_MANAGER!"=="pnpm" ( set "INSTALL_CMD=pnpm install" set "RUN_CMD=pnpm !MODE!" set "CURRENT_MARKER=!PNPM_MARKER!" ) else if "!PKG_MANAGER!"=="bun" ( set "INSTALL_CMD=bun install" set "RUN_CMD=bun !MODE!" set "CURRENT_MARKER=!BUN_MARKER!" ) if exist "!NPM_MARKER!" if not "!CURRENT_MARKER!"=="!NPM_MARKER!" goto cleanup if exist "!YARN_MARKER!" if not "!CURRENT_MARKER!"=="!YARN_MARKER!" goto cleanup if exist "!PNPM_MARKER!" if not "!CURRENT_MARKER!"=="!PNPM_MARKER!" goto cleanup if exist "!BUN_MARKER!" if not "!CURRENT_MARKER!"=="!BUN_MARKER!" goto cleanup goto run :cleanup set "files_to_delete=package-lock.json yarn.lock pnpm-lock.yaml bun.lockb" set "folders_to_delete=node_modules dist logs" set "markers_to_delete=node_modules/.npm_used node_modules/.yarn_used node_modules/.pnpm_used node_modules/.bun_used" echo Cleaning up files and folders... for %%a in (!files_to_delete!) do ( if exist "%%a" ( echo Found %%a in !SCRIPT_DIR! - deleting... del "%%a" ) ) for %%a in (!folders_to_delete!) do ( if exist "%%a" ( echo Found %%a in !SCRIPT_DIR! - deleting... rmdir /s /q "%%a" ) ) for %%a in (!markers_to_delete!) do ( if exist "%%a" del "%%a" ) if defined RUN_CMD ( goto run ) exit /b 0 :run if defined RUN_CMD ( echo Running !RUN_CMD!... !INSTALL_CMD! !RUN_CMD! ) else ( echo No run command set, exiting... ) exit /b 0