Skip to content

Commit 9847f9d

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

File tree

2 files changed

+46
-2
lines changed

2 files changed

+46
-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

+21-1
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ function handleMessageEvent(e) {
4444
const decodedMessages = messages.map((message) => Decode(message.log));
4545
decodedMessages.forEach((message) => {
4646
const { data: args } = message;
47-
const { result, error } = evaluateExpression(args);
47+
const { result, error } = evaluateExpression(args.map(handleP5Font));
4848
const resultMessages = [
4949
{ log: Encode({ method: error ? 'error' : 'result', data: [result] }) }
5050
];
@@ -179,3 +179,23 @@ if (_report) {
179179
_report.apply(window.p5, [newMessage, method, color]);
180180
};
181181
}
182+
183+
// Helper function to handle p5.Font objects
184+
function handleP5Font(obj) {
185+
// Check for p5.Font instances in multiple ways
186+
const isFontName = obj && obj.constructor && (obj.constructor.name === 'Font' || obj.constructor.name === 'p5.Font');
187+
const isFontInstance = window.p5 && obj instanceof window.p5.Font;
188+
if (isFontName || isFontInstance) {
189+
return {
190+
_isP5Font: true,
191+
name: obj.name,
192+
path: obj.path,
193+
face: {
194+
family: obj.face?.family,
195+
style: obj.face?.style,
196+
weight: obj.face?.weight
197+
}
198+
};
199+
}
200+
return obj;
201+
}

0 commit comments

Comments
 (0)