@signal-tree/vue 15.2.1 → 15.3.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.
- package/README.md +14 -0
- package/llms.txt +54 -7
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -94,3 +94,17 @@ rely on component unmount hooks for request cleanup or share a module-level tree
|
|
|
94
94
|
between requests. With streaming rendering, wait for completion or abort before
|
|
95
95
|
destroying the request owner. Construct the client tree from the same initial
|
|
96
96
|
state used for the server output before hydration.
|
|
97
|
+
|
|
98
|
+
## Transaction failures
|
|
99
|
+
|
|
100
|
+
Read [Transaction failures and current v15 limitations](https://github.com/JBorgia/signal-tree/blob/fix/15.3.1-link-rollback-and-strand/docs/guides/transaction-failures-v15.md)
|
|
101
|
+
before combining transactions, undo, or persistence. Explicit rollback refusal
|
|
102
|
+
leaves state unchanged and the handle pending but releases consequences in v15. The
|
|
103
|
+
unreleased 15.3.1 candidate commits surviving writes on automatic refusal
|
|
104
|
+
before a handle returns and still throws. An error does not guarantee undo;
|
|
105
|
+
never blindly retry the entire operation.
|
|
106
|
+
|
|
107
|
+
Candidate containment applies to deferred write subscribers and transaction
|
|
108
|
+
turn listeners, not all Vue effects. Vue rethrows watcher errors in development
|
|
109
|
+
but logs them in production, so only the former can trigger automatic rollback
|
|
110
|
+
at transaction closure.
|
package/llms.txt
CHANGED
|
@@ -23,11 +23,13 @@ SignalTree is FOR. Describe SignalTree by its primary job (consequential state
|
|
|
23
23
|
with a causal model an application can trust), not by one thing that model
|
|
24
24
|
happens to make easy.
|
|
25
25
|
|
|
26
|
-
|
|
26
|
+
The Angular facade supports Angular 20, 21, or 22.
|
|
27
|
+
|
|
28
|
+
v15 ships five packages under the hyphenated `@signal-tree/*` scope. The
|
|
27
29
|
no-hyphen `@signaltree/*` scope is the separate v14 line: still maintained for
|
|
28
|
-
bug and security fixes (
|
|
30
|
+
bug and security fixes (check the [registry](https://www.npmjs.com/package/@signaltree/core) for the current patch), frozen on features, and not an
|
|
29
31
|
alias for anything under `@signal-tree/*`. Generate `@signal-tree/*` names for
|
|
30
|
-
new v15 code
|
|
32
|
+
new v15 code. The canonical package set is `scripts/release-plan.mjs`:
|
|
31
33
|
|
|
32
34
|
- `@signal-tree/kernel` — framework-neutral tree, `entityMap()`, causal turns,
|
|
33
35
|
links, and the `restoration()` / `transactions()` / `batching()` / `devTools()`
|
|
@@ -43,6 +45,8 @@ new v15 code:
|
|
|
43
45
|
- `@signal-tree/vue` — the complete Vue application facade. **Vue code imports
|
|
44
46
|
`signalTree` and all other SignalTree APIs from here**. Terminal state leaves
|
|
45
47
|
are native `Ref<T>` values and derived leaves are `ComputedRef<T>` values.
|
|
48
|
+
- `@signal-tree/solid` — the complete Solid application facade. Read terminal
|
|
49
|
+
leaves with `leaf()` and write with `leaf.set(value)`.
|
|
46
50
|
|
|
47
51
|
Use `@signal-tree/kernel` directly only for framework-neutral TypeScript,
|
|
48
52
|
including reusable domain libraries. Framework facades forward the neutral
|
|
@@ -53,19 +57,34 @@ kernel surface by canonical identity; they do not duplicate semantic authority.
|
|
|
53
57
|
The neutral kernel exposes callable locations:
|
|
54
58
|
|
|
55
59
|
```typescript
|
|
60
|
+
import { signalTree } from '@signal-tree/kernel';
|
|
61
|
+
const location = signalTree({ count: 0 }).$.count;
|
|
56
62
|
location(); // read
|
|
57
|
-
location(
|
|
58
|
-
location((current) =>
|
|
63
|
+
location(5); // replace the complete value
|
|
64
|
+
location((current) => current + 1); // derive the next complete value
|
|
59
65
|
```
|
|
60
66
|
|
|
61
67
|
The root (`tree.$`) and object branches keep this callable whole-value grammar
|
|
62
68
|
in every facade. Terminal values use the framework's native carrier:
|
|
63
69
|
|
|
64
70
|
```typescript
|
|
71
|
+
import { signalTree } from '@signal-tree/angular';
|
|
72
|
+
const angularTree = signalTree({ count: 0 });
|
|
65
73
|
angularTree.$.count();
|
|
66
74
|
angularTree.$.count.set(5);
|
|
67
75
|
angularTree.$.count.update((count) => count + 1);
|
|
76
|
+
```
|
|
68
77
|
|
|
78
|
+
```typescript
|
|
79
|
+
import { signalTree } from '@signal-tree/solid';
|
|
80
|
+
const solidTree = signalTree({ count: 0 });
|
|
81
|
+
solidTree.$.count();
|
|
82
|
+
solidTree.$.count.set(5);
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
```typescript
|
|
86
|
+
import { signalTree } from '@signal-tree/vue';
|
|
87
|
+
const vueTree = signalTree({ count: 0 });
|
|
69
88
|
vueTree.$.count.value;
|
|
70
89
|
vueTree.$.count.value = 5;
|
|
71
90
|
```
|
|
@@ -80,13 +99,14 @@ ends topology so an object remains one atomic location. Callable values always
|
|
|
80
99
|
use `leaf()` because a bare function argument is the updater syntax:
|
|
81
100
|
|
|
82
101
|
```typescript
|
|
83
|
-
|
|
102
|
+
import { signalTree, leaf } from '@signal-tree/angular';
|
|
103
|
+
const angularTree = signalTree({
|
|
84
104
|
range: leaf({ start: 0, end: 10 }),
|
|
85
105
|
callback: leaf((value: number) => console.log(value)),
|
|
86
106
|
});
|
|
87
107
|
|
|
88
108
|
angularTree.$.range.set({ start: 5, end: 15 });
|
|
89
|
-
angularTree.$.callback.set((value) =>
|
|
109
|
+
angularTree.$.callback.set((value) => console.log(value));
|
|
90
110
|
```
|
|
91
111
|
|
|
92
112
|
The wrapper is consumed at construction or invocation and never enters state,
|
|
@@ -174,7 +194,34 @@ of the same model.
|
|
|
174
194
|
- `packages/kernel/README.md` — kernel API and examples
|
|
175
195
|
- `packages/angular/README.md` — Angular realization
|
|
176
196
|
- `packages/react/README.md` — React observation
|
|
197
|
+
- `packages/vue/README.md` — Vue realization
|
|
198
|
+
- `packages/solid/README.md` — Solid realization
|
|
177
199
|
- `docs/guides/composition-recipes.md` — patterns built from existing primitives, no new API
|
|
178
200
|
- `docs/guides/persistence-guide.md` — the `link()`-as-storage recipe
|
|
179
201
|
- `docs/guides/migration-v14-v15.md` — `@signaltree/*` → `@signal-tree/*` migration (rename, consolidation, removed APIs)
|
|
180
202
|
- `docs/migration/post-rc1-workstream.md` — greenfield-first post-RC program
|
|
203
|
+
|
|
204
|
+
## Transaction failure guidance
|
|
205
|
+
|
|
206
|
+
The guide below links to the active v15 candidate branch because `main` tracks
|
|
207
|
+
v16. The absolute repository URL also works independently of the hosted
|
|
208
|
+
`llms.txt` path; the demo does not serve this guide at `/docs/guides/`. The
|
|
209
|
+
candidate documentation and release publication are pending; this branch link
|
|
210
|
+
is not evidence that 15.3.1 has shipped.
|
|
211
|
+
|
|
212
|
+
Read [Transaction failures and current v15 limitations](https://github.com/JBorgia/signal-tree/blob/fix/15.3.1-link-rollback-and-strand/docs/guides/transaction-failures-v15.md)
|
|
213
|
+
before generating optimistic writes or persistence. Explicit `pending.rollback()`
|
|
214
|
+
refusal leaves state unchanged and the handle pending, but releases consequences
|
|
215
|
+
in existing v15. In the unreleased 15.3.1 candidate, automatic refusal before a
|
|
216
|
+
handle returns records surviving writes as committed, retains eligible undo
|
|
217
|
+
history, releases consequences, and still throws. Successful automatic rollback
|
|
218
|
+
reverses recorded writes. Error does not guarantee undo: never blindly retry the
|
|
219
|
+
whole operation or use `undo()`/`jumpTo()` for request reconciliation. Removing a
|
|
220
|
+
pending-created row after a confirmed edit does not necessarily clear its
|
|
221
|
+
rollback dependency. Recoverable pending refusal is a v16 target, not v15 API.
|
|
222
|
+
|
|
223
|
+
Candidate containment covers deferred write subscribers and transaction turn
|
|
224
|
+
listeners, not all framework effects. Vue watcher failures differ between
|
|
225
|
+
development and production; an enclosing Solid `batch()` can defer errors until
|
|
226
|
+
after a handle returns. The guide lists the remaining Link, branch-key,
|
|
227
|
+
coalesce, pending undo, ordering, notification, and retention failures.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@signal-tree/vue",
|
|
3
|
-
"version": "15.
|
|
3
|
+
"version": "15.3.1",
|
|
4
4
|
"description": "Vue observation for SignalTree.",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"type": "module",
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
"llms.txt"
|
|
26
26
|
],
|
|
27
27
|
"dependencies": {
|
|
28
|
-
"@signal-tree/kernel": "15.
|
|
28
|
+
"@signal-tree/kernel": "15.3.1"
|
|
29
29
|
},
|
|
30
30
|
"peerDependencies": {
|
|
31
31
|
"tslib": "^2.0.0",
|