Worker message with JSON string to deserialize.
Set tracking active task IDs.
Void; posts JSON_DESERIALIZE_RESULT or ERROR.
export function handleJsonDeserialize(
message: JSONDeserializeMessage,
activeTasks: Set<string>,
): void {
const { taskId, json, reviverKeys } = message.payload;
activeTasks.add(taskId);
try {
console.info(
`[Worker] 📝 Starting JSON deserialization for task ${taskId}`,
);
const startTime = performance.now();
const reviver = reviverKeys
? (key: string, value: unknown) => {
if (key === "" || reviverKeys.includes(key)) {
return value;
}
return undefined;
}
: undefined;
const data = JSON.parse(json, reviver);
const deserializationTimeMs = performance.now() - startTime;
globalThis.postMessage({
type: "JSON_DESERIALIZE_RESULT",
payload: {
taskId,
data,
timing: {
deserializationTimeMs,
},
},
});
console.info(
`[Worker] ✅ JSON deserialization task ${taskId} completed (${deserializationTimeMs.toFixed(2)}ms)`,
);
} catch (error) {
console.error(
`[Worker] ❌ Error in JSON deserialization task ${taskId}:`,
error,
);
globalThis.postMessage({
type: "ERROR",
payload: {
taskId,
error: getErrorDetails(error),
},
});
} finally {
activeTasks.delete(taskId);
}
}
Deserializes JSON in a worker for heavy payloads.