@hydranium/protocol 1.0.0-next.381 → 1.0.0-next.382
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/README.md +2 -0
- package/lib/client/data-session.d.ts +77 -9
- package/lib/client/data-session.d.ts.map +1 -1
- package/lib/client/data-session.js +104 -11
- package/lib/client/data-session.js.map +1 -1
- package/lib/client/index.d.ts +1 -0
- package/lib/client/index.d.ts.map +1 -1
- package/lib/client/index.js +1 -0
- package/lib/client/index.js.map +1 -1
- package/lib/client/working-copy.d.ts +417 -0
- package/lib/client/working-copy.d.ts.map +1 -0
- package/lib/client/working-copy.js +943 -0
- package/lib/client/working-copy.js.map +1 -0
- package/package.json +1 -1
- package/src/client/data-session.ts +130 -11
- package/src/client/index.ts +1 -0
- package/src/client/working-copy.ts +1100 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"working-copy.js","sourceRoot":"","sources":["../../src/client/working-copy.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -17,7 +17,7 @@ import type {
|
|
|
17
17
|
TransferDocumentDirtyChangedEvent,
|
|
18
18
|
TransferDocumentUpdatedEvent
|
|
19
19
|
} from '../data';
|
|
20
|
-
import { isConflictError, SessionClosedError } from '../errors';
|
|
20
|
+
import { ConflictError, isConflictError, SessionClosedError, STALE_BASE_VERSION_SAVE, STALE_BASE_VERSION_UPDATE } from '../errors';
|
|
21
21
|
import type { Logger } from '../logger';
|
|
22
22
|
import { type BaseVersion, isModelVersion, type ModelVersion, type TextVersion, UNRECORDED_VERSION } from '../model-service/base-version';
|
|
23
23
|
import { type ResolvedMessage, defineMessage, describeError, resolve } from '../messages/primitives';
|
|
@@ -138,6 +138,23 @@ export type DataSessionDocument<
|
|
|
138
138
|
TServer extends DataServerProtocol<TTransfer, DiagnosticOf<TServer>> = DataServerProtocol<TTransfer>
|
|
139
139
|
> = TransferDocument<TTransfer, DiagnosticOf<TServer>>;
|
|
140
140
|
|
|
141
|
+
/**
|
|
142
|
+
* A document a restore opened again, or could not, with the caller's URI and
|
|
143
|
+
* what the restore read, `undefined` when that read failed. Not reopened, the
|
|
144
|
+
* session no longer has the document open.
|
|
145
|
+
*/
|
|
146
|
+
export interface DataSessionRestoreEvent<
|
|
147
|
+
TTransfer extends TransferElement,
|
|
148
|
+
TServer extends DataServerProtocol<TTransfer, DiagnosticOf<TServer>> = DataServerProtocol<TTransfer>
|
|
149
|
+
> {
|
|
150
|
+
/** The document's URI as the caller spelled it. */
|
|
151
|
+
readonly uri: string;
|
|
152
|
+
/** Whether the session has the document open again. */
|
|
153
|
+
readonly reopened: boolean;
|
|
154
|
+
/** What the restore read, `undefined` when that read failed or it was not reopened. */
|
|
155
|
+
readonly document?: DataSessionDocument<TTransfer, TServer>;
|
|
156
|
+
}
|
|
157
|
+
|
|
141
158
|
/**
|
|
142
159
|
* What a {@link DataSession} keeps of a URI it wrote since the URI's last save,
|
|
143
160
|
* to write it again after a reconnect that lost it.
|
|
@@ -312,6 +329,13 @@ export type DataSessionFactory<TTransfer extends TransferElement, TServer extend
|
|
|
312
329
|
* is ready, so a reconnect that failed is not left to the session's own next
|
|
313
330
|
* call; any session's next call does it too.
|
|
314
331
|
*
|
|
332
|
+
* A restarted server numbers versions afresh, so an update, save, persist or
|
|
333
|
+
* delete gated on a version is refused with a `ConflictError` and not sent
|
|
334
|
+
* when a restore ran between the call and its send. A restore that found the
|
|
335
|
+
* text the session last saw, at its version, refuses nothing. A call made
|
|
336
|
+
* later is not checked, so it takes its version from
|
|
337
|
+
* {@link onDidRestoreDocument}.
|
|
338
|
+
*
|
|
315
339
|
* Generic over the transfer root so this file names no grammar.
|
|
316
340
|
*
|
|
317
341
|
* `TServer` is bound to a server answering with ITS OWN diagnostic shape, read
|
|
@@ -369,8 +393,9 @@ export class DataSession<
|
|
|
369
393
|
protected readonly unsavedWrites = new Map<string, DataSessionUnsavedWrite<TTransfer, TServer>>();
|
|
370
394
|
/**
|
|
371
395
|
* Per URI this session has open, the text of the last document one of its
|
|
372
|
-
* own calls was answered with,
|
|
373
|
-
* otherwise makes for its base
|
|
396
|
+
* own calls was answered with, or another client's update event named. It
|
|
397
|
+
* spares the read a first unsaved write otherwise makes for its base, see
|
|
398
|
+
* {@link baseHashOf}, and lets a restore that finds it refuse nothing.
|
|
374
399
|
*/
|
|
375
400
|
protected readonly lastAnswers = new Map<string, TextState>();
|
|
376
401
|
/**
|
|
@@ -407,6 +432,23 @@ export class DataSession<
|
|
|
407
432
|
* late subscriber checks {@link isDisposed} first.
|
|
408
433
|
*/
|
|
409
434
|
readonly onDidDispose: Event<void> = this.disposeEmitter.event;
|
|
435
|
+
/**
|
|
436
|
+
* Per URI, the restores whose event has fired. A call gated on a version
|
|
437
|
+
* from before one is refused, see {@link refuseAcrossRestore}.
|
|
438
|
+
*/
|
|
439
|
+
protected readonly restores = new Map<string, number>();
|
|
440
|
+
/** Fires {@link onDidRestoreDocument}. */
|
|
441
|
+
protected readonly restoreEmitter = new Emitter<DataSessionRestoreEvent<TTransfer, TServer>>();
|
|
442
|
+
/**
|
|
443
|
+
* Fires for each document a restore after a reconnect opened again, and
|
|
444
|
+
* for each it could not open again and did not find deleted. No update
|
|
445
|
+
* event tells of a change made while the connection was down, and a
|
|
446
|
+
* restarted server numbers versions afresh, so a client that keeps a
|
|
447
|
+
* document or its version takes them from here. A call gated on a version
|
|
448
|
+
* and made before this fires is refused, unless the restore found the text
|
|
449
|
+
* the session last saw, at its version.
|
|
450
|
+
*/
|
|
451
|
+
readonly onDidRestoreDocument: Event<DataSessionRestoreEvent<TTransfer, TServer>> = this.restoreEmitter.event;
|
|
410
452
|
/**
|
|
411
453
|
* Sent with every registration, so the server lets this session register
|
|
412
454
|
* its id again while the dropped connection's session is still live there:
|
|
@@ -668,6 +710,9 @@ export class DataSession<
|
|
|
668
710
|
this.lastAnswers.delete(uri);
|
|
669
711
|
this.savedVersions.delete(uri);
|
|
670
712
|
this.createdUris.delete(uri);
|
|
713
|
+
// A call that took the count before is refused all the same, by the
|
|
714
|
+
// session when a restore was counted, else by the server, as not open.
|
|
715
|
+
this.restores.delete(uri);
|
|
671
716
|
this.host.forgetDirty?.(serverUri);
|
|
672
717
|
}
|
|
673
718
|
|
|
@@ -706,10 +751,16 @@ export class DataSession<
|
|
|
706
751
|
}
|
|
707
752
|
}
|
|
708
753
|
|
|
709
|
-
/**
|
|
754
|
+
/**
|
|
755
|
+
* Write `args.model` back as this session. The session must have `args.uri`
|
|
756
|
+
* open. Refused unsent with a `ConflictError` when a restore ran between the
|
|
757
|
+
* call and its send, see the class doc.
|
|
758
|
+
*/
|
|
710
759
|
updateDocument(args: DataSessionUpdateArgs<TTransfer, TServer>): Promise<DataSessionDocument<TTransfer, TServer>> {
|
|
760
|
+
const restores = this.restoresOf(args.uri);
|
|
711
761
|
return this.trackWrite([args.uri], async () => {
|
|
712
762
|
const server = await this.connected();
|
|
763
|
+
this.refuseAcrossRestore(restores, args.uri, args.baseVersion);
|
|
713
764
|
const update = { ...args };
|
|
714
765
|
const baseHash = await this.baseHashOf(server, args.uri, args.baseVersion);
|
|
715
766
|
const open = this.opens.get(args.uri);
|
|
@@ -722,9 +773,11 @@ export class DataSession<
|
|
|
722
773
|
/**
|
|
723
774
|
* Write several documents this session has open, all or none: the server
|
|
724
775
|
* refuses the whole set, before any text applies, when one is stale or not
|
|
725
|
-
* open. Resolves to the documents in the order given.
|
|
776
|
+
* open. Resolves to the documents in the order given. Refused unsent with a
|
|
777
|
+
* `ConflictError` when a restore ran between the call and its send.
|
|
726
778
|
*/
|
|
727
779
|
updateDocuments(args: DataSessionUpdatesArgs<TTransfer, TServer>): Promise<DataSessionDocument<TTransfer, TServer>[]> {
|
|
780
|
+
const restores = args.updates.map(update => this.restoresOf(update.uri));
|
|
728
781
|
return this.trackWrite(
|
|
729
782
|
args.updates.map(update => update.uri),
|
|
730
783
|
async () => {
|
|
@@ -732,6 +785,7 @@ export class DataSession<
|
|
|
732
785
|
// records together.
|
|
733
786
|
const updates = { ...args, updates: args.updates.map(update => ({ ...update })) };
|
|
734
787
|
const server = await this.connected();
|
|
788
|
+
args.updates.forEach((update, index) => this.refuseAcrossRestore(restores[index], update.uri, update.baseVersion));
|
|
735
789
|
const baseHashes = await Promise.all(args.updates.map(update => this.baseHashOf(server, update.uri, update.baseVersion)));
|
|
736
790
|
const opens = args.updates.map(update => this.opens.get(update.uri));
|
|
737
791
|
const documents = await server.updateModelDocuments({ ...args, clientId: this.clientId });
|
|
@@ -743,17 +797,22 @@ export class DataSession<
|
|
|
743
797
|
);
|
|
744
798
|
}
|
|
745
799
|
|
|
746
|
-
/**
|
|
800
|
+
/**
|
|
801
|
+
* Persist `args.model` to disk as this session. The session must have
|
|
802
|
+
* `args.uri` open. Refused unsent with a `ConflictError` when a restore
|
|
803
|
+
* ran between the call and its send, see the class doc.
|
|
804
|
+
*/
|
|
747
805
|
saveDocument(args: DataSessionSaveArgs<TTransfer, TServer>): Promise<TransferSavedDocument<TTransfer, DiagnosticOf<TServer>>> {
|
|
748
|
-
return this.trackSave(args.uri, server => server.saveModelDocument({ ...args, clientId: this.clientId }));
|
|
806
|
+
return this.trackSave(args.uri, args.baseVersion, server => server.saveModelDocument({ ...args, clientId: this.clientId }));
|
|
749
807
|
}
|
|
750
808
|
|
|
751
809
|
/**
|
|
752
810
|
* Persist the text the server holds for `args.uri` as this session, with no
|
|
753
|
-
* model of its own. The session must have `args.uri` open.
|
|
811
|
+
* model of its own. The session must have `args.uri` open. Refused unsent
|
|
812
|
+
* with a `ConflictError` when a restore ran between the call and its send.
|
|
754
813
|
*/
|
|
755
814
|
persistDocument(args: DataSessionPersistArgs<TTransfer, TServer>): Promise<TransferSavedDocument<TTransfer, DiagnosticOf<TServer>>> {
|
|
756
|
-
return this.trackSave(args.uri, server => server.persistModelDocument({ ...args, clientId: this.clientId }));
|
|
815
|
+
return this.trackSave(args.uri, args.baseVersion, server => server.persistModelDocument({ ...args, clientId: this.clientId }));
|
|
757
816
|
}
|
|
758
817
|
|
|
759
818
|
/**
|
|
@@ -765,14 +824,17 @@ export class DataSession<
|
|
|
765
824
|
* The session forgets the document once the delete has succeeded: on
|
|
766
825
|
* hearing its own deletion, which the server sends before it answers, or
|
|
767
826
|
* on the answer, for a client that hears no deletions. A refused delete
|
|
768
|
-
* leaves the document open, as the server does.
|
|
827
|
+
* leaves the document open, as the server does. Refused unsent with a
|
|
828
|
+
* `ConflictError` when a restore ran between the call and its send.
|
|
769
829
|
*/
|
|
770
830
|
deleteDocument(args: DataSessionDeleteArgs<TTransfer, TServer>): Promise<void> {
|
|
831
|
+
const restores = this.restoresOf(args.uri);
|
|
771
832
|
const deleting = this.trackEnding(args.uri, () =>
|
|
772
833
|
this.track([args.uri], async () => {
|
|
773
834
|
this.assertLive();
|
|
774
835
|
await this.settle([this.inFlight.get(args.uri)]);
|
|
775
836
|
const server = await this.connected();
|
|
837
|
+
this.refuseAcrossRestore(restores, args.uri, args.baseVersion);
|
|
776
838
|
const open = this.opens.get(args.uri);
|
|
777
839
|
await server.deleteModelDocument({ ...args, clientId: this.clientId });
|
|
778
840
|
// Still the open it was sent under: the deletion was not heard.
|
|
@@ -789,10 +851,13 @@ export class DataSession<
|
|
|
789
851
|
/** Run a save or persist of `uri` and record what it answered as saved. */
|
|
790
852
|
protected trackSave(
|
|
791
853
|
uri: string,
|
|
854
|
+
baseVersion: BaseVersion,
|
|
792
855
|
send: (server: RpcProxy<TServer>) => Promise<TransferSavedDocument<TTransfer, DiagnosticOf<TServer>>>
|
|
793
856
|
): Promise<TransferSavedDocument<TTransfer, DiagnosticOf<TServer>>> {
|
|
857
|
+
const restores = this.restoresOf(uri);
|
|
794
858
|
const saving = this.track([uri], async () => {
|
|
795
859
|
const server = await this.connected();
|
|
860
|
+
this.refuseAcrossRestore(restores, uri, baseVersion, STALE_BASE_VERSION_SAVE);
|
|
796
861
|
const open = this.opens.get(uri);
|
|
797
862
|
const document = await send(server);
|
|
798
863
|
// Sent under no open, or under one a close or deletion has ended
|
|
@@ -943,6 +1008,7 @@ export class DataSession<
|
|
|
943
1008
|
this.deletionSubscription?.dispose();
|
|
944
1009
|
this.disposeEmitter.fire(undefined);
|
|
945
1010
|
this.disposeEmitter.dispose();
|
|
1011
|
+
this.restoreEmitter.dispose();
|
|
946
1012
|
}
|
|
947
1013
|
|
|
948
1014
|
/**
|
|
@@ -1000,7 +1066,8 @@ export class DataSession<
|
|
|
1000
1066
|
*
|
|
1001
1067
|
* The mark in {@link createdUris} goes on any such event: the unsaved text
|
|
1002
1068
|
* is then the other client's, and a record still kept reports the
|
|
1003
|
-
* session's own.
|
|
1069
|
+
* session's own. Its text goes in {@link lastAnswers} unless that holds a
|
|
1070
|
+
* later version, so a restore that finds it counts no change.
|
|
1004
1071
|
*/
|
|
1005
1072
|
protected forgetSupersededWrite(event: TransferDocumentUpdatedEvent<TTransfer, DiagnosticOf<TServer>>): void {
|
|
1006
1073
|
if (event.reason !== 'changed' || this.isOwnEcho(event.sourceClientId)) {
|
|
@@ -1011,6 +1078,10 @@ export class DataSession<
|
|
|
1011
1078
|
continue;
|
|
1012
1079
|
}
|
|
1013
1080
|
this.createdUris.delete(uri);
|
|
1081
|
+
const known = this.lastAnswers.get(uri);
|
|
1082
|
+
if (event.document.text && !(known && known.version > event.document.text.version)) {
|
|
1083
|
+
this.recordText(uri, event.document);
|
|
1084
|
+
}
|
|
1014
1085
|
const write = this.unsavedWrites.get(uri);
|
|
1015
1086
|
if (write && this.restoreOutcome(write, event.document) !== 'kept') {
|
|
1016
1087
|
this.unsavedWrites.delete(uri);
|
|
@@ -1088,6 +1159,44 @@ export class DataSession<
|
|
|
1088
1159
|
}
|
|
1089
1160
|
}
|
|
1090
1161
|
|
|
1162
|
+
/** The restores of `uri` whose event has fired. */
|
|
1163
|
+
protected restoresOf(uri: string): number {
|
|
1164
|
+
return this.restores.get(uri) ?? 0;
|
|
1165
|
+
}
|
|
1166
|
+
|
|
1167
|
+
/**
|
|
1168
|
+
* Tell the listeners of a restore of `uri`, and count it when `counted`.
|
|
1169
|
+
* Counted just before, so a call made with the version the event hands out
|
|
1170
|
+
* is taken, and one made before it, which can only hold the old server's,
|
|
1171
|
+
* is refused. A re-open that found the text the session last saw, at its
|
|
1172
|
+
* version, is not counted, since a version from before still names it.
|
|
1173
|
+
*/
|
|
1174
|
+
protected fireRestored(event: DataSessionRestoreEvent<TTransfer, TServer>, counted = true): void {
|
|
1175
|
+
if (counted) {
|
|
1176
|
+
this.restores.set(event.uri, this.restoresOf(event.uri) + 1);
|
|
1177
|
+
}
|
|
1178
|
+
// The emitter logs a listener that throws, so a failed listener fails no restore.
|
|
1179
|
+
this.restoreEmitter.fire(event);
|
|
1180
|
+
}
|
|
1181
|
+
|
|
1182
|
+
/**
|
|
1183
|
+
* Refuse a call gated on `baseVersion` if `uri` was restored since the
|
|
1184
|
+
* call was made, when its count in {@link restores} was `restores`. A
|
|
1185
|
+
* restarted server numbers versions afresh, so the version can match text
|
|
1186
|
+
* the caller never saw, and the server would take the call over it.
|
|
1187
|
+
*/
|
|
1188
|
+
protected refuseAcrossRestore(
|
|
1189
|
+
restores: number,
|
|
1190
|
+
uri: string,
|
|
1191
|
+
baseVersion: BaseVersion,
|
|
1192
|
+
message: typeof STALE_BASE_VERSION_UPDATE | typeof STALE_BASE_VERSION_SAVE = STALE_BASE_VERSION_UPDATE
|
|
1193
|
+
): void {
|
|
1194
|
+
if (restores !== this.restoresOf(uri) && isModelVersion(baseVersion)) {
|
|
1195
|
+
// No version of the new server's text is known for the call.
|
|
1196
|
+
throw new ConflictError(uri, baseVersion, UNRECORDED_VERSION, message);
|
|
1197
|
+
}
|
|
1198
|
+
}
|
|
1199
|
+
|
|
1091
1200
|
/**
|
|
1092
1201
|
* Re-open, each under the options its {@link DataSessionOpen} holds, and
|
|
1093
1202
|
* re-watch every document the session had open, write again what it wrote
|
|
@@ -1139,6 +1248,7 @@ export class DataSession<
|
|
|
1139
1248
|
// server numbers afresh, below the versions saved before it.
|
|
1140
1249
|
this.savedVersions.clear();
|
|
1141
1250
|
const reopened = new Map<string, DataSessionDocument<TTransfer, TServer>>();
|
|
1251
|
+
const unchanged = new Set<string>();
|
|
1142
1252
|
const lost: string[] = [];
|
|
1143
1253
|
for (const uri of [...this.openUris]) {
|
|
1144
1254
|
// Closed, or its file deleted, while the restore ran.
|
|
@@ -1177,6 +1287,11 @@ export class DataSession<
|
|
|
1177
1287
|
if (this.createdUris.has(uri) && document.text !== undefined && known !== undefined && document.text.hash !== known.hash) {
|
|
1178
1288
|
this.createdUris.delete(uri);
|
|
1179
1289
|
}
|
|
1290
|
+
// The text the session last saw, at its version, so a version
|
|
1291
|
+
// from before names the same text as on the server before.
|
|
1292
|
+
if (document.text !== undefined && document.text.version === known?.version && document.text.hash === known.hash) {
|
|
1293
|
+
unchanged.add(uri);
|
|
1294
|
+
}
|
|
1180
1295
|
this.recordText(uri, document);
|
|
1181
1296
|
}
|
|
1182
1297
|
reopened.set(uri, document);
|
|
@@ -1229,6 +1344,7 @@ export class DataSession<
|
|
|
1229
1344
|
this.savedVersions.delete(uri);
|
|
1230
1345
|
this.createdUris.delete(uri);
|
|
1231
1346
|
this.host.reportError?.(error, resolve(DATA_SESSION_RESTORE_FAILED, { uri, detail: describeError(error) }));
|
|
1347
|
+
this.fireRestored({ uri, reopened: false });
|
|
1232
1348
|
}
|
|
1233
1349
|
}
|
|
1234
1350
|
const sets = new Map<object, [string, DataSessionUnsavedWrite<TTransfer, TServer>][]>();
|
|
@@ -1268,6 +1384,9 @@ export class DataSession<
|
|
|
1268
1384
|
// has the document open and watched, so it stays restored.
|
|
1269
1385
|
}
|
|
1270
1386
|
}
|
|
1387
|
+
if (this.openUris.has(uri)) {
|
|
1388
|
+
this.fireRestored({ uri, reopened: true, document: current }, !unchanged.has(uri));
|
|
1389
|
+
}
|
|
1271
1390
|
}
|
|
1272
1391
|
if (lost.length > 0) {
|
|
1273
1392
|
const reported = resolve(DATA_SESSION_UNSAVED_LOST, { uris: lost.join(', ') });
|
package/src/client/index.ts
CHANGED