51 lines
1.1 KiB
Bash
51 lines
1.1 KiB
Bash
#!/bin/bash
|
|
set -Eeuo pipefail
|
|
|
|
fail=0
|
|
|
|
search_pattern() {
|
|
local pattern="$1"
|
|
shift
|
|
|
|
if command -v rg >/dev/null 2>&1; then
|
|
rg -n "$pattern" "$@" || true
|
|
else
|
|
grep -RInE "$pattern" "$@" || true
|
|
fi
|
|
}
|
|
|
|
check_no_match() {
|
|
local label="$1"
|
|
local pattern="$2"
|
|
shift 2
|
|
local output
|
|
|
|
output="$(search_pattern "$pattern" "$@")"
|
|
if [ -n "$output" ]; then
|
|
echo "Boundary violation: ${label}" >&2
|
|
echo "$output" >&2
|
|
fail=1
|
|
fi
|
|
}
|
|
|
|
check_no_match \
|
|
"web module must not import server database/storage internals" \
|
|
"@/storage|@/lib/local-storage|@/lib/session-auth|@/lib/admin-auth|@/lib/runtime-env|@/lib/server-crypto" \
|
|
src/modules/web
|
|
|
|
check_no_match \
|
|
"console module must not import server database/storage internals directly" \
|
|
"@/storage|@/lib/local-storage|@/lib/runtime-env|@/lib/server-crypto" \
|
|
src/modules/console
|
|
|
|
check_no_match \
|
|
"shared module must not depend on app-specific modules" \
|
|
"@/modules/(web|console|api)|@/app/|@/components/admin" \
|
|
src/modules/shared
|
|
|
|
if [ "$fail" -ne 0 ]; then
|
|
exit 1
|
|
fi
|
|
|
|
echo "Module boundaries OK"
|