@issuegraph/store 0.1.1 → 0.2.0
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 +41 -23
- package/dist/mutation.d.ts +10 -1
- package/dist/mutation.d.ts.map +1 -1
- package/dist/mutation.js +10 -0
- package/dist/mutation.js.map +1 -1
- package/dist/source.d.ts +12 -1
- package/dist/source.d.ts.map +1 -1
- package/dist/store.d.ts +16 -0
- package/dist/store.d.ts.map +1 -1
- package/dist/store.js +123 -29
- package/dist/store.js.map +1 -1
- package/dist/validity.d.ts.map +1 -1
- package/dist/validity.js +42 -3
- package/dist/validity.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -128,6 +128,16 @@ An optional `EdgeGuard` sits beside it for refusals that need to see the graph
|
|
|
128
128
|
type EdgeGuard = (context: { mutation; current; next }) => InvalidReason | undefined;
|
|
129
129
|
```
|
|
130
130
|
|
|
131
|
+
`current` is the **newest document the source has answered with**, which is the landed one
|
|
132
|
+
except after a conflict: the conflict's `upstream` is newer than anything landed, so it is
|
|
133
|
+
what the guard is shown until the next answer that lands replaces it. A verdict reached on
|
|
134
|
+
the pre-conflict document would admit an edit that closes a loop on the source's own document
|
|
135
|
+
(the edge the upstream added, with the one queued behind it), and an adapter applies what it
|
|
136
|
+
is handed. Only the guard reads the newer copy: the order and the drawn edges keep reading
|
|
137
|
+
`landed`, and so do the store's own structural refusals — a duplicate or a vanished edge is a
|
|
138
|
+
question the source answers itself, with a document the store adopts, so letting that
|
|
139
|
+
dispatch through is what repairs the store's copy.
|
|
140
|
+
|
|
131
141
|
---
|
|
132
142
|
|
|
133
143
|
## The order can be trusted, structurally
|
|
@@ -174,13 +184,15 @@ it, split by what the answer needs to see:
|
|
|
174
184
|
|
|
175
185
|
- the store itself, for what is visible in the edit — a self-edge, a reference the document
|
|
176
186
|
does not hold, an exact duplicate, a retype to the kind the edge already has, a flip on a
|
|
177
|
-
symmetric relationship
|
|
187
|
+
symmetric relationship, and a second reference on a single-valued field (`cardinality`:
|
|
188
|
+
every relationship field but `blocked-by` holds one, §4.3 — the one writer rule of the
|
|
189
|
+
format that needs no graph walk, so it is refused here rather than once per host);
|
|
178
190
|
- your `EdgeGuard`, for anything needing the graph.
|
|
179
191
|
|
|
180
192
|
## A failed write is marked, never reverted
|
|
181
193
|
|
|
182
194
|
The user's work stays on the canvas. `retry` re-dispatches it, and on a conflict you get the
|
|
183
|
-
|
|
195
|
+
resolutions below. **Nothing auto-merges, nothing auto-reverts, and nothing
|
|
184
196
|
times out** — `discardMine` is the only call that removes an optimistic edit, and a person has
|
|
185
197
|
to make it.
|
|
186
198
|
|
|
@@ -188,32 +200,38 @@ to make it.
|
|
|
188
200
|
|
|
189
201
|
A conflict's `upstream` is **for display, and is never adopted** — it is the "view diff" half
|
|
190
202
|
of the choice, and a reading of the past: a conflict can sit on screen for as long as a person
|
|
191
|
-
takes to read it.
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
store.discardMine(id); // drop the overlay; adopts nothing
|
|
197
|
-
store.retry(id); // re-dispatch, unchanged
|
|
198
|
-
```
|
|
203
|
+
takes to read it. The one other thing it is used for is the guard: it is the newest document
|
|
204
|
+
the source has answered with, so an edit proposed or queued after the conflict is shown to
|
|
205
|
+
your `EdgeGuard` against it rather than against the copy the source has said it no longer
|
|
206
|
+
holds (see "The deriver" above). Shown, not adopted — the order does not move for it, and a
|
|
207
|
+
`retry` is still re-dispatched unchanged.
|
|
199
208
|
|
|
200
|
-
|
|
209
|
+
The store ships three resolutions:
|
|
201
210
|
|
|
202
211
|
```ts
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
212
|
+
store.discardMine(id); // drop the overlay; adopts nothing
|
|
213
|
+
store.retry(id); // re-dispatch, unchanged, against the document as it stands
|
|
214
|
+
store.retryOnLatest(id); // re-read the document, then re-dispatch, unchanged, against what it confirmed
|
|
206
215
|
```
|
|
207
216
|
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
+
`discardMine` and `retry` read the record and act on it with no `await` in between, so neither
|
|
218
|
+
can be overtaken. `retryOnLatest` has a read in the middle, and everything that can happen
|
|
219
|
+
during it — the read failing, the user discarding, the user pressing again — is a decision
|
|
220
|
+
about *user intent*. The store settles all three by **reserving the edit before the read**:
|
|
221
|
+
the record is `pending` from the call on, and a pending edit is one `discardMine` and a second
|
|
222
|
+
press decline to touch, exactly as they do while any write is in flight. The read and the
|
|
223
|
+
re-dispatch then run as **one queued operation**, so nothing can be queued between them:
|
|
224
|
+
|
|
225
|
+
- the read **fails** — the record is restored exactly as it was, `upstream` and all, nothing is
|
|
226
|
+
dispatched, and `hydrationError` says why. The conflict is still there to try again;
|
|
227
|
+
- the read **confirms** a document that no longer admits the edit — it is refused `invalid`
|
|
228
|
+
against that document and never dispatched;
|
|
229
|
+
- otherwise the edit goes out against the confirmed document, with the guard judging it there.
|
|
230
|
+
|
|
231
|
+
That reservation is what the store used to lack, and why the composition once had to live in
|
|
232
|
+
the host — [issue #7](https://github.com/autnmy/issuegraph/issues/7) is the record of the three
|
|
233
|
+
defects a hand-rolled version drew. The adapter is the authority on the current document; the
|
|
234
|
+
store asks it rather than keeping a guess about how stale its own copy has become.
|
|
217
235
|
|
|
218
236
|
`lastChange` belongs to the edit that is **current when it lands**. Two edits proposed before
|
|
219
237
|
the first settles means the first's summary would otherwise be written after the second began,
|
package/dist/mutation.d.ts
CHANGED
|
@@ -76,8 +76,17 @@ export interface InvalidReason {
|
|
|
76
76
|
* `guard-failed` is the opposite case — the guard threw, so no verdict was
|
|
77
77
|
* reached at all. It refuses rather than proceeding, because an unknown verdict
|
|
78
78
|
* is not permission to write.
|
|
79
|
+
*
|
|
80
|
+
* `cardinality` is a rule of the FORMAT rather than of the store's own
|
|
81
|
+
* structure: every relationship field but `blocked-by` holds one reference
|
|
82
|
+
* (§4.3, `EDGE_CARDINALITY`). It is refused here all the same, because it is
|
|
83
|
+
* visible from the edit and the document alone — the same test that puts
|
|
84
|
+
* `duplicate-edge` here rather than in a guard. Left to hosts, the rule was
|
|
85
|
+
* enforced once per host on one route to a write each, and an adapter that
|
|
86
|
+
* enforced it reported a format rule as an upstream rejection on a write that
|
|
87
|
+
* never left the client (issue #11).
|
|
79
88
|
*/
|
|
80
|
-
export declare const INVALID_CODES: readonly ["self-edge", "unknown-issue", "unknown-edge", "duplicate-edge", "unchanged-kind", "symmetric-edge", "would-cycle", "guard-failed"];
|
|
89
|
+
export declare const INVALID_CODES: readonly ["self-edge", "unknown-issue", "unknown-edge", "duplicate-edge", "unchanged-kind", "symmetric-edge", "cardinality", "would-cycle", "guard-failed"];
|
|
81
90
|
/** A refusal code. */
|
|
82
91
|
export type InvalidCode = (typeof INVALID_CODES)[number];
|
|
83
92
|
//# sourceMappingURL=mutation.d.ts.map
|
package/dist/mutation.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mutation.d.ts","sourceRoot":"","sources":["../src/mutation.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE7D;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,WAAW,yEAMb,CAAC;AAEZ,mCAAmC;AACnC,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC;AAIrD,mDAAmD;AACnD,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,SAAS,CAE7D;AAED,0EAA0E;AAC1E,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC;AAEhC;;;;;;;;GAQG;AACH,MAAM,MAAM,QAAQ,GAChB;IAAE,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAA;CAAE,GAClG;IAAE,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAClD;IAAE,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAA;CAAE,GAC/E;IAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAErD,+EAA+E;AAC/E,MAAM,MAAM,QAAQ,GAAG,QAAQ,GAAG;IAAE,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAA;CAAE,CAAC;AAEtE,8DAA8D;AAC9D,MAAM,WAAW,aAAa;IAC5B,uEAAuE;IACvE,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAC3B,iFAAiF;IACjF,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED
|
|
1
|
+
{"version":3,"file":"mutation.d.ts","sourceRoot":"","sources":["../src/mutation.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE7D;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,WAAW,yEAMb,CAAC;AAEZ,mCAAmC;AACnC,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC;AAIrD,mDAAmD;AACnD,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,SAAS,CAE7D;AAED,0EAA0E;AAC1E,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC;AAEhC;;;;;;;;GAQG;AACH,MAAM,MAAM,QAAQ,GAChB;IAAE,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAA;CAAE,GAClG;IAAE,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAClD;IAAE,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAA;CAAE,GAC/E;IAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAErD,+EAA+E;AAC/E,MAAM,MAAM,QAAQ,GAAG,QAAQ,GAAG;IAAE,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAA;CAAE,CAAC;AAEtE,8DAA8D;AAC9D,MAAM,WAAW,aAAa;IAC5B,uEAAuE;IACvE,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAC3B,iFAAiF;IACjF,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,eAAO,MAAM,aAAa,6JAUf,CAAC;AAEZ,sBAAsB;AACtB,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC"}
|
package/dist/mutation.js
CHANGED
|
@@ -44,6 +44,15 @@ export function isEdgeState(value) {
|
|
|
44
44
|
* `guard-failed` is the opposite case — the guard threw, so no verdict was
|
|
45
45
|
* reached at all. It refuses rather than proceeding, because an unknown verdict
|
|
46
46
|
* is not permission to write.
|
|
47
|
+
*
|
|
48
|
+
* `cardinality` is a rule of the FORMAT rather than of the store's own
|
|
49
|
+
* structure: every relationship field but `blocked-by` holds one reference
|
|
50
|
+
* (§4.3, `EDGE_CARDINALITY`). It is refused here all the same, because it is
|
|
51
|
+
* visible from the edit and the document alone — the same test that puts
|
|
52
|
+
* `duplicate-edge` here rather than in a guard. Left to hosts, the rule was
|
|
53
|
+
* enforced once per host on one route to a write each, and an adapter that
|
|
54
|
+
* enforced it reported a format rule as an upstream rejection on a write that
|
|
55
|
+
* never left the client (issue #11).
|
|
47
56
|
*/
|
|
48
57
|
export const INVALID_CODES = Object.freeze([
|
|
49
58
|
'self-edge',
|
|
@@ -52,6 +61,7 @@ export const INVALID_CODES = Object.freeze([
|
|
|
52
61
|
'duplicate-edge',
|
|
53
62
|
'unchanged-kind',
|
|
54
63
|
'symmetric-edge',
|
|
64
|
+
'cardinality',
|
|
55
65
|
'would-cycle',
|
|
56
66
|
'guard-failed',
|
|
57
67
|
]);
|
package/dist/mutation.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mutation.js","sourceRoot":"","sources":["../src/mutation.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC;IACvC,UAAU;IACV,eAAe;IACf,SAAS;IACT,QAAQ;IACR,UAAU;CACF,CAAC,CAAC;AAKZ,MAAM,cAAc,GAAwB,IAAI,GAAG,CAAS,WAAW,CAAC,CAAC;AAEzE,mDAAmD;AACnD,MAAM,UAAU,WAAW,CAAC,KAAa;IACvC,OAAO,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AACnC,CAAC;AA+BD
|
|
1
|
+
{"version":3,"file":"mutation.js","sourceRoot":"","sources":["../src/mutation.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC;IACvC,UAAU;IACV,eAAe;IACf,SAAS;IACT,QAAQ;IACR,UAAU;CACF,CAAC,CAAC;AAKZ,MAAM,cAAc,GAAwB,IAAI,GAAG,CAAS,WAAW,CAAC,CAAC;AAEzE,mDAAmD;AACnD,MAAM,UAAU,WAAW,CAAC,KAAa;IACvC,OAAO,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AACnC,CAAC;AA+BD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC;IACzC,WAAW;IACX,eAAe;IACf,cAAc;IACd,gBAAgB;IAChB,gBAAgB;IAChB,gBAAgB;IAChB,aAAa;IACb,aAAa;IACb,cAAc;CACN,CAAC,CAAC"}
|
package/dist/source.d.ts
CHANGED
|
@@ -122,7 +122,18 @@ export type OrderDeriver = (document: GraphDocument) => readonly OrderRow[];
|
|
|
122
122
|
/** What a guard is shown. Both documents, so it need not recompute either. */
|
|
123
123
|
export interface EdgeGuardContext {
|
|
124
124
|
readonly mutation: Mutation;
|
|
125
|
-
/**
|
|
125
|
+
/**
|
|
126
|
+
* The newest authoritative document the source has answered with, before
|
|
127
|
+
* the edit.
|
|
128
|
+
*
|
|
129
|
+
* That is the landed document — except after a `conflict`, whose `upstream`
|
|
130
|
+
* is newer than anything landed and is what the guard sees until the next
|
|
131
|
+
* answer that lands replaces it. A verdict reached on the pre-conflict
|
|
132
|
+
* document would admit an edit that closes a loop on the source's own
|
|
133
|
+
* document, and a source applies what it is handed. The store's structural
|
|
134
|
+
* refusals keep reading the landed document: those are questions the source
|
|
135
|
+
* answers itself, and its answer is adopted.
|
|
136
|
+
*/
|
|
126
137
|
readonly current: GraphDocument;
|
|
127
138
|
/** The document the edit would produce, if it landed. */
|
|
128
139
|
readonly next: GraphDocument;
|
package/dist/source.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"source.d.ts","sourceRoot":"","sources":["../src/source.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC1D,OAAO,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAE7D;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,WAAW,UAAU;IACzB,4EAA4E;IAC5E,OAAO,IAAI,OAAO,CAAC,aAAa,CAAC,CAAC;IAClC,oFAAoF;IACpF,QAAQ,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;CACvD;AAED;;;;;;;;;GASG;AACH,MAAM,MAAM,cAAc,GACtB;IACE;;;;;;;;;;;;;;OAcG;IACH,QAAQ,CAAC,OAAO,EAAE,SAAS,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC;CAClC,GACD;IACE;;;;;;;;;;;;OAYG;IACH,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC;IAC9B,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC;CAClC,GACD;IACE,6DAA6D;IAC7D,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB,GACD;IACE;;;;;;;OAOG;IACH,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC;CAClC,CAAC;AAEN,kEAAkE;AAClE,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC;IACvB,mEAAmE;IACnE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,mDAAmD;IACnD,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,oEAAoE;IACpE,QAAQ,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;CACzC;AAED;;;;;GAKG;AACH,MAAM,MAAM,YAAY,GAAG,CAAC,QAAQ,EAAE,aAAa,KAAK,SAAS,QAAQ,EAAE,CAAC;AAE5E,8EAA8E;AAC9E,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B
|
|
1
|
+
{"version":3,"file":"source.d.ts","sourceRoot":"","sources":["../src/source.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC1D,OAAO,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAE7D;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,WAAW,UAAU;IACzB,4EAA4E;IAC5E,OAAO,IAAI,OAAO,CAAC,aAAa,CAAC,CAAC;IAClC,oFAAoF;IACpF,QAAQ,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;CACvD;AAED;;;;;;;;;GASG;AACH,MAAM,MAAM,cAAc,GACtB;IACE;;;;;;;;;;;;;;OAcG;IACH,QAAQ,CAAC,OAAO,EAAE,SAAS,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC;CAClC,GACD;IACE;;;;;;;;;;;;OAYG;IACH,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC;IAC9B,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC;CAClC,GACD;IACE,6DAA6D;IAC7D,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB,GACD;IACE;;;;;;;OAOG;IACH,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC;CAClC,CAAC;AAEN,kEAAkE;AAClE,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC;IACvB,mEAAmE;IACnE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,mDAAmD;IACnD,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,oEAAoE;IACpE,QAAQ,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;CACzC;AAED;;;;;GAKG;AACH,MAAM,MAAM,YAAY,GAAG,CAAC,QAAQ,EAAE,aAAa,KAAK,SAAS,QAAQ,EAAE,CAAC;AAE5E,8EAA8E;AAC9E,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B;;;;;;;;;;;OAWG;IACH,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC;IAChC,yDAAyD;IACzD,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;CAC9B;AAED;;;;;;;GAOG;AACH,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,EAAE,gBAAgB,KAAK,aAAa,GAAG,SAAS,CAAC"}
|
package/dist/store.d.ts
CHANGED
|
@@ -100,6 +100,22 @@ export interface Store {
|
|
|
100
100
|
propose(proposal: Proposal): ProposalHandle;
|
|
101
101
|
/** Re-dispatch an unsettled edit, unchanged, against the document as it stands. */
|
|
102
102
|
retry(mutationId: MutationId): ProposalHandle;
|
|
103
|
+
/**
|
|
104
|
+
* Re-read the document from the source, then re-dispatch an unsettled edit,
|
|
105
|
+
* unchanged, against what that read confirmed — as ONE queued operation.
|
|
106
|
+
*
|
|
107
|
+
* The edit is reserved synchronously: it is `pending` from this call on, so
|
|
108
|
+
* `discardMine` and a second press are no-ops until it settles, exactly as
|
|
109
|
+
* they are for `retry`. A refresh that fails restores the record as it was
|
|
110
|
+
* and dispatches nothing; `hydrationError` says why. See the README's
|
|
111
|
+
* "Resolving a conflict".
|
|
112
|
+
*
|
|
113
|
+
* Accepts any record `retry` accepts — `conflict`, `failed` or `invalid` —
|
|
114
|
+
* and reaches its verdict only after the read, so an edit refused for a
|
|
115
|
+
* reason no document can change (a self-edge) costs one read before it is
|
|
116
|
+
* refused again.
|
|
117
|
+
*/
|
|
118
|
+
retryOnLatest(mutationId: MutationId): ProposalHandle;
|
|
103
119
|
/**
|
|
104
120
|
* Drop an unsettled edit's overlay. The only call that removes the user's
|
|
105
121
|
* work, and it adopts nothing. See the README's "Resolving a conflict".
|
package/dist/store.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EACL,KAAK,MAAM,EAEX,KAAK,UAAU,EACf,KAAK,WAAW,EAEjB,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAA2B,UAAU,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACnF,OAAO,KAAK,EAAE,UAAU,EAAkB,SAAS,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACjG,OAAO,EAAE,KAAK,WAAW,EAAa,MAAM,aAAa,CAAC;AAE1D,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,WAAW,EAAuB,MAAM,YAAY,CAAC;AAGvF,0EAA0E;AAC1E,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,WAAW,GAAG,OAAO,GAAG,QAAQ,CAAC;AAExE;;;;;;GAMG;AACH,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,MAAM,CAAC;AAE7C,sEAAsE;AACtE,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,IAAI,EAAE,SAAS,QAAQ,EAAE,CAAC;IACnC,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;CAC9B;AAED,gFAAgF;AAChF,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAC;IACjC;;;;;OAKG;IACH,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,MAAM,EAAE,SAAS,WAAW,EAAE,CAAC;IACxC,uEAAuE;IACvE,QAAQ,CAAC,MAAM,EAAE,SAAS,UAAU,EAAE,CAAC;IACvC,kFAAkF;IAClF,QAAQ,CAAC,SAAS,EAAE,SAAS,aAAa,EAAE,CAAC;IAC7C,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC;IAC1B,4EAA4E;IAC5E,QAAQ,CAAC,MAAM,EAAE,SAAS,WAAW,EAAE,CAAC;IACxC,0EAA0E;IAC1E,QAAQ,CAAC,UAAU,CAAC,EAAE,WAAW,CAAC;IAClC;;;;;;OAMG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;CACvC;AAED,2EAA2E;AAC3E,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;IAChC;;;;OAIG;IACH,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;CACjC;AAED,uEAAuE;AACvE,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAC5B;;;OAGG;IACH,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAC9B,sEAAsE;IACtE,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,CAAC;CAC5B;AAED,kCAAkC;AAClC,MAAM,WAAW,KAAK;IACpB,WAAW,IAAI,aAAa,CAAC;IAC7B,SAAS,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC;IAC5C,wEAAwE;IACxE,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACzB;;;;;;OAMG;IACH,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3B,yEAAyE;IACzE,OAAO,CAAC,QAAQ,EAAE,QAAQ,GAAG,cAAc,CAAC;IAC5C,mFAAmF;IACnF,KAAK,CAAC,UAAU,EAAE,UAAU,GAAG,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"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"}
|
package/dist/store.js
CHANGED
|
@@ -104,6 +104,40 @@ function messageOf(thrown) {
|
|
|
104
104
|
export function createStore(config) {
|
|
105
105
|
const { source, derive, guard } = config;
|
|
106
106
|
let landed = EMPTY_DOCUMENT;
|
|
107
|
+
/**
|
|
108
|
+
* THE NEWEST AUTHORITATIVE DOCUMENT THE SOURCE HAS ANSWERED WITH, which is
|
|
109
|
+
* `landed` except after a `conflict`.
|
|
110
|
+
*
|
|
111
|
+
* A conflict carries the document as the source holds it, and the store
|
|
112
|
+
* adopts none of it — the order must not move for an edit that did not land,
|
|
113
|
+
* and the README's "Resolving a conflict" says why the upstream is for
|
|
114
|
+
* display. But it is also the one thing the store has been TOLD about the
|
|
115
|
+
* source's document since it last read one, and it is strictly newer than
|
|
116
|
+
* `landed`. Validating against `landed` after it arrives means checking an
|
|
117
|
+
* edit against a document the source has just said it no longer holds: a
|
|
118
|
+
* queued edit whose legality depends on the upstream's change — the very
|
|
119
|
+
* edge it added closing a cycle with this one — is admitted by a guard shown
|
|
120
|
+
* the pre-conflict graph, and lands against a source that has moved
|
|
121
|
+
* ([#12](https://github.com/autnmy/issuegraph/issues/12)).
|
|
122
|
+
*
|
|
123
|
+
* So the GUARD reads THIS document, and nothing else does. The deriver and
|
|
124
|
+
* the projection keep reading `landed`, which is what keeps "optimistic
|
|
125
|
+
* re-ordering is not allowed" a property of the structure. The structural
|
|
126
|
+
* refusals keep reading `landed` too, for a different reason: they ask
|
|
127
|
+
* questions the source answers for itself — a duplicate comes back
|
|
128
|
+
* `unchanged`, a vanished edge comes back `rejected` or `unchanged` — and the
|
|
129
|
+
* answer is adopted, so a dispatch the store lets through is what repairs
|
|
130
|
+
* its copy. Refusing those against a document the snapshot cannot show would
|
|
131
|
+
* draw an edge the user can see as `unknown-edge`, with nothing to do but
|
|
132
|
+
* wait for a re-read nothing prompts. A cycle is the question the source
|
|
133
|
+
* does NOT answer — an adapter applies what it is handed — which is why the
|
|
134
|
+
* guard is the one reader that must not be shown the stale copy. Every
|
|
135
|
+
* `adopt` sets both documents; only the conflict arm moves this one alone.
|
|
136
|
+
* The queue runs one authoritative operation at a time, so this is monotone
|
|
137
|
+
* in the order the source answered — no freshness counter, which is the
|
|
138
|
+
* bookkeeping #7 records as wrong three times over.
|
|
139
|
+
*/
|
|
140
|
+
let newest = EMPTY_DOCUMENT;
|
|
107
141
|
let status = 'idle';
|
|
108
142
|
let hydrationError;
|
|
109
143
|
let records = [];
|
|
@@ -150,6 +184,9 @@ export function createStore(config) {
|
|
|
150
184
|
edges: sameEdgeSet(landed.edges, next.edges) ? landed.edges : own(next.edges),
|
|
151
185
|
};
|
|
152
186
|
landed = adopted;
|
|
187
|
+
// An authoritative answer supersedes a conflict's upstream: what landed is
|
|
188
|
+
// now the newest thing the source has said.
|
|
189
|
+
newest = adopted;
|
|
153
190
|
}
|
|
154
191
|
/**
|
|
155
192
|
* Rebuild the snapshot, reusing every slice that has not changed, and notify
|
|
@@ -278,6 +315,12 @@ export function createStore(config) {
|
|
|
278
315
|
/**
|
|
279
316
|
* Why this edit cannot happen — structurally, then by the injected guard.
|
|
280
317
|
*
|
|
318
|
+
* The structural check reads `landed` and the guard reads `newest` — the
|
|
319
|
+
* document the source most recently answered with, which a conflict can
|
|
320
|
+
* make newer than anything landed. The split is deliberate and the note on
|
|
321
|
+
* `newest` says why: the source corrects a structural mistake with an answer
|
|
322
|
+
* the store adopts, and a cycle it never corrects at all.
|
|
323
|
+
*
|
|
281
324
|
* A guard that throws reached no verdict, and an unknown verdict is not
|
|
282
325
|
* permission to write: it refuses, fail-closed, with the thrown message as
|
|
283
326
|
* the reason. Letting it escape would strand the whole dispatch queue behind
|
|
@@ -290,7 +333,7 @@ export function createStore(config) {
|
|
|
290
333
|
if (guard === undefined)
|
|
291
334
|
return undefined;
|
|
292
335
|
try {
|
|
293
|
-
return guard({ mutation, current:
|
|
336
|
+
return guard({ mutation, current: newest, next: nextDocument(newest, mutation) });
|
|
294
337
|
}
|
|
295
338
|
catch (thrown) {
|
|
296
339
|
return { code: 'guard-failed', message: messageOf(thrown) };
|
|
@@ -345,15 +388,15 @@ export function createStore(config) {
|
|
|
345
388
|
break;
|
|
346
389
|
}
|
|
347
390
|
case 'conflict': {
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
391
|
+
// Taken on rather than retained by reference: it is exposed through
|
|
392
|
+
// `snapshot.writes`, so a consumer must not be able to edit the
|
|
393
|
+
// adapter's own arrays through it.
|
|
394
|
+
const upstream = ownDocument(result.upstream);
|
|
395
|
+
putRecord({ mutationId: mutation.mutationId, mutation, state: 'conflict', upstream });
|
|
396
|
+
// NOT adopted — `landed` and the order stay where they are. But it is
|
|
397
|
+
// the newest document the source has answered with, so it is what the
|
|
398
|
+
// guard is next shown, until an answer that lands replaces it.
|
|
399
|
+
newest = upstream;
|
|
357
400
|
break;
|
|
358
401
|
}
|
|
359
402
|
}
|
|
@@ -367,7 +410,8 @@ export function createStore(config) {
|
|
|
367
410
|
* a fact about the adapter not being called, not just about the colour of the
|
|
368
411
|
* edge, and that is what the tests assert.
|
|
369
412
|
*/
|
|
370
|
-
function start(
|
|
413
|
+
function start(task) {
|
|
414
|
+
const { mutation } = task;
|
|
371
415
|
// The summary is evidence for ONE edit, and the contract is that it lasts
|
|
372
416
|
// until the next edit or an explicit dismissal. Clearing it here is what
|
|
373
417
|
// makes that true: left standing, a host would show the previous edit's
|
|
@@ -375,20 +419,32 @@ export function createStore(config) {
|
|
|
375
419
|
lastChange = undefined;
|
|
376
420
|
currentProposal = mutation.mutationId;
|
|
377
421
|
const settled = new Promise((resolve) => settlers.set(mutation.mutationId, resolve));
|
|
378
|
-
|
|
422
|
+
// THE VERDICT IS REACHED AGAINST THE DOCUMENT THE EDIT WILL BE DISPATCHED
|
|
423
|
+
// AGAINST. For a direct dispatch that is `landed` as it stands, so a refused
|
|
424
|
+
// edit is recorded here and never enters the queue. For a resolve it is the
|
|
425
|
+
// document the refresh will confirm, which does not exist yet — asking now
|
|
426
|
+
// would refuse or admit the edit on the very copy the user asked to look
|
|
427
|
+
// past. Its verdict waits for the queue's re-check, where every edit is
|
|
428
|
+
// asked again anyway.
|
|
429
|
+
const refusal = task.kind === 'dispatch' ? refusalFor(mutation) : undefined;
|
|
379
430
|
if (refusal !== undefined) {
|
|
380
431
|
putRecord({ mutationId: mutation.mutationId, mutation, state: 'invalid', reason: refusal });
|
|
381
432
|
settle(mutation.mutationId);
|
|
382
433
|
publish();
|
|
383
434
|
return { mutationId: mutation.mutationId, settled };
|
|
384
435
|
}
|
|
436
|
+
// THIS IS THE RESERVATION, for a resolve as much as for a dispatch. A
|
|
437
|
+
// `pending` record is one `discardMine` and `retry` decline to touch, so
|
|
438
|
+
// from here until the edit settles nothing can act on it — including across
|
|
439
|
+
// the refresh a resolve is about to wait on. That is what lets the store
|
|
440
|
+
// own a resolution that spans an await: the intent was captured before it.
|
|
385
441
|
putRecord({ mutationId: mutation.mutationId, mutation, state: 'pending' });
|
|
386
442
|
// ENQUEUE BEFORE NOTIFYING. `publish` runs subscribers synchronously, so a
|
|
387
443
|
// subscriber proposing a follow-up re-enters here — and if the queue does
|
|
388
444
|
// not yet hold this edit, the nested one takes its place in line and goes
|
|
389
445
|
// out first. Two edits on the same edge then apply in the reverse of the
|
|
390
446
|
// order the user made them.
|
|
391
|
-
queue.push(
|
|
447
|
+
queue.push(task);
|
|
392
448
|
publish();
|
|
393
449
|
void drain();
|
|
394
450
|
return { mutationId: mutation.mutationId, settled };
|
|
@@ -397,12 +453,13 @@ export function createStore(config) {
|
|
|
397
453
|
* Run the queue, one authoritative operation at a time — dispatches and
|
|
398
454
|
* document reads alike, since both answer with a document.
|
|
399
455
|
*
|
|
400
|
-
* An edit that WAITED is re-checked before it goes out, because
|
|
401
|
-
* have moved under it — a sibling edit can delete the relationship this
|
|
402
|
-
* retypes, and
|
|
403
|
-
*
|
|
404
|
-
*
|
|
405
|
-
*
|
|
456
|
+
* An edit that WAITED is re-checked before it goes out, because the document
|
|
457
|
+
* may have moved under it — a sibling edit can delete the relationship this
|
|
458
|
+
* one retypes, and a sibling's CONFLICT can carry an upstream that closes a
|
|
459
|
+
* cycle with it — and dispatching against a document that no longer admits
|
|
460
|
+
* it would defeat "refused before any write". Every edit is re-checked here
|
|
461
|
+
* whether or not it waited; the comment at the check says why. A resolve is
|
|
462
|
+
* checked here for the FIRST time, against the document its read confirmed.
|
|
406
463
|
*/
|
|
407
464
|
async function drain() {
|
|
408
465
|
if (draining)
|
|
@@ -411,10 +468,34 @@ export function createStore(config) {
|
|
|
411
468
|
try {
|
|
412
469
|
for (let next = queue.shift(); next !== undefined; next = queue.shift()) {
|
|
413
470
|
if (next.kind === 'load') {
|
|
414
|
-
|
|
471
|
+
const ok = await runLoad(next.first);
|
|
472
|
+
publish();
|
|
473
|
+
next.done(ok);
|
|
415
474
|
continue;
|
|
416
475
|
}
|
|
476
|
+
if (next.kind === 'resolve') {
|
|
477
|
+
const ok = await runLoad(false);
|
|
478
|
+
if (!ok) {
|
|
479
|
+
// THE READ FAILED, SO NOTHING IS CONFIRMED, and the edit does not
|
|
480
|
+
// go out: the `continue` below is what makes the two halves one
|
|
481
|
+
// operation. The record goes back to exactly what it was when the
|
|
482
|
+
// resolution was reserved — a conflict keeps its `upstream` for
|
|
483
|
+
// view-diff — and `hydrationError`, set by the read, says why. Not
|
|
484
|
+
// downgraded to `failed`: that would throw away the one document
|
|
485
|
+
// the user can still compare against.
|
|
486
|
+
putRecord(next.prior);
|
|
487
|
+
settle(next.mutation.mutationId);
|
|
488
|
+
}
|
|
489
|
+
// ONE TRANSITION, whichever way the read went. The restore rides the
|
|
490
|
+
// same publish as the read's outcome, so no subscriber can observe
|
|
491
|
+
// "refresh failed, edit still in flight" as a state of its own.
|
|
492
|
+
publish();
|
|
493
|
+
if (!ok)
|
|
494
|
+
continue;
|
|
495
|
+
}
|
|
417
496
|
// ALWAYS re-checked, not only when something is known to have moved.
|
|
497
|
+
// For a resolve this is the FIRST check, and against the document the
|
|
498
|
+
// read just confirmed — which is the point of resolving.
|
|
418
499
|
// Knowing that needs bookkeeping about document freshness, and every
|
|
419
500
|
// version of that bookkeeping this store has had was wrong in a way
|
|
420
501
|
// nobody could see. `refusalFor` is pure and cheap; asking it twice
|
|
@@ -449,8 +530,16 @@ export function createStore(config) {
|
|
|
449
530
|
function noop(mutationId) {
|
|
450
531
|
return { mutationId, settled: Promise.resolve() };
|
|
451
532
|
}
|
|
452
|
-
/**
|
|
453
|
-
|
|
533
|
+
/**
|
|
534
|
+
* Read the document. Only ever called from the queue. Resolves `true` when
|
|
535
|
+
* the read succeeded.
|
|
536
|
+
*
|
|
537
|
+
* PUBLISHES NOTHING AT THE END, on purpose: the caller decides what else
|
|
538
|
+
* belongs in the same transition. A resolve whose read failed restores its
|
|
539
|
+
* record before publishing, so the outcome of the read and the restored edit
|
|
540
|
+
* arrive together. (The `hydrating` publish on a first load is a transition
|
|
541
|
+
* of its own, before the read starts.)
|
|
542
|
+
*/
|
|
454
543
|
async function runLoad(first) {
|
|
455
544
|
if (first) {
|
|
456
545
|
status = 'hydrating';
|
|
@@ -470,10 +559,8 @@ export function createStore(config) {
|
|
|
470
559
|
// first load that never produced one reports `failed`.
|
|
471
560
|
if (first)
|
|
472
561
|
status = 'failed';
|
|
473
|
-
publish();
|
|
474
562
|
return false;
|
|
475
563
|
}
|
|
476
|
-
publish();
|
|
477
564
|
return true;
|
|
478
565
|
}
|
|
479
566
|
return {
|
|
@@ -495,19 +582,26 @@ export function createStore(config) {
|
|
|
495
582
|
// A per-store counter, not a random identifier: identities only have to
|
|
496
583
|
// be unique within one store, and a deterministic one keeps every test
|
|
497
584
|
// that reads a mutation id reproducible.
|
|
498
|
-
return start({ ...proposal, mutationId: `m${sequence}` });
|
|
585
|
+
return start({ kind: 'dispatch', mutation: { ...proposal, mutationId: `m${sequence}` } });
|
|
499
586
|
},
|
|
500
587
|
retry(mutationId) {
|
|
501
588
|
const record = recordFor(mutationId);
|
|
502
589
|
if (record === undefined || record.state === 'pending')
|
|
503
590
|
return noop(mutationId);
|
|
504
|
-
return start(record.mutation);
|
|
591
|
+
return start({ kind: 'dispatch', mutation: record.mutation });
|
|
592
|
+
},
|
|
593
|
+
retryOnLatest(mutationId) {
|
|
594
|
+
const record = recordFor(mutationId);
|
|
595
|
+
if (record === undefined || record.state === 'pending')
|
|
596
|
+
return noop(mutationId);
|
|
597
|
+
return start({ kind: 'resolve', mutation: record.mutation, prior: record });
|
|
505
598
|
},
|
|
506
599
|
/**
|
|
507
600
|
* Single-step on purpose: it reads the record and acts on it with no
|
|
508
|
-
* `await` in between, so nothing can change underneath it.
|
|
509
|
-
* that
|
|
510
|
-
*
|
|
601
|
+
* `await` in between, so nothing can change underneath it. The resolution
|
|
602
|
+
* that has to refresh first gets the same property by reserving the edit
|
|
603
|
+
* BEFORE its refresh — the record is `pending` from that call on, which is
|
|
604
|
+
* exactly the state this declines to touch.
|
|
511
605
|
*/
|
|
512
606
|
discardMine(mutationId) {
|
|
513
607
|
const record = recordFor(mutationId);
|
package/dist/store.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.js","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"store.js","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"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"}
|
package/dist/validity.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validity.d.ts","sourceRoot":"","sources":["../src/validity.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,OAAO,EACL,KAAK,MAAM,EACX,KAAK,aAAa,EAClB,KAAK,UAAU,EAIhB,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAE7D;;;;;;;;;GASG;AACH,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,QAAQ,CAAC,KAAK,EAAE,SAAS,UAAU,EAAE,CAAC;IACtC,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;CACpC;AAED,4EAA4E;AAC5E,wBAAgB,aAAa,CAAC,QAAQ,EAAE,aAAa,EAAE,QAAQ,EAAE,QAAQ,GAAG,UAAU,GAAG,SAAS,CAejG;AAED,mEAAmE;AACnE,wBAAgB,aAAa,CAAC,QAAQ,EAAE,aAAa,EAAE,QAAQ,EAAE,QAAQ,GAAG,UAAU,CA2BrF;AAED,4EAA4E;AAC5E,wBAAgB,YAAY,CAAC,QAAQ,EAAE,aAAa,EAAE,QAAQ,EAAE,QAAQ,GAAG,aAAa,CASvF;
|
|
1
|
+
{"version":3,"file":"validity.d.ts","sourceRoot":"","sources":["../src/validity.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,OAAO,EACL,KAAK,MAAM,EACX,KAAK,aAAa,EAClB,KAAK,UAAU,EAIhB,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAE7D;;;;;;;;;GASG;AACH,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,QAAQ,CAAC,KAAK,EAAE,SAAS,UAAU,EAAE,CAAC;IACtC,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;CACpC;AAED,4EAA4E;AAC5E,wBAAgB,aAAa,CAAC,QAAQ,EAAE,aAAa,EAAE,QAAQ,EAAE,QAAQ,GAAG,UAAU,GAAG,SAAS,CAejG;AAED,mEAAmE;AACnE,wBAAgB,aAAa,CAAC,QAAQ,EAAE,aAAa,EAAE,QAAQ,EAAE,QAAQ,GAAG,UAAU,CA2BrF;AAED,4EAA4E;AAC5E,wBAAgB,YAAY,CAAC,QAAQ,EAAE,aAAa,EAAE,QAAQ,EAAE,QAAQ,GAAG,aAAa,CASvF;AAkDD;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,aAAa,EACvB,QAAQ,EAAE,QAAQ,GACjB,aAAa,GAAG,SAAS,CA2C3B"}
|
package/dist/validity.js
CHANGED
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
* belongs with the derivation so the package family has one of it. Both halves
|
|
12
12
|
* produce the same refusal, and neither ever reaches `dispatch`.
|
|
13
13
|
*/
|
|
14
|
-
import { isSymmetricEdgeField } from '@issuegraph/core';
|
|
14
|
+
import { EDGE_CARDINALITY, isSymmetricEdgeField } from '@issuegraph/core';
|
|
15
15
|
import { findEdge, hasIssue, makeEdge, } from "./model.js";
|
|
16
16
|
/** The edge an edit produces, or `undefined` for one that produces none. */
|
|
17
17
|
export function resultingEdge(document, mutation) {
|
|
@@ -74,6 +74,45 @@ export function nextDocument(document, mutation) {
|
|
|
74
74
|
function refuse(code, message) {
|
|
75
75
|
return { code, message };
|
|
76
76
|
}
|
|
77
|
+
/**
|
|
78
|
+
* Why this edit would give a single-valued field a second reference (§4.3).
|
|
79
|
+
*
|
|
80
|
+
* `blocked-by` is the only list; every other relationship field holds ONE
|
|
81
|
+
* reference, because a writer joins a group or names a canonical by pointing
|
|
82
|
+
* at one member. Two references is not a richer document but an ambiguous one
|
|
83
|
+
* — a reader resolves it by whichever it saw last.
|
|
84
|
+
*
|
|
85
|
+
* Asked of the RESULTING edge rather than of the operation, so a retype into an
|
|
86
|
+
* occupied field, and a flip whose new carrier is occupied, are refused exactly
|
|
87
|
+
* like a create — and the edge a retype or flip REPLACES is excluded, because
|
|
88
|
+
* it is on its way out. The carrier is `from` as written, for the symmetric
|
|
89
|
+
* kinds too: the field lives on one issue's frontmatter, and joining a group
|
|
90
|
+
* from a free carrier is how a writer joins one.
|
|
91
|
+
*
|
|
92
|
+
* It lives HERE, beside the other structural refusals, and not in a host's
|
|
93
|
+
* guard or adapter. It needs the edit and the document and no graph walk, which
|
|
94
|
+
* is this file's criterion, and the vocabulary it reads is the one
|
|
95
|
+
* `@issuegraph/core` already fixes. A rule enforced at a call site covers one
|
|
96
|
+
* route to a write and misses `retry` and the queued re-check; one enforced by
|
|
97
|
+
* an adapter comes back `failed` — "refused upstream" — on a write that never
|
|
98
|
+
* left the client (issue #11). A structural refusal reaches every route.
|
|
99
|
+
*/
|
|
100
|
+
function cardinalityRefusal(document, mutation) {
|
|
101
|
+
const resulting = resultingEdge(document, mutation);
|
|
102
|
+
if (resulting === undefined || EDGE_CARDINALITY[resulting.kind] !== 'single')
|
|
103
|
+
return undefined;
|
|
104
|
+
const replaced = mutation.op === 'create' ? undefined : mutation.edgeId;
|
|
105
|
+
// `resulting.id` is never held by the time this runs — the duplicate refusal
|
|
106
|
+
// went first — but excluding it keeps this function true on its own rather
|
|
107
|
+
// than true because of the order `structuralRefusal` happens to call it in.
|
|
108
|
+
const held = document.edges.find((edge) => edge.kind === resulting.kind &&
|
|
109
|
+
edge.from === resulting.from &&
|
|
110
|
+
edge.id !== resulting.id &&
|
|
111
|
+
edge.id !== replaced);
|
|
112
|
+
if (held === undefined)
|
|
113
|
+
return undefined;
|
|
114
|
+
return refuse('cardinality', `${held.from} already carries ${held.kind} ${held.to}, and ${held.kind} holds one reference.`);
|
|
115
|
+
}
|
|
77
116
|
/**
|
|
78
117
|
* Why this edit cannot happen, from the edit and the document alone.
|
|
79
118
|
*
|
|
@@ -94,7 +133,7 @@ export function structuralRefusal(document, mutation) {
|
|
|
94
133
|
if (findEdge(document, produced.id) !== undefined) {
|
|
95
134
|
return refuse('duplicate-edge', `${mutation.from} is already ${mutation.kind} ${mutation.to}.`);
|
|
96
135
|
}
|
|
97
|
-
return
|
|
136
|
+
return cardinalityRefusal(document, mutation);
|
|
98
137
|
}
|
|
99
138
|
const edge = findEdge(document, mutation.edgeId);
|
|
100
139
|
if (edge === undefined) {
|
|
@@ -120,6 +159,6 @@ export function structuralRefusal(document, mutation) {
|
|
|
120
159
|
if (produced !== undefined && produced.id !== edge.id && findEdge(document, produced.id) !== undefined) {
|
|
121
160
|
return refuse('duplicate-edge', `${produced.from} is already ${produced.kind} ${produced.to}.`);
|
|
122
161
|
}
|
|
123
|
-
return
|
|
162
|
+
return cardinalityRefusal(document, mutation);
|
|
124
163
|
}
|
|
125
164
|
//# sourceMappingURL=validity.js.map
|
package/dist/validity.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validity.js","sourceRoot":"","sources":["../src/validity.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"validity.js","sourceRoot":"","sources":["../src/validity.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@issuegraph/store",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"description": "A framework-free client store for an Issuegraph document, plus the data-source port a host plugs its tracker into. Renders edits optimistically, dispatches every mutation outward, and never re-evaluates the selection order until the write lands.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"issuegraph",
|