@opendaw/lib-box 0.0.12 → 0.0.14
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 +39 -1
- package/dist/box.d.ts +1 -1
- package/dist/box.d.ts.map +1 -1
- package/dist/graph-edges.d.ts +3 -2
- package/dist/graph-edges.d.ts.map +1 -1
- package/dist/graph-edges.js +6 -6
- package/dist/graph.d.ts +3 -4
- package/dist/graph.d.ts.map +1 -1
- package/dist/graph.js +26 -27
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/indexed-box.d.ts +15 -0
- package/dist/indexed-box.d.ts.map +1 -0
- package/dist/indexed-box.js +29 -0
- package/dist/pointer-hub.d.ts +1 -2
- package/dist/pointer-hub.d.ts.map +1 -1
- package/dist/pointer-hub.js +22 -16
- package/dist/pointer.d.ts +1 -1
- package/dist/pointer.d.ts.map +1 -1
- package/dist/pointer.js +6 -9
- package/dist/sync-source.js +1 -1
- package/dist/updates.d.ts +3 -3
- package/dist/updates.d.ts.map +1 -1
- package/dist/updates.js +12 -12
- package/package.json +6 -6
package/README.md
CHANGED
@@ -1 +1,39 @@
|
|
1
|
-
|
1
|
+
_This package is part of the openDAW SDK_
|
2
|
+
|
3
|
+
# @opendaw/lib-box
|
4
|
+
|
5
|
+
Graph-based object modeling system with serialization, transactions, and pointer management for TypeScript projects.
|
6
|
+
|
7
|
+
## Core Architecture
|
8
|
+
|
9
|
+
* **box.ts** - Core Box class for graph nodes with field management
|
10
|
+
* **vertex.ts** - Vertex interface and visitor pattern definitions
|
11
|
+
* **graph.ts** - BoxGraph class for managing object relationships
|
12
|
+
* **field.ts** - Field abstraction for object properties
|
13
|
+
* **address.ts** - Addressing system for graph navigation
|
14
|
+
|
15
|
+
## Field Types
|
16
|
+
|
17
|
+
* **primitive.ts** - Primitive field types (boolean, number, string)
|
18
|
+
* **array.ts** - Array field implementations
|
19
|
+
* **object.ts** - Object field for nested structures
|
20
|
+
* **pointer.ts** - Pointer field for object references
|
21
|
+
|
22
|
+
## Graph Management
|
23
|
+
|
24
|
+
* **graph-edges.ts** - Edge management for graph relationships
|
25
|
+
* **pointer-hub.ts** - Hub for managing incoming pointer connections
|
26
|
+
* **dispatchers.ts** - Event dispatching system for updates
|
27
|
+
* **updates.ts** - Update event definitions and handling
|
28
|
+
|
29
|
+
## Serialization & Persistence
|
30
|
+
|
31
|
+
* **serializer.ts** - Serialization utilities for objects
|
32
|
+
* **sync.ts** - Synchronization utilities
|
33
|
+
* **sync-source.ts** - Source-side synchronization
|
34
|
+
* **sync-target.ts** - Target-side synchronization
|
35
|
+
|
36
|
+
## Editing & Transactions
|
37
|
+
|
38
|
+
* **editing.ts** - Undo/redo system for graph modifications
|
39
|
+
* **indexed-box.ts** - Indexed box implementation for efficient lookups
|
package/dist/box.d.ts
CHANGED
@@ -42,7 +42,7 @@ export declare abstract class Box<P extends PointerTypes = PointerTypes, F exten
|
|
42
42
|
serialize(): ArrayBufferLike;
|
43
43
|
toArrayBuffer(): ArrayBufferLike;
|
44
44
|
incomingEdges(): ReadonlyArray<PointerField>;
|
45
|
-
outgoingEdges(): ReadonlyArray<[PointerField,
|
45
|
+
outgoingEdges(): ReadonlyArray<[PointerField, Address]>;
|
46
46
|
mapFields<T>(map: Func<Field, T>, ...keys: FieldKey[]): ReadonlyArray<T>;
|
47
47
|
searchVertex(keys: FieldKeys): Option<Vertex>;
|
48
48
|
delete(): void;
|
package/dist/box.d.ts.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"box.d.ts","sourceRoot":"","sources":["../src/box.ts"],"names":[],"mappings":"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
|
1
|
+
{"version":3,"file":"box.d.ts","sourceRoot":"","sources":["../src/box.ts"],"names":[],"mappings":"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"}
|
package/dist/graph-edges.d.ts
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
import { Address } from "./address";
|
1
2
|
import { PointerField } from "./pointer";
|
2
3
|
import { Vertex } from "./vertex";
|
3
4
|
import { Box } from "./box";
|
@@ -6,9 +7,9 @@ export declare class GraphEdges {
|
|
6
7
|
constructor();
|
7
8
|
watchVertex(vertex: Vertex | PointerField): void;
|
8
9
|
unwatchVerticesOf(...boxes: ReadonlyArray<Box>): void;
|
9
|
-
connect(source: PointerField, target:
|
10
|
+
connect(source: PointerField, target: Address): void;
|
10
11
|
disconnect(source: PointerField): void;
|
11
|
-
outgoingEdgesOf(box: Box): ReadonlyArray<[PointerField,
|
12
|
+
outgoingEdgesOf(box: Box): ReadonlyArray<[PointerField, Address]>;
|
12
13
|
incomingEdgesOf(vertex: Box | Vertex): ReadonlyArray<PointerField>;
|
13
14
|
validateRequirements(): void;
|
14
15
|
verifyPointers(): void;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"graph-edges.d.ts","sourceRoot":"","sources":["../src/graph-edges.ts"],"names":[],"mappings":"
|
1
|
+
{"version":3,"file":"graph-edges.d.ts","sourceRoot":"","sources":["../src/graph-edges.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAA;AACjC,OAAO,EAAC,YAAY,EAAC,MAAM,WAAW,CAAA;AACtC,OAAO,EAAC,MAAM,EAAC,MAAM,UAAU,CAAA;AAC/B,OAAO,EAAC,GAAG,EAAC,MAAM,OAAO,CAAA;AAEzB,qBAAa,UAAU;;;IAanB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI;IAchD,iBAAiB,CAAC,GAAG,KAAK,EAAE,aAAa,CAAC,GAAG,CAAC,GAAG,IAAI;IAoBrD,OAAO,CAAC,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,OAAO,GAAG,IAAI;IAQpD,UAAU,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI;IAOtC,eAAe,CAAC,GAAG,EAAE,GAAG,GAAG,aAAa,CAAC,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;IAIjE,eAAe,CAAC,MAAM,EAAE,GAAG,GAAG,MAAM,GAAG,aAAa,CAAC,YAAY,CAAC;IASlE,oBAAoB,IAAI,IAAI;IAqB5B,cAAc,IAAI,IAAI;CAgBzB"}
|
package/dist/graph-edges.js
CHANGED
@@ -9,7 +9,7 @@ export class GraphEdges {
|
|
9
9
|
constructor() {
|
10
10
|
this.#requiresTarget = Address.newSet(source => source.address);
|
11
11
|
this.#requiresPointer = Address.newSet(vertex => vertex.address);
|
12
|
-
this.#incoming = Address.newSet(([
|
12
|
+
this.#incoming = Address.newSet(([address]) => address);
|
13
13
|
this.#outgoing = Address.newSet(([source]) => source.address);
|
14
14
|
}
|
15
15
|
watchVertex(vertex) {
|
@@ -45,17 +45,17 @@ export class GraphEdges {
|
|
45
45
|
}
|
46
46
|
connect(source, target) {
|
47
47
|
this.#outgoing.add([source, target]);
|
48
|
-
this.#incoming.opt(target
|
48
|
+
this.#incoming.opt(target).match({
|
49
49
|
none: () => this.#incoming.add([target, [source]]),
|
50
50
|
some: ([, sources]) => sources.push(source)
|
51
51
|
});
|
52
52
|
}
|
53
53
|
disconnect(source) {
|
54
54
|
const [, target] = this.#outgoing.removeByKey(source.address);
|
55
|
-
const [, sources] = this.#incoming.get(target
|
55
|
+
const [, sources] = this.#incoming.get(target);
|
56
56
|
Arrays.remove(sources, source);
|
57
57
|
if (sources.length === 0) {
|
58
|
-
this.#incoming.removeByKey(target
|
58
|
+
this.#incoming.removeByKey(target);
|
59
59
|
}
|
60
60
|
}
|
61
61
|
outgoingEdgesOf(box) {
|
@@ -63,7 +63,7 @@ export class GraphEdges {
|
|
63
63
|
}
|
64
64
|
incomingEdgesOf(vertex) {
|
65
65
|
if (vertex.isBox()) {
|
66
|
-
return this.#collectSameBox(this.#incoming, vertex.address.uuid, ([{
|
66
|
+
return this.#collectSameBox(this.#incoming, vertex.address.uuid, ([{ uuid }]) => uuid)
|
67
67
|
.flatMap(([_, pointers]) => pointers);
|
68
68
|
}
|
69
69
|
else {
|
@@ -94,7 +94,7 @@ export class GraphEdges {
|
|
94
94
|
}
|
95
95
|
verifyPointers() {
|
96
96
|
this.#requiresTarget.forEach(pointer => assert(pointer.isAttached(), `${pointer.address.toString()} is not attached`));
|
97
|
-
this.#requiresPointer.forEach(
|
97
|
+
this.#requiresPointer.forEach(vertex => assert(vertex.isAttached(), `${vertex.address.toString()} is not attached`));
|
98
98
|
}
|
99
99
|
#collectSameBox(set, id, map) {
|
100
100
|
const range = Address.boxRange(set, id, map);
|
package/dist/graph.d.ts
CHANGED
@@ -1,11 +1,11 @@
|
|
1
1
|
import { Exec, int, Option, Procedure, Subscription, UUID } from "@opendaw/lib-std";
|
2
|
-
import { Vertex } from "./vertex";
|
3
|
-
import { Box } from "./box";
|
4
2
|
import { Address } from "./address";
|
3
|
+
import { Vertex } from "./vertex";
|
5
4
|
import { PointerField } from "./pointer";
|
6
5
|
import { PrimitiveField, PrimitiveValues } from "./primitive";
|
7
|
-
import {
|
6
|
+
import { Box } from "./box";
|
8
7
|
import { Update } from "./updates";
|
8
|
+
import { Propagation } from "./dispatchers";
|
9
9
|
import { GraphEdges } from "./graph-edges";
|
10
10
|
export type BoxFactory<BoxMap> = (name: keyof BoxMap, graph: BoxGraph<BoxMap>, uuid: UUID.Format, constructor: Procedure<Box>) => Box;
|
11
11
|
export interface TransactionListener {
|
@@ -26,7 +26,6 @@ export declare class BoxGraph<BoxMap = any> {
|
|
26
26
|
endTransaction(): void;
|
27
27
|
inTransaction(): boolean;
|
28
28
|
constructingBox(): boolean;
|
29
|
-
resolvePointers(): void;
|
30
29
|
createBox(name: keyof BoxMap, uuid: UUID.Format, constructor: Procedure<Box>): void;
|
31
30
|
stageBox<B extends Box>(box: B, constructor?: Procedure<B>): B;
|
32
31
|
subscribeTransaction(listener: TransactionListener): Subscription;
|
package/dist/graph.d.ts.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"graph.d.ts","sourceRoot":"","sources":["../src/graph.ts"],"names":[],"mappings":"AAAA,OAAO,EAKH,IAAI,EACJ,GAAG,
|
1
|
+
{"version":3,"file":"graph.d.ts","sourceRoot":"","sources":["../src/graph.ts"],"names":[],"mappings":"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"}
|
package/dist/graph.js
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
import { assert, ByteArrayInput, ByteArrayOutput, Checksum, isDefined, Listeners, Option, panic, UUID } from "@opendaw/lib-std";
|
2
|
-
import { Dispatchers } from "./dispatchers";
|
3
2
|
import { DeleteUpdate, NewUpdate, PointerUpdate, PrimitiveUpdate } from "./updates";
|
3
|
+
import { Dispatchers } from "./dispatchers";
|
4
4
|
import { GraphEdges } from "./graph-edges";
|
5
5
|
export class BoxGraph {
|
6
6
|
#boxFactory;
|
@@ -33,7 +33,10 @@ export class BoxGraph {
|
|
33
33
|
endTransaction() {
|
34
34
|
assert(this.#inTransaction, "No transaction in progress");
|
35
35
|
this.#inTransaction = false;
|
36
|
-
this.
|
36
|
+
if (this.#deferredPointerUpdates.length > 0) {
|
37
|
+
this.#deferredPointerUpdates.forEach(({ pointerField, update }) => this.#processPointerVertexUpdate(pointerField, update));
|
38
|
+
this.#deferredPointerUpdates.length = 0;
|
39
|
+
}
|
37
40
|
// it is possible that new observers will be added while executing
|
38
41
|
while (this.#finalizeTransactionObservers.length > 0) {
|
39
42
|
this.#finalizeTransactionObservers.splice(0).forEach(observer => observer());
|
@@ -45,13 +48,6 @@ export class BoxGraph {
|
|
45
48
|
}
|
46
49
|
inTransaction() { return this.#inTransaction; }
|
47
50
|
constructingBox() { return this.#constructingBox; }
|
48
|
-
resolvePointers() {
|
49
|
-
if (this.#deferredPointerUpdates.length === 0) {
|
50
|
-
return;
|
51
|
-
}
|
52
|
-
this.#deferredPointerUpdates.forEach(({ pointerField, update }) => this.#processPointerValueUpdate(pointerField, update));
|
53
|
-
this.#deferredPointerUpdates.length = 0;
|
54
|
-
}
|
55
51
|
createBox(name, uuid, constructor) {
|
56
52
|
this.#boxFactory.unwrap("No box-factory installed")(name, this, uuid, constructor);
|
57
53
|
}
|
@@ -116,28 +112,29 @@ export class BoxGraph {
|
|
116
112
|
}
|
117
113
|
onPointerAddressUpdated(pointerField, oldValue, newValue) {
|
118
114
|
this.#assertTransaction();
|
115
|
+
if (oldValue.nonEmpty()) {
|
116
|
+
this.#edges.disconnect(pointerField);
|
117
|
+
}
|
118
|
+
if (newValue.nonEmpty()) {
|
119
|
+
this.#edges.connect(pointerField, newValue.unwrap());
|
120
|
+
}
|
119
121
|
const update = new PointerUpdate(pointerField.address, oldValue, newValue);
|
120
122
|
if (this.#constructingBox) {
|
121
123
|
this.#deferredPointerUpdates.push({ pointerField, update });
|
122
124
|
}
|
123
125
|
else {
|
124
|
-
this.#
|
126
|
+
this.#processPointerVertexUpdate(pointerField, update);
|
125
127
|
this.#immediateUpdateListeners.proxy.onUpdate(update);
|
126
128
|
}
|
127
129
|
}
|
128
|
-
#
|
129
|
-
const
|
130
|
-
|
131
|
-
const newVertex =
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
this.#edges.disconnect(pointerField);
|
137
|
-
}
|
138
|
-
if (newVertex !== null) {
|
139
|
-
this.#edges.connect(pointerField, newVertex);
|
140
|
-
}
|
130
|
+
#processPointerVertexUpdate(pointerField, update) {
|
131
|
+
const { oldAddress, newAddress } = update;
|
132
|
+
const oldVertex = oldAddress.flatMap(address => this.findVertex(address));
|
133
|
+
const newVertex = newAddress.flatMap(address => this.findVertex(address));
|
134
|
+
pointerField.resolvedTo(newVertex);
|
135
|
+
if (!oldVertex.equals(newVertex)) {
|
136
|
+
oldVertex.ifSome(vertex => vertex.pointerHub.onRemoved(pointerField));
|
137
|
+
newVertex.ifSome(vertex => vertex.pointerHub.onAdded(pointerField));
|
141
138
|
}
|
142
139
|
this.#dispatchers.dispatch(update);
|
143
140
|
this.#updateListeners.proxy.onUpdate(update);
|
@@ -152,11 +149,13 @@ export class BoxGraph {
|
|
152
149
|
boxes.add(box);
|
153
150
|
box.outgoingEdges()
|
154
151
|
.filter(([pointer]) => !pointers.has(pointer))
|
155
|
-
.forEach(([source,
|
152
|
+
.forEach(([source, targetAddress]) => {
|
153
|
+
const targetVertex = this.findVertex(targetAddress)
|
154
|
+
.unwrap(`Could not find target of ${source.toString()}`);
|
156
155
|
pointers.add(source);
|
157
|
-
if (
|
158
|
-
|
159
|
-
return trace(
|
156
|
+
if (targetVertex.pointerRules.mandatory &&
|
157
|
+
targetVertex.pointerHub.incoming().every(pointer => pointers.has(pointer))) {
|
158
|
+
return trace(targetVertex.box);
|
160
159
|
}
|
161
160
|
});
|
162
161
|
box.incomingEdges()
|
package/dist/index.d.ts
CHANGED
package/dist/index.d.ts.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AASA,cAAc,WAAW,CAAA;AACzB,cAAc,SAAS,CAAA;AACvB,cAAc,OAAO,CAAA;AACrB,cAAc,eAAe,CAAA;AAC7B,cAAc,WAAW,CAAA;AACzB,cAAc,SAAS,CAAA;AACvB,cAAc,SAAS,CAAA;AACvB,cAAc,eAAe,CAAA;AAC7B,cAAc,UAAU,CAAA;AACxB,cAAc,WAAW,CAAA;AACzB,cAAc,eAAe,CAAA;AAC7B,cAAc,aAAa,CAAA;AAC3B,cAAc,QAAQ,CAAA;AACtB,cAAc,eAAe,CAAA;AAC7B,cAAc,eAAe,CAAA;AAC7B,cAAc,WAAW,CAAA;AACzB,cAAc,UAAU,CAAA"}
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AASA,cAAc,WAAW,CAAA;AACzB,cAAc,SAAS,CAAA;AACvB,cAAc,OAAO,CAAA;AACrB,cAAc,eAAe,CAAA;AAC7B,cAAc,WAAW,CAAA;AACzB,cAAc,SAAS,CAAA;AACvB,cAAc,SAAS,CAAA;AACvB,cAAc,eAAe,CAAA;AAC7B,cAAc,eAAe,CAAA;AAC7B,cAAc,UAAU,CAAA;AACxB,cAAc,WAAW,CAAA;AACzB,cAAc,eAAe,CAAA;AAC7B,cAAc,aAAa,CAAA;AAC3B,cAAc,QAAQ,CAAA;AACtB,cAAc,eAAe,CAAA;AAC7B,cAAc,eAAe,CAAA;AAC7B,cAAc,WAAW,CAAA;AACzB,cAAc,UAAU,CAAA"}
|
package/dist/index.js
CHANGED
@@ -0,0 +1,15 @@
|
|
1
|
+
import { Field } from "./field";
|
2
|
+
import { Class, int } from "@opendaw/lib-std";
|
3
|
+
import { Int32Field } from "./primitive";
|
4
|
+
import { Box } from "./box";
|
5
|
+
/**
|
6
|
+
* Utility functions for managing indexed box collections with automatic index adjustment.
|
7
|
+
*/
|
8
|
+
export type IndexedBox = Box & Record<"index", Int32Field>;
|
9
|
+
export declare namespace IndexedBox {
|
10
|
+
const insertOrder: (field: Field, insertIndex?: int) => int;
|
11
|
+
const removeOrder: (field: Field, removeIndex: int) => void;
|
12
|
+
const isIndexedBox: (box: Box) => box is IndexedBox;
|
13
|
+
const collectIndexedBoxes: <B extends IndexedBox>(field: Field, type?: Class<B>) => ReadonlyArray<B>;
|
14
|
+
}
|
15
|
+
//# sourceMappingURL=indexed-box.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"indexed-box.d.ts","sourceRoot":"","sources":["../src/indexed-box.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,KAAK,EAAC,MAAM,SAAS,CAAA;AAC7B,OAAO,EAAQ,KAAK,EAAE,GAAG,EAAQ,MAAM,kBAAkB,CAAA;AACzD,OAAO,EAAC,UAAU,EAAC,MAAM,aAAa,CAAA;AACtC,OAAO,EAAC,GAAG,EAAC,MAAM,OAAO,CAAA;AAEzB;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,GAAG,GAAG,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,CAAA;AAE1D,yBAAiB,UAAU,CAAC;IACjB,MAAM,WAAW,GAAI,OAAO,KAAK,EAAE,cAAa,GAA6B,KAAG,GAStF,CAAA;IAEM,MAAM,WAAW,GAAI,OAAO,KAAK,EAAE,aAAa,GAAG,KAAG,IAO5D,CAAA;IAEM,MAAM,YAAY,GAAI,KAAK,GAAG,KAAG,GAAG,IAAI,UAA+D,CAAA;IAEvG,MAAM,mBAAmB,GAAI,CAAC,SAAS,UAAU,EAAE,OAAO,KAAK,EAAE,OAAO,KAAK,CAAC,CAAC,CAAC,KAAG,aAAa,CAAC,CAAC,CAKzC,CAAA;CACnE"}
|
@@ -0,0 +1,29 @@
|
|
1
|
+
import { clamp, panic } from "@opendaw/lib-std";
|
2
|
+
import { Int32Field } from "./primitive";
|
3
|
+
export var IndexedBox;
|
4
|
+
(function (IndexedBox) {
|
5
|
+
IndexedBox.insertOrder = (field, insertIndex = Number.MAX_SAFE_INTEGER) => {
|
6
|
+
const boxes = IndexedBox.collectIndexedBoxes(field);
|
7
|
+
const newIndex = clamp(insertIndex, 0, boxes.length);
|
8
|
+
if (newIndex < boxes.length) {
|
9
|
+
for (let index = newIndex; index < boxes.length; index++) {
|
10
|
+
boxes[index].index.setValue(index + 1);
|
11
|
+
}
|
12
|
+
}
|
13
|
+
return newIndex;
|
14
|
+
};
|
15
|
+
IndexedBox.removeOrder = (field, removeIndex) => {
|
16
|
+
const boxes = IndexedBox.collectIndexedBoxes(field);
|
17
|
+
if (removeIndex < boxes.length) {
|
18
|
+
for (let index = removeIndex + 1; index < boxes.length; index++) {
|
19
|
+
boxes[index].index.setValue(index - 1);
|
20
|
+
}
|
21
|
+
}
|
22
|
+
};
|
23
|
+
IndexedBox.isIndexedBox = (box) => "index" in box && box.index instanceof Int32Field;
|
24
|
+
IndexedBox.collectIndexedBoxes = (field, type) => field.pointerHub.incoming()
|
25
|
+
.map(({ box }) => IndexedBox.isIndexedBox(box) && (type === undefined || box instanceof type)
|
26
|
+
? box
|
27
|
+
: panic(`${box} has no index field`))
|
28
|
+
.sort((a, b) => a.index.getValue() - b.index.getValue());
|
29
|
+
})(IndexedBox || (IndexedBox = {}));
|
package/dist/pointer-hub.d.ts
CHANGED
@@ -5,7 +5,7 @@ export interface PointerListener {
|
|
5
5
|
onAdd(pointer: PointerField): void;
|
6
6
|
onRemove(pointer: PointerField): void;
|
7
7
|
}
|
8
|
-
export declare class PointerHub
|
8
|
+
export declare class PointerHub {
|
9
9
|
#private;
|
10
10
|
static validate(pointer: PointerField, target: Vertex): Option<string>;
|
11
11
|
constructor(vertex: Vertex);
|
@@ -20,7 +20,6 @@ export declare class PointerHub implements Iterable<PointerField> {
|
|
20
20
|
incoming(): ReadonlyArray<PointerField>;
|
21
21
|
onAdded(pointerField: PointerField): void;
|
22
22
|
onRemoved(pointerField: PointerField): void;
|
23
|
-
[Symbol.iterator](): Iterator<PointerField>;
|
24
23
|
toString(): string;
|
25
24
|
}
|
26
25
|
//# sourceMappingURL=pointer-hub.d.ts.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"pointer-hub.d.ts","sourceRoot":"","sources":["../src/pointer-hub.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,YAAY,EAAE,YAAY,EAAC,MAAM,WAAW,CAAA;AACpD,OAAO,EAAC,MAAM,EAAC,MAAM,UAAU,CAAA;AAC/B,OAAO,EAAO,GAAG,EAAwB,MAAM,EAAoB,YAAY,EAAC,MAAM,kBAAkB,CAAA;AAGxG,MAAM,WAAW,eAAe;IAC5B,KAAK,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI,CAAA;IAClC,QAAQ,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI,CAAA;CACxC;
|
1
|
+
{"version":3,"file":"pointer-hub.d.ts","sourceRoot":"","sources":["../src/pointer-hub.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,YAAY,EAAE,YAAY,EAAC,MAAM,WAAW,CAAA;AACpD,OAAO,EAAC,MAAM,EAAC,MAAM,UAAU,CAAA;AAC/B,OAAO,EAAO,GAAG,EAAwB,MAAM,EAAoB,YAAY,EAAC,MAAM,kBAAkB,CAAA;AAGxG,MAAM,WAAW,eAAe;IAC5B,KAAK,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI,CAAA;IAClC,QAAQ,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI,CAAA;CACxC;AAID,qBAAa,UAAU;;IACnB,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;gBAkB1D,MAAM,EAAE,MAAM;IAO1B,kBAAkB,CAAC,QAAQ,EAAE,eAAe,EAAE,GAAG,MAAM,EAAE,aAAa,CAAC,YAAY,CAAC,GAAG,YAAY;IAInG,oBAAoB,CAAC,QAAQ,EAAE,eAAe,EAAE,GAAG,MAAM,EAAE,aAAa,CAAC,YAAY,CAAC,GAAG,YAAY;IAIrG,8BAA8B,CAAC,QAAQ,EAAE,eAAe,EAAE,GAAG,MAAM,EAAE,aAAa,CAAC,YAAY,CAAC,GAAG,YAAY;IAoB/G,MAAM,CAAC,CAAC,SAAS,YAAY,EAAE,GAAG,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAMlF,IAAI,IAAI,GAAG;IACX,OAAO,IAAI,OAAO;IAClB,QAAQ,IAAI,OAAO;IACnB,QAAQ,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO;IACxC,QAAQ,IAAI,aAAa,CAAC,YAAY,CAAC;IAEvC,OAAO,CAAC,YAAY,EAAE,YAAY,GAAG,IAAI;IAYzC,SAAS,CAAC,YAAY,EAAE,YAAY,GAAG,IAAI;IAU3C,QAAQ,IAAI,MAAM;CAsCrB"}
|
package/dist/pointer-hub.js
CHANGED
@@ -30,9 +30,9 @@ export class PointerHub {
|
|
30
30
|
const added = Address.newSet(pointer => pointer.address);
|
31
31
|
added.addMany(this.filter(...filter));
|
32
32
|
added.forEach(pointer => listener.onAdd(pointer));
|
33
|
-
// This takes track of the
|
33
|
+
// This takes track of the listener notification state.
|
34
34
|
// It is possible that the pointer has been added, but it has not been notified yet.
|
35
|
-
// That would cause the listener.onAdd method to be
|
35
|
+
// That would cause the listener.onAdd method to be invoked twice.
|
36
36
|
return this.subscribeTransactual({
|
37
37
|
onAdd: (pointer) => {
|
38
38
|
if (added.add(pointer)) {
|
@@ -46,7 +46,7 @@ export class PointerHub {
|
|
46
46
|
}, ...filter);
|
47
47
|
}
|
48
48
|
filter(...types) {
|
49
|
-
return (types.length === 0 ? this.incoming() : Iterables.filter(this, (pointerField) => types.some((type) => type === pointerField.pointerType)));
|
49
|
+
return (types.length === 0 ? this.incoming() : Iterables.filter(this.incoming().values(), (pointerField) => types.some((type) => type === pointerField.pointerType)));
|
50
50
|
}
|
51
51
|
size() { return this.incoming().length; }
|
52
52
|
isEmpty() { return this.size() === 0; }
|
@@ -60,20 +60,25 @@ export class PointerHub {
|
|
60
60
|
}
|
61
61
|
if (this.#inTransaction.isEmpty()) {
|
62
62
|
this.#vertex.graph.subscribeEndTransaction(this.#onEndTransaction);
|
63
|
-
this.#inTransaction = Option.wrap(
|
63
|
+
this.#inTransaction = Option.wrap([{ type: "add", pointerField }]);
|
64
|
+
}
|
65
|
+
else {
|
66
|
+
this.#inTransaction.unwrap().push({ type: "add", pointerField });
|
64
67
|
}
|
65
68
|
this.#immediateListeners.proxy.onAdd(pointerField);
|
66
69
|
}
|
67
70
|
onRemoved(pointerField) {
|
68
71
|
if (this.#inTransaction.isEmpty()) {
|
69
72
|
this.#vertex.graph.subscribeEndTransaction(this.#onEndTransaction);
|
70
|
-
this.#inTransaction = Option.wrap(
|
73
|
+
this.#inTransaction = Option.wrap([{ type: "remove", pointerField }]);
|
74
|
+
}
|
75
|
+
else {
|
76
|
+
this.#inTransaction.unwrap().push({ type: "remove", pointerField });
|
71
77
|
}
|
72
78
|
this.#immediateListeners.proxy.onRemove(pointerField);
|
73
79
|
}
|
74
|
-
[Symbol.iterator]() { return this.incoming().values(); }
|
75
80
|
toString() {
|
76
|
-
return `{Pointers ${this.#vertex.address}, pointers: ${
|
81
|
+
return `{Pointers ${this.#vertex.address}, pointers: ${this.incoming().values()
|
77
82
|
.map((pointerField) => pointerField.toString())}}`;
|
78
83
|
}
|
79
84
|
#addFilteredListener(listeners, listener, filter) {
|
@@ -92,18 +97,19 @@ export class PointerHub {
|
|
92
97
|
}
|
93
98
|
#onEndTransaction = () => {
|
94
99
|
if (this.#vertex.isAttached()) {
|
95
|
-
const
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
this.#transactualListeners.proxy.onRemove(pointer);
|
100
|
+
const log = this.#inTransaction.unwrap("Callback without ChangeLog");
|
101
|
+
log.forEach(({ type, pointerField }) => {
|
102
|
+
if (type === "add") {
|
103
|
+
this.#transactualListeners.proxy.onAdd(pointerField);
|
100
104
|
}
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
+
else if (type === "remove") {
|
106
|
+
this.#transactualListeners.proxy.onRemove(pointerField);
|
107
|
+
}
|
108
|
+
else {
|
109
|
+
panic(`Unknown type: ${type}`);
|
105
110
|
}
|
106
111
|
});
|
112
|
+
log.length = 0;
|
107
113
|
}
|
108
114
|
this.#inTransaction = Option.None;
|
109
115
|
};
|
package/dist/pointer.d.ts
CHANGED
@@ -24,7 +24,7 @@ export declare class PointerField<P extends PointerTypes = PointerTypes> extends
|
|
24
24
|
set targetAddress(newValue: Option<Address>);
|
25
25
|
isEmpty(): boolean;
|
26
26
|
nonEmpty(): boolean;
|
27
|
-
|
27
|
+
resolvedTo(newTarget: Option<Vertex>): void;
|
28
28
|
read(input: DataInput): void;
|
29
29
|
write(output: DataOutput): void;
|
30
30
|
}
|
package/dist/pointer.d.ts.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"pointer.d.ts","sourceRoot":"","sources":["../src/pointer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAsB,YAAY,EAAC,MAAM,kBAAkB,CAAA;AACnH,OAAO,EAAC,MAAM,EAAE,aAAa,EAAC,MAAM,UAAU,CAAA;AAC9C,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAA;AACjC,OAAO,EAAC,UAAU,EAAC,MAAM,eAAe,CAAA;AACxC,OAAO,EAAC,KAAK,EAAE,cAAc,EAAC,MAAM,SAAS,CAAA;AAG7C,QAAA,MAAM,gBAAgB,eAA4B,CAAA;AAElD,MAAM,MAAM,mBAAmB,GAAG,OAAO,gBAAgB,CAAA;AAEzD,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,MAAM,GAAG,mBAAmB,CAAA;AAEhE,qBAAa,YAAY,CAAC,CAAC,SAAS,YAAY,GAAG,YAAY,CAAE,SAAQ,KAAK,CAAC,mBAAmB,EAAE,KAAK,CAAC;;IACtG,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,YAAY,EAAE,SAAS,EAAE,cAAc,CAAC,mBAAmB,CAAC,EAC9C,WAAW,EAAE,CAAC,EACd,SAAS,EAAE,OAAO,GAAG,YAAY,CAAC,CAAC,CAAC;IAU1E,OAAO;IASP,IAAI,UAAU,IAAI,UAAU,CAA+C;IAE3E,IAAI,WAAW,IAAI,CAAC,CAA2B;IAC/C,IAAI,SAAS,IAAI,OAAO,CAAyB;IAEjD,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,aAAa,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IAI/D,SAAS,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,YAAY;IAIjD,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,YAAY;IAM3D,KAAK,CAAC,MAAM,SAAS,YAAY,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG,MAAM,SAAS,KAAK,GAAG,KAAK,GAAG,MAAM,CAAC,GAAG,IAAI;IAInG,KAAK,IAAI,IAAI;IAEb,IAAI,YAAY,IAAI,MAAM,CAAC,MAAM,CAAC,
|
1
|
+
{"version":3,"file":"pointer.d.ts","sourceRoot":"","sources":["../src/pointer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAsB,YAAY,EAAC,MAAM,kBAAkB,CAAA;AACnH,OAAO,EAAC,MAAM,EAAE,aAAa,EAAC,MAAM,UAAU,CAAA;AAC9C,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAA;AACjC,OAAO,EAAC,UAAU,EAAC,MAAM,eAAe,CAAA;AACxC,OAAO,EAAC,KAAK,EAAE,cAAc,EAAC,MAAM,SAAS,CAAA;AAG7C,QAAA,MAAM,gBAAgB,eAA4B,CAAA;AAElD,MAAM,MAAM,mBAAmB,GAAG,OAAO,gBAAgB,CAAA;AAEzD,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,MAAM,GAAG,mBAAmB,CAAA;AAEhE,qBAAa,YAAY,CAAC,CAAC,SAAS,YAAY,GAAG,YAAY,CAAE,SAAQ,KAAK,CAAC,mBAAmB,EAAE,KAAK,CAAC;;IACtG,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,YAAY,EAAE,SAAS,EAAE,cAAc,CAAC,mBAAmB,CAAC,EAC9C,WAAW,EAAE,CAAC,EACd,SAAS,EAAE,OAAO,GAAG,YAAY,CAAC,CAAC,CAAC;IAU1E,OAAO;IASP,IAAI,UAAU,IAAI,UAAU,CAA+C;IAE3E,IAAI,WAAW,IAAI,CAAC,CAA2B;IAC/C,IAAI,SAAS,IAAI,OAAO,CAAyB;IAEjD,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,aAAa,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IAI/D,SAAS,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,YAAY;IAIjD,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,YAAY;IAM3D,KAAK,CAAC,MAAM,SAAS,YAAY,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG,MAAM,SAAS,KAAK,GAAG,KAAK,GAAG,MAAM,CAAC,GAAG,IAAI;IAInG,KAAK,IAAI,IAAI;IAEb,IAAI,YAAY,IAAI,MAAM,CAAC,MAAM,CAAC,CAIjC;IACD,IAAI,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,EAQtC;IAED,IAAI,aAAa,IAAI,MAAM,CAAC,OAAO,CAAC,CAA6B;IACjE,IAAI,aAAa,CAAC,QAAQ,EAAE,MAAM,CAAC,OAAO,CAAC,EAM1C;IAED,OAAO,IAAI,OAAO;IAClB,QAAQ,IAAI,OAAO;IAEnB,UAAU,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,GAAG,IAAI;IAE3C,IAAI,CAAC,KAAK,EAAE,SAAS;IAIrB,KAAK,CAAC,MAAM,EAAE,UAAU;CAS3B"}
|
package/dist/pointer.js
CHANGED
@@ -37,7 +37,11 @@ export class PointerField extends Field {
|
|
37
37
|
this.targetVertex = Option.wrap(vertex);
|
38
38
|
}
|
39
39
|
defer() { this.targetVertex = Option.None; }
|
40
|
-
get targetVertex() {
|
40
|
+
get targetVertex() {
|
41
|
+
return this.graph.inTransaction()
|
42
|
+
? this.#targetAddress.flatMap((address) => this.graph.findVertex(address))
|
43
|
+
: this.#targetVertex;
|
44
|
+
}
|
41
45
|
set targetVertex(option) {
|
42
46
|
if (option.nonEmpty()) {
|
43
47
|
const issue = PointerHub.validate(this, option.unwrap());
|
@@ -59,14 +63,7 @@ export class PointerField extends Field {
|
|
59
63
|
}
|
60
64
|
isEmpty() { return this.targetAddress.isEmpty(); }
|
61
65
|
nonEmpty() { return this.targetAddress.nonEmpty(); }
|
62
|
-
|
63
|
-
const targetAddress = this.targetAddress;
|
64
|
-
const target = targetAddress.flatMap((address) => this.graph.findVertex(address));
|
65
|
-
if (targetAddress.nonEmpty() && target.isEmpty()) {
|
66
|
-
return panic(`${targetAddress.unwrapOrNull()?.toString()} could not be resolved`);
|
67
|
-
}
|
68
|
-
this.#targetVertex = target;
|
69
|
-
}
|
66
|
+
resolvedTo(newTarget) { this.#targetVertex = newTarget; }
|
70
67
|
read(input) {
|
71
68
|
this.targetAddress = input.readBoolean() ? Option.wrap(Address.read(input)) : Option.None;
|
72
69
|
}
|
package/dist/sync-source.js
CHANGED
@@ -52,7 +52,7 @@ export class SyncSource {
|
|
52
52
|
updates.push({
|
53
53
|
type: "update-pointer",
|
54
54
|
address: update.address.decompose(),
|
55
|
-
target: update.
|
55
|
+
target: update.newAddress.unwrapOrNull()?.decompose()
|
56
56
|
});
|
57
57
|
}
|
58
58
|
else if (update.type === "delete") {
|
package/dist/updates.d.ts
CHANGED
@@ -43,10 +43,10 @@ export declare class PrimitiveUpdate<V extends PrimitiveValues = PrimitiveValues
|
|
43
43
|
export declare class PointerUpdate implements Modification {
|
44
44
|
#private;
|
45
45
|
readonly type = "pointer";
|
46
|
-
constructor(address: Address,
|
46
|
+
constructor(address: Address, oldAddress: Option<Address>, newAddress: Option<Address>);
|
47
47
|
get address(): Address;
|
48
|
-
get
|
49
|
-
get
|
48
|
+
get oldAddress(): Option<Address>;
|
49
|
+
get newAddress(): Option<Address>;
|
50
50
|
matches(field: PointerField): boolean;
|
51
51
|
inverse(graph: BoxGraph): void;
|
52
52
|
forward(graph: BoxGraph): void;
|
package/dist/updates.d.ts.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"updates.d.ts","sourceRoot":"","sources":["../src/updates.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,cAAc,EAAiB,eAAe,EAAE,kBAAkB,EAAC,MAAM,aAAa,CAAA;AAC9F,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAA;AACjC,OAAO,EAAC,YAAY,EAAC,MAAM,WAAW,CAAA;AACtC,OAAO,EAAyB,SAAS,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,EAAC,MAAM,kBAAkB,CAAA;AAC5F,OAAO,EAAC,QAAQ,EAAC,MAAM,SAAS,CAAA;AAEhC,MAAM,MAAM,MAAM,GAAG,SAAS,GAAG,eAAe,GAAG,aAAa,GAAG,YAAY,CAAA;AAE/E,yBAAiB,OAAO,CAAC;IACd,MAAM,MAAM,GAAI,OAAO,SAAS,KAAG,aAAa,CAAC,MAAM,CAmC7D,CAAA;CACJ;AAED,UAAU,YAAY;IAClB,OAAO,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI,CAAA;IAC9B,OAAO,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI,CAAA;IAC9B,KAAK,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI,CAAA;CAClC;AAED,qBAAa,SAAU,YAAW,YAAY;;IAC1C,QAAQ,CAAC,IAAI,SAAQ;gBAMT,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,eAAe;IAMtE,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,CAAoB;IAC3C,IAAI,IAAI,IAAI,MAAM,CAAoB;IACtC,IAAI,QAAQ,IAAI,eAAe,CAAwB;IAEvD,OAAO,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI;IAI9B,OAAO,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI;IAI9B,KAAK,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI;IAQ/B,QAAQ,IAAI,MAAM;IAIlB,aAAa,CAAC,MAAM,EAAE,QAAQ,GAAG,MAAM;CAC1C;AAED,MAAM,MAAM,WAAW,GAAG,eAAe,GAAG,aAAa,CAAA;AAEzD,qBAAa,eAAe,CAAC,CAAC,SAAS,eAAe,GAAG,eAAe,CAAE,YAAW,YAAY;;IAC7F,QAAQ,CAAC,IAAI,eAAc;gBAOf,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,kBAAkB,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC;IAO5F,IAAI,OAAO,IAAI,OAAO,CAAuB;IAC7C,IAAI,QAAQ,IAAI,CAAC,CAAwB;IACzC,IAAI,QAAQ,IAAI,CAAC,CAAwB;IAEzC,OAAO,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO;IAEvC,OAAO,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI;IAC9B,OAAO,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI;IAE9B,KAAK,CAAC,KAAK,EAAE,QAAQ,GAAG,cAAc,CAAC,CAAC,CAAC;IAKzC,KAAK,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI;IAQ/B,QAAQ,IAAI,MAAM;CAGrB;AAED,qBAAa,aAAc,YAAW,YAAY;;IAC9C,QAAQ,CAAC,IAAI,aAAY;gBAMb,OAAO,EAAE,OAAO,EAAE,
|
1
|
+
{"version":3,"file":"updates.d.ts","sourceRoot":"","sources":["../src/updates.ts"],"names":[],"mappings":"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"}
|
package/dist/updates.js
CHANGED
@@ -107,19 +107,19 @@ export class PrimitiveUpdate {
|
|
107
107
|
export class PointerUpdate {
|
108
108
|
type = "pointer";
|
109
109
|
#address;
|
110
|
-
#
|
111
|
-
#
|
112
|
-
constructor(address,
|
110
|
+
#oldAddress;
|
111
|
+
#newAddress;
|
112
|
+
constructor(address, oldAddress, newAddress) {
|
113
113
|
this.#address = address;
|
114
|
-
this.#
|
115
|
-
this.#
|
114
|
+
this.#oldAddress = oldAddress;
|
115
|
+
this.#newAddress = newAddress;
|
116
116
|
}
|
117
117
|
get address() { return this.#address; }
|
118
|
-
get
|
119
|
-
get
|
118
|
+
get oldAddress() { return this.#oldAddress; }
|
119
|
+
get newAddress() { return this.#newAddress; }
|
120
120
|
matches(field) { return field.address.equals(this.address); }
|
121
|
-
inverse(graph) { this.field(graph).targetAddress = this.#
|
122
|
-
forward(graph) { this.field(graph).targetAddress = this.#
|
121
|
+
inverse(graph) { this.field(graph).targetAddress = this.#oldAddress; }
|
122
|
+
forward(graph) { this.field(graph).targetAddress = this.#newAddress; }
|
123
123
|
field(graph) {
|
124
124
|
return graph.findVertex(this.#address)
|
125
125
|
.unwrap(() => `Could not find PointerField at ${this.#address}`);
|
@@ -127,14 +127,14 @@ export class PointerUpdate {
|
|
127
127
|
write(output) {
|
128
128
|
output.writeString(this.type);
|
129
129
|
this.#address.write(output);
|
130
|
-
this.#
|
130
|
+
this.#oldAddress.match({
|
131
131
|
none: () => output.writeBoolean(false),
|
132
132
|
some: address => {
|
133
133
|
output.writeBoolean(true);
|
134
134
|
address.write(output);
|
135
135
|
}
|
136
136
|
});
|
137
|
-
this.#
|
137
|
+
this.#newAddress.match({
|
138
138
|
none: () => output.writeBoolean(false),
|
139
139
|
some: address => {
|
140
140
|
output.writeBoolean(true);
|
@@ -143,7 +143,7 @@ export class PointerUpdate {
|
|
143
143
|
});
|
144
144
|
}
|
145
145
|
toString() {
|
146
|
-
return `{PointerUpdate oldValue: ${this.#
|
146
|
+
return `{PointerUpdate oldValue: ${this.#oldAddress.unwrapOrNull()}, newValue: ${this.#newAddress.unwrapOrNull()}`;
|
147
147
|
}
|
148
148
|
}
|
149
149
|
export class DeleteUpdate {
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@opendaw/lib-box",
|
3
|
-
"version": "0.0.
|
3
|
+
"version": "0.0.14",
|
4
4
|
"main": "./dist/index.js",
|
5
5
|
"types": "./dist/index.d.ts",
|
6
6
|
"license": "LGPL-3.0-or-later",
|
@@ -22,12 +22,12 @@
|
|
22
22
|
"test": "vitest run"
|
23
23
|
},
|
24
24
|
"dependencies": {
|
25
|
-
"@opendaw/lib-runtime": "^0.0.
|
26
|
-
"@opendaw/lib-std": "^0.0.
|
25
|
+
"@opendaw/lib-runtime": "^0.0.14",
|
26
|
+
"@opendaw/lib-std": "^0.0.14"
|
27
27
|
},
|
28
28
|
"devDependencies": {
|
29
|
-
"@opendaw/eslint-config": "^0.0.
|
30
|
-
"@opendaw/typescript-config": "^0.0.
|
29
|
+
"@opendaw/eslint-config": "^0.0.14",
|
30
|
+
"@opendaw/typescript-config": "^0.0.14"
|
31
31
|
},
|
32
|
-
"gitHead": "
|
32
|
+
"gitHead": "fddd4acd15f24bb565b6c11a5f8521284da203d0"
|
33
33
|
}
|