60 lines
1.6 KiB
Bash
Executable File
60 lines
1.6 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
on_error() {
|
|
echo "A2UI bundling failed. Re-run with: pnpm canvas:a2ui:bundle" >&2
|
|
echo "If this persists, verify pnpm deps and try again." >&2
|
|
}
|
|
trap on_error ERR
|
|
|
|
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
|
HASH_FILE="$ROOT_DIR/src/canvas-host/a2ui/.bundle.hash"
|
|
OUTPUT_FILE="$ROOT_DIR/src/canvas-host/a2ui/a2ui.bundle.js"
|
|
|
|
INPUT_PATHS=(
|
|
"$ROOT_DIR/package.json"
|
|
"$ROOT_DIR/pnpm-lock.yaml"
|
|
"$ROOT_DIR/vendor/a2ui/renderers/lit"
|
|
"$ROOT_DIR/apps/shared/ClawdbotKit/Tools/CanvasA2UI"
|
|
)
|
|
|
|
collect_files() {
|
|
local path
|
|
for path in "${INPUT_PATHS[@]}"; do
|
|
if [[ -d "$path" ]]; then
|
|
find "$path" -type f -print0
|
|
else
|
|
printf '%s\0' "$path"
|
|
fi
|
|
done
|
|
}
|
|
|
|
compute_hash() {
|
|
collect_files \
|
|
| LC_ALL=C sort -z \
|
|
| xargs -0 node -e "
|
|
const crypto = require('crypto');
|
|
const files = process.argv.slice(1);
|
|
const hashes = files.map(file => {
|
|
const content = require('fs').readFileSync(file);
|
|
return crypto.createHash('sha256').update(content).digest('hex');
|
|
});
|
|
const combined = hashes.join('');
|
|
console.log(crypto.createHash('sha256').update(combined).digest('hex'));
|
|
"
|
|
}
|
|
|
|
current_hash="$(compute_hash)"
|
|
if [[ -f "$HASH_FILE" ]]; then
|
|
previous_hash="$(cat "$HASH_FILE")"
|
|
if [[ "$previous_hash" == "$current_hash" && -f "$OUTPUT_FILE" ]]; then
|
|
echo "A2UI bundle up to date; skipping."
|
|
exit 0
|
|
fi
|
|
fi
|
|
|
|
pnpm -s exec tsc -p vendor/a2ui/renderers/lit/tsconfig.json
|
|
rolldown -c apps/shared/ClawdbotKit/Tools/CanvasA2UI/rolldown.config.mjs
|
|
|
|
echo "$current_hash" > "$HASH_FILE"
|