@hydranium/protocol 1.0.0-next.285 → 1.0.0-next.288

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.
@@ -12,7 +12,6 @@ import type { DataServerProtocol, DiagnosticOf, TransferDocumentDeletedEvent, Tr
12
12
  import type { Logger } from '../logger';
13
13
  import { type BaseVersion, type ModelVersion } from '../model-service/base-version';
14
14
  import { type ResolvedMessage } from '../messages/primitives';
15
- import type { OpenModelArgs } from '../model-server';
16
15
  import type { MaybePromise } from '../util';
17
16
  import type { RpcProxy } from '../rpc';
18
17
  import type { TextState, TransferDocument, TransferSavedDocument } from '../transfer-document';
@@ -46,11 +45,17 @@ export declare const DATA_SESSION_UNSAVED_LOST: import("../messages/primitives")
46
45
  export type DataSessionArgs<TMethod extends (args: never) => unknown> = Omit<Parameters<TMethod>[0], 'clientId'>;
47
46
  /**
48
47
  * Open a document through a session; the session supplies `clientId`. Only the
49
- * URI and the open's options: a session's open reads the file, and the server
50
- * ignores the `languageId`, `version` and `text` seeds of `OpenModelArgs`, so
51
- * accepting them here would let a caller believe they took effect.
48
+ * URI and the open's options, read off the server's signature: the server
49
+ * ignores the `languageId`, `version` and `text` seeds of `OpenModelArgs`, and
50
+ * a field an adopter adds never reaches the server session's open, so
51
+ * accepting either would let a caller believe it took effect.
52
52
  */
53
- export type DataSessionOpenArgs<TTransfer extends TransferElement, TServer extends DataServerProtocol<TTransfer, DiagnosticOf<TServer>> = DataServerProtocol<TTransfer>> = Pick<OpenModelArgs, 'uri' | 'options'>;
53
+ export type DataSessionOpenArgs<TTransfer extends TransferElement, TServer extends DataServerProtocol<TTransfer, DiagnosticOf<TServer>> = DataServerProtocol<TTransfer>> = Pick<Parameters<TServer['openModelDocument']>[0], 'uri' | ('options' & keyof Parameters<TServer['openModelDocument']>[0])>;
54
+ /**
55
+ * The options an open through a session passes to `TServer`, `undefined` when
56
+ * it passed none; only `undefined` for a server whose open takes none.
57
+ */
58
+ export type DataSessionOpenOptions<TTransfer extends TransferElement, TServer extends DataServerProtocol<TTransfer, DiagnosticOf<TServer>> = DataServerProtocol<TTransfer>> = DataSessionOpenArgs<TTransfer, TServer>['options' & keyof DataSessionOpenArgs<TTransfer, TServer>] | undefined;
54
59
  /** Create a document through a session; the session supplies `clientId`. */
55
60
  export type DataSessionCreateArgs<TTransfer extends TransferElement, TServer extends DataServerProtocol<TTransfer, DiagnosticOf<TServer>> = DataServerProtocol<TTransfer>> = DataSessionArgs<TServer['createModelDocument']>;
56
61
  /** Close a document through a session; the session supplies `clientId`. */
@@ -108,9 +113,15 @@ export interface DataSessionUnsavedWrite<TTransfer extends TransferElement, TSer
108
113
  * that the URI is open accepts an answer from before a close or deletion
109
114
  * once the URI is open again.
110
115
  */
111
- export interface DataSessionOpen {
116
+ export interface DataSessionOpen<TTransfer extends TransferElement, TServer extends DataServerProtocol<TTransfer, DiagnosticOf<TServer>> = DataServerProtocol<TTransfer>> {
112
117
  /** The URI the open's answer named, which the server keys its notifications by. */
113
118
  readonly serverUri: string;
119
+ /**
120
+ * The options the server opened under, which a re-open after a reconnect
121
+ * passes again: those of the earliest open of the URI under way when the
122
+ * first answered, since the server keeps the open that arrives first.
123
+ */
124
+ readonly options: DataSessionOpenOptions<TTransfer, TServer>;
114
125
  /** Whether a deletion ended the open, which an open still watching sends again; a close does not. */
115
126
  deleted: boolean;
116
127
  }
@@ -120,9 +131,11 @@ export interface DataSessionOpen {
120
131
  * nothing and is not sent again, so the close stands. Without the mark, a
121
132
  * deletion during its watch has it sent again after the close.
122
133
  */
123
- export interface DataSessionOpening {
134
+ export interface DataSessionOpening<TTransfer extends TransferElement, TServer extends DataServerProtocol<TTransfer, DiagnosticOf<TServer>> = DataServerProtocol<TTransfer>> {
124
135
  /** Whether a close of the URI came while this open was under way. */
125
136
  closed: boolean;
137
+ /** The options the open was sent with; none for a create. */
138
+ readonly options: DataSessionOpenOptions<TTransfer, TServer>;
126
139
  }
127
140
  /**
128
141
  * What a {@link DataSession} needs from the connection that minted it.
@@ -140,6 +153,13 @@ export interface DataSessionHost<TTransfer extends TransferElement, TServer exte
140
153
  * is what the client was last told of the URI since the URI's last open.
141
154
  */
142
155
  restoreDirty?(event: TransferDocumentDirtyChangedEvent): void;
156
+ /**
157
+ * Tell the connection's client of a document a restore found gone, whose
158
+ * deletion reached no one while the connection was down, as the server
159
+ * tells it of a deletion over a live connection. Without it, the restore
160
+ * reports the unsaved text such a document took with it as lost.
161
+ */
162
+ restoreDeletion?(event: TransferDocumentDeletedEvent): void;
143
163
  /**
144
164
  * Forget what the client was told of `uri`'s dirty state: an open just
145
165
  * made answered its caller afresh, and the client heard none of it, or a
@@ -163,7 +183,7 @@ export interface DataSessionHost<TTransfer extends TransferElement, TServer exte
163
183
  /**
164
184
  * Fires with each deletion the server sends. A session forgets a document
165
185
  * whose file was deleted; without this event it keeps it as open until a
166
- * restore finds it gone, and reports its unsaved text lost only then.
186
+ * restore finds it gone.
167
187
  */
168
188
  readonly onDidDeleteDocument?: Event<TransferDocumentDeletedEvent>;
169
189
  /** Where the session logs the documents it forgets as gone. */
@@ -238,13 +258,13 @@ export declare class DataSession<TTransfer extends TransferElement, TServer exte
238
258
  * still under way, the open it is under. A repeat open keeps it, as the
239
259
  * server keeps its earlier open.
240
260
  */
241
- protected readonly opens: Map<string, DataSessionOpen>;
261
+ protected readonly opens: Map<string, DataSessionOpen<TTransfer, TServer>>;
242
262
  /**
243
263
  * Per URI, the opens of it this session has under way. Such a URI counts
244
264
  * as open for {@link withOpenDocument}, which would otherwise close it
245
265
  * under the open that is still being made.
246
266
  */
247
- protected readonly openings: Map<string, Set<DataSessionOpening>>;
267
+ protected readonly openings: Map<string, Set<DataSessionOpening<TTransfer, TServer>>>;
248
268
  /**
249
269
  * Per URI, the closes and deletes of it this session has under way, which
250
270
  * an open or create called meanwhile waits for; see {@link trackEnding}.
@@ -307,6 +327,13 @@ export declare class DataSession<TTransfer extends TransferElement, TServer exte
307
327
  * over a connection that is going away.
308
328
  */
309
329
  protected detached: boolean;
330
+ /**
331
+ * Write sets, keyed as a restore groups them, that lost a document to
332
+ * another client's deletion. A restore cannot write such a set again
333
+ * whole, so it writes none of it. Weak, so a set goes once no write
334
+ * record holds it.
335
+ */
336
+ protected readonly brokenSets: WeakSet<object>;
310
337
  /** The subscription to the host's `onDidChangeDirty`, disposed with the session. */
311
338
  protected readonly dirtySubscription?: Disposable;
312
339
  /** The subscription to the host's `onDidUpdateDocument`, disposed with the session. */
@@ -360,7 +387,7 @@ export declare class DataSession<TTransfer extends TransferElement, TServer exte
360
387
  * undone, since the server may have taken the close first. A failed watch
361
388
  * is undone too: the caller sees a failed open, and so would never close it.
362
389
  */
363
- protected openAndWatch(uri: string, opening: DataSessionOpening, created: boolean, open: (server: RpcProxy<TServer>) => Promise<DataSessionDocument<TTransfer, TServer>>): Promise<DataSessionDocument<TTransfer, TServer>>;
390
+ protected openAndWatch(uri: string, opening: DataSessionOpening<TTransfer, TServer>, created: boolean, open: (server: RpcProxy<TServer>) => Promise<DataSessionDocument<TTransfer, TServer>>): Promise<DataSessionDocument<TTransfer, TServer>>;
364
391
  /**
365
392
  * Watch a document this session just opened, and record it as open.
366
393
  * Answers `undefined`, recording nothing, when a deletion heard while the
@@ -381,7 +408,7 @@ export declare class DataSession<TTransfer extends TransferElement, TServer exte
381
408
  * see {@link hasOpen}: the server holds one open per session and URI, so
382
409
  * the close would end that one too.
383
410
  */
384
- protected undoOpen(server: RpcProxy<TServer>, uri: string, opening: DataSessionOpening): Promise<void>;
411
+ protected undoOpen(server: RpcProxy<TServer>, uri: string, opening: DataSessionOpening<TTransfer, TServer>): Promise<void>;
385
412
  /** Drop everything this session keeps of `uri`, which it no longer has open. */
386
413
  protected forgetDocument(uri: string): void;
387
414
  /**
@@ -389,7 +416,7 @@ export declare class DataSession<TTransfer extends TransferElement, TServer exte
389
416
  * no close has marked, other than `except`. A marked open records nothing,
390
417
  * so nothing can rely on it.
391
418
  */
392
- protected hasOpen(uri: string, except?: DataSessionOpening): boolean;
419
+ protected hasOpen(uri: string, except?: DataSessionOpening<TTransfer, TServer>): boolean;
393
420
  /**
394
421
  * Open `args.uri`, run `fn` with the opened snapshot, and close it once
395
422
  * `fn` settles, whether it returned or threw. A URI this session already
@@ -525,7 +552,10 @@ export declare class DataSession<TTransfer extends TransferElement, TServer exte
525
552
  * let a restore re-open the file that is gone. Unwatched rather than
526
553
  * closed: the server keeps the watch, and a close could end a re-open of a
527
554
  * re-created file still in flight. Unsaved writes are logged, not
528
- * reported: the client hears the deletion too.
555
+ * reported: the client hears the deletion too. A document this session
556
+ * created and never saved, deleted by no session, is reported as well: a
557
+ * drop released it. An unsaved write breaks the set it was written with,
558
+ * see {@link brokenSets}.
529
559
  *
530
560
  * This session's own deletion is neither unwatched nor logged as dropping
531
561
  * unsaved text: its delete released the watch, and its caller chose to
@@ -543,9 +573,10 @@ export declare class DataSession<TTransfer extends TransferElement, TServer exte
543
573
  */
544
574
  protected register(server: RpcProxy<TServer>, reconnected: boolean): Promise<void>;
545
575
  /**
546
- * Re-open and re-watch every document the session had open, write again
547
- * what it wrote since their last save where the re-open lost it, and tell
548
- * the host which of them lost it for good.
576
+ * Re-open, each under the options its {@link DataSessionOpen} holds, and
577
+ * re-watch every document the session had open, write again what it wrote
578
+ * since their last save where the re-open lost it, and tell the host which
579
+ * of them lost it for good.
549
580
  *
550
581
  * Decided per document by the re-opened document's `text.hash`,
551
582
  * in {@link restoreOutcome}. Versions cannot decide a write: a revert moves
@@ -562,7 +593,7 @@ export declare class DataSession<TTransfer extends TransferElement, TServer exte
562
593
  * write, so an edit arriving in between conflicts, and a conflict is not
563
594
  * retried. Documents last written by one {@link updateDocuments} are sent
564
595
  * again by one, and only when every one of them may be; a document that
565
- * could not be re-opened blocks its set.
596
+ * could not be re-opened, or that another client deleted, blocks its set.
566
597
  *
567
598
  * No caller is waiting, so the outcomes go through the host: one report
568
599
  * naming every document whose unsaved text is gone, whose record is then
@@ -572,8 +603,13 @@ export declare class DataSession<TTransfer extends TransferElement, TServer exte
572
603
  * restore to decide again. A document closed while the restore runs, or
573
604
  * whose file is deleted then, is neither restored nor reported. One gone
574
605
  * while the connection was down, which the server reads back without a
575
- * model, is forgotten, and goes into the report of lost unsaved text when
576
- * the session wrote it since its last save, or created it and never saved it.
606
+ * model, is forgotten, and its deletion goes to the host as the deletion
607
+ * no event brought; unsaved text it took with it is logged, as for a
608
+ * deletion heard live, and reported as well for a document the session
609
+ * created and never saved, which the drop released. A host that cannot
610
+ * tell the client has the unsaved text of either reported. Once the session
611
+ * is disposed, its caller has ended it, and the restore returns at its
612
+ * next await: nothing more goes to the server or the host.
577
613
  *
578
614
  * Each document's dirty state goes to the host too, read once the watch is
579
615
  * in place and any write is sent: a flip while the connection was down, or
@@ -600,7 +636,8 @@ export declare class DataSession<TTransfer extends TransferElement, TServer exte
600
636
  *
601
637
  * A member whose record is no longer the one the restore started with was
602
638
  * closed, saved or disposed meanwhile, and is left out: writing it would
603
- * put back text its caller discarded.
639
+ * put back text its caller discarded. A set in {@link brokenSets} is
640
+ * not written again.
604
641
  */
605
642
  protected reapply(server: RpcProxy<TServer>, members: readonly [string, DataSessionUnsavedWrite<TTransfer, TServer>][], reopened: ReadonlyMap<string, DataSessionDocument<TTransfer, TServer>>): Promise<string[]>;
606
643
  /**
@@ -626,7 +663,7 @@ export declare class DataSession<TTransfer extends TransferElement, TServer exte
626
663
  * text or a later write replaced it, and its answer carries the text as it
627
664
  * was when sent, which a restore would report as lost.
628
665
  */
629
- protected recordWrite(uri: string, open: DataSessionOpen | undefined, document: DataSessionDocument<TTransfer, TServer>, baseHash: string | undefined, call: DataSessionUnsavedWrite<TTransfer, TServer>['call']): void;
666
+ protected recordWrite(uri: string, open: DataSessionOpen<TTransfer, TServer> | undefined, document: DataSessionDocument<TTransfer, TServer>, baseHash: string | undefined, call: DataSessionUnsavedWrite<TTransfer, TServer>['call']): void;
630
667
  /**
631
668
  * What {@link DataSessionUnsavedWrite.answer} keeps of `document`. Every write
632
669
  * and open answers with a model; one without is reported and counted older
@@ -642,7 +679,7 @@ export declare class DataSession<TTransfer extends TransferElement, TServer exte
642
679
  * and sent once the closes and deletes of `uri` called before it have
643
680
  * answered.
644
681
  */
645
- protected trackOpen<T>(uri: string, call: (opening: DataSessionOpening) => Promise<T>): Promise<T>;
682
+ protected trackOpen<T>(uri: string, options: DataSessionOpenOptions<TTransfer, TServer>, call: (opening: DataSessionOpening<TTransfer, TServer>) => Promise<T>): Promise<T>;
646
683
  /**
647
684
  * Run `end`, a close or delete of `uri`, kept in {@link endings} until it
648
685
  * and every earlier one of `uri` have settled.
@@ -1 +1 @@
1
- {"version":3,"file":"data-session.d.ts","sourceRoot":"","sources":["../../src/client/data-session.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"data-session.d.ts","sourceRoot":"","sources":["../../src/client/data-session.ts"],"names":[],"mappings":"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"}
@@ -10,6 +10,7 @@
10
10
  Object.defineProperty(exports, "__esModule", { value: true });
11
11
  exports.DataSession = exports.DATA_SESSION_UNSAVED_LOST = exports.DATA_SESSION_ANSWER_WITHOUT_MODEL = exports.DATA_SESSION_RESTORE_FAILED = void 0;
12
12
  const vscode_jsonrpc_1 = require("vscode-jsonrpc");
13
+ const client_ids_1 = require("../client-ids");
13
14
  const clock_1 = require("../clock");
14
15
  const errors_1 = require("../errors");
15
16
  const base_version_1 = require("../model-service/base-version");
@@ -37,6 +38,10 @@ exports.DATA_SESSION_UNSAVED_LOST = (0, primitives_1.defineMessage)('hydranium/p
37
38
  function indexOf(write) {
38
39
  return 'index' in write.call ? write.call.index : 0;
39
40
  }
41
+ /** The call `write` was last written by, which a restore writes again as one set. */
42
+ function setOf(write) {
43
+ return 'update' in write.call ? write.call.update : write.call.updates;
44
+ }
40
45
  /**
41
46
  * One participant on a data connection: a properties panel, a tree, a form
42
47
  * editor. The client side of a server client session, registered over the
@@ -169,6 +174,13 @@ class DataSession {
169
174
  * over a connection that is going away.
170
175
  */
171
176
  detached = false;
177
+ /**
178
+ * Write sets, keyed as a restore groups them, that lost a document to
179
+ * another client's deletion. A restore cannot write such a set again
180
+ * whole, so it writes none of it. Weak, so a set goes once no write
181
+ * record holds it.
182
+ */
183
+ brokenSets = new WeakSet();
172
184
  /** The subscription to the host's `onDidChangeDirty`, disposed with the session. */
173
185
  dirtySubscription;
174
186
  /** The subscription to the host's `onDidUpdateDocument`, disposed with the session. */
@@ -230,7 +242,7 @@ class DataSession {
230
242
  * from `getModelDocument({ includeDiagnostics: true })`.
231
243
  */
232
244
  openDocument(args) {
233
- return this.trackOpen(args.uri, opening => this.openAndWatch(args.uri, opening, false, server => server.openModelDocument({ ...args, clientId: this.clientId })));
245
+ return this.trackOpen(args.uri, args.options, opening => this.openAndWatch(args.uri, opening, false, server => server.openModelDocument({ ...args, clientId: this.clientId })));
234
246
  }
235
247
  /**
236
248
  * Create a document that exists nowhere yet, open and watched for this
@@ -238,7 +250,7 @@ class DataSession {
238
250
  * refuses a URI that exists on disk or that any client has open.
239
251
  */
240
252
  createDocument(args) {
241
- return this.trackOpen(args.uri, opening => this.openAndWatch(args.uri, opening, true, server => server.createModelDocument({ ...args, clientId: this.clientId })));
253
+ return this.trackOpen(args.uri, undefined, opening => this.openAndWatch(args.uri, opening, true, server => server.createModelDocument({ ...args, clientId: this.clientId })));
242
254
  }
243
255
  /**
244
256
  * Send `open` and watch what it answered, again for as long as a deletion
@@ -287,7 +299,14 @@ class DataSession {
287
299
  async watchOpened(server, uri, document) {
288
300
  // Recorded before the watch, so a deletion heard while it is under way
289
301
  // finds this open, which the server made before the deletion.
290
- const open = this.opens.get(uri) ?? { serverUri: document.uri, deleted: false };
302
+ // Under the options of the earliest open still under way, which the
303
+ // server took first; one that failed is gone from `openings` by now,
304
+ // as the connection handles each answer in a task of its own.
305
+ const open = this.opens.get(uri) ?? {
306
+ serverUri: document.uri,
307
+ deleted: false,
308
+ options: [...(this.openings.get(uri) ?? [])].find(opening => !opening.closed)?.options
309
+ };
291
310
  this.opens.set(uri, open);
292
311
  await server.watchModelDocument({ uri, clientId: this.clientId });
293
312
  if (this.opens.get(uri) !== open) {
@@ -655,7 +674,10 @@ class DataSession {
655
674
  * let a restore re-open the file that is gone. Unwatched rather than
656
675
  * closed: the server keeps the watch, and a close could end a re-open of a
657
676
  * re-created file still in flight. Unsaved writes are logged, not
658
- * reported: the client hears the deletion too.
677
+ * reported: the client hears the deletion too. A document this session
678
+ * created and never saved, deleted by no session, is reported as well: a
679
+ * drop released it. An unsaved write breaks the set it was written with,
680
+ * see {@link brokenSets}.
659
681
  *
660
682
  * This session's own deletion is neither unwatched nor logged as dropping
661
683
  * unsaved text: its delete released the watch, and its caller chose to
@@ -672,7 +694,18 @@ class DataSession {
672
694
  this.forgetDocument(uri);
673
695
  continue;
674
696
  }
697
+ const write = this.unsavedWrites.get(uri);
698
+ if (write) {
699
+ this.brokenSets.add(setOf(write));
700
+ }
701
+ // Never saved, so no file a watcher could see removed: a deletion
702
+ // naming no session is the release of the text a drop left behind.
703
+ const released = this.createdUris.has(uri) && event.sourceClientId === client_ids_1.UNKNOWN_CLIENT_ID;
675
704
  this.forgetGoneDocument(uri);
705
+ if (released) {
706
+ const reported = (0, primitives_1.resolve)(exports.DATA_SESSION_UNSAVED_LOST, { uris: uri });
707
+ this.host.reportError?.(new Error(reported.text), reported);
708
+ }
676
709
  this.connected()
677
710
  .then(server => server.unwatchModelDocument({ uri, clientId: this.clientId }))
678
711
  .catch(() => undefined);
@@ -704,9 +737,10 @@ class DataSession {
704
737
  }
705
738
  }
706
739
  /**
707
- * Re-open and re-watch every document the session had open, write again
708
- * what it wrote since their last save where the re-open lost it, and tell
709
- * the host which of them lost it for good.
740
+ * Re-open, each under the options its {@link DataSessionOpen} holds, and
741
+ * re-watch every document the session had open, write again what it wrote
742
+ * since their last save where the re-open lost it, and tell the host which
743
+ * of them lost it for good.
710
744
  *
711
745
  * Decided per document by the re-opened document's `text.hash`,
712
746
  * in {@link restoreOutcome}. Versions cannot decide a write: a revert moves
@@ -723,7 +757,7 @@ class DataSession {
723
757
  * write, so an edit arriving in between conflicts, and a conflict is not
724
758
  * retried. Documents last written by one {@link updateDocuments} are sent
725
759
  * again by one, and only when every one of them may be; a document that
726
- * could not be re-opened blocks its set.
760
+ * could not be re-opened, or that another client deleted, blocks its set.
727
761
  *
728
762
  * No caller is waiting, so the outcomes go through the host: one report
729
763
  * naming every document whose unsaved text is gone, whose record is then
@@ -733,8 +767,13 @@ class DataSession {
733
767
  * restore to decide again. A document closed while the restore runs, or
734
768
  * whose file is deleted then, is neither restored nor reported. One gone
735
769
  * while the connection was down, which the server reads back without a
736
- * model, is forgotten, and goes into the report of lost unsaved text when
737
- * the session wrote it since its last save, or created it and never saved it.
770
+ * model, is forgotten, and its deletion goes to the host as the deletion
771
+ * no event brought; unsaved text it took with it is logged, as for a
772
+ * deletion heard live, and reported as well for a document the session
773
+ * created and never saved, which the drop released. A host that cannot
774
+ * tell the client has the unsaved text of either reported. Once the session
775
+ * is disposed, its caller has ended it, and the restore returns at its
776
+ * next await: nothing more goes to the server or the host.
738
777
  *
739
778
  * Each document's dirty state goes to the host too, read once the watch is
740
779
  * in place and any write is sent: a flip while the connection was down, or
@@ -755,7 +794,11 @@ class DataSession {
755
794
  continue;
756
795
  }
757
796
  try {
758
- const document = await server.openModelDocument({ uri, clientId: this.clientId });
797
+ const options = this.opens.get(uri)?.options;
798
+ const document = await server.openModelDocument({ uri, clientId: this.clientId, options });
799
+ if (this.disposed) {
800
+ return;
801
+ }
759
802
  if (!this.openUris.has(uri)) {
760
803
  // Forgotten while it re-opened. A close of the caller's would
761
804
  // follow, but a deletion sends none.
@@ -765,13 +808,16 @@ class DataSession {
765
808
  // Recorded before the watch, so a deletion heard while it is under
766
809
  // way finds the re-open under the URI it answered with, which a
767
810
  // restarted server may key differently.
768
- this.opens.set(uri, { serverUri: document.uri, deleted: false });
811
+ this.opens.set(uri, { serverUri: document.uri, deleted: false, options });
769
812
  await server.watchModelDocument({ uri, clientId: this.clientId }).catch(async (error) => {
770
813
  // Closed, or the server holds the re-open until the session
771
814
  // ends; no other call relies on it while the restore runs.
772
815
  await server.closeModelDocument({ uri, clientId: this.clientId }).catch(() => undefined);
773
816
  throw error;
774
817
  });
818
+ if (this.disposed) {
819
+ return;
820
+ }
775
821
  if (this.openUris.has(uri)) {
776
822
  this.recordText(uri, document);
777
823
  }
@@ -781,22 +827,43 @@ class DataSession {
781
827
  // Gone while the connection was down, which no deletion told the
782
828
  // session of: the server answers a read of it without a model.
783
829
  const read = await server.getModelDocument({ uri }).catch(() => undefined);
830
+ if (this.disposed) {
831
+ return;
832
+ }
784
833
  // Forgotten meanwhile, so nothing is lost.
785
834
  if (!this.openUris.has(uri)) {
786
835
  continue;
787
836
  }
788
837
  if (read && !read.model) {
789
- // No deletion reached the client either, so unsaved text the
790
- // document took with it is reported, as a drop's other losses are.
791
838
  const write = this.unsavedWrites.get(uri);
792
- if (this.forgetGoneDocument(uri)) {
793
- lost.push(uri);
794
- }
839
+ // Named as the client last heard it, by the open's answer.
840
+ const serverUri = this.opens.get(uri)?.serverUri ?? uri;
841
+ // Never saved, so the drop released it and no one deleted it.
842
+ const created = this.createdUris.has(uri);
843
+ const unsaved = this.forgetGoneDocument(uri);
795
844
  // Kept for `reapply`, where it blocks its set as a document
796
845
  // that could not be re-opened does, and goes.
797
846
  if (write) {
798
847
  this.unsavedWrites.set(uri, write);
799
848
  }
849
+ if (!this.host.restoreDeletion) {
850
+ // No client hears of the deletion, so the loss is reported.
851
+ if (unsaved) {
852
+ lost.push(uri);
853
+ }
854
+ continue;
855
+ }
856
+ // The client hears of the deletion, so unsaved text is logged,
857
+ // as for one heard live; the drop's release is reported too.
858
+ if (created) {
859
+ lost.push(uri);
860
+ }
861
+ try {
862
+ this.host.restoreDeletion({ uri: serverUri, sourceClientId: client_ids_1.UNKNOWN_CLIENT_ID });
863
+ }
864
+ catch {
865
+ // The client's listener failed, not the restore.
866
+ }
800
867
  continue;
801
868
  }
802
869
  // Its record goes with its set's, in `reapply`, which it blocks.
@@ -810,11 +877,14 @@ class DataSession {
810
877
  }
811
878
  const sets = new Map();
812
879
  for (const [uri, write] of writes) {
813
- const call = 'update' in write.call ? write.call.update : write.call.updates;
814
- sets.set(call, [...(sets.get(call) ?? []), [uri, write]]);
880
+ const set = setOf(write);
881
+ sets.set(set, [...(sets.get(set) ?? []), [uri, write]]);
815
882
  }
816
883
  for (const members of sets.values()) {
817
884
  lost.push(...(await this.reapply(server, members, reopened)));
885
+ if (this.disposed) {
886
+ return;
887
+ }
818
888
  }
819
889
  for (const uri of reopened.keys()) {
820
890
  if (!this.openUris.has(uri)) {
@@ -823,6 +893,9 @@ class DataSession {
823
893
  // A failed read, or one without text, leaves the client's dirty
824
894
  // state as it was; the document is restored all the same.
825
895
  const current = await server.getModelDocument({ uri }).catch(() => undefined);
896
+ if (this.disposed) {
897
+ return;
898
+ }
826
899
  // Again after the read: one closed or deleted meanwhile has no
827
900
  // state to tell.
828
901
  if (current?.text !== undefined && this.openUris.has(uri)) {
@@ -872,7 +945,8 @@ class DataSession {
872
945
  *
873
946
  * A member whose record is no longer the one the restore started with was
874
947
  * closed, saved or disposed meanwhile, and is left out: writing it would
875
- * put back text its caller discarded.
948
+ * put back text its caller discarded. A set in {@link brokenSets} is
949
+ * not written again.
876
950
  */
877
951
  async reapply(server, members, reopened) {
878
952
  const current = (uri, write) => !this.disposed && this.unsavedWrites.get(uri) === write;
@@ -899,7 +973,7 @@ class DataSession {
899
973
  });
900
974
  return gone.filter(member => member.outcome === 'lost' || member.outcome === 'resend').map(member => member.uri);
901
975
  };
902
- if (outcomes.some(member => member.outcome === 'lost' || member.outcome === 'failed')) {
976
+ if (this.brokenSets.has(setOf(members[0][1])) || outcomes.some(member => member.outcome === 'lost' || member.outcome === 'failed')) {
903
977
  return lose();
904
978
  }
905
979
  // In the order of the call's updates, which is the order of its answers.
@@ -1042,8 +1116,8 @@ class DataSession {
1042
1116
  * and sent once the closes and deletes of `uri` called before it have
1043
1117
  * answered.
1044
1118
  */
1045
- trackOpen(uri, call) {
1046
- const opening = { closed: false };
1119
+ trackOpen(uri, options, call) {
1120
+ const opening = { closed: false, options };
1047
1121
  const openings = this.openings.get(uri) ?? new Set();
1048
1122
  this.openings.set(uri, openings.add(opening));
1049
1123
  const done = () => {