Browse Source

WIP: rewrite core

Joeri Exelmans 1 year ago
parent
commit
238ca7dfaa

+ 1 - 1
src/frontend/d3graph/reducers/delta_graph.ts

@@ -1,5 +1,5 @@
 import {Delta, Transaction} from "onion/delta";
-import {NodeCreation, NodeDeletion, EdgeUpdate} from "onion/primitive_delta";
+import {NodeCreation, NodeDeletion, EdgeUpdate} from "onion/delta";
 import {D3GraphData, D3NodeData, D3LinkData} from "../d3graph";
 
 export type DeltaGraphState = D3GraphData<Delta,null>;

+ 1 - 1
src/frontend/demos/demo_bm.tsx

@@ -4,7 +4,7 @@ import {Center, Grid, Group, Space, Stack, Text, Title} from '@mantine/core';
 import {OnionContext} from "../onion_context";
 import {DeltaRegistry} from "onion/delta_registry";
 import {VersionRegistry} from "onion/version";
-import {mockUuid} from 'onion/test_helpers';
+import {mockUuid} from "../../util/test_helpers";
 import {InfoHoverCard} from '../info_hover_card';
 import {newOnion, undoButtonHelpText} from "../versioned_model/single_model";
 import {newCorrespondence, undoButtonHelpTextCorr} from '../versioned_model/correspondence';

+ 1 - 1
src/frontend/demos/demo_corr.tsx

@@ -2,7 +2,7 @@ import * as React from "react";
 import {SimpleGrid, Text, Title, Stack, Center, Image, Group, Space} from "@mantine/core";
 
 import {DeltaRegistry} from "onion/delta_registry";;
-import {mockUuid} from "onion/test_helpers";
+import {mockUuid} from "../../util/test_helpers";
 import {OnionContext} from "../onion_context";
 import {VersionRegistry} from "onion/version";
 import {newOnion, undoButtonHelpText} from "../versioned_model/single_model";

+ 1 - 1
src/frontend/demos/demo_editor.tsx

@@ -3,7 +3,7 @@ import {SimpleGrid, Text, Title, Stack, Center, Group, Space, Image} from "@mant
 
 import {DeltaRegistry} from "onion/delta_registry";;
 import {VersionRegistry} from "onion/version";
-import {mockUuid} from "onion/test_helpers";
+import {mockUuid} from "../../util/test_helpers";
 
 import {newOnion} from "../versioned_model/single_model";
 import {OnionContext} from "../onion_context";

+ 1 - 1
src/frontend/demos/demo_le.tsx

@@ -4,7 +4,7 @@ import {IconTrash, IconRowInsertTop, IconRowInsertBottom, IconAlertCircle} from
 
 import {DeltaRegistry} from "onion/delta_registry";
 import {VersionRegistry} from "onion/version";
-import {mockUuid} from "onion/test_helpers";
+import {mockUuid} from "../../util/test_helpers";
 import {PrimitiveValue} from "onion/types";
 import {INodeState, IValueState} from "onion/graph_state";
 import {Version} from "onion/version";

+ 2 - 2
src/frontend/demos/demo_live.tsx

@@ -9,8 +9,8 @@ import {newOnion, undoButtonHelpText, VersionedModelState,} from '../versioned_m
 import {InfoHoverCard, InfoHoverCardOverlay} from "../info_hover_card";
 import {OnionContext} from "../onion_context";
 
-import {mockUuid} from "onion/test_helpers";
-import {NodeDeletion} from "onion/primitive_delta";
+import {mockUuid} from "../../util/test_helpers";
+import {NodeDeletion} from "onion/delta";
 import {DeltaRegistry} from "onion/delta_registry";
 import {VersionRegistry} from "onion/version";
 import {Delta} from "onion/delta";

+ 1 - 1
src/frontend/demos/demo_pd.tsx

@@ -6,7 +6,7 @@ import {OnionContext} from "../onion_context";
 import {DeltaRegistry} from "onion/delta_registry";
 import {VersionRegistry} from "onion/version";
 import {PrimitiveValue} from 'onion/types';
-import {mockUuid} from 'onion/test_helpers';
+import {mockUuid} from '../../util/test_helpers';
 import {Actionblock, Resultblock} from './blocks';
 import pdImage from './assets/pd.svg';
 import {newOnion, undoButtonHelpText, VersionedModelState} from '../versioned_model/single_model';

+ 1 - 1
src/frontend/onion_context.tsx

@@ -2,7 +2,7 @@ import * as React from "react";
 
 import {DeltaRegistry} from "onion/delta_registry";;
 import {UUID} from "onion/types";
-import {mockUuid} from "onion/test_helpers";
+import {mockUuid} from "../util/test_helpers";
 import {useConst} from "./use_const";
 
 export interface OnionContextType {

+ 1 - 1
src/frontend/versioned_model/manual_renderer.tsx

@@ -14,7 +14,7 @@ import {Version} from "onion/version";
 import {InfoHoverCardOverlay} from "../info_hover_card";
 import {D3Graph, defaultGraphForces} from "../d3graph/d3graph";
 import {D3OnionGraphData, D3GraphUpdater} from "../d3graph/reducers/onion_graph";
-import {EdgeCreation, EdgeUpdate, NodeCreation, NodeDeletion} from "onion/primitive_delta";
+import {EdgeCreation, EdgeUpdate, NodeCreation, NodeDeletion} from "onion/delta";
 import {PrimitiveDelta} from "onion/delta";
 import {DeltaRegistry} from "onion/delta_registry";
 import {PrimitiveValue} from "onion/types";

+ 9 - 4
src/onion/delta.test.ts

@@ -143,11 +143,15 @@ describe("Primitive Delta", () => {
     const newTargetCreation = registry.newNodeCreation(getId()); // no conflict
     const edgeUpdate = registry.newEdgeUpdate(edgeCreation.overwrite(), new TargetNode(newTargetCreation));
 
-    console.log("edgeUpdate.conflictsWith", edgeUpdate.conflictsWith, "edgeDeletion.conflictsWith", edgeDeletion.conflictsWith);
+    // console.log("edgeUpdate.conflictsWith", edgeUpdate.conflictsWith, "edgeDeletion.conflictsWith", edgeDeletion.conflictsWith);
 
 
-    assert(edgeUpdate.conflictsWith.length === 1, "expected U/U conflict");
+    assert(edgeUpdate.conflictsWith.length === 2, "expected U/U conflict");
+    assert(edgeUpdate.conflictsWith.some(([d])=>d===edgeDeletion), "expected U/U conflict");
+    assert(edgeUpdate.conflictsWith.some(([d])=>d===sourceDeletion), "expected U/U conflict");
+
     assert(edgeDeletion.conflictsWith.length === 1, "expected U/U conflict");
+    assert(edgeDeletion.conflictsWith.some(([d])=>d===edgeUpdate), "expected U/U conflict");
   });
 
   it("Delete/require (edge target) conflict", () => {
@@ -160,6 +164,7 @@ describe("Primitive Delta", () => {
     const targetDeletion = registry.newNodeDeletion(targetCreation, [], []);
 
     const edgeCreation = registry.newEdgeUpdate(sourceCreation.createOutgoingEdge("label"), new TargetNode(targetCreation));
+
     assert(edgeCreation.conflictsWith.length === 1, "expected require/delete conflict");
     assert(targetDeletion.conflictsWith.length === 1, "expected require/delete conflict");
   });
@@ -219,8 +224,8 @@ describe("Primitive Delta", () => {
 
     const nodeCreation = registry.newNodeCreation(getId());
     const edgeCreation = registry.newEdgeUpdate(nodeCreation.createOutgoingEdge("label"), new TargetNode(nodeCreation));
-    const edgeUpdate = registry.newEdgeUpdate(edgeCreation.overwrite(), new TargetValue(null));
-    const nodeDeletion = registry.newNodeDeletion(nodeCreation, [edgeUpdate], [edgeUpdate]);
+    const edgeDeletion = registry.newEdgeUpdate(edgeCreation.overwrite(), new TargetValue(null));
+    const nodeDeletion = registry.newNodeDeletion(nodeCreation, [edgeDeletion], [edgeDeletion]);
 
     // console.log(nodeDeletion.conflictsWith);
     assert(nodeDeletion.conflictsWith.length === 0, "expected no conflicts");

+ 7 - 1
src/onion/delta.ts

@@ -255,6 +255,7 @@ export class ExistingEdge extends Edge {
 // Target of an edge
 export interface Target {
   value: NodeCreation | PrimitiveValue;
+  registerDependency(u: EdgeUpdate);
   getDependencies(): [Delta, string][];
   serialize(): any;
 }
@@ -265,6 +266,9 @@ export class TargetNode implements Target {
   constructor(value) {
     this.value = value;
   }
+  registerDependency(u: EdgeUpdate) {
+    this.value.registerIncomingEdge(u);
+  }
   getDependencies(): [Delta, string][] {
     return [[this.value, "TGT"]];
   }
@@ -279,6 +283,7 @@ export class TargetValue implements Target {
   constructor(value) {
     this.value = value;
   }
+  registerDependency() {}
   getDependencies() {
     return [];
   }
@@ -297,7 +302,7 @@ export class EdgeUpdate extends PrimitiveDelta {
   readonly overwritable: ExistingEdge;
 
   constructor(hash: Buffer, overwrites: Edge, target: Target, reads: ExistingEdge[]) {
-    super(hash, `U(${overwrites.label})`);
+    super(hash, `U(${overwrites.label} -> ${target.value})`);
     // Record our own dependencies:
     this.overwrites = overwrites;
     this.target = target;
@@ -308,6 +313,7 @@ export class EdgeUpdate extends PrimitiveDelta {
     // Register our dependencies' inverse dependencies + detect conflicts:
     overwrites.registerWrite(this);
     reads.forEach(r => r.registerRead(this));
+    target.registerDependency(this);
   }
 
   // Makes code slightly easier to read

+ 1 - 1
src/onion/delta_parser.ts

@@ -6,7 +6,7 @@ import {
   EdgeCreation,
   EdgeUpdate,
   EdgeTargetType,
-} from "./primitive_delta";
+} from "./delta";
 
 import {DeltaRegistry} from "./delta_registry";
 

+ 1 - 1
src/onion/graph_state.ts

@@ -6,7 +6,7 @@ import {
   EdgeCreation,
   EdgeUpdate,
   EdgeTargetType,
-} from "./primitive_delta";
+} from "./delta";
 
 import {DeltaRegistry} from "./delta_registry";
 

+ 1 - 1
src/onion/legacy/delta_parser.ts.legacy

@@ -6,7 +6,7 @@ import {
   EdgeCreation,
   EdgeUpdate,
   EdgeTargetType,
-} from "./primitive_delta";
+} from "./delta";
 
 import {DeltaRegistry} from "./delta_registry";
 

+ 1 - 1
src/onion/legacy/delta_registry.ts.legacy

@@ -1,5 +1,5 @@
 import {Delta, Transaction, findTxDependencies} from "./delta";
-import {NodeCreation, NodeDeletion, EdgeCreation, EdgeUpdate, EdgeTargetType} from "./primitive_delta";
+import {NodeCreation, NodeDeletion, EdgeCreation, EdgeUpdate, EdgeTargetType} from "./delta";
 import {UUID} from "./types";
 import {createHash} from "crypto";
 import {Buffer} from "buffer";

+ 1 - 1
src/onion/version.test.ts

@@ -16,7 +16,7 @@ import {
   NodeDeletion,
   EdgeCreation,
   EdgeUpdate,
-} from "./primitive_delta";
+} from "./delta";
 
 import {DeltaRegistry} from "./delta_registry";
 

+ 1 - 1
src/parser/rountangle_parser.test.ts

@@ -9,7 +9,7 @@ import {
   NodeDeletion,
   EdgeCreation,
   EdgeUpdate,
-} from "../onion/primitive_delta";
+} from "../onion/delta";
 
 import {DeltaRegistry} from "../onion/delta_registry";
 

+ 1 - 1
src/parser/rountangle_parser.ts

@@ -7,7 +7,7 @@ import {
   NodeDeletion,
   EdgeCreation,
   EdgeUpdate,
-} from "../onion/primitive_delta";
+} from "../onion/delta";
 
 import {DeltaRegistry} from "../onion/delta_registry";