fix: remaining starred-project issues, plus better Error logging and user verbiage

This commit is contained in:
2025-09-28 19:07:48 -06:00
parent b3112a4086
commit ee587ac3fc
12 changed files with 103 additions and 135 deletions

View File

@@ -353,6 +353,14 @@ export const PlatformServiceMixin = {
? JSON.stringify(settings.searchBoxes)
: String(settings.searchBoxes);
}
if (settings.starredPlanHandleIds !== undefined) {
// eslint-disable-next-line @typescript-eslint/no-explicit-any
(converted as any).starredPlanHandleIds = Array.isArray(
settings.starredPlanHandleIds,
)
? JSON.stringify(settings.starredPlanHandleIds)
: String(settings.starredPlanHandleIds);
}
return converted;
},
@@ -555,6 +563,12 @@ export const PlatformServiceMixin = {
if (settings.searchBoxes) {
settings.searchBoxes = this._parseJsonField(settings.searchBoxes, []);
}
if (settings.starredPlanHandleIds) {
settings.starredPlanHandleIds = this._parseJsonField(
settings.starredPlanHandleIds,
[],
);
}
return settings;
} catch (error) {
@@ -621,6 +635,12 @@ export const PlatformServiceMixin = {
[],
);
}
if (mergedSettings.starredPlanHandleIds) {
mergedSettings.starredPlanHandleIds = this._parseJsonField(
mergedSettings.starredPlanHandleIds,
[],
);
}
return mergedSettings;
} catch (error) {

View File

@@ -24,10 +24,28 @@ export function getMemoryLogs(): string[] {
return [..._memoryLogs];
}
/**
* Stringify an object with proper handling of circular references and functions
*
* Don't use for arrays; map with this over the array.
*
* @param obj - The object to stringify
* @returns The stringified object, plus 'message' and 'stack' for Error objects
*/
export function safeStringify(obj: unknown) {
const seen = new WeakSet();
return JSON.stringify(obj, (_key, value) => {
// since 'message' & 'stack' are not enumerable for errors, let's add those
let objToStringify = obj;
if (obj instanceof Error) {
objToStringify = {
...obj,
message: obj.message,
stack: obj.stack,
};
}
return JSON.stringify(objToStringify, (_key, value) => {
if (typeof value === "object" && value !== null) {
if (seen.has(value)) {
return "[Circular]";
@@ -178,7 +196,8 @@ export const logger = {
}
// Database logging
const argsString = args.length > 0 ? " - " + safeStringify(args) : "";
const argsString =
args.length > 0 ? " - " + args.map(safeStringify).join(", ") : "";
logToDatabase(message + argsString, "info");
},
@@ -189,7 +208,8 @@ export const logger = {
}
// Database logging
const argsString = args.length > 0 ? " - " + safeStringify(args) : "";
const argsString =
args.length > 0 ? " - " + args.map(safeStringify).join(", ") : "";
logToDatabase(message + argsString, "info");
},
@@ -200,7 +220,8 @@ export const logger = {
}
// Database logging
const argsString = args.length > 0 ? " - " + safeStringify(args) : "";
const argsString =
args.length > 0 ? " - " + args.map(safeStringify).join(", ") : "";
logToDatabase(message + argsString, "warn");
},
@@ -211,9 +232,9 @@ export const logger = {
}
// Database logging
const messageString = safeStringify(message);
const argsString = args.length > 0 ? safeStringify(args) : "";
logToDatabase(messageString + argsString, "error");
const argsString =
args.length > 0 ? " - " + args.map(safeStringify).join(", ") : "";
logToDatabase(message + argsString, "error");
},
// New database-focused methods (self-contained)