Skip to content

Commit 3e0f825

Browse files
authored
fix(hub): restore json-render pre-0.7 exports as deprecated aliases (#122)
1 parent fec6e9e commit 3e0f825

8 files changed

Lines changed: 114 additions & 1 deletion

File tree

docs/guide/migration-0.7.md

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ outline: deep
44

55
# Migrating to 0.7
66

7-
0.7's one breaking change moves the `cac` CLI framework out of `devframe`'s bundled dependencies and renames the adapter that wraps it. This page covers the change between 0.6.x and 0.7.
7+
0.7 moves the `cac` CLI framework out of `devframe`'s bundled dependencies (renaming the adapter that wraps it) and moves json-render out of `@devframes/hub` into its own opt-in integration. This page covers the changes between 0.6.x and 0.7.
88

99
## `cac` is now an optional peer dependency
1010

@@ -43,3 +43,35 @@ await createCac(devframe).parse()
4343
`devframe/adapters/cli` still exports `createCli` as a deprecated alias of `createCac` (same for `CreateCliOptions` and `CliHandle`), so existing imports keep compiling — but the underlying `cac` peer dependency still needs installing per above, and the alias will be removed in a future major release. Move call sites over now rather than waiting for that removal.
4444

4545
See [CLI (cac)](/adapters/cac) for the full adapter reference.
46+
47+
## json-render moves out of `@devframes/hub`
48+
49+
The hub is now json-render-agnostic — `defineJsonRenderSpec`, `ctx.createJsonRenderer`, and the `JsonRenderSpec` / `JsonRenderElement` / `JsonRenderer` types move to the opt-in [`@devframes/json-render`](./json-render) integration, which contributes its own `json-render` dock type to the hub's open dock union instead of the hub shipping one.
50+
51+
| 0.6.x (`@devframes/hub`) | 0.7 (`@devframes/json-render`) |
52+
|---|---|
53+
| `defineJsonRenderSpec(spec)` | Pass the spec directly to `createJsonRenderView(ctx, { id, spec })` |
54+
| `JsonRenderSpec` | `DevframeJsonRenderSpec` |
55+
| `ctx.createJsonRenderer(spec)` | `createJsonRenderView(ctx, { id, spec })` (from `@devframes/json-render/node`) |
56+
57+
```ts
58+
// 0.6.x
59+
import { defineJsonRenderSpec } from '@devframes/hub'
60+
61+
const spec = defineJsonRenderSpec({ root: 'panel', elements: { /* ... */ } })
62+
const renderer = ctx.createJsonRenderer(spec)
63+
```
64+
65+
```ts
66+
// 0.7
67+
import { createJsonRenderView } from '@devframes/json-render/node'
68+
69+
const view = createJsonRenderView(ctx, {
70+
id: 'panel',
71+
spec: { root: 'panel', elements: { /* ... */ } },
72+
})
73+
```
74+
75+
`@devframes/hub` still exports `defineJsonRenderSpec` as a deprecated identity function (same for the `JsonRenderSpec` / `JsonRenderElement` / `JsonRenderer` types), so existing imports keep compiling — but it no longer registers anything with the hub on its own. Move call sites over to `createJsonRenderView` now rather than waiting for the alias's removal in a future major release.
76+
77+
See [JSON-Render](./json-render) for the full integration reference.

packages/hub/src/define.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import type { WhenContext, WhenExpression } from 'devframe/utils/when'
22
import type { DevframeHubContext } from './node/context'
33
import type { DevframeServerCommandInput } from './types/commands'
44
import type { DevframeDockUserEntry } from './types/docks'
5+
import type { JsonRenderSpec } from './types/json-render'
56
import { createDefineWrapperWithContext } from 'devframe/rpc'
67

78
export const defineHubRpcFunction = createDefineWrapperWithContext<DevframeHubContext>()
@@ -20,3 +21,14 @@ export function defineDockEntry<
2021
): T {
2122
return entry as unknown as T
2223
}
24+
25+
/**
26+
* @deprecated json-render moved out of the hub into the opt-in
27+
* `@devframes/json-render` integration in 0.7. This identity helper is kept
28+
* so existing imports keep compiling — pass your spec directly to
29+
* `createJsonRenderView` (from `@devframes/json-render/node`) instead. Will
30+
* be removed in a future major release.
31+
*/
32+
export function defineJsonRenderSpec(spec: JsonRenderSpec): JsonRenderSpec {
33+
return spec
34+
}

packages/hub/src/types/docks.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import type { ConnectionMeta, EventEmitter } from 'devframe/types'
2+
import type { JsonRenderer } from './json-render'
23

34
export interface DevframeDocksHost {
45
readonly views: Map<string, DevframeDockUserEntry>
@@ -251,6 +252,20 @@ export interface DevframeViewBuiltin extends DevframeDockEntryBase {
251252
id: string
252253
}
253254

255+
/**
256+
* @deprecated json-render moved out of the hub into the opt-in
257+
* `@devframes/json-render` integration in 0.7, which contributes its own
258+
* `'json-render'` entry (carrying a serializable view ref, not a live
259+
* `JsonRenderer` handle) to {@link DevframeDockEntryRegistry} via declaration
260+
* merging. This type is kept for compatibility but is no longer a member of
261+
* {@link DevframeDockUserEntry} — use `@devframes/json-render/hub` instead.
262+
*/
263+
export interface DevframeViewJsonRender extends DevframeDockEntryBase {
264+
type: 'json-render'
265+
/** JsonRenderer handle created by ctx.createJsonRenderer() */
266+
ui: JsonRenderer
267+
}
268+
254269
/**
255270
* A dock group: a single dock-bar button that collapses every entry whose
256271
* {@link DevframeDockEntryBase.groupId} matches this group's `id`.

packages/hub/src/types/index.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@ export type { CreateHubContextOptions, DevframeHubContext } from '../node/contex
44

55
export * from './commands'
66
export * from './docks'
7+
// Deprecated pre-0.7 json-render types, kept for compatibility — see
8+
// `./json-render` for details on the `@devframes/json-render` replacement.
9+
export * from './json-render'
710
export * from './messages'
811
export * from './settings'
912
export * from './terminals'
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
// Deprecated compatibility shim for the pre-0.7 hub-local json-render types.
2+
//
3+
// 0.7 moved json-render out of the hub into the opt-in `@devframes/json-render`
4+
// integration — use its `DevframeJsonRenderSpec` (from `@devframes/json-render`)
5+
// and `createJsonRenderView` (from `@devframes/json-render/node`) instead. These
6+
// types are kept so existing imports keep compiling; they will be removed in a
7+
// future major release.
8+
9+
/** @deprecated Use `DevframeJsonRenderSpec`'s element shape from `@devframes/json-render` instead. */
10+
export interface JsonRenderElement {
11+
type: string
12+
props?: Record<string, unknown>
13+
children?: string[]
14+
/** json-render event bindings (e.g. `{ press: { action: "my:action" } }`) */
15+
on?: Record<string, unknown>
16+
/** json-render visibility condition */
17+
visible?: unknown
18+
/** json-render repeat binding */
19+
repeat?: unknown
20+
/** Allow additional json-render element fields */
21+
[key: string]: unknown
22+
}
23+
24+
/** @deprecated Use `DevframeJsonRenderSpec` from `@devframes/json-render` instead. */
25+
export interface JsonRenderSpec {
26+
root: string
27+
elements: Record<string, JsonRenderElement>
28+
/** Initial client-side state model for $state/$bindState expressions */
29+
state?: Record<string, unknown>
30+
}
31+
32+
/** @deprecated Use `JsonRenderView` from `@devframes/json-render` instead. */
33+
export interface JsonRenderer {
34+
/** Replace the entire spec */
35+
updateSpec: (spec: JsonRenderSpec) => void | Promise<void>
36+
/** Update json-render state values (shallow merge into spec.state) */
37+
updateState: (state: Record<string, unknown>) => void | Promise<void>
38+
/** Internal: shared state key used by the client to subscribe */
39+
readonly _stateKey: string
40+
}

tests/__snapshots__/tsnapi/@devframes/hub/index.snapshot.d.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ export declare function defineCommand<const W extends string = ''>(_: Omit<Devfr
88
export declare function defineDockEntry<const T extends DevframeDockUserEntry, const W extends string = ''>(_: Omit<T, 'when'> & {
99
when?: WhenExpression<WhenContext, W>;
1010
}): T;
11+
/** @deprecated */
12+
export declare function defineJsonRenderSpec(_: JsonRenderSpec): JsonRenderSpec;
1113
// #endregion
1214

1315
// #region Variables
@@ -77,12 +79,16 @@ export { DevframeViewCustomRender }
7779
export { DevframeViewGroup }
7880
export { DevframeViewHost }
7981
export { DevframeViewIframe }
82+
export { DevframeViewJsonRender }
8083
export { DevframeViewLauncher }
8184
export { DevframeViewLauncherStatus }
8285
export { EntriesToObject }
8386
export { EventEmitter }
8487
export { EventsMap }
8588
export { EventUnsubscribe }
89+
export { JsonRenderElement }
90+
export { JsonRenderer }
91+
export { JsonRenderSpec }
8692
export { PartialWithoutId }
8793
export { RemoteConnectionInfo }
8894
export { RemoteDockOptions }

tests/__snapshots__/tsnapi/@devframes/hub/index.snapshot.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,5 @@
55
export { defineCommand }
66
export { defineDockEntry }
77
export { defineHubRpcFunction }
8+
export { defineJsonRenderSpec }
89
// #endregion

tests/__snapshots__/tsnapi/@devframes/hub/types.snapshot.d.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,12 +64,16 @@ export { DevframeViewCustomRender }
6464
export { DevframeViewGroup }
6565
export { DevframeViewHost }
6666
export { DevframeViewIframe }
67+
export { DevframeViewJsonRender }
6768
export { DevframeViewLauncher }
6869
export { DevframeViewLauncherStatus }
6970
export { EntriesToObject }
7071
export { EventEmitter }
7172
export { EventsMap }
7273
export { EventUnsubscribe }
74+
export { JsonRenderElement }
75+
export { JsonRenderer }
76+
export { JsonRenderSpec }
7377
export { PartialWithoutId }
7478
export { RemoteConnectionInfo }
7579
export { RemoteDockOptions }

0 commit comments

Comments
 (0)