cojson-storage-indexeddb 0.8.35 → 0.8.37

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/CHANGELOG.md CHANGED
@@ -1,5 +1,23 @@
1
1
  # cojson-storage-indexeddb
2
2
 
3
+ ## 0.8.37
4
+
5
+ ### Patch Changes
6
+
7
+ - Updated dependencies [3d9f12e]
8
+ - cojson@0.8.37
9
+ - cojson-storage@0.8.37
10
+
11
+ ## 0.8.36
12
+
13
+ ### Patch Changes
14
+
15
+ - 1afbd2c: Refactor the SQLite and IndexedDB storage packages to extract common synchronization functionality into newly created cojson-storage package.
16
+ - Updated dependencies [441fe27]
17
+ - Updated dependencies [1afbd2c]
18
+ - cojson@0.8.36
19
+ - cojson-storage@0.8.36
20
+
3
21
  ## 0.8.35
4
22
 
5
23
  ### Patch Changes
package/dist/idbClient.js CHANGED
@@ -57,11 +57,11 @@ export class IDBClient {
57
57
  async getCoValueSessions(coValueRowId) {
58
58
  return this.makeRequest(({ sessions }) => sessions.index("sessionsByCoValue").getAll(coValueRowId));
59
59
  }
60
- async getNewTransactionInSession(sessionRow, firstNewTxIdx) {
61
- return this.makeRequest(({ transactions }) => transactions.getAll(IDBKeyRange.bound([sessionRow.rowID, firstNewTxIdx], [sessionRow.rowID, Infinity])));
60
+ async getNewTransactionInSession(sessionRowId, firstNewTxIdx) {
61
+ return this.makeRequest(({ transactions }) => transactions.getAll(IDBKeyRange.bound([sessionRowId, firstNewTxIdx], [sessionRowId, Infinity])));
62
62
  }
63
- async getSignatures(sessionRow, firstNewTxIdx) {
64
- return this.makeRequest(({ signatureAfter }) => signatureAfter.getAll(IDBKeyRange.bound([sessionRow.rowID, firstNewTxIdx], [sessionRow.rowID, Infinity])));
63
+ async getSignatures(sessionRowId, firstNewTxIdx) {
64
+ return this.makeRequest(({ signatureAfter }) => signatureAfter.getAll(IDBKeyRange.bound([sessionRowId, firstNewTxIdx], [sessionRowId, Infinity])));
65
65
  }
66
66
  async addCoValue(msg) {
67
67
  if (!msg.header) {
@@ -72,7 +72,7 @@ export class IDBClient {
72
72
  header: msg.header,
73
73
  })));
74
74
  }
75
- async addSessionUpdate(sessionRow, sessionUpdate) {
75
+ async addSessionUpdate({ sessionUpdate, sessionRow, }) {
76
76
  return this.makeRequest(({ sessions }) => sessions.put(sessionRow?.rowID
77
77
  ? {
78
78
  rowID: sessionRow.rowID,
@@ -87,12 +87,15 @@ export class IDBClient {
87
87
  tx: newTransaction,
88
88
  }));
89
89
  }
90
- addSignatureAfter({ sessionRowID, idx, signature, }) {
90
+ async addSignatureAfter({ sessionRowID, idx, signature, }) {
91
91
  return this.makeRequest(({ signatureAfter }) => signatureAfter.put({
92
92
  ses: sessionRowID,
93
93
  idx,
94
94
  signature,
95
95
  }));
96
96
  }
97
+ async unitOfWork(operationsCallback) {
98
+ return Promise.all(operationsCallback());
99
+ }
97
100
  }
98
101
  //# sourceMappingURL=idbClient.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"idbClient.js","sourceRoot":"","sources":["../src/idbClient.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"idbClient.js","sourceRoot":"","sources":["../src/idbClient.ts"],"names":[],"mappings":"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"}
package/dist/idbNode.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import { cojsonInternals, } from "cojson";
2
- import { IDBClient } from "./idbClient";
3
- import { SyncManager } from "./syncManager";
2
+ import { SyncManager } from "cojson-storage";
3
+ import { IDBClient } from "./idbClient.js";
4
4
  export class IDBNode {
5
5
  constructor(db, fromLocalNode, toLocalNode) {
6
6
  this.dbClient = new IDBClient(db);
@@ -1 +1 @@
1
- {"version":3,"file":"idbNode.js","sourceRoot":"","sources":["../src/idbNode.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"idbNode.js","sourceRoot":"","sources":["../src/idbNode.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
- export { IDBNode, IDBNode as IDBStorage } from "./idbNode";
1
+ export { IDBNode, IDBNode as IDBStorage } from "./idbNode.js";
2
2
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,WAAW,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,cAAc,CAAC"}
package/package.json CHANGED
@@ -1,12 +1,13 @@
1
1
  {
2
2
  "name": "cojson-storage-indexeddb",
3
- "version": "0.8.35",
3
+ "version": "0.8.37",
4
4
  "main": "dist/index.js",
5
5
  "type": "module",
6
6
  "types": "src/index.ts",
7
7
  "license": "MIT",
8
8
  "dependencies": {
9
- "cojson": "0.8.35"
9
+ "cojson": "0.8.37",
10
+ "cojson-storage": "0.8.37"
10
11
  },
11
12
  "devDependencies": {
12
13
  "@vitest/browser": "^0.34.1",
package/src/idbClient.ts CHANGED
@@ -1,39 +1,19 @@
1
- import { CojsonInternalTypes, SessionID } from "cojson";
1
+ import { CojsonInternalTypes } from "cojson";
2
2
  import { SyncPromise } from "./syncPromises";
3
3
  import RawCoID = CojsonInternalTypes.RawCoID;
4
4
  import Transaction = CojsonInternalTypes.Transaction;
5
5
  import Signature = CojsonInternalTypes.Signature;
6
-
7
- export type CoValueRow = {
8
- id: CojsonInternalTypes.RawCoID;
9
- header: CojsonInternalTypes.CoValueHeader;
10
- };
11
-
12
- export type StoredCoValueRow = CoValueRow & { rowID: number };
13
-
14
- export type TransactionRow = {
15
- ses: number;
16
- idx: number;
17
- tx: CojsonInternalTypes.Transaction;
18
- };
19
-
20
- export type SignatureAfterRow = {
21
- ses: number;
22
- idx: number;
23
- signature: CojsonInternalTypes.Signature;
24
- };
25
-
26
- export type SessionRow = {
27
- coValue: number;
28
- sessionID: SessionID;
29
- lastIdx: number;
30
- lastSignature: CojsonInternalTypes.Signature;
31
- bytesSinceLastSignature?: number;
32
- };
33
-
34
- export type StoredSessionRow = SessionRow & { rowID: number };
35
-
36
- export class IDBClient {
6
+ import {
7
+ CoValueRow,
8
+ DBClientInterface,
9
+ SessionRow,
10
+ SignatureAfterRow,
11
+ StoredCoValueRow,
12
+ StoredSessionRow,
13
+ TransactionRow,
14
+ } from "cojson-storage";
15
+
16
+ export class IDBClient implements DBClientInterface {
37
17
  private db;
38
18
 
39
19
  currentTx:
@@ -148,29 +128,29 @@ export class IDBClient {
148
128
  }
149
129
 
150
130
  async getNewTransactionInSession(
151
- sessionRow: StoredSessionRow,
131
+ sessionRowId: number,
152
132
  firstNewTxIdx: number,
153
133
  ): Promise<TransactionRow[]> {
154
134
  return this.makeRequest<TransactionRow[]>(({ transactions }) =>
155
135
  transactions.getAll(
156
136
  IDBKeyRange.bound(
157
- [sessionRow.rowID, firstNewTxIdx],
158
- [sessionRow.rowID, Infinity],
137
+ [sessionRowId, firstNewTxIdx],
138
+ [sessionRowId, Infinity],
159
139
  ),
160
140
  ),
161
141
  );
162
142
  }
163
143
 
164
144
  async getSignatures(
165
- sessionRow: StoredSessionRow,
145
+ sessionRowId: number,
166
146
  firstNewTxIdx: number,
167
147
  ): Promise<SignatureAfterRow[]> {
168
148
  return this.makeRequest<SignatureAfterRow[]>(
169
149
  ({ signatureAfter }: { signatureAfter: IDBObjectStore }) =>
170
150
  signatureAfter.getAll(
171
151
  IDBKeyRange.bound(
172
- [sessionRow.rowID, firstNewTxIdx],
173
- [sessionRow.rowID, Infinity],
152
+ [sessionRowId, firstNewTxIdx],
153
+ [sessionRowId, Infinity],
174
154
  ),
175
155
  ),
176
156
  );
@@ -191,10 +171,13 @@ export class IDBClient {
191
171
  )) as number;
192
172
  }
193
173
 
194
- async addSessionUpdate(
195
- sessionRow: StoredSessionRow | undefined,
196
- sessionUpdate: SessionRow,
197
- ): Promise<number> {
174
+ async addSessionUpdate({
175
+ sessionUpdate,
176
+ sessionRow,
177
+ }: {
178
+ sessionUpdate: SessionRow;
179
+ sessionRow?: StoredSessionRow;
180
+ }): Promise<number> {
198
181
  return this.makeRequest<number>(({ sessions }) =>
199
182
  sessions.put(
200
183
  sessionRow?.rowID
@@ -221,7 +204,7 @@ export class IDBClient {
221
204
  );
222
205
  }
223
206
 
224
- addSignatureAfter({
207
+ async addSignatureAfter({
225
208
  sessionRowID,
226
209
  idx,
227
210
  signature,
@@ -234,4 +217,8 @@ export class IDBClient {
234
217
  } satisfies SignatureAfterRow),
235
218
  );
236
219
  }
220
+
221
+ async unitOfWork(operationsCallback: () => unknown[]) {
222
+ return Promise.all(operationsCallback());
223
+ }
237
224
  }
package/src/idbNode.ts CHANGED
@@ -4,12 +4,12 @@ import {
4
4
  Peer,
5
5
  cojsonInternals,
6
6
  } from "cojson";
7
- import { IDBClient } from "./idbClient";
8
- import { SyncManager } from "./syncManager";
7
+ import { SyncManager } from "cojson-storage";
8
+ import { IDBClient } from "./idbClient.js";
9
9
 
10
10
  export class IDBNode {
11
- private dbClient: IDBClient;
12
- private syncManager: SyncManager;
11
+ private readonly dbClient: IDBClient;
12
+ private readonly syncManager: SyncManager;
13
13
 
14
14
  constructor(
15
15
  db: IDBDatabase,
package/src/index.ts CHANGED
@@ -1 +1 @@
1
- export { IDBNode, IDBNode as IDBStorage } from "./idbNode";
1
+ export { IDBNode, IDBNode as IDBStorage } from "./idbNode.js";
@@ -1,198 +0,0 @@
1
- import { MAX_RECOMMENDED_TX_SIZE, cojsonInternals, emptyKnownState, } from "cojson";
2
- import { SyncPromise } from "./syncPromises.js";
3
- import { collectNewTxs, getDependedOnCoValues } from "./syncUtils";
4
- export class SyncManager {
5
- constructor(idbClient, toLocalNode) {
6
- this.toLocalNode = toLocalNode;
7
- this.idbClient = idbClient;
8
- }
9
- async handleSyncMessage(msg) {
10
- switch (msg.action) {
11
- case "load":
12
- await this.handleLoad(msg);
13
- break;
14
- case "content":
15
- await this.handleContent(msg);
16
- break;
17
- case "known":
18
- await this.handleKnown(msg);
19
- break;
20
- case "done":
21
- await this.handleDone(msg);
22
- break;
23
- }
24
- }
25
- async handleSessionUpdate({ sessionRow, peerKnownState, newContentMessages, }) {
26
- if (sessionRow.lastIdx <= (peerKnownState.sessions[sessionRow.sessionID] || 0))
27
- return;
28
- const firstNewTxIdx = peerKnownState.sessions[sessionRow.sessionID] || 0;
29
- const signaturesAndIdxs = await this.idbClient.getSignatures(sessionRow, firstNewTxIdx);
30
- const newTxsInSession = await this.idbClient.getNewTransactionInSession(sessionRow, firstNewTxIdx);
31
- collectNewTxs(newTxsInSession, newContentMessages, sessionRow, signaturesAndIdxs, peerKnownState, firstNewTxIdx);
32
- }
33
- async sendNewContent(coValueKnownState) {
34
- const outputMessages = await this.collectCoValueData(coValueKnownState);
35
- // reverse it to send the top level id the last in the order
36
- const collectedMessages = Object.values(outputMessages).reverse();
37
- collectedMessages.forEach(({ knownMessage, contentMessages }) => {
38
- this.sendStateMessage(knownMessage);
39
- contentMessages?.length &&
40
- contentMessages.forEach((msg) => this.sendStateMessage(msg));
41
- });
42
- }
43
- async collectCoValueData(peerKnownState, messageMap = {}, asDependencyOf) {
44
- if (messageMap[peerKnownState.id]) {
45
- return messageMap;
46
- }
47
- const coValueRow = await this.idbClient.getCoValue(peerKnownState.id);
48
- if (!coValueRow) {
49
- const emptyKnownMessage = {
50
- action: "known",
51
- ...emptyKnownState(peerKnownState.id),
52
- };
53
- asDependencyOf && (emptyKnownMessage.asDependencyOf = asDependencyOf);
54
- messageMap[peerKnownState.id] = { knownMessage: emptyKnownMessage };
55
- return messageMap;
56
- }
57
- const allCoValueSessions = await this.idbClient.getCoValueSessions(coValueRow.rowID);
58
- const newCoValueKnownState = {
59
- id: coValueRow.id,
60
- header: true,
61
- sessions: {},
62
- };
63
- const newContentMessages = [
64
- {
65
- action: "content",
66
- id: coValueRow.id,
67
- header: coValueRow.header,
68
- new: {},
69
- priority: cojsonInternals.getPriorityFromHeader(coValueRow.header),
70
- },
71
- ];
72
- await Promise.all(allCoValueSessions.map((sessionRow) => {
73
- newCoValueKnownState.sessions[sessionRow.sessionID] =
74
- sessionRow.lastIdx;
75
- // Collect new sessions data into newContentMessages
76
- return this.handleSessionUpdate({
77
- sessionRow,
78
- peerKnownState,
79
- newContentMessages,
80
- });
81
- }));
82
- const dependedOnCoValuesList = getDependedOnCoValues({
83
- coValueRow,
84
- newContentMessages,
85
- });
86
- const knownMessage = {
87
- action: "known",
88
- ...newCoValueKnownState,
89
- };
90
- asDependencyOf && (knownMessage.asDependencyOf = asDependencyOf);
91
- messageMap[newCoValueKnownState.id] = {
92
- knownMessage: knownMessage,
93
- contentMessages: newContentMessages,
94
- };
95
- await Promise.all(dependedOnCoValuesList.map((dependedOnCoValue) => this.collectCoValueData({
96
- id: dependedOnCoValue,
97
- header: false,
98
- sessions: {},
99
- }, messageMap, asDependencyOf || coValueRow.id)));
100
- return messageMap;
101
- }
102
- handleLoad(msg) {
103
- return this.sendNewContent(msg);
104
- }
105
- async handleContent(msg) {
106
- const coValueRow = await this.idbClient.getCoValue(msg.id);
107
- // We have no info about coValue header
108
- const invalidAssumptionOnHeaderPresence = !msg.header && !coValueRow;
109
- if (invalidAssumptionOnHeaderPresence) {
110
- return this.sendStateMessage({
111
- action: "known",
112
- id: msg.id,
113
- header: false,
114
- sessions: {},
115
- isCorrection: true,
116
- });
117
- }
118
- const storedCoValueRowID = coValueRow
119
- ? coValueRow.rowID
120
- : await this.idbClient.addCoValue(msg);
121
- const allOurSessionsEntries = await this.idbClient.getCoValueSessions(storedCoValueRowID);
122
- const allOurSessions = Object.fromEntries(allOurSessionsEntries.map((row) => [row.sessionID, row]));
123
- const ourKnown = {
124
- id: msg.id,
125
- header: true,
126
- sessions: {},
127
- };
128
- let invalidAssumptions = false;
129
- await Promise.all(Object.keys(msg.new).map((sessionID) => {
130
- const sessionRow = allOurSessions[sessionID];
131
- if (sessionRow) {
132
- ourKnown.sessions[sessionRow.sessionID] = sessionRow.lastIdx;
133
- }
134
- if ((sessionRow?.lastIdx || 0) < (msg.new[sessionID]?.after || 0)) {
135
- invalidAssumptions = true;
136
- }
137
- else {
138
- return this.putNewTxs(msg, sessionID, sessionRow, storedCoValueRowID);
139
- }
140
- }));
141
- if (invalidAssumptions) {
142
- this.sendStateMessage({
143
- action: "known",
144
- ...ourKnown,
145
- isCorrection: invalidAssumptions,
146
- });
147
- }
148
- }
149
- async putNewTxs(msg, sessionID, sessionRow, storedCoValueRowID) {
150
- const newTransactions = msg.new[sessionID]?.newTransactions || [];
151
- const actuallyNewOffset = (sessionRow?.lastIdx || 0) - (msg.new[sessionID]?.after || 0);
152
- const actuallyNewTransactions = newTransactions.slice(actuallyNewOffset);
153
- let newBytesSinceLastSignature = (sessionRow?.bytesSinceLastSignature || 0) +
154
- actuallyNewTransactions.reduce((sum, tx) => sum +
155
- (tx.privacy === "private"
156
- ? tx.encryptedChanges.length
157
- : tx.changes.length), 0);
158
- const newLastIdx = (sessionRow?.lastIdx || 0) + actuallyNewTransactions.length;
159
- let shouldWriteSignature = false;
160
- if (newBytesSinceLastSignature > MAX_RECOMMENDED_TX_SIZE) {
161
- shouldWriteSignature = true;
162
- newBytesSinceLastSignature = 0;
163
- }
164
- const nextIdx = sessionRow?.lastIdx || 0;
165
- const sessionUpdate = {
166
- coValue: storedCoValueRowID,
167
- sessionID: sessionID,
168
- lastIdx: newLastIdx,
169
- lastSignature: msg.new[sessionID].lastSignature,
170
- bytesSinceLastSignature: newBytesSinceLastSignature,
171
- };
172
- const sessionRowID = await this.idbClient.addSessionUpdate(sessionRow, sessionUpdate);
173
- let maybePutRequest;
174
- if (shouldWriteSignature) {
175
- maybePutRequest = this.idbClient.addSignatureAfter({
176
- sessionRowID,
177
- idx: newLastIdx - 1,
178
- signature: msg.new[sessionID].lastSignature,
179
- });
180
- }
181
- else {
182
- maybePutRequest = SyncPromise.resolve();
183
- }
184
- return maybePutRequest.then(() => Promise.all(actuallyNewTransactions.map((newTransaction, i) => {
185
- return this.idbClient.addTransaction(sessionRowID, nextIdx + i, newTransaction);
186
- })));
187
- }
188
- handleKnown(_msg) {
189
- // We don't intend to use IndexedDB itself as a synchronisation mechanism, so we can ignore the known messages
190
- }
191
- async sendStateMessage(msg) {
192
- return this.toLocalNode
193
- .push(msg)
194
- .catch((e) => console.error(`Error sending ${msg.action} state, id ${msg.id}`, e));
195
- }
196
- handleDone(_msg) { }
197
- }
198
- //# sourceMappingURL=syncManager.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"syncManager.js","sourceRoot":"","sources":["../src/syncManager.ts"],"names":[],"mappings":"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"}
package/dist/syncUtils.js DELETED
@@ -1,95 +0,0 @@
1
- import { cojsonInternals, } from "cojson";
2
- export function collectNewTxs(newTxsInSession, newContentMessages, sessionRow, signaturesAndIdxs, theirKnown, firstNewTxIdx) {
3
- let idx = firstNewTxIdx;
4
- for (const tx of newTxsInSession) {
5
- let sessionEntry = newContentMessages[newContentMessages.length - 1].new[sessionRow.sessionID];
6
- if (!sessionEntry) {
7
- sessionEntry = {
8
- after: idx,
9
- lastSignature: "WILL_BE_REPLACED",
10
- newTransactions: [],
11
- };
12
- newContentMessages[newContentMessages.length - 1].new[sessionRow.sessionID] = sessionEntry;
13
- }
14
- sessionEntry.newTransactions.push(tx.tx);
15
- if (signaturesAndIdxs[0] && idx === signaturesAndIdxs[0].idx) {
16
- sessionEntry.lastSignature = signaturesAndIdxs[0].signature;
17
- signaturesAndIdxs.shift();
18
- newContentMessages.push({
19
- action: "content",
20
- id: theirKnown.id,
21
- new: {},
22
- priority: cojsonInternals.getPriorityFromHeader(undefined),
23
- });
24
- }
25
- else if (idx === firstNewTxIdx + newTxsInSession.length - 1) {
26
- sessionEntry.lastSignature = sessionRow.lastSignature;
27
- }
28
- idx += 1;
29
- }
30
- }
31
- export function getDependedOnCoValues({ coValueRow, newContentMessages, }) {
32
- return coValueRow.header.ruleset.type === "group"
33
- ? getGroupDependedOnCoValues(newContentMessages)
34
- : coValueRow.header.ruleset.type === "ownedByGroup"
35
- ? getOwnedByGroupDependedOnCoValues(coValueRow, newContentMessages)
36
- : [];
37
- }
38
- function getGroupDependedOnCoValues(newContentMessages) {
39
- const keys = [];
40
- /**
41
- * Collect all the signing keys inside the transactions to list all the
42
- * dependencies required to correctly access the CoValue.
43
- */
44
- for (const piece of newContentMessages) {
45
- for (const sessionEntry of Object.values(piece.new)) {
46
- for (const tx of sessionEntry.newTransactions) {
47
- if (tx.privacy !== "trusting")
48
- continue;
49
- const changes = safeParseChanges(tx.changes);
50
- for (const change of changes) {
51
- if (change &&
52
- typeof change === "object" &&
53
- "op" in change &&
54
- change.op === "set" &&
55
- "key" in change &&
56
- change.key) {
57
- const key = cojsonInternals.getGroupDependentKey(change.key);
58
- if (key) {
59
- keys.push(key);
60
- }
61
- }
62
- }
63
- }
64
- }
65
- }
66
- return keys;
67
- }
68
- function getOwnedByGroupDependedOnCoValues(coValueRow, newContentMessages) {
69
- if (coValueRow.header.ruleset.type !== "ownedByGroup")
70
- return [];
71
- const keys = [coValueRow.header.ruleset.group];
72
- /**
73
- * Collect all the signing keys inside the transactions to list all the
74
- * dependencies required to correctly access the CoValue.
75
- */
76
- for (const piece of newContentMessages) {
77
- for (const sessionID of Object.keys(piece.new)) {
78
- const accountId = cojsonInternals.accountOrAgentIDfromSessionID(sessionID);
79
- if (cojsonInternals.isAccountID(accountId) &&
80
- accountId !== coValueRow.id) {
81
- keys.push(accountId);
82
- }
83
- }
84
- }
85
- return keys;
86
- }
87
- function safeParseChanges(changes) {
88
- try {
89
- return cojsonInternals.parseJSON(changes);
90
- }
91
- catch (e) {
92
- return [];
93
- }
94
- }
95
- //# sourceMappingURL=syncUtils.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"syncUtils.js","sourceRoot":"","sources":["../src/syncUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,eAAe,GAChB,MAAM,QAAQ,CAAC;AAQhB,MAAM,UAAU,aAAa,CAC3B,eAAiC,EACjC,kBAA2D,EAC3D,UAA4B,EAC5B,iBAAsC,EACtC,UAAiD,EACjD,aAAqB;IAErB,IAAI,GAAG,GAAG,aAAa,CAAC;IAExB,KAAK,MAAM,EAAE,IAAI,eAAe,EAAE,CAAC;QACjC,IAAI,YAAY,GACd,kBAAkB,CAAC,kBAAkB,CAAC,MAAM,GAAG,CAAC,CAAE,CAAC,GAAG,CACpD,UAAU,CAAC,SAAS,CACrB,CAAC;QACJ,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,YAAY,GAAG;gBACb,KAAK,EAAE,GAAG;gBACV,aAAa,EAAE,kBAAmD;gBAClE,eAAe,EAAE,EAAE;aACpB,CAAC;YACF,kBAAkB,CAAC,kBAAkB,CAAC,MAAM,GAAG,CAAC,CAAE,CAAC,GAAG,CACpD,UAAU,CAAC,SAAS,CACrB,GAAG,YAAY,CAAC;QACnB,CAAC;QAED,YAAY,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QAEzC,IAAI,iBAAiB,CAAC,CAAC,CAAC,IAAI,GAAG,KAAK,iBAAiB,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;YAC7D,YAAY,CAAC,aAAa,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YAC5D,iBAAiB,CAAC,KAAK,EAAE,CAAC;YAC1B,kBAAkB,CAAC,IAAI,CAAC;gBACtB,MAAM,EAAE,SAAS;gBACjB,EAAE,EAAE,UAAU,CAAC,EAAE;gBACjB,GAAG,EAAE,EAAE;gBACP,QAAQ,EAAE,eAAe,CAAC,qBAAqB,CAAC,SAAS,CAAC;aAC3D,CAAC,CAAC;QACL,CAAC;aAAM,IAAI,GAAG,KAAK,aAAa,GAAG,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9D,YAAY,CAAC,aAAa,GAAG,UAAU,CAAC,aAAa,CAAC;QACxD,CAAC;QACD,GAAG,IAAI,CAAC,CAAC;IACX,CAAC;AACH,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,EACpC,UAAU,EACV,kBAAkB,GAInB;IACC,OAAO,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,KAAK,OAAO;QAC/C,CAAC,CAAC,0BAA0B,CAAC,kBAAkB,CAAC;QAChD,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,KAAK,cAAc;YACjD,CAAC,CAAC,iCAAiC,CAAC,UAAU,EAAE,kBAAkB,CAAC;YACnE,CAAC,CAAC,EAAE,CAAC;AACX,CAAC;AAED,SAAS,0BAA0B,CACjC,kBAA2D;IAE3D,MAAM,IAAI,GAAkC,EAAE,CAAC;IAE/C;;;OAGG;IACH,KAAK,MAAM,KAAK,IAAI,kBAAkB,EAAE,CAAC;QACvC,KAAK,MAAM,YAAY,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;YACpD,KAAK,MAAM,EAAE,IAAI,YAAY,CAAC,eAAe,EAAE,CAAC;gBAC9C,IAAI,EAAE,CAAC,OAAO,KAAK,UAAU;oBAAE,SAAS;gBAExC,MAAM,OAAO,GAAG,gBAAgB,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;gBAC7C,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;oBAC7B,IACE,MAAM;wBACN,OAAO,MAAM,KAAK,QAAQ;wBAC1B,IAAI,IAAI,MAAM;wBACd,MAAM,CAAC,EAAE,KAAK,KAAK;wBACnB,KAAK,IAAI,MAAM;wBACf,MAAM,CAAC,GAAG,EACV,CAAC;wBACD,MAAM,GAAG,GAAG,eAAe,CAAC,oBAAoB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;wBAE7D,IAAI,GAAG,EAAE,CAAC;4BACR,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;wBACjB,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,iCAAiC,CACxC,UAA4B,EAC5B,kBAA2D;IAE3D,IAAI,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,KAAK,cAAc;QAAE,OAAO,EAAE,CAAC;IAEjE,MAAM,IAAI,GAAkC,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAE9E;;;OAGG;IACH,KAAK,MAAM,KAAK,IAAI,kBAAkB,EAAE,CAAC;QACvC,KAAK,MAAM,SAAS,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAgB,EAAE,CAAC;YAC9D,MAAM,SAAS,GACb,eAAe,CAAC,6BAA6B,CAAC,SAAS,CAAC,CAAC;YAE3D,IACE,eAAe,CAAC,WAAW,CAAC,SAAS,CAAC;gBACtC,SAAS,KAAK,UAAU,CAAC,EAAE,EAC3B,CAAC;gBACD,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACvB,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,gBAAgB,CAAC,OAAiC;IACzD,IAAI,CAAC;QACH,OAAO,eAAe,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IAC5C,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC"}