From 4903bc5149e8175e386bf6858e2168570cd6fe92 Mon Sep 17 00:00:00 2001 From: Tony Garnock-Jones Date: Sun, 3 Dec 2023 22:35:47 +0100 Subject: [PATCH] Allow prettier display of dataflow cyclic dependencies --- packages/core/src/runtime/actor.ts | 4 +++- packages/core/src/runtime/dataflow.ts | 14 ++++++-------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/packages/core/src/runtime/actor.ts b/packages/core/src/runtime/actor.ts index 91a2a5b..acd6b67 100644 --- a/packages/core/src/runtime/actor.ts +++ b/packages/core/src/runtime/actor.ts @@ -131,7 +131,9 @@ export class Actor { get dataflowGraph(): DataflowGraph { if (this._dataflowGraph === null) { this._dataflowGraph = - new Graph((b: DataflowBlock) => '' + embeddedId(b), Cell.canonicalizer); + new Graph((b: DataflowBlock) => '' + embeddedId(b), + Cell.canonicalizer, + g => Array.from(g.values())); } return this._dataflowGraph; } diff --git a/packages/core/src/runtime/dataflow.ts b/packages/core/src/runtime/dataflow.ts index c153dd1..5176bce 100644 --- a/packages/core/src/runtime/dataflow.ts +++ b/packages/core/src/runtime/dataflow.ts @@ -15,18 +15,16 @@ export interface ObservingGraph { export class Graph implements ObservingGraph { readonly edgesForward: FlexMap>; readonly edgesReverse: FlexMap>; - readonly subjectIdCanonicalizer: Canonicalizer; - readonly objectIdCanonicalizer: Canonicalizer; damagedNodes: FlexSet; currentSubjectId: SubjectId | undefined; - constructor(subjectIdCanonicalizer: Canonicalizer, - objectIdCanonicalizer: Canonicalizer) - { + constructor( + public readonly subjectIdCanonicalizer: Canonicalizer, + public readonly objectIdCanonicalizer: Canonicalizer, + public formatCycle: (group: FlexSet) => any = g => g, + ) { this.edgesForward = new FlexMap(objectIdCanonicalizer); this.edgesReverse = new FlexMap(subjectIdCanonicalizer); - this.subjectIdCanonicalizer = subjectIdCanonicalizer; - this.objectIdCanonicalizer = objectIdCanonicalizer; this.damagedNodes = new FlexSet(objectIdCanonicalizer); } @@ -75,7 +73,7 @@ export class Graph implements ObservingGraph { const alreadyDamaged = workSet.intersect(repairedThisRound); if (alreadyDamaged.size > 0) { - console.warn('Cyclic dependencies involving', alreadyDamaged); + console.warn('Cyclic dependencies involving', this.formatCycle(alreadyDamaged)); } workSet = workSet.subtract(repairedThisRound);