@echo off setlocal enabledelayedexpansion cd /d %~dp0 if not exist "package.json" ( echo package.json not found in %~dp0 exit /b 1 ) set "PKG_MANAGER=bun" set "MODE=dev" set "next_is_value=0" set "last_key=" for %%a in (%*) do ( if "!next_is_value!" == "1" ( if "!last_key!" == "manager" ( set "PKG_MANAGER=%%a" ) else if "!last_key!" == "mode" ( set "MODE=%%a" ) set "next_is_value=0" ) if "%%a" == "clean" ( set "goto_cleanup=1" ) else if "%%a" == "cleanup" ( set "goto_cleanup=1" ) else if "%%a" == "manager" ( set "last_key=manager" set "next_is_value=1" ) else if "%%a" == "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 %%m in (%ALLOWED_MANAGERS%) do ( if "!PKG_MANAGER!" == "%%m" ( set "manager_allowed=1" ) ) set "mode_allowed=0" for %%m in (%ALLOWED_MODES%) do ( if "!MODE!" == "%%m" ( set "mode_allowed=1" ) ) if "!manager_allowed!" == "0" ( echo !PKG_MANAGER! is not a valid package manager. Use one of: %ALLOWED_MANAGERS% exit /b 1 ) if "!mode_allowed!" == "0" ( echo !MODE! is not a valid mode. Use one of: %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 not "!PKG_MANAGER!" == "bun" ( where nodemon >nul 2>&1 if errorlevel 1 ( echo nodemon not found, installing... if "!PKG_MANAGER!" == "npm" ( npm install -g nodemon ) else if "!PKG_MANAGER!" == "yarn" ( yarn global add nodemon ) else if "!PKG_MANAGER!" == "pnpm" ( pnpm add -g nodemon ) else ( echo Unsupported package manager: !PKG_MANAGER! exit /b 1 ) ) where tsx >nul 2>&1 if errorlevel 1 ( echo tsx not found, installing... if "!PKG_MANAGER!" == "npm" ( npm install -g tsx ) else if "!PKG_MANAGER!" == "yarn" ( yarn add tsx --dev ) else if "!PKG_MANAGER!" == "pnpm" ( pnpm add -D tsx ) else ( echo Unsupported package manager: !PKG_MANAGER! exit /b 1 ) ) ) if "!PKG_MANAGER!" == "npm" ( set "INSTALL_CMD=npm install" if "!MODE!" == "dev" ( set "RUN_CMD=nodemon --watch src --exec npm exec tsx src/index.ts" ) else ( set "RUN_CMD=npm exec tsx src/index.ts" ) set "CURRENT_MARKER=!NPM_MARKER!" ) else if "!PKG_MANAGER!" == "yarn" ( set "INSTALL_CMD=yarn install" if "!MODE!" == "dev" ( set "RUN_CMD=nodemon --watch src --exec yarn exec tsx src/index.ts" ) else ( set "RUN_CMD=yarn exec tsx src/index.ts" ) set "CURRENT_MARKER=!YARN_MARKER!" ) else if "!PKG_MANAGER!" == "pnpm" ( set "INSTALL_CMD=pnpm install" if "!MODE!" == "dev" ( set "RUN_CMD=nodemon --watch src --exec pnpm exec tsx src/index.ts" ) else ( set "RUN_CMD=pnpm exec tsx src/index.ts" ) set "CURRENT_MARKER=!PNPM_MARKER!" ) else if "!PKG_MANAGER!" == "bun" ( set "INSTALL_CMD=bun install" if "!MODE!" == "dev" ( set "RUN_CMD=bun run --watch src/index.ts --development" ) else ( set "RUN_CMD=bun run src/index.ts" ) set "CURRENT_MARKER=!BUN_MARKER!" ) if exist "!NPM_MARKER!" if not "!CURRENT_MARKER!" == "!NPM_MARKER!" set "goto_cleanup=1" if exist "!YARN_MARKER!" if not "!CURRENT_MARKER!" == "!YARN_MARKER!" set "goto_cleanup=1" if exist "!PNPM_MARKER!" if not "!CURRENT_MARKER!" == "!PNPM_MARKER!" set "goto_cleanup=1" if exist "!BUN_MARKER!" if not "!CURRENT_MARKER!" == "!BUN_MARKER!" set "goto_cleanup=1" if defined goto_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=!NPM_MARKER! !YARN_MARKER! !PNPM_MARKER! !BUN_MARKER!" echo Cleaning up files and folders... for %%f in (!files_to_delete!) do ( if exist "%%f" ( echo Deleting %%f... del /q "%%f" ) ) for %%d in (!folders_to_delete!) do ( if exist "%%d" ( echo Deleting %%d... rmdir /s /q "%%d" ) ) for %%m in (!markers_to_delete!) do ( if exist "%%m" ( del /q "%%m" ) ) exit /b 0 ) if not "%RUN_CMD%" == "" ( echo Running %RUN_CMD%... %INSTALL_CMD% %RUN_CMD% ) else ( echo No run command set, exiting... ) exit /b 0