Skip to content

Commit f81ad2a

Browse files
committed
fix(font): avoid serializing full p5.Font data in previewEntry and IDE hook
1 parent 3dea10e commit f81ad2a

File tree

2 files changed

+50
-2
lines changed

2 files changed

+50
-2
lines changed

client/modules/IDE/hooks/useHandleMessageEvent.js

+25-1
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,37 @@ import { Decode } from 'console-feed';
33
import { dispatchConsoleEvent } from '../actions/console';
44
import { stopSketch, expandConsole } from '../actions/ide';
55

6+
// Helper function to restore p5.Font objects
7+
function restoreP5Font(obj) {
8+
if (obj && obj._isP5Font) {
9+
// Return a simplified font-like object for console display
10+
return {
11+
_isP5Font: true,
12+
name: obj.name,
13+
path: obj.path,
14+
face: {
15+
family: obj.face?.family,
16+
style: obj.face?.style,
17+
weight: obj.face?.weight
18+
}
19+
};
20+
}
21+
return obj;
22+
}
23+
624
export default function useHandleMessageEvent() {
725
const dispatch = useDispatch();
826

927
const handleMessageEvent = (data) => {
1028
const { source, messages } = data;
1129
if (source === 'sketch' && Array.isArray(messages)) {
12-
const decodedMessages = messages.map((message) => Decode(message.log));
30+
const decodedMessages = messages.map((message) => {
31+
const decoded = Decode(message.log);
32+
if (decoded.data) {
33+
decoded.data = decoded.data.map(restoreP5Font);
34+
}
35+
return decoded;
36+
});
1337
decodedMessages.every((message, index, arr) => {
1438
const { data: args } = message;
1539
let hasInfiniteLoop = false;

client/utils/previewEntry.js

+25-1
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,30 @@ setInterval(() => {
3535
}
3636
}, LOGWAIT);
3737

38+
// Helper function to handle p5.Font objects
39+
function handleP5Font(obj) {
40+
// Check for p5.Font instances in multiple ways
41+
if (
42+
(obj &&
43+
obj.constructor &&
44+
(obj.constructor.name === 'Font' ||
45+
obj.constructor.name === 'p5.Font')) ||
46+
(window.p5 && obj instanceof window.p5.Font)
47+
) {
48+
return {
49+
_isP5Font: true,
50+
name: obj.name,
51+
path: obj.path,
52+
face: {
53+
family: obj.face?.family,
54+
style: obj.face?.style,
55+
weight: obj.face?.weight
56+
}
57+
};
58+
}
59+
return obj;
60+
}
61+
3862
function handleMessageEvent(e) {
3963
// maybe don't need this?? idk!
4064
if (window.origin !== e.origin) return;
@@ -44,7 +68,7 @@ function handleMessageEvent(e) {
4468
const decodedMessages = messages.map((message) => Decode(message.log));
4569
decodedMessages.forEach((message) => {
4670
const { data: args } = message;
47-
const { result, error } = evaluateExpression(args);
71+
const { result, error } = evaluateExpression(args.map(handleP5Font));
4872
const resultMessages = [
4973
{ log: Encode({ method: error ? 'error' : 'result', data: [result] }) }
5074
];

0 commit comments

Comments
 (0)