From c4b7b691b6c8e35d473ecb479623235d60ebc597 Mon Sep 17 00:00:00 2001 From: Victor Giers Date: Wed, 15 Apr 2026 08:09:09 +0200 Subject: [PATCH] Refactor brush face and geometry reading functions in migrate-scene-document.ts --- src/document/migrate-scene-document.ts | 131 ++++++++++--------------- 1 file changed, 52 insertions(+), 79 deletions(-) diff --git a/src/document/migrate-scene-document.ts b/src/document/migrate-scene-document.ts index c21f9cc7..f62f0d86 100644 --- a/src/document/migrate-scene-document.ts +++ b/src/document/migrate-scene-document.ts @@ -1998,13 +1998,28 @@ function readBoxBrushFaces( materials: SceneDocument["materials"], allowMissingUvState: boolean ): BoxBrushFaces { + return readBrushFaces( + value, + label, + materials, + allowMissingUvState, + ["posX", "negX", "posY", "negY", "posZ", "negZ"] + ) as BoxBrushFaces; +} + +function readBrushFaces( + value: unknown, + label: string, + materials: SceneDocument["materials"], + allowMissingUvState: boolean, + faceIds: readonly WhiteboxFaceId[] +) { if (!isRecord(value)) { throw new Error(`${label} must be an object.`); } - const extraFaceKeys = Object.keys(value).filter( - (faceId) => !isBoxFaceId(faceId) - ); + const supportedFaceIds = new Set(faceIds); + const extraFaceKeys = Object.keys(value).filter((faceId) => !supportedFaceIds.has(faceId)); if (extraFaceKeys.length > 0) { throw new Error( @@ -2012,44 +2027,17 @@ function readBoxBrushFaces( ); } - return { - posX: readBrushFace( - value.posX, - `${label}.posX`, - materials, - allowMissingUvState - ), - negX: readBrushFace( - value.negX, - `${label}.negX`, - materials, - allowMissingUvState - ), - posY: readBrushFace( - value.posY, - `${label}.posY`, - materials, - allowMissingUvState - ), - negY: readBrushFace( - value.negY, - `${label}.negY`, - materials, - allowMissingUvState - ), - posZ: readBrushFace( - value.posZ, - `${label}.posZ`, - materials, - allowMissingUvState - ), - negZ: readBrushFace( - value.negZ, - `${label}.negZ`, - materials, - allowMissingUvState - ) - }; + return Object.fromEntries( + faceIds.map((faceId) => [ + faceId, + readBrushFace( + value[faceId], + `${label}.${faceId}`, + materials, + allowMissingUvState + ) + ]) + ); } function readBoxBrushGeometry( @@ -2057,8 +2045,22 @@ function readBoxBrushGeometry( label: string, size: { x: number; y: number; z: number } ) { + return readBrushGeometry( + value, + label, + createDefaultBoxBrushGeometry(size), + BOX_VERTEX_IDS + ); +} + +function readBrushGeometry }>( + value: unknown, + label: string, + fallbackGeometry: T, + vertexIds: readonly WhiteboxVertexId[] +): T { if (value === undefined) { - return createDefaultBoxBrushGeometry(size); + return fallbackGeometry; } if (!isRecord(value)) { @@ -2070,8 +2072,7 @@ function readBoxBrushGeometry( } const extraVertexKeys = Object.keys(value.vertices).filter( - (vertexId) => - !BOX_VERTEX_IDS.includes(vertexId as (typeof BOX_VERTEX_IDS)[number]) + (vertexId) => !vertexIds.includes(vertexId as WhiteboxVertexId) ); if (extraVertexKeys.length > 0) { @@ -2081,41 +2082,13 @@ function readBoxBrushGeometry( } return { - vertices: { - negX_negY_negZ: readVec3( - value.vertices.negX_negY_negZ, - `${label}.vertices.negX_negY_negZ` - ), - posX_negY_negZ: readVec3( - value.vertices.posX_negY_negZ, - `${label}.vertices.posX_negY_negZ` - ), - negX_posY_negZ: readVec3( - value.vertices.negX_posY_negZ, - `${label}.vertices.negX_posY_negZ` - ), - posX_posY_negZ: readVec3( - value.vertices.posX_posY_negZ, - `${label}.vertices.posX_posY_negZ` - ), - negX_negY_posZ: readVec3( - value.vertices.negX_negY_posZ, - `${label}.vertices.negX_negY_posZ` - ), - posX_negY_posZ: readVec3( - value.vertices.posX_negY_posZ, - `${label}.vertices.posX_negY_posZ` - ), - negX_posY_posZ: readVec3( - value.vertices.negX_posY_posZ, - `${label}.vertices.negX_posY_posZ` - ), - posX_posY_posZ: readVec3( - value.vertices.posX_posY_posZ, - `${label}.vertices.posX_posY_posZ` - ) - } - }; + vertices: Object.fromEntries( + vertexIds.map((vertexId) => [ + vertexId, + readVec3(value.vertices[vertexId], `${label}.vertices.${vertexId}`) + ]) + ) as T["vertices"] + } as T; } function readBrushes(