Finalize rename
Lint / lint (push) Successful in 57s

This commit is contained in:
Julien Valverdé
2026-07-26 22:45:01 +02:00
parent 38320b502d
commit a4c3cdf79f
40 changed files with 294 additions and 298 deletions
+8 -9
View File
@@ -26,13 +26,12 @@ A production-quality Vite implementation is likely **1018 engineer-days**, in
## Scope examined
The implementation target is `effect-fc-next` (Effect 4 beta), which is
expected to become `effect-view`. The legacy `effect-fc` package is not
supported by the Vite plugin.
The implementation target is `effect-view` (Effect 4 beta). The legacy
`effect-fc` package is not supported by the Vite plugin.
## How Effect View rendering works today
`Component.make` creates a function-shaped descriptor with a `body` property and `ComponentPrototype`; it does not create the React component that will be mounted. See [`packages/effect-fc-next/src/Component.ts`](packages/effect-fc-next/src/Component.ts), around `make`, `makeUntraced`, and `ComponentImplPrototype`.
`Component.make` creates a function-shaped descriptor with a `body` property and `ComponentPrototype`; it does not create the React component that will be mounted. See [`packages/effect-view/src/Component.ts`](packages/effect-view/src/Component.ts), around `make`, `makeUntraced`, and `ComponentImplPrototype`.
The relevant path is:
@@ -45,7 +44,7 @@ source definition
-> mounted React fiber
```
In `effect-fc-next`, `asFunctionComponent` creates a closure over the descriptor
In `effect-view`, `asFunctionComponent` creates a closure over the descriptor
and Effect context. `.use` retains that synthesized function in `componentRef`
while the relevant Effect service identities remain unchanged, and
`withContext` renders the function returned by `.use`.
@@ -88,7 +87,7 @@ Consequently, edits currently propagate through ordinary Vite HMR invalidation.
The initial feasibility study used the legacy implementation for a focused
jsdom/React identity experiment. Its descriptor-caching result also applies to
`effect-fc-next`, but the legacy package is not an implementation target:
`effect-view`, but the legacy package is not an implementation target:
1. Render an Effect View containing `React.useState(0)`.
2. Increment it to `old:1`.
@@ -145,7 +144,7 @@ It should recognize:
- `Component.makeUntraced(...)`
- class declarations extending either factory result
- definitions followed by Effect `pipe` transformations
- aliased imports from `effect-fc-next`
- aliased imports from `effect-view`
For each definition it should inject development-only metadata containing:
@@ -255,7 +254,7 @@ Exit criterion: editing render text updates without a page reload, and incompati
### Phase 1: Vite MVP (47 additional days)
- Implement binding-aware AST detection for all public construction styles.
- Add stable shell/keyed implementation support to the supported `effect-fc-next` Component implementation.
- Add stable shell/keyed implementation support to the supported `effect-view` Component implementation.
- Cover memoized and async traits.
- Add safe self-accept/fallback behavior.
- Add browser integration tests against the example app.
@@ -295,7 +294,7 @@ Minimum cases:
- Async View and Suspense/error recovery.
- Two materializations of the same View under different Effect contexts.
- Reactive and `nonReactiveTags` service changes.
- TanStack Router code splitting used by the `example-next` application.
- TanStack Router code splitting used by the `example` application.
- Successive edits before the previous refresh finishes.
- Syntax error followed by recovery.
- Production build contains no HMR registry/subscription code.