151 lines
3.3 KiB
Batchfile
151 lines
3.3 KiB
Batchfile
|
@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
|