@hydranium/data-server 1.0.0-next.135 → 1.0.0-next.140
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/data-server.d.ts +107 -146
- package/lib/data-server.d.ts.map +1 -1
- package/lib/data-server.js +138 -185
- package/lib/data-server.js.map +1 -1
- package/package.json +7 -7
- package/src/data-server.ts +173 -194
package/lib/data-server.d.ts
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* SPDX-License-Identifier: MIT
|
|
8
8
|
********************************************************************************/
|
|
9
9
|
import { DisposableCollection, ReferenceSource, type CloseModelArgs, type HydraniumMessageData, type HydraniumResponseError, type Disposable, type ElementSource, type FindNextNameArgs, type LatencyCollector, type LatencyReport, type OpenModelArgs, type Project, type ReferenceCandidate, type ReferenceContext, type ReferenceRequest, type ReferenceTarget, type Tracer, type TransferDiagnostic, TransferDocument, type TransferElement } from '@hydranium/protocol';
|
|
10
|
-
import { type DataClientProtocol, type DataServerDiagnosticsProtocol, type DataServerProtocol, type DumpServerStateArgs, type StartProfilingArgs, type StopProfilingArgs, type WriteServerHeapSnapshotArgs, type CloseSessionArgs, type CreateModelDocumentArgs, type CreateSessionArgs, type GetModelDocumentArgs, type GetProjectForUriArgs, type TransferSaveDocumentArgs, type WatchModelDocumentArgs, type
|
|
10
|
+
import { type DataClientProtocol, type DataServerDiagnosticsProtocol, type DataServerProtocol, type DumpServerStateArgs, type StartProfilingArgs, type StopProfilingArgs, type WriteServerHeapSnapshotArgs, type CloseSessionArgs, type CreateModelDocumentArgs, type CreateSessionArgs, type GetModelDocumentArgs, type GetProjectForUriArgs, type TransferSaveDocumentArgs, type WatchModelDocumentArgs, type TransferUpdateDocumentArgs, type TransferUpdateDocumentsArgs } from '@hydranium/protocol/data';
|
|
11
11
|
/**
|
|
12
12
|
* Raised when a profiling command arrives with no capture running.
|
|
13
13
|
*
|
|
@@ -78,12 +78,13 @@ export interface DataServerOptions extends LogNameOptions {
|
|
|
78
78
|
* (`DataClientProtocol.onDocumentUpdated`).
|
|
79
79
|
*
|
|
80
80
|
* **Subscription dispatch only** — distinct from the synchronous RPC
|
|
81
|
-
* response phase.
|
|
82
|
-
*
|
|
83
|
-
*
|
|
84
|
-
*
|
|
85
|
-
*
|
|
86
|
-
* controls only the async notification
|
|
81
|
+
* response phase. A read (`getModelDocument`) settles at the
|
|
82
|
+
* integrity-settled landmark (`IntegrityService.SettledState`), or at
|
|
83
|
+
* `Validated` when {@link GetModelDocumentArgs.includeDiagnostics} is set.
|
|
84
|
+
* A write (`updateModelDocument` / `updateModelDocuments` /
|
|
85
|
+
* `saveModelDocument`) answers once its document is validated, as a
|
|
86
|
+
* session's write does. This option controls only the async notification
|
|
87
|
+
* phase.
|
|
87
88
|
*
|
|
88
89
|
* Default: `DocumentState.Validated` — validation is the last builder
|
|
89
90
|
* phase and produces the full diagnostic set, so subscription events fired
|
|
@@ -212,6 +213,32 @@ export interface ResolvedDataServerOptions {
|
|
|
212
213
|
readonly diagnostics: DataServerDiagnosticsProvider;
|
|
213
214
|
readonly referenceSettleTimeoutMs: number;
|
|
214
215
|
}
|
|
216
|
+
/**
|
|
217
|
+
* What a {@link DataServer} keeps per canonical URI, in the `protected`
|
|
218
|
+
* {@link DataServer.uriWatchRecords}. A record lives while it has a watcher
|
|
219
|
+
* or a revert mark; {@link DataServer.pruneUriWatchRecord} enforces that on
|
|
220
|
+
* every path that removes either, so a record with no watcher has a revert
|
|
221
|
+
* pending. Test the size of {@link DataServerUriWatchRecord.watchers}, not the
|
|
222
|
+
* record's presence, for "watched".
|
|
223
|
+
*/
|
|
224
|
+
export interface DataServerUriWatchRecord {
|
|
225
|
+
/** The client ids watching the URI; save, dirty and phase events go out only while it is non-empty, a pending revert aside. */
|
|
226
|
+
readonly watchers: Set<string>;
|
|
227
|
+
/** Digest of the last emitted state, or of the state a first watch found; see {@link DataServer.dispatchPhaseEvent} for why it de-duplicates, {@link DataServer.computeDocumentFingerprint} for its inputs. */
|
|
228
|
+
fingerprint?: string;
|
|
229
|
+
/** Set by {@link DataServer.subscribeToTextDocumentCloses}; the next phase event broadcasts even without a watcher. */
|
|
230
|
+
revertPending?: boolean;
|
|
231
|
+
/**
|
|
232
|
+
* The version of an open document the last event sent was built at. The
|
|
233
|
+
* version sent again goes out as `'rebuilt'` from no client: the manager
|
|
234
|
+
* counts a version delivered only once its `Validated` listeners ran, so a
|
|
235
|
+
* build cancelled after the subscription phase would send it as a change
|
|
236
|
+
* twice. Only while the store has the document open: without it, a
|
|
237
|
+
* document can keep one version through changes of its file, so its events
|
|
238
|
+
* keep the manager's attribution.
|
|
239
|
+
*/
|
|
240
|
+
sentVersion?: number;
|
|
241
|
+
}
|
|
215
242
|
/**
|
|
216
243
|
* Typed-RPC protocol head for the hydranium framework. The data-server
|
|
217
244
|
* is a PEER of `@hydranium/core/lsp` and `@hydranium/glsp-server` —
|
|
@@ -267,8 +294,8 @@ export declare class DataServer<TTransfer extends TransferElement, TDiagnostic e
|
|
|
267
294
|
*/
|
|
268
295
|
static readonly DEFAULT_OPTIONS: Required<Pick<DataServerOptions, 'subscriptionPhase' | 'referenceSettleTimeoutMs'>>;
|
|
269
296
|
protected readonly options: ResolvedDataServerOptions;
|
|
270
|
-
/**
|
|
271
|
-
protected readonly
|
|
297
|
+
/** This connection's {@link DataServerUriWatchRecord} per canonical URI; see there for when a record lives. */
|
|
298
|
+
protected readonly uriWatchRecords: Map<string, DataServerUriWatchRecord>;
|
|
272
299
|
/**
|
|
273
300
|
* The client sessions this connection registered, by client id. A document
|
|
274
301
|
* request carrying one of these ids acts as that session; one carrying any
|
|
@@ -282,70 +309,6 @@ export declare class DataServer<TTransfer extends TransferElement, TDiagnostic e
|
|
|
282
309
|
/** Typed client proxy — sends `data-server/on*` notifications back over the same wire. */
|
|
283
310
|
protected readonly clientProxy: DataClientProtocol<TTransfer, TDiagnostic, TProject>;
|
|
284
311
|
protected readonly disposables: DisposableCollection;
|
|
285
|
-
/**
|
|
286
|
-
* Snapshot of the most recent `DocumentBuilder.onUpdate` event. Drives
|
|
287
|
-
* `reason` discrimination on outbound `onDocumentUpdated` notifications:
|
|
288
|
-
* a URI in the `changed` list emits `'changed'`, otherwise `'rebuilt'`
|
|
289
|
-
* (cascade rebuild from a dependent URI's change). The same mechanism
|
|
290
|
-
* `AstDocumentManager.onUpdate` uses on the LSP side, so reason fidelity
|
|
291
|
-
* stays consistent between heads. The `deleted` half is read by
|
|
292
|
-
* {@link dispatchDeleteEvents} rather than by the reason discrimination,
|
|
293
|
-
* a deletion travelling on its own channel.
|
|
294
|
-
*/
|
|
295
|
-
protected lastBuildUpdate?: {
|
|
296
|
-
changed: readonly URI[];
|
|
297
|
-
deleted: readonly URI[];
|
|
298
|
-
};
|
|
299
|
-
/**
|
|
300
|
-
* Per-URI hash of the last emitted (text + diagnostics) state,
|
|
301
|
-
* used by {@link dispatchPhaseEvent} to suppress duplicate
|
|
302
|
-
* `onDocumentUpdated` notifications for rebuilds that produce no
|
|
303
|
-
* observable change since the last emit.
|
|
304
|
-
*
|
|
305
|
-
* Two scenarios routinely produce such rebuilds:
|
|
306
|
-
* 1. **Refresh-triggered rebuilds.** When a second client attaches to a
|
|
307
|
-
* document already open in another client,
|
|
308
|
-
* `HydraniumTextDocuments.refreshContent` fires `onDidChangeContent`
|
|
309
|
-
* purely to re-trigger the build pipeline — the text and diagnostics
|
|
310
|
-
* are identical to the prior emit.
|
|
311
|
-
* 2. **Cascade rebuilds with no diagnostic delta.** Langium rebuilds a
|
|
312
|
-
* document when a dependency changes; if the rebuild produces the
|
|
313
|
-
* same diagnostics, there is nothing new to communicate to subscribers.
|
|
314
|
-
*
|
|
315
|
-
* Without this filter, both scenarios reach subscribers as wire-side
|
|
316
|
-
* `'changed'` events. A subscriber that interprets `'changed'` as
|
|
317
|
-
* "another client wrote new content" and resets its in-memory root to
|
|
318
|
-
* the server view then misreads the spurious event as a concurrent
|
|
319
|
-
* third-party write and loses the user's edits.
|
|
320
|
-
*
|
|
321
|
-
* Initialised on {@link watchModelDocument} to the current
|
|
322
|
-
* document fingerprint so the FIRST phase event after a fresh
|
|
323
|
-
* subscription is also de-duplicated against the state subscribers
|
|
324
|
-
* obtained via `getModelDocument` — they do not need a redundant phase
|
|
325
|
-
* notification for the state they just fetched.
|
|
326
|
-
*
|
|
327
|
-
* Cleared in {@link unwatchModelDocument} when the last
|
|
328
|
-
* subscriber for a URI leaves so memory does not accumulate.
|
|
329
|
-
*
|
|
330
|
-
* Stored as a cyrb53 hex digest (16 chars per URI) rather than the raw
|
|
331
|
-
* text + diagnostics serialisation so the memory cost is constant in
|
|
332
|
-
* document size. See {@link computeDocumentFingerprint} for the inputs.
|
|
333
|
-
*/
|
|
334
|
-
protected readonly lastEmittedFingerprint: Map<string, string>;
|
|
335
|
-
/**
|
|
336
|
-
* URIs the text store just released after their last close. The store
|
|
337
|
-
* rebuilds such a document from its disk content (discarding unsaved
|
|
338
|
-
* in-session edits), but {@link dispatchPhaseEvent} gates on the
|
|
339
|
-
* subscription map — and the last close typically also removed the last
|
|
340
|
-
* watcher, so consumers that only ever fetch via `getModelDocument` would
|
|
341
|
-
* keep showing the discarded state forever. Marked on the release (see
|
|
342
|
-
* {@link subscribeToTextDocumentCloses}) and consumed by
|
|
343
|
-
* {@link dispatchPhaseEvent}, which broadcasts the following rebuild's
|
|
344
|
-
* phase event even without a subscription — de-duplicated against
|
|
345
|
-
* {@link lastEmittedFingerprint} where an entry survives, so a close
|
|
346
|
-
* whose disk state equals the last emitted state stays silent.
|
|
347
|
-
*/
|
|
348
|
-
protected readonly pendingRevertBroadcasts: Set<string>;
|
|
349
312
|
protected readonly tracer: Tracer;
|
|
350
313
|
/** The in-flight interactive profile capture, held between {@link startProfiling} and {@link stopProfiling}. */
|
|
351
314
|
protected activeProfile?: DataServerProfileCapture;
|
|
@@ -364,10 +327,9 @@ export declare class DataServer<TTransfer extends TransferElement, TDiagnostic e
|
|
|
364
327
|
constructor(connection: MessageConnection, services: ServerSharedServices<TProject, TDiagnostic>, options?: DataServerOptions);
|
|
365
328
|
/**
|
|
366
329
|
* Release everything the constructor wired up — the bound protocol
|
|
367
|
-
* handlers and every listener — and clear
|
|
368
|
-
*
|
|
369
|
-
*
|
|
370
|
-
* closes. Also ends every session this connection registered, which closes
|
|
330
|
+
* handlers and every listener — and clear {@link uriWatchRecords}, so a
|
|
331
|
+
* long-lived shared services bundle does not retain per-connection memory
|
|
332
|
+
* after the connection closes. Also ends every session this connection registered, which closes
|
|
371
333
|
* every document it has open: the SHARED store's state rather than this
|
|
372
334
|
* server's, which outlives the connection unless released here.
|
|
373
335
|
*
|
|
@@ -440,31 +402,36 @@ export declare class DataServer<TTransfer extends TransferElement, TDiagnostic e
|
|
|
440
402
|
* fan out to the wired `clientProxy.onDocumentUpdated`. The
|
|
441
403
|
* bidirectional pattern means the event channel is the client
|
|
442
404
|
* notification surface, not a returned handle — this method only
|
|
443
|
-
* registers the
|
|
405
|
+
* registers the watcher in {@link uriWatchRecords}.
|
|
444
406
|
*
|
|
445
|
-
* Also baselines the
|
|
446
|
-
* {@link
|
|
447
|
-
*
|
|
448
|
-
*
|
|
449
|
-
*
|
|
450
|
-
*
|
|
451
|
-
* redundant phase notification for that same state.
|
|
407
|
+
* Also baselines the URI's emission fingerprint (see
|
|
408
|
+
* {@link dispatchPhaseEvent}) to the document's current state when the
|
|
409
|
+
* first watcher for the URI registers. This guarantees that any phase event firing immediately after
|
|
410
|
+
* the watch with no observable change is suppressed — watchers obtain
|
|
411
|
+
* initial state via `getModelDocument` (or {@link openModelDocument}) and
|
|
412
|
+
* do not need a redundant phase notification for that same state.
|
|
452
413
|
*/
|
|
453
414
|
watchModelDocument(args: WatchModelDocumentArgs): Promise<void>;
|
|
454
415
|
/**
|
|
455
416
|
* Remove a watch for `(uri, clientId)` previously created by
|
|
456
417
|
* {@link watchModelDocument}. Idempotent — unwatching twice is a no-op.
|
|
457
|
-
* Dispatch for `uri` stops once no watchers remain,
|
|
458
|
-
*
|
|
459
|
-
* re-baselines against the then-current document state rather than a
|
|
460
|
-
* stale snapshot from the previous watch.
|
|
418
|
+
* Dispatch for `uri` stops once no watchers remain, and the emission
|
|
419
|
+
* fingerprint goes with the last watcher (see {@link pruneUriWatchRecord}).
|
|
461
420
|
*/
|
|
462
421
|
unwatchModelDocument(args: WatchModelDocumentArgs): Promise<void>;
|
|
463
422
|
/**
|
|
464
|
-
*
|
|
465
|
-
*
|
|
466
|
-
*
|
|
467
|
-
*
|
|
423
|
+
* Drop what `uri` no longer needs: the
|
|
424
|
+
* {@link DataServerUriWatchRecord.fingerprint} once no client watches it,
|
|
425
|
+
* and the whole record once it holds no
|
|
426
|
+
* {@link DataServerUriWatchRecord.revertPending} mark either. Every path
|
|
427
|
+
* that removes a watcher or consumes a mark ends here.
|
|
428
|
+
*/
|
|
429
|
+
protected pruneUriWatchRecord(uri: string): void;
|
|
430
|
+
/**
|
|
431
|
+
* Canonicalise a URI string for use as a {@link uriWatchRecords} key, via the
|
|
432
|
+
* shared `DocumentUriPolicy`. Callers may send non-canonical URIs
|
|
433
|
+
* (drive-letter casing, percent-encoding differences, or a symlink path)
|
|
434
|
+
* over the wire; the dispatch side keys by
|
|
468
435
|
* `document.uri.toString()` from `LangiumDocuments`, so writer keys must
|
|
469
436
|
* canonicalise to the same form or events silently fail to deliver.
|
|
470
437
|
* Routing through the seam (rather than a bare `UriUtils.normalize`)
|
|
@@ -633,7 +600,7 @@ export declare class DataServer<TTransfer extends TransferElement, TDiagnostic e
|
|
|
633
600
|
*
|
|
634
601
|
* Payload-free on purpose: URIs only, so a client re-reads what it displays
|
|
635
602
|
* rather than being handed transfer documents it did not ask for. That is the
|
|
636
|
-
* property the
|
|
603
|
+
* property the watcher gate protects, and it is preserved here by
|
|
637
604
|
* carrying no document rather than by gating the message.
|
|
638
605
|
*
|
|
639
606
|
* Quiet in the common case. Editing a document that an editor has open leaves
|
|
@@ -642,7 +609,7 @@ export declare class DataServer<TTransfer extends TransferElement, TDiagnostic e
|
|
|
642
609
|
* nothing because it does not build to this phase. The ceiling is a
|
|
643
610
|
* whole-workspace rebuild at the subscription phase: one message, URIs only.
|
|
644
611
|
*
|
|
645
|
-
* The URI is canonicalised for the same reason
|
|
612
|
+
* The URI is canonicalised for the same reason {@link uriWatchRecords} is keyed
|
|
646
613
|
* that way, and is untested for the same reason as its twin in
|
|
647
614
|
* {@link dispatchDeleteEvents}: the builder reports URIs out of its own
|
|
648
615
|
* store, so a non-canonical one cannot be produced without a fixture
|
|
@@ -667,18 +634,27 @@ export declare class DataServer<TTransfer extends TransferElement, TDiagnostic e
|
|
|
667
634
|
/** Relay each change of a document's dirty state; see {@link dispatchDirtyEvent}. */
|
|
668
635
|
protected subscribeToDirtyChanges(): void;
|
|
669
636
|
/**
|
|
670
|
-
* Send a dirty flip to the connection, gated
|
|
637
|
+
* Send a dirty flip to the connection, gated on the URI's watchers as
|
|
671
638
|
* {@link dispatchSaveEvent} is: the answer at any one moment travels on
|
|
672
639
|
* every document sent, so a client that watches nothing reads it there.
|
|
673
640
|
*/
|
|
674
641
|
protected dispatchDirtyEvent(event: DocumentDirtyChangedEvent): void;
|
|
675
642
|
/**
|
|
676
|
-
* Mark each document the store releases after its last close
|
|
677
|
-
* {@link
|
|
678
|
-
*
|
|
679
|
-
*
|
|
680
|
-
*
|
|
681
|
-
*
|
|
643
|
+
* Mark each document the store releases after its last close, so
|
|
644
|
+
* {@link dispatchPhaseEvent} broadcasts the following rebuild even without
|
|
645
|
+
* a watcher. The store rebuilds such a document from its disk content,
|
|
646
|
+
* discarding unsaved in-session edits, and the last close typically also
|
|
647
|
+
* removed the last watcher: without the broadcast, a consumer that only
|
|
648
|
+
* ever fetches via `getModelDocument` keeps showing the discarded state.
|
|
649
|
+
* The broadcast is de-duplicated against the fingerprint while a watcher
|
|
650
|
+
* holds one, so a close whose disk state equals the last emitted state
|
|
651
|
+
* stays silent; with no watcher there is no fingerprint, and every revert
|
|
652
|
+
* is sent.
|
|
653
|
+
*
|
|
654
|
+
* A release, not the close itself: a document whose last client lost its
|
|
655
|
+
* connection is released only once the revert grace runs out, or when
|
|
656
|
+
* another client opens it meanwhile, and not at all when a client lost
|
|
657
|
+
* from it opens it again within its own grace.
|
|
682
658
|
*/
|
|
683
659
|
protected subscribeToTextDocumentCloses(): void;
|
|
684
660
|
/**
|
|
@@ -687,7 +663,7 @@ export declare class DataServer<TTransfer extends TransferElement, TDiagnostic e
|
|
|
687
663
|
*
|
|
688
664
|
* **Deliberately ungated, where {@link dispatchPhaseEvent} and
|
|
689
665
|
* {@link dispatchSaveEvent} are gated.** Those two carry a built document and
|
|
690
|
-
* fire on every build, so the
|
|
666
|
+
* fire on every build, so the watcher gate is what keeps bandwidth
|
|
691
667
|
* proportional to what a client asked for. A deletion is neither: it is one
|
|
692
668
|
* URI, it is rare, and it reports the workspace's STRUCTURE rather than a
|
|
693
669
|
* document's content. Gating it forces any consumer that displays the
|
|
@@ -697,7 +673,7 @@ export declare class DataServer<TTransfer extends TransferElement, TDiagnostic e
|
|
|
697
673
|
* care filters on the URI, which costs it a comparison.
|
|
698
674
|
*
|
|
699
675
|
* The precedent is the last-close revert broadcast (see
|
|
700
|
-
* {@link
|
|
676
|
+
* {@link subscribeToTextDocumentCloses}), where the same judgement was already made
|
|
701
677
|
* in the other direction: a transition that matters enough is delivered
|
|
702
678
|
* without a subscription.
|
|
703
679
|
*
|
|
@@ -711,19 +687,17 @@ export declare class DataServer<TTransfer extends TransferElement, TDiagnostic e
|
|
|
711
687
|
* `deleteDocuments` resolves a directory URI to the documents beneath it — so
|
|
712
688
|
* no caller has to handle a directory here.
|
|
713
689
|
*
|
|
714
|
-
*
|
|
715
|
-
*
|
|
716
|
-
*
|
|
717
|
-
*
|
|
718
|
-
* baseline by the next {@link watchModelDocument} and suppresses the first
|
|
719
|
-
* emit after the file returns with its previous content.
|
|
690
|
+
* The URI's fingerprint and revert mark are dropped: they describe a
|
|
691
|
+
* document that no longer exists. A kept fingerprint is adopted as the
|
|
692
|
+
* baseline and suppresses the first emit after the file returns with its
|
|
693
|
+
* previous content.
|
|
720
694
|
*
|
|
721
|
-
* The
|
|
722
|
-
*
|
|
723
|
-
*
|
|
695
|
+
* The watchers SURVIVE: a recreated file resumes delivering to them with no
|
|
696
|
+
* re-subscription, and a client that answers the deletion by closing
|
|
697
|
+
* releases the watch through `closeModelDocument` anyway.
|
|
724
698
|
*/
|
|
725
699
|
protected dispatchDeleteEvents(deleted: readonly URI[]): void;
|
|
726
|
-
/** Fan out a save event for the document's URI, gated
|
|
700
|
+
/** Fan out a save event for the document's URI, gated on the URI's watchers. */
|
|
727
701
|
protected dispatchSaveEvent(event: ClientTextDocumentChangeEvent<TextDocument>): void;
|
|
728
702
|
/**
|
|
729
703
|
* Fan out a phase event for the document's URI by calling
|
|
@@ -734,13 +708,25 @@ export declare class DataServer<TTransfer extends TransferElement, TDiagnostic e
|
|
|
734
708
|
* out to multiple local subscribers with an `Emitter<T>` — the
|
|
735
709
|
* framework deliberately does NOT promise multi-listener semantics.
|
|
736
710
|
*
|
|
737
|
-
*
|
|
738
|
-
*
|
|
739
|
-
*
|
|
740
|
-
*
|
|
741
|
-
*
|
|
742
|
-
*
|
|
743
|
-
*
|
|
711
|
+
* An event for a URI no client watches is NOT sent over the wire, so
|
|
712
|
+
* bandwidth scales with watched URIs rather than with phase events; a
|
|
713
|
+
* pending revert mark is the exception (see
|
|
714
|
+
* {@link subscribeToTextDocumentCloses}).
|
|
715
|
+
*
|
|
716
|
+
* An event for a rebuild with no observable change since the last emit is
|
|
717
|
+
* suppressed against the URI's fingerprint. Such rebuilds are routine: a
|
|
718
|
+
* second client attaching to an open document makes
|
|
719
|
+
* `HydraniumTextDocuments.refreshContent` fire `onDidChangeContent` purely
|
|
720
|
+
* to re-trigger the build, and Langium rebuilds a document when a
|
|
721
|
+
* dependency changes even if its diagnostics come out the same. Sent at a
|
|
722
|
+
* version this head has not sent, they reach watchers as `'changed'`, and a
|
|
723
|
+
* watcher that reads `'changed'` as another client's write and resets its
|
|
724
|
+
* root to the server view loses the user's edits. The first {@link watchModelDocument} baselines the
|
|
725
|
+
* fingerprint, so the first event after a watch is de-duplicated against
|
|
726
|
+
* the state the watcher just fetched; it goes with the last watcher, so the
|
|
727
|
+
* next first watch re-baselines rather than adopting a stale digest. A
|
|
728
|
+
* cyrb53 digest keeps its memory constant in document size; see
|
|
729
|
+
* {@link computeDocumentFingerprint} for the inputs.
|
|
744
730
|
*/
|
|
745
731
|
protected dispatchPhaseEvent(document: LangiumDocument, cancelToken: CancellationToken): void;
|
|
746
732
|
/**
|
|
@@ -765,21 +751,6 @@ export declare class DataServer<TTransfer extends TransferElement, TDiagnostic e
|
|
|
765
751
|
* JSON-serialisable.
|
|
766
752
|
*/
|
|
767
753
|
protected additionalFingerprintInputs(_document: LangiumDocument): readonly unknown[];
|
|
768
|
-
/**
|
|
769
|
-
* Discriminate the reason for a phase-event-driven update notification.
|
|
770
|
-
* Uses the most recent `DocumentBuilder.onUpdate` snapshot:
|
|
771
|
-
* - URI in the `changed` list → `'changed'` (the URI was passed to
|
|
772
|
-
* `documentBuilder.update(changed, deleted)`, which spans `didChange`
|
|
773
|
-
* text-document events and programmatic `update([uri], [])` calls).
|
|
774
|
-
* - Otherwise → `'rebuilt'` (cascade re-derivation: this URI was rebuilt
|
|
775
|
-
* because something it depends on changed; its own text wasn't flagged).
|
|
776
|
-
*
|
|
777
|
-
* `'saved'` is NOT emitted here — saves take the dedicated
|
|
778
|
-
* `DataClientProtocol.onDocumentSaved` channel, and adopters wanting a
|
|
779
|
-
* unified stream synthesise it in their bridge layer. A deletion is not a
|
|
780
|
-
* reason at all; see {@link dispatchDeleteEvents}.
|
|
781
|
-
*/
|
|
782
|
-
protected resolveUpdateReason(uri: URI): TransferDocumentUpdatedEvent<TTransfer, TDiagnostic>['reason'];
|
|
783
754
|
/**
|
|
784
755
|
* Subscribe to the project tier's change channel and re-fan registry
|
|
785
756
|
* diffs into per-project wire notifications. The internal
|
|
@@ -803,16 +774,6 @@ export declare class DataServer<TTransfer extends TransferElement, TDiagnostic e
|
|
|
803
774
|
* snapshot needed for the `'removed'` wire payload.
|
|
804
775
|
*/
|
|
805
776
|
protected dispatchProjectChangeEvent(event: ProjectChangeEvent<TProject>): void;
|
|
806
|
-
/**
|
|
807
|
-
* Resolve the wire-level `sourceClientId` for `document`'s events — the client
|
|
808
|
-
* that authored its current version, from the version-author history on
|
|
809
|
-
* `HydraniumTextDocuments`. The protocol-level counterpart of the internal
|
|
810
|
-
* `AstDocumentManager.getAuthor`: a framework-internal rebuild has no author,
|
|
811
|
-
* so this surfaces the {@link UNKNOWN_CLIENT_ID} presentation default. Adopters
|
|
812
|
-
* that rebuild through non-text-document channels override to derive a
|
|
813
|
-
* source id of their own.
|
|
814
|
-
*/
|
|
815
|
-
protected resolveSourceClientId(document: LangiumDocument): string;
|
|
816
777
|
dumpServerState(args: DumpServerStateArgs): Promise<string>;
|
|
817
778
|
writeHeapSnapshot(args: WriteServerHeapSnapshotArgs): Promise<string>;
|
|
818
779
|
dumpPodMemory(): Promise<string>;
|
package/lib/data-server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data-server.d.ts","sourceRoot":"","sources":["../src/data-server.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF,OAAO,EAGJ,oBAAoB,EAOpB,eAAe,EAGf,KAAK,cAAc,EACnB,KAAK,oBAAoB,EACzB,KAAK,sBAAsB,EAC3B,KAAK,UAAU,EACf,KAAK,aAAa,EAClB,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACrB,KAAK,aAAa,EAClB,KAAK,aAAa,EAClB,KAAK,OAAO,EACZ,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,KAAK,MAAM,EACX,KAAK,kBAAkB,EACvB,gBAAgB,EAChB,KAAK,eAAe,
|
|
1
|
+
{"version":3,"file":"data-server.d.ts","sourceRoot":"","sources":["../src/data-server.ts"],"names":[],"mappings":"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"}
|