@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.
Files changed (108) hide show
  1. package/lib/documents/ast-document-manager.d.ts +8 -44
  2. package/lib/documents/ast-document-manager.d.ts.map +1 -1
  3. package/lib/documents/ast-document-manager.js +22 -41
  4. package/lib/documents/ast-document-manager.js.map +1 -1
  5. package/lib/documents/client-session-errors.d.ts +4 -33
  6. package/lib/documents/client-session-errors.d.ts.map +1 -1
  7. package/lib/documents/client-session-errors.js +4 -46
  8. package/lib/documents/client-session-errors.js.map +1 -1
  9. package/lib/documents/client-session-registry.d.ts +40 -20
  10. package/lib/documents/client-session-registry.d.ts.map +1 -1
  11. package/lib/documents/client-session-registry.js +33 -20
  12. package/lib/documents/client-session-registry.js.map +1 -1
  13. package/lib/documents/file-system-task-queue.d.ts +49 -0
  14. package/lib/documents/file-system-task-queue.d.ts.map +1 -0
  15. package/lib/documents/file-system-task-queue.js +34 -0
  16. package/lib/documents/file-system-task-queue.js.map +1 -0
  17. package/lib/documents/hydranium-text-documents.d.ts +138 -13
  18. package/lib/documents/hydranium-text-documents.d.ts.map +1 -1
  19. package/lib/documents/hydranium-text-documents.js +283 -40
  20. package/lib/documents/hydranium-text-documents.js.map +1 -1
  21. package/lib/documents/index.d.ts +1 -0
  22. package/lib/documents/index.d.ts.map +1 -1
  23. package/lib/documents/index.js +1 -0
  24. package/lib/documents/index.js.map +1 -1
  25. package/lib/langium/document-builder/document-builder.d.ts +15 -2
  26. package/lib/langium/document-builder/document-builder.d.ts.map +1 -1
  27. package/lib/langium/document-builder/document-builder.js +15 -2
  28. package/lib/langium/document-builder/document-builder.js.map +1 -1
  29. package/lib/langium/integrity/integrity-service.d.ts +3 -2
  30. package/lib/langium/integrity/integrity-service.d.ts.map +1 -1
  31. package/lib/langium/integrity/integrity-service.js +9 -6
  32. package/lib/langium/integrity/integrity-service.js.map +1 -1
  33. package/lib/langium/language-module.d.ts +2 -2
  34. package/lib/langium/language-module.js +2 -2
  35. package/lib/langium/language-module.js.map +1 -1
  36. package/lib/langium/model-service/client-session.d.ts +203 -24
  37. package/lib/langium/model-service/client-session.d.ts.map +1 -1
  38. package/lib/langium/model-service/client-session.js +233 -29
  39. package/lib/langium/model-service/client-session.js.map +1 -1
  40. package/lib/langium/model-service/model-service.d.ts +62 -217
  41. package/lib/langium/model-service/model-service.d.ts.map +1 -1
  42. package/lib/langium/model-service/model-service.js +54 -357
  43. package/lib/langium/model-service/model-service.js.map +1 -1
  44. package/lib/langium/module.d.ts +11 -1
  45. package/lib/langium/module.d.ts.map +1 -1
  46. package/lib/langium/module.js +5 -1
  47. package/lib/langium/module.js.map +1 -1
  48. package/lib/langium/update-rewrite/update-rewrite.d.ts +1 -1
  49. package/lib/langium/workspace/in-memory-file-system-provider.d.ts.map +1 -1
  50. package/lib/langium/workspace/in-memory-file-system-provider.js +10 -2
  51. package/lib/langium/workspace/in-memory-file-system-provider.js.map +1 -1
  52. package/lib/langium/workspace/write-lock-scope.d.ts +1 -1
  53. package/lib/langium/workspace/write-lock-scope.js +1 -1
  54. package/lib/lsp/hydranium-document-update-handler.d.ts +69 -67
  55. package/lib/lsp/hydranium-document-update-handler.d.ts.map +1 -1
  56. package/lib/lsp/hydranium-document-update-handler.js +111 -89
  57. package/lib/lsp/hydranium-document-update-handler.js.map +1 -1
  58. package/lib/lsp/shared-module.d.ts +4 -8
  59. package/lib/lsp/shared-module.d.ts.map +1 -1
  60. package/lib/lsp/shared-module.js.map +1 -1
  61. package/lib/lsp/start-language-server.d.ts +3 -4
  62. package/lib/lsp/start-language-server.d.ts.map +1 -1
  63. package/lib/lsp/start-language-server.js +3 -4
  64. package/lib/lsp/start-language-server.js.map +1 -1
  65. package/lib/testing/make-test-services.d.ts +16 -4
  66. package/lib/testing/make-test-services.d.ts.map +1 -1
  67. package/lib/testing/make-test-services.js +6 -2
  68. package/lib/testing/make-test-services.js.map +1 -1
  69. package/lib/testing/node/lsp-server-connection.d.ts +1 -1
  70. package/lib/testing/node/scratch-workspace.js +1 -1
  71. package/lib/testing/run-update-pipeline.d.ts +4 -4
  72. package/lib/testing/run-update-pipeline.d.ts.map +1 -1
  73. package/lib/testing/stub-ast-document-manager.d.ts +5 -5
  74. package/lib/testing/stub-ast-document-manager.d.ts.map +1 -1
  75. package/lib/testing/stub-ast-document-manager.js +6 -8
  76. package/lib/testing/stub-ast-document-manager.js.map +1 -1
  77. package/lib/testing/stub-hydranium-text-documents.d.ts +10 -5
  78. package/lib/testing/stub-hydranium-text-documents.d.ts.map +1 -1
  79. package/lib/testing/stub-hydranium-text-documents.js +16 -9
  80. package/lib/testing/stub-hydranium-text-documents.js.map +1 -1
  81. package/lib/testing/stub-model-service.d.ts +2 -2
  82. package/lib/testing/stub-model-service.js +2 -2
  83. package/package.json +5 -5
  84. package/src/documents/ast-document-manager.ts +27 -78
  85. package/src/documents/client-session-errors.ts +11 -43
  86. package/src/documents/client-session-registry.ts +54 -28
  87. package/src/documents/file-system-task-queue.ts +68 -0
  88. package/src/documents/hydranium-text-documents.ts +348 -44
  89. package/src/documents/index.ts +1 -0
  90. package/src/langium/document-builder/document-builder.ts +16 -2
  91. package/src/langium/integrity/integrity-service.ts +9 -6
  92. package/src/langium/language-module.ts +4 -4
  93. package/src/langium/model-service/client-session.ts +363 -39
  94. package/src/langium/model-service/model-service.ts +91 -420
  95. package/src/langium/module.ts +14 -2
  96. package/src/langium/update-rewrite/update-rewrite.ts +1 -1
  97. package/src/langium/workspace/in-memory-file-system-provider.ts +11 -2
  98. package/src/langium/workspace/write-lock-scope.ts +1 -1
  99. package/src/lsp/hydranium-document-update-handler.ts +138 -92
  100. package/src/lsp/shared-module.ts +4 -8
  101. package/src/lsp/start-language-server.ts +3 -4
  102. package/src/testing/make-test-services.ts +25 -6
  103. package/src/testing/node/lsp-server-connection.ts +1 -1
  104. package/src/testing/node/scratch-workspace.ts +1 -1
  105. package/src/testing/run-update-pipeline.ts +4 -4
  106. package/src/testing/stub-ast-document-manager.ts +10 -24
  107. package/src/testing/stub-hydranium-text-documents.ts +29 -16
  108. 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 BasedOn, type CanonicalUri, type CloseModelArgs, type MaybeObservableValue, type MaybePromise, ObservableValue, type TransferElement, type OpenModelArgs, type Tracer, type TransferSaveArgs, type TransferUpdateArgs } from '@hydranium/protocol';
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` / `rebuild` while already holding the write lock —
86
- * an integrity rule or build-phase pass that writes through this facade —
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
- * `open / request / update / save / ready` lifecycle that protocol heads
111
- * (LSP, data-server, GLSP) delegate to so coordinating those primitives
112
- * doesn't have to be re-implemented per-head.
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
- * GModel operation handlers route through `update` for AST mutation,
124
- * `waitForDocumentState` for indexed-phase waits before reads, etc.
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
- * The default `update` and `save` flows use Langium's per-URI
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 {@link update} to attach a phase-listener with explicit
145
- * version checks; the framework default doesn't need it for safety.
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 accepted by `update` / `save`
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. The id defaults to `label#` plus a random UUID;
234
- * a fixed `clientId` is taken as given. Throws `DuplicateClientIdError` when
235
- * the id is reserved by the framework, held by another live session, or has
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 accepted by `update` / `save`. Constrained to
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
- * Build the handle for a session {@link createSession} has already
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
- * Registration and the uniqueness check have already happened when this
613
- * runs, so an override cannot skip them.
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
- protected newSession<TOpenOptions extends OpenOptions = OpenOptions>(clientId: string, label: string): ClientSession<TAst, TDiagnostic, TTransfer, TOpenOptions>;
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` and
621
- * `HydraniumTextDocuments.stagePendingContent`.
622
- *
623
- * Routes by client registration, because an open and a closed document
624
- * answer different questions:
625
- *
626
- * - **Open in the language client** → {@link syncOpenDocument}: mirror the
627
- * settled text via a coalesced `applyEditToLanguageClient`, routed purely by
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
- * `ModelService.update` / `ModelService.save` always receive a
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} → {@link update}) is already `async`,
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
- * Convert a structured-or-textual `model` payload to its textual form.
761
- *
762
- * Textual payloads (LSP / pre-serialised callers) pass through untouched.
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, target: URI): Promise<string | undefined>;
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":"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"}
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,YAAY,EAEjB,KAAK,oBAAoB,EACzB,KAAK,YAAY,EACjB,eAAe,EACf,KAAK,eAAe,EACpB,KAAK,MAAM,EACb,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,KAAK,OAAO,EAAE,aAAa,EAAE,KAAK,eAAe,EAAY,KAAK,GAAG,EAAE,MAAM,oBAAoB,CAAC;AAC3G,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,qCAAqC,CAAC;AACzE,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AAE7E,OAAO,EAAE,KAAK,iBAAiB,EAAE,KAAK,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAChF,OAAO,EAAE,WAAW,EAAE,KAAK,qBAAqB,EAAE,KAAK,uBAAuB,EAAE,MAAM,yCAAyC,CAAC;AAEhI,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAI/D,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,4CAA4C,CAAC;AAC9E,OAAO,EAAE,KAAK,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEzD;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,iBAAiB,iEAAoE,CAAC;AAcnG;;;GAGG;AACH,MAAM,WAAW,mBAAoB,SAAQ,cAAc;IACxD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAoCG;IACH,QAAQ,CAAC,eAAe,CAAC,EAAE,oBAAoB,CAAC,OAAO,CAAC,CAAC;CAC3D;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoGG;AACH,MAAM,WAAW,YAAY,CAC1B,IAAI,SAAS,OAAO,EACpB,WAAW,SAAS,aAAa,GAAG,aAAa,EACjD,SAAS,SAAS,eAAe,GAAG,eAAe;IAEnD;;;;;;;;OAQG;IACH,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IAG9B,oBAAoB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,EAAE,WAAW,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,WAAW,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC;IAClI,sBAAsB,CAAC,GAAG,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;IACxG,mBAAmB,CAAC,KAAK,EAAE,aAAa,EAAE,WAAW,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAG1F,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,aAAa,EAAE,WAAW,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,WAAW,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC;IAClI,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,aAAa,EAAE,WAAW,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,WAAW,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC;IACtH,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;IACxF,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;IACxF,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;IACzF,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;IACzF,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,WAAW,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC;IAEjG,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IAC7B,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,CAAC,IAAI,EAAE,WAAW,CAAC,GAAG,SAAS,CAAC;IAClE;;;OAGG;IACH,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,GAAG,MAAM,EAAE,WAAW,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACtG,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS,CAAC;IAEtD,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,uBAAuB,CAAC,IAAI,EAAE,WAAW,CAAC,KAAK,IAAI,GAAG,UAAU,CAAC;IAC/G,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,qBAAqB,CAAC,IAAI,EAAE,WAAW,CAAC,KAAK,IAAI,GAAG,UAAU,CAAC;IAC3G,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,UAAU,CAAC;IAEhF;;;;;;;;;;;;OAYG;IACH,aAAa,CAAC,YAAY,SAAS,WAAW,GAAG,WAAW,EACzD,KAAK,CAAC,EAAE,MAAM,EACd,QAAQ,CAAC,EAAE,MAAM,GACjB,aAAa,CAAC,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC;IAC7D,wGAAwG;IACxG,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,aAAa,CAAC,IAAI,EAAE,WAAW,EAAE,SAAS,CAAC,GAAG,SAAS,CAAC;CACxF;AAED,qBAAa,mBAAmB,CAC7B,IAAI,SAAS,OAAO,EACpB,WAAW,SAAS,aAAa,GAAG,aAAa;AACjD;;;;;;;;GAQG;AACH,SAAS,SAAS,eAAe,GAAG,eAAe,CACpD,YAAW,YAAY,CAAC,IAAI,EAAE,WAAW,EAAE,SAAS,CAAC;IAoEjD,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,oBAAoB;IAnEpD,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAClC;;;;;;;OAOG;IACH,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,iBAAiB,CAAC;IAChD,2EAA2E;IAC3E,SAAS,CAAC,QAAQ,CAAC,eAAe,EAAE,eAAe,CAAC,OAAO,CAAC,CAAC;IAE7D;;;;;OAKG;IACH,SAAS,CAAC,QAAQ,CAAC,UAAU,6BAAoC;IACjE,SAAS,CAAC,QAAQ,CAAC,WAAW,sBAA6B;IAE3D,oFAAoF;IACpF,SAAS,CAAC,QAAQ,CAAC,QAAQ,mEAAkE;IAC7F;;;;;OAKG;IACH,SAAS,CAAC,oBAAoB,CAAC,EAAE,UAAU,CAAC;IAE5C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA+BG;IACH,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;gBAGR,QAAQ,EAAE,oBAAoB,EACjD,OAAO,GAAE,mBAAwB;IA+CpC;;;;;;;;;OASG;IACG,oBAAoB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,EAAE,WAAW,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,WAAW,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IAIvI;;;;;;OAMG;IACG,sBAAsB,CAAC,GAAG,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAQ7G;;;;;;;;;OASG;cACa,6BAA6B,CAC1C,GAAG,EAAE,YAAY,EACjB,KAAK,EAAE,aAAa,EACpB,WAAW,CAAC,EAAE,iBAAiB,GAC/B,OAAO,CAAC,WAAW,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IAY1C;;;;;;;;OAQG;IACG,mBAAmB,CAAC,KAAK,EAAE,aAAa,EAAE,WAAW,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ/F;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAuCG;IACG,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,aAAa,EAAE,WAAW,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,WAAW,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IAI3H;;;;;;;;OAQG;cACa,gBAAgB,CAC7B,GAAG,EAAE,YAAY,EACjB,KAAK,CAAC,EAAE,aAAa,EACrB,WAAW,CAAC,EAAE,iBAAiB,GAC/B,OAAO,CAAC,WAAW,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IA8C1C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA6BG;IACG,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAIvF,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAIvF,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAIxF,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAIxF,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,WAAW,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IAItG;;;;;;;;;;;;;;;OAeG;IACG,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,aAAa,EAAE,WAAW,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,WAAW,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IAIvI;;;;;;;;;OASG;cACa,4BAA4B,CACzC,GAAG,EAAE,YAAY,EACjB,KAAK,CAAC,EAAE,aAAa,EACrB,WAAW,CAAC,EAAE,iBAAiB,GAC/B,OAAO,CAAC,WAAW,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IAQ1C;;;;;;;;;;;;OAYG;cACa,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAsBvF;;;OAGG;IACH,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAI5B;;;;;;;;;;;;;;;OAeG;IACH,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,CAAC,IAAI,EAAE,WAAW,CAAC,GAAG,SAAS;IASjE;;;;;;;;;;;;;;;OAeG;IACH,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS;IAQrD,aAAa,CAAC,YAAY,SAAS,WAAW,GAAG,WAAW,EACzD,KAAK,CAAC,EAAE,MAAM,EACd,QAAQ,CAAC,EAAE,MAAM,GACjB,aAAa,CAAC,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,YAAY,CAAC;IA+B5D,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,aAAa,CAAC,IAAI,EAAE,WAAW,EAAE,SAAS,CAAC,GAAG,SAAS;IAIrF;;;;;;;;;;OAUG;IACG,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,GAAG,MAAM,EAAE,WAAW,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,MAAM,CAAC;IAyB3G;;;;;;;;;;;;;;;;;;OAkBG;IACH,SAAS,CAAC,oBAAoB,CAAC,QAAQ,EAAE,eAAe,GAAG,IAAI;IAiB/D;;;;;;;;;;OAUG;IACH,SAAS,CAAC,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAI3D;;;;;;OAMG;IACH,SAAS,CAAC,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAwBpD;;;;;;;;OAQG;IACH,SAAS,CAAC,SAAS,IAAI,MAAM;cAIb,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAmD1D;;;;;;;;;OASG;IACH,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,uBAAuB,CAAC,IAAI,EAAE,WAAW,CAAC,KAAK,IAAI,GAAG,UAAU;IAI9G;;;;;;;OAOG;IACH,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,qBAAqB,CAAC,IAAI,EAAE,WAAW,CAAC,KAAK,IAAI,GAAG,UAAU;IAI1G;;;;OAIG;IACH,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,UAAU;IAQ/E;;;;;;;;;;;;;;;;;;;OAmBG;IACH,SAAS,CAAC,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,GAAG,YAAY,CAAC,MAAM,CAAC;IASvE;;;;OAIG;cACa,oBAAoB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAI5F;;;;;;OAMG;cACa,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,WAAW,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,SAAS,CAAC;IAYhH;;;;;;OAMG;IACH,SAAS,CAAC,aAAa,CAAC,GAAG,EAAE,GAAG,GAAG,WAAW,CAAC,IAAI,EAAE,WAAW,CAAC;IAOjE;;;;;;;;;;;;;;OAcG;IACH,SAAS,CAAC,kBAAkB,CAAC,QAAQ,EAAE,WAAW,CAAC,IAAI,EAAE,WAAW,CAAC,GAAG,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC;CAGlG"}