@hydranium/core 1.0.0-next.117 → 1.0.0-next.123
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/documents/ast-document-manager.d.ts +8 -44
- package/lib/documents/ast-document-manager.d.ts.map +1 -1
- package/lib/documents/ast-document-manager.js +22 -41
- package/lib/documents/ast-document-manager.js.map +1 -1
- package/lib/documents/client-session-errors.d.ts +4 -33
- package/lib/documents/client-session-errors.d.ts.map +1 -1
- package/lib/documents/client-session-errors.js +4 -46
- package/lib/documents/client-session-errors.js.map +1 -1
- package/lib/documents/client-session-registry.d.ts +40 -20
- package/lib/documents/client-session-registry.d.ts.map +1 -1
- package/lib/documents/client-session-registry.js +33 -20
- package/lib/documents/client-session-registry.js.map +1 -1
- package/lib/documents/file-system-task-queue.d.ts +49 -0
- package/lib/documents/file-system-task-queue.d.ts.map +1 -0
- package/lib/documents/file-system-task-queue.js +34 -0
- package/lib/documents/file-system-task-queue.js.map +1 -0
- package/lib/documents/hydranium-text-documents.d.ts +138 -13
- package/lib/documents/hydranium-text-documents.d.ts.map +1 -1
- package/lib/documents/hydranium-text-documents.js +283 -40
- package/lib/documents/hydranium-text-documents.js.map +1 -1
- package/lib/documents/index.d.ts +1 -0
- package/lib/documents/index.d.ts.map +1 -1
- package/lib/documents/index.js +1 -0
- package/lib/documents/index.js.map +1 -1
- package/lib/langium/document-builder/document-builder.d.ts +15 -2
- package/lib/langium/document-builder/document-builder.d.ts.map +1 -1
- package/lib/langium/document-builder/document-builder.js +15 -2
- package/lib/langium/document-builder/document-builder.js.map +1 -1
- package/lib/langium/integrity/integrity-service.d.ts +3 -2
- package/lib/langium/integrity/integrity-service.d.ts.map +1 -1
- package/lib/langium/integrity/integrity-service.js +9 -6
- package/lib/langium/integrity/integrity-service.js.map +1 -1
- package/lib/langium/language-module.d.ts +2 -2
- package/lib/langium/language-module.js +2 -2
- package/lib/langium/language-module.js.map +1 -1
- package/lib/langium/model-service/client-session.d.ts +203 -24
- package/lib/langium/model-service/client-session.d.ts.map +1 -1
- package/lib/langium/model-service/client-session.js +233 -29
- package/lib/langium/model-service/client-session.js.map +1 -1
- package/lib/langium/model-service/model-service.d.ts +62 -217
- package/lib/langium/model-service/model-service.d.ts.map +1 -1
- package/lib/langium/model-service/model-service.js +54 -357
- package/lib/langium/model-service/model-service.js.map +1 -1
- package/lib/langium/module.d.ts +11 -1
- package/lib/langium/module.d.ts.map +1 -1
- package/lib/langium/module.js +5 -1
- package/lib/langium/module.js.map +1 -1
- package/lib/langium/update-rewrite/update-rewrite.d.ts +1 -1
- package/lib/langium/workspace/in-memory-file-system-provider.d.ts.map +1 -1
- package/lib/langium/workspace/in-memory-file-system-provider.js +10 -2
- package/lib/langium/workspace/in-memory-file-system-provider.js.map +1 -1
- package/lib/langium/workspace/write-lock-scope.d.ts +1 -1
- package/lib/langium/workspace/write-lock-scope.js +1 -1
- package/lib/lsp/hydranium-document-update-handler.d.ts +69 -67
- package/lib/lsp/hydranium-document-update-handler.d.ts.map +1 -1
- package/lib/lsp/hydranium-document-update-handler.js +111 -89
- package/lib/lsp/hydranium-document-update-handler.js.map +1 -1
- package/lib/lsp/shared-module.d.ts +4 -8
- package/lib/lsp/shared-module.d.ts.map +1 -1
- package/lib/lsp/shared-module.js.map +1 -1
- package/lib/lsp/start-language-server.d.ts +3 -4
- package/lib/lsp/start-language-server.d.ts.map +1 -1
- package/lib/lsp/start-language-server.js +3 -4
- package/lib/lsp/start-language-server.js.map +1 -1
- package/lib/testing/make-test-services.d.ts +16 -4
- package/lib/testing/make-test-services.d.ts.map +1 -1
- package/lib/testing/make-test-services.js +6 -2
- package/lib/testing/make-test-services.js.map +1 -1
- package/lib/testing/node/lsp-server-connection.d.ts +1 -1
- package/lib/testing/node/scratch-workspace.js +1 -1
- package/lib/testing/run-update-pipeline.d.ts +4 -4
- package/lib/testing/run-update-pipeline.d.ts.map +1 -1
- package/lib/testing/stub-ast-document-manager.d.ts +5 -5
- package/lib/testing/stub-ast-document-manager.d.ts.map +1 -1
- package/lib/testing/stub-ast-document-manager.js +6 -8
- package/lib/testing/stub-ast-document-manager.js.map +1 -1
- package/lib/testing/stub-hydranium-text-documents.d.ts +10 -5
- package/lib/testing/stub-hydranium-text-documents.d.ts.map +1 -1
- package/lib/testing/stub-hydranium-text-documents.js +16 -9
- package/lib/testing/stub-hydranium-text-documents.js.map +1 -1
- package/lib/testing/stub-model-service.d.ts +2 -2
- package/lib/testing/stub-model-service.js +2 -2
- package/package.json +5 -5
- package/src/documents/ast-document-manager.ts +27 -78
- package/src/documents/client-session-errors.ts +11 -43
- package/src/documents/client-session-registry.ts +54 -28
- package/src/documents/file-system-task-queue.ts +68 -0
- package/src/documents/hydranium-text-documents.ts +348 -44
- package/src/documents/index.ts +1 -0
- package/src/langium/document-builder/document-builder.ts +16 -2
- package/src/langium/integrity/integrity-service.ts +9 -6
- package/src/langium/language-module.ts +4 -4
- package/src/langium/model-service/client-session.ts +363 -39
- package/src/langium/model-service/model-service.ts +91 -420
- package/src/langium/module.ts +14 -2
- package/src/langium/update-rewrite/update-rewrite.ts +1 -1
- package/src/langium/workspace/in-memory-file-system-provider.ts +11 -2
- package/src/langium/workspace/write-lock-scope.ts +1 -1
- package/src/lsp/hydranium-document-update-handler.ts +138 -92
- package/src/lsp/shared-module.ts +4 -8
- package/src/lsp/start-language-server.ts +3 -4
- package/src/testing/make-test-services.ts +25 -6
- package/src/testing/node/lsp-server-connection.ts +1 -1
- package/src/testing/node/scratch-workspace.ts +1 -1
- package/src/testing/run-update-pipeline.ts +4 -4
- package/src/testing/stub-ast-document-manager.ts +10 -24
- package/src/testing/stub-hydranium-text-documents.ts +29 -16
- package/src/testing/stub-model-service.ts +2 -2
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
*
|
|
7
7
|
* SPDX-License-Identifier: MIT
|
|
8
8
|
********************************************************************************/
|
|
9
|
-
import { type
|
|
9
|
+
import { type CanonicalUri, type MaybeObservableValue, type MaybePromise, ObservableValue, type TransferElement, type Tracer } from '@hydranium/protocol';
|
|
10
10
|
import { type AstNode, DocumentState, type LangiumDocument, type URI } from '@hydranium/langium';
|
|
11
11
|
import { type AstDiagnostic } from '../validation/document-validator.js';
|
|
12
12
|
import { type DocumentUriPolicy } from '../workspace/document-uri-policy.js';
|
|
@@ -37,29 +37,6 @@ export declare const MODEL_UPDATE_EDIT: import("@hydranium/protocol").MessageDef
|
|
|
37
37
|
* and the defaults are the behaviour described on each one.
|
|
38
38
|
*/
|
|
39
39
|
export interface ModelServiceOptions extends LogNameOptions {
|
|
40
|
-
/**
|
|
41
|
-
* When set, {@link ModelService.update} logs a `warn` line if its
|
|
42
|
-
* end-to-end wait (serialise + content-change apply + rebuild +
|
|
43
|
-
* settled-phase wait) exceeds this many milliseconds. Default
|
|
44
|
-
* `undefined` (no warn line ever emitted; the underlying
|
|
45
|
-
* `Logger.time` debug timing log is unchanged either way).
|
|
46
|
-
*
|
|
47
|
-
* Pure observability — does NOT abort the update, does NOT change
|
|
48
|
-
* resolution semantics. Adopters wanting a hard timeout that throws
|
|
49
|
-
* instead override {@link ModelService.update} on their subclass and
|
|
50
|
-
* race the parent call against their own deadline.
|
|
51
|
-
*
|
|
52
|
-
* Recommended starting threshold: 2-5 seconds for interactive paths
|
|
53
|
-
* (form save, diagram edit). Workspaces with very large documents
|
|
54
|
-
* or slow validation may legitimately exceed 5s on the cold path —
|
|
55
|
-
* tune per workspace.
|
|
56
|
-
*
|
|
57
|
-
* Accepts a {@link MaybeObservableValue} so the threshold can be a
|
|
58
|
-
* fixed constant or bound to a user setting via `Settings.number`
|
|
59
|
-
* and retuned live. Leaving it unset disables the warn line entirely
|
|
60
|
-
* (and skips the per-update stopwatch).
|
|
61
|
-
*/
|
|
62
|
-
readonly slowUpdateWarnMs?: MaybeObservableValue<number>;
|
|
63
40
|
/**
|
|
64
41
|
* Serialise the facade's own build under the workspace WRITE lock, the way
|
|
65
42
|
* Langium's `DefaultDocumentUpdateHandler` dispatches its build. Default
|
|
@@ -82,9 +59,9 @@ export interface ModelServiceOptions extends LogNameOptions {
|
|
|
82
59
|
* option removes is the wasted pass, not just its visible symptom.
|
|
83
60
|
*
|
|
84
61
|
* **What `false` buys.** `WorkspaceLock` is not reentrant. A caller that
|
|
85
|
-
* reaches `update` / `save`
|
|
86
|
-
* an integrity rule or build-phase pass that writes
|
|
87
|
-
* deadlocks: acquiring the lock cancels the running holder, and the new
|
|
62
|
+
* reaches a session's `update` / `save` or `rebuild` while already holding
|
|
63
|
+
* the write lock — an integrity rule or build-phase pass that writes
|
|
64
|
+
* back — deadlocks: acquiring the lock cancels the running holder, and the new
|
|
88
65
|
* acquisition then waits for that holder to release while the holder waits
|
|
89
66
|
* for this call. On `true` that shape is DETECTED and rejected with
|
|
90
67
|
* {@link ReentrantWriteLockError} rather than hanging, wherever a host
|
|
@@ -106,10 +83,11 @@ export interface ModelServiceOptions extends LogNameOptions {
|
|
|
106
83
|
*
|
|
107
84
|
* In-process facade over the framework's document plumbing
|
|
108
85
|
* (`HydraniumTextDocuments`, `LangiumDocuments`,
|
|
109
|
-
* `DocumentBuilder`, `WritableFileSystemProvider`). Owns the
|
|
110
|
-
*
|
|
111
|
-
*
|
|
112
|
-
* doesn't have to be re-implemented per
|
|
86
|
+
* `DocumentBuilder`, `WritableFileSystemProvider`). Owns the document
|
|
87
|
+
* lifecycle the data-server and GLSP heads delegate to — client sessions that
|
|
88
|
+
* open, update, save and close documents, the phase reads, and `ready` — so
|
|
89
|
+
* coordinating those primitives doesn't have to be re-implemented per head.
|
|
90
|
+
* Every open and write goes through a session from {@link createSession}.
|
|
113
91
|
*
|
|
114
92
|
* "Model" here means the parsed AST — distinct from the wire-shape
|
|
115
93
|
* `TransferDocument` in `@hydranium/protocol`.
|
|
@@ -119,9 +97,9 @@ export interface ModelServiceOptions extends LogNameOptions {
|
|
|
119
97
|
* Multiple in-process consumers want the same workspace-level
|
|
120
98
|
* operations:
|
|
121
99
|
* - The data-server head turns these into typed RPC methods.
|
|
122
|
-
* - The GLSP head uses the same lifecycle for diagram-driven edits
|
|
123
|
-
*
|
|
124
|
-
*
|
|
100
|
+
* - The GLSP head uses the same lifecycle for diagram-driven edits: GModel
|
|
101
|
+
* operation handlers write through the diagram's session and wait on phases
|
|
102
|
+
* before reading.
|
|
125
103
|
* - Server-internal callers (integrity service, ad-hoc bridges, tests)
|
|
126
104
|
* want the same operations without the wire serialisation step.
|
|
127
105
|
*
|
|
@@ -134,15 +112,16 @@ export interface ModelServiceOptions extends LogNameOptions {
|
|
|
134
112
|
*
|
|
135
113
|
* **Read-latest supersession**
|
|
136
114
|
*
|
|
137
|
-
*
|
|
115
|
+
* A session's default `update` and `save` use Langium's per-URI
|
|
138
116
|
* `DocumentBuilder.waitUntil` to wait for the integrity-settled landmark
|
|
139
117
|
* ({@link IntegrityService.SettledState}), then read the post-build state. Concurrent
|
|
140
118
|
* in-process callers on the same URI all see the latest post-build
|
|
141
119
|
* snapshot — none deadlock waiting for a specific version's settled
|
|
142
120
|
* event. Adopters wanting strict version-matched semantics (resolve
|
|
143
121
|
* with vN's snapshot specifically, log "vN superseded by vM at vN+1")
|
|
144
|
-
* override
|
|
145
|
-
* version checks; the framework default doesn't need it for
|
|
122
|
+
* override `DefaultClientSession.updateDocument` to attach a phase-listener
|
|
123
|
+
* with explicit version checks; the framework default doesn't need it for
|
|
124
|
+
* safety.
|
|
146
125
|
*
|
|
147
126
|
* **Returns AST snapshots, not wire envelopes**
|
|
148
127
|
*
|
|
@@ -194,7 +173,7 @@ export interface ModelServiceOptions extends LogNameOptions {
|
|
|
194
173
|
* **Not the `TransferEncoder`'s parameter of the same name**, which is
|
|
195
174
|
* that encoder's OUTPUT and so names the wire shape. This one names its
|
|
196
175
|
* input, and an adopter binds the two to different types.
|
|
197
|
-
* - `TTransfer` — transfer-model root
|
|
176
|
+
* - `TTransfer` — transfer-model root a session's `update` / `save` accept
|
|
198
177
|
* args. Constrained to {@link TransferElement}. Defaults to the
|
|
199
178
|
* structural base.
|
|
200
179
|
*/
|
|
@@ -219,23 +198,29 @@ export interface ModelService<TAst extends AstNode, TDiagnostic extends AstDiagn
|
|
|
219
198
|
settled(uri: string, cancelToken?: CancellationToken): Promise<AstDocument<TAst, never>>;
|
|
220
199
|
indexed(uri: string, cancelToken?: CancellationToken): Promise<AstDocument<TAst, never>>;
|
|
221
200
|
validated(uri: string, cancelToken?: CancellationToken): Promise<AstDocument<TAst, TDiagnostic>>;
|
|
222
|
-
update(args: TransferUpdateArgs<TTransfer>, cancelToken?: CancellationToken): Promise<AstDocument<TAst, TDiagnostic>>;
|
|
223
|
-
save(args: TransferSaveArgs<TTransfer>, cancelToken?: CancellationToken): Promise<AstDocument<TAst, TDiagnostic>>;
|
|
224
|
-
open(args: OpenModelArgs): Promise<Disposable>;
|
|
225
|
-
close(args: CloseModelArgs): Promise<void>;
|
|
226
201
|
isOpen(uri: string): boolean;
|
|
227
202
|
snapshot(uri: string): AstDocument<TAst, TDiagnostic> | undefined;
|
|
203
|
+
/**
|
|
204
|
+
* The text a session's write of `model` to `uri` applies: a textual model
|
|
205
|
+
* as given, a structured one rewritten and serialised.
|
|
206
|
+
*/
|
|
207
|
+
modelToText(uri: string, model: TTransfer | string, cancelToken?: CancellationToken): Promise<string>;
|
|
228
208
|
getDocument(uri: string): LangiumDocument | undefined;
|
|
229
209
|
onModelUpdated(uri: string, listener: (event: AstDocumentUpdatedEvent<TAst, TDiagnostic>) => void): Disposable;
|
|
230
210
|
onModelSaved(uri: string, listener: (event: AstDocumentSavedEvent<TAst, TDiagnostic>) => void): Disposable;
|
|
231
211
|
onClientClosed(uri: string, clientId: string, listener: () => void): Disposable;
|
|
232
212
|
/**
|
|
233
|
-
* Start a client session
|
|
234
|
-
* a
|
|
235
|
-
*
|
|
213
|
+
* Start a client session, the only way to open and write documents through
|
|
214
|
+
* this service. Pass a `label` naming the participant; without one it is
|
|
215
|
+
* `session`. The id defaults to `label#` plus a random UUID; a fixed
|
|
216
|
+
* `clientId` is taken as given. Throws `DuplicateClientIdError` when the id
|
|
217
|
+
* is reserved by the framework, held by another live session, or has
|
|
236
218
|
* documents open under it as a client that is not a session.
|
|
237
219
|
*
|
|
238
|
-
* `TOpenOptions` types the options the session's `open` takes
|
|
220
|
+
* `TOpenOptions` types the options the session's `open` takes and its
|
|
221
|
+
* `openOptions` returns. The narrowing is an unchecked cast, and it holds
|
|
222
|
+
* only for the caller that started the session: a holder reached through
|
|
223
|
+
* {@link getSession} sees plain `OpenOptions`.
|
|
239
224
|
*/
|
|
240
225
|
createSession<TOpenOptions extends OpenOptions = OpenOptions>(label?: string, clientId?: string): ClientSession<TAst, TDiagnostic, TTransfer, TOpenOptions>;
|
|
241
226
|
/** The live session started under `clientId`, or `undefined` once it has ended or was never started. */
|
|
@@ -243,7 +228,7 @@ export interface ModelService<TAst extends AstNode, TDiagnostic extends AstDiagn
|
|
|
243
228
|
}
|
|
244
229
|
export declare class DefaultModelService<TAst extends AstNode, TDiagnostic extends AstDiagnostic = AstDiagnostic,
|
|
245
230
|
/**
|
|
246
|
-
* Structured payload
|
|
231
|
+
* Structured payload a session's `update` / `save` accept. Constrained to
|
|
247
232
|
* {@link TransferElement} — the minimal `{ readonly $type: string }`
|
|
248
233
|
* shape. Both transfer-model overlay roots (which extend
|
|
249
234
|
* `TransferElement` explicitly) and AST root types (which have
|
|
@@ -263,12 +248,6 @@ TTransfer extends TransferElement = TransferElement> implements ModelService<TAs
|
|
|
263
248
|
* (see {@link DocumentUriPolicy}).
|
|
264
249
|
*/
|
|
265
250
|
protected readonly uriPolicy: DocumentUriPolicy;
|
|
266
|
-
/**
|
|
267
|
-
* Live slow-update-warn threshold cell, or `undefined` when the option
|
|
268
|
-
* was not supplied (warn line + stopwatch disabled). Reads `.value` per
|
|
269
|
-
* update so a setting-bound threshold retunes without reconstruction.
|
|
270
|
-
*/
|
|
271
|
-
protected readonly slowUpdateWarn?: ObservableValue<number>;
|
|
272
251
|
/** See {@link ModelServiceOptions.serializeBuilds}. Defaults to `true`. */
|
|
273
252
|
protected readonly serializeBuilds: ObservableValue<boolean>;
|
|
274
253
|
/**
|
|
@@ -279,11 +258,7 @@ TTransfer extends TransferElement = TransferElement> implements ModelService<TAs
|
|
|
279
258
|
*/
|
|
280
259
|
protected readonly syncChains: Map<string, Promise<void>>;
|
|
281
260
|
protected readonly pendingSync: Map<string, string>;
|
|
282
|
-
/**
|
|
283
|
-
* The live sessions this service started, by client id. {@link update}
|
|
284
|
-
* reads it to tell a session's write, which must find its document open,
|
|
285
|
-
* from a write under a plain client id, which opens it.
|
|
286
|
-
*/
|
|
261
|
+
/** The live sessions this service started, by client id, for {@link getSession}. */
|
|
287
262
|
protected readonly sessions: Map<string, ClientSession<TAst, TDiagnostic, TTransfer, object>>;
|
|
288
263
|
/**
|
|
289
264
|
* Drops an ended session from {@link sessions}. Subscribed by the first
|
|
@@ -392,6 +367,12 @@ TTransfer extends TransferElement = TransferElement> implements ModelService<TAs
|
|
|
392
367
|
* {@link ModelServiceOptions.serializeBuilds} — see there for the
|
|
393
368
|
* non-reentrancy hazard that is the reason the opt-out exists.
|
|
394
369
|
*
|
|
370
|
+
* An override calls the base before it awaits. Under an LSP connection the
|
|
371
|
+
* store's change event has already asked the update handler to build a
|
|
372
|
+
* session's write; an override whose await outlasts that build makes the
|
|
373
|
+
* base's request start a build of its own, so the write is built and
|
|
374
|
+
* delivered twice.
|
|
375
|
+
*
|
|
395
376
|
* Returns an empty `{ root, diagnostics }` envelope when the document
|
|
396
377
|
* cannot be loaded; adopters that want to throw override this method
|
|
397
378
|
* on their subclass.
|
|
@@ -474,55 +455,6 @@ TTransfer extends TransferElement = TransferElement> implements ModelService<TAs
|
|
|
474
455
|
* one customization seam this chain deliberately preserves.
|
|
475
456
|
*/
|
|
476
457
|
protected ensureDocumentStateCanonical(uri: CanonicalUri, state?: DocumentState, cancelToken?: CancellationToken): Promise<AstDocument<TAst, TDiagnostic>>;
|
|
477
|
-
/**
|
|
478
|
-
* Apply an update for `uri`. The structured-or-textual `model` payload
|
|
479
|
-
* is serialised (via {@link serialize} after {@link rewriteModel} when
|
|
480
|
-
* structured), pushed into the multi-client text-document store with
|
|
481
|
-
* a fresh version, drives a build to the target phase, and returns
|
|
482
|
-
* the post-build AST snapshot.
|
|
483
|
-
*
|
|
484
|
-
* **Read-latest supersession**: concurrent callers on the same URI
|
|
485
|
-
* all see the same post-build state once `waitUntil` resolves; none
|
|
486
|
-
* deadlock waiting for a specific version's settled event. The
|
|
487
|
-
* framework emits a post-resolution `debug` log line distinguishing
|
|
488
|
-
* "vN ready" from "vN ready at vM (superseded)" so callers can
|
|
489
|
-
* observe when their write was overtaken by a newer one before
|
|
490
|
-
* settling — purely observability, doesn't change resolution
|
|
491
|
-
* semantics. Adopters wanting version-matched resolution (resolve
|
|
492
|
-
* with vN's specific settled snapshot, intermediate-phase
|
|
493
|
-
* observability, slow-warn / hard-timeout behaviour) override this
|
|
494
|
-
* method.
|
|
495
|
-
*
|
|
496
|
-
* **Upsert, except for a session.** Under a plain client id the write opens
|
|
497
|
-
* the document for that client first, creating it from the payload when no
|
|
498
|
-
* file exists. Under the id of a live session from {@link createSession} it
|
|
499
|
-
* opens nothing, and fails with `DocumentNotOpenError` unless the session
|
|
500
|
-
* has the URI open at the moment the text is applied.
|
|
501
|
-
*/
|
|
502
|
-
update(args: TransferUpdateArgs<TTransfer>, cancelToken?: CancellationToken): Promise<AstDocument<TAst, TDiagnostic>>;
|
|
503
|
-
/**
|
|
504
|
-
* Throw {@link ConflictError} when `basedOn` names a version other than
|
|
505
|
-
* `currentVersion`. {@link update} calls it at the door and again in the
|
|
506
|
-
* synchronous step that applies the text, and has to call it synchronously
|
|
507
|
-
* there: a check separated from the apply by an await lets two writes based
|
|
508
|
-
* on one version both apply.
|
|
509
|
-
*/
|
|
510
|
-
protected checkBasedOn(uri: string, basedOn: BasedOn, currentVersion: number): void;
|
|
511
|
-
/**
|
|
512
|
-
* Persist `uri` to disk. Same content-change + settled-phase flow as
|
|
513
|
-
* {@link update}, then writes via the
|
|
514
|
-
* `WritableFileSystemProvider` and notifies the multi-client
|
|
515
|
-
* text-document store of the save (so any open LSP-side editor sees
|
|
516
|
-
* the `onDidSave` event regardless of who originated the persist).
|
|
517
|
-
*
|
|
518
|
-
* Returns the post-save AST snapshot.
|
|
519
|
-
*
|
|
520
|
-
* Under the id of a live session the save also fails with
|
|
521
|
-
* `DocumentNotOpenError` when the session closes the URI while the text is
|
|
522
|
-
* being built, and writes nothing. Once the manager has taken the text, the
|
|
523
|
-
* write completes whatever the session does next.
|
|
524
|
-
*/
|
|
525
|
-
save(args: TransferSaveArgs<TTransfer>, cancelToken?: CancellationToken): Promise<AstDocument<TAst, TDiagnostic>>;
|
|
526
458
|
/**
|
|
527
459
|
* Wait for the document at `uri` to reach the integrity-settled landmark and
|
|
528
460
|
* drain any in-flight write-path applyEdit sync chain (see {@link syncChains})
|
|
@@ -537,32 +469,6 @@ TTransfer extends TransferElement = TransferElement> implements ModelService<TAs
|
|
|
537
469
|
* dialog on rapid save) call this after their `save`.
|
|
538
470
|
*/
|
|
539
471
|
protected settleSave(uri: string, cancelToken?: CancellationToken): Promise<void>;
|
|
540
|
-
/**
|
|
541
|
-
* Open the document at `args.uri` on behalf of `args.clientId`.
|
|
542
|
-
* Multi-client: each (uri, clientId) pair is tracked as one
|
|
543
|
-
* registration; the underlying document stays open until the last
|
|
544
|
-
* client closes it. If `args.text` is omitted the document content
|
|
545
|
-
* is read from the `FileSystemProvider`.
|
|
546
|
-
*
|
|
547
|
-
* Returns a {@link Disposable} that closes the registration when
|
|
548
|
-
* disposed — useful for `using` blocks and shutdown cleanup.
|
|
549
|
-
*
|
|
550
|
-
* Delegates to the framework-bound
|
|
551
|
-
* `services.workspace.AstDocumentManager`. Adopter subclasses with
|
|
552
|
-
* extra open-time behaviour (logging, sync-chain bootstrapping)
|
|
553
|
-
* override on their `ModelService` subclass and call `super.open`.
|
|
554
|
-
*
|
|
555
|
-
* The open path does not thread cancellation: `AstDocumentManager.open`
|
|
556
|
-
* and the filesystem read behind it take no token, so a cancelled caller
|
|
557
|
-
* still completes the open.
|
|
558
|
-
*/
|
|
559
|
-
open(args: OpenModelArgs): Promise<Disposable>;
|
|
560
|
-
/**
|
|
561
|
-
* Close the document at `args.uri` for `args.clientId`. Counterpart
|
|
562
|
-
* to {@link open}; the underlying document stays open until every
|
|
563
|
-
* registered client has closed.
|
|
564
|
-
*/
|
|
565
|
-
close(args: CloseModelArgs): Promise<void>;
|
|
566
472
|
/**
|
|
567
473
|
* True when the document at `uri` is currently open for at least one
|
|
568
474
|
* client. Pure read; no side effects.
|
|
@@ -605,35 +511,29 @@ TTransfer extends TransferElement = TransferElement> implements ModelService<TAs
|
|
|
605
511
|
createSession<TOpenOptions extends OpenOptions = OpenOptions>(label?: string, clientId?: string): ClientSession<TAst, TDiagnostic, TTransfer, TOpenOptions>;
|
|
606
512
|
getSession(clientId: string): ClientSession<TAst, TDiagnostic, TTransfer> | undefined;
|
|
607
513
|
/**
|
|
608
|
-
*
|
|
609
|
-
* registered. The override point for a custom session class; narrow the
|
|
610
|
-
* return type to it.
|
|
514
|
+
* Convert a structured-or-textual `model` payload to its textual form.
|
|
611
515
|
*
|
|
612
|
-
*
|
|
613
|
-
*
|
|
516
|
+
* Textual payloads (LSP / pre-serialised callers) pass through untouched.
|
|
517
|
+
* Structured payloads run the per-language `UpdateRewriteService` chain
|
|
518
|
+
* (transfer-model transforms; diff-aware rewrites see the previous AST root),
|
|
519
|
+
* then serialise. The chain is the single transfer-model-transform seam — a
|
|
520
|
+
* unary normalisation is just a rewrite that ignores `previous`, as
|
|
521
|
+
* `NormalizeEmptyStringsContribution` does. The chain is empty by
|
|
522
|
+
* default, so this is a no-op for adopters that register none.
|
|
614
523
|
*/
|
|
615
|
-
|
|
524
|
+
modelToText(uri: string, model: TTransfer | string, cancelToken?: CancellationToken): Promise<string>;
|
|
616
525
|
/**
|
|
617
526
|
* Mirror a server-side change of `document` back to the LSP textual language
|
|
618
527
|
* client, run per document as it reaches the post-integrity settled phase.
|
|
619
528
|
* The single framework caller of
|
|
620
|
-
* `HydraniumTextDocuments.applyEditToLanguageClient
|
|
621
|
-
*
|
|
622
|
-
*
|
|
623
|
-
*
|
|
624
|
-
*
|
|
625
|
-
*
|
|
626
|
-
*
|
|
627
|
-
*
|
|
628
|
-
* **content**.
|
|
629
|
-
* - **Open only in another client** (the data or GLSP head) → nothing. A
|
|
630
|
-
* language client opening it joins the existing entry and is refreshed from
|
|
631
|
-
* the store, and only a FIRST open reads a stage, so staging here would
|
|
632
|
-
* leave text nothing reads.
|
|
633
|
-
* - **Closed in every client** → {@link stageClosedDocument}, gated by
|
|
634
|
-
* **provenance** ({@link isNonLanguageClientEdit}). With the default text
|
|
635
|
-
* store this never stages; see {@link stageClosedDocument} for why, and
|
|
636
|
-
* for the store it serves.
|
|
529
|
+
* `HydraniumTextDocuments.applyEditToLanguageClient`.
|
|
530
|
+
*
|
|
531
|
+
* Only a document open in the language client is mirrored, through
|
|
532
|
+
* {@link syncOpenDocument}, routed purely by **content**. A document open
|
|
533
|
+
* only in another client needs nothing: a language client opening it joins
|
|
534
|
+
* the existing entry and is refreshed from the store. A session writes only
|
|
535
|
+
* what it has open, so no session edit of a closed document waits here for
|
|
536
|
+
* the language client's next open.
|
|
637
537
|
*
|
|
638
538
|
* The decision is **re-derived from the current settled state every time** (it
|
|
639
539
|
* is not a one-shot enrolment), which is what makes it self-healing: a doc
|
|
@@ -654,42 +554,6 @@ TTransfer extends TransferElement = TransferElement> implements ModelService<TAs
|
|
|
654
554
|
* author-based skip is needed.
|
|
655
555
|
*/
|
|
656
556
|
protected syncOpenDocument(uri: string, text: string): void;
|
|
657
|
-
/**
|
|
658
|
-
* Stage the settled text of a document no client holds so the eventual
|
|
659
|
-
* first `didOpen` sees this in-memory text instead of stale disk —
|
|
660
|
-
* but only for a {@link isNonLanguageClientEdit genuine non-language-client edit}.
|
|
661
|
-
* A document rebuilt by an internal build is skipped, leaving disk authoritative
|
|
662
|
-
* on the next open.
|
|
663
|
-
*
|
|
664
|
-
* The default `HydraniumTextDocuments` never gets this far. Its own paths
|
|
665
|
-
* record a version's author only while a client holds the document, and the
|
|
666
|
-
* last close drops that history with the tracking record, so a document no
|
|
667
|
-
* client holds reports no author and the provenance gate refuses. The stage
|
|
668
|
-
* is reachable for a text store that keeps authorship past the last close,
|
|
669
|
-
* or a subclass overriding {@link isNonLanguageClientEdit}.
|
|
670
|
-
*/
|
|
671
|
-
protected stageClosedDocument(document: LangiumDocument): void;
|
|
672
|
-
/**
|
|
673
|
-
* Whether `document`'s settled state is a genuine edit by a client *other than
|
|
674
|
-
* the language client* — a write a form / GLSP / integrity client actually made.
|
|
675
|
-
* Excludes two non-edits: the **language client** itself (the LSP/Monaco text
|
|
676
|
-
* client — it already holds its own edits, and the staging here exists to feed
|
|
677
|
-
* it) and an **internal build** (workspace startup, a cascade relink, a
|
|
678
|
-
* `didClose`-reload). This is the gate for {@link stageClosedDocument}: staging
|
|
679
|
-
* an internal build would
|
|
680
|
-
* (a) pre-stage every file on boot and (b) re-stage discarded content after
|
|
681
|
-
* close (e.g. a disposing GLSP session's debounced submit firing after close),
|
|
682
|
-
* which then shadows clean disk on the next open.
|
|
683
|
-
*
|
|
684
|
-
* The signal is "a known client other than the language client authored this
|
|
685
|
-
* version **and** the URI was in the last build's changed set
|
|
686
|
-
* (`isTriggeringEdit`)". A framework-internal rebuild reports no author
|
|
687
|
-
* (`getAuthor` → `undefined`), so it fails `hasKnownAuthor` without comparing
|
|
688
|
-
* against a sentinel. This is NOT redundant with content/registration — it
|
|
689
|
-
* distinguishes "client edited" from "framework rebuilt", which neither the
|
|
690
|
-
* shadow nor `isTriggeringEdit` alone can.
|
|
691
|
-
*/
|
|
692
|
-
protected isNonLanguageClientEdit(document: LangiumDocument): boolean;
|
|
693
557
|
/**
|
|
694
558
|
* Enqueue a sync to the language client. The pending slot per URI holds only
|
|
695
559
|
* the latest text: if a newer settle fires while the current RPC is in
|
|
@@ -746,41 +610,22 @@ TTransfer extends TransferElement = TransferElement> implements ModelService<TAs
|
|
|
746
610
|
* Adopters whose serializer call shape differs (custom service
|
|
747
611
|
* names, generator-driven YAML pretty printers, etc.) override this
|
|
748
612
|
* method. Routes through `Serializer.serializeTransfer` because
|
|
749
|
-
* `
|
|
613
|
+
* a session's `update` / `save` always receive a
|
|
750
614
|
* transfer-model shape (cross-references as plain strings) from
|
|
751
615
|
* adopter callers — the AST-shape entry point is `serializeAst`.
|
|
752
616
|
*
|
|
753
617
|
* Returns {@link MaybePromise} so adopter `Serializer` overrides can be
|
|
754
618
|
* async (remote schema lookup, external canonical-value resolution); the
|
|
755
|
-
* single caller ({@link modelToText}
|
|
619
|
+
* single caller ({@link modelToText}) is already `async`,
|
|
756
620
|
* so a naive `await` covers both branches without extra ceremony.
|
|
757
621
|
*/
|
|
758
622
|
protected serialize(uri: string, root: TTransfer): MaybePromise<string>;
|
|
759
623
|
/**
|
|
760
|
-
*
|
|
761
|
-
*
|
|
762
|
-
*
|
|
763
|
-
* Structured payloads run the per-language `UpdateRewriteService` chain
|
|
764
|
-
* (transfer-model transforms; diff-aware rewrites see the previous AST root),
|
|
765
|
-
* then serialise. The chain is the single transfer-model-transform seam — a
|
|
766
|
-
* unary normalisation is just a rewrite that ignores `previous`, as
|
|
767
|
-
* `NormalizeEmptyStringsContribution` does. The chain is empty by
|
|
768
|
-
* default, so this is a no-op for adopters that register none.
|
|
769
|
-
*/
|
|
770
|
-
protected modelToText(uri: string, model: TTransfer | string, cancelToken?: CancellationToken): Promise<string>;
|
|
771
|
-
/**
|
|
772
|
-
* The text a write into an unloaded document should take its trivia from —
|
|
773
|
-
* the open editor's if one holds it, the file's otherwise, and `undefined`
|
|
774
|
-
* when neither can supply it.
|
|
775
|
-
*
|
|
776
|
-
* **A read that fails answers `undefined` rather than throwing.** `getDocument`
|
|
777
|
-
* is a store read, so an ordinary create answers nothing here and must still
|
|
778
|
-
* write; letting a permission error or a path that turned into a directory
|
|
779
|
-
* escape would fail the user's write instead, having found nothing to preserve
|
|
780
|
-
* in a file the write is about to replace anyway. Losing the comments is
|
|
781
|
-
* recoverable, and traced; losing the write is neither.
|
|
624
|
+
* The text a write into a document not yet built should take its trivia
|
|
625
|
+
* from: the store's, which a write always has, since it writes only a
|
|
626
|
+
* document its client has open.
|
|
782
627
|
*/
|
|
783
|
-
protected textToTakeTriviaFrom(uri: string,
|
|
628
|
+
protected textToTakeTriviaFrom(uri: string, _target: URI): Promise<string | undefined>;
|
|
784
629
|
/**
|
|
785
630
|
* Run the per-language transfer-model rewrite chain. Resolves the
|
|
786
631
|
* `UpdateRewriteService` per-URI (like {@link serialize}) and threads
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model-service.d.ts","sourceRoot":"","sources":["../../../src/langium/model-service/model-service.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF,OAAO,EACJ,KAAK,
|
|
1
|
+
{"version":3,"file":"model-service.d.ts","sourceRoot":"","sources":["../../../src/langium/model-service/model-service.ts"],"names":[],"mappings":"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"}
|