2025-04-01 10:38:02 +09:00

38 lines
998 B
TypeScript

import { AppEvents } from '@grafana/data';
import appEvents from 'app/core/app_events';
export function getPrettyJSON(obj: unknown): string {
let r = '';
try {
r = JSON.stringify(obj, getCircularReplacer(), 2);
} catch (e) {
if (
e instanceof Error &&
(e.toString().includes('RangeError') || e.toString().includes('allocation size overflow'))
) {
appEvents.emit(AppEvents.alertError, [e.toString(), 'Cannot display JSON, the object is too big.']);
} else {
appEvents.emit(AppEvents.alertError, [e instanceof Error ? e.toString() : e]);
}
}
return r;
}
function getCircularReplacer() {
const seen = new WeakSet();
return (key: string, value: unknown) => {
if (key === '__dataContext' || key === '__sceneObject') {
return 'Filtered out in JSON serialization';
}
if (typeof value === 'object' && value !== null) {
if (seen.has(value)) {
return;
}
seen.add(value);
}
return value;
};
}