From 6967698d325c7c1e246b9cb87cf96011ee540c0a Mon Sep 17 00:00:00 2001
From: Tom French <tom@tomfren.ch>
Date: Sun, 15 May 2022 23:15:04 +0100
Subject: [PATCH] refactor: move crdt files into separate directory

---
 packages/loot-core/bin/get-db-schema                  |  1 -
 packages/loot-core/bin/profile-sql.js                 |  1 -
 packages/loot-core/src/server/api.js                  |  2 +-
 .../loot-core/src/server/aql/schema/executors.test.js |  2 +-
 packages/loot-core/src/server/crdt/index.js           |  4 ++++
 packages/loot-core/src/server/{ => crdt}/merkle.js    |  0
 .../loot-core/src/server/{ => crdt}/merkle.test.js    |  2 +-
 packages/loot-core/src/server/{ => crdt}/timestamp.js |  6 +++---
 .../loot-core/src/server/{ => crdt}/timestamp.test.js |  2 +-
 packages/loot-core/src/server/db/index.js             |  7 ++++---
 packages/loot-core/src/server/main.js                 | 11 ++++++-----
 packages/loot-core/src/server/main.test.js            |  2 +-
 packages/loot-core/src/server/prefs.js                |  2 +-
 packages/loot-core/src/server/sync/index.js           |  9 +++++----
 packages/loot-core/src/server/sync/migrate.js         |  2 +-
 packages/loot-core/src/server/sync/repair.js          |  3 +--
 .../loot-core/src/server/sync/sync.property.test.js   |  2 +-
 packages/loot-core/src/server/sync/sync.test.js       |  3 ++-
 packages/loot-core/src/server/tests/mockSyncServer.js |  4 ++--
 packages/loot-core/src/server/undo.js                 |  2 +-
 20 files changed, 36 insertions(+), 31 deletions(-)
 mode change 100755 => 100644 packages/loot-core/bin/get-db-schema
 create mode 100644 packages/loot-core/src/server/crdt/index.js
 rename packages/loot-core/src/server/{ => crdt}/merkle.js (100%)
 rename packages/loot-core/src/server/{ => crdt}/merkle.test.js (99%)
 rename packages/loot-core/src/server/{ => crdt}/timestamp.js (98%)
 rename packages/loot-core/src/server/{ => crdt}/timestamp.test.js (99%)

diff --git a/packages/loot-core/bin/get-db-schema b/packages/loot-core/bin/get-db-schema
old mode 100755
new mode 100644
index f419e7045..2e17a5cec
--- a/packages/loot-core/bin/get-db-schema
+++ b/packages/loot-core/bin/get-db-schema
@@ -3,7 +3,6 @@ process.env.LOOT_DATA_DIR = __dirname + '/../../../../data';
 import * as sqlite from '../platform/server/sqlite';
 import * as db from '../server/db';
 import { getMessages } from '../server/sync';
-import Timestamp from '../server/timestamp';
 
 let dbPath = process.argv[2];
 let tables = [
diff --git a/packages/loot-core/bin/profile-sql.js b/packages/loot-core/bin/profile-sql.js
index ac1c0839e..484202587 100755
--- a/packages/loot-core/bin/profile-sql.js
+++ b/packages/loot-core/bin/profile-sql.js
@@ -4,7 +4,6 @@ import os from 'os';
 import * as sqlite from '../src/platform/server/sqlite';
 import * as db from '../src/server/db';
 import { batchMessages, setSyncingMode } from '../src/server/sync';
-import Timestamp from '../src/server/timestamp';
 import { runQuery } from '../src/server/aql/schema/run-query';
 import asyncStorage from '../src/platform/server/asyncStorage';
 import { makeChild } from '../src/shared/transactions';
diff --git a/packages/loot-core/src/server/api.js b/packages/loot-core/src/server/api.js
index 6c538cad4..460fa5802 100644
--- a/packages/loot-core/src/server/api.js
+++ b/packages/loot-core/src/server/api.js
@@ -17,7 +17,7 @@ import * as prefs from './prefs';
 import * as monthUtils from '../shared/months';
 import * as cloudStorage from './cloud-storage';
 import { setSyncingMode, batchMessages } from './sync';
-import { getClock } from './timestamp';
+import { getClock } from './crdt';
 import { runMutator } from './mutators';
 import { integerToAmount } from '../shared/util';
 import { runQuery as aqlQuery } from './aql/schema/run-query';
diff --git a/packages/loot-core/src/server/aql/schema/executors.test.js b/packages/loot-core/src/server/aql/schema/executors.test.js
index ba3f0a383..0bd4a1ab3 100644
--- a/packages/loot-core/src/server/aql/schema/executors.test.js
+++ b/packages/loot-core/src/server/aql/schema/executors.test.js
@@ -2,7 +2,7 @@ import fc from 'fast-check';
 import * as db from '../../db';
 import query from '../../../shared/query';
 import { batchMessages, setSyncingMode } from '../../sync/index';
-import { setClock } from '../../timestamp';
+import { setClock } from '../../crdt';
 import { groupById } from '../../../shared/util';
 import arbs from '../../../mocks/arbitrary-schema';
 import { runQuery } from './run-query';
diff --git a/packages/loot-core/src/server/crdt/index.js b/packages/loot-core/src/server/crdt/index.js
new file mode 100644
index 000000000..a62ee7991
--- /dev/null
+++ b/packages/loot-core/src/server/crdt/index.js
@@ -0,0 +1,4 @@
+import * as merkle from "./merkle";
+
+export { merkle };
+export { getClock, setClock, makeClock, makeClientId, serializeClock, deserializeClock, Timestamp } from "./timestamp"
diff --git a/packages/loot-core/src/server/merkle.js b/packages/loot-core/src/server/crdt/merkle.js
similarity index 100%
rename from packages/loot-core/src/server/merkle.js
rename to packages/loot-core/src/server/crdt/merkle.js
diff --git a/packages/loot-core/src/server/merkle.test.js b/packages/loot-core/src/server/crdt/merkle.test.js
similarity index 99%
rename from packages/loot-core/src/server/merkle.test.js
rename to packages/loot-core/src/server/crdt/merkle.test.js
index 41e4b78da..f7bef4d7d 100644
--- a/packages/loot-core/src/server/merkle.test.js
+++ b/packages/loot-core/src/server/crdt/merkle.test.js
@@ -1,5 +1,5 @@
 import * as merkle from './merkle';
-import Timestamp from './timestamp';
+import { Timestamp } from './timestamp';
 
 function pretty(n) {
   if (n < 60) {
diff --git a/packages/loot-core/src/server/timestamp.js b/packages/loot-core/src/server/crdt/timestamp.js
similarity index 98%
rename from packages/loot-core/src/server/timestamp.js
rename to packages/loot-core/src/server/crdt/timestamp.js
index 39bae07da..b78a1610a 100644
--- a/packages/loot-core/src/server/timestamp.js
+++ b/packages/loot-core/src/server/crdt/timestamp.js
@@ -1,5 +1,5 @@
 import murmurhash from 'murmurhash';
-const uuid = require('../platform/uuid');
+const uuid = require('../../platform/uuid');
 
 /**
  * Hybrid Unique Logical Clock (HULC) timestamp generator
@@ -81,7 +81,7 @@ const MAX_NODE_LENGTH = 16;
 /**
  * timestamp instance class
  */
-export default class Timestamp {
+export class Timestamp {
   constructor(millis, counter, node) {
     this._state = {
       millis: millis,
@@ -124,7 +124,7 @@ export default class Timestamp {
   }
 }
 
-export class MutableTimestamp extends Timestamp {
+class MutableTimestamp extends Timestamp {
   setMillis(n) {
     this._state.millis = n;
   }
diff --git a/packages/loot-core/src/server/timestamp.test.js b/packages/loot-core/src/server/crdt/timestamp.test.js
similarity index 99%
rename from packages/loot-core/src/server/timestamp.test.js
rename to packages/loot-core/src/server/crdt/timestamp.test.js
index 0a1d99431..a9c04fab9 100644
--- a/packages/loot-core/src/server/timestamp.test.js
+++ b/packages/loot-core/src/server/crdt/timestamp.test.js
@@ -1,4 +1,4 @@
-import Timestamp from './timestamp';
+import { Timestamp } from './timestamp';
 
 describe('Timestamp', function() {
   let now = 0;
diff --git a/packages/loot-core/src/server/db/index.js b/packages/loot-core/src/server/db/index.js
index 1ffdf3363..249ec845b 100644
--- a/packages/loot-core/src/server/db/index.js
+++ b/packages/loot-core/src/server/db/index.js
@@ -11,13 +11,14 @@ import {
   payeeRuleModel
 } from '../models';
 import { groupById } from '../../shared/util';
-import Timestamp, {
+import {
   makeClock,
   setClock,
   serializeClock,
   deserializeClock,
-  makeClientId
-} from '../timestamp';
+  makeClientId,
+  Timestamp
+} from '../crdt';
 import {
   convertForInsert,
   convertForUpdate,
diff --git a/packages/loot-core/src/server/main.js b/packages/loot-core/src/server/main.js
index ada202d61..cbda0e7fb 100644
--- a/packages/loot-core/src/server/main.js
+++ b/packages/loot-core/src/server/main.js
@@ -30,8 +30,7 @@ import * as bankSync from './accounts/sync';
 import * as link from './accounts/link';
 import { uniqueFileName, idFromFileName } from './util/budget-name';
 import { mutator, runHandler } from './mutators';
-import * as timestamp from './timestamp';
-import * as merkle from './merkle';
+import { getClock, setClock, makeClock, makeClientId, serializeClock, deserializeClock, Timestamp, merkle } from './crdt';
 import {
   initialFullSync,
   fullSync,
@@ -1968,10 +1967,10 @@ async function loadBudget(id, appVersion, { showUpdate } = {}) {
     //
     // TODO: The client id should be stored elsewhere. It shouldn't
     // work this way, but it's fine for now.
-    timestamp.getClock().timestamp.setNode(timestamp.makeClientId());
+    getClock().timestamp.setNode(makeClientId());
     await db.runQuery(
       'INSERT OR REPLACE INTO messages_clock (id, clock) VALUES (1, ?)',
-      [timestamp.serializeClock(timestamp.getClock())]
+      [serializeClock(getClock())]
     );
 
     await prefs.savePrefs({ resetClock: false });
@@ -2253,7 +2252,9 @@ export const lib = {
 
   // Expose CRDT mechanisms so server can use them
   merkle,
-  timestamp,
+  timestamp: {
+    getClock, setClock, makeClock, makeClientId, serializeClock, deserializeClock, Timestamp
+  },
   SyncProtoBuf: SyncPb
 };
 
diff --git a/packages/loot-core/src/server/main.test.js b/packages/loot-core/src/server/main.test.js
index a67f0bbfe..3edc1d451 100644
--- a/packages/loot-core/src/server/main.test.js
+++ b/packages/loot-core/src/server/main.test.js
@@ -3,7 +3,7 @@ import * as prefs from './prefs';
 import * as db from './db';
 import * as budget from './budget/base';
 import * as monthUtils from '../shared/months';
-import { getClock, deserializeClock } from './timestamp';
+import { getClock, deserializeClock } from './crdt';
 import {
   runHandler,
   runMutator,
diff --git a/packages/loot-core/src/server/prefs.js b/packages/loot-core/src/server/prefs.js
index c88b33627..fb7df9165 100644
--- a/packages/loot-core/src/server/prefs.js
+++ b/packages/loot-core/src/server/prefs.js
@@ -1,5 +1,5 @@
 import { sendMessages } from './sync';
-import Timestamp from './timestamp';
+import { Timestamp } from './crdt';
 const fs = require('../platform/server/fs');
 
 let prefs = null;
diff --git a/packages/loot-core/src/server/sync/index.js b/packages/loot-core/src/server/sync/index.js
index e26975310..0e91185c8 100644
--- a/packages/loot-core/src/server/sync/index.js
+++ b/packages/loot-core/src/server/sync/index.js
@@ -11,12 +11,13 @@ import { triggerBudgetChanges, setType as setBudgetType } from '../budget/base';
 import * as undo from '../undo';
 import { runMutator } from '../mutators';
 import { setIn, getIn } from '../../shared/util';
-import Timestamp, {
+import {
   serializeClock,
   deserializeClock,
-  getClock
-} from '../timestamp';
-import * as merkle from '../merkle';
+  getClock,
+  Timestamp,
+  merkle
+} from '../crdt';
 import * as encoder from './encoder';
 import { getServer } from '../server-config';
 import { rebuildMerkleHash } from './repair';
diff --git a/packages/loot-core/src/server/sync/migrate.js b/packages/loot-core/src/server/sync/migrate.js
index 394a8ec33..40fcaa3d9 100644
--- a/packages/loot-core/src/server/sync/migrate.js
+++ b/packages/loot-core/src/server/sync/migrate.js
@@ -1,5 +1,5 @@
 import { addSyncListener, applyMessages } from './index';
-import Timestamp from '../timestamp';
+import { Timestamp } from '../crdt';
 
 function migrateParentIds(oldValues, newValues) {
   newValues.forEach((items, table) => {
diff --git a/packages/loot-core/src/server/sync/repair.js b/packages/loot-core/src/server/sync/repair.js
index 50b16b71b..9ebedd8c2 100644
--- a/packages/loot-core/src/server/sync/repair.js
+++ b/packages/loot-core/src/server/sync/repair.js
@@ -1,6 +1,5 @@
 import * as db from '../db';
-import Timestamp, { serializeClock, getClock } from '../timestamp';
-import * as merkle from '../merkle';
+import { serializeClock, getClock, Timestamp, merkle } from '../crdt';
 
 export function rebuildMerkleHash() {
   let rows = db.runQuery('SELECT timestamp FROM messages_crdt', [], true);
diff --git a/packages/loot-core/src/server/sync/sync.property.test.js b/packages/loot-core/src/server/sync/sync.property.test.js
index 7239ad7b1..66a8c7d32 100644
--- a/packages/loot-core/src/server/sync/sync.property.test.js
+++ b/packages/loot-core/src/server/sync/sync.property.test.js
@@ -2,7 +2,7 @@ import * as prefs from '../prefs';
 import * as db from '../db';
 import * as sheet from '../sheet';
 import * as sync from './index';
-import Timestamp, { getClock } from '../timestamp';
+import { getClock, Timestamp } from '../crdt';
 import * as merkle from '../merkle';
 import * as encoder from './encoder';
 const jsc = require('jsverify');
diff --git a/packages/loot-core/src/server/sync/sync.test.js b/packages/loot-core/src/server/sync/sync.test.js
index f4018a82d..575a7e832 100644
--- a/packages/loot-core/src/server/sync/sync.test.js
+++ b/packages/loot-core/src/server/sync/sync.test.js
@@ -1,7 +1,8 @@
 import * as prefs from '../prefs';
 import * as db from '../db';
 import * as sheet from '../sheet';
-import Timestamp, { getClock } from '../timestamp';
+import { getClock, Timestamp } from '../crdt';
+import { resolveName } from '../spreadsheet/util';
 import { setSyncingMode, sendMessages, applyMessages, fullSync } from './index';
 import * as encoder from './encoder';
 const mockSyncServer = require('../tests/mockSyncServer');
diff --git a/packages/loot-core/src/server/tests/mockSyncServer.js b/packages/loot-core/src/server/tests/mockSyncServer.js
index 4e221a673..ceb12d7b9 100644
--- a/packages/loot-core/src/server/tests/mockSyncServer.js
+++ b/packages/loot-core/src/server/tests/mockSyncServer.js
@@ -1,5 +1,5 @@
-import * as merkle from '../merkle';
-import Timestamp, { makeClock } from '../timestamp';
+import dateFns from 'date-fns';
+import { makeClock, Timestamp, merkle } from '../crdt';
 const defaultMockData = require('./mockData').basic;
 const SyncPb = require('../sync/proto/sync_pb');
 
diff --git a/packages/loot-core/src/server/undo.js b/packages/loot-core/src/server/undo.js
index a6525b21e..bc96741c7 100644
--- a/packages/loot-core/src/server/undo.js
+++ b/packages/loot-core/src/server/undo.js
@@ -1,6 +1,6 @@
 import { sendMessages } from './sync';
 import { getIn } from '../shared/util';
-import Timestamp from './timestamp';
+import { Timestamp } from './crdt';
 import { withMutatorContext, getMutatorContext } from './mutators';
 const connection = require('../platform/server/connection');
 
-- 
GitLab