Initial Commit
This commit is contained in:
88
scripts/convert-package-barrels.sh
Normal file
88
scripts/convert-package-barrels.sh
Normal file
@@ -0,0 +1,88 @@
|
||||
#!/usr/bin/env bash
|
||||
# Convert all `export * from` violations in one package's feature barrels,
|
||||
# then run biome --write to canonicalise import order.
|
||||
#
|
||||
# Usage: bash scripts/convert-package-barrels.sh <pkg-rel-path>
|
||||
# e.g. bash scripts/convert-package-barrels.sh packages/crypto/crypto-hash
|
||||
#
|
||||
# Skips:
|
||||
# - src/index.ts (package root, out of scope per change spec)
|
||||
# - *.select/index.ts (generated forwarders, allowed by §6a)
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
PKG_DIR="${1:?usage: $0 <pkg-rel-path>}"
|
||||
ROOT="$(cd "$(dirname "$0")/.." && pwd)"
|
||||
ABS_PKG="${ROOT}/${PKG_DIR}"
|
||||
|
||||
if [ ! -d "${ABS_PKG}/src" ]; then
|
||||
echo "no src/ in ${ABS_PKG}" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Pass 1: convert all leaf barrels.
|
||||
mapfile -t FILES < <(
|
||||
grep -rln "^export \* from" "${ABS_PKG}/src" --include="*.ts" 2>/dev/null \
|
||||
| grep -v "/src/index\.ts$" \
|
||||
| grep -v "\.select/" \
|
||||
| sort -u
|
||||
)
|
||||
|
||||
if [ "${#FILES[@]}" -eq 0 ]; then
|
||||
echo "no violations in ${PKG_DIR} — running biome anyway"
|
||||
cd "${ABS_PKG}"
|
||||
for i in 1 2 3; do
|
||||
bunx biome check --write --max-diagnostics 1000 src/ 2>&1 | tail -1
|
||||
done
|
||||
exit 0
|
||||
fi
|
||||
|
||||
echo "Pass 1: ${#FILES[@]} barrels in ${PKG_DIR}"
|
||||
bun "${ROOT}/scripts/convert-barrels.ts" "${FILES[@]}" || true
|
||||
|
||||
# Pass 2: handle intermediate barrels whose targets have just become explicit.
|
||||
mapfile -t REMAINING < <(
|
||||
grep -rln "^export \* from" "${ABS_PKG}/src" --include="*.ts" 2>/dev/null \
|
||||
| grep -v "/src/index\.ts$" \
|
||||
| grep -v "\.select/" \
|
||||
| sort -u
|
||||
)
|
||||
|
||||
if [ "${#REMAINING[@]}" -gt 0 ]; then
|
||||
echo "Pass 2: ${#REMAINING[@]} intermediate barrels"
|
||||
bun "${ROOT}/scripts/convert-barrels.ts" "${REMAINING[@]}" || true
|
||||
fi
|
||||
|
||||
# Pass 3: third pass for deeply-nested barrel chains.
|
||||
mapfile -t LEFT < <(
|
||||
grep -rln "^export \* from" "${ABS_PKG}/src" --include="*.ts" 2>/dev/null \
|
||||
| grep -v "/src/index\.ts$" \
|
||||
| grep -v "\.select/" \
|
||||
| sort -u
|
||||
)
|
||||
|
||||
if [ "${#LEFT[@]}" -gt 0 ]; then
|
||||
echo "Pass 3: ${#LEFT[@]} barrels remain"
|
||||
bun "${ROOT}/scripts/convert-barrels.ts" "${LEFT[@]}" || true
|
||||
fi
|
||||
|
||||
# Final check.
|
||||
FINAL=$(grep -rln "^export \* from" "${ABS_PKG}/src" --include="*.ts" 2>/dev/null \
|
||||
| grep -v "/src/index\.ts$" \
|
||||
| grep -v "\.select/" \
|
||||
| wc -l)
|
||||
|
||||
if [ "${FINAL}" -gt 0 ]; then
|
||||
echo "WARNING: ${FINAL} barrels still have violations after 3 passes:"
|
||||
grep -rln "^export \* from" "${ABS_PKG}/src" --include="*.ts" 2>/dev/null \
|
||||
| grep -v "/src/index\.ts$" \
|
||||
| grep -v "\.select/"
|
||||
fi
|
||||
|
||||
# Biome auto-fix — run unconditionally for 3 passes to handle layered
|
||||
# auto-fixes (e.g. organize-imports surfacing format issues that surface
|
||||
# further organize-imports).
|
||||
cd "${ABS_PKG}"
|
||||
for i in 1 2 3; do
|
||||
bunx biome check --write --max-diagnostics 1000 src/ 2>&1 | tail -1
|
||||
done
|
||||
Reference in New Issue
Block a user