Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 0 additions & 18 deletions .changeset/type-hydrate-layers-generic.md

This file was deleted.

8 changes: 8 additions & 0 deletions apps/docs/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,13 @@
# docs

## 0.0.31

### Patch Changes

- Updated dependencies [2b57548]
- @effex/dom@1.4.7
- @effex/router@1.3.8

## 0.0.30

### Patch Changes
Expand Down
2 changes: 1 addition & 1 deletion apps/docs/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "docs",
"version": "0.0.30",
"version": "0.0.31",
"private": true,
"type": "module",
"scripts": {
Expand Down
17 changes: 17 additions & 0 deletions packages/create-effex/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,22 @@
# create-effex

## 1.1.3

### Patch Changes

- 2b57548: fix(hydrate): make element requirements provably match `options.layers`

`hydrate`'s element parameter was locked to `Element<A, never, RendererContext | ControlCtx | SuspenseBoundaryCtx>`, so any element that also required a user-provided service (`NavigationContext`, `RouteDataProvider`, etc.) had to be cast — `as never` or `as unknown as Element<HTMLElement>` — even though `options.layers` was providing exactly those services at runtime.

`HydrateOptions` and `hydrate` are now generic over the layer type. The layer's provided services flow through `Layer.Layer.Success<L>` into the element's allowed `R`, so:
- Passing an element that needs a service without providing a layer for it is a type error.
- Providing a layer that only covers some of the element's requirements is a type error.
- `hydrate(App(), root, { layers: Platform.makeClientLayer(router) })` typechecks with no casts when the layer fully covers what `App()` needs.

`NoInfer` on the extracted layer type keeps TypeScript from inferring `L` from the element's requirements — inference flows one way, from `options.layers` into the element, so forgetting a service is a compile-time error rather than a silent runtime failure.

Removed the now-obsolete casts from `create-effex`'s SSG and SSR templates, `apps/docs`, and the hydrate regression test.

## 1.1.2

### Patch Changes
Expand Down
2 changes: 1 addition & 1 deletion packages/create-effex/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "create-effex",
"version": "1.1.2",
"version": "1.1.3",
"description": "Create a new Effex application",
"type": "module",
"license": "MIT",
Expand Down
17 changes: 17 additions & 0 deletions packages/dom/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,22 @@
# @effex/dom

## 1.4.7

### Patch Changes

- 2b57548: fix(hydrate): make element requirements provably match `options.layers`

`hydrate`'s element parameter was locked to `Element<A, never, RendererContext | ControlCtx | SuspenseBoundaryCtx>`, so any element that also required a user-provided service (`NavigationContext`, `RouteDataProvider`, etc.) had to be cast — `as never` or `as unknown as Element<HTMLElement>` — even though `options.layers` was providing exactly those services at runtime.

`HydrateOptions` and `hydrate` are now generic over the layer type. The layer's provided services flow through `Layer.Layer.Success<L>` into the element's allowed `R`, so:
- Passing an element that needs a service without providing a layer for it is a type error.
- Providing a layer that only covers some of the element's requirements is a type error.
- `hydrate(App(), root, { layers: Platform.makeClientLayer(router) })` typechecks with no casts when the layer fully covers what `App()` needs.

`NoInfer` on the extracted layer type keeps TypeScript from inferring `L` from the element's requirements — inference flows one way, from `options.layers` into the element, so forgetting a service is a compile-time error rather than a silent runtime failure.

Removed the now-obsolete casts from `create-effex`'s SSG and SSR templates, `apps/docs`, and the hydrate regression test.

## 1.4.6

### Patch Changes
Expand Down
2 changes: 1 addition & 1 deletion packages/dom/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@effex/dom",
"version": "1.4.6",
"version": "1.4.7",
"description": "DOM rendering for Effex - a reactive UI framework built on Effect.ts",
"type": "module",
"license": "MIT",
Expand Down
7 changes: 7 additions & 0 deletions packages/router/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,12 @@
# @effex/router

## 1.3.8

### Patch Changes

- Updated dependencies [2b57548]
- @effex/dom@1.4.7

## 1.3.7

### Patch Changes
Expand Down
2 changes: 1 addition & 1 deletion packages/router/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@effex/router",
"version": "1.3.7",
"version": "1.3.8",
"description": "Router for Effex applications",
"type": "module",
"license": "MIT",
Expand Down
Loading