@hydranium/protocol 1.0.0-next.381 → 1.0.0-next.384
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 +11 -9
- 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 +112 -17
- 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/lib/pending-work-tracker.d.ts +4 -1
- package/lib/pending-work-tracker.d.ts.map +1 -1
- package/lib/pending-work-tracker.js +6 -5
- package/lib/pending-work-tracker.js.map +1 -1
- package/lib/testing/harness.d.ts +9 -0
- package/lib/testing/harness.d.ts.map +1 -1
- package/lib/testing/node/index.d.ts +1 -0
- package/lib/testing/node/index.d.ts.map +1 -1
- package/lib/testing/node/index.js +2 -1
- package/lib/testing/node/index.js.map +1 -1
- package/lib/testing/node/unhandled-rejections.d.ts +20 -0
- package/lib/testing/node/unhandled-rejections.d.ts.map +1 -0
- package/lib/testing/node/unhandled-rejections.js +35 -0
- package/lib/testing/node/unhandled-rejections.js.map +1 -0
- package/package.json +1 -1
- package/src/client/data-session.ts +138 -17
- package/src/client/index.ts +1 -0
- package/src/client/working-copy.ts +1100 -0
- package/src/pending-work-tracker.ts +6 -5
- package/src/testing/harness.ts +10 -0
- package/src/testing/node/index.ts +2 -1
- package/src/testing/node/unhandled-rejections.ts +31 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"working-copy.js","sourceRoot":"","sources":["../../src/client/working-copy.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,7 +15,10 @@
|
|
|
15
15
|
export declare class PendingWorkTracker {
|
|
16
16
|
/** The tracked work. {@link track} removes each entry once it settles. */
|
|
17
17
|
protected readonly pending: Set<Promise<unknown>>;
|
|
18
|
-
/**
|
|
18
|
+
/**
|
|
19
|
+
* Watch `work` until it settles. The promise handed back settles as `work`
|
|
20
|
+
* does, so a caller that drops it still sees a failure reported.
|
|
21
|
+
*/
|
|
19
22
|
track<T>(work: Promise<T>): Promise<T>;
|
|
20
23
|
/** How much of the tracked work has not settled yet. */
|
|
21
24
|
get size(): number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pending-work-tracker.d.ts","sourceRoot":"","sources":["../src/pending-work-tracker.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF;;;;;GAKG;AACH,qBAAa,kBAAkB;IAC5B,0EAA0E;IAC1E,SAAS,CAAC,QAAQ,CAAC,OAAO,wBAA+B;IAEzD
|
|
1
|
+
{"version":3,"file":"pending-work-tracker.d.ts","sourceRoot":"","sources":["../src/pending-work-tracker.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF;;;;;GAKG;AACH,qBAAa,kBAAkB;IAC5B,0EAA0E;IAC1E,SAAS,CAAC,QAAQ,CAAC,OAAO,wBAA+B;IAEzD;;;OAGG;IACH,KAAK,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAKrC;IAED,wDAAwD;IACxD,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,uGAAuG;IACvG,IAAI,MAAM,IAAI,OAAO,CAEpB;IAED;;;OAGG;IACG,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAEjC;CACH"}
|
|
@@ -18,14 +18,15 @@ exports.PendingWorkTracker = void 0;
|
|
|
18
18
|
class PendingWorkTracker {
|
|
19
19
|
/** The tracked work. {@link track} removes each entry once it settles. */
|
|
20
20
|
pending = new Set();
|
|
21
|
-
/**
|
|
21
|
+
/**
|
|
22
|
+
* Watch `work` until it settles. The promise handed back settles as `work`
|
|
23
|
+
* does, so a caller that drops it still sees a failure reported.
|
|
24
|
+
*/
|
|
22
25
|
track(work) {
|
|
23
26
|
this.pending.add(work);
|
|
24
|
-
|
|
27
|
+
return work.finally(() => {
|
|
25
28
|
this.pending.delete(work);
|
|
26
|
-
};
|
|
27
|
-
work.then(done, done);
|
|
28
|
-
return work;
|
|
29
|
+
});
|
|
29
30
|
}
|
|
30
31
|
/** How much of the tracked work has not settled yet. */
|
|
31
32
|
get size() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pending-work-tracker.js","sourceRoot":"","sources":["../src/pending-work-tracker.ts"],"names":[],"mappings":";AAAA;;;;;;;kFAOkF;;;AAElF;;;;;GAKG;AACH;IACG,0EAA0E;IACvD,OAAO,GAAG,IAAI,GAAG,EAAoB,CAAC;IAEzD
|
|
1
|
+
{"version":3,"file":"pending-work-tracker.js","sourceRoot":"","sources":["../src/pending-work-tracker.ts"],"names":[],"mappings":";AAAA;;;;;;;kFAOkF;;;AAElF;;;;;GAKG;AACH;IACG,0EAA0E;IACvD,OAAO,GAAG,IAAI,GAAG,EAAoB,CAAC;IAEzD;;;OAGG;IACH,KAAK,CAAI,IAAgB;QACtB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACvB,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE;YACtB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC7B,CAAC,CAAC,CAAC;IACN,CAAC;IAED,wDAAwD;IACxD,IAAI,IAAI;QACL,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;IAC5B,CAAC;IAED,uGAAuG;IACvG,IAAI,MAAM;QACP,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,CAAC;IAClC,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,WAAW;QACd,MAAM,OAAO,CAAC,UAAU,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;IAC/C,CAAC;CACH"}
|
package/lib/testing/harness.d.ts
CHANGED
|
@@ -21,4 +21,13 @@ export interface Harness {
|
|
|
21
21
|
/** Release every resource the harness holds. Idempotent; the uniform teardown hook. */
|
|
22
22
|
dispose(): void;
|
|
23
23
|
}
|
|
24
|
+
/**
|
|
25
|
+
* {@link Harness} for a harness whose teardown has to wait, such as one that
|
|
26
|
+
* deletes a directory only once its server reads none of it. Separate rather
|
|
27
|
+
* than a widened `Harness`, whose callers rely on a synchronous `dispose()`.
|
|
28
|
+
*/
|
|
29
|
+
export interface AsyncHarness {
|
|
30
|
+
/** Release every resource the harness holds, resolving once it has. Idempotent. */
|
|
31
|
+
dispose(): Promise<void>;
|
|
32
|
+
}
|
|
24
33
|
//# sourceMappingURL=harness.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"harness.d.ts","sourceRoot":"","sources":["../../src/testing/harness.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF;;;;;;;;;;GAUG;AACH,MAAM,WAAW,OAAO;IACrB,uFAAuF;IACvF,OAAO,IAAI,IAAI,CAAC;CAClB"}
|
|
1
|
+
{"version":3,"file":"harness.d.ts","sourceRoot":"","sources":["../../src/testing/harness.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF;;;;;;;;;;GAUG;AACH,MAAM,WAAW,OAAO;IACrB,uFAAuF;IACvF,OAAO,IAAI,IAAI,CAAC;CAClB;AAED;;;;GAIG;AACH,MAAM,WAAW,YAAY;IAC1B,mFAAmF;IACnF,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/testing/node/index.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAYlF,cAAc,qBAAqB,CAAC;AACpC,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/testing/node/index.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAYlF,cAAc,qBAAqB,CAAC;AACpC,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC;AACpC,cAAc,wBAAwB,CAAC"}
|
|
@@ -23,7 +23,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
23
23
|
};
|
|
24
24
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
25
25
|
// Subpath barrel for `@hydranium/protocol/testing/node` — the test transports
|
|
26
|
-
// that need a Node runtime.
|
|
26
|
+
// that need a Node runtime, and the capture of `process`'s unhandled rejections.
|
|
27
27
|
//
|
|
28
28
|
// Separate from `./testing` because a `PassThrough` is in `DuplexStreamPair`'s
|
|
29
29
|
// exported type and `StreamMessageReader` comes from `vscode-jsonrpc/node`, so
|
|
@@ -34,4 +34,5 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
34
34
|
__exportStar(require("./duplex-connection"), exports);
|
|
35
35
|
__exportStar(require("./duplex-stream"), exports);
|
|
36
36
|
__exportStar(require("./message-port-pair"), exports);
|
|
37
|
+
__exportStar(require("./unhandled-rejections"), exports);
|
|
37
38
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/testing/node/index.ts"],"names":[],"mappings":";AAAA;;;;;;;kFAOkF;;;;;;;;;;;;;;;;AAElF,8EAA8E;AAC9E,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/testing/node/index.ts"],"names":[],"mappings":";AAAA;;;;;;;kFAOkF;;;;;;;;;;;;;;;;AAElF,8EAA8E;AAC9E,iFAAiF;AACjF,EAAE;AACF,+EAA+E;AAC/E,+EAA+E;AAC/E,+EAA+E;AAC/E,4EAA4E;AAC5E,8EAA8E;AAC9E,aAAa;AAEb,sDAAoC;AACpC,kDAAgC;AAChC,sDAAoC;AACpC,yDAAuC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/********************************************************************************
|
|
2
|
+
* Copyright (c) 2026 CrossBreeze, EclipseSource and others.
|
|
3
|
+
*
|
|
4
|
+
* This program and the accompanying materials are made available under the
|
|
5
|
+
* terms of the MIT License which is available in the project root.
|
|
6
|
+
*
|
|
7
|
+
* SPDX-License-Identifier: MIT
|
|
8
|
+
********************************************************************************/
|
|
9
|
+
/**
|
|
10
|
+
* Run a Node-only assertion while collecting process-level unhandled rejection
|
|
11
|
+
* events. The callback owns the event-loop drain and can therefore choose the
|
|
12
|
+
* right observation window for the operation under test.
|
|
13
|
+
*
|
|
14
|
+
* Inside the window a rejection reaches only the array: while any listener is
|
|
15
|
+
* registered, Node hands none to its default handler and Vitest reports none as
|
|
16
|
+
* an error. A callback that never asserts on the array therefore hides every
|
|
17
|
+
* rejection it provokes.
|
|
18
|
+
*/
|
|
19
|
+
export declare function captureUnhandledRejections<T>(callback: (rejections: unknown[]) => Promise<T>): Promise<T>;
|
|
20
|
+
//# sourceMappingURL=unhandled-rejections.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"unhandled-rejections.d.ts","sourceRoot":"","sources":["../../../src/testing/node/unhandled-rejections.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF;;;;;;;;;GASG;AACH,wBAAsB,0BAA0B,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,UAAU,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAW/G"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/********************************************************************************
|
|
3
|
+
* Copyright (c) 2026 CrossBreeze, EclipseSource and others.
|
|
4
|
+
*
|
|
5
|
+
* This program and the accompanying materials are made available under the
|
|
6
|
+
* terms of the MIT License which is available in the project root.
|
|
7
|
+
*
|
|
8
|
+
* SPDX-License-Identifier: MIT
|
|
9
|
+
********************************************************************************/
|
|
10
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
|
+
exports.captureUnhandledRejections = captureUnhandledRejections;
|
|
12
|
+
/**
|
|
13
|
+
* Run a Node-only assertion while collecting process-level unhandled rejection
|
|
14
|
+
* events. The callback owns the event-loop drain and can therefore choose the
|
|
15
|
+
* right observation window for the operation under test.
|
|
16
|
+
*
|
|
17
|
+
* Inside the window a rejection reaches only the array: while any listener is
|
|
18
|
+
* registered, Node hands none to its default handler and Vitest reports none as
|
|
19
|
+
* an error. A callback that never asserts on the array therefore hides every
|
|
20
|
+
* rejection it provokes.
|
|
21
|
+
*/
|
|
22
|
+
async function captureUnhandledRejections(callback) {
|
|
23
|
+
const rejections = [];
|
|
24
|
+
const listener = (reason) => {
|
|
25
|
+
rejections.push(reason);
|
|
26
|
+
};
|
|
27
|
+
process.on('unhandledRejection', listener);
|
|
28
|
+
try {
|
|
29
|
+
return await callback(rejections);
|
|
30
|
+
}
|
|
31
|
+
finally {
|
|
32
|
+
process.off('unhandledRejection', listener);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=unhandled-rejections.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"unhandled-rejections.js","sourceRoot":"","sources":["../../../src/testing/node/unhandled-rejections.ts"],"names":[],"mappings":";AAAA;;;;;;;kFAOkF;;;AAElF;;;;;;;;;GASG;AACI,KAAK,qCAAwC,QAA+C;IAChG,MAAM,UAAU,GAAc,EAAE,CAAC;IACjC,MAAM,QAAQ,GAAG,CAAC,MAAe,EAAQ,EAAE;QACxC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC3B,CAAC,CAAC;IACF,OAAO,CAAC,EAAE,CAAC,oBAAoB,EAAE,QAAQ,CAAC,CAAC;IAC3C,IAAI,CAAC;QACF,OAAO,MAAM,QAAQ,CAAC,UAAU,CAAC,CAAC;IACrC,CAAC;YAAS,CAAC;QACR,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,QAAQ,CAAC,CAAC;IAC/C,CAAC;AACJ,CAAC"}
|
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(', ') });
|
|
@@ -1490,14 +1609,15 @@ export class DataSession<
|
|
|
1490
1609
|
|
|
1491
1610
|
/** Run `call`, counted as in flight on each of `uris` until it settles. */
|
|
1492
1611
|
protected track<T>(uris: readonly string[], call: () => Promise<T>): Promise<T> {
|
|
1493
|
-
|
|
1612
|
+
// Chained so only the promise handed back can report a failure.
|
|
1613
|
+
let running = call();
|
|
1494
1614
|
for (const uri of uris) {
|
|
1495
1615
|
let tracker = this.inFlight.get(uri);
|
|
1496
1616
|
if (tracker === undefined) {
|
|
1497
1617
|
tracker = new PendingWorkTracker();
|
|
1498
1618
|
this.inFlight.set(uri, tracker);
|
|
1499
1619
|
}
|
|
1500
|
-
tracker.track(running);
|
|
1620
|
+
running = tracker.track(running);
|
|
1501
1621
|
}
|
|
1502
1622
|
return running;
|
|
1503
1623
|
}
|
|
@@ -1527,9 +1647,7 @@ export class DataSession<
|
|
|
1527
1647
|
}
|
|
1528
1648
|
};
|
|
1529
1649
|
const ending = this.endings.get(uri);
|
|
1530
|
-
|
|
1531
|
-
running.then(done, done);
|
|
1532
|
-
return running;
|
|
1650
|
+
return this.track([uri], () => (ending ? ending.then(() => call(opening)) : call(opening))).finally(done);
|
|
1533
1651
|
}
|
|
1534
1652
|
|
|
1535
1653
|
/**
|
|
@@ -1538,6 +1656,9 @@ export class DataSession<
|
|
|
1538
1656
|
*/
|
|
1539
1657
|
protected trackEnding(uri: string, end: () => Promise<void>): Promise<void> {
|
|
1540
1658
|
const ending = end();
|
|
1659
|
+
// Derived, so a dropped failure is reported, and before `allSettled`, so
|
|
1660
|
+
// the caller resumes before an open waiting on it starts.
|
|
1661
|
+
const handed = ending.then(() => undefined);
|
|
1541
1662
|
const settled = Promise.allSettled([this.endings.get(uri), ending]);
|
|
1542
1663
|
this.endings.set(uri, settled);
|
|
1543
1664
|
void settled.then(() => {
|
|
@@ -1545,7 +1666,7 @@ export class DataSession<
|
|
|
1545
1666
|
this.endings.delete(uri);
|
|
1546
1667
|
}
|
|
1547
1668
|
});
|
|
1548
|
-
return
|
|
1669
|
+
return handed;
|
|
1549
1670
|
}
|
|
1550
1671
|
|
|
1551
1672
|
/** Wait until the work `trackers` hold now has settled, or {@link settleBeforeCloseMs} has passed. */
|
package/src/client/index.ts
CHANGED