@verdant-web/store 3.8.1 → 3.8.3
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/dist/bundle/index.js +6 -6
- package/dist/bundle/index.js.map +4 -4
- package/dist/esm/__tests__/{documents.test.js → entities.test.js} +30 -2
- package/dist/esm/__tests__/entities.test.js.map +1 -0
- package/dist/esm/__tests__/fixtures/testStorage.js +3 -1
- package/dist/esm/__tests__/fixtures/testStorage.js.map +1 -1
- package/dist/esm/entities/Entity.d.ts +7 -3
- package/dist/esm/entities/Entity.js +11 -6
- package/dist/esm/entities/Entity.js.map +1 -1
- package/dist/esm/entities/Entity.test.js +1 -1
- package/dist/esm/entities/Entity.test.js.map +1 -1
- package/dist/esm/entities/EntityMetadata.d.ts +1 -0
- package/dist/esm/entities/EntityMetadata.js +1 -0
- package/dist/esm/entities/EntityMetadata.js.map +1 -1
- package/dist/esm/entities/EntityStore.js +1 -1
- package/dist/esm/entities/EntityStore.js.map +1 -1
- package/dist/esm/entities/entityFieldSubscriber.d.ts +5 -0
- package/dist/esm/entities/entityFieldSubscriber.js +19 -0
- package/dist/esm/entities/entityFieldSubscriber.js.map +1 -0
- package/dist/esm/entities/types.d.ts +3 -0
- package/dist/esm/files/EntityFile.d.ts +3 -0
- package/dist/esm/files/EntityFile.js +19 -8
- package/dist/esm/files/EntityFile.js.map +1 -1
- package/dist/esm/files/FileManager.js +6 -1
- package/dist/esm/files/FileManager.js.map +1 -1
- package/dist/esm/files/FileStorage.d.ts +2 -0
- package/dist/esm/files/FileStorage.js +12 -0
- package/dist/esm/files/FileStorage.js.map +1 -1
- package/dist/esm/metadata/openMetadataDatabase.js +6 -1
- package/dist/esm/metadata/openMetadataDatabase.js.map +1 -1
- package/dist/esm/sync/Sync.d.ts +2 -0
- package/dist/esm/sync/Sync.js +1 -0
- package/dist/esm/sync/Sync.js.map +1 -1
- package/package.json +1 -1
- package/src/__tests__/{documents.test.ts → entities.test.ts} +44 -2
- package/src/__tests__/fixtures/testStorage.ts +3 -1
- package/src/entities/Entity.test.ts +1 -1
- package/src/entities/Entity.ts +20 -8
- package/src/entities/EntityMetadata.ts +2 -0
- package/src/entities/EntityStore.ts +1 -1
- package/src/entities/entityFieldSubscriber.ts +31 -0
- package/src/entities/types.ts +8 -0
- package/src/files/EntityFile.ts +10 -0
- package/src/files/FileManager.ts +11 -1
- package/src/files/FileStorage.ts +31 -0
- package/src/metadata/openMetadataDatabase.ts +7 -1
- package/src/sync/Sync.ts +3 -0
- package/dist/esm/__tests__/documents.test.js.map +0 -1
- /package/dist/esm/__tests__/{documents.test.d.ts → entities.test.d.ts} +0 -0
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
var _a, _b;
|
|
1
|
+
var _a, _b, _c;
|
|
2
2
|
import { EventSubscriber } from '@verdant-web/common';
|
|
3
3
|
export const UPDATE = Symbol('entity-file-update');
|
|
4
4
|
export const MARK_FAILED = Symbol('entity-file-mark-failed');
|
|
5
|
+
export const MARK_UPLOADED = Symbol('entity-file-mark-uploaded');
|
|
5
6
|
/**
|
|
6
7
|
* Provides a consistent interface for files used in an app via
|
|
7
8
|
* Entity access.
|
|
@@ -33,6 +34,12 @@ export class EntityFile extends EventSubscriber {
|
|
|
33
34
|
this._loading = false;
|
|
34
35
|
this.emit('change');
|
|
35
36
|
};
|
|
37
|
+
this[_c] = () => {
|
|
38
|
+
if (!this._fileData)
|
|
39
|
+
return;
|
|
40
|
+
this._fileData.remote = true;
|
|
41
|
+
this.emit('change');
|
|
42
|
+
};
|
|
36
43
|
this.destroy = () => {
|
|
37
44
|
if (this._objectUrl) {
|
|
38
45
|
URL.revokeObjectURL(this._objectUrl);
|
|
@@ -47,21 +54,25 @@ export class EntityFile extends EventSubscriber {
|
|
|
47
54
|
get isFile() {
|
|
48
55
|
return true;
|
|
49
56
|
}
|
|
57
|
+
get isUploaded() {
|
|
58
|
+
var _d, _e;
|
|
59
|
+
return (_e = (_d = this._fileData) === null || _d === void 0 ? void 0 : _d.remote) !== null && _e !== void 0 ? _e : false;
|
|
60
|
+
}
|
|
50
61
|
get url() {
|
|
51
|
-
var
|
|
62
|
+
var _d, _e;
|
|
52
63
|
if (this.loading)
|
|
53
64
|
return null;
|
|
54
65
|
if (this._objectUrl)
|
|
55
66
|
return this._objectUrl;
|
|
56
|
-
return (
|
|
67
|
+
return (_e = (_d = this._fileData) === null || _d === void 0 ? void 0 : _d.url) !== null && _e !== void 0 ? _e : null;
|
|
57
68
|
}
|
|
58
69
|
get name() {
|
|
59
|
-
var
|
|
60
|
-
return (
|
|
70
|
+
var _d, _e;
|
|
71
|
+
return (_e = (_d = this._fileData) === null || _d === void 0 ? void 0 : _d.name) !== null && _e !== void 0 ? _e : null;
|
|
61
72
|
}
|
|
62
73
|
get type() {
|
|
63
|
-
var
|
|
64
|
-
return (
|
|
74
|
+
var _d, _e;
|
|
75
|
+
return (_e = (_d = this._fileData) === null || _d === void 0 ? void 0 : _d.type) !== null && _e !== void 0 ? _e : null;
|
|
65
76
|
}
|
|
66
77
|
get loading() {
|
|
67
78
|
return this._loading;
|
|
@@ -76,5 +87,5 @@ export class EntityFile extends EventSubscriber {
|
|
|
76
87
|
};
|
|
77
88
|
}
|
|
78
89
|
}
|
|
79
|
-
_a = UPDATE, _b = MARK_FAILED;
|
|
90
|
+
_a = UPDATE, _b = MARK_FAILED, _c = MARK_UPLOADED;
|
|
80
91
|
//# sourceMappingURL=EntityFile.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EntityFile.js","sourceRoot":"","sources":["../../../src/files/EntityFile.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,eAAe,EAAY,MAAM,qBAAqB,CAAC;AAMhE,MAAM,CAAC,MAAM,MAAM,GAAG,MAAM,CAAC,oBAAoB,CAAC,CAAC;AACnD,MAAM,CAAC,MAAM,WAAW,GAAG,MAAM,CAAC,yBAAyB,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"EntityFile.js","sourceRoot":"","sources":["../../../src/files/EntityFile.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { EntityFile, MARK_FAILED, UPDATE } from './EntityFile.js';
|
|
1
|
+
import { EntityFile, MARK_FAILED, MARK_UPLOADED, UPDATE, } from './EntityFile.js';
|
|
2
2
|
import { FileStorage, } from './FileStorage.js';
|
|
3
3
|
/**
|
|
4
4
|
* Default: if file was deleted > 3 days ago
|
|
@@ -33,6 +33,10 @@ export class FileManager {
|
|
|
33
33
|
const result = await this.sync.uploadFile(file);
|
|
34
34
|
if (result.success) {
|
|
35
35
|
await this.storage.markUploaded(file.id);
|
|
36
|
+
const cached = this.files.get(file.id);
|
|
37
|
+
if (cached) {
|
|
38
|
+
cached[MARK_UPLOADED]();
|
|
39
|
+
}
|
|
36
40
|
}
|
|
37
41
|
else {
|
|
38
42
|
if (result.retry && retries < 5) {
|
|
@@ -166,6 +170,7 @@ export class FileManager {
|
|
|
166
170
|
this.config = Object.assign({ canCleanupDeletedFile: defaultCanCleanup }, config);
|
|
167
171
|
this.sync.subscribe('onlineChange', this.onOnlineChange);
|
|
168
172
|
this.meta.subscribe('filesDeleted', this.handleFileRefsDeleted);
|
|
173
|
+
this.sync.subscribe('serverReset', this.storage.resetSyncedStatusSince);
|
|
169
174
|
// check on startup to see if files can be cleaned up
|
|
170
175
|
this.tryCleanupDeletedFiles();
|
|
171
176
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FileManager.js","sourceRoot":"","sources":["../../../src/files/FileManager.ts"],"names":[],"mappings":"AAIA,OAAO,
|
|
1
|
+
{"version":3,"file":"FileManager.js","sourceRoot":"","sources":["../../../src/files/FileManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,6 +9,7 @@ export interface StoredFileData extends Omit<FileData, 'remote' | 'file'> {
|
|
|
9
9
|
remote: 'true' | 'false';
|
|
10
10
|
buffer?: ArrayBuffer;
|
|
11
11
|
deletedAt: number | null;
|
|
12
|
+
timestamp?: string;
|
|
12
13
|
}
|
|
13
14
|
export interface ReturnedFileData extends FileData {
|
|
14
15
|
deletedAt: number | null;
|
|
@@ -33,6 +34,7 @@ export declare class FileStorage extends IDBService {
|
|
|
33
34
|
transaction?: IDBTransaction | undefined;
|
|
34
35
|
}) => Promise<IDBValidKey>;
|
|
35
36
|
listUnsynced: () => Promise<ReturnedFileData[]>;
|
|
37
|
+
resetSyncedStatusSince: (since: string | null) => Promise<void>;
|
|
36
38
|
iterateOverPendingDelete: (iterator: (file: ReturnedFileData, store: IDBObjectStore) => void, transaction?: IDBTransaction) => Promise<void>;
|
|
37
39
|
getAll: () => Promise<ReturnedFileData[]>;
|
|
38
40
|
}
|
|
@@ -79,6 +79,18 @@ export class FileStorage extends IDBService {
|
|
|
79
79
|
}, { mode: 'readonly' });
|
|
80
80
|
return raw.map(this.hydrateFileData);
|
|
81
81
|
};
|
|
82
|
+
this.resetSyncedStatusSince = async (since) => {
|
|
83
|
+
const tx = this.createTransaction(['files'], { mode: 'readwrite' });
|
|
84
|
+
const raw = await this.run('files', (store) => {
|
|
85
|
+
return store.index('remote').getAll('true');
|
|
86
|
+
}, { transaction: tx });
|
|
87
|
+
const filtered = raw.filter((file) => !file.timestamp || !since || file.timestamp > since);
|
|
88
|
+
await Promise.all(filtered.map((file) => {
|
|
89
|
+
return this.run('files', (store) => {
|
|
90
|
+
return store.put(Object.assign(Object.assign({}, file), { remote: 'false' }));
|
|
91
|
+
}, { transaction: tx });
|
|
92
|
+
}));
|
|
93
|
+
};
|
|
82
94
|
this.iterateOverPendingDelete = (iterator, transaction) => {
|
|
83
95
|
return this.iterate('files', (store) => {
|
|
84
96
|
return store
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FileStorage.js","sourceRoot":"","sources":["../../../src/files/FileStorage.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"FileStorage.js","sourceRoot":"","sources":["../../../src/files/FileStorage.ts"],"names":[],"mappings":"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"}
|
|
@@ -11,7 +11,7 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
11
11
|
};
|
|
12
12
|
import { replaceLegacyOidsInObject } from '@verdant-web/common';
|
|
13
13
|
import { closeDatabase, storeRequestPromise } from '../idb.js';
|
|
14
|
-
const migrations = [version1, version2, version3, version4, version5];
|
|
14
|
+
const migrations = [version1, version2, version3, version4, version5, version6];
|
|
15
15
|
export function openMetadataDatabase({ indexedDB = window.indexedDB, namespace, log, metadataVersion = 5, }) {
|
|
16
16
|
return new Promise((resolve, reject) => {
|
|
17
17
|
const request = indexedDB.open(`${namespace}_meta`, metadataVersion);
|
|
@@ -212,4 +212,9 @@ async function version5(db, tx) {
|
|
|
212
212
|
};
|
|
213
213
|
});
|
|
214
214
|
}
|
|
215
|
+
// version 5->6: add timestamp to file metadata
|
|
216
|
+
async function version6(db, tx) {
|
|
217
|
+
const files = tx.objectStore('files');
|
|
218
|
+
files.createIndex('timestamp', 'timestamp');
|
|
219
|
+
}
|
|
215
220
|
//# sourceMappingURL=openMetadataDatabase.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openMetadataDatabase.js","sourceRoot":"","sources":["../../../src/metadata/openMetadataDatabase.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAE/D,MAAM,UAAU,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"openMetadataDatabase.js","sourceRoot":"","sources":["../../../src/metadata/openMetadataDatabase.ts"],"names":[],"mappings":"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"}
|
package/dist/esm/sync/Sync.d.ts
CHANGED
|
@@ -7,6 +7,8 @@ import { Context } from '../context.js';
|
|
|
7
7
|
type SyncEvents = {
|
|
8
8
|
onlineChange: (isOnline: boolean) => void;
|
|
9
9
|
syncingChange: (syncing: boolean) => void;
|
|
10
|
+
/** When the server has lost data and re-requests data from the past */
|
|
11
|
+
serverReset: (since: string | null) => void;
|
|
10
12
|
};
|
|
11
13
|
export type SyncTransportEvents = SyncEvents & {
|
|
12
14
|
message: (message: ServerMessage) => void;
|
package/dist/esm/sync/Sync.js
CHANGED
|
@@ -92,6 +92,7 @@ export class ServerSync extends EventSubscriber {
|
|
|
92
92
|
this.emit('syncingChange', false);
|
|
93
93
|
break;
|
|
94
94
|
case 'need-since':
|
|
95
|
+
this.emit('serverReset', message.since);
|
|
95
96
|
this.activeSync.send(await this.meta.messageCreator.createSyncStep1(message.since));
|
|
96
97
|
break;
|
|
97
98
|
case 'server-ack':
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Sync.js","sourceRoot":"","sources":["../../../src/sync/Sync.ts"],"names":[],"mappings":"AAAA,OAAO,EAGN,eAAe,EAGf,WAAW,GAEX,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvE,OAAO,EAAkB,QAAQ,EAAoB,MAAM,eAAe,CAAC;AAC3E,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EACN,0BAA0B,GAE1B,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"Sync.js","sourceRoot":"","sources":["../../../src/sync/Sync.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -20,7 +20,7 @@ async function waitForStoragePropagation(mock: MockedFunction<any>) {
|
|
|
20
20
|
});
|
|
21
21
|
}
|
|
22
22
|
|
|
23
|
-
describe('
|
|
23
|
+
describe('entities', () => {
|
|
24
24
|
it('should fill in default values', async () => {
|
|
25
25
|
const storage = await createTestStorage();
|
|
26
26
|
|
|
@@ -64,6 +64,7 @@ describe('storage documents', () => {
|
|
|
64
64
|
const singleItemResult = await singleItemQuery.resolved;
|
|
65
65
|
expect(singleItemResult).toBeTruthy();
|
|
66
66
|
assert(!!singleItemResult);
|
|
67
|
+
expect(singleItemResult).toBe(item1);
|
|
67
68
|
singleItemResult.subscribe('change', vi.fn());
|
|
68
69
|
|
|
69
70
|
const allItemsQuery = storage.todos.findAll();
|
|
@@ -637,6 +638,47 @@ describe('storage documents', () => {
|
|
|
637
638
|
storage.todos.put({
|
|
638
639
|
content: { invalid: 'value' },
|
|
639
640
|
});
|
|
640
|
-
}).toThrowErrorMatchingInlineSnapshot(
|
|
641
|
+
}).toThrowErrorMatchingInlineSnapshot(
|
|
642
|
+
`[Error: Validation error: Expected string for field content, got [object Object]]`,
|
|
643
|
+
);
|
|
644
|
+
});
|
|
645
|
+
|
|
646
|
+
it('should allow subscribing to one field', async () => {
|
|
647
|
+
const storage = await createTestStorage();
|
|
648
|
+
const item = await storage.todos.put({
|
|
649
|
+
content: 'item',
|
|
650
|
+
});
|
|
651
|
+
const queriedItem = await storage.todos.get(item.get('id')).resolved;
|
|
652
|
+
|
|
653
|
+
const callback = vi.fn();
|
|
654
|
+
queriedItem.subscribeToField('content', 'change', callback);
|
|
655
|
+
|
|
656
|
+
queriedItem.set('content', 'updated');
|
|
657
|
+
|
|
658
|
+
await waitForStoragePropagation(callback);
|
|
659
|
+
|
|
660
|
+
expect(callback).toBeCalledTimes(1);
|
|
661
|
+
});
|
|
662
|
+
|
|
663
|
+
it('should allow subscribing to one field and not break on deletion', async () => {
|
|
664
|
+
const storage = await createTestStorage({
|
|
665
|
+
log: console.log,
|
|
666
|
+
});
|
|
667
|
+
const item = await storage.todos.put({
|
|
668
|
+
content: 'item',
|
|
669
|
+
});
|
|
670
|
+
|
|
671
|
+
const callback = vi.fn(console.log);
|
|
672
|
+
item.subscribeToField('content', 'change', callback);
|
|
673
|
+
|
|
674
|
+
item.set('content', 'updated');
|
|
675
|
+
|
|
676
|
+
await waitForStoragePropagation(callback);
|
|
677
|
+
|
|
678
|
+
expect(callback).toBeCalledTimes(1);
|
|
679
|
+
|
|
680
|
+
await storage.todos.delete(item.get('id'));
|
|
681
|
+
|
|
682
|
+
expect(item.deleted).toBe(true);
|
|
641
683
|
});
|
|
642
684
|
});
|
|
@@ -24,7 +24,9 @@ export const todoCollection = schema.collection({
|
|
|
24
24
|
tags: schema.fields.array({
|
|
25
25
|
items: schema.fields.string(),
|
|
26
26
|
}),
|
|
27
|
-
category: schema.fields.string(
|
|
27
|
+
category: schema.fields.string({
|
|
28
|
+
nullable: true,
|
|
29
|
+
}),
|
|
28
30
|
attachments: schema.fields.array({
|
|
29
31
|
items: schema.fields.object({
|
|
30
32
|
properties: {
|
package/src/entities/Entity.ts
CHANGED
|
@@ -45,6 +45,7 @@ import {
|
|
|
45
45
|
ObjectEntity,
|
|
46
46
|
} from './types.js';
|
|
47
47
|
import { EntityStoreEventData, EntityStoreEvents } from './EntityStore.js';
|
|
48
|
+
import { entityFieldSubscriber } from './entityFieldSubscriber.js';
|
|
48
49
|
|
|
49
50
|
export interface EntityInit {
|
|
50
51
|
oid: ObjectIdentifier;
|
|
@@ -57,7 +58,7 @@ export interface EntityInit {
|
|
|
57
58
|
readonlyKeys?: string[];
|
|
58
59
|
fieldPath?: (string | number)[];
|
|
59
60
|
patchCreator: PatchCreator;
|
|
60
|
-
|
|
61
|
+
storeEvents: EntityStoreEvents;
|
|
61
62
|
deleteSelf: () => void;
|
|
62
63
|
}
|
|
63
64
|
|
|
@@ -83,7 +84,7 @@ export class Entity<
|
|
|
83
84
|
private ctx;
|
|
84
85
|
private files;
|
|
85
86
|
private patchCreator;
|
|
86
|
-
private
|
|
87
|
+
private storeEvents;
|
|
87
88
|
|
|
88
89
|
// an internal representation of this Entity.
|
|
89
90
|
// if present, this is the cached, known value. If null,
|
|
@@ -109,7 +110,7 @@ export class Entity<
|
|
|
109
110
|
readonlyKeys,
|
|
110
111
|
files,
|
|
111
112
|
patchCreator,
|
|
112
|
-
|
|
113
|
+
storeEvents,
|
|
113
114
|
deleteSelf,
|
|
114
115
|
}: EntityInit) {
|
|
115
116
|
super();
|
|
@@ -128,15 +129,15 @@ export class Entity<
|
|
|
128
129
|
});
|
|
129
130
|
this.patchCreator = patchCreator;
|
|
130
131
|
this.metadataFamily = metadataFamily;
|
|
131
|
-
this.
|
|
132
|
+
this.storeEvents = storeEvents;
|
|
132
133
|
this.parent = parent;
|
|
133
134
|
this._deleteSelf = deleteSelf;
|
|
134
135
|
|
|
135
136
|
// TODO: should any but the root entity be listening to these?
|
|
136
137
|
if (!this.parent) {
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
138
|
+
storeEvents.add.attach(this.onAdd);
|
|
139
|
+
storeEvents.replace.attach(this.onReplace);
|
|
140
|
+
storeEvents.resetAll.attach(this.onResetAll);
|
|
140
141
|
}
|
|
141
142
|
}
|
|
142
143
|
|
|
@@ -563,11 +564,22 @@ export class Entity<
|
|
|
563
564
|
files: this.files,
|
|
564
565
|
fieldPath: [...this.fieldPath, key],
|
|
565
566
|
patchCreator: this.patchCreator,
|
|
566
|
-
|
|
567
|
+
storeEvents: this.storeEvents,
|
|
567
568
|
deleteSelf: this.delete.bind(this, key),
|
|
568
569
|
});
|
|
569
570
|
};
|
|
570
571
|
|
|
572
|
+
subscribeToField = <K extends keyof KeyValue>(
|
|
573
|
+
key: K,
|
|
574
|
+
event: 'change', // here to keep future api changes stable
|
|
575
|
+
callback: (
|
|
576
|
+
value: KeyValue[K],
|
|
577
|
+
info: { previousValue: KeyValue[K]; isLocal?: boolean },
|
|
578
|
+
) => void,
|
|
579
|
+
) => {
|
|
580
|
+
return entityFieldSubscriber<KeyValue[K]>(this, key, callback);
|
|
581
|
+
};
|
|
582
|
+
|
|
571
583
|
// generic entity methods
|
|
572
584
|
/**
|
|
573
585
|
* Gets a value from this Entity. If the value
|
|
@@ -19,6 +19,7 @@ export type EntityMetadataView = {
|
|
|
19
19
|
deleted: boolean;
|
|
20
20
|
empty: boolean;
|
|
21
21
|
updatedAt: number;
|
|
22
|
+
latestTimestamp: string | null;
|
|
22
23
|
};
|
|
23
24
|
|
|
24
25
|
export class EntityMetadata {
|
|
@@ -136,6 +137,7 @@ export class EntityMetadata {
|
|
|
136
137
|
empty,
|
|
137
138
|
fromOlderVersion,
|
|
138
139
|
updatedAt,
|
|
140
|
+
latestTimestamp: updatedAtTimestamp,
|
|
139
141
|
};
|
|
140
142
|
};
|
|
141
143
|
|
|
@@ -451,7 +451,7 @@ export class EntityStore extends Disposable {
|
|
|
451
451
|
files: this.files,
|
|
452
452
|
metadataFamily: metadataFamily,
|
|
453
453
|
patchCreator: this.meta.patchCreator,
|
|
454
|
-
|
|
454
|
+
storeEvents: this.events,
|
|
455
455
|
deleteSelf: this.delete.bind(this, oid),
|
|
456
456
|
});
|
|
457
457
|
};
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { Entity } from './Entity.js';
|
|
2
|
+
import { EntityChangeInfo } from './types.js';
|
|
3
|
+
|
|
4
|
+
export function entityFieldSubscriber<T = any>(
|
|
5
|
+
entity: Entity,
|
|
6
|
+
field: string | number | symbol,
|
|
7
|
+
subscriber: (
|
|
8
|
+
newValue: T,
|
|
9
|
+
info: EntityChangeInfo & { previousValue: T },
|
|
10
|
+
) => void,
|
|
11
|
+
) {
|
|
12
|
+
const valueHolder = {
|
|
13
|
+
previousValue: entity.get(field),
|
|
14
|
+
isLocal: false,
|
|
15
|
+
};
|
|
16
|
+
function handler(
|
|
17
|
+
this: { previousValue: T } & EntityChangeInfo,
|
|
18
|
+
info: EntityChangeInfo,
|
|
19
|
+
) {
|
|
20
|
+
if (entity.deleted) {
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
const newValue = entity.get(field);
|
|
24
|
+
if (newValue !== this.previousValue) {
|
|
25
|
+
this.isLocal = info.isLocal;
|
|
26
|
+
subscriber(newValue, this);
|
|
27
|
+
this.previousValue = newValue;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
return entity.subscribe('change', handler.bind(valueHolder));
|
|
31
|
+
}
|
package/src/entities/types.ts
CHANGED
|
@@ -64,6 +64,14 @@ export interface BaseEntity<
|
|
|
64
64
|
event: EventName,
|
|
65
65
|
callback: EntityEvents[EventName],
|
|
66
66
|
): () => void;
|
|
67
|
+
subscribeToField<FieldName extends keyof Value>(
|
|
68
|
+
field: FieldName,
|
|
69
|
+
event: 'change',
|
|
70
|
+
callback: (
|
|
71
|
+
value: Value[FieldName],
|
|
72
|
+
info: EntityChangeInfo & { previousValue: Value[FieldName] },
|
|
73
|
+
) => void,
|
|
74
|
+
): () => void;
|
|
67
75
|
get<Key extends keyof Value>(key: Key): Value[Key];
|
|
68
76
|
getAll(): Value;
|
|
69
77
|
getSnapshot(): Snapshot;
|
package/src/files/EntityFile.ts
CHANGED
|
@@ -6,6 +6,7 @@ export type EntityFileEvents = {
|
|
|
6
6
|
|
|
7
7
|
export const UPDATE = Symbol('entity-file-update');
|
|
8
8
|
export const MARK_FAILED = Symbol('entity-file-mark-failed');
|
|
9
|
+
export const MARK_UPLOADED = Symbol('entity-file-mark-uploaded');
|
|
9
10
|
|
|
10
11
|
export type EntityFileSnapshot = {
|
|
11
12
|
id: string;
|
|
@@ -42,6 +43,9 @@ export class EntityFile extends EventSubscriber<EntityFileEvents> {
|
|
|
42
43
|
get isFile() {
|
|
43
44
|
return true;
|
|
44
45
|
}
|
|
46
|
+
get isUploaded() {
|
|
47
|
+
return this._fileData?.remote ?? false;
|
|
48
|
+
}
|
|
45
49
|
|
|
46
50
|
[UPDATE] = (fileData: FileData) => {
|
|
47
51
|
this._loading = false;
|
|
@@ -62,6 +66,12 @@ export class EntityFile extends EventSubscriber<EntityFileEvents> {
|
|
|
62
66
|
this.emit('change');
|
|
63
67
|
};
|
|
64
68
|
|
|
69
|
+
[MARK_UPLOADED] = () => {
|
|
70
|
+
if (!this._fileData) return;
|
|
71
|
+
this._fileData!.remote = true;
|
|
72
|
+
this.emit('change');
|
|
73
|
+
};
|
|
74
|
+
|
|
65
75
|
get url(): string | null {
|
|
66
76
|
if (this.loading) return null;
|
|
67
77
|
if (this._objectUrl) return this._objectUrl;
|
package/src/files/FileManager.ts
CHANGED
|
@@ -2,7 +2,12 @@ import { FileData, FileRef } from '@verdant-web/common';
|
|
|
2
2
|
import { Context } from '../context.js';
|
|
3
3
|
import { Metadata } from '../metadata/Metadata.js';
|
|
4
4
|
import { Sync } from '../sync/Sync.js';
|
|
5
|
-
import {
|
|
5
|
+
import {
|
|
6
|
+
EntityFile,
|
|
7
|
+
MARK_FAILED,
|
|
8
|
+
MARK_UPLOADED,
|
|
9
|
+
UPDATE,
|
|
10
|
+
} from './EntityFile.js';
|
|
6
11
|
import {
|
|
7
12
|
FileStorage,
|
|
8
13
|
ReturnedFileData,
|
|
@@ -62,6 +67,7 @@ export class FileManager {
|
|
|
62
67
|
|
|
63
68
|
this.sync.subscribe('onlineChange', this.onOnlineChange);
|
|
64
69
|
this.meta.subscribe('filesDeleted', this.handleFileRefsDeleted);
|
|
70
|
+
this.sync.subscribe('serverReset', this.storage.resetSyncedStatusSince);
|
|
65
71
|
// check on startup to see if files can be cleaned up
|
|
66
72
|
this.tryCleanupDeletedFiles();
|
|
67
73
|
}
|
|
@@ -89,6 +95,10 @@ export class FileManager {
|
|
|
89
95
|
const result = await this.sync.uploadFile(file);
|
|
90
96
|
if (result.success) {
|
|
91
97
|
await this.storage.markUploaded(file.id);
|
|
98
|
+
const cached = this.files.get(file.id);
|
|
99
|
+
if (cached) {
|
|
100
|
+
cached[MARK_UPLOADED]();
|
|
101
|
+
}
|
|
92
102
|
} else {
|
|
93
103
|
if (result.retry && retries < 5) {
|
|
94
104
|
this.context.log('error', 'Error uploading file, retrying...');
|