- Change the build process to allow cache busting - Optimisations to the build process - Several improvements of UI geared towards mobile experience -
46 lines
1.3 KiB
Python
46 lines
1.3 KiB
Python
import json
|
|
import os
|
|
from functools import lru_cache
|
|
from typing import Dict
|
|
|
|
# Default manifest path inside app images; override with env
|
|
DEFAULT_MANIFEST_PATH = os.environ.get(
|
|
'EVEAI_STATIC_MANIFEST_PATH',
|
|
'/app/config/static-manifest/manifest.json'
|
|
)
|
|
|
|
|
|
@lru_cache(maxsize=1)
|
|
def _load_manifest(manifest_path: str = DEFAULT_MANIFEST_PATH) -> Dict[str, str]:
|
|
try:
|
|
with open(manifest_path, 'r', encoding='utf-8') as f:
|
|
return json.load(f)
|
|
except Exception:
|
|
return {}
|
|
|
|
|
|
def resolve_asset(logical_path: str, manifest_path: str = DEFAULT_MANIFEST_PATH) -> str:
|
|
"""
|
|
Map a logical asset path (e.g. 'dist/chat-client.js') to the hashed path
|
|
found in the Parcel manifest. If not found or manifest missing, return the
|
|
original logical path for graceful fallback.
|
|
"""
|
|
if not logical_path:
|
|
return logical_path
|
|
|
|
manifest = _load_manifest(manifest_path)
|
|
|
|
# Try several key variants as Parcel manifests may use different keys
|
|
candidates = [
|
|
logical_path,
|
|
logical_path.lstrip('/'),
|
|
logical_path.replace('static/', ''),
|
|
logical_path.replace('dist/', ''),
|
|
]
|
|
|
|
for key in candidates:
|
|
if key in manifest:
|
|
return manifest[key]
|
|
|
|
return logical_path
|