nose-pluto/scripts/build.sh
2025-10-08 12:40:59 -07:00

59 lines
1.9 KiB
Bash
Executable File

#!/bin/sh
SHA=$(git rev-parse --short HEAD)
# Discover all modules in src/js (excluding main.ts and temp files)
MODULES=$(ls src/js/*.ts | sed 's|src/js/||' | sed 's|.ts$||' | grep -v -E '^(main|.*\.tmp)$' | sort)
# Create temporary exports file
echo "// Auto-generated exports for dynamically loaded browser commands" > ./src/js/exports.tmp.ts
# Generate import statements
for mod in $MODULES; do
echo "import * as $mod from \"./$mod\"" >> ./src/js/exports.tmp.ts
done
echo "" >> ./src/js/exports.tmp.ts
echo "Object.assign(window, {" >> ./src/js/exports.tmp.ts
echo " __pluto_modules: {" >> ./src/js/exports.tmp.ts
# Generate module list with proper formatting
FIRST=true
for mod in $MODULES; do
if [ "$FIRST" = true ]; then
printf " %s" "$mod" >> ./src/js/exports.tmp.ts
FIRST=false
else
printf ", %s" "$mod" >> ./src/js/exports.tmp.ts
fi
done
printf ",\n" >> ./src/js/exports.tmp.ts
echo " }" >> ./src/js/exports.tmp.ts
echo "})" >> ./src/js/exports.tmp.ts
# Create temporary main.ts that includes exports
cat ./src/js/main.ts ./src/js/exports.tmp.ts > ./src/js/main.tmp.ts
# Build from temporary main
bun build ./src/js/main.tmp.ts \
--outfile ./public/bundle.tmp.js \
--target browser
# Clean up temporary files
rm ./src/js/exports.tmp.ts ./src/js/main.tmp.ts
# If bundle.js doesn't exist yet, fake it it
if [ ! -f ./public/bundle.js ]; then
touch ./public/bundle.js
fi
# Strip version comments from both files and compare
tail -n +4 ./public/bundle.js > ./public/bundle.old.content.tmp
tail -n +1 ./public/bundle.tmp.js > ./public/bundle.new.content.tmp
if ! cmp -s ./public/bundle.old.content.tmp ./public/bundle.new.content.tmp; then
printf "////\n// version: %s\n\n" "$SHA" | cat - ./public/bundle.tmp.js > ./public/bundle.js
fi
rm ./public/bundle.tmp.js ./public/bundle.old.content.tmp ./public/bundle.new.content.tmp