From bfe1b632991304d6a86f1267f7ee8b22ed72dd53 Mon Sep 17 00:00:00 2001 From: Joseph Cumines Date: Sun, 24 May 2026 21:10:27 +1000 Subject: [PATCH] fix(formatting) --- .../src/kiwi/fig/node-change/export-node.ts | 16 +++---- .../src/kiwi/fig/node-change/serialize.ts | 13 +++-- .../io/fig/roundtrip/exhaustive.test.ts | 20 ++++++-- tests/engine/io/fig/roundtrip/helpers.ts | 48 +++++++++---------- 4 files changed, 58 insertions(+), 39 deletions(-) diff --git a/packages/core/src/kiwi/fig/node-change/export-node.ts b/packages/core/src/kiwi/fig/node-change/export-node.ts index 5ff60a794..c67a19d14 100644 --- a/packages/core/src/kiwi/fig/node-change/export-node.ts +++ b/packages/core/src/kiwi/fig/node-change/export-node.ts @@ -332,7 +332,12 @@ function applyRawFigmaNodeFields( continue } // Also convert colorVar.assetRef in raw effects (e.g. shadow color variables) - if (key === 'effects' && node.source.id && context.assetRefToVarGuid && context.assetRefToVarGuid.size > 0) { + if ( + key === 'effects' && + node.source.id && + context.assetRefToVarGuid && + context.assetRefToVarGuid.size > 0 + ) { const converted = convertColorVarAssetRefs(materialized[key], context.assetRefToVarGuid) ;(nc as Record)[key] = converted continue @@ -351,10 +356,7 @@ function applyRawFigmaNodeFields( * reference resolvable regardless of whether key/version is present on the * VARIABLE NodeChange. */ -function convertColorVarAssetRefs( - paints: unknown, - assetRefToVarGuid: Map -): unknown { +function convertColorVarAssetRefs(paints: unknown, assetRefToVarGuid: Map): unknown { if (!Array.isArray(paints)) return paints const result = paints.map((paint: Record) => { const colorVar = paint.colorVar as Record | undefined @@ -368,9 +370,7 @@ function convertColorVarAssetRefs( const assetRef = alias.assetRef as { key: string; version?: string } | undefined if (!assetRef?.key) return paint // Look up by key@version first, then by key alone - const lookupKey = assetRef.version - ? `${assetRef.key}@${assetRef.version}` - : assetRef.key + const lookupKey = assetRef.version ? `${assetRef.key}@${assetRef.version}` : assetRef.key const guid = assetRefToVarGuid.get(lookupKey) ?? assetRefToVarGuid.get(assetRef.key) if (!guid) return paint return { diff --git a/packages/core/src/kiwi/fig/node-change/serialize.ts b/packages/core/src/kiwi/fig/node-change/serialize.ts index 47168a481..e72972570 100644 --- a/packages/core/src/kiwi/fig/node-change/serialize.ts +++ b/packages/core/src/kiwi/fig/node-change/serialize.ts @@ -18,7 +18,11 @@ import type { SceneGraph, SceneNode } from '#core/scene-graph' import type { Color, GUID, Matrix } from '#core/types' import { guidToString, stringToGuid, VARIABLE_BINDING_FIELDS } from './convert' -import { buildAssetRefToVarGuidMap, sceneNodeToKiwiWithContext, type KiwiNodeChange } from './export-node' +import { + buildAssetRefToVarGuidMap, + sceneNodeToKiwiWithContext, + type KiwiNodeChange +} from './export-node' import { applyFontFeaturesToKiwi } from './font/features' import { BOUND_VARIABLES_PLUGIN_KEY, @@ -230,10 +234,11 @@ function serializeCornerRadii(node: SceneNode, nc: KiwiNodeChange): void { // the raw Figma data. Figma may emit per-corner radii without setting the // independent flag (preserve rectangleCornerRadiiIndependent). const rawIndependent = node.source.id - ? ((node.source.fig.rawNodeFields as Record | undefined) - ?.rectangleCornerRadiiIndependent) + ? (node.source.fig.rawNodeFields as Record | undefined) + ?.rectangleCornerRadiiIndependent : undefined - nc.rectangleCornerRadiiIndependent = typeof rawIndependent === 'boolean' ? rawIndependent : node.independentCorners + nc.rectangleCornerRadiiIndependent = + typeof rawIndependent === 'boolean' ? rawIndependent : node.independentCorners nc.rectangleTopLeftCornerRadius = node.topLeftRadius nc.rectangleTopRightCornerRadius = node.topRightRadius nc.rectangleBottomLeftCornerRadius = node.bottomLeftRadius diff --git a/tests/engine/io/fig/roundtrip/exhaustive.test.ts b/tests/engine/io/fig/roundtrip/exhaustive.test.ts index 05fa36812..bc98c5e4a 100644 --- a/tests/engine/io/fig/roundtrip/exhaustive.test.ts +++ b/tests/engine/io/fig/roundtrip/exhaustive.test.ts @@ -222,7 +222,17 @@ function compareSceneProps( ): void { const errors: Mismatch[] = [] const generation = label.startsWith('G1') ? 1 : 0 - const opts: CompareOptions = { aNodes, bNodes, aGraph, bGraph, errors, fixture, verifiers, label, generation } + const opts: CompareOptions = { + aNodes, + bNodes, + aGraph, + bGraph, + errors, + fixture, + verifiers, + label, + generation + } for (const [p, aNode] of aNodes) { const bNode = bNodes.get(p) @@ -564,9 +574,13 @@ function verifyFixture(spec: FixtureSpec): void { compareRawNodeFields(spec, g1Graph, g2Graph, g1, g2, 'G1->G2') }) - test.todo('BUG: corner radius 999 sentinel lost for non-pill nodes on scene import (40 nodes, raw data preserved)') + test.todo( + 'BUG: corner radius 999 sentinel lost for non-pill nodes on scene import (40 nodes, raw data preserved)' + ) test.todo('BUG: componentPropDefs verifier rejects 9 instances (verifier logic gap)') - test.todo('BUG: derivedTextData baseline precision differs from raw (14 instances, font metrics)') + test.todo( + 'BUG: derivedTextData baseline precision differs from raw (14 instances, font metrics)' + ) }) } diff --git a/tests/engine/io/fig/roundtrip/helpers.ts b/tests/engine/io/fig/roundtrip/helpers.ts index e90140694..9452f8b92 100644 --- a/tests/engine/io/fig/roundtrip/helpers.ts +++ b/tests/engine/io/fig/roundtrip/helpers.ts @@ -65,13 +65,9 @@ function verifyFontDigest( ): void { if (amDigest && bmDigest) { const amHex = - typeof amDigest === 'string' - ? amDigest - : Buffer.from(amDigest as Uint8Array).toString('hex') + typeof amDigest === 'string' ? amDigest : Buffer.from(amDigest as Uint8Array).toString('hex') const bmHex = - typeof bmDigest === 'string' - ? bmDigest - : Buffer.from(bmDigest as Uint8Array).toString('hex') + typeof bmDigest === 'string' ? bmDigest : Buffer.from(bmDigest as Uint8Array).toString('hex') if (amHex !== bmHex) { ctx.errors.push({ path: ctx.path, @@ -82,12 +78,7 @@ function verifyFontDigest( } } -function verifyFontLineHeight( - amLH: unknown, - bmLH: unknown, - i: number, - ctx: VerifierContext -): void { +function verifyFontLineHeight(amLH: unknown, bmLH: unknown, i: number, ctx: VerifierContext): void { const amLineHeight = typeof amLH === 'number' ? amLH : 1.2 const bmLineHeight = typeof bmLH === 'number' ? bmLH : 1.2 if (bmLineHeight !== 1.2 && Math.abs(amLineHeight - bmLineHeight) > 0.05) { @@ -277,8 +268,7 @@ function verifyAEntries( const found = bEntries.find((entryB) => { const aliasB = entryB.variableData?.value?.alias return ( - aliasB?.assetRef && - JSON.stringify(aliasB.assetRef) === JSON.stringify(aliasA.assetRef) + aliasB?.assetRef && JSON.stringify(aliasB.assetRef) === JSON.stringify(aliasA.assetRef) ) }) if (found && found.variableField !== entryA.variableField) { @@ -351,8 +341,12 @@ function verifyVarAlias(a: unknown, b: unknown): boolean { const bVal = b as Record | undefined if (!aVal && !bVal) return true if (!aVal || !bVal) return false - const aAlias = (aVal.value as Record)?.alias as Record | undefined - const bAlias = (bVal.value as Record)?.alias as Record | undefined + const aAlias = (aVal.value as Record)?.alias as + | Record + | undefined + const bAlias = (bVal.value as Record)?.alias as + | Record + | undefined const aGuid = aAlias?.guid const bGuid = bAlias?.guid const aRef = aAlias?.assetRef @@ -555,10 +549,13 @@ export const RAW_VERIFIERS = new Map([ return ctx.b === '' || ctx.a === ctx.b } ], - ['postscript', (ctx) => { - if (isIdempotent(ctx)) return JSON.stringify(ctx.a) === JSON.stringify(ctx.b) - return ctx.b === '' || ctx.a === ctx.b - }], + [ + 'postscript', + (ctx) => { + if (isIdempotent(ctx)) return JSON.stringify(ctx.a) === JSON.stringify(ctx.b) + return ctx.b === '' || ctx.a === ctx.b + } + ], ['textExplicitLayoutVersion', defaultEqual(1)], [ 'textUserLayoutVersion', @@ -586,8 +583,11 @@ export const RAW_VERIFIERS = new Map([ return verifyVarAlias(ctx.a, ctx.b) } ], - ['opacityVar', (ctx) => { - if (isIdempotent(ctx)) return JSON.stringify(ctx.a) === JSON.stringify(ctx.b) - return verifyVarAlias(ctx.a, ctx.b) - }] + [ + 'opacityVar', + (ctx) => { + if (isIdempotent(ctx)) return JSON.stringify(ctx.a) === JSON.stringify(ctx.b) + return verifyVarAlias(ctx.a, ctx.b) + } + ] ])