@@ -2,7 +2,7 @@ import getRelationData from "./getRelationData";
22import getBlockProps from "./getBlockProps" ;
33import type { json } from "./getBlockProps" ;
44import setBlockProps from "./setBlockProps" ;
5- import { getSetting } from "./extensionSettings" ;
5+ import { getSetting , setSetting } from "./extensionSettings" ;
66import {
77 createReifiedRelation ,
88 DISCOURSE_GRAPH_PROP_NAME ,
@@ -13,50 +13,58 @@ const MIGRATION_PROP_NAME = "relation-migration";
1313const migrateRelations = async ( dryRun = false ) : Promise < number > => {
1414 const authorized = getSetting ( "use-reified-relations" ) ;
1515 if ( ! authorized ) return 0 ;
16- const processed = new Set < string > ( ) ;
17- const relationData = await getRelationData ( ) ;
1816 let numProcessed = 0 ;
19- for ( const rel of relationData ) {
20- const key = `${ rel . source } :${ rel . relUid } :${ rel . target } ` ;
21- if ( processed . has ( key ) ) continue ;
22- processed . add ( key ) ;
23- if ( ! dryRun ) {
24- const uid = ( await createReifiedRelation ( {
25- sourceUid : rel . source ,
26- destinationUid : rel . target ,
27- relationBlockUid : rel . relUid ,
28- } ) ) ! ;
29- const sourceProps = getBlockProps ( rel . source ) ;
30- const dgDataOrig = sourceProps [ DISCOURSE_GRAPH_PROP_NAME ] ;
31- const dgData : Record < string , json > =
32- dgDataOrig !== null &&
33- typeof dgDataOrig === "object" &&
34- ! Array . isArray ( dgDataOrig )
35- ? dgDataOrig
36- : { } ;
37- const migrationDataOrig = dgData [ MIGRATION_PROP_NAME ] ;
38- let migrationData : Record < string , json > =
39- migrationDataOrig !== null &&
40- typeof migrationDataOrig === "object" &&
41- ! Array . isArray ( migrationDataOrig )
42- ? migrationDataOrig
43- : { } ;
44- if ( migrationData [ uid ] !== undefined ) {
45- console . debug ( `reprocessed ${ key } ` ) ;
17+ await setSetting ( "use-reified-relations" , false ) ; // so queries use patterns
18+ // wait for the settings to propagate
19+ await new Promise ( ( resolve ) => setTimeout ( resolve , 150 ) ) ;
20+ try {
21+ const processed = new Set < string > ( ) ;
22+ const relationData = await getRelationData ( ) ;
23+ for ( const rel of relationData ) {
24+ const key = `${ rel . source } :${ rel . relUid } :${ rel . target } ` ;
25+ if ( processed . has ( key ) ) continue ;
26+ processed . add ( key ) ;
27+ if ( ! dryRun ) {
28+ const uid = ( await createReifiedRelation ( {
29+ sourceUid : rel . source ,
30+ destinationUid : rel . target ,
31+ relationBlockUid : rel . relUid ,
32+ } ) ) ! ;
33+ const sourceProps = getBlockProps ( rel . source ) ;
34+ const dgDataOrig = sourceProps [ DISCOURSE_GRAPH_PROP_NAME ] ;
35+ const dgData : Record < string , json > =
36+ dgDataOrig !== null &&
37+ typeof dgDataOrig === "object" &&
38+ ! Array . isArray ( dgDataOrig )
39+ ? dgDataOrig
40+ : { } ;
41+ const migrationDataOrig = dgData [ MIGRATION_PROP_NAME ] ;
42+ let migrationData : Record < string , json > =
43+ migrationDataOrig !== null &&
44+ typeof migrationDataOrig === "object" &&
45+ ! Array . isArray ( migrationDataOrig )
46+ ? migrationDataOrig
47+ : { } ;
48+ if ( migrationData [ uid ] !== undefined ) {
49+ console . debug ( `reprocessed ${ key } ` ) ;
50+ }
51+ // clean up old migration entries
52+ migrationData = Object . fromEntries (
53+ Object . entries ( migrationData ) . filter (
54+ ( [ uid ] ) =>
55+ window . roamAlphaAPI . q (
56+ `[:find ?p :where [?p :block/uid "${ uid } "]]` ,
57+ ) . length > 0 ,
58+ ) ,
59+ ) ;
60+ migrationData [ uid ] = new Date ( ) . valueOf ( ) ;
61+ dgData [ MIGRATION_PROP_NAME ] = migrationData ;
62+ setBlockProps ( rel . source , { [ DISCOURSE_GRAPH_PROP_NAME ] : dgData } ) ;
4663 }
47- // clean up old migration entries
48- migrationData = Object . fromEntries (
49- Object . entries ( migrationData ) . filter (
50- ( [ uid ] ) =>
51- window . roamAlphaAPI . q ( `[:find ?p :where [?p :block/uid "${ uid } "]]` )
52- . length > 0 ,
53- ) ,
54- ) ;
55- migrationData [ uid ] = new Date ( ) . valueOf ( ) ;
56- dgData [ MIGRATION_PROP_NAME ] = migrationData ;
57- setBlockProps ( rel . source , { [ DISCOURSE_GRAPH_PROP_NAME ] : dgData } ) ;
64+ numProcessed ++ ;
5865 }
59- numProcessed ++ ;
66+ } finally {
67+ await setSetting ( "use-reified-relations" , true ) ;
6068 }
6169 return numProcessed ;
6270} ;
0 commit comments