@hydranium/protocol 1.0.0-next.380 → 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.
@@ -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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hydranium/protocol",
3
- "version": "1.0.0-next.380",
3
+ "version": "1.0.0-next.382",
4
4
  "description": "Generic, language-agnostic types, constants, and pure utilities for the hydranium framework.",
5
5
  "keywords": [
6
6
  "hydranium",
@@ -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, which spares the read a first unsaved write
373
- * otherwise makes for its base; see {@link baseHashOf}.
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
- /** Write `args.model` back as this session. The session must have `args.uri` open. */
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
- /** Persist `args.model` to disk as this session. The session must have `args.uri` open. */
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(', ') });
@@ -44,3 +44,4 @@ export * from './message-relay';
44
44
  export * from './post-message-transport';
45
45
  export * from './rpc-connection';
46
46
  export * from './worker-handshake';
47
+ export * from './working-copy';