()
| 1318 | export type TransformedMeta = ReturnType<typeof transformMeta>; |
| 1319 | |
| 1320 | const createEditorInstanceContext = () => { |
| 1321 | const [latestFrame, setLatestFrame] = createLazySignal<FrameData>(); |
| 1322 | |
| 1323 | const [_isConnected, setIsConnected] = createSignal(false); |
| 1324 | const [isWorkerReady, setIsWorkerReady] = createSignal(false); |
| 1325 | const [canvasControls, setCanvasControls] = |
| 1326 | createSignal<CanvasControls | null>(null); |
| 1327 | const [performanceMode, setPerformanceMode] = createSignal(false); |
| 1328 | |
| 1329 | let disposeWorkerReadyEffect: (() => void) | undefined; |
| 1330 | |
| 1331 | onCleanup(() => { |
| 1332 | disposeWorkerReadyEffect?.(); |
| 1333 | canvasControls()?.dispose(); |
| 1334 | }); |
| 1335 | |
| 1336 | const [editorInstance, { refetch: refetchEditorInstance }] = createResource( |
| 1337 | async () => { |
| 1338 | console.log("[Editor] Creating editor instance..."); |
| 1339 | |
| 1340 | let instance: SerializedEditorInstance | undefined; |
| 1341 | let lastError: unknown; |
| 1342 | for (let attempt = 0; attempt < 5; attempt++) { |
| 1343 | try { |
| 1344 | instance = await commands.createEditorInstance(); |
| 1345 | break; |
| 1346 | } catch (e) { |
| 1347 | lastError = e; |
| 1348 | const errorMessage = e instanceof Error ? e.message : String(e); |
| 1349 | if (/may need to be recovered/i.test(errorMessage)) { |
| 1350 | break; |
| 1351 | } |
| 1352 | console.warn( |
| 1353 | `[Editor] Attempt ${attempt + 1}/5 failed:`, |
| 1354 | e, |
| 1355 | "- retrying...", |
| 1356 | ); |
| 1357 | await new Promise((resolve) => |
| 1358 | setTimeout(resolve, 500 * (attempt + 1)), |
| 1359 | ); |
| 1360 | } |
| 1361 | } |
| 1362 | |
| 1363 | if (!instance) { |
| 1364 | throw lastError; |
| 1365 | } |
| 1366 | |
| 1367 | console.log("[Editor] Editor instance created, setting up WebSocket"); |
| 1368 | |
| 1369 | const requestFrame = () => { |
| 1370 | events.renderFrameEvent.emit({ |
| 1371 | frame_number: 0, |
| 1372 | fps: FPS, |
| 1373 | resolution_base: getPreviewResolution(DEFAULT_PREVIEW_QUALITY), |
| 1374 | }); |
| 1375 | }; |
| 1376 | |
| 1377 | const [ws, _wsConnected, workerReady, controls] = createImageDataWS( |
nothing calls this directly
no test coverage detected