Skip to content

Commit 7c21d4f

Browse files
authored
Fix for displaying large numbers in message body (#2206)
ensure large number precision isn't lost by standard JSON parsing
1 parent 40742ba commit 7c21d4f

File tree

3 files changed

+12
-4
lines changed

3 files changed

+12
-4
lines changed

src/Frontend/package-lock.json

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/Frontend/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
"bootstrap": "^5.3.3",
2424
"bootstrap-icons": "^1.11.3",
2525
"highlight.js": "^11.10.0",
26+
"lossless-json": "^4.0.2",
2627
"memoize-one": "^6.0.0",
2728
"moment": "^2.30.1",
2829
"pinia": "^2.2.8",

src/Frontend/src/components/failedmessages/MessageView.vue

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import { TYPE } from "vue-toastification";
1717
import { ExtendedFailedMessage, FailedMessageError, FailedMessageStatus, isError } from "@/resources/FailedMessage";
1818
import Message from "@/resources/Message";
1919
import { NServiceBusHeaders } from "@/resources/Header";
20+
import { parse, stringify } from "lossless-json";
2021
2122
let refreshInterval: number | undefined;
2223
let pollingFaster = false;
@@ -154,8 +155,8 @@ async function downloadBody(message: ExtendedFailedMessage) {
154155
try {
155156
switch (response.headers.get("content-type")) {
156157
case "application/json": {
157-
let jsonBody = await response.json();
158-
jsonBody = JSON.parse(JSON.stringify(jsonBody).replace(/\\"|"(?:\\"|[^"])*"|(\/\/.*|\/\*[\s\S]*?\*\/)/g, (m, g) => (g ? "" : m)));
158+
const jsonBodyRaw = await response.text();
159+
const jsonBody = parse(jsonBodyRaw.replace(/\\"|"(?:\\"|[^"])*"|(\/\/.*|\/\*[\s\S]*?\*\/)/g, (m, g) => (g ? "" : m)));
159160
message.messageBody = formatJson(jsonBody);
160161
return;
161162
}
@@ -260,8 +261,8 @@ function formatXml(xml: string) {
260261
return string.trim();
261262
}
262263
263-
function formatJson(json: string) {
264-
return JSON.stringify(json, null, 2);
264+
function formatJson(json: unknown) {
265+
return stringify(json, null, 2) as string;
265266
}
266267
267268
function togglePanel(panelNum: number) {

0 commit comments

Comments
 (0)