@shapeshift-labs/frontier-mutation 0.1.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 ADDED
@@ -0,0 +1,45 @@
1
+ # Frontier Mutation
2
+
3
+ Explicit mutation and selector plans for Frontier.
4
+
5
+ ```sh
6
+ npm install @shapeshift-labs/frontier @shapeshift-labs/frontier-mutation
7
+ ```
8
+
9
+ `@shapeshift-labs/frontier-mutation` keeps intent above Frontier's concrete patch layer. A mutation plan can express operations such as increments, toggles, text/list appends, and selector-targeted row updates, then compile them into ordinary Frontier patches.
10
+
11
+ ```js
12
+ import { createMutationPlan, select } from '@shapeshift-labs/frontier-mutation';
13
+
14
+ const enemies = select('/entities/*')
15
+ .where('type', '==', 'enemy')
16
+ .and('hp', '>', 0);
17
+
18
+ const plan = createMutationPlan()
19
+ .forEach(enemies)
20
+ .increment('hp', -5);
21
+
22
+ const result = plan.compilePatch(state);
23
+ ```
24
+
25
+ The compiled patch contains concrete paths, indexes, and values. Queries are compile-time selectors, not replay-time patch semantics.
26
+
27
+ Adjacent arithmetic and repeated calls are folded where Frontier can represent the result compactly:
28
+
29
+ ```js
30
+ const plan = createMutationPlan()
31
+ .increment('/count', 5)
32
+ .repeat(10);
33
+
34
+ plan.compilePatch({ count: 0 }).patch;
35
+ // [[OP_SET, ['count'], 50]]
36
+ ```
37
+
38
+ State engines and CRDT documents can be committed directly:
39
+
40
+ ```js
41
+ import { commitCrdtMutation, commitMutation } from '@shapeshift-labs/frontier-mutation';
42
+
43
+ commitMutation(stateEngine, plan);
44
+ commitCrdtMutation(doc, plan);
45
+ ```
@@ -0,0 +1,105 @@
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';
4
+ export type MutationPath = string | JsonPath;
5
+ export type SelectorOperator = '==' | 'eq' | '!=' | 'neq' | '>' | 'gt' | '>=' | 'gte' | '<' | 'lt' | '<=' | 'lte' | 'in' | 'exists';
6
+ export type SelectorCondition = {
7
+ field: MutationPath;
8
+ op?: SelectorOperator;
9
+ value?: JsonValue | JsonValue[];
10
+ eq?: JsonValue;
11
+ neq?: JsonValue;
12
+ gt?: number;
13
+ gte?: number;
14
+ lt?: number;
15
+ lte?: number;
16
+ in?: JsonValue[];
17
+ exists?: boolean;
18
+ } | {
19
+ and: SelectorCondition[];
20
+ } | {
21
+ or: SelectorCondition[];
22
+ } | {
23
+ not: SelectorCondition;
24
+ };
25
+ export type MutationOperationKind = 'set' | 'assign' | 'increment' | 'decrement' | 'toggle' | 'append' | 'splice' | 'appendText' | 'spliceText';
26
+ export interface SelectorPlan {
27
+ path: JsonPath;
28
+ conditions: SelectorCondition[];
29
+ keyBy?: ObjectKey;
30
+ }
31
+ export interface MutationOperation {
32
+ kind: MutationOperationKind;
33
+ path: JsonPath;
34
+ value?: JsonValue;
35
+ values?: JsonValue[];
36
+ start?: number;
37
+ deleteCount?: number;
38
+ text?: string;
39
+ delta?: number;
40
+ repeat: number;
41
+ selector?: SelectorPlan;
42
+ }
43
+ export interface MutationCompileOptions {
44
+ compact?: boolean;
45
+ }
46
+ export interface MutationSelectorMatch {
47
+ path: JsonPath;
48
+ row: ObjectKey;
49
+ }
50
+ export interface MutationCompileResult {
51
+ patch: Patch;
52
+ matched: number;
53
+ lowered: string[];
54
+ dirtyPaths: JsonPath[];
55
+ dirtyRows: Array<{
56
+ path: JsonPath;
57
+ rows: number[];
58
+ fields: JsonPath[];
59
+ }>;
60
+ warnings: string[];
61
+ matches: MutationSelectorMatch[];
62
+ }
63
+ export interface MutationCrdtCommitResult extends MutationCompileResult {
64
+ commit: CrdtCommitResult;
65
+ }
66
+ export interface MutationPlanLike {
67
+ readonly operations: readonly MutationOperation[];
68
+ compilePatch(state: JsonValue | undefined, options?: MutationCompileOptions): MutationCompileResult;
69
+ }
70
+ export declare class SelectorBuilder {
71
+ private readonly plan;
72
+ constructor(path: MutationPath);
73
+ where(fieldOrCondition: MutationPath | SelectorCondition, op?: SelectorOperator, value?: JsonValue | JsonValue[]): this;
74
+ and(fieldOrCondition: MutationPath | SelectorCondition, op?: SelectorOperator, value?: JsonValue | JsonValue[]): this;
75
+ or(...conditions: SelectorCondition[]): this;
76
+ not(condition: SelectorCondition): this;
77
+ keyBy(key: ObjectKey): this;
78
+ toPlan(): SelectorPlan;
79
+ }
80
+ export declare class MutationPlan implements MutationPlanLike {
81
+ private readonly ops;
82
+ private currentSelector;
83
+ get operations(): readonly MutationOperation[];
84
+ forEach(selector: SelectorBuilder | SelectorPlan): this;
85
+ where(path: MutationPath, condition?: SelectorCondition): this;
86
+ clearSelector(): this;
87
+ set(path: MutationPath, value: JsonValue): this;
88
+ assign(path: MutationPath, value: JsonObject): this;
89
+ increment(path: MutationPath, delta?: number): this;
90
+ decrement(path: MutationPath, delta?: number): this;
91
+ toggle(path: MutationPath): this;
92
+ append(path: MutationPath, values: JsonValue | JsonValue[]): this;
93
+ splice(path: MutationPath, start: number, deleteCount: number, values?: JsonValue[]): this;
94
+ appendText(path: MutationPath, text: string): this;
95
+ spliceText(path: MutationPath, start: number, deleteCount: number, text?: string): this;
96
+ repeat(count: number): this;
97
+ compilePatch(state: JsonValue | undefined, options?: MutationCompileOptions): MutationCompileResult;
98
+ private push;
99
+ }
100
+ export declare function select(path: MutationPath): SelectorBuilder;
101
+ export declare function createMutationPlan(): MutationPlan;
102
+ export declare function compileMutationPlan(plan: MutationPlanLike, state: JsonValue | undefined, options?: MutationCompileOptions): MutationCompileResult;
103
+ export declare function commitMutation(state: StateEngine, plan: MutationPlanLike, options?: MutationCompileOptions): MutationCompileResult;
104
+ export declare function commitCrdtMutation(doc: CrdtDocument, plan: MutationPlanLike, options?: MutationCompileOptions): MutationCrdtCommitResult;
105
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js ADDED
@@ -0,0 +1,749 @@
1
+ import { OP_APPEND, OP_ARRAY_OBJECT_FIELD_ASSIGN, OP_ASSIGN, OP_SET, OP_STRING_SPLICE, applyPatch, cloneJson, getPath, parsePointer } from '@shapeshift-labs/frontier';
2
+ export class SelectorBuilder {
3
+ plan;
4
+ constructor(path) {
5
+ this.plan = {
6
+ path: normalizePath(path, 'selector path'),
7
+ conditions: []
8
+ };
9
+ }
10
+ where(fieldOrCondition, op, value) {
11
+ this.plan.conditions.push(readCondition(fieldOrCondition, op, value));
12
+ return this;
13
+ }
14
+ and(fieldOrCondition, op, value) {
15
+ return this.where(fieldOrCondition, op, value);
16
+ }
17
+ or(...conditions) {
18
+ if (conditions.length === 0)
19
+ throw new TypeError('or() requires at least one condition');
20
+ this.plan.conditions.push({ or: conditions });
21
+ return this;
22
+ }
23
+ not(condition) {
24
+ this.plan.conditions.push({ not: condition });
25
+ return this;
26
+ }
27
+ keyBy(key) {
28
+ this.plan.keyBy = key;
29
+ return this;
30
+ }
31
+ toPlan() {
32
+ return cloneSelectorPlan(this.plan);
33
+ }
34
+ }
35
+ export class MutationPlan {
36
+ ops = [];
37
+ currentSelector;
38
+ get operations() {
39
+ return this.ops;
40
+ }
41
+ forEach(selector) {
42
+ this.currentSelector = selector instanceof SelectorBuilder ? selector.toPlan() : cloneSelectorPlan(selector);
43
+ return this;
44
+ }
45
+ where(path, condition) {
46
+ const selector = new SelectorBuilder(path);
47
+ if (condition !== undefined)
48
+ selector.where(condition);
49
+ return this.forEach(selector);
50
+ }
51
+ clearSelector() {
52
+ this.currentSelector = undefined;
53
+ return this;
54
+ }
55
+ set(path, value) {
56
+ return this.push({ kind: 'set', path: normalizePath(path, 'set path'), value, repeat: 1 });
57
+ }
58
+ assign(path, value) {
59
+ return this.push({ kind: 'assign', path: normalizePath(path, 'assign path'), value, repeat: 1 });
60
+ }
61
+ increment(path, delta = 1) {
62
+ return this.push({ kind: 'increment', path: normalizePath(path, 'increment path'), delta: normalizeInteger(delta, 'increment delta'), repeat: 1 });
63
+ }
64
+ decrement(path, delta = 1) {
65
+ return this.push({ kind: 'decrement', path: normalizePath(path, 'decrement path'), delta: normalizeInteger(delta, 'decrement delta'), repeat: 1 });
66
+ }
67
+ toggle(path) {
68
+ return this.push({ kind: 'toggle', path: normalizePath(path, 'toggle path'), repeat: 1 });
69
+ }
70
+ append(path, values) {
71
+ const normalizedValues = Array.isArray(values) ? values : [values];
72
+ return this.push({ kind: 'append', path: normalizePath(path, 'append path'), values: normalizedValues, repeat: 1 });
73
+ }
74
+ splice(path, start, deleteCount, values = []) {
75
+ return this.push({
76
+ kind: 'splice',
77
+ path: normalizePath(path, 'splice path'),
78
+ start: normalizeIndex(start, 'splice start'),
79
+ deleteCount: normalizeIndex(deleteCount, 'splice deleteCount'),
80
+ values,
81
+ repeat: 1
82
+ });
83
+ }
84
+ appendText(path, text) {
85
+ if (typeof text !== 'string')
86
+ throw new TypeError('appendText text must be a string');
87
+ return this.push({ kind: 'appendText', path: normalizePath(path, 'appendText path'), text, repeat: 1 });
88
+ }
89
+ spliceText(path, start, deleteCount, text = '') {
90
+ if (typeof text !== 'string')
91
+ throw new TypeError('spliceText text must be a string');
92
+ return this.push({
93
+ kind: 'spliceText',
94
+ path: normalizePath(path, 'spliceText path'),
95
+ start: normalizeIndex(start, 'spliceText start'),
96
+ deleteCount: normalizeIndex(deleteCount, 'spliceText deleteCount'),
97
+ text,
98
+ repeat: 1
99
+ });
100
+ }
101
+ repeat(count) {
102
+ const repeat = normalizeIndex(count, 'repeat count');
103
+ if (this.ops.length === 0)
104
+ throw new TypeError('repeat() requires a previous mutation operation');
105
+ this.ops[this.ops.length - 1] = { ...this.ops[this.ops.length - 1], repeat };
106
+ return this;
107
+ }
108
+ compilePatch(state, options = {}) {
109
+ return compileMutationPlan(this, state, options);
110
+ }
111
+ push(op) {
112
+ this.ops.push(this.currentSelector === undefined ? op : { ...op, selector: cloneSelectorPlan(this.currentSelector) });
113
+ return this;
114
+ }
115
+ }
116
+ export function select(path) {
117
+ return new SelectorBuilder(path);
118
+ }
119
+ export function createMutationPlan() {
120
+ return new MutationPlan();
121
+ }
122
+ export function compileMutationPlan(plan, state, options = {}) {
123
+ const source = state === undefined ? null : state;
124
+ let working = cloneJson(source);
125
+ const patch = [];
126
+ const lowered = [];
127
+ const dirtyPaths = [];
128
+ const dirtyRows = [];
129
+ const warnings = [];
130
+ const matchesOut = [];
131
+ const pendingRows = [];
132
+ let matched = 0;
133
+ for (const rawOp of plan.operations) {
134
+ const op = normalizeOperation(rawOp);
135
+ if (op.repeat === 0 || isNoopRepeat(op)) {
136
+ lowered.push(op.kind + '-repeat-noop');
137
+ continue;
138
+ }
139
+ if (op.selector !== undefined) {
140
+ const context = resolveSelector(working, op.selector);
141
+ matched += context.matches.length;
142
+ for (const match of context.matches)
143
+ matchesOut.push({ path: match.path.slice(), row: match.key });
144
+ if (context.matches.length === 0) {
145
+ lowered.push(op.kind + '-selector-empty');
146
+ continue;
147
+ }
148
+ if (Array.isArray(context.collection) &&
149
+ context.tailPath.length === 0 &&
150
+ canUseRowFieldAssign(op)) {
151
+ if (hasIncompatiblePendingRows(pendingRows, context))
152
+ flushPendingRows(pendingRows, patch, dirtyRows);
153
+ working = queueRowFieldMutation(pendingRows, context, op, working);
154
+ lowered.push(op.kind + '-selector-row-field');
155
+ }
156
+ else {
157
+ flushPendingRows(pendingRows, patch, dirtyRows);
158
+ for (const match of context.matches) {
159
+ const absolutePath = match.path.concat(op.path);
160
+ const patchStart = patch.length;
161
+ emitAbsoluteMutation(working, absolutePath, op, patch, lowered, warnings);
162
+ working = applyPatchOperationsToWorking(working, patch, patchStart);
163
+ dirtyPaths.push(absolutePath);
164
+ }
165
+ }
166
+ continue;
167
+ }
168
+ flushPendingRows(pendingRows, patch, dirtyRows);
169
+ const patchStart = patch.length;
170
+ emitAbsoluteMutation(working, op.path, op, patch, lowered, warnings);
171
+ working = applyPatchOperationsToWorking(working, patch, patchStart);
172
+ dirtyPaths.push(op.path.slice());
173
+ }
174
+ flushPendingRows(pendingRows, patch, dirtyRows);
175
+ const outputPatch = options.compact === false ? patch : compactMutationPatch(patch);
176
+ return { patch: outputPatch, matched, lowered, dirtyPaths, dirtyRows, warnings, matches: matchesOut };
177
+ }
178
+ export function commitMutation(state, plan, options) {
179
+ const result = compileMutationPlan(plan, state.get(), options);
180
+ state.commitPatch(result.patch);
181
+ return result;
182
+ }
183
+ export function commitCrdtMutation(doc, plan, options) {
184
+ const state = doc.toJSON();
185
+ const compiled = compileMutationPlan(plan, state, options);
186
+ const operations = compactCrdtMutationOperations(plan.operations);
187
+ let commit;
188
+ if (operations.length === 0) {
189
+ commit = doc.change(() => { });
190
+ }
191
+ else {
192
+ let working = cloneJson(state);
193
+ commit = doc.change((tx) => {
194
+ for (const op of operations) {
195
+ if (op.repeat === 0 || isNoopRepeat(op))
196
+ continue;
197
+ if (op.selector === undefined) {
198
+ applyCrdtOperation(tx, working, op.path, op);
199
+ working = applyMaterializedOperationToWorking(working, op.path, op);
200
+ continue;
201
+ }
202
+ const context = resolveSelector(working, op.selector);
203
+ for (const match of context.matches) {
204
+ const absolutePath = match.path.concat(op.path);
205
+ applyCrdtOperation(tx, working, absolutePath, op);
206
+ working = applyMaterializedOperationToWorking(working, absolutePath, op);
207
+ }
208
+ }
209
+ });
210
+ }
211
+ return { ...compiled, commit };
212
+ }
213
+ function applyPatchOperationsToWorking(working, patch, start) {
214
+ if (patch.length === start)
215
+ return working;
216
+ return applyPatch(working, patch.slice(start));
217
+ }
218
+ function applyMaterializedOperationToWorking(working, path, op) {
219
+ const nextValue = applyFieldMutation(readPath(working, path), op);
220
+ return applyPatch(working, [[OP_SET, path.slice(), cloneJson(nextValue)]]);
221
+ }
222
+ function compactMutationPatch(patch) {
223
+ const compacted = [];
224
+ for (const operation of patch) {
225
+ const previous = compacted[compacted.length - 1];
226
+ if (previous !== undefined && mergePatchOperation(previous, operation))
227
+ continue;
228
+ compacted.push(operation);
229
+ }
230
+ return compacted;
231
+ }
232
+ function mergePatchOperation(previous, next) {
233
+ if (previous[0] === OP_SET && next[0] === OP_SET && samePath(previous[1], next[1])) {
234
+ previous[2] = next[2];
235
+ return true;
236
+ }
237
+ if (previous[0] === OP_APPEND && next[0] === OP_APPEND && samePath(previous[1], next[1])) {
238
+ previous[2].push(...next[2]);
239
+ return true;
240
+ }
241
+ if (previous[0] === OP_STRING_SPLICE &&
242
+ next[0] === OP_STRING_SPLICE &&
243
+ samePath(previous[1], next[1]) &&
244
+ previous[3] === 0 &&
245
+ next[3] === 0 &&
246
+ next[2] === previous[2] + previous[4].length) {
247
+ previous[4] += next[4];
248
+ return true;
249
+ }
250
+ return false;
251
+ }
252
+ function compactCrdtMutationOperations(operations) {
253
+ const compacted = [];
254
+ for (const rawOp of operations) {
255
+ const op = normalizeOperation(rawOp);
256
+ if (op.repeat === 0 || isNoopRepeat(op))
257
+ continue;
258
+ const previous = compacted[compacted.length - 1];
259
+ if (previous !== undefined && canMergeArithmeticOperations(previous, op)) {
260
+ const merged = mergeArithmeticOperations(previous, op);
261
+ if (merged === undefined)
262
+ compacted.pop();
263
+ else
264
+ compacted[compacted.length - 1] = merged;
265
+ continue;
266
+ }
267
+ compacted.push(op);
268
+ }
269
+ return compacted;
270
+ }
271
+ function canMergeArithmeticOperations(left, right) {
272
+ return isArithmeticOperation(left) &&
273
+ isArithmeticOperation(right) &&
274
+ samePath(left.path, right.path) &&
275
+ sameSelectorPlan(left.selector, right.selector);
276
+ }
277
+ function mergeArithmeticOperations(left, right) {
278
+ const total = signedArithmeticDelta(left) + signedArithmeticDelta(right);
279
+ normalizeInteger(total, 'merged arithmetic delta');
280
+ if (total === 0)
281
+ return undefined;
282
+ return {
283
+ ...left,
284
+ kind: total < 0 ? 'decrement' : 'increment',
285
+ delta: Math.abs(total),
286
+ repeat: 1,
287
+ path: left.path.slice(),
288
+ selector: left.selector === undefined ? undefined : cloneSelectorPlan(left.selector)
289
+ };
290
+ }
291
+ function signedArithmeticDelta(op) {
292
+ const sign = op.kind === 'decrement' ? -1 : 1;
293
+ return sign * (op.delta || 0) * op.repeat;
294
+ }
295
+ function isArithmeticOperation(op) {
296
+ return op.kind === 'increment' || op.kind === 'decrement';
297
+ }
298
+ function emitAbsoluteMutation(source, path, op, patch, lowered, warnings) {
299
+ const current = readPath(source, path);
300
+ if (op.kind === 'set') {
301
+ patch.push([OP_SET, path.slice(), cloneJson(op.value)]);
302
+ lowered.push('set');
303
+ return;
304
+ }
305
+ if (op.kind === 'assign') {
306
+ const value = cloneJson(op.value);
307
+ if (isObjectRecord(current)) {
308
+ patch.push([OP_ASSIGN, path.slice(), value]);
309
+ }
310
+ else {
311
+ patch.push([OP_SET, path.slice(), { ...value }]);
312
+ }
313
+ lowered.push('assign');
314
+ return;
315
+ }
316
+ if (op.kind === 'increment' || op.kind === 'decrement') {
317
+ patch.push([OP_SET, path.slice(), applyNumericMutation(current, op)]);
318
+ lowered.push(op.kind + '-to-set');
319
+ return;
320
+ }
321
+ if (op.kind === 'toggle') {
322
+ if (op.repeat % 2 === 1) {
323
+ patch.push([OP_SET, path.slice(), !Boolean(current)]);
324
+ lowered.push('toggle-to-set');
325
+ }
326
+ else {
327
+ lowered.push('toggle-repeat-noop');
328
+ }
329
+ return;
330
+ }
331
+ if (op.kind === 'append') {
332
+ const values = repeatValues(op.values || [], op.repeat);
333
+ if (Array.isArray(current)) {
334
+ patch.push([OP_APPEND, path.slice(), values]);
335
+ lowered.push('append');
336
+ }
337
+ else {
338
+ patch.push([OP_SET, path.slice(), values]);
339
+ lowered.push('append-to-set');
340
+ }
341
+ return;
342
+ }
343
+ if (op.kind === 'appendText') {
344
+ const text = (op.text || '').repeat(op.repeat);
345
+ if (typeof current === 'string') {
346
+ patch.push([OP_STRING_SPLICE, path.slice(), current.length, 0, text]);
347
+ lowered.push('appendText');
348
+ }
349
+ else {
350
+ patch.push([OP_SET, path.slice(), text]);
351
+ lowered.push('appendText-to-set');
352
+ }
353
+ return;
354
+ }
355
+ if (op.kind === 'splice' || op.kind === 'spliceText') {
356
+ const target = applyMutationToValue(current, op, warnings);
357
+ patch.push([OP_SET, path.slice(), target]);
358
+ lowered.push(op.kind + '-materialized');
359
+ return;
360
+ }
361
+ }
362
+ function queueRowFieldMutation(pending, context, op, working) {
363
+ let entry = pending.find((item) => samePath(item.basePath, context.basePath) && samePath(item.tailPath, context.tailPath));
364
+ if (entry === undefined) {
365
+ entry = {
366
+ selector: context.selector,
367
+ basePath: context.basePath.slice(),
368
+ tailPath: context.tailPath.slice(),
369
+ fields: [],
370
+ rowIndexes: [],
371
+ valuesByRow: new Map()
372
+ };
373
+ pending.push(entry);
374
+ }
375
+ const field = context.tailPath.concat(op.path);
376
+ const fieldIndex = internField(entry.fields, field);
377
+ let nextWorking = working;
378
+ for (const match of context.matches) {
379
+ if (match.rowIndex === undefined)
380
+ continue;
381
+ if (!entry.rowIndexes.includes(match.rowIndex))
382
+ entry.rowIndexes.push(match.rowIndex);
383
+ let values = entry.valuesByRow.get(match.rowIndex);
384
+ if (values === undefined) {
385
+ values = new Array(entry.fields.length);
386
+ entry.valuesByRow.set(match.rowIndex, values);
387
+ }
388
+ if (values.length < entry.fields.length)
389
+ values.length = entry.fields.length;
390
+ const absolutePath = match.path.concat(op.path);
391
+ const current = readPath(nextWorking, absolutePath);
392
+ const nextValue = applyFieldMutation(current, op);
393
+ values[fieldIndex] = nextValue;
394
+ nextWorking = applyPatch(nextWorking, [[OP_SET, absolutePath, cloneJson(nextValue)]]);
395
+ }
396
+ return nextWorking;
397
+ }
398
+ function hasIncompatiblePendingRows(pending, context) {
399
+ const rowIndexes = context.matches
400
+ .map((match) => match.rowIndex)
401
+ .filter((rowIndex) => rowIndex !== undefined);
402
+ for (const entry of pending) {
403
+ if (!samePath(entry.basePath, context.basePath) || !samePath(entry.tailPath, context.tailPath))
404
+ return true;
405
+ if (!sameNumberArray(entry.rowIndexes, rowIndexes))
406
+ return true;
407
+ }
408
+ return false;
409
+ }
410
+ function flushPendingRows(pending, patch, dirtyRows) {
411
+ for (const entry of pending) {
412
+ entry.rowIndexes.sort(compareNumbers);
413
+ const values = [];
414
+ for (const row of entry.rowIndexes) {
415
+ const rowValues = entry.valuesByRow.get(row) || [];
416
+ for (let i = 0; i < entry.fields.length; i++)
417
+ values.push(cloneJson(rowValues[i]));
418
+ }
419
+ patch.push([OP_ARRAY_OBJECT_FIELD_ASSIGN, entry.basePath.slice(), entry.rowIndexes.slice(), entry.fields.map((field) => field.slice()), values]);
420
+ dirtyRows.push({ path: entry.basePath.slice(), rows: entry.rowIndexes.slice(), fields: entry.fields.map((field) => field.slice()) });
421
+ }
422
+ pending.length = 0;
423
+ }
424
+ function applyFieldMutation(current, op) {
425
+ if (op.kind === 'set')
426
+ return cloneJson(op.value);
427
+ if (op.kind === 'assign') {
428
+ const value = cloneJson(op.value);
429
+ return isObjectRecord(current) ? { ...current, ...value } : value;
430
+ }
431
+ if (op.kind === 'increment' || op.kind === 'decrement')
432
+ return applyNumericMutation(current, op);
433
+ if (op.kind === 'toggle')
434
+ return op.repeat % 2 === 1 ? !Boolean(current) : current;
435
+ if (op.kind === 'append')
436
+ return Array.isArray(current) ? current.concat(repeatValues(op.values || [], op.repeat)) : repeatValues(op.values || [], op.repeat);
437
+ if (op.kind === 'appendText')
438
+ return typeof current === 'string' ? current + (op.text || '').repeat(op.repeat) : (op.text || '').repeat(op.repeat);
439
+ return applyMutationToValue(current, op, []);
440
+ }
441
+ function applyCrdtOperation(tx, state, path, op) {
442
+ if (op.kind === 'set') {
443
+ tx.set(path, cloneJson(op.value));
444
+ }
445
+ else if (op.kind === 'assign') {
446
+ const current = readPath(state, path);
447
+ tx.set(path, isObjectRecord(current) ? { ...current, ...cloneJson(op.value) } : cloneJson(op.value));
448
+ }
449
+ else if (op.kind === 'increment') {
450
+ tx.counter(path).increment((op.delta || 0) * op.repeat);
451
+ }
452
+ else if (op.kind === 'decrement') {
453
+ tx.counter(path).decrement((op.delta || 0) * op.repeat);
454
+ }
455
+ else if (op.kind === 'toggle') {
456
+ if (op.repeat % 2 === 1)
457
+ tx.set(path, !Boolean(readPath(state, path)));
458
+ }
459
+ else if (op.kind === 'appendText') {
460
+ const current = readPath(state, path);
461
+ const index = typeof current === 'string' ? Array.from(current).length : 0;
462
+ tx.text(path).insert(index, (op.text || '').repeat(op.repeat));
463
+ }
464
+ else if (op.kind === 'append') {
465
+ const current = readPath(state, path);
466
+ const index = Array.isArray(current) ? current.length : 0;
467
+ tx.list(path).insert(index, repeatValues(op.values || [], op.repeat));
468
+ }
469
+ else {
470
+ tx.set(path, applyMutationToValue(readPath(state, path), op, []));
471
+ }
472
+ }
473
+ function applyNumericMutation(current, op) {
474
+ const base = typeof current === 'number' && Number.isFinite(current) ? current : 0;
475
+ const sign = op.kind === 'decrement' ? -1 : 1;
476
+ return base + sign * (op.delta || 0) * op.repeat;
477
+ }
478
+ function applyMutationToValue(current, op, warnings) {
479
+ if (op.kind === 'splice') {
480
+ const array = Array.isArray(current) ? cloneJson(current) : [];
481
+ for (let i = 0; i < op.repeat; i++)
482
+ array.splice(op.start || 0, op.deleteCount || 0, ...cloneJson(op.values || []));
483
+ return array;
484
+ }
485
+ if (op.kind === 'spliceText') {
486
+ let text = typeof current === 'string' ? current : '';
487
+ for (let i = 0; i < op.repeat; i++) {
488
+ const start = Math.min(op.start || 0, text.length);
489
+ text = text.slice(0, start) + (op.text || '') + text.slice(start + (op.deleteCount || 0));
490
+ }
491
+ return text;
492
+ }
493
+ warnings.push('unsupported materialized mutation kind: ' + op.kind);
494
+ return current === undefined ? null : cloneJson(current);
495
+ }
496
+ function resolveSelector(source, selector) {
497
+ const wildcard = selector.path.indexOf('*');
498
+ if (wildcard === -1)
499
+ throw new TypeError('selector path must contain one * segment');
500
+ if (selector.path.indexOf('*', wildcard + 1) !== -1) {
501
+ throw new TypeError('selector path currently supports one * segment');
502
+ }
503
+ const basePath = selector.path.slice(0, wildcard);
504
+ const tailPath = selector.path.slice(wildcard + 1);
505
+ const collection = readPath(source, basePath);
506
+ const matches = [];
507
+ if (Array.isArray(collection)) {
508
+ for (let i = 0; i < collection.length; i++) {
509
+ const row = collection[i];
510
+ const value = tailPath.length === 0 ? row : readPath(row, tailPath);
511
+ if (matchesSelector(value, selector.conditions)) {
512
+ matches.push({ key: readSelectorMatchKey(row, selector, i), rowIndex: i, value, path: basePath.concat(i).concat(tailPath) });
513
+ }
514
+ }
515
+ }
516
+ else if (isObjectRecord(collection)) {
517
+ for (const key of Object.keys(collection)) {
518
+ const row = collection[key];
519
+ const value = tailPath.length === 0 ? row : readPath(row, tailPath);
520
+ if (matchesSelector(value, selector.conditions)) {
521
+ matches.push({ key: readSelectorMatchKey(row, selector, key), value, path: basePath.concat(key).concat(tailPath) });
522
+ }
523
+ }
524
+ }
525
+ return { selector, basePath, tailPath, collection: collection, matches };
526
+ }
527
+ function readSelectorMatchKey(row, selector, fallback) {
528
+ if (selector.keyBy === undefined)
529
+ return fallback;
530
+ const key = readPath(row, [selector.keyBy]);
531
+ return typeof key === 'string' || typeof key === 'number' ? key : fallback;
532
+ }
533
+ function matchesSelector(value, conditions) {
534
+ for (const condition of conditions) {
535
+ if (!evaluateCondition(value, condition))
536
+ return false;
537
+ }
538
+ return true;
539
+ }
540
+ function evaluateCondition(value, condition) {
541
+ if ('and' in condition)
542
+ return condition.and.every((item) => evaluateCondition(value, item));
543
+ if ('or' in condition)
544
+ return condition.or.some((item) => evaluateCondition(value, item));
545
+ if ('not' in condition)
546
+ return !evaluateCondition(value, condition.not);
547
+ const actual = readPath(value, normalizePath(condition.field, 'condition field'));
548
+ const op = normalizeOperator(condition);
549
+ const expected = readExpected(condition, op);
550
+ if (op === 'exists')
551
+ return expected === false ? actual === undefined : actual !== undefined;
552
+ if (op === 'eq')
553
+ return Object.is(actual, expected);
554
+ if (op === 'neq')
555
+ return !Object.is(actual, expected);
556
+ if (op === 'in')
557
+ return Array.isArray(expected) && expected.some((item) => Object.is(actual, item));
558
+ if (typeof actual !== 'number' || typeof expected !== 'number')
559
+ return false;
560
+ if (op === 'gt')
561
+ return actual > expected;
562
+ if (op === 'gte')
563
+ return actual >= expected;
564
+ if (op === 'lt')
565
+ return actual < expected;
566
+ if (op === 'lte')
567
+ return actual <= expected;
568
+ return false;
569
+ }
570
+ function readCondition(fieldOrCondition, op, value) {
571
+ if (typeof fieldOrCondition === 'string' || Array.isArray(fieldOrCondition)) {
572
+ return { field: fieldOrCondition, op: op || 'eq', value };
573
+ }
574
+ return cloneCondition(fieldOrCondition);
575
+ }
576
+ function normalizeOperator(condition) {
577
+ if (condition.eq !== undefined)
578
+ return 'eq';
579
+ if (condition.neq !== undefined)
580
+ return 'neq';
581
+ if (condition.gt !== undefined)
582
+ return 'gt';
583
+ if (condition.gte !== undefined)
584
+ return 'gte';
585
+ if (condition.lt !== undefined)
586
+ return 'lt';
587
+ if (condition.lte !== undefined)
588
+ return 'lte';
589
+ if (condition.in !== undefined)
590
+ return 'in';
591
+ if (condition.exists !== undefined)
592
+ return 'exists';
593
+ const op = condition.op || 'eq';
594
+ if (op === '==' || op === 'eq')
595
+ return 'eq';
596
+ if (op === '!=' || op === 'neq')
597
+ return 'neq';
598
+ if (op === '>' || op === 'gt')
599
+ return 'gt';
600
+ if (op === '>=' || op === 'gte')
601
+ return 'gte';
602
+ if (op === '<' || op === 'lt')
603
+ return 'lt';
604
+ if (op === '<=' || op === 'lte')
605
+ return 'lte';
606
+ if (op === 'in')
607
+ return 'in';
608
+ if (op === 'exists')
609
+ return 'exists';
610
+ throw new TypeError('unsupported selector operator: ' + op);
611
+ }
612
+ function readExpected(condition, op) {
613
+ if (op === 'eq' && condition.eq !== undefined)
614
+ return condition.eq;
615
+ if (op === 'neq' && condition.neq !== undefined)
616
+ return condition.neq;
617
+ if (op === 'gt' && condition.gt !== undefined)
618
+ return condition.gt;
619
+ if (op === 'gte' && condition.gte !== undefined)
620
+ return condition.gte;
621
+ if (op === 'lt' && condition.lt !== undefined)
622
+ return condition.lt;
623
+ if (op === 'lte' && condition.lte !== undefined)
624
+ return condition.lte;
625
+ if (op === 'in' && condition.in !== undefined)
626
+ return condition.in;
627
+ if (op === 'exists' && condition.exists !== undefined)
628
+ return condition.exists;
629
+ return condition.value;
630
+ }
631
+ function normalizeOperation(op) {
632
+ return {
633
+ ...op,
634
+ path: op.path.slice(),
635
+ repeat: normalizeIndex(op.repeat, 'mutation repeat'),
636
+ selector: op.selector === undefined ? undefined : cloneSelectorPlan(op.selector)
637
+ };
638
+ }
639
+ function isNoopRepeat(op) {
640
+ return op.kind === 'toggle' && op.repeat % 2 === 0;
641
+ }
642
+ function canUseRowFieldAssign(op) {
643
+ return op.path.length > 0 && (op.kind === 'set' ||
644
+ op.kind === 'assign' ||
645
+ op.kind === 'increment' ||
646
+ op.kind === 'decrement' ||
647
+ op.kind === 'toggle' ||
648
+ op.kind === 'append' ||
649
+ op.kind === 'appendText' ||
650
+ op.kind === 'splice' ||
651
+ op.kind === 'spliceText');
652
+ }
653
+ function normalizePath(path, label) {
654
+ if (path === undefined)
655
+ return [];
656
+ if (Array.isArray(path))
657
+ return path.slice();
658
+ if (typeof path !== 'string')
659
+ throw new TypeError(label + ' must be a JSON pointer string or path array');
660
+ if (path.length === 0)
661
+ return [];
662
+ if (path[0] === '/')
663
+ return parsePointer(path);
664
+ return path.split('.').filter(Boolean);
665
+ }
666
+ function readPath(source, path) {
667
+ if (source === undefined)
668
+ return undefined;
669
+ try {
670
+ return getPath(source, path);
671
+ }
672
+ catch {
673
+ return undefined;
674
+ }
675
+ }
676
+ function cloneSelectorPlan(plan) {
677
+ return {
678
+ path: plan.path.slice(),
679
+ conditions: plan.conditions.map(cloneCondition),
680
+ keyBy: plan.keyBy
681
+ };
682
+ }
683
+ function cloneCondition(condition) {
684
+ if ('and' in condition)
685
+ return { and: condition.and.map(cloneCondition) };
686
+ if ('or' in condition)
687
+ return { or: condition.or.map(cloneCondition) };
688
+ if ('not' in condition)
689
+ return { not: cloneCondition(condition.not) };
690
+ return { ...condition, field: normalizePath(condition.field, 'condition field'), in: condition.in === undefined ? undefined : condition.in.slice() };
691
+ }
692
+ function internField(fields, field) {
693
+ for (let i = 0; i < fields.length; i++) {
694
+ if (samePath(fields[i], field))
695
+ return i;
696
+ }
697
+ fields.push(field.slice());
698
+ return fields.length - 1;
699
+ }
700
+ function repeatValues(values, repeat) {
701
+ const out = [];
702
+ for (let i = 0; i < repeat; i++) {
703
+ for (const value of values)
704
+ out.push(cloneJson(value));
705
+ }
706
+ return out;
707
+ }
708
+ function isObjectRecord(value) {
709
+ return value !== null && typeof value === 'object' && !Array.isArray(value);
710
+ }
711
+ function normalizeInteger(value, label) {
712
+ if (!Number.isSafeInteger(value))
713
+ throw new RangeError(label + ' must be a safe integer');
714
+ return value;
715
+ }
716
+ function normalizeIndex(value, label) {
717
+ if (!Number.isSafeInteger(value) || value < 0)
718
+ throw new RangeError(label + ' must be a non-negative safe integer');
719
+ return value;
720
+ }
721
+ function compareNumbers(left, right) {
722
+ return left - right;
723
+ }
724
+ function samePath(left, right) {
725
+ if (left.length !== right.length)
726
+ return false;
727
+ for (let i = 0; i < left.length; i++) {
728
+ if (left[i] !== right[i])
729
+ return false;
730
+ }
731
+ return true;
732
+ }
733
+ function sameNumberArray(left, right) {
734
+ if (left.length !== right.length)
735
+ return false;
736
+ for (let i = 0; i < left.length; i++) {
737
+ if (left[i] !== right[i])
738
+ return false;
739
+ }
740
+ return true;
741
+ }
742
+ function sameSelectorPlan(left, right) {
743
+ if (left === undefined || right === undefined)
744
+ return left === right;
745
+ return samePath(left.path, right.path) &&
746
+ left.keyBy === right.keyBy &&
747
+ JSON.stringify(left.conditions) === JSON.stringify(right.conditions);
748
+ }
749
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,38 @@
1
+ {
2
+ "name": "@shapeshift-labs/frontier-mutation",
3
+ "version": "0.1.0",
4
+ "description": "Explicit mutation and selector plans compiled to Frontier patches or CRDT operations.",
5
+ "type": "module",
6
+ "main": "dist/index.js",
7
+ "types": "dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/index.d.ts",
11
+ "import": "./dist/index.js",
12
+ "default": "./dist/index.js"
13
+ }
14
+ },
15
+ "files": [
16
+ "dist",
17
+ "README.md"
18
+ ],
19
+ "scripts": {
20
+ "build": "tsc -p tsconfig.json",
21
+ "prepack": "npm run build"
22
+ },
23
+ "keywords": [
24
+ "frontier",
25
+ "json",
26
+ "mutation",
27
+ "selector",
28
+ "patch",
29
+ "crdt"
30
+ ],
31
+ "license": "MIT",
32
+ "peerDependencies": {
33
+ "@shapeshift-labs/frontier": "^0.1.0"
34
+ },
35
+ "devDependencies": {
36
+ "typescript": "^6.0.3"
37
+ }
38
+ }