@shivaedev/react 0.0.0-stage → 0.18.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (154) hide show
  1. package/CHANGELOG.md +294 -0
  2. package/LICENSE +21 -0
  3. package/README.md +845 -2
  4. package/dist/actionTrace.d.ts +3 -0
  5. package/dist/actionTrace.d.ts.map +1 -0
  6. package/dist/actionTrace.js +5 -0
  7. package/dist/actionTrace.js.map +1 -0
  8. package/dist/client/QueryView.d.ts +10 -0
  9. package/dist/client/QueryView.d.ts.map +1 -0
  10. package/dist/client/QueryView.js +13 -0
  11. package/dist/client/QueryView.js.map +1 -0
  12. package/dist/client/actionCompletion.d.ts +12 -0
  13. package/dist/client/actionCompletion.d.ts.map +1 -0
  14. package/dist/client/actionCompletion.js +68 -0
  15. package/dist/client/actionCompletion.js.map +1 -0
  16. package/dist/client/authAction.d.ts +15 -0
  17. package/dist/client/authAction.d.ts.map +1 -0
  18. package/dist/client/authAction.js +11 -0
  19. package/dist/client/authAction.js.map +1 -0
  20. package/dist/client/create.d.ts +21 -0
  21. package/dist/client/create.d.ts.map +1 -0
  22. package/dist/client/create.js +35 -0
  23. package/dist/client/create.js.map +1 -0
  24. package/dist/client/editor.d.ts +33 -0
  25. package/dist/client/editor.d.ts.map +1 -0
  26. package/dist/client/editor.js +50 -0
  27. package/dist/client/editor.js.map +1 -0
  28. package/dist/client/mountLive.d.ts +4 -0
  29. package/dist/client/mountLive.d.ts.map +1 -0
  30. package/dist/client/mountLive.js +46 -0
  31. package/dist/client/mountLive.js.map +1 -0
  32. package/dist/client/pendingCommand.d.ts +13 -0
  33. package/dist/client/pendingCommand.d.ts.map +1 -0
  34. package/dist/client/pendingCommand.js +30 -0
  35. package/dist/client/pendingCommand.js.map +1 -0
  36. package/dist/client/resultState.d.ts +32 -0
  37. package/dist/client/resultState.d.ts.map +1 -0
  38. package/dist/client/resultState.js +62 -0
  39. package/dist/client/resultState.js.map +1 -0
  40. package/dist/client/saveState.d.ts +11 -0
  41. package/dist/client/saveState.d.ts.map +1 -0
  42. package/dist/client/saveState.js +37 -0
  43. package/dist/client/saveState.js.map +1 -0
  44. package/dist/client/sessionBoundary.d.ts +15 -0
  45. package/dist/client/sessionBoundary.d.ts.map +1 -0
  46. package/dist/client/sessionBoundary.js +70 -0
  47. package/dist/client/sessionBoundary.js.map +1 -0
  48. package/dist/client/testing.d.ts +28 -0
  49. package/dist/client/testing.d.ts.map +1 -0
  50. package/dist/client/testing.js +108 -0
  51. package/dist/client/testing.js.map +1 -0
  52. package/dist/client/useDraftOwner.d.ts +3 -0
  53. package/dist/client/useDraftOwner.d.ts.map +1 -0
  54. package/dist/client/useDraftOwner.js +36 -0
  55. package/dist/client/useDraftOwner.js.map +1 -0
  56. package/dist/client/useLoaderQuery.d.ts +8 -0
  57. package/dist/client/useLoaderQuery.d.ts.map +1 -0
  58. package/dist/client/useLoaderQuery.js +10 -0
  59. package/dist/client/useLoaderQuery.js.map +1 -0
  60. package/dist/fieldRejection.d.ts +25 -0
  61. package/dist/fieldRejection.d.ts.map +1 -0
  62. package/dist/fieldRejection.js +21 -0
  63. package/dist/fieldRejection.js.map +1 -0
  64. package/dist/internal/NoticeContext.d.ts +7 -0
  65. package/dist/internal/NoticeContext.d.ts.map +1 -0
  66. package/dist/internal/NoticeContext.js +3 -0
  67. package/dist/internal/NoticeContext.js.map +1 -0
  68. package/dist/internal/loadedQuery.d.ts +16 -0
  69. package/dist/internal/loadedQuery.d.ts.map +1 -0
  70. package/dist/internal/loadedQuery.js +11 -0
  71. package/dist/internal/loadedQuery.js.map +1 -0
  72. package/dist/internal/noticeEntry.d.ts +21 -0
  73. package/dist/internal/noticeEntry.d.ts.map +1 -0
  74. package/dist/internal/noticeEntry.js +45 -0
  75. package/dist/internal/noticeEntry.js.map +1 -0
  76. package/dist/internal/noticeStore.d.ts +12 -0
  77. package/dist/internal/noticeStore.d.ts.map +1 -0
  78. package/dist/internal/noticeStore.js +37 -0
  79. package/dist/internal/noticeStore.js.map +1 -0
  80. package/dist/internal/queryHandoff.d.ts +9 -0
  81. package/dist/internal/queryHandoff.d.ts.map +1 -0
  82. package/dist/internal/queryHandoff.js +50 -0
  83. package/dist/internal/queryHandoff.js.map +1 -0
  84. package/dist/internal/sessionRecheck.d.ts +4 -0
  85. package/dist/internal/sessionRecheck.d.ts.map +1 -0
  86. package/dist/internal/sessionRecheck.js +14 -0
  87. package/dist/internal/sessionRecheck.js.map +1 -0
  88. package/dist/internal/useLoaderHandoff.d.ts +4 -0
  89. package/dist/internal/useLoaderHandoff.d.ts.map +1 -0
  90. package/dist/internal/useLoaderHandoff.js +18 -0
  91. package/dist/internal/useLoaderHandoff.js.map +1 -0
  92. package/dist/internal/useNoticePublisher.d.ts +4 -0
  93. package/dist/internal/useNoticePublisher.d.ts.map +1 -0
  94. package/dist/internal/useNoticePublisher.js +8 -0
  95. package/dist/internal/useNoticePublisher.js.map +1 -0
  96. package/dist/internal/useQueryNotice.d.ts +8 -0
  97. package/dist/internal/useQueryNotice.d.ts.map +1 -0
  98. package/dist/internal/useQueryNotice.js +26 -0
  99. package/dist/internal/useQueryNotice.js.map +1 -0
  100. package/dist/internal/useSubmissionCallbacks.d.ts +11 -0
  101. package/dist/internal/useSubmissionCallbacks.d.ts.map +1 -0
  102. package/dist/internal/useSubmissionCallbacks.js +45 -0
  103. package/dist/internal/useSubmissionCallbacks.js.map +1 -0
  104. package/dist/loadQuery.d.ts +6 -0
  105. package/dist/loadQuery.d.ts.map +1 -0
  106. package/dist/loadQuery.js +29 -0
  107. package/dist/loadQuery.js.map +1 -0
  108. package/dist/notices.d.ts +32 -0
  109. package/dist/notices.d.ts.map +1 -0
  110. package/dist/notices.js +34 -0
  111. package/dist/notices.js.map +1 -0
  112. package/dist/queryRoute.d.ts +20 -0
  113. package/dist/queryRoute.d.ts.map +1 -0
  114. package/dist/queryRoute.js +20 -0
  115. package/dist/queryRoute.js.map +1 -0
  116. package/dist/resumeSignal.d.ts +6 -0
  117. package/dist/resumeSignal.d.ts.map +1 -0
  118. package/dist/resumeSignal.js +5 -0
  119. package/dist/resumeSignal.js.map +1 -0
  120. package/dist/submission.d.ts +19 -0
  121. package/dist/submission.d.ts.map +1 -0
  122. package/dist/submission.js +19 -0
  123. package/dist/submission.js.map +1 -0
  124. package/package.json +107 -3
  125. package/src/actionTrace.ts +5 -0
  126. package/src/client/QueryView.ts +27 -0
  127. package/src/client/actionCompletion.ts +82 -0
  128. package/src/client/authAction.ts +22 -0
  129. package/src/client/create.ts +55 -0
  130. package/src/client/editor.ts +89 -0
  131. package/src/client/mountLive.ts +57 -0
  132. package/src/client/pendingCommand.ts +42 -0
  133. package/src/client/resultState.ts +102 -0
  134. package/src/client/saveState.ts +54 -0
  135. package/src/client/sessionBoundary.ts +107 -0
  136. package/src/client/testing.ts +142 -0
  137. package/src/client/useDraftOwner.ts +42 -0
  138. package/src/client/useLoaderQuery.ts +16 -0
  139. package/src/fieldRejection.ts +51 -0
  140. package/src/internal/NoticeContext.ts +4 -0
  141. package/src/internal/loadedQuery.ts +18 -0
  142. package/src/internal/noticeEntry.ts +65 -0
  143. package/src/internal/noticeStore.ts +46 -0
  144. package/src/internal/queryHandoff.ts +60 -0
  145. package/src/internal/sessionRecheck.ts +17 -0
  146. package/src/internal/useLoaderHandoff.ts +20 -0
  147. package/src/internal/useNoticePublisher.ts +10 -0
  148. package/src/internal/useQueryNotice.ts +32 -0
  149. package/src/internal/useSubmissionCallbacks.ts +57 -0
  150. package/src/loadQuery.ts +34 -0
  151. package/src/notices.ts +65 -0
  152. package/src/queryRoute.ts +30 -0
  153. package/src/resumeSignal.ts +13 -0
  154. package/src/submission.ts +39 -0
package/CHANGELOG.md ADDED
@@ -0,0 +1,294 @@
1
+ # Changelog
2
+
3
+ ## 0.18.1 - 2026-10-26
4
+
5
+ ### Changed
6
+
7
+ - Release with updated workspace dependencies.
8
+
9
+ ## 0.18.0 - 2026-10-25
10
+
11
+ ### Added
12
+
13
+ - Pass the session-owned native registry as the second argument to `SessionBoundary.connect`, allowing session-scoped contracts to bind before screens render. Session replacement and sign-out release their private tracking, live registrations and pending refreshes; existing one-argument callbacks continue to work.
14
+
15
+ ## 0.17.0 - 2026-10-25
16
+
17
+ ### Added
18
+
19
+ - `bind` accepts an optional `resume: ResumeSource` to reopen and reconcile automatic live subscriptions from application lifecycle events alongside the browser defaults. Registry disposal unsubscribes the source.
20
+ - React automatic session subscriptions use the same source supplied to `bind` in `SessionBoundary.connect`, so native shells can reconcile live query screens from their own lifecycle events.
21
+
22
+ ## 0.16.0 - 2026-10-25
23
+
24
+ ### Added
25
+
26
+ - Add an optional session notice host with application-rendered controls, dismissal, expiry and native action status. Queries, command Effects and form submissions can supply notice descriptors; Undo runs an application Effect with its own payload and expected version, keeps conflicts on that action, and releases entries and pending actions when their notice or session ends.
27
+
28
+ ## 0.15.0 - 2026-10-25
29
+
30
+ ### Added
31
+
32
+ - Add stateless `QueryView` renderers for loading, successful content and typed query rejections with native refresh. Failed refreshes keep successful content mounted, while defects reach the application's error boundary.
33
+ - `@shivaedev/effect-test` readiness retries accept `timeout` and `wait` options. A timeout preserves the final typed failure; a custom wait lets adapters settle observable work through the same retry engine.
34
+
35
+ ### Breaking
36
+
37
+ - `@shivaedev/effect-react/client/testing.ts` now returns an Effect from `eventually(assert)`. Replace `yield* Effect.promise(() => eventually(assert))` with `yield* eventually(assert)` in stories and Effect tests, or replace `await eventually(assert)` with `await Effect.runPromise(eventually(assert))` in async tests. Assertions wait inside React `act` in live time, including under TestClock. Timeout errors include elapsed milliseconds and the last assertion message, with the assertion error as their `cause`.
38
+
39
+ ## 0.14.0 - 2026-10-25
40
+
41
+ ### Added
42
+
43
+ - `useAction(runtime, run, options?)` runs optional `onSuccess(value, input)` and `onFailure(error, input)` callbacks inside each command invocation using the latest committed callbacks. Native atoms retain execution, interruption and aggregate state; `concurrent: true` allows overlapping commands. Bound commands keep their own invalidation without waiting for refetches, Unauthorized failures request one session recheck per invocation, and session replacement discards outgoing feedback. The existing atom overload remains available.
44
+
45
+ ## 0.13.0 - 2026-10-25
46
+
47
+ ### Added
48
+
49
+ - `queryRoute` supplies TanStack Router query loaders and search dependencies, mapping `NotFound` rejections to the route's not-found component.
50
+
51
+ ### Changed
52
+
53
+ - Generated starter notes routes use query loaders and show a not-found screen for missing notes, with a link back to the list.
54
+
55
+ ## 0.12.5 - 2026-10-25
56
+
57
+ ### Changed
58
+
59
+ - Release with updated workspace dependencies.
60
+
61
+ ## 0.12.4 - 2026-10-25
62
+
63
+ ### Changed
64
+
65
+ - Release with updated workspace dependencies.
66
+
67
+ ## 0.12.3 - 2026-10-24
68
+
69
+ ### Changed
70
+
71
+ - Require Effect and its companion packages at exactly 4.0.5. Generated applications use the same versions.
72
+
73
+ ### Fixed
74
+
75
+ - Call the latest create, save and field-rejection callbacks across React renders while preserving the draft. Replace forms when their schema or runtime identity changes, and document which options are captured for a form lifetime.
76
+
77
+ ## 0.12.2 - 2026-10-24
78
+
79
+ ### Changed
80
+
81
+ - Align published dependency and peer pins and the generated starter with React and React DOM 19.3.1, TanStack Router 1.170.45, Better Auth 1.7.10, happy-dom 21.0.3 and Vitest 5.0.5. The starter also uses pg-boss dashboard 1.12.1.
82
+
83
+ ## 0.12.1 - 2026-10-21
84
+
85
+ ### Changed
86
+
87
+ - Release with updated workspace dependencies.
88
+
89
+ ## 0.12.0 - 2026-10-19
90
+
91
+ ### Added
92
+
93
+ - Choose a live changed-hint coalescing window per bound query with React's `useQuery(atom, { coalesceWindow })`, keeping the session window as the default. Queries over one connection refetch on their own schedules; changing the option does not reconnect or refetch queries.
94
+ - Configure a bound query's window through its registry with `queryCoalesceWindow(query)` from `@shivaedev/effect-contract/queryCoalesceWindow.ts`.
95
+
96
+ ## 0.11.1 - 2026-10-19
97
+
98
+ ### Fixed
99
+
100
+ - Recheck the session when an automatic live connection fails with `Unauthorized`, so `SessionBoundary` shows its signed-out content without another query read, stops reconnecting while signed out and restores live updates after sign-in.
101
+
102
+ ## 0.11.0 - 2026-10-19
103
+
104
+ ### Added
105
+
106
+ - Coalesce live changed hints over a default 20 ms window, with one follow-up read when hints arrive during an in-flight refetch. Configure `live()` with `coalesceWindow`, or set its returned `coalesceWindow` atom; zero retains immediate invalidation. Reconciliation stays immediate.
107
+ - Configure automatic live connections per React `SessionBoundary` with `liveCoalesceWindow`.
108
+
109
+ ## 0.10.2 - 2026-10-19
110
+
111
+ ### Changed
112
+
113
+ - Release with updated workspace dependencies.
114
+
115
+ ## 0.10.1 - 2026-10-19
116
+
117
+ ### Fixed
118
+
119
+ - Wait for an active query loader before a newly mounted `useLoaderQuery` screen renders, so links to cached routes after invalidation show the changed data on their first render. Already mounted screens keep their data during refreshes.
120
+
121
+ ## 0.10.0 - 2026-10-19
122
+
123
+ ### Added
124
+
125
+ - effect-react exports `actionTrace(effect, name?)` from `actionTrace.ts` to group an action's RPC Effects under a fresh trace. Editor saves and create submissions automatically group their save Effects in a `ui.submit` trace. Native HTTP RPC clients send W3C trace context through the host to SQL and job enqueueing; pg-boss worker attempts retain their separate, linked traces.
126
+
127
+ ### Fixed
128
+
129
+ - Platform appHost preserves incoming W3C `traceparent` context for RPC handling even without an installed tracer or exporter. Request ids stay annotated on the RPC span.
130
+
131
+ ## 0.9.0 - 2026-10-19
132
+
133
+ ### Added
134
+
135
+ - `captureReactWarnings` in `client/testing.ts` acquires a scoped, silent capture for story kits. Its `ReactWarnings` handle reads console calls and unexpected caught React errors as a `ReactWarningsReadout`, excludes declared caught errors, and restores `console.error` on scope closure, including failed stories. `expectNoReactWarnings` uses the same capture mechanism.
136
+
137
+ ## 0.8.0 - 2026-10-18
138
+
139
+ ### Added
140
+
141
+ - Session boundaries mount automatic live connections on bound contract APIs returned by `connect`, either directly or as properties such as `client.api`. Connections follow the session registry lifetime and query keys. `client/mountLive.ts` also exports `mountLive(registry, client)`, returning the release function for a custom owner.
142
+
143
+ ### Breaking
144
+
145
+ - `SessionBoundary` now connects live queries automatically when its client contains a contract binding. Remove application `live()` calls and connection mounts; serve the contract through a Platform database host with NDJSON serialization.
146
+
147
+ ## 0.7.0 - 2026-10-18
148
+
149
+ ### Added
150
+
151
+ - Pass React's `RootOptions` to test `render(node, options)`, including `onCaughtError`, `onUncaughtError` and `onRecoverableError`.
152
+ - Declare expected boundary errors with `expectNoReactWarnings().expectCaughtError(predicate)`, using its returned `onCaughtError` handler in `render`. Unexpected caught errors, console errors, React warnings and missing expected errors still fail the guard.
153
+ - `useLoaderQuery(atom, routeLoaderData)` and `LoadedQueryState` expose loaded query data directly and retain the last value during refetches, without an Initial result or per-screen loading branch.
154
+ - `useEditor({ ...config, loaded: routeLoaderData })` and `LoadedEditor` provide a defined form and direct query data for loader-backed editors.
155
+ - `usePendingCommand`, `PendingCommandOptions` and `PendingCommandState` from `client/pendingCommand.ts` expose a command's wanted display value while it runs and its watched queries refetch, then adopt the server value. Typed command failures revert the display and remain in the native action result.
156
+ - Bind independently controlled list rows to separate native action atoms with `Atom.family`, so a typed rejection on one row leaves another row's pending display intact.
157
+
158
+ ### Fixed
159
+
160
+ - Keep loader queries mounted until a component subscribes or their route owner aborts, so delayed route mounts share the loader's execution. Give SessionBoundary registries the same idle window as atom-react's default registry; unread results are released when their route owner ends.
161
+
162
+ ## 0.6.0 - 2026-10-18
163
+
164
+ ### Added
165
+
166
+ - `authAction` in `client/authAction.ts` binds Better Auth client promises to native action atoms for `useAction`, with pending state and typed returned failures. Rejected promises fail with the exported `AuthActionUnavailable` error; `AuthActionResult` describes the structural client result.
167
+
168
+ ## 0.5.1 - 2026-10-18
169
+
170
+ ### Fixed
171
+
172
+ - Route loaders and `loadQuery` recheck the owning `SessionBoundary` session once when a query fails with `Unauthorized`, so sign-in redirects can see an ended session.
173
+
174
+ ## 0.5.0 - 2026-10-18
175
+
176
+ ### Breaking
177
+
178
+ - Modules are named in camelCase: `field-rejection.ts` becomes `fieldRejection.ts`, and `resume-signal.ts` becomes `resumeSignal.ts`.
179
+ - Every module's import path is now its path under `src/`. `router.ts` becomes `loadQuery.ts`; `create.ts`, `editor.ts` and `testing.ts` move under `client/`; `result-state.ts`, `save-state.ts` and `session-boundary.ts` become `client/resultState.ts`, `client/saveState.ts` and `client/sessionBoundary.ts`.
180
+
181
+ ## 0.4.1 - 2026-10-17
182
+
183
+ ### Fixed
184
+
185
+ - Align the published contract dependency with the current framework release.
186
+
187
+ ## 0.4.0 - 2026-10-13
188
+
189
+ ### Breaking
190
+
191
+ - Requires stable Effect 4.0.4 in place of 4.0.0-rc.112. Effect 4.0.4 moves the former `effect/unstable/*` modules to `effect/*` and renames constructors such as `Config.string` to `Config.String`. Install `@effect/atom-react` 4.0.4 alongside it, and Vitest 5 for the test helpers.
192
+
193
+ ## 0.3.0 - 2026-10-13
194
+
195
+ ### Added
196
+
197
+ - `useEditor` and `useCreate` accept opt-in `persistedDraft` settings with application keys, storage and bounds. They inherit `SessionBoundary` ownership, which drops tracked drafts when the session changes or ends, including drafts from unmounted screens.
198
+
199
+ ### Changed
200
+
201
+ - Include `@shivaedev/effect-form` as a workspace dependency for shared draft ownership at the session boundary.
202
+
203
+ ### Fixed
204
+
205
+ - Reconcile `SessionBoundary` draft ownership when a session replacement commits. A suspended, canceled transition preserves the visible session's draft and future persistence; committed replacements also clear old drafts while Activity is hidden.
206
+
207
+ ## 0.2.2 - 2026-10-12
208
+
209
+ ### Added
210
+
211
+ - Publish `@shivaedev/effect-react/testing.ts` with `render`, `Rendered`, `eventually` and `expectNoReactWarnings` for happy-dom render tests using native atom registries and test RPC layers. `render` exposes its registry, supports rerendering and releases its root, registry and container on unmount. React DOM and Vitest are optional peers needed by the testing entry.
212
+ - Add opt-in `useQuery(atom, { keepPreviousData: true })` to retain the last successful value while a changed query payload loads or fails. Query identity changes still reset displayed data by default, and registry changes clear it even with retention enabled. Native results, typed failures and interruption remain visible.
213
+ - `@shivaedev/effect-react/router.ts` exports `loadQuery(registry, atom, loaderContext)` for TanStack Router loaders. It reads contract query atoms in the application's shared registry, throws typed failures as their original tagged errors, and releases an aborted loader's subscription. TanStack Router is an optional peer.
214
+
215
+ ### Changed
216
+
217
+ - Document the package's purpose, native atom mental model, query/action usage, session ownership and editor/create workflows; publish the north star and package roadmap with the README.
218
+ - Build package JavaScript, declarations and source maps with TypeScript 7.
219
+ - The reference PostgreSQL order handlers use the shared server live helper and support composing PostgreSQL change delivery. The reference fixture proves commits from two HTTP server processes and a pg-boss worker, rollback silence, and live resync after listener loss.
220
+
221
+ ### Fixed
222
+
223
+ - Keep the last successful query value during same-identity refreshes, including live invalidation, and after failed refreshes even when the native result has no retained success. `refreshing` reports pending work alongside displayed data.
224
+
225
+ ## 0.2.1 - 2026-10-05
226
+
227
+ ### Changed
228
+
229
+ - Delegate the existing `resume-signal.ts` entry to the shared browser-safe implementation in effect-contract. Install that package as a runtime dependency so existing imports keep working; signal types and behavior remain compatible. Work Board can import the shared native implementation without React peers.
230
+
231
+ ## 0.2.0 - 2026-10-04
232
+
233
+ ### Changed
234
+
235
+ - Breaking: no root entry and no module that re-exports another. `exports` maps one `"./*.ts"` pattern to every module (`src` under the `source` condition, `dist` otherwise), so you import the module that defines a name, and a bundler sees only the modules you use. Where each name now lives:
236
+ - `@shivaedev/effect-react`: `@shivaedev/effect-react/result-state.ts` (`ActionState`, `QueryState`, `ResultState`, `isUnauthorized`, `useAction`, `useQuery`), `@shivaedev/effect-react/resume-signal.ts` (`ResumeOptions`, `ResumeSource`, `ResumeWindow`, `resumeSignal`), `@shivaedev/effect-react/session-boundary.ts` (`SessionBoundaryProps`, `SessionBoundary`, `useSessionRecheck`)
237
+ - `@shivaedev/effect-react/form`: `@shivaedev/effect-react/create.ts` (`Create`, `CreateConfig`, `useCreate`), `@shivaedev/effect-react/editor.ts` (`Editor`, `EditorConfig`, `useEditor`), `@shivaedev/effect-react/field-rejection.ts` (`FieldRejection`, `FieldRejectionMapping`, `RejectField`), `@shivaedev/effect-react/save-state.ts` (`SaveState`)
238
+
239
+ ## 0.1.2 - 2026-10-04
240
+
241
+ ### Changed
242
+
243
+ - Imports that leave their folder go through `#` aliases declared in the `imports` field of `package.json`: `#*.ts` resolves to `src` under the `source` condition and to `dist` otherwise, and `#test/*` names a test file. The published modules and declarations name the package's own files through these aliases.
244
+
245
+ - Consolidate duplicate test cases around observable package behavior.
246
+
247
+ - Validate packed consumers and executable bins through the shared workspace gate.
248
+
249
+ - Replace a JSDoc block with a short reason comment, so the package passes the comment rules of `@shivaedev/quality`.
250
+
251
+ - Build with the `@shivaedev/quality` tsconfig presets, which target ESNext and allow only erasable TypeScript syntax.
252
+
253
+ - Type-check with TypeScript 7 only. TypeScript 6 still builds the package.
254
+
255
+ - Lint and format with the `@shivaedev/quality` Biome preset through `quality lint` at the repository root, which replaces the package's `check` script.
256
+
257
+ - Run tests through the `@shivaedev/quality` Vitest projects, which take a test's environment from its file name. Type tests are named `*.typecheck.test.ts`.
258
+
259
+ - Keep `package.json` in sort-package-json key order, checked by `quality lint`.
260
+
261
+ ## 0.1.1 - 2026-09-26
262
+
263
+ ### Changed
264
+
265
+ - Pin the optional `@shivaedev/effect-form` peer dependency to exactly 0.1.1,
266
+ the version released alongside, instead of `^0.1.0`.
267
+
268
+ ## 0.1.0 - 2026-09-26
269
+
270
+ ### Added
271
+
272
+ - Add `useEditor`: binds a query atom, schema fields and a save Effect. It
273
+ creates the form when data first arrives, remounts it per query atom, merges
274
+ query refreshes and saved results per field, maps tagged
275
+ `{ _tag, field, message }` rejections (such as effect-contract field
276
+ rejections) onto fields by default and requires `rejectField` when a tagged
277
+ rejection's field type names a field the form lacks, exposes other save
278
+ failures and ignores submits while saving.
279
+ - Add `useCreate`: after a successful create it starts a fresh form from the
280
+ initial values, keeping fields edited while the save was in flight.
281
+ - Export `useEditor` and `useCreate` from the `@shivaedev/effect-react/form`
282
+ subpath; `@shivaedev/effect-form` (`^0.1.0`) is an optional peer dependency
283
+ needed only by that subpath.
284
+ - Add `SessionBoundary`: one credential-bound client and atom registry per
285
+ session generation, remounting its subtree and disposing the registry when the
286
+ session changes or ends. A generation hidden by `<Activity>` renders against a
287
+ fresh registry instead of a disposed one.
288
+ - Report `Unauthorized` query/action failures to the boundary's `recheck`
289
+ instead of clearing retained data.
290
+ - Add `resumeSignal`, combining visible `visibilitychange`, visible `online` and
291
+ an injectable native resume source for native `Atom.makeRefreshOnSignal` and
292
+ `Atom.swr`.
293
+ - Add native atom query and action hooks with retained data, refresh state and
294
+ typed action state.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 ShivaeDev
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.