@hydranium/protocol 1.0.0-next.148 → 1.0.0-next.155
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/lib/client/data-connection.d.ts +10 -3
- package/lib/client/data-connection.d.ts.map +1 -1
- package/lib/client/data-connection.js +30 -5
- package/lib/client/data-connection.js.map +1 -1
- package/lib/client/data-session.d.ts +170 -29
- package/lib/client/data-session.d.ts.map +1 -1
- package/lib/client/data-session.js +322 -49
- package/lib/client/data-session.js.map +1 -1
- package/lib/transfer-document.d.ts +12 -0
- package/lib/transfer-document.d.ts.map +1 -1
- package/lib/transfer-document.js.map +1 -1
- package/lib/util.d.ts +6 -9
- package/lib/util.d.ts.map +1 -1
- package/lib/util.js +13 -5
- package/lib/util.js.map +1 -1
- package/package.json +1 -1
- package/src/client/data-connection.ts +32 -6
- package/src/client/data-session.ts +386 -52
- package/src/transfer-document.ts +12 -0
- package/src/util.ts +14 -5
package/lib/util.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"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"}
|
package/lib/util.js
CHANGED
|
@@ -20,7 +20,7 @@ exports.identity = identity;
|
|
|
20
20
|
exports.findNextUnique = findNextUnique;
|
|
21
21
|
exports.unreachable = unreachable;
|
|
22
22
|
exports.getAt = getAt;
|
|
23
|
-
exports.
|
|
23
|
+
exports.textHash = textHash;
|
|
24
24
|
var Disposable;
|
|
25
25
|
(function (Disposable) {
|
|
26
26
|
function create(dispose) {
|
|
@@ -209,12 +209,20 @@ function getAt(obj, path) {
|
|
|
209
209
|
}
|
|
210
210
|
return cur;
|
|
211
211
|
}
|
|
212
|
+
/**
|
|
213
|
+
* A stable, non-cryptographic digest of `text`, equal on every host for equal
|
|
214
|
+
* text: the `TransferDocument.textHash` a data server stamps, so a client can
|
|
215
|
+
* hash text of its own to compare. An array is read as its elements joined, so
|
|
216
|
+
* a large text is hashed in parts without concatenating it. It tells whether a
|
|
217
|
+
* text changed, not who could forge one.
|
|
218
|
+
*/
|
|
219
|
+
function textHash(text) {
|
|
220
|
+
const { high, low } = cyrb53(typeof text === 'string' ? [text] : text);
|
|
221
|
+
return high.toString(16).padStart(8, '0') + low.toString(16).padStart(8, '0');
|
|
222
|
+
}
|
|
212
223
|
/**
|
|
213
224
|
* The two 32-bit words cyrb53 ends on, each unsigned, for `parts` read as one
|
|
214
|
-
* string.
|
|
215
|
-
* whether a text changed, not who can forge one, and needs no `node:*` module,
|
|
216
|
-
* so every host runs it. The parts are hashed in turn, so a caller never
|
|
217
|
-
* concatenates a large text to hash it with others.
|
|
225
|
+
* string. It needs no `node:*` module, so every host runs it.
|
|
218
226
|
*/
|
|
219
227
|
function cyrb53(parts) {
|
|
220
228
|
let h1 = 0xdeadbeef;
|
package/lib/util.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"util.js","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":";AAAA;;;;;;;kFAOkF;;;AAiIlF,sCAEC;AAMD,8BAEC;AAID,8BAEC;AASD,sBAmBC;AAGD,0BAIC;AAGD,4BAEC;AAYD,4CAEC;AAGD,4BAEC;AAMD,wCAQC;AAGD,kCAEC;AAUD,sBASC;AASD,
|
|
1
|
+
{"version":3,"file":"util.js","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -16,7 +16,8 @@ import {
|
|
|
16
16
|
type DataServerProtocol,
|
|
17
17
|
type DiagnosticOf,
|
|
18
18
|
type ProjectOf,
|
|
19
|
-
type TransferDocumentDirtyChangedEvent
|
|
19
|
+
type TransferDocumentDirtyChangedEvent,
|
|
20
|
+
type TransferDocumentUpdatedEvent
|
|
20
21
|
} from '../data';
|
|
21
22
|
import { DuplicateClientIdError, ReservedClientIdError } from '../errors';
|
|
22
23
|
import type { TransferElement } from '../transfer-element';
|
|
@@ -107,6 +108,10 @@ export class DataConnection<
|
|
|
107
108
|
* {@link DataSessionHost.restoreDirty}.
|
|
108
109
|
*/
|
|
109
110
|
protected readonly dirtyStates = new Map<string, boolean>();
|
|
111
|
+
/** Backs each session's {@link DataSessionHost.onDidChangeDirty}. */
|
|
112
|
+
protected readonly dirtyChangedEmitter = new Emitter<TransferDocumentDirtyChangedEvent>();
|
|
113
|
+
/** Backs each session's {@link DataSessionHost.onDidUpdateDocument}. */
|
|
114
|
+
protected readonly documentUpdatedEmitter = new Emitter<TransferDocumentUpdatedEvent<TTransfer, DiagnosticOf<TServer>>>();
|
|
110
115
|
|
|
111
116
|
constructor(port: DataPort, client: TClient, ...rest: DataConnectionArgs<TTransfer, TClient, TServer>) {
|
|
112
117
|
const [options = {}] = rest as [
|
|
@@ -171,7 +176,9 @@ export class DataConnection<
|
|
|
171
176
|
this.deliverDirty(event);
|
|
172
177
|
}
|
|
173
178
|
},
|
|
174
|
-
forgetDirty: uri => this.dirtyStates.delete(uri)
|
|
179
|
+
forgetDirty: uri => this.dirtyStates.delete(uri),
|
|
180
|
+
onDidChangeDirty: this.dirtyChangedEmitter.event,
|
|
181
|
+
onDidUpdateDocument: this.documentUpdatedEmitter.event
|
|
175
182
|
},
|
|
176
183
|
label
|
|
177
184
|
);
|
|
@@ -189,12 +196,17 @@ export class DataConnection<
|
|
|
189
196
|
/**
|
|
190
197
|
* The client, with its `onDocumentDirtyChanged` passing through
|
|
191
198
|
* {@link deliverDirty} first, so {@link dirtyStates} holds what the server
|
|
192
|
-
* told it
|
|
193
|
-
*
|
|
199
|
+
* told it, and every session hears it through {@link dirtyChangedEmitter};
|
|
200
|
+
* and with its `onDocumentUpdated` heard by every session through
|
|
201
|
+
* {@link documentUpdatedEmitter} first. Every other bound method forwards
|
|
202
|
+
* to the client unchanged, and one the client lacks stays absent, so the
|
|
203
|
+
* binding still refuses it.
|
|
194
204
|
*/
|
|
195
205
|
protected override localTarget(): TClient {
|
|
196
206
|
const client = this.client as unknown as Record<string, unknown>;
|
|
197
|
-
|
|
207
|
+
const hearsDirty = typeof client.onDocumentDirtyChanged === 'function';
|
|
208
|
+
const hearsUpdates = typeof client.onDocumentUpdated === 'function';
|
|
209
|
+
if (!hearsDirty && !hearsUpdates) {
|
|
198
210
|
return this.client;
|
|
199
211
|
}
|
|
200
212
|
const target: Record<string, unknown> = {};
|
|
@@ -204,7 +216,19 @@ export class DataConnection<
|
|
|
204
216
|
target[name] = (params: unknown): unknown => (method as (params: unknown) => unknown).call(client, params);
|
|
205
217
|
}
|
|
206
218
|
}
|
|
207
|
-
|
|
219
|
+
if (hearsDirty) {
|
|
220
|
+
target.onDocumentDirtyChanged = (event: TransferDocumentDirtyChangedEvent): void => {
|
|
221
|
+
this.dirtyChangedEmitter.fire(event);
|
|
222
|
+
this.deliverDirty(event);
|
|
223
|
+
};
|
|
224
|
+
}
|
|
225
|
+
if (hearsUpdates) {
|
|
226
|
+
const forward = target.onDocumentUpdated as (event: TransferDocumentUpdatedEvent<TTransfer, DiagnosticOf<TServer>>) => void;
|
|
227
|
+
target.onDocumentUpdated = (event: TransferDocumentUpdatedEvent<TTransfer, DiagnosticOf<TServer>>): void => {
|
|
228
|
+
this.documentUpdatedEmitter.fire(event);
|
|
229
|
+
forward(event);
|
|
230
|
+
};
|
|
231
|
+
}
|
|
208
232
|
return target as unknown as TClient;
|
|
209
233
|
}
|
|
210
234
|
|
|
@@ -246,6 +270,8 @@ export class DataConnection<
|
|
|
246
270
|
// For a factory's session whose `detach` does not fire.
|
|
247
271
|
this.sessions.clear();
|
|
248
272
|
this.createSessionEmitter.dispose();
|
|
273
|
+
this.dirtyChangedEmitter.dispose();
|
|
274
|
+
this.documentUpdatedEmitter.dispose();
|
|
249
275
|
super.dispose();
|
|
250
276
|
}
|
|
251
277
|
}
|