From a5c6a1e3ab7730148a1f2161ebe17082001e6e20 Mon Sep 17 00:00:00 2001 From: Danila Poyarkov Date: Mon, 31 Aug 2026 12:32:53 +0300 Subject: [PATCH 1/9] fix(mcp): repair published exports and Windows roots --- CHANGELOG.md | 2 ++ packages/cli/package.json | 1 - packages/core/package.json | 2 -- packages/dom-css/package.json | 5 ---- packages/fig/package.json | 3 -- packages/harness/package.json | 1 - packages/kiwi/package.json | 7 ----- packages/mcp/package.json | 4 --- packages/mcp/src/index.ts | 7 +++-- packages/mcp/src/root.ts | 5 ++++ packages/mcp/src/stdio.ts | 5 ++-- packages/mcp/tests/root.test.ts | 14 ++++++++++ packages/pen/package.json | 1 - packages/scene-graph/package.json | 25 ----------------- tools/release-packages/src/tarballs.ts | 28 ++++++++++++++++++- tools/release-packages/tests/tarballs.test.ts | 15 +++++++++- 16 files changed, 69 insertions(+), 56 deletions(-) create mode 100644 packages/mcp/src/root.ts create mode 100644 packages/mcp/tests/root.test.ts diff --git a/CHANGELOG.md b/CHANGELOG.md index 508b47616..45f173508 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -71,6 +71,8 @@ ### Fixed +- Make published package export conditions resolve to files included in npm tarballs. +- Use the user's home directory as the default MCP file root on Windows, avoiding the caller's unreliable working directory. - Open legacy raw `.fig` files that store the Kiwi document and thumbnail without a ZIP wrapper. (#582) - Preserve a frame's auto-layout HUG sizing mode when converting it into a component with `create_component`, so later padding changes still resize the component as expected. - Run `openpencil import` on Node so the npm-installed CLI no longer fails with `Bun is not defined`. (#575) diff --git a/packages/cli/package.json b/packages/cli/package.json index 09790b481..e8321c1dd 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -12,7 +12,6 @@ "exports": { "./library": { "types": "./dist/library/index.d.mts", - "bun": "./src/library/index.ts", "import": "./dist/library/index.mjs", "default": "./dist/library/index.mjs" } diff --git a/packages/core/package.json b/packages/core/package.json index affda0e42..fd049f2c2 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -86,7 +86,6 @@ "default": "./dist/rpc/index.js" }, "./library": { - "bun": "./src/library/index.ts", "types": "./dist/library/index.d.ts", "import": "./dist/library/index.js", "default": "./dist/library/index.js" @@ -132,7 +131,6 @@ "default": "./dist/clipboard.js" }, "./bytes": { - "bun": "./src/bytes/index.ts", "types": "./dist/bytes/index.d.ts", "import": "./dist/bytes/index.js", "default": "./dist/bytes/index.js" diff --git a/packages/dom-css/package.json b/packages/dom-css/package.json index 026b4ec49..a541ada3b 100644 --- a/packages/dom-css/package.json +++ b/packages/dom-css/package.json @@ -6,32 +6,27 @@ "imports": { "#dom-css/*": { "types": "./src/*", - "bun": "./src/*", "default": "./dist/*" } }, "exports": { ".": { "types": "./dist/index.d.ts", - "bun": "./src/index.ts", "import": "./dist/index.js", "default": "./dist/index.js" }, "./browser": { "types": "./dist/browser.d.ts", - "bun": "./src/browser.ts", "import": "./dist/browser.js", "default": "./dist/browser.js" }, "./jsx-runtime": { "types": "./dist/jsx-runtime.d.ts", - "bun": "./src/jsx/runtime.ts", "import": "./dist/jsx-runtime.js", "default": "./dist/jsx-runtime.js" }, "./jsx-dev-runtime": { "types": "./dist/jsx-dev-runtime.d.ts", - "bun": "./src/jsx/dev-runtime.ts", "import": "./dist/jsx-dev-runtime.js", "default": "./dist/jsx-dev-runtime.js" } diff --git a/packages/fig/package.json b/packages/fig/package.json index 34250728f..bf54dd7ea 100644 --- a/packages/fig/package.json +++ b/packages/fig/package.json @@ -6,19 +6,16 @@ "exports": { ".": { "types": "./dist/index.d.ts", - "bun": "./src/index.ts", "import": "./dist/index.js", "default": "./dist/index.js" }, "./node-change": { "types": "./dist/node-change.d.ts", - "bun": "./src/node-change/index.ts", "import": "./dist/node-change.js", "default": "./dist/node-change.js" }, "./instance-overrides": { "types": "./dist/instance-overrides.d.ts", - "bun": "./src/instance-overrides/index.ts", "import": "./dist/instance-overrides.js", "default": "./dist/instance-overrides.js" } diff --git a/packages/harness/package.json b/packages/harness/package.json index a457de024..5806f4db7 100644 --- a/packages/harness/package.json +++ b/packages/harness/package.json @@ -8,7 +8,6 @@ "exports": { ".": { "types": "./dist/index.d.mts", - "bun": "./src/index.ts", "import": "./dist/index.mjs", "default": "./dist/index.mjs" } diff --git a/packages/kiwi/package.json b/packages/kiwi/package.json index 9222e6b37..0a5a0db21 100644 --- a/packages/kiwi/package.json +++ b/packages/kiwi/package.json @@ -19,43 +19,36 @@ "exports": { ".": { "types": "./dist/index.d.ts", - "bun": "./src/index.ts", "import": "./dist/index.js", "default": "./dist/index.js" }, "./schema-runtime": { "types": "./dist/schema-runtime.d.ts", - "bun": "./src/schema-runtime/index.ts", "import": "./dist/schema-runtime.js", "default": "./dist/schema-runtime.js" }, "./fig": { "types": "./dist/fig.d.ts", - "bun": "./src/fig/index.ts", "import": "./dist/fig.js", "default": "./dist/fig.js" }, "./fig/codec": { "types": "./dist/fig/codec.d.ts", - "bun": "./src/fig/codec.ts", "import": "./dist/fig/codec.js", "default": "./dist/fig/codec.js" }, "./fig/container": { "types": "./dist/fig/container.d.ts", - "bun": "./src/fig/container.ts", "import": "./dist/fig/container.js", "default": "./dist/fig/container.js" }, "./fig/guid": { "types": "./dist/fig/guid.d.ts", - "bun": "./src/fig/guid.ts", "import": "./dist/fig/guid.js", "default": "./dist/fig/guid.js" }, "./fig/parse": { "types": "./dist/fig/parse.d.ts", - "bun": "./src/fig/parse.ts", "import": "./dist/fig/parse.js", "default": "./dist/fig/parse.js" } diff --git a/packages/mcp/package.json b/packages/mcp/package.json index 055545b7c..4e3136578 100644 --- a/packages/mcp/package.json +++ b/packages/mcp/package.json @@ -6,7 +6,6 @@ "imports": { "#mcp/*": { "types": "./src/*.ts", - "bun": "./src/*.ts", "default": "./dist/*.mjs" } }, @@ -24,19 +23,16 @@ }, "./transport": { "types": "./dist/transport.d.mts", - "bun": "./src/transport/paths.ts", "import": "./dist/transport.mjs", "default": "./dist/transport.mjs" }, "./discovery": { "types": "./dist/discovery.d.mts", - "bun": "./src/transport/discovery.ts", "import": "./dist/discovery.mjs", "default": "./dist/discovery.mjs" }, "./tools": { "types": "./dist/tools.d.mts", - "bun": "./src/tool/index.ts", "import": "./dist/tools.mjs", "default": "./dist/tools.mjs" } diff --git a/packages/mcp/src/index.ts b/packages/mcp/src/index.ts index 972bc4b1d..9f7f53444 100644 --- a/packages/mcp/src/index.ts +++ b/packages/mcp/src/index.ts @@ -1,4 +1,5 @@ #!/usr/bin/env node +import { resolveMCPRoot } from '#mcp/root' import { startServer } from '#mcp/server' import { readToolPolicyFromEnv } from '#mcp/tool/policy' @@ -17,8 +18,8 @@ if (process.argv.includes('--help') || process.argv.includes('-h')) { ` platform path. Parent dir created 0o700. Mainly for test isolation.\n` + ` OPENPENCIL_MCP_TCP Deprecated — TCP is controlled by PORT (>0 = on, 0 = off)\n` + ` OPENPENCIL_MCP_AUTH_TOKEN Bearer token for MCP and RPC auth\n` + - ` OPENPENCIL_MCP_ROOT Allowed directory for file-scoped tools (default: current working directory)\n` + - ` OPENPENCIL_MCP_EVAL Set to 1 to enable the eval tool\n` + + ` OPENPENCIL_MCP_ROOT Allowed directory for file-scoped tools (default: home directory on Windows, current working directory elsewhere)\n` + + ` OPENPENCIL_MCP_EVAL Set to 1 to enable the eval tool\n` + ` OPENPENCIL_MCP_DISABLED_TOOLS Comma-separated tool names to omit\n` + ` OPENPENCIL_MCP_CORS_ORIGIN Allowed CORS origin\n` + ` OPENPENCIL_MCP_APP_TIMEOUT_MS If set, close the server and remove its discovery\n` + @@ -75,7 +76,7 @@ const handle = await startServer({ socketPath: process.env.OPENPENCIL_MCP_SOCKET?.trim() || null, enableEval: toolPolicy.allowEval, disabledTools: toolPolicy.disabledTools, - mcpRoot: process.env.OPENPENCIL_MCP_ROOT?.trim() || process.cwd(), + mcpRoot: resolveMCPRoot(process.env.OPENPENCIL_MCP_ROOT), // Auth token: undefined → auto-generate, empty string → disable auth, // non-empty → use trimmed value. Whitespace-only is rejected to prevent a // silent fallback to an auto-generated token when the operator intended to diff --git a/packages/mcp/src/root.ts b/packages/mcp/src/root.ts new file mode 100644 index 000000000..1b6b7b1b2 --- /dev/null +++ b/packages/mcp/src/root.ts @@ -0,0 +1,5 @@ +import { homedir, platform } from 'node:os' + +export function resolveMCPRoot(value: string | undefined, runtimePlatform = platform()): string { + return value?.trim() || (runtimePlatform === 'win32' ? homedir() : process.cwd()) +} diff --git a/packages/mcp/src/stdio.ts b/packages/mcp/src/stdio.ts index ba711d268..46ee3831b 100644 --- a/packages/mcp/src/stdio.ts +++ b/packages/mcp/src/stdio.ts @@ -2,6 +2,7 @@ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js' import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js' +import { resolveMCPRoot } from '#mcp/root' import { MCP_VERSION, registerTools } from '#mcp/server' import { createStdioRPCBridge } from '#mcp/stdio/bridge' import type { ToolPolicy } from '#mcp/tool/metadata' @@ -22,7 +23,7 @@ if (process.argv.includes('--help') || process.argv.includes('-h')) { ` OPENPENCIL_MCP_SOCKET Override socket path (auto-discovered from discovery file when unset)\n` + ` OPENPENCIL_MCP_AUTH_TOKEN Bearer token for RPC auth\n` + ` OPENPENCIL_MCP_ROOT Allowed directory for file-scoped tools\n` + - ` (default: cwd when run standalone, home directory when app-spawned)\n` + + ` (default: home directory on Windows, cwd elsewhere)\n` + ` OPENPENCIL_MCP_EVAL Set to 1 to enable the eval tool\n` + ` OPENPENCIL_MCP_DISABLED_TOOLS Comma-separated tool names to omit; defaults to the app setting\n` ) @@ -36,7 +37,7 @@ const toolPolicy: ToolPolicy = { ? ((await readDiscoveryFile())?.disabledTools ?? []) : parseDisabledTools(process.env.OPENPENCIL_MCP_DISABLED_TOOLS) } -const mcpRoot = process.env.OPENPENCIL_MCP_ROOT?.trim() || process.cwd() +const mcpRoot = resolveMCPRoot(process.env.OPENPENCIL_MCP_ROOT) // Auth token: undefined → auto-discover from discovery file, empty string → // disable auth, whitespace-only → reject (same fail-fast as index.ts to catch // misconfiguration), otherwise → use the trimmed value. diff --git a/packages/mcp/tests/root.test.ts b/packages/mcp/tests/root.test.ts new file mode 100644 index 000000000..4c1e3aef5 --- /dev/null +++ b/packages/mcp/tests/root.test.ts @@ -0,0 +1,14 @@ +import { describe, expect, test } from 'bun:test' +import { homedir } from 'node:os' + +import { resolveMCPRoot } from '../src/root' + +describe('resolveMCPRoot', () => { + test('honors an explicit root', () => { + expect(resolveMCPRoot(' /designs ')).toBe('/designs') + }) + + test('uses the home directory on Windows', () => { + expect(resolveMCPRoot(undefined, 'win32')).toBe(homedir()) + }) +}) diff --git a/packages/pen/package.json b/packages/pen/package.json index 4081d8f88..10aa5f3bd 100644 --- a/packages/pen/package.json +++ b/packages/pen/package.json @@ -6,7 +6,6 @@ "exports": { ".": { "types": "./dist/index.d.ts", - "bun": "./src/index.ts", "import": "./dist/index.js", "default": "./dist/index.js" } diff --git a/packages/scene-graph/package.json b/packages/scene-graph/package.json index df0ff7416..9ee5d254b 100644 --- a/packages/scene-graph/package.json +++ b/packages/scene-graph/package.json @@ -18,151 +18,126 @@ "exports": { ".": { "types": "./dist/index.d.ts", - "bun": "./src/index.ts", "import": "./dist/index.js", "default": "./dist/index.js" }, "./copy": { "types": "./dist/copy.d.ts", - "bun": "./src/copy.ts", "import": "./dist/copy.js", "default": "./dist/copy.js" }, "./node-defaults": { "types": "./dist/node-defaults.d.ts", - "bun": "./src/node-defaults.ts", "import": "./dist/node-defaults.js", "default": "./dist/node-defaults.js" }, "./instances": { "types": "./dist/instances.d.ts", - "bun": "./src/instances.ts", "import": "./dist/instances.js", "default": "./dist/instances.js" }, "./snap": { "types": "./dist/snap.d.ts", - "bun": "./src/snap.ts", "import": "./dist/snap.js", "default": "./dist/snap.js" }, "./source-metadata": { "types": "./dist/source-metadata.d.ts", - "bun": "./src/source-metadata.ts", "import": "./dist/source-metadata.js", "default": "./dist/source-metadata.js" }, "./undo": { "types": "./dist/undo.d.ts", - "bun": "./src/undo.ts", "import": "./dist/undo.js", "default": "./dist/undo.js" }, "./variant-name": { "types": "./dist/variant-name.d.ts", - "bun": "./src/variant-name.ts", "import": "./dist/variant-name.js", "default": "./dist/variant-name.js" }, "./variant-properties": { "types": "./dist/variant-properties.d.ts", - "bun": "./src/variant-properties.ts", "import": "./dist/variant-properties.js", "default": "./dist/variant-properties.js" }, "./vector-network": { "types": "./dist/vector-network.d.ts", - "bun": "./src/vector-network.ts", "import": "./dist/vector-network.js", "default": "./dist/vector-network.js" }, "./guides": { "types": "./dist/guides.d.ts", - "bun": "./src/guides.ts", "import": "./dist/guides.js", "default": "./dist/guides.js" }, "./layout-guides": { "types": "./dist/layout-guides.d.ts", - "bun": "./src/layout-guides.ts", "import": "./dist/layout-guides.js", "default": "./dist/layout-guides.js" }, "./types": { "types": "./dist/types.d.ts", - "bun": "./src/types.ts", "import": "./dist/types.js", "default": "./dist/types.js" }, "./primitives": { "types": "./dist/primitives.d.ts", - "bun": "./src/primitives.ts", "import": "./dist/primitives.js", "default": "./dist/primitives.js" }, "./constants": { "types": "./dist/constants.d.ts", - "bun": "./src/constants.ts", "import": "./dist/constants.js", "default": "./dist/constants.js" }, "./hit-test": { "types": "./dist/hit-test.d.ts", - "bun": "./src/hit-test.ts", "import": "./dist/hit-test.js", "default": "./dist/hit-test.js" }, "./preview": { "types": "./dist/preview.d.ts", - "bun": "./src/preview.ts", "import": "./dist/preview.js", "default": "./dist/preview.js" }, "./text-picture": { "types": "./dist/text-picture.d.ts", - "bun": "./src/text-picture.ts", "import": "./dist/text-picture.js", "default": "./dist/text-picture.js" }, "./variables": { "types": "./dist/variables.d.ts", - "bun": "./src/variables.ts", "import": "./dist/variables.js", "default": "./dist/variables.js" }, "./images": { "types": "./dist/images.d.ts", - "bun": "./src/images.ts", "import": "./dist/images.js", "default": "./dist/images.js" }, "./coordinate": { "types": "./dist/coordinate.d.ts", - "bun": "./src/coordinate.ts", "import": "./dist/coordinate.js", "default": "./dist/coordinate.js" }, "./matrix": { "types": "./dist/matrix.d.ts", - "bun": "./src/matrix.ts", "import": "./dist/matrix.js", "default": "./dist/matrix.js" }, "./geometry": { "types": "./dist/geometry.d.ts", - "bun": "./src/geometry.ts", "import": "./dist/geometry.js", "default": "./dist/geometry.js" }, "./resize": { "types": "./dist/resize.d.ts", - "bun": "./src/resize.ts", "import": "./dist/resize.js", "default": "./dist/resize.js" }, "./parse-path": { "types": "./dist/parse-path.d.ts", - "bun": "./src/parse-path.ts", "import": "./dist/parse-path.js", "default": "./dist/parse-path.js" } diff --git a/tools/release-packages/src/tarballs.ts b/tools/release-packages/src/tarballs.ts index e97670693..cfcca7ab1 100644 --- a/tools/release-packages/src/tarballs.ts +++ b/tools/release-packages/src/tarballs.ts @@ -15,6 +15,17 @@ export function packageBinTargets(packageJSON: PackageJSON): Record> { const { stdout } = await execFileAsync('tar', ['-tf', tarballPath], { encoding: 'utf8' }) return new Set(stdout.trim().split('\n').filter(Boolean)) @@ -39,9 +50,24 @@ export async function validateTarballBinTargets(tarballPath: string): Promise { + const entries = await tarballEntries(tarballPath) + const packageJSON = (await tarballPackageJSON(tarballPath)) as PackageJSON & { exports?: unknown } + + for (const target of packageExportTargetPaths(packageJSON)) { + if (!target.startsWith('./')) continue + const entry = `package/${target.slice(2)}` + if (!entries.has(entry)) { + throw new Error(`${tarballPath}: export target missing from tarball: ${entry}`) + } + } +} + export async function validatePackedTarballs(directory: string): Promise { const tarballs = (await readdir(directory)).filter((name) => name.endsWith('.tgz')) for (const tarball of tarballs) { - await validateTarballBinTargets(join(directory, tarball)) + const path = join(directory, tarball) + await validateTarballBinTargets(path) + await validateTarballExportTargets(path) } } diff --git a/tools/release-packages/tests/tarballs.test.ts b/tools/release-packages/tests/tarballs.test.ts index e0b1bb246..547f1504c 100644 --- a/tools/release-packages/tests/tarballs.test.ts +++ b/tools/release-packages/tests/tarballs.test.ts @@ -1,6 +1,6 @@ import { describe, expect, test } from 'bun:test' -import { packageBinTargets } from '../src/tarballs' +import { packageBinTargets, packageExportTargetPaths } from '../src/tarballs' describe('packageBinTargets', () => { test('normalizes string bin fields', () => { @@ -17,3 +17,16 @@ describe('packageBinTargets', () => { }) }) }) + +describe('package export targets', () => { + test('collects targets from conditional exports', () => { + expect( + packageExportTargetPaths({ + exports: { + '.': { types: './dist/index.d.ts', import: './dist/index.js' }, + './feature': { import: './dist/feature.js' } + } + }) + ).toEqual(['./dist/index.d.ts', './dist/index.js', './dist/feature.js']) + }) +}) From 5c8d83ce79f809a29d7fd7a707edd4dbe83a540a Mon Sep 17 00:00:00 2001 From: Danila Poyarkov Date: Mon, 31 Aug 2026 12:38:56 +0300 Subject: [PATCH 2/9] fix(mcp): restore workspace package manifests --- packages/cli/package.json | 1 + packages/core/package.json | 2 ++ packages/dom-css/package.json | 5 +++++ packages/fig/package.json | 3 +++ packages/harness/package.json | 1 + packages/kiwi/package.json | 7 +++++++ packages/mcp/package.json | 4 ++++ packages/pen/package.json | 1 + packages/scene-graph/package.json | 25 +++++++++++++++++++++++++ 9 files changed, 49 insertions(+) diff --git a/packages/cli/package.json b/packages/cli/package.json index e8321c1dd..09790b481 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -12,6 +12,7 @@ "exports": { "./library": { "types": "./dist/library/index.d.mts", + "bun": "./src/library/index.ts", "import": "./dist/library/index.mjs", "default": "./dist/library/index.mjs" } diff --git a/packages/core/package.json b/packages/core/package.json index fd049f2c2..affda0e42 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -86,6 +86,7 @@ "default": "./dist/rpc/index.js" }, "./library": { + "bun": "./src/library/index.ts", "types": "./dist/library/index.d.ts", "import": "./dist/library/index.js", "default": "./dist/library/index.js" @@ -131,6 +132,7 @@ "default": "./dist/clipboard.js" }, "./bytes": { + "bun": "./src/bytes/index.ts", "types": "./dist/bytes/index.d.ts", "import": "./dist/bytes/index.js", "default": "./dist/bytes/index.js" diff --git a/packages/dom-css/package.json b/packages/dom-css/package.json index a541ada3b..026b4ec49 100644 --- a/packages/dom-css/package.json +++ b/packages/dom-css/package.json @@ -6,27 +6,32 @@ "imports": { "#dom-css/*": { "types": "./src/*", + "bun": "./src/*", "default": "./dist/*" } }, "exports": { ".": { "types": "./dist/index.d.ts", + "bun": "./src/index.ts", "import": "./dist/index.js", "default": "./dist/index.js" }, "./browser": { "types": "./dist/browser.d.ts", + "bun": "./src/browser.ts", "import": "./dist/browser.js", "default": "./dist/browser.js" }, "./jsx-runtime": { "types": "./dist/jsx-runtime.d.ts", + "bun": "./src/jsx/runtime.ts", "import": "./dist/jsx-runtime.js", "default": "./dist/jsx-runtime.js" }, "./jsx-dev-runtime": { "types": "./dist/jsx-dev-runtime.d.ts", + "bun": "./src/jsx/dev-runtime.ts", "import": "./dist/jsx-dev-runtime.js", "default": "./dist/jsx-dev-runtime.js" } diff --git a/packages/fig/package.json b/packages/fig/package.json index bf54dd7ea..34250728f 100644 --- a/packages/fig/package.json +++ b/packages/fig/package.json @@ -6,16 +6,19 @@ "exports": { ".": { "types": "./dist/index.d.ts", + "bun": "./src/index.ts", "import": "./dist/index.js", "default": "./dist/index.js" }, "./node-change": { "types": "./dist/node-change.d.ts", + "bun": "./src/node-change/index.ts", "import": "./dist/node-change.js", "default": "./dist/node-change.js" }, "./instance-overrides": { "types": "./dist/instance-overrides.d.ts", + "bun": "./src/instance-overrides/index.ts", "import": "./dist/instance-overrides.js", "default": "./dist/instance-overrides.js" } diff --git a/packages/harness/package.json b/packages/harness/package.json index 5806f4db7..a457de024 100644 --- a/packages/harness/package.json +++ b/packages/harness/package.json @@ -8,6 +8,7 @@ "exports": { ".": { "types": "./dist/index.d.mts", + "bun": "./src/index.ts", "import": "./dist/index.mjs", "default": "./dist/index.mjs" } diff --git a/packages/kiwi/package.json b/packages/kiwi/package.json index 0a5a0db21..9222e6b37 100644 --- a/packages/kiwi/package.json +++ b/packages/kiwi/package.json @@ -19,36 +19,43 @@ "exports": { ".": { "types": "./dist/index.d.ts", + "bun": "./src/index.ts", "import": "./dist/index.js", "default": "./dist/index.js" }, "./schema-runtime": { "types": "./dist/schema-runtime.d.ts", + "bun": "./src/schema-runtime/index.ts", "import": "./dist/schema-runtime.js", "default": "./dist/schema-runtime.js" }, "./fig": { "types": "./dist/fig.d.ts", + "bun": "./src/fig/index.ts", "import": "./dist/fig.js", "default": "./dist/fig.js" }, "./fig/codec": { "types": "./dist/fig/codec.d.ts", + "bun": "./src/fig/codec.ts", "import": "./dist/fig/codec.js", "default": "./dist/fig/codec.js" }, "./fig/container": { "types": "./dist/fig/container.d.ts", + "bun": "./src/fig/container.ts", "import": "./dist/fig/container.js", "default": "./dist/fig/container.js" }, "./fig/guid": { "types": "./dist/fig/guid.d.ts", + "bun": "./src/fig/guid.ts", "import": "./dist/fig/guid.js", "default": "./dist/fig/guid.js" }, "./fig/parse": { "types": "./dist/fig/parse.d.ts", + "bun": "./src/fig/parse.ts", "import": "./dist/fig/parse.js", "default": "./dist/fig/parse.js" } diff --git a/packages/mcp/package.json b/packages/mcp/package.json index 4e3136578..055545b7c 100644 --- a/packages/mcp/package.json +++ b/packages/mcp/package.json @@ -6,6 +6,7 @@ "imports": { "#mcp/*": { "types": "./src/*.ts", + "bun": "./src/*.ts", "default": "./dist/*.mjs" } }, @@ -23,16 +24,19 @@ }, "./transport": { "types": "./dist/transport.d.mts", + "bun": "./src/transport/paths.ts", "import": "./dist/transport.mjs", "default": "./dist/transport.mjs" }, "./discovery": { "types": "./dist/discovery.d.mts", + "bun": "./src/transport/discovery.ts", "import": "./dist/discovery.mjs", "default": "./dist/discovery.mjs" }, "./tools": { "types": "./dist/tools.d.mts", + "bun": "./src/tool/index.ts", "import": "./dist/tools.mjs", "default": "./dist/tools.mjs" } diff --git a/packages/pen/package.json b/packages/pen/package.json index 10aa5f3bd..4081d8f88 100644 --- a/packages/pen/package.json +++ b/packages/pen/package.json @@ -6,6 +6,7 @@ "exports": { ".": { "types": "./dist/index.d.ts", + "bun": "./src/index.ts", "import": "./dist/index.js", "default": "./dist/index.js" } diff --git a/packages/scene-graph/package.json b/packages/scene-graph/package.json index 9ee5d254b..df0ff7416 100644 --- a/packages/scene-graph/package.json +++ b/packages/scene-graph/package.json @@ -18,126 +18,151 @@ "exports": { ".": { "types": "./dist/index.d.ts", + "bun": "./src/index.ts", "import": "./dist/index.js", "default": "./dist/index.js" }, "./copy": { "types": "./dist/copy.d.ts", + "bun": "./src/copy.ts", "import": "./dist/copy.js", "default": "./dist/copy.js" }, "./node-defaults": { "types": "./dist/node-defaults.d.ts", + "bun": "./src/node-defaults.ts", "import": "./dist/node-defaults.js", "default": "./dist/node-defaults.js" }, "./instances": { "types": "./dist/instances.d.ts", + "bun": "./src/instances.ts", "import": "./dist/instances.js", "default": "./dist/instances.js" }, "./snap": { "types": "./dist/snap.d.ts", + "bun": "./src/snap.ts", "import": "./dist/snap.js", "default": "./dist/snap.js" }, "./source-metadata": { "types": "./dist/source-metadata.d.ts", + "bun": "./src/source-metadata.ts", "import": "./dist/source-metadata.js", "default": "./dist/source-metadata.js" }, "./undo": { "types": "./dist/undo.d.ts", + "bun": "./src/undo.ts", "import": "./dist/undo.js", "default": "./dist/undo.js" }, "./variant-name": { "types": "./dist/variant-name.d.ts", + "bun": "./src/variant-name.ts", "import": "./dist/variant-name.js", "default": "./dist/variant-name.js" }, "./variant-properties": { "types": "./dist/variant-properties.d.ts", + "bun": "./src/variant-properties.ts", "import": "./dist/variant-properties.js", "default": "./dist/variant-properties.js" }, "./vector-network": { "types": "./dist/vector-network.d.ts", + "bun": "./src/vector-network.ts", "import": "./dist/vector-network.js", "default": "./dist/vector-network.js" }, "./guides": { "types": "./dist/guides.d.ts", + "bun": "./src/guides.ts", "import": "./dist/guides.js", "default": "./dist/guides.js" }, "./layout-guides": { "types": "./dist/layout-guides.d.ts", + "bun": "./src/layout-guides.ts", "import": "./dist/layout-guides.js", "default": "./dist/layout-guides.js" }, "./types": { "types": "./dist/types.d.ts", + "bun": "./src/types.ts", "import": "./dist/types.js", "default": "./dist/types.js" }, "./primitives": { "types": "./dist/primitives.d.ts", + "bun": "./src/primitives.ts", "import": "./dist/primitives.js", "default": "./dist/primitives.js" }, "./constants": { "types": "./dist/constants.d.ts", + "bun": "./src/constants.ts", "import": "./dist/constants.js", "default": "./dist/constants.js" }, "./hit-test": { "types": "./dist/hit-test.d.ts", + "bun": "./src/hit-test.ts", "import": "./dist/hit-test.js", "default": "./dist/hit-test.js" }, "./preview": { "types": "./dist/preview.d.ts", + "bun": "./src/preview.ts", "import": "./dist/preview.js", "default": "./dist/preview.js" }, "./text-picture": { "types": "./dist/text-picture.d.ts", + "bun": "./src/text-picture.ts", "import": "./dist/text-picture.js", "default": "./dist/text-picture.js" }, "./variables": { "types": "./dist/variables.d.ts", + "bun": "./src/variables.ts", "import": "./dist/variables.js", "default": "./dist/variables.js" }, "./images": { "types": "./dist/images.d.ts", + "bun": "./src/images.ts", "import": "./dist/images.js", "default": "./dist/images.js" }, "./coordinate": { "types": "./dist/coordinate.d.ts", + "bun": "./src/coordinate.ts", "import": "./dist/coordinate.js", "default": "./dist/coordinate.js" }, "./matrix": { "types": "./dist/matrix.d.ts", + "bun": "./src/matrix.ts", "import": "./dist/matrix.js", "default": "./dist/matrix.js" }, "./geometry": { "types": "./dist/geometry.d.ts", + "bun": "./src/geometry.ts", "import": "./dist/geometry.js", "default": "./dist/geometry.js" }, "./resize": { "types": "./dist/resize.d.ts", + "bun": "./src/resize.ts", "import": "./dist/resize.js", "default": "./dist/resize.js" }, "./parse-path": { "types": "./dist/parse-path.d.ts", + "bun": "./src/parse-path.ts", "import": "./dist/parse-path.js", "default": "./dist/parse-path.js" } From 11f0ad6cc3d4e91f23b0d90229f34f88109f601a Mon Sep 17 00:00:00 2001 From: Danila Poyarkov Date: Mon, 31 Aug 2026 12:42:19 +0300 Subject: [PATCH 3/9] fix(mcp): remove invalid package export conditions --- packages/cli/package.json | 1 - packages/core/package.json | 2 -- packages/dom-css/package.json | 5 ----- packages/fig/package.json | 3 --- packages/harness/package.json | 1 - packages/kiwi/package.json | 7 ------- packages/mcp/package.json | 4 ---- packages/pen/package.json | 1 - packages/scene-graph/package.json | 25 ------------------------- 9 files changed, 49 deletions(-) diff --git a/packages/cli/package.json b/packages/cli/package.json index 09790b481..e8321c1dd 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -12,7 +12,6 @@ "exports": { "./library": { "types": "./dist/library/index.d.mts", - "bun": "./src/library/index.ts", "import": "./dist/library/index.mjs", "default": "./dist/library/index.mjs" } diff --git a/packages/core/package.json b/packages/core/package.json index affda0e42..fd049f2c2 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -86,7 +86,6 @@ "default": "./dist/rpc/index.js" }, "./library": { - "bun": "./src/library/index.ts", "types": "./dist/library/index.d.ts", "import": "./dist/library/index.js", "default": "./dist/library/index.js" @@ -132,7 +131,6 @@ "default": "./dist/clipboard.js" }, "./bytes": { - "bun": "./src/bytes/index.ts", "types": "./dist/bytes/index.d.ts", "import": "./dist/bytes/index.js", "default": "./dist/bytes/index.js" diff --git a/packages/dom-css/package.json b/packages/dom-css/package.json index 026b4ec49..a541ada3b 100644 --- a/packages/dom-css/package.json +++ b/packages/dom-css/package.json @@ -6,32 +6,27 @@ "imports": { "#dom-css/*": { "types": "./src/*", - "bun": "./src/*", "default": "./dist/*" } }, "exports": { ".": { "types": "./dist/index.d.ts", - "bun": "./src/index.ts", "import": "./dist/index.js", "default": "./dist/index.js" }, "./browser": { "types": "./dist/browser.d.ts", - "bun": "./src/browser.ts", "import": "./dist/browser.js", "default": "./dist/browser.js" }, "./jsx-runtime": { "types": "./dist/jsx-runtime.d.ts", - "bun": "./src/jsx/runtime.ts", "import": "./dist/jsx-runtime.js", "default": "./dist/jsx-runtime.js" }, "./jsx-dev-runtime": { "types": "./dist/jsx-dev-runtime.d.ts", - "bun": "./src/jsx/dev-runtime.ts", "import": "./dist/jsx-dev-runtime.js", "default": "./dist/jsx-dev-runtime.js" } diff --git a/packages/fig/package.json b/packages/fig/package.json index 34250728f..bf54dd7ea 100644 --- a/packages/fig/package.json +++ b/packages/fig/package.json @@ -6,19 +6,16 @@ "exports": { ".": { "types": "./dist/index.d.ts", - "bun": "./src/index.ts", "import": "./dist/index.js", "default": "./dist/index.js" }, "./node-change": { "types": "./dist/node-change.d.ts", - "bun": "./src/node-change/index.ts", "import": "./dist/node-change.js", "default": "./dist/node-change.js" }, "./instance-overrides": { "types": "./dist/instance-overrides.d.ts", - "bun": "./src/instance-overrides/index.ts", "import": "./dist/instance-overrides.js", "default": "./dist/instance-overrides.js" } diff --git a/packages/harness/package.json b/packages/harness/package.json index a457de024..5806f4db7 100644 --- a/packages/harness/package.json +++ b/packages/harness/package.json @@ -8,7 +8,6 @@ "exports": { ".": { "types": "./dist/index.d.mts", - "bun": "./src/index.ts", "import": "./dist/index.mjs", "default": "./dist/index.mjs" } diff --git a/packages/kiwi/package.json b/packages/kiwi/package.json index 9222e6b37..0a5a0db21 100644 --- a/packages/kiwi/package.json +++ b/packages/kiwi/package.json @@ -19,43 +19,36 @@ "exports": { ".": { "types": "./dist/index.d.ts", - "bun": "./src/index.ts", "import": "./dist/index.js", "default": "./dist/index.js" }, "./schema-runtime": { "types": "./dist/schema-runtime.d.ts", - "bun": "./src/schema-runtime/index.ts", "import": "./dist/schema-runtime.js", "default": "./dist/schema-runtime.js" }, "./fig": { "types": "./dist/fig.d.ts", - "bun": "./src/fig/index.ts", "import": "./dist/fig.js", "default": "./dist/fig.js" }, "./fig/codec": { "types": "./dist/fig/codec.d.ts", - "bun": "./src/fig/codec.ts", "import": "./dist/fig/codec.js", "default": "./dist/fig/codec.js" }, "./fig/container": { "types": "./dist/fig/container.d.ts", - "bun": "./src/fig/container.ts", "import": "./dist/fig/container.js", "default": "./dist/fig/container.js" }, "./fig/guid": { "types": "./dist/fig/guid.d.ts", - "bun": "./src/fig/guid.ts", "import": "./dist/fig/guid.js", "default": "./dist/fig/guid.js" }, "./fig/parse": { "types": "./dist/fig/parse.d.ts", - "bun": "./src/fig/parse.ts", "import": "./dist/fig/parse.js", "default": "./dist/fig/parse.js" } diff --git a/packages/mcp/package.json b/packages/mcp/package.json index 055545b7c..4e3136578 100644 --- a/packages/mcp/package.json +++ b/packages/mcp/package.json @@ -6,7 +6,6 @@ "imports": { "#mcp/*": { "types": "./src/*.ts", - "bun": "./src/*.ts", "default": "./dist/*.mjs" } }, @@ -24,19 +23,16 @@ }, "./transport": { "types": "./dist/transport.d.mts", - "bun": "./src/transport/paths.ts", "import": "./dist/transport.mjs", "default": "./dist/transport.mjs" }, "./discovery": { "types": "./dist/discovery.d.mts", - "bun": "./src/transport/discovery.ts", "import": "./dist/discovery.mjs", "default": "./dist/discovery.mjs" }, "./tools": { "types": "./dist/tools.d.mts", - "bun": "./src/tool/index.ts", "import": "./dist/tools.mjs", "default": "./dist/tools.mjs" } diff --git a/packages/pen/package.json b/packages/pen/package.json index 4081d8f88..10aa5f3bd 100644 --- a/packages/pen/package.json +++ b/packages/pen/package.json @@ -6,7 +6,6 @@ "exports": { ".": { "types": "./dist/index.d.ts", - "bun": "./src/index.ts", "import": "./dist/index.js", "default": "./dist/index.js" } diff --git a/packages/scene-graph/package.json b/packages/scene-graph/package.json index df0ff7416..9ee5d254b 100644 --- a/packages/scene-graph/package.json +++ b/packages/scene-graph/package.json @@ -18,151 +18,126 @@ "exports": { ".": { "types": "./dist/index.d.ts", - "bun": "./src/index.ts", "import": "./dist/index.js", "default": "./dist/index.js" }, "./copy": { "types": "./dist/copy.d.ts", - "bun": "./src/copy.ts", "import": "./dist/copy.js", "default": "./dist/copy.js" }, "./node-defaults": { "types": "./dist/node-defaults.d.ts", - "bun": "./src/node-defaults.ts", "import": "./dist/node-defaults.js", "default": "./dist/node-defaults.js" }, "./instances": { "types": "./dist/instances.d.ts", - "bun": "./src/instances.ts", "import": "./dist/instances.js", "default": "./dist/instances.js" }, "./snap": { "types": "./dist/snap.d.ts", - "bun": "./src/snap.ts", "import": "./dist/snap.js", "default": "./dist/snap.js" }, "./source-metadata": { "types": "./dist/source-metadata.d.ts", - "bun": "./src/source-metadata.ts", "import": "./dist/source-metadata.js", "default": "./dist/source-metadata.js" }, "./undo": { "types": "./dist/undo.d.ts", - "bun": "./src/undo.ts", "import": "./dist/undo.js", "default": "./dist/undo.js" }, "./variant-name": { "types": "./dist/variant-name.d.ts", - "bun": "./src/variant-name.ts", "import": "./dist/variant-name.js", "default": "./dist/variant-name.js" }, "./variant-properties": { "types": "./dist/variant-properties.d.ts", - "bun": "./src/variant-properties.ts", "import": "./dist/variant-properties.js", "default": "./dist/variant-properties.js" }, "./vector-network": { "types": "./dist/vector-network.d.ts", - "bun": "./src/vector-network.ts", "import": "./dist/vector-network.js", "default": "./dist/vector-network.js" }, "./guides": { "types": "./dist/guides.d.ts", - "bun": "./src/guides.ts", "import": "./dist/guides.js", "default": "./dist/guides.js" }, "./layout-guides": { "types": "./dist/layout-guides.d.ts", - "bun": "./src/layout-guides.ts", "import": "./dist/layout-guides.js", "default": "./dist/layout-guides.js" }, "./types": { "types": "./dist/types.d.ts", - "bun": "./src/types.ts", "import": "./dist/types.js", "default": "./dist/types.js" }, "./primitives": { "types": "./dist/primitives.d.ts", - "bun": "./src/primitives.ts", "import": "./dist/primitives.js", "default": "./dist/primitives.js" }, "./constants": { "types": "./dist/constants.d.ts", - "bun": "./src/constants.ts", "import": "./dist/constants.js", "default": "./dist/constants.js" }, "./hit-test": { "types": "./dist/hit-test.d.ts", - "bun": "./src/hit-test.ts", "import": "./dist/hit-test.js", "default": "./dist/hit-test.js" }, "./preview": { "types": "./dist/preview.d.ts", - "bun": "./src/preview.ts", "import": "./dist/preview.js", "default": "./dist/preview.js" }, "./text-picture": { "types": "./dist/text-picture.d.ts", - "bun": "./src/text-picture.ts", "import": "./dist/text-picture.js", "default": "./dist/text-picture.js" }, "./variables": { "types": "./dist/variables.d.ts", - "bun": "./src/variables.ts", "import": "./dist/variables.js", "default": "./dist/variables.js" }, "./images": { "types": "./dist/images.d.ts", - "bun": "./src/images.ts", "import": "./dist/images.js", "default": "./dist/images.js" }, "./coordinate": { "types": "./dist/coordinate.d.ts", - "bun": "./src/coordinate.ts", "import": "./dist/coordinate.js", "default": "./dist/coordinate.js" }, "./matrix": { "types": "./dist/matrix.d.ts", - "bun": "./src/matrix.ts", "import": "./dist/matrix.js", "default": "./dist/matrix.js" }, "./geometry": { "types": "./dist/geometry.d.ts", - "bun": "./src/geometry.ts", "import": "./dist/geometry.js", "default": "./dist/geometry.js" }, "./resize": { "types": "./dist/resize.d.ts", - "bun": "./src/resize.ts", "import": "./dist/resize.js", "default": "./dist/resize.js" }, "./parse-path": { "types": "./dist/parse-path.d.ts", - "bun": "./src/parse-path.ts", "import": "./dist/parse-path.js", "default": "./dist/parse-path.js" } From b88362dc10a9bd617a45c185bd4d89950531180d Mon Sep 17 00:00:00 2001 From: Danila Poyarkov Date: Mon, 31 Aug 2026 13:08:35 +0300 Subject: [PATCH 4/9] Revert "fix(mcp): remove invalid package export conditions" This reverts commit 44226baa3198aeabcec49092a94ff26cb24f3842. --- packages/cli/package.json | 1 + packages/core/package.json | 2 ++ packages/dom-css/package.json | 5 +++++ packages/fig/package.json | 3 +++ packages/harness/package.json | 1 + packages/kiwi/package.json | 7 +++++++ packages/mcp/package.json | 4 ++++ packages/pen/package.json | 1 + packages/scene-graph/package.json | 25 +++++++++++++++++++++++++ 9 files changed, 49 insertions(+) diff --git a/packages/cli/package.json b/packages/cli/package.json index e8321c1dd..09790b481 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -12,6 +12,7 @@ "exports": { "./library": { "types": "./dist/library/index.d.mts", + "bun": "./src/library/index.ts", "import": "./dist/library/index.mjs", "default": "./dist/library/index.mjs" } diff --git a/packages/core/package.json b/packages/core/package.json index fd049f2c2..affda0e42 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -86,6 +86,7 @@ "default": "./dist/rpc/index.js" }, "./library": { + "bun": "./src/library/index.ts", "types": "./dist/library/index.d.ts", "import": "./dist/library/index.js", "default": "./dist/library/index.js" @@ -131,6 +132,7 @@ "default": "./dist/clipboard.js" }, "./bytes": { + "bun": "./src/bytes/index.ts", "types": "./dist/bytes/index.d.ts", "import": "./dist/bytes/index.js", "default": "./dist/bytes/index.js" diff --git a/packages/dom-css/package.json b/packages/dom-css/package.json index a541ada3b..026b4ec49 100644 --- a/packages/dom-css/package.json +++ b/packages/dom-css/package.json @@ -6,27 +6,32 @@ "imports": { "#dom-css/*": { "types": "./src/*", + "bun": "./src/*", "default": "./dist/*" } }, "exports": { ".": { "types": "./dist/index.d.ts", + "bun": "./src/index.ts", "import": "./dist/index.js", "default": "./dist/index.js" }, "./browser": { "types": "./dist/browser.d.ts", + "bun": "./src/browser.ts", "import": "./dist/browser.js", "default": "./dist/browser.js" }, "./jsx-runtime": { "types": "./dist/jsx-runtime.d.ts", + "bun": "./src/jsx/runtime.ts", "import": "./dist/jsx-runtime.js", "default": "./dist/jsx-runtime.js" }, "./jsx-dev-runtime": { "types": "./dist/jsx-dev-runtime.d.ts", + "bun": "./src/jsx/dev-runtime.ts", "import": "./dist/jsx-dev-runtime.js", "default": "./dist/jsx-dev-runtime.js" } diff --git a/packages/fig/package.json b/packages/fig/package.json index bf54dd7ea..34250728f 100644 --- a/packages/fig/package.json +++ b/packages/fig/package.json @@ -6,16 +6,19 @@ "exports": { ".": { "types": "./dist/index.d.ts", + "bun": "./src/index.ts", "import": "./dist/index.js", "default": "./dist/index.js" }, "./node-change": { "types": "./dist/node-change.d.ts", + "bun": "./src/node-change/index.ts", "import": "./dist/node-change.js", "default": "./dist/node-change.js" }, "./instance-overrides": { "types": "./dist/instance-overrides.d.ts", + "bun": "./src/instance-overrides/index.ts", "import": "./dist/instance-overrides.js", "default": "./dist/instance-overrides.js" } diff --git a/packages/harness/package.json b/packages/harness/package.json index 5806f4db7..a457de024 100644 --- a/packages/harness/package.json +++ b/packages/harness/package.json @@ -8,6 +8,7 @@ "exports": { ".": { "types": "./dist/index.d.mts", + "bun": "./src/index.ts", "import": "./dist/index.mjs", "default": "./dist/index.mjs" } diff --git a/packages/kiwi/package.json b/packages/kiwi/package.json index 0a5a0db21..9222e6b37 100644 --- a/packages/kiwi/package.json +++ b/packages/kiwi/package.json @@ -19,36 +19,43 @@ "exports": { ".": { "types": "./dist/index.d.ts", + "bun": "./src/index.ts", "import": "./dist/index.js", "default": "./dist/index.js" }, "./schema-runtime": { "types": "./dist/schema-runtime.d.ts", + "bun": "./src/schema-runtime/index.ts", "import": "./dist/schema-runtime.js", "default": "./dist/schema-runtime.js" }, "./fig": { "types": "./dist/fig.d.ts", + "bun": "./src/fig/index.ts", "import": "./dist/fig.js", "default": "./dist/fig.js" }, "./fig/codec": { "types": "./dist/fig/codec.d.ts", + "bun": "./src/fig/codec.ts", "import": "./dist/fig/codec.js", "default": "./dist/fig/codec.js" }, "./fig/container": { "types": "./dist/fig/container.d.ts", + "bun": "./src/fig/container.ts", "import": "./dist/fig/container.js", "default": "./dist/fig/container.js" }, "./fig/guid": { "types": "./dist/fig/guid.d.ts", + "bun": "./src/fig/guid.ts", "import": "./dist/fig/guid.js", "default": "./dist/fig/guid.js" }, "./fig/parse": { "types": "./dist/fig/parse.d.ts", + "bun": "./src/fig/parse.ts", "import": "./dist/fig/parse.js", "default": "./dist/fig/parse.js" } diff --git a/packages/mcp/package.json b/packages/mcp/package.json index 4e3136578..055545b7c 100644 --- a/packages/mcp/package.json +++ b/packages/mcp/package.json @@ -6,6 +6,7 @@ "imports": { "#mcp/*": { "types": "./src/*.ts", + "bun": "./src/*.ts", "default": "./dist/*.mjs" } }, @@ -23,16 +24,19 @@ }, "./transport": { "types": "./dist/transport.d.mts", + "bun": "./src/transport/paths.ts", "import": "./dist/transport.mjs", "default": "./dist/transport.mjs" }, "./discovery": { "types": "./dist/discovery.d.mts", + "bun": "./src/transport/discovery.ts", "import": "./dist/discovery.mjs", "default": "./dist/discovery.mjs" }, "./tools": { "types": "./dist/tools.d.mts", + "bun": "./src/tool/index.ts", "import": "./dist/tools.mjs", "default": "./dist/tools.mjs" } diff --git a/packages/pen/package.json b/packages/pen/package.json index 10aa5f3bd..4081d8f88 100644 --- a/packages/pen/package.json +++ b/packages/pen/package.json @@ -6,6 +6,7 @@ "exports": { ".": { "types": "./dist/index.d.ts", + "bun": "./src/index.ts", "import": "./dist/index.js", "default": "./dist/index.js" } diff --git a/packages/scene-graph/package.json b/packages/scene-graph/package.json index 9ee5d254b..df0ff7416 100644 --- a/packages/scene-graph/package.json +++ b/packages/scene-graph/package.json @@ -18,126 +18,151 @@ "exports": { ".": { "types": "./dist/index.d.ts", + "bun": "./src/index.ts", "import": "./dist/index.js", "default": "./dist/index.js" }, "./copy": { "types": "./dist/copy.d.ts", + "bun": "./src/copy.ts", "import": "./dist/copy.js", "default": "./dist/copy.js" }, "./node-defaults": { "types": "./dist/node-defaults.d.ts", + "bun": "./src/node-defaults.ts", "import": "./dist/node-defaults.js", "default": "./dist/node-defaults.js" }, "./instances": { "types": "./dist/instances.d.ts", + "bun": "./src/instances.ts", "import": "./dist/instances.js", "default": "./dist/instances.js" }, "./snap": { "types": "./dist/snap.d.ts", + "bun": "./src/snap.ts", "import": "./dist/snap.js", "default": "./dist/snap.js" }, "./source-metadata": { "types": "./dist/source-metadata.d.ts", + "bun": "./src/source-metadata.ts", "import": "./dist/source-metadata.js", "default": "./dist/source-metadata.js" }, "./undo": { "types": "./dist/undo.d.ts", + "bun": "./src/undo.ts", "import": "./dist/undo.js", "default": "./dist/undo.js" }, "./variant-name": { "types": "./dist/variant-name.d.ts", + "bun": "./src/variant-name.ts", "import": "./dist/variant-name.js", "default": "./dist/variant-name.js" }, "./variant-properties": { "types": "./dist/variant-properties.d.ts", + "bun": "./src/variant-properties.ts", "import": "./dist/variant-properties.js", "default": "./dist/variant-properties.js" }, "./vector-network": { "types": "./dist/vector-network.d.ts", + "bun": "./src/vector-network.ts", "import": "./dist/vector-network.js", "default": "./dist/vector-network.js" }, "./guides": { "types": "./dist/guides.d.ts", + "bun": "./src/guides.ts", "import": "./dist/guides.js", "default": "./dist/guides.js" }, "./layout-guides": { "types": "./dist/layout-guides.d.ts", + "bun": "./src/layout-guides.ts", "import": "./dist/layout-guides.js", "default": "./dist/layout-guides.js" }, "./types": { "types": "./dist/types.d.ts", + "bun": "./src/types.ts", "import": "./dist/types.js", "default": "./dist/types.js" }, "./primitives": { "types": "./dist/primitives.d.ts", + "bun": "./src/primitives.ts", "import": "./dist/primitives.js", "default": "./dist/primitives.js" }, "./constants": { "types": "./dist/constants.d.ts", + "bun": "./src/constants.ts", "import": "./dist/constants.js", "default": "./dist/constants.js" }, "./hit-test": { "types": "./dist/hit-test.d.ts", + "bun": "./src/hit-test.ts", "import": "./dist/hit-test.js", "default": "./dist/hit-test.js" }, "./preview": { "types": "./dist/preview.d.ts", + "bun": "./src/preview.ts", "import": "./dist/preview.js", "default": "./dist/preview.js" }, "./text-picture": { "types": "./dist/text-picture.d.ts", + "bun": "./src/text-picture.ts", "import": "./dist/text-picture.js", "default": "./dist/text-picture.js" }, "./variables": { "types": "./dist/variables.d.ts", + "bun": "./src/variables.ts", "import": "./dist/variables.js", "default": "./dist/variables.js" }, "./images": { "types": "./dist/images.d.ts", + "bun": "./src/images.ts", "import": "./dist/images.js", "default": "./dist/images.js" }, "./coordinate": { "types": "./dist/coordinate.d.ts", + "bun": "./src/coordinate.ts", "import": "./dist/coordinate.js", "default": "./dist/coordinate.js" }, "./matrix": { "types": "./dist/matrix.d.ts", + "bun": "./src/matrix.ts", "import": "./dist/matrix.js", "default": "./dist/matrix.js" }, "./geometry": { "types": "./dist/geometry.d.ts", + "bun": "./src/geometry.ts", "import": "./dist/geometry.js", "default": "./dist/geometry.js" }, "./resize": { "types": "./dist/resize.d.ts", + "bun": "./src/resize.ts", "import": "./dist/resize.js", "default": "./dist/resize.js" }, "./parse-path": { "types": "./dist/parse-path.d.ts", + "bun": "./src/parse-path.ts", "import": "./dist/parse-path.js", "default": "./dist/parse-path.js" } From 0dd60e2a3924bbc116e020d6854884e1d61607ea Mon Sep 17 00:00:00 2001 From: Danila Poyarkov Date: Mon, 31 Aug 2026 13:33:38 +0300 Subject: [PATCH 5/9] fix(release): strip source conditions from publish manifests --- tools/release-packages/src/publish-dirs.ts | 13 +++++++++++++ tools/release-packages/tests/publish-dirs.test.ts | 4 ++++ 2 files changed, 17 insertions(+) diff --git a/tools/release-packages/src/publish-dirs.ts b/tools/release-packages/src/publish-dirs.ts index 5d2996da8..8bb52422d 100644 --- a/tools/release-packages/src/publish-dirs.ts +++ b/tools/release-packages/src/publish-dirs.ts @@ -62,8 +62,21 @@ async function copyRecursive(from: string, to: string): Promise { await copyFile(from, to) } +function removeUnpublishedConditions(value: unknown): void { + if (!value || typeof value !== 'object') return + if (Array.isArray(value)) { + for (const item of value) removeUnpublishedConditions(item) + return + } + const record = value as Record + delete record.bun + for (const child of Object.values(record)) removeUnpublishedConditions(child) +} + export function publishPackageJSON(source: PackageJSON, coreVersion: string): PackageJSON { const json = structuredClone(source) + removeUnpublishedConditions(json.exports) + removeUnpublishedConditions(json.imports) for (const field of PACKAGE_FIELDS) { const dependencies = json[field] diff --git a/tools/release-packages/tests/publish-dirs.test.ts b/tools/release-packages/tests/publish-dirs.test.ts index ccf314a33..03439facb 100644 --- a/tools/release-packages/tests/publish-dirs.test.ts +++ b/tools/release-packages/tests/publish-dirs.test.ts @@ -21,6 +21,7 @@ async function fixtureRoot() { version: '1.0.0', scripts: { build: 'tsdown' }, dependencies: { '@open-pencil/core': 'workspace:*', zod: '^4.0.0' }, + exports: { '.': { bun: './src/index.ts', import: './dist/index.js' } }, devDependencies: { typescript: '^5.0.0' }, publishConfig: { access: 'public', main: './dist/index.js', types: './dist/index.d.ts' } }, @@ -38,6 +39,7 @@ describe('publishPackageJSON', () => { name: '@open-pencil/example', scripts: { build: 'tsdown' }, dependencies: { '@open-pencil/core': 'workspace:*', zod: '^4.0.0' }, + exports: { '.': { bun: './src/index.ts', import: './dist/index.js' } }, devDependencies: { typescript: '^5.0.0' }, publishConfig: { access: 'public', main: './dist/index.js' } }, @@ -47,6 +49,7 @@ describe('publishPackageJSON', () => { expect(json).toEqual({ name: '@open-pencil/example', dependencies: { '@open-pencil/core': '^0.13.2', zod: '^4.0.0' }, + exports: { '.': { import: './dist/index.js' } }, main: './dist/index.js' }) }) @@ -86,6 +89,7 @@ describe('preparePublishDirectories', () => { name: '@open-pencil/example', version: '1.0.0', dependencies: { '@open-pencil/core': '^0.13.2', zod: '^4.0.0' }, + exports: { '.': { import: './dist/index.js' } }, main: './dist/index.js', types: './dist/index.d.ts' }) From 008dd44eac9df9fcf0fb7849d18a38876f8e9571 Mon Sep 17 00:00:00 2001 From: Danila Poyarkov Date: Mon, 31 Aug 2026 13:40:50 +0300 Subject: [PATCH 6/9] fix(release): type publish export filtering --- tools/release-packages/src/publish-dirs.ts | 24 ++++++++++++++-------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/tools/release-packages/src/publish-dirs.ts b/tools/release-packages/src/publish-dirs.ts index 8bb52422d..2777f88cc 100644 --- a/tools/release-packages/src/publish-dirs.ts +++ b/tools/release-packages/src/publish-dirs.ts @@ -62,19 +62,25 @@ async function copyRecursive(from: string, to: string): Promise { await copyFile(from, to) } -function removeUnpublishedConditions(value: unknown): void { - if (!value || typeof value !== 'object') return - if (Array.isArray(value)) { - for (const item of value) removeUnpublishedConditions(item) - return +interface PackageExports { + [key: string]: PackageExports | string | undefined +} + +interface PublishPackageJSON extends Record { + exports?: PackageExports + imports?: PackageExports +} + +function removeUnpublishedConditions(value: PackageExports | undefined): void { + if (!value) return + delete value.bun + for (const child of Object.values(value)) { + if (typeof child === 'object' && child) removeUnpublishedConditions(child) } - const record = value as Record - delete record.bun - for (const child of Object.values(record)) removeUnpublishedConditions(child) } export function publishPackageJSON(source: PackageJSON, coreVersion: string): PackageJSON { - const json = structuredClone(source) + const json = structuredClone(source) as PublishPackageJSON removeUnpublishedConditions(json.exports) removeUnpublishedConditions(json.imports) From a7e5abd4ab629e5bb024a755e7e7e5eda2ec81a3 Mon Sep 17 00:00:00 2001 From: Danila Poyarkov Date: Mon, 31 Aug 2026 13:59:54 +0300 Subject: [PATCH 7/9] fix(release): type package export manifests --- tools/release-packages/src/publish-dirs.ts | 8 ++++++-- tools/release-packages/src/tarballs.ts | 10 ++++++++-- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/tools/release-packages/src/publish-dirs.ts b/tools/release-packages/src/publish-dirs.ts index 2777f88cc..e7e97b26f 100644 --- a/tools/release-packages/src/publish-dirs.ts +++ b/tools/release-packages/src/publish-dirs.ts @@ -66,16 +66,20 @@ interface PackageExports { [key: string]: PackageExports | string | undefined } -interface PublishPackageJSON extends Record { +interface PublishPackageJSON extends PackageJSON { exports?: PackageExports imports?: PackageExports } +function isPackageExports(value: unknown): value is PackageExports { + return typeof value === 'object' && value !== null && !Array.isArray(value) +} + function removeUnpublishedConditions(value: PackageExports | undefined): void { if (!value) return delete value.bun for (const child of Object.values(value)) { - if (typeof child === 'object' && child) removeUnpublishedConditions(child) + if (isPackageExports(child)) removeUnpublishedConditions(child) } } diff --git a/tools/release-packages/src/tarballs.ts b/tools/release-packages/src/tarballs.ts index cfcca7ab1..2c8d2db44 100644 --- a/tools/release-packages/src/tarballs.ts +++ b/tools/release-packages/src/tarballs.ts @@ -5,8 +5,14 @@ import { promisify } from 'node:util' const execFileAsync = promisify(execFile) +type PackageExports = { + [key: string]: PackageExports | string | null | undefined +} + type PackageJSON = { bin?: Record | string + exports?: PackageExports + imports?: PackageExports name: string } @@ -22,7 +28,7 @@ function packageExportTargets(value: unknown): string[] { return Object.values(value).flatMap(packageExportTargets) } -export function packageExportTargetPaths(packageJSON: { exports?: unknown }): string[] { +export function packageExportTargetPaths(packageJSON: Pick): string[] { return packageExportTargets(packageJSON.exports) } @@ -52,7 +58,7 @@ export async function validateTarballBinTargets(tarballPath: string): Promise { const entries = await tarballEntries(tarballPath) - const packageJSON = (await tarballPackageJSON(tarballPath)) as PackageJSON & { exports?: unknown } + const packageJSON = await tarballPackageJSON(tarballPath) for (const target of packageExportTargetPaths(packageJSON)) { if (!target.startsWith('./')) continue From b7136eea15d1bf4abdc36f609e1f084887c3facc Mon Sep 17 00:00:00 2001 From: Danila Poyarkov Date: Mon, 31 Aug 2026 14:36:08 +0300 Subject: [PATCH 8/9] fix(release): validate wildcard export targets --- tools/release-packages/src/tarballs.ts | 21 +++++++++++++++---- tools/release-packages/tests/tarballs.test.ts | 6 ++++++ 2 files changed, 23 insertions(+), 4 deletions(-) diff --git a/tools/release-packages/src/tarballs.ts b/tools/release-packages/src/tarballs.ts index 2c8d2db44..381843308 100644 --- a/tools/release-packages/src/tarballs.ts +++ b/tools/release-packages/src/tarballs.ts @@ -12,7 +12,6 @@ type PackageExports = { type PackageJSON = { bin?: Record | string exports?: PackageExports - imports?: PackageExports name: string } @@ -56,15 +55,29 @@ export async function validateTarballBinTargets(tarballPath: string): Promise { const entries = await tarballEntries(tarballPath) const packageJSON = await tarballPackageJSON(tarballPath) for (const target of packageExportTargetPaths(packageJSON)) { if (!target.startsWith('./')) continue - const entry = `package/${target.slice(2)}` - if (!entries.has(entry)) { - throw new Error(`${tarballPath}: export target missing from tarball: ${entry}`) + const relativeTarget = target.slice(2) + let matchingEntries: string[] + if (relativeTarget.includes('*')) { + const pattern = exportTargetPattern(relativeTarget) + matchingEntries = [...entries].filter((entry) => pattern.test(entry.slice('package/'.length))) + } else { + const exactEntry = `package/${relativeTarget}` + matchingEntries = entries.has(exactEntry) ? [exactEntry] : [] + } + if (matchingEntries.length === 0) { + throw new Error( + `${tarballPath}: export target missing from tarball: package/${relativeTarget}` + ) } } } diff --git a/tools/release-packages/tests/tarballs.test.ts b/tools/release-packages/tests/tarballs.test.ts index 547f1504c..cdd0ad4e5 100644 --- a/tools/release-packages/tests/tarballs.test.ts +++ b/tools/release-packages/tests/tarballs.test.ts @@ -19,6 +19,12 @@ describe('packageBinTargets', () => { }) describe('package export targets', () => { + test('collects wildcard targets from conditional exports', () => { + expect( + packageExportTargetPaths({ exports: { './feature/*': { import: './dist/*.js' } } }) + ).toEqual(['./dist/*.js']) + }) + test('collects targets from conditional exports', () => { expect( packageExportTargetPaths({ From cf56b4927880c6b76ad08ce01e9cdddf5f896361 Mon Sep 17 00:00:00 2001 From: Danila Poyarkov Date: Mon, 31 Aug 2026 14:50:32 +0300 Subject: [PATCH 9/9] fix(release): match nested wildcard exports --- tools/release-packages/src/tarballs.ts | 2 +- tools/release-packages/tests/tarballs.test.ts | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/tools/release-packages/src/tarballs.ts b/tools/release-packages/src/tarballs.ts index 381843308..de9d29f2e 100644 --- a/tools/release-packages/src/tarballs.ts +++ b/tools/release-packages/src/tarballs.ts @@ -57,7 +57,7 @@ export async function validateTarballBinTargets(tarballPath: string): Promise { const entries = await tarballEntries(tarballPath) diff --git a/tools/release-packages/tests/tarballs.test.ts b/tools/release-packages/tests/tarballs.test.ts index cdd0ad4e5..1a68d3d1a 100644 --- a/tools/release-packages/tests/tarballs.test.ts +++ b/tools/release-packages/tests/tarballs.test.ts @@ -25,6 +25,12 @@ describe('package export targets', () => { ).toEqual(['./dist/*.js']) }) + test('collects nested wildcard targets from conditional exports', () => { + expect( + packageExportTargetPaths({ exports: { './feature/*': { import: './dist/*.js' } } }) + ).toEqual(['./dist/*.js']) + }) + test('collects targets from conditional exports', () => { expect( packageExportTargetPaths({