Assist_Design/scripts/domain/check-import-contract.sh
barsa a3dbd07183 Enhance ESLint Rules and Refactor Domain Imports
- Updated ESLint configuration to enforce stricter import rules for the @customer-portal/domain package, promoting better import hygiene and preventing deep imports.
- Refactored various files across the BFF and portal applications to comply with the new import rules, ensuring that only the appropriate modules are imported from the domain.
- Cleaned up unused imports and optimized code structure for improved maintainability and clarity.
- Updated documentation to reflect changes in import practices and domain structure.
2025-12-26 14:53:03 +09:00

65 lines
2.3 KiB
Bash

#!/usr/bin/env bash
set -euo pipefail
# Guardrail: enforce the domain import contract.
#
# Allowed:
# - @customer-portal/domain/<module>
# - @customer-portal/domain/toolkit
# - BFF-only: @customer-portal/domain/<module>/providers
#
# Never:
# - @customer-portal/domain/<module>/<anything-else>
# - @customer-portal/domain/<module>/providers/<anything-else>
# - Portal importing any .../providers
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
cd "$ROOT_DIR"
fail() {
echo "[domain] ERROR: $1" >&2
exit 1
}
echo "[domain] Checking for illegal deep imports in apps/…"
# Root import is forbidden (hard error). Only match actual import statements.
if grep -RInE --exclude-dir=node_modules --exclude-dir=dist --exclude-dir=.next \
--include='*.ts' --include='*.tsx' \
"(from[[:space:]]+[\"']@customer-portal/domain[\"'])|(import[[:space:]]+[\"']@customer-portal/domain[\"'])" \
apps >/dev/null; then
echo "[domain] Found forbidden root imports (@customer-portal/domain):"
grep -RInE --exclude-dir=node_modules --exclude-dir=dist --exclude-dir=.next \
--include='*.ts' --include='*.tsx' \
"(from[[:space:]]+[\"']@customer-portal/domain[\"'])|(import[[:space:]]+[\"']@customer-portal/domain[\"'])" \
apps | head -200
fail "Root import is forbidden. Use @customer-portal/domain/<module>."
fi
# Any 3+ segment import like @customer-portal/domain/a/b/c is illegal anywhere.
if grep -RInE --include='*.ts' --include='*.tsx' \
"@customer-portal/domain/[^\"'[:space:]]+/[^\"'[:space:]]+/[^\"'[:space:]]+" \
apps >/dev/null; then
echo "[domain] Found illegal deep imports (3+ segments):"
grep -RInE --include='*.ts' --include='*.tsx' \
"@customer-portal/domain/[^\"'[:space:]]+/[^\"'[:space:]]+/[^\"'[:space:]]+" \
apps | head -200
fail "Deep imports detected. Use @customer-portal/domain/<module> or .../<module>/providers."
fi
echo "[domain] Checking Portal boundary (no providers imports)…"
if grep -RInE --include='*.ts' --include='*.tsx' \
"@customer-portal/domain/[^\"'[:space:]]+/providers" \
apps/portal/src >/dev/null; then
echo "[domain] Found provider imports in Portal:"
grep -RInE --include='*.ts' --include='*.tsx' \
"@customer-portal/domain/[^\"'[:space:]]+/providers" \
apps/portal/src | head -200
fail "Portal must not import provider adapters/types."
fi
echo "[domain] OK: import contract checks passed."