refactor(kiwi): remove redundant core shims

This commit is contained in:
Danila Poyarkov 2026-06-06 13:42:48 +03:00
parent 8365112c51
commit 7d27cac5ab
46 changed files with 55 additions and 107 deletions

View file

@ -11,7 +11,7 @@ import { uniq } from 'es-toolkit/array'
import { getCanvasKit } from '#core/canvaskit'
import { resolveRGBAForPreview } from '#core/color/management'
import { DEFAULT_FONT_FAMILY, DEFAULT_FONT_SIZE } from '#core/constants'
import type { NodeChange } from '#core/kiwi/fig/codec'
import type { NodeChange } from '@open-pencil/kiwi/fig/codec'
import type { SceneNode } from '#core/scene-graph'
import { resolveNodeTextDirection } from '#core/text/direction'
import { fontManager, weightToStyle } from '#core/text/fonts'

View file

@ -3,8 +3,8 @@ import { inflateSync, deflateSync } from 'fflate'
import { decodeBinarySchema, compileSchema, ByteBuffer } from '@open-pencil/kiwi/schema-runtime'
import { shapeTextForClipboard } from './canvas/text'
import { initCodec, getCompiledSchema, getSchemaBytes } from './kiwi/fig/codec'
import type { NodeChange as KiwiNodeChange } from './kiwi/fig/codec'
import { initCodec, getCompiledSchema, getSchemaBytes } from '@open-pencil/kiwi/fig/codec'
import type { NodeChange as KiwiNodeChange } from '@open-pencil/kiwi/fig/codec'
import { populateAndApplyOverrides } from './kiwi/fig/instance-overrides'
import type { InstanceNodeChange } from './kiwi/fig/instance-overrides'
import { nodeChangeToProps, sortChildren } from './kiwi/fig/node-change/convert'

View file

@ -6,8 +6,8 @@ import { decodeBinarySchema, compileSchema, ByteBuffer } from '@open-pencil/kiwi
import type { SkiaRenderer } from '#core/canvas'
import { CANVAS_BG_COLOR, IS_BROWSER, IS_TAURI } from '#core/constants'
import { renderThumbnail } from '#core/io/formats/raster'
import { initCodec, getCompiledSchema, getSchemaBytes } from '#core/kiwi/fig/codec'
import type { NodeChange } from '#core/kiwi/fig/codec'
import { initCodec, getCompiledSchema, getSchemaBytes } from '@open-pencil/kiwi/fig/codec'
import type { NodeChange } from '@open-pencil/kiwi/fig/codec'
import { populateAllLazyFigImportRoots } from '#core/kiwi/fig/lazy-import'
import { stringToGuid } from '#core/kiwi/fig/node-change/convert'
import {

View file

@ -1,6 +1,6 @@
import { IS_BROWSER } from '#core/constants'
import { importNodeChanges } from '#core/kiwi/fig/import'
import { parseFigBuffer } from '#core/kiwi/fig/parse/core'
import { parseFigBuffer } from '@open-pencil/kiwi/fig/parse'
import { deserializeSceneGraph } from '#core/kiwi/fig/parse/transfer'
import type { SerializedSceneGraph } from '#core/kiwi/fig/parse/transfer'
import type { SceneGraph } from '#core/scene-graph'

View file

@ -1,35 +0,0 @@
export {
initCodec,
getCompiledSchema,
getSchemaBytes,
isCodecReady,
compress,
decompress,
encodeMessage,
decodeMessage,
peekMessageType,
parseVariableId,
createNodeChangesMessage,
createNodeChange,
encodePaintWithVariableBinding,
encodeNodeChangeWithVariables
} from '@open-pencil/kiwi/fig/codec'
export type {
GUID,
Color,
Matrix,
Vector,
ParentIndex,
VariableBinding,
Paint,
Effect,
VariableAnyValue,
VariableDataEntry,
VariableConsumptionEntry,
VariableDataValuesEntry,
PluginData,
PluginRelaunchData,
NodeChange,
FigmaMessage
} from '@open-pencil/kiwi/fig/codec'

View file

@ -1,7 +0,0 @@
export {
buildFigKiwi,
decompressFigKiwiData,
decompressFigKiwiDataAsync,
FIG_KIWI_DEFAULT_VERSION,
parseFigKiwiChunks
} from '@open-pencil/kiwi/fig/container'

View file

@ -1,7 +1,7 @@
import { isNotNil } from 'es-toolkit/predicate'
import { BLACK } from '#core/constants'
import type { NodeChange, VariableDataValuesEntry, Color, GUID } from '#core/kiwi/fig/codec'
import type { NodeChange, VariableDataValuesEntry, Color, GUID } from '@open-pencil/kiwi/fig/codec'
import { populateAndApplyOverrides } from '#core/kiwi/fig/instance-overrides'
import type { InstanceNodeChange } from '#core/kiwi/fig/instance-overrides'
import { setLazyFigImportContext } from '#core/kiwi/fig/lazy-import'

View file

@ -1,4 +1,4 @@
import type { GUID } from '#core/kiwi/fig/codec'
import type { GUID } from '@open-pencil/kiwi/fig/codec'
import type {
ComponentPropAssignment,
ComponentPropValue,

View file

@ -1,4 +1,4 @@
import type { GUID } from '#core/kiwi/fig/codec'
import type { GUID } from '@open-pencil/kiwi/fig/codec'
import { guidToString } from '#core/kiwi/fig/node-change/convert'
import type { SceneNode } from '#core/scene-graph'
import { copyStrokes } from '#core/scene-graph/copy'

View file

@ -1,4 +1,4 @@
import type { GUID } from '#core/kiwi/fig/codec'
import type { GUID } from '@open-pencil/kiwi/fig/codec'
import type { OverridePatch } from '#core/kiwi/fig/instance-overrides/patches'
import type {
OverrideContext,

View file

@ -1,4 +1,4 @@
import type { NodeChange, Paint, Effect as KiwiEffect } from '#core/kiwi/fig/codec'
import type { NodeChange, Paint, Effect as KiwiEffect } from '@open-pencil/kiwi/fig/codec'
import {
convertFills,
mapStackSizing,

View file

@ -1,4 +1,4 @@
import type { GUID, NodeChange, VariableConsumptionEntry } from '#core/kiwi/fig/codec'
import type { GUID, NodeChange, VariableConsumptionEntry } from '@open-pencil/kiwi/fig/codec'
import type { SceneGraph } from '#core/scene-graph'
import type { Matrix, Vector } from '#core/types'

View file

@ -26,7 +26,7 @@ import {
import { resolveGeometryPaths, resolveVectorNetwork } from './vector-geometry'
export { resolveGeometryPaths } from './vector-geometry'
import type { NodeChange } from '#core/kiwi/fig/codec'
import type { NodeChange } from '@open-pencil/kiwi/fig/codec'
import type {
SceneNode,
NodeType,

View file

@ -1,4 +1,4 @@
import type { NodeChange } from '#core/kiwi/fig/codec'
import type { NodeChange } from '@open-pencil/kiwi/fig/codec'
import type { FigmaDerivedTextGlyph } from '#core/scene-graph'
export function convertFigmaDerivedTextGlyphs(

View file

@ -1,6 +1,6 @@
/* eslint-disable max-lines */
import { bytesToHex } from '#core/bytes/hex'
import type { NodeChange, Paint } from '#core/kiwi/fig/codec'
import type { NodeChange, Paint } from '@open-pencil/kiwi/fig/codec'
import type { SceneGraph, SceneNode } from '#core/scene-graph'
import type { Color, GUID, Matrix, Vector } from '#core/types'

View file

@ -1,4 +1,4 @@
import type { NodeChange } from '#core/kiwi/fig/codec'
import type { NodeChange } from '@open-pencil/kiwi/fig/codec'
import type { FontFeature } from '#core/scene-graph'
const BOOLEAN_FEATURES = [

View file

@ -1,4 +1,4 @@
import type { NodeChange } from '#core/kiwi/fig/codec'
import type { NodeChange } from '@open-pencil/kiwi/fig/codec'
import type { FontVariation } from '#core/scene-graph'
export function figmaAxisTagToString(axisTag: number): string {

View file

@ -1,4 +1,4 @@
import type { GUID } from '#core/kiwi/fig/codec'
import type { GUID } from '@open-pencil/kiwi/fig/codec'
export function guidToString(guid: GUID): string {
return `${guid.sessionID}:${guid.localID}`

View file

@ -1,5 +1,5 @@
import { normalizeColor } from '#core/color'
import type { Paint, Effect as KiwiEffect } from '#core/kiwi/fig/codec'
import type { Paint, Effect as KiwiEffect } from '@open-pencil/kiwi/fig/codec'
import { guidToString } from '#core/kiwi/fig/node-change/guid'
import type {
Fill,

View file

@ -1,13 +1,12 @@
import type { NodeChange, PluginData, PluginRelaunchData } from '#core/kiwi/fig/codec'
import { clampExportScale } from '#core/scene-graph'
import type {
ExportFormatId,
ExportSetting,
PluginDataEntry,
PluginRelaunchDataEntry
} from '#core/scene-graph'
import { guidToString } from './guid'
import type { NodeChange, PluginData, PluginRelaunchData } from '@open-pencil/kiwi/fig/codec'
import { guidToString } from '@open-pencil/kiwi/fig/guid'
import {
clampExportScale,
type ExportFormatId,
type ExportSetting,
type PluginDataEntry,
type PluginRelaunchDataEntry
} from '@open-pencil/scene-graph'
export const OPEN_PENCIL_PLUGIN_ID = 'open-pencil'
export const TEXT_DIRECTION_PLUGIN_KEY = 'textDirection'
@ -107,8 +106,6 @@ function parseExportSettingsPluginValue(value: string | null): ExportSetting[] |
if (typeof scale !== 'number' || !Number.isFinite(scale) || !isExportFormatId(format)) {
return []
}
// Clamp at the file-format boundary: imported plugin data may carry an
// out-of-range scale the UI would never produce.
return [{ scale: clampExportScale(scale), format }]
})
return settings.length === parsed.length ? settings : null
@ -131,7 +128,6 @@ function extractNativeConstraintScale(constraint: unknown): number {
const type = (constraint as { type?: unknown }).type
if (type !== 'CONTENT_SCALE' && type !== 0) return 1
const value = (constraint as { value?: unknown }).value
// Clamp native CONTENT_SCALE too: malformed .fig data can carry huge multipliers.
return typeof value === 'number' && Number.isFinite(value) ? clampExportScale(value) : 1
}

View file

@ -10,10 +10,10 @@ export {
decompressFigKiwiDataAsync,
FIG_KIWI_DEFAULT_VERSION,
parseFigKiwiChunks
} from '#core/kiwi/fig/container/kiwi'
} from '@open-pencil/kiwi/fig/container'
export { buildFontDigestMap } from './font/digests'
import type { NodeChange, Paint, VariableConsumptionEntry } from '#core/kiwi/fig/codec'
import type { NodeChange, Paint, VariableConsumptionEntry } from '@open-pencil/kiwi/fig/codec'
import type { SceneGraph, SceneNode } from '#core/scene-graph'
import type { Color, GUID, JsonObject, Matrix } from '#core/types'

View file

@ -1,4 +1,4 @@
import type { GUID, NodeChange } from '#core/kiwi/fig/codec'
import type { GUID, NodeChange } from '@open-pencil/kiwi/fig/codec'
import { guidToString } from '#core/kiwi/fig/node-change/guid'
const TEXT_STYLE_FIELDS = [

View file

@ -1,4 +1,4 @@
import type { NodeChange } from '#core/kiwi/fig/codec'
import type { NodeChange } from '@open-pencil/kiwi/fig/codec'
import type { CharacterStyleOverride, StyleRun } from '#core/scene-graph'
import { styleToWeight } from '#core/text/fonts'

View file

@ -1,4 +1,4 @@
import type { NodeChange, Paint } from '#core/kiwi/fig/codec'
import type { NodeChange, Paint } from '@open-pencil/kiwi/fig/codec'
import type { CharacterStyleOverride, SceneNode } from '#core/scene-graph'
import { normalizeFontFamily, weightToFigmaStyle } from '#core/text/fonts'

View file

@ -1,4 +1,4 @@
import type { NodeChange } from '#core/kiwi/fig/codec'
import type { NodeChange } from '@open-pencil/kiwi/fig/codec'
import type { GeometryPath, VectorNetwork, WindingRule } from '#core/scene-graph'
import type { Vector } from '#core/types'
import { decodeVectorNetworkBlob } from '#core/vector'

View file

@ -1,6 +0,0 @@
export {
deduplicateNodeChangePluginData,
parseFigKiwiContainer,
parseFigBuffer
} from '@open-pencil/kiwi/fig/parse'
export type { FigParseResult } from '@open-pencil/kiwi/fig/parse'

View file

@ -4,7 +4,7 @@ import {
serializedSceneGraphTransferList
} from '#core/kiwi/fig/parse/transfer'
import { parseFigBuffer } from './core'
import { parseFigBuffer } from '@open-pencil/kiwi/fig/parse'
interface WorkerParseRequest {
buffer: ArrayBuffer

View file

@ -1,7 +1,7 @@
export { prefetchFigmaSchema } from '#core/clipboard'
export { readFigFile, parseFigFile } from './fig/file'
export { importNodeChanges } from './fig/import'
export { deduplicateNodeChangePluginData } from './fig/parse/core'
export { deduplicateNodeChangePluginData } from '@open-pencil/kiwi/fig/parse'
export {
initCodec,
encodeMessage,
@ -29,7 +29,7 @@ export {
type VariableDataValuesEntry,
type ParentIndex,
type FigmaMessage
} from './fig/codec'
} from '@open-pencil/kiwi/fig/codec'
export {
MESSAGE_TYPES,
NODE_TYPES,

View file

@ -1,6 +1,6 @@
import { prepareWithSegments, layoutWithLines } from '@chenglou/pretext'
import type { NodeChange } from '#core/kiwi/fig/codec'
import type { NodeChange } from '@open-pencil/kiwi/fig/codec'
import { encodePathCommandsBlob } from '#core/kiwi/fig/node-change/path-commands'
import type { SceneNode } from '#core/scene-graph'
import { normalizeFontFamily, weightToFigmaStyle, weightToStyle } from '#core/text/fonts'

View file

@ -1,4 +1,4 @@
import type { NodeChange } from '#core/kiwi/fig/codec'
import type { NodeChange } from '@open-pencil/kiwi/fig/codec'
import type { SceneNode } from '#core/scene-graph'
interface DerivedTextDataOptions {

View file

@ -41,7 +41,7 @@ describe('flip', () => {
describe('flip roundtrip via kiwi', () => {
async function roundtrip(graph: SceneGraph) {
const { initCodec } = await import('#core/kiwi/fig/codec')
const { initCodec } = await import('@open-pencil/kiwi/fig/codec')
const { parseFigFile } = await import('#core/kiwi/fig/file')
const { exportFigFile } = await import('#core/io/formats/fig/export')
await initCodec()

View file

@ -2,7 +2,7 @@ import { expect, setDefaultTimeout, test } from 'bun:test'
import { readFileSync } from 'node:fs'
import { importNodeChanges } from '#core/kiwi'
import { parseFigBuffer } from '#core/kiwi/fig/parse/core'
import { parseFigBuffer } from '@open-pencil/kiwi/fig/parse'
import { expectDefined } from '#tests/helpers/assert'
import { heavy } from '#tests/helpers/test-utils'

View file

@ -1,6 +1,6 @@
import { describe, expect, test } from 'bun:test'
import type { NodeChange } from '#core/kiwi/fig/codec'
import type { NodeChange } from '@open-pencil/kiwi/fig/codec'
import { importNodeChanges } from '#core/kiwi/fig/import'
import { nodeChangeToProps } from '#core/kiwi/fig/node-change/convert'

View file

@ -1,6 +1,6 @@
import { describe, expect, test } from 'bun:test'
import type { NodeChange } from '#core/kiwi/fig/codec'
import type { NodeChange } from '@open-pencil/kiwi/fig/codec'
import { importNodeChanges } from '#core/kiwi/fig/import'
const documentGuid = { sessionID: 0, localID: 0 }

View file

@ -1,6 +1,6 @@
import { describe, expect, test } from 'bun:test'
import type { NodeChange } from '#core/kiwi/fig/codec'
import type { NodeChange } from '@open-pencil/kiwi/fig/codec'
import { nodeChangeToProps, importStyleRuns } from '#core/kiwi/fig/node-change/convert'
describe('Figma font variation import', () => {

View file

@ -1,7 +1,7 @@
import { describe, expect, test } from 'bun:test'
import { readFileSync } from 'node:fs'
import type { NodeChange } from '#core/kiwi/fig/codec'
import type { NodeChange } from '@open-pencil/kiwi/fig/codec'
import { nodeChangeToProps } from '#core/kiwi/fig/node-change/convert'
import { sceneNodeToKiwi } from '#core/kiwi/fig/node-change/serialize'
import { SceneGraph, type MaskType } from '#core/scene-graph'

View file

@ -1,6 +1,6 @@
import { describe, expect, test } from 'bun:test'
import type { NodeChange } from '#core/kiwi/fig/codec'
import type { NodeChange } from '@open-pencil/kiwi/fig/codec'
import { nodeChangeToProps } from '#core/kiwi/fig/node-change/convert'
describe('Figma mask import', () => {

View file

@ -1,6 +1,6 @@
import { describe, expect, test } from 'bun:test'
import type { NodeChange } from '#core/kiwi/fig/codec'
import type { NodeChange } from '@open-pencil/kiwi/fig/codec'
import { nodeChangeToProps } from '#core/kiwi/fig/node-change/convert'
const sourceNodeId = { sessionID: 12, localID: 34 }

View file

@ -1,7 +1,7 @@
import { describe, expect, test } from 'bun:test'
import { readFileSync } from 'node:fs'
import type { NodeChange, Paint } from '#core/kiwi/fig/codec'
import type { NodeChange, Paint } from '@open-pencil/kiwi/fig/codec'
import { nodeChangeToProps } from '#core/kiwi/fig/node-change/convert'
import { sceneNodeToKiwi } from '#core/kiwi/fig/node-change/serialize'
import { SceneGraph } from '#core/scene-graph'

View file

@ -2,7 +2,7 @@ import { describe, expect, test } from 'bun:test'
import { importNodeChanges } from '@open-pencil/core'
import type { NodeChange } from '#core/kiwi/fig/codec'
import type { NodeChange } from '@open-pencil/kiwi/fig/codec'
import { canvas, doc, node } from './legacy/helpers'

View file

@ -30,7 +30,7 @@ type SchemaCoverageBucket =
| 'internalBookkeeping'
const SCHEMA_PATH = 'packages/kiwi/src/fig/schema/fig.kiwi'
const CODEC_PATH = 'packages/core/src/kiwi/fig/codec/index.ts'
const CODEC_PATH = 'packages/kiwi/src/fig/codec.ts'
function nodeChangeSchemaFields(): SchemaField[] {
const schema = parseSchema(readFileSync(SCHEMA_PATH, 'utf8'))

View file

@ -1,6 +1,6 @@
import { describe, expect, test } from 'bun:test'
import type { NodeChange } from '#core/kiwi/fig/codec'
import type { NodeChange } from '@open-pencil/kiwi/fig/codec'
import { applyStyleRefsToFields } from '#core/kiwi/fig/node-change/style-refs'
describe('fig import style refs', () => {

View file

@ -5,7 +5,7 @@ import { resolve } from 'node:path'
import { exportFigFile, initCodec, parseFigFile, SceneGraph } from '@open-pencil/core'
import { fontManager } from '@open-pencil/core/text'
import { parseFigBuffer } from '#core/kiwi/fig/parse/core'
import { parseFigBuffer } from '@open-pencil/kiwi/fig/parse'
import { HEAVY_TEST_TIMEOUT_MS } from '#tests/helpers/test-utils'

View file

@ -2,7 +2,7 @@ import { beforeAll, describe, expect, test } from 'bun:test'
import { exportFigFile, initCodec, parseFigFile, SceneGraph } from '@open-pencil/core'
import { guidToString } from '@open-pencil/core/kiwi/fig/node-change/convert'
import { parseFigBuffer } from '@open-pencil/core/kiwi/fig/parse/core'
import { parseFigBuffer } from '@open-pencil/kiwi/fig/parse'
function decodeExport(bytes: Uint8Array) {
return parseFigBuffer(bytes.buffer.slice(bytes.byteOffset, bytes.byteOffset + bytes.byteLength))

View file

@ -4,7 +4,7 @@ import { readFileSync } from 'node:fs'
import { exportFigFile, extractExportGraph, parseFigFile } from '@open-pencil/core/io'
import { initCodec } from '@open-pencil/core/kiwi'
import { guidToString } from '@open-pencil/core/kiwi/fig/node-change/guid'
import { parseFigBuffer } from '@open-pencil/core/kiwi/fig/parse/core'
import { parseFigBuffer } from '@open-pencil/kiwi/fig/parse'
import { SceneGraph } from '@open-pencil/core/scene-graph'
describe('export subgraph extraction', () => {

View file

@ -40,7 +40,7 @@ const sgTypesPath = coreSourcePath('scene-graph/types.ts')
const nodeExportPath = coreSourcePath('kiwi/fig/node-change/export-node.ts')
const convertPath = coreSourcePath('kiwi/fig/node-change/paint.ts')
const schemaPath = repoPath('packages/kiwi/src/fig/schema/fig.kiwi')
const codecPath = coreSourcePath('kiwi/fig/codec/index.ts')
const codecPath = repoPath('packages/kiwi/src/fig/codec.ts')
const lifecyclePath = coreSourcePath('canvas/renderer/lifecycle.ts')
function readSource(path: string): string {