isEventsStats.tsx 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. import type {
  2. EventsStats,
  3. GroupedMultiSeriesEventsStats,
  4. MultiSeriesEventsStats,
  5. } from 'sentry/types/organization';
  6. export function isEventsStats(obj: unknown): obj is EventsStats {
  7. if (typeof obj !== 'object' || obj === null) {
  8. return false;
  9. }
  10. return 'data' in obj && Array.isArray(obj.data);
  11. }
  12. export function isMultiSeriesEventsStats(obj: unknown): obj is MultiSeriesEventsStats {
  13. if (typeof obj !== 'object' || obj === null) {
  14. return false;
  15. }
  16. return (
  17. getValues(obj).every(subObject => isEventsStats(subObject)) &&
  18. !obj.hasOwnProperty('data')
  19. );
  20. }
  21. export function isGroupedMultiSeriesEventsStats(
  22. obj: unknown
  23. ): obj is GroupedMultiSeriesEventsStats {
  24. if (obj === null || obj === undefined) {
  25. return false;
  26. }
  27. return (
  28. getValues(obj).every(subObject => isMultiSeriesEventsStats(subObject)) &&
  29. !obj.hasOwnProperty('data')
  30. );
  31. }
  32. function getValues(obj: unknown): unknown[] {
  33. if (obj === null || obj === undefined) {
  34. return [];
  35. }
  36. return Object.entries(obj)
  37. .filter(([key, _value]) => key !== 'order')
  38. .map(([_key, value]) => {
  39. return value as unknown;
  40. });
  41. }