offline.ts 889 B

12345678910111213141516171819202122232425262728293031323334
  1. export const isOfflineMode = (): boolean => {
  2. try {
  3. const envFlag = import.meta.env.VITE_OFFLINE;
  4. return envFlag === 'true' || envFlag;
  5. } catch (e) {
  6. return false;
  7. }
  8. };
  9. export const getOfflineDataPath = (): string => {
  10. try {
  11. const p = import.meta.env.VITE_OFFLINE_DATA_PATH;
  12. return p || './';
  13. } catch (e) {
  14. return './';
  15. }
  16. };
  17. export const fetchOfflineJson = async <T = any>(candidatePaths: string[]): Promise<T> => {
  18. const errors: any[] = [];
  19. for (const p of candidatePaths) {
  20. try {
  21. const res = await fetch(p, { cache: 'no-store' });
  22. if (!res.ok) {
  23. errors.push(`${p}: ${res.status}`);
  24. continue;
  25. }
  26. return (await res.json()) as T;
  27. } catch (e) {
  28. errors.push(`${p}: ${(e as Error)?.message || 'fetch failed'}`);
  29. }
  30. }
  31. throw new Error(`offline json not found. tried: ${errors.join('; ')}`);
  32. };