@shapeshift-labs/frontier-mutation 0.1.0 → 0.1.2
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/LICENSE +21 -0
- package/README.md +207 -2
- package/dist/index.d.ts +214 -10
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2198 -129
- package/dist/index.js.map +1 -1
- package/package.json +17 -5
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Shapeshift Labs
|
|
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.
|
package/README.md
CHANGED
|
@@ -2,6 +2,10 @@
|
|
|
2
2
|
|
|
3
3
|
Explicit mutation and selector plans for Frontier.
|
|
4
4
|
|
|
5
|
+
Repository: [siliconjungle/-shapeshift-labs-frontier-mutation](https://github.com/siliconjungle/-shapeshift-labs-frontier-mutation)
|
|
6
|
+
|
|
7
|
+
Built on the core JSON diff/apply package: [`@shapeshift-labs/frontier`](https://github.com/siliconjungle/-shapeshift-labs-frontier).
|
|
8
|
+
|
|
5
9
|
```sh
|
|
6
10
|
npm install @shapeshift-labs/frontier @shapeshift-labs/frontier-mutation
|
|
7
11
|
```
|
|
@@ -13,7 +17,9 @@ import { createMutationPlan, select } from '@shapeshift-labs/frontier-mutation';
|
|
|
13
17
|
|
|
14
18
|
const enemies = select('/entities/*')
|
|
15
19
|
.where('type', '==', 'enemy')
|
|
16
|
-
.and('hp', '>', 0)
|
|
20
|
+
.and('hp', '>', 0)
|
|
21
|
+
.keyBy('id')
|
|
22
|
+
.indexBy('id');
|
|
17
23
|
|
|
18
24
|
const plan = createMutationPlan()
|
|
19
25
|
.forEach(enemies)
|
|
@@ -24,6 +30,175 @@ const result = plan.compilePatch(state);
|
|
|
24
30
|
|
|
25
31
|
The compiled patch contains concrete paths, indexes, and values. Queries are compile-time selectors, not replay-time patch semantics.
|
|
26
32
|
|
|
33
|
+
The public surface is intentionally small: build selectors, build a mutation plan, then compile or commit it. Planner choices, compiler passes, and CRDT lowering stay behind options and result metadata.
|
|
34
|
+
|
|
35
|
+
## Performance
|
|
36
|
+
|
|
37
|
+
Frontier Mutation was measured from this package on Node v26.1.0, darwin arm64. Timings are median microseconds per operation across warmed samples; p95 is shown to make noise visible. Patch bytes are `JSON.stringify(patch)` bytes because this package emits Frontier patches and does not own binary transport encoding.
|
|
38
|
+
|
|
39
|
+
| Fixture | Matches | Strategy | Patch | Bytes | Compile median | Compile p95 | Apply median |
|
|
40
|
+
| --- | ---: | --- | ---: | ---: | ---: | ---: | ---: |
|
|
41
|
+
| Selector increment, 1% sparse 10k-row table | 100 | row-field | 1 op | 1.0 KiB | 3.55 ms | 4.04 ms | 10.35 us |
|
|
42
|
+
| Selector increment, indexed id IN | 100 | row-field | 1 op | 1.0 KiB | 2.84 ms | 3.12 ms | 8.77 us |
|
|
43
|
+
| Selector increment, 10% 10k-row table | 1,000 | row-field | 1 op | 8.5 KiB | 4.10 ms | 4.90 ms | 20.33 us |
|
|
44
|
+
| Repeated arithmetic fold, 1000x | 0 | direct | 1 op | 20 B | 0.45 us | 0.78 us | 0.05 us |
|
|
45
|
+
| Repeated text append fold, 1000x | 0 | direct | 1 op | 1.0 KiB | 0.55 us | 0.72 us | 0.10 us |
|
|
46
|
+
|
|
47
|
+
These are Frontier-only package measurements, not a competitor comparison. Hardware, Node version, selector shape, and table size will affect absolute timings.
|
|
48
|
+
|
|
49
|
+
## API Overview
|
|
50
|
+
|
|
51
|
+
```ts
|
|
52
|
+
import {
|
|
53
|
+
compileMutationPlan,
|
|
54
|
+
commitCrdtMutation,
|
|
55
|
+
commitMutation,
|
|
56
|
+
createMutationPlan,
|
|
57
|
+
createSelectorRegistry,
|
|
58
|
+
select,
|
|
59
|
+
type MutationCompileResult,
|
|
60
|
+
type MutationPlannerDecision,
|
|
61
|
+
type MutationPlanLike,
|
|
62
|
+
type MutationStateEngine
|
|
63
|
+
} from '@shapeshift-labs/frontier-mutation';
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
Core exports:
|
|
67
|
+
|
|
68
|
+
- `select(path)` creates a selector builder for array/object-map rows.
|
|
69
|
+
- `createSelectorRegistry(initial?)` stores reusable named selectors.
|
|
70
|
+
- `createMutationPlan()` creates a fluent mutation plan.
|
|
71
|
+
- `compileMutationPlan(plan, state, options?)` compiles intent into a normal Frontier patch.
|
|
72
|
+
- `commitMutation(stateEngine, plan, options?)` compiles and commits to any state engine with `get()` and `commitPatch()`.
|
|
73
|
+
- `commitCrdtMutation(doc, plan, options?)` lowers safe intent to native CRDT operations when the document supports them.
|
|
74
|
+
|
|
75
|
+
The package has a peer dependency on the core package only. State and CRDT integration use small structural interfaces, so the mutation package does not force the full state or CRDT packages into the core import path.
|
|
76
|
+
|
|
77
|
+
## Selectors
|
|
78
|
+
|
|
79
|
+
Selectors support arrays, object maps, and multiple wildcard segments:
|
|
80
|
+
|
|
81
|
+
```js
|
|
82
|
+
const inNestedRooms = select('/rooms/*/entities/*')
|
|
83
|
+
.where('type', '==', 'enemy')
|
|
84
|
+
.keyBy('id');
|
|
85
|
+
|
|
86
|
+
const byMapKey = select('/entitiesById/*')
|
|
87
|
+
.where('$key', 'in', ['e1', 'e2'])
|
|
88
|
+
.keyBy('$key');
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
`$key` targets the current object-map key and `$index` targets the current array index. `keyBy(path)` controls the stable match key reported in `result.matches`; `indexBy(path)` is a compile-time hint for equality/in selectors on hot entity tables and object maps.
|
|
92
|
+
|
|
93
|
+
Selectors can also make the mutation target deterministic with ordering, limits, and projections:
|
|
94
|
+
|
|
95
|
+
```js
|
|
96
|
+
const strongestEnemy = select('/entities/*')
|
|
97
|
+
.where('type', '==', 'enemy')
|
|
98
|
+
.orderBy('hp', 'desc')
|
|
99
|
+
.first()
|
|
100
|
+
.project('id', 'hp')
|
|
101
|
+
.keyBy('id');
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
`limit(n)` caps matched rows after ordering, `first()` is `limit(1)`, and `project(...)` adds a compact field projection to `result.matches` for diagnostics and agent-readable explanations.
|
|
105
|
+
|
|
106
|
+
Reusable selectors can be named and stored in a registry:
|
|
107
|
+
|
|
108
|
+
```js
|
|
109
|
+
import { createSelectorRegistry } from '@shapeshift-labs/frontier-mutation';
|
|
110
|
+
|
|
111
|
+
const selectors = createSelectorRegistry()
|
|
112
|
+
.define('activeEnemies', enemies.named('activeEnemies'));
|
|
113
|
+
|
|
114
|
+
const plan = createMutationPlan()
|
|
115
|
+
.forEach(selectors.get('activeEnemies'))
|
|
116
|
+
.increment('hp', -5);
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
Selectors can also be scoped with a callback so later operations return to the previous selector:
|
|
120
|
+
|
|
121
|
+
```js
|
|
122
|
+
const plan = createMutationPlan()
|
|
123
|
+
.forEach(enemies, (rows) => {
|
|
124
|
+
rows.increment('hp', -5)
|
|
125
|
+
.append('tags', 'damaged');
|
|
126
|
+
})
|
|
127
|
+
.increment('/turn', 1);
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
`compilePatch()` runs a small planner before it emits the patch. In `auto` mode it chooses between direct patch emission, row-field assignment, dirty-row/dirty-path diffing, and materialize-and-diff fallback based on the mutation shape and selector selectivity.
|
|
131
|
+
|
|
132
|
+
```js
|
|
133
|
+
const result = plan.compilePatch(state, {
|
|
134
|
+
planner: {
|
|
135
|
+
strategy: 'auto',
|
|
136
|
+
schema: {
|
|
137
|
+
tables: [{
|
|
138
|
+
path: '/entities',
|
|
139
|
+
key: 'id',
|
|
140
|
+
stableRowShape: true,
|
|
141
|
+
numericFields: ['hp', 'stats.score'],
|
|
142
|
+
textFields: ['name', 'zoneId'],
|
|
143
|
+
listFields: ['tags'],
|
|
144
|
+
selectorFields: ['id', 'type', 'hp', 'zoneId']
|
|
145
|
+
}]
|
|
146
|
+
},
|
|
147
|
+
dirtyDiffMinSelectivity: 0.75
|
|
148
|
+
}
|
|
149
|
+
});
|
|
150
|
+
|
|
151
|
+
result.decisions;
|
|
152
|
+
// [{ strategy: 'row-field' | 'dirty-diff' | 'direct' | ... }]
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
Strategies can be forced for diagnostics or benchmarking with `direct`, `row-field`, `dirty-diff`, or `materialize-diff`.
|
|
156
|
+
|
|
157
|
+
Schema hints are trusted table/entity contracts. The key field becomes the default selector `keyBy`/`indexBy`, stable row shape lets the planner reuse selector matches across adjacent mutations that do not touch declared selector fields, and known numeric/text/list fields are reported in planner decisions for debugging and downstream specialization.
|
|
158
|
+
|
|
159
|
+
If you already use `createDiffEngine()` with schema, profile, or adaptive settings, pass it as `planner.diffEngine`. The planner will use that engine when it chooses a dirty diff or materialize-and-diff path.
|
|
160
|
+
|
|
161
|
+
## Mutation Operations
|
|
162
|
+
|
|
163
|
+
Plan methods include:
|
|
164
|
+
|
|
165
|
+
- object/value: `set`, `unset`, `remove`, `ensure`, `upsert`, `assign`, `rename`, `copy`, `move`
|
|
166
|
+
- numbers: `increment`, `decrement`, `multiply`, `min`, `max`, `clamp`
|
|
167
|
+
- booleans: `toggle`
|
|
168
|
+
- arrays/lists: `append`, `prepend`, `splice`, `insert`, `removeAt`, `moveItem`, `addToSet`, `pull`, `removeWhere`
|
|
169
|
+
- text: `appendText`, `insertText`, `deleteText`, `replaceText`, `spliceText`, `formatText`
|
|
170
|
+
- guards: `test`, `compareAndSet`
|
|
171
|
+
- control: `forEach`, `where`, `clearSelector`, `transaction`, `repeat`, `explain`
|
|
172
|
+
|
|
173
|
+
Examples:
|
|
174
|
+
|
|
175
|
+
```js
|
|
176
|
+
const plan = createMutationPlan()
|
|
177
|
+
.ensure('/session', { started: true })
|
|
178
|
+
.upsert('/profile', { level: 3 })
|
|
179
|
+
.compareAndSet('/version', 1, 2)
|
|
180
|
+
.insert('/items', 0, { id: 'first' })
|
|
181
|
+
.addToSet('/tags', ['new', 'seen'])
|
|
182
|
+
.replaceText('/title', 0, 5, 'Draft')
|
|
183
|
+
.transaction((tx) => {
|
|
184
|
+
tx.rename('/profile/name', 'label');
|
|
185
|
+
tx.remove('/profile/stale');
|
|
186
|
+
}, { origin: 'agent-edit' });
|
|
187
|
+
|
|
188
|
+
const explanation = plan.explain(state);
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
`test(path, expected)` and `compareAndSet(path, expected, next)` are compile-time guards. If the current state does not match `expected`, compilation throws before a patch or CRDT update is emitted.
|
|
192
|
+
|
|
193
|
+
Compiled results include:
|
|
194
|
+
|
|
195
|
+
- `patch`: the Frontier patch to apply or send
|
|
196
|
+
- `matched`: weighted selector matches
|
|
197
|
+
- `lowered`: lowering notes for diagnostics
|
|
198
|
+
- `dirtyPaths` / `dirtyRows`: locality passed to diff planning
|
|
199
|
+
- `matches`: selector matches with resolved paths
|
|
200
|
+
- `decisions`: planner choices and reasons
|
|
201
|
+
|
|
27
202
|
Adjacent arithmetic and repeated calls are folded where Frontier can represent the result compactly:
|
|
28
203
|
|
|
29
204
|
```js
|
|
@@ -35,11 +210,41 @@ plan.compilePatch({ count: 0 }).patch;
|
|
|
35
210
|
// [[OP_SET, ['count'], 50]]
|
|
36
211
|
```
|
|
37
212
|
|
|
213
|
+
The compiler also folds adjacent compatible operations before lowering:
|
|
214
|
+
|
|
215
|
+
- arithmetic runs such as `+1, +2, -1` become one `+2`
|
|
216
|
+
- repeated list appends and text appends become one append operation
|
|
217
|
+
- statically empty repeats and even toggle repeats are removed
|
|
218
|
+
- selector operations can merge only when the mutation cannot affect selector membership
|
|
219
|
+
|
|
220
|
+
Selector row-field batching still checks the resolved row set at compile time. If a selector-targeted mutation changes which rows match the next operation, the compiler leaves a barrier and emits separate row-field frontiers.
|
|
221
|
+
|
|
38
222
|
State engines and CRDT documents can be committed directly:
|
|
39
223
|
|
|
40
224
|
```js
|
|
41
225
|
import { commitCrdtMutation, commitMutation } from '@shapeshift-labs/frontier-mutation';
|
|
42
226
|
|
|
43
227
|
commitMutation(stateEngine, plan);
|
|
44
|
-
|
|
228
|
+
plan.commit(stateEngine);
|
|
229
|
+
|
|
230
|
+
commitCrdtMutation(doc, plan, {
|
|
231
|
+
planner: {
|
|
232
|
+
crdt: 'auto',
|
|
233
|
+
crdtAssignmentPolicy: 'preserve-conflicts',
|
|
234
|
+
crdtMetadata: { source: 'combat-system' }
|
|
235
|
+
}
|
|
236
|
+
});
|
|
237
|
+
plan.commitCrdt(doc);
|
|
45
238
|
```
|
|
239
|
+
|
|
240
|
+
CRDT commits lower intent to native operations when that is semantically safe:
|
|
241
|
+
|
|
242
|
+
- arithmetic becomes native counters
|
|
243
|
+
- list appends, inserts, removes, moves, and splices become native list operations
|
|
244
|
+
- text appends, inserts, deletes, replaces, and safe text splices become native text operations
|
|
245
|
+
- object field updates can become map field assignments instead of whole-object replacement
|
|
246
|
+
- deletes can become native CRDT tombstones
|
|
247
|
+
|
|
248
|
+
`crdtAssignmentPolicy` controls assignment lowering. `preserve-conflicts` keeps object updates at field granularity so concurrent same-field register conflicts remain inspectable and resolvable. `last-write-wins` and `materialize` keep the older whole-value materialization behavior for assignment-shaped operations.
|
|
249
|
+
|
|
250
|
+
`crdtMetadata` is passed through Frontier's durable CRDT update metadata. The returned `crdtDecisions` list also includes per-operation debug metadata with the chosen strategy, reason, path, repeat count, and operation size summary.
|
package/dist/index.d.ts
CHANGED
|
@@ -1,8 +1,47 @@
|
|
|
1
|
-
import { type JsonObject, type JsonPath, type JsonValue, type ObjectKey, type Patch } from '@shapeshift-labs/frontier';
|
|
2
|
-
import type { StateEngine } from '@shapeshift-labs/frontier/state';
|
|
3
|
-
import type { CrdtCommitResult, CrdtDocument } from '@shapeshift-labs/frontier/crdt';
|
|
1
|
+
import { type DiffOptions, type JsonObject, type JsonPath, type JsonValue, type ObjectKey, type Patch } from '@shapeshift-labs/frontier';
|
|
4
2
|
export type MutationPath = string | JsonPath;
|
|
3
|
+
export interface MutationStateEngine {
|
|
4
|
+
get(): JsonValue;
|
|
5
|
+
commitPatch(patch: Patch): unknown;
|
|
6
|
+
}
|
|
7
|
+
export type MutationCrdtCommit = unknown;
|
|
8
|
+
export interface MutationCrdtDocument {
|
|
9
|
+
toJSON(): JsonValue;
|
|
10
|
+
change(callback: (tx: MutationCrdtTransaction) => void, options?: {
|
|
11
|
+
metadata?: JsonObject;
|
|
12
|
+
}): MutationCrdtCommit;
|
|
13
|
+
changesSince(frontier: null | JsonValue): Array<{
|
|
14
|
+
type: string;
|
|
15
|
+
path: JsonPath;
|
|
16
|
+
keys?: string[];
|
|
17
|
+
}>;
|
|
18
|
+
}
|
|
19
|
+
export interface MutationCrdtCounterHandle {
|
|
20
|
+
increment(delta: number): void;
|
|
21
|
+
decrement(delta: number): void;
|
|
22
|
+
}
|
|
23
|
+
export interface MutationCrdtTextHandle {
|
|
24
|
+
insert(index: number, text: string): void;
|
|
25
|
+
splice(index: number, deleteCount: number, text?: string): void;
|
|
26
|
+
}
|
|
27
|
+
export interface MutationCrdtListHandle {
|
|
28
|
+
insert(index: number, values: JsonValue[]): void;
|
|
29
|
+
delete(index: number, count?: number): void;
|
|
30
|
+
move(fromIndex: number, toIndex: number, count?: number): void;
|
|
31
|
+
}
|
|
32
|
+
export interface MutationCrdtMapHandle {
|
|
33
|
+
set(key: ObjectKey, value: JsonValue): void;
|
|
34
|
+
}
|
|
35
|
+
export interface MutationCrdtTransaction {
|
|
36
|
+
set(path: JsonPath, value: JsonValue): void;
|
|
37
|
+
delete(path: JsonPath): void;
|
|
38
|
+
counter(path: JsonPath): MutationCrdtCounterHandle;
|
|
39
|
+
text(path: JsonPath): MutationCrdtTextHandle;
|
|
40
|
+
list(path: JsonPath): MutationCrdtListHandle;
|
|
41
|
+
map(path: JsonPath): MutationCrdtMapHandle;
|
|
42
|
+
}
|
|
5
43
|
export type SelectorOperator = '==' | 'eq' | '!=' | 'neq' | '>' | 'gt' | '>=' | 'gte' | '<' | 'lt' | '<=' | 'lte' | 'in' | 'exists';
|
|
44
|
+
export type SelectorOrderDirection = 'asc' | 'desc';
|
|
6
45
|
export type SelectorCondition = {
|
|
7
46
|
field: MutationPath;
|
|
8
47
|
op?: SelectorOperator;
|
|
@@ -22,30 +61,141 @@ export type SelectorCondition = {
|
|
|
22
61
|
} | {
|
|
23
62
|
not: SelectorCondition;
|
|
24
63
|
};
|
|
25
|
-
export type MutationOperationKind = 'set' | 'assign' | 'increment' | 'decrement' | 'toggle' | 'append' | 'splice' | 'appendText' | 'spliceText';
|
|
64
|
+
export type MutationOperationKind = 'set' | 'unset' | 'remove' | 'ensure' | 'upsert' | 'assign' | 'increment' | 'decrement' | 'multiply' | 'min' | 'max' | 'clamp' | 'toggle' | 'append' | 'prepend' | 'splice' | 'insert' | 'removeAt' | 'moveItem' | 'addToSet' | 'pull' | 'removeWhere' | 'appendText' | 'spliceText' | 'insertText' | 'deleteText' | 'replaceText' | 'formatText' | 'move' | 'copy' | 'rename' | 'test' | 'compareAndSet';
|
|
65
|
+
export type MutationValueFactory = (current: JsonValue | undefined, path: JsonPath) => JsonValue;
|
|
66
|
+
export type MutationArrayPredicate = (value: JsonValue, index: number, array: readonly JsonValue[]) => boolean;
|
|
67
|
+
export interface MutationTransactionOptions {
|
|
68
|
+
origin?: string;
|
|
69
|
+
metadata?: JsonObject;
|
|
70
|
+
timestamp?: number;
|
|
71
|
+
}
|
|
72
|
+
export interface MutationTransactionInfo {
|
|
73
|
+
origin?: string;
|
|
74
|
+
metadata?: JsonObject;
|
|
75
|
+
timestamp?: number;
|
|
76
|
+
}
|
|
26
77
|
export interface SelectorPlan {
|
|
27
78
|
path: JsonPath;
|
|
28
79
|
conditions: SelectorCondition[];
|
|
29
|
-
keyBy?:
|
|
80
|
+
keyBy?: JsonPath;
|
|
81
|
+
indexBy?: JsonPath;
|
|
82
|
+
orderBy?: {
|
|
83
|
+
path: JsonPath;
|
|
84
|
+
direction: SelectorOrderDirection;
|
|
85
|
+
};
|
|
86
|
+
limit?: number;
|
|
87
|
+
project?: JsonPath[];
|
|
88
|
+
name?: string;
|
|
89
|
+
}
|
|
90
|
+
export interface MutationTableSchema {
|
|
91
|
+
/** Path to an array table or object-map table, without the wildcard segment. */
|
|
92
|
+
path: MutationPath;
|
|
93
|
+
/** Stable row identity field. Used as default keyBy/indexBy for selectors over this table. */
|
|
94
|
+
key?: MutationPath;
|
|
95
|
+
/** Trusted claim that row objects have a stable field layout. */
|
|
96
|
+
stableRowShape?: boolean;
|
|
97
|
+
/** Fields known to contain numbers. */
|
|
98
|
+
numericFields?: MutationPath[];
|
|
99
|
+
/** Fields known to contain strings. */
|
|
100
|
+
textFields?: MutationPath[];
|
|
101
|
+
/** Fields known to contain arrays/lists. */
|
|
102
|
+
listFields?: MutationPath[];
|
|
103
|
+
/** Fields expected to participate in selector predicates for this table. */
|
|
104
|
+
selectorFields?: MutationPath[];
|
|
105
|
+
}
|
|
106
|
+
export interface MutationShapeSchema {
|
|
107
|
+
tables?: MutationTableSchema[];
|
|
108
|
+
/** Alias for table-like entity collections. */
|
|
109
|
+
entities?: MutationTableSchema[];
|
|
30
110
|
}
|
|
111
|
+
export type MutationSchemaInput = MutationShapeSchema | MutationTableSchema[];
|
|
31
112
|
export interface MutationOperation {
|
|
32
113
|
kind: MutationOperationKind;
|
|
33
114
|
path: JsonPath;
|
|
115
|
+
to?: JsonPath;
|
|
116
|
+
key?: ObjectKey;
|
|
34
117
|
value?: JsonValue;
|
|
118
|
+
expected?: JsonValue;
|
|
35
119
|
values?: JsonValue[];
|
|
120
|
+
factory?: MutationValueFactory;
|
|
121
|
+
predicate?: MutationArrayPredicate;
|
|
36
122
|
start?: number;
|
|
123
|
+
toIndex?: number;
|
|
37
124
|
deleteCount?: number;
|
|
125
|
+
length?: number;
|
|
38
126
|
text?: string;
|
|
127
|
+
attributes?: JsonObject;
|
|
39
128
|
delta?: number;
|
|
129
|
+
min?: number;
|
|
130
|
+
max?: number;
|
|
40
131
|
repeat: number;
|
|
41
132
|
selector?: SelectorPlan;
|
|
133
|
+
transaction?: MutationTransactionInfo;
|
|
42
134
|
}
|
|
43
135
|
export interface MutationCompileOptions {
|
|
44
136
|
compact?: boolean;
|
|
137
|
+
strategy?: MutationPatchStrategy;
|
|
138
|
+
diff?: DiffOptions;
|
|
139
|
+
planner?: MutationPlannerOptions;
|
|
140
|
+
}
|
|
141
|
+
export type MutationPatchStrategy = 'auto' | 'direct' | 'row-field' | 'dirty-diff' | 'materialize-diff';
|
|
142
|
+
export type MutationPlannerDecisionStrategy = 'direct' | 'row-field' | 'dirty-diff' | 'materialize-diff' | 'noop';
|
|
143
|
+
export type MutationCrdtStrategy = 'auto' | 'native' | 'materialize';
|
|
144
|
+
export type MutationCrdtDecisionStrategy = 'native-counter' | 'native-text' | 'native-text-splice' | 'native-list' | 'native-map-field' | 'native-delete' | 'materialized-set' | 'noop';
|
|
145
|
+
export type MutationCrdtAssignmentPolicy = 'preserve-conflicts' | 'last-write-wins' | 'materialize';
|
|
146
|
+
export interface MutationDiffEngine {
|
|
147
|
+
diff(source: JsonValue, target: JsonValue, options?: DiffOptions): Patch;
|
|
148
|
+
}
|
|
149
|
+
export interface MutationPlannerOptions {
|
|
150
|
+
strategy?: MutationPatchStrategy;
|
|
151
|
+
crdt?: MutationCrdtStrategy;
|
|
152
|
+
crdtAssignmentPolicy?: MutationCrdtAssignmentPolicy;
|
|
153
|
+
crdtMetadata?: JsonObject;
|
|
154
|
+
schema?: MutationSchemaInput;
|
|
155
|
+
diff?: DiffOptions;
|
|
156
|
+
diffEngine?: MutationDiffEngine;
|
|
157
|
+
dirtyDiffMinSelectivity?: number;
|
|
158
|
+
}
|
|
159
|
+
export interface MutationDirtyRowsFrontier {
|
|
160
|
+
path: JsonPath;
|
|
161
|
+
rows: number[];
|
|
162
|
+
fields?: JsonPath[];
|
|
163
|
+
}
|
|
164
|
+
export interface MutationPlannerDecision {
|
|
165
|
+
strategy: MutationPlannerDecisionStrategy;
|
|
166
|
+
reason: string;
|
|
167
|
+
kind: MutationOperationKind;
|
|
168
|
+
path: JsonPath;
|
|
169
|
+
selectorPath?: JsonPath;
|
|
170
|
+
matched?: number;
|
|
171
|
+
collectionSize?: number;
|
|
172
|
+
selectivity?: number | null;
|
|
173
|
+
dirtyPaths?: JsonPath[];
|
|
174
|
+
dirtyRows?: MutationDirtyRowsFrontier[];
|
|
175
|
+
schema?: MutationPlannerSchemaDecision;
|
|
176
|
+
}
|
|
177
|
+
export interface MutationPlannerSchemaDecision {
|
|
178
|
+
tablePath: JsonPath;
|
|
179
|
+
key?: JsonPath;
|
|
180
|
+
stableRowShape: boolean;
|
|
181
|
+
fieldKind?: 'numeric' | 'text' | 'list';
|
|
182
|
+
selectorCached?: boolean;
|
|
183
|
+
selectorIndexed?: boolean;
|
|
184
|
+
}
|
|
185
|
+
export interface MutationCrdtPlannerDecision {
|
|
186
|
+
strategy: MutationCrdtDecisionStrategy;
|
|
187
|
+
reason: string;
|
|
188
|
+
kind: MutationOperationKind;
|
|
189
|
+
path: JsonPath;
|
|
190
|
+
selectorPath?: JsonPath;
|
|
191
|
+
native: boolean;
|
|
192
|
+
assignmentPolicy?: MutationCrdtAssignmentPolicy;
|
|
193
|
+
metadata?: JsonObject;
|
|
45
194
|
}
|
|
46
195
|
export interface MutationSelectorMatch {
|
|
47
196
|
path: JsonPath;
|
|
48
197
|
row: ObjectKey;
|
|
198
|
+
projection?: JsonObject;
|
|
49
199
|
}
|
|
50
200
|
export interface MutationCompileResult {
|
|
51
201
|
patch: Patch;
|
|
@@ -59,14 +209,23 @@ export interface MutationCompileResult {
|
|
|
59
209
|
}>;
|
|
60
210
|
warnings: string[];
|
|
61
211
|
matches: MutationSelectorMatch[];
|
|
212
|
+
decisions: MutationPlannerDecision[];
|
|
213
|
+
}
|
|
214
|
+
export interface MutationPlanExplanation extends MutationCompileResult {
|
|
215
|
+
operations: MutationOperation[];
|
|
216
|
+
operationCount: number;
|
|
217
|
+
patchOperationCount: number;
|
|
62
218
|
}
|
|
63
219
|
export interface MutationCrdtCommitResult extends MutationCompileResult {
|
|
64
|
-
commit:
|
|
220
|
+
commit: MutationCrdtCommit;
|
|
221
|
+
crdtDecisions: MutationCrdtPlannerDecision[];
|
|
65
222
|
}
|
|
66
223
|
export interface MutationPlanLike {
|
|
67
224
|
readonly operations: readonly MutationOperation[];
|
|
68
225
|
compilePatch(state: JsonValue | undefined, options?: MutationCompileOptions): MutationCompileResult;
|
|
69
226
|
}
|
|
227
|
+
export type MutationPlanScope = (plan: MutationPlan) => void;
|
|
228
|
+
type SelectorRegistryInit = Record<string, SelectorBuilder | SelectorPlan> | Iterable<readonly [string, SelectorBuilder | SelectorPlan]>;
|
|
70
229
|
export declare class SelectorBuilder {
|
|
71
230
|
private readonly plan;
|
|
72
231
|
constructor(path: MutationPath);
|
|
@@ -74,32 +233,77 @@ export declare class SelectorBuilder {
|
|
|
74
233
|
and(fieldOrCondition: MutationPath | SelectorCondition, op?: SelectorOperator, value?: JsonValue | JsonValue[]): this;
|
|
75
234
|
or(...conditions: SelectorCondition[]): this;
|
|
76
235
|
not(condition: SelectorCondition): this;
|
|
77
|
-
keyBy(key:
|
|
236
|
+
keyBy(key: MutationPath): this;
|
|
237
|
+
indexBy(key?: MutationPath): this;
|
|
238
|
+
orderBy(path: MutationPath, direction?: SelectorOrderDirection): this;
|
|
239
|
+
limit(count: number): this;
|
|
240
|
+
first(): this;
|
|
241
|
+
project(...fields: MutationPath[]): this;
|
|
242
|
+
named(name: string): this;
|
|
78
243
|
toPlan(): SelectorPlan;
|
|
79
244
|
}
|
|
245
|
+
export declare class SelectorRegistry {
|
|
246
|
+
private readonly selectors;
|
|
247
|
+
constructor(initial?: SelectorRegistryInit);
|
|
248
|
+
define(name: string, selector: SelectorBuilder | SelectorPlan): this;
|
|
249
|
+
get(name: string): SelectorPlan;
|
|
250
|
+
has(name: string): boolean;
|
|
251
|
+
entries(): Array<[string, SelectorPlan]>;
|
|
252
|
+
}
|
|
80
253
|
export declare class MutationPlan implements MutationPlanLike {
|
|
81
254
|
private readonly ops;
|
|
82
255
|
private currentSelector;
|
|
256
|
+
private readonly transactionStack;
|
|
83
257
|
get operations(): readonly MutationOperation[];
|
|
84
|
-
forEach(selector: SelectorBuilder | SelectorPlan): this;
|
|
258
|
+
forEach(selector: SelectorBuilder | SelectorPlan, scope?: MutationPlanScope): this;
|
|
85
259
|
where(path: MutationPath, condition?: SelectorCondition): this;
|
|
86
260
|
clearSelector(): this;
|
|
87
261
|
set(path: MutationPath, value: JsonValue): this;
|
|
262
|
+
unset(path: MutationPath): this;
|
|
263
|
+
remove(path: MutationPath): this;
|
|
264
|
+
ensure(path: MutationPath, defaultValue: JsonValue | MutationValueFactory): this;
|
|
265
|
+
upsert(path: MutationPath, value: JsonValue | MutationValueFactory): this;
|
|
88
266
|
assign(path: MutationPath, value: JsonObject): this;
|
|
89
267
|
increment(path: MutationPath, delta?: number): this;
|
|
90
268
|
decrement(path: MutationPath, delta?: number): this;
|
|
269
|
+
multiply(path: MutationPath, factor: number): this;
|
|
270
|
+
min(path: MutationPath, value: number): this;
|
|
271
|
+
max(path: MutationPath, value: number): this;
|
|
272
|
+
clamp(path: MutationPath, min: number, max: number): this;
|
|
91
273
|
toggle(path: MutationPath): this;
|
|
92
274
|
append(path: MutationPath, values: JsonValue | JsonValue[]): this;
|
|
275
|
+
prepend(path: MutationPath, values: JsonValue | JsonValue[]): this;
|
|
93
276
|
splice(path: MutationPath, start: number, deleteCount: number, values?: JsonValue[]): this;
|
|
277
|
+
insert(path: MutationPath, index: number, values: JsonValue | JsonValue[]): this;
|
|
278
|
+
removeAt(path: MutationPath, index: number, count?: number): this;
|
|
279
|
+
moveItem(path: MutationPath, fromIndex: number, toIndex: number, count?: number): this;
|
|
280
|
+
addToSet(path: MutationPath, values: JsonValue | JsonValue[]): this;
|
|
281
|
+
pull(path: MutationPath, values: JsonValue | JsonValue[]): this;
|
|
282
|
+
removeWhere(path: MutationPath, predicate: MutationArrayPredicate): this;
|
|
94
283
|
appendText(path: MutationPath, text: string): this;
|
|
95
284
|
spliceText(path: MutationPath, start: number, deleteCount: number, text?: string): this;
|
|
285
|
+
insertText(path: MutationPath, index: number, text: string): this;
|
|
286
|
+
deleteText(path: MutationPath, index: number, count: number): this;
|
|
287
|
+
replaceText(path: MutationPath, index: number, count: number, text: string): this;
|
|
288
|
+
formatText(path: MutationPath, index: number, length: number, attributes: JsonObject): this;
|
|
289
|
+
move(from: MutationPath, to: MutationPath): this;
|
|
290
|
+
copy(from: MutationPath, to: MutationPath): this;
|
|
291
|
+
rename(path: MutationPath, newKey: ObjectKey): this;
|
|
292
|
+
test(path: MutationPath, expected: JsonValue): this;
|
|
293
|
+
compareAndSet(path: MutationPath, expected: JsonValue, next: JsonValue | MutationValueFactory): this;
|
|
294
|
+
transaction(scope: MutationPlanScope, options?: MutationTransactionOptions): this;
|
|
96
295
|
repeat(count: number): this;
|
|
97
296
|
compilePatch(state: JsonValue | undefined, options?: MutationCompileOptions): MutationCompileResult;
|
|
297
|
+
commit(state: MutationStateEngine, options?: MutationCompileOptions): MutationCompileResult;
|
|
298
|
+
commitCrdt(doc: MutationCrdtDocument, options?: MutationCompileOptions): MutationCrdtCommitResult;
|
|
299
|
+
explain(state: JsonValue | undefined, options?: MutationCompileOptions): MutationPlanExplanation;
|
|
98
300
|
private push;
|
|
99
301
|
}
|
|
100
302
|
export declare function select(path: MutationPath): SelectorBuilder;
|
|
101
303
|
export declare function createMutationPlan(): MutationPlan;
|
|
304
|
+
export declare function createSelectorRegistry(initial?: SelectorRegistryInit): SelectorRegistry;
|
|
102
305
|
export declare function compileMutationPlan(plan: MutationPlanLike, state: JsonValue | undefined, options?: MutationCompileOptions): MutationCompileResult;
|
|
103
|
-
export declare function commitMutation(state:
|
|
104
|
-
export declare function commitCrdtMutation(doc:
|
|
306
|
+
export declare function commitMutation(state: MutationStateEngine, plan: MutationPlanLike, options?: MutationCompileOptions): MutationCompileResult;
|
|
307
|
+
export declare function commitCrdtMutation(doc: MutationCrdtDocument, plan: MutationPlanLike, options?: MutationCompileOptions): MutationCrdtCommitResult;
|
|
308
|
+
export {};
|
|
105
309
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|