From 492332802f5d62297ef26f1da2975cdb59991912 Mon Sep 17 00:00:00 2001 From: Kuba Orlik Date: Mon, 22 Nov 2021 13:28:31 +0100 Subject: [PATCH] Fix parsed json values not previewing properly --- stolen-data-entry.ts | 18 ++++++++++++++---- util.ts | 13 ++++++++++--- 2 files changed, 24 insertions(+), 7 deletions(-) diff --git a/stolen-data-entry.ts b/stolen-data-entry.ts index ac5ce6d..53aac79 100644 --- a/stolen-data-entry.ts +++ b/stolen-data-entry.ts @@ -77,6 +77,9 @@ export class StolenDataEntry extends EventEmitter { } static parseValue(value: unknown): string | Record { + if (value === undefined) { + return ""; + } if (isJSONObject(value)) { const object = parseToObject(value); return object; @@ -101,7 +104,7 @@ export class StolenDataEntry extends EventEmitter { } } const object = { - [Symbol.for("originalURL")]: value, // so it doesn't appear raw in the table but can be easily retrieved later + [Symbol.for("originalString")]: value, // so it doesn't appear raw in the table but can be easily retrieved later host: url.host, path: url.pathname, ...Object.fromEntries( @@ -181,14 +184,21 @@ export class StolenDataEntry extends EventEmitter { } getValuePreview(key = ""): string { + console.log("getValuePreview", key, this.getParsedValue(key)); const value = this.getParsedValue(key); - const str = value.toString(); + const str = + typeof value === "object" && value[Symbol.for("originalString")] + ? (value[Symbol.for("originalString")] as string) + : value.toString(); if (typeof value !== "object" && this.classification == "id") { return ( str.slice(0, Math.min(str.length / 3, ID_PREVIEW_MAX_LENGTH)) + "(...)" ); - } else if (typeof value === "object" && value[Symbol.for("originalURL")]) { - return value[Symbol.for("originalURL")] as string; + } else if ( + typeof value === "object" && + value[Symbol.for("originalString")] + ) { + return value[Symbol.for("originalString")] as string; } else { return str; } diff --git a/util.ts b/util.ts index 119295b..4033755 100644 --- a/util.ts +++ b/util.ts @@ -74,12 +74,19 @@ export async function getTabByID(id: number) { return tabs.find((tab) => tab.id == id); } -export function parseToObject(str: unknown): Record { +export function parseToObject(str: unknown): Record { + let result: Record; + let original_string: string; if (typeof str === "string") { - return JSON.parse(str); + original_string = str; + result = JSON.parse(str); } else if (typeof str == "object") { - return str as Record; + result = str as Record; + original_string = + (result[Symbol.for("originalString")] as string) || JSON.stringify(str); } + result[Symbol.for("originalString")] = original_string; + return result; } export function isJSONObject(