From d94dc12de157556c1f6f66adcc937a6b052e37c2 Mon Sep 17 00:00:00 2001 From: "Anthony Fu (via agent)" Date: Sat, 15 Aug 2026 07:13:24 +0000 Subject: [PATCH] fix(hub-ui): make json-render an optional peer hub-ui's only source-level use of @devframes/json-render is a side-effect import for declaration merging (registering the 'json-render' dock entry type). Dist (runtime and .d.mts) never references json-render, so keeping it a required peer just forces every hub-ui install to auto-install the zod closure it pulls in, even for hosts that never render a json-render dock. Mirror the optional-peer shape @devframes/json-render already uses for its own optional @devframes/hub peer: keep @devframes/json-render in peerDependencies (for the workspace build graph and consumer typing) but mark it optional via peerDependenciesMeta. Hosts that render json-render docks now install @devframes/json-render(-ui) explicitly, which every existing example already does. --- packages/hub-ui/package.json | 5 +++++ packages/hub-ui/src/client/types.ts | 7 ++++++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/packages/hub-ui/package.json b/packages/hub-ui/package.json index 0124839f..051234d3 100644 --- a/packages/hub-ui/package.json +++ b/packages/hub-ui/package.json @@ -45,6 +45,11 @@ "@devframes/json-render": "workspace:*", "devframe": "workspace:*" }, + "peerDependenciesMeta": { + "@devframes/json-render": { + "optional": true + } + }, "devDependencies": { "@antfu/design": "catalog:frontend", "@devframes/hub": "workspace:*", diff --git a/packages/hub-ui/src/client/types.ts b/packages/hub-ui/src/client/types.ts index f30e46eb..07cf8961 100644 --- a/packages/hub-ui/src/client/types.ts +++ b/packages/hub-ui/src/client/types.ts @@ -1,7 +1,12 @@ import type { DevframeViewLauncher } from '@devframes/hub/types' // Importing the hub-mounted json-render integration registers its // `'json-render'` dock entry (a serializable `view` ref, not a live handle) -// on the hub's open dock union via declaration merging. +// on the hub's open dock union via declaration merging. This has to be a +// value import, not `import type`, because TS rejects a type-only +// side-effect import (no bindings to mark as type-only) — but it's still +// fully erased at build time since nothing in dist ever references it, so +// @devframes/json-render staying an *optional* peer below doesn't change +// what ships. import '@devframes/json-render/hub' /**