@hydranium/core 1.0.0-next.12 → 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/README.md +5 -1
- package/lib/documents/ast-document-manager.d.ts +92 -19
- package/lib/documents/ast-document-manager.d.ts.map +1 -1
- package/lib/documents/ast-document-manager.js +107 -26
- package/lib/documents/ast-document-manager.js.map +1 -1
- package/lib/documents/client-ids.d.ts +5 -19
- package/lib/documents/client-ids.d.ts.map +1 -1
- package/lib/documents/client-ids.js +5 -19
- package/lib/documents/client-ids.js.map +1 -1
- package/lib/documents/client-session-errors.d.ts +15 -0
- package/lib/documents/client-session-errors.d.ts.map +1 -0
- package/lib/documents/client-session-errors.js +15 -0
- package/lib/documents/client-session-errors.js.map +1 -0
- package/lib/documents/client-session-registry.d.ts +138 -0
- package/lib/documents/client-session-registry.d.ts.map +1 -0
- package/lib/documents/client-session-registry.js +184 -0
- package/lib/documents/client-session-registry.js.map +1 -0
- 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 +324 -57
- package/lib/documents/hydranium-text-documents.d.ts.map +1 -1
- package/lib/documents/hydranium-text-documents.js +590 -114
- package/lib/documents/hydranium-text-documents.js.map +1 -1
- package/lib/documents/index.d.ts +3 -0
- package/lib/documents/index.d.ts.map +1 -1
- package/lib/documents/index.js +3 -0
- package/lib/documents/index.js.map +1 -1
- package/lib/documents/language-client-text-shadow.d.ts +41 -9
- package/lib/documents/language-client-text-shadow.d.ts.map +1 -1
- package/lib/documents/language-client-text-shadow.js +56 -11
- package/lib/documents/language-client-text-shadow.js.map +1 -1
- package/lib/documents/self-save-registry.d.ts +37 -6
- package/lib/documents/self-save-registry.d.ts.map +1 -1
- package/lib/documents/self-save-registry.js +28 -15
- package/lib/documents/self-save-registry.js.map +1 -1
- package/lib/index.d.ts +3 -0
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +6 -0
- package/lib/index.js.map +1 -1
- package/lib/langium/ast-extension/ast-node-builder.d.ts +32 -9
- package/lib/langium/ast-extension/ast-node-builder.d.ts.map +1 -1
- package/lib/langium/ast-extension/ast-node-builder.js +60 -22
- package/lib/langium/ast-extension/ast-node-builder.js.map +1 -1
- package/lib/langium/bootstrap.d.ts.map +1 -1
- package/lib/langium/bootstrap.js +16 -9
- package/lib/langium/bootstrap.js.map +1 -1
- package/lib/langium/config/configuration-provider.d.ts +81 -0
- package/lib/langium/config/configuration-provider.d.ts.map +1 -0
- package/lib/langium/config/configuration-provider.js +112 -0
- package/lib/langium/config/configuration-provider.js.map +1 -0
- package/lib/langium/config/index.d.ts +1 -0
- package/lib/langium/config/index.d.ts.map +1 -1
- package/lib/langium/config/index.js +1 -0
- package/lib/langium/config/index.js.map +1 -1
- package/lib/langium/diagnostics/lsp-logger.d.ts +17 -0
- package/lib/langium/diagnostics/lsp-logger.d.ts.map +1 -1
- package/lib/langium/diagnostics/lsp-logger.js +40 -6
- package/lib/langium/diagnostics/lsp-logger.js.map +1 -1
- package/lib/langium/document-builder/build-pipeline-integration.d.ts +21 -1
- package/lib/langium/document-builder/build-pipeline-integration.d.ts.map +1 -1
- package/lib/langium/document-builder/build-pipeline-integration.js +32 -5
- package/lib/langium/document-builder/build-pipeline-integration.js.map +1 -1
- package/lib/langium/document-builder/build-session.d.ts +93 -0
- package/lib/langium/document-builder/build-session.d.ts.map +1 -0
- package/lib/langium/document-builder/build-session.js +72 -0
- package/lib/langium/document-builder/build-session.js.map +1 -0
- package/lib/langium/document-builder/document-builder.d.ts +165 -9
- package/lib/langium/document-builder/document-builder.d.ts.map +1 -1
- package/lib/langium/document-builder/document-builder.js +313 -13
- package/lib/langium/document-builder/document-builder.js.map +1 -1
- package/lib/langium/document-builder/index.d.ts +1 -0
- package/lib/langium/document-builder/index.d.ts.map +1 -1
- package/lib/langium/document-builder/index.js +1 -0
- package/lib/langium/document-builder/index.js.map +1 -1
- package/lib/langium/integration-services.d.ts +45 -1
- package/lib/langium/integration-services.d.ts.map +1 -1
- package/lib/langium/integration-services.js +10 -5
- package/lib/langium/integration-services.js.map +1 -1
- package/lib/langium/integrity/integrity-rule.d.ts +13 -5
- package/lib/langium/integrity/integrity-rule.d.ts.map +1 -1
- package/lib/langium/integrity/integrity-rule.js.map +1 -1
- package/lib/langium/integrity/integrity-service.d.ts +54 -6
- package/lib/langium/integrity/integrity-service.d.ts.map +1 -1
- package/lib/langium/integrity/integrity-service.js +192 -17
- package/lib/langium/integrity/integrity-service.js.map +1 -1
- package/lib/langium/keys/containment.d.ts +64 -0
- package/lib/langium/keys/containment.d.ts.map +1 -0
- package/lib/langium/keys/containment.js +53 -0
- package/lib/langium/keys/containment.js.map +1 -0
- package/lib/langium/keys/index.d.ts +1 -0
- package/lib/langium/keys/index.d.ts.map +1 -1
- package/lib/langium/keys/index.js +1 -0
- package/lib/langium/keys/index.js.map +1 -1
- package/lib/langium/keys/name-based-key-provider.d.ts +4 -0
- package/lib/langium/keys/name-based-key-provider.d.ts.map +1 -1
- package/lib/langium/keys/name-based-key-provider.js +4 -0
- package/lib/langium/keys/name-based-key-provider.js.map +1 -1
- package/lib/langium/language-module.d.ts +27 -2
- package/lib/langium/language-module.d.ts.map +1 -1
- package/lib/langium/language-module.js +16 -2
- package/lib/langium/language-module.js.map +1 -1
- package/lib/langium/model-service/client-session.d.ts +299 -0
- package/lib/langium/model-service/client-session.d.ts.map +1 -0
- package/lib/langium/model-service/client-session.js +379 -0
- package/lib/langium/model-service/client-session.js.map +1 -0
- package/lib/langium/model-service/index.d.ts +1 -0
- package/lib/langium/model-service/index.d.ts.map +1 -1
- package/lib/langium/model-service/index.js +1 -0
- package/lib/langium/model-service/index.js.map +1 -1
- package/lib/langium/model-service/model-service.d.ts +224 -160
- package/lib/langium/model-service/model-service.d.ts.map +1 -1
- package/lib/langium/model-service/model-service.js +191 -288
- package/lib/langium/model-service/model-service.js.map +1 -1
- package/lib/langium/module.d.ts +95 -16
- package/lib/langium/module.d.ts.map +1 -1
- package/lib/langium/module.js +30 -12
- package/lib/langium/module.js.map +1 -1
- package/lib/langium/naming/name-provider.d.ts +25 -4
- package/lib/langium/naming/name-provider.d.ts.map +1 -1
- package/lib/langium/naming/name-provider.js +2 -1
- package/lib/langium/naming/name-provider.js.map +1 -1
- package/lib/langium/naming/name-separator-validation.d.ts +23 -0
- package/lib/langium/naming/name-separator-validation.d.ts.map +1 -1
- package/lib/langium/naming/name-separator-validation.js +30 -1
- package/lib/langium/naming/name-separator-validation.js.map +1 -1
- package/lib/langium/residency/cst-residency-service.d.ts +31 -11
- package/lib/langium/residency/cst-residency-service.d.ts.map +1 -1
- package/lib/langium/residency/cst-residency-service.js +13 -56
- package/lib/langium/residency/cst-residency-service.js.map +1 -1
- package/lib/langium/scope/hydranium-scope-provider.d.ts +48 -13
- package/lib/langium/scope/hydranium-scope-provider.d.ts.map +1 -1
- package/lib/langium/scope/hydranium-scope-provider.js +56 -20
- package/lib/langium/scope/hydranium-scope-provider.js.map +1 -1
- package/lib/langium/serialization/abstract-serializer.d.ts +11 -20
- package/lib/langium/serialization/abstract-serializer.d.ts.map +1 -1
- package/lib/langium/serialization/abstract-serializer.js +12 -21
- package/lib/langium/serialization/abstract-serializer.js.map +1 -1
- package/lib/langium/service-registry.d.ts +15 -1
- package/lib/langium/service-registry.d.ts.map +1 -1
- package/lib/langium/service-registry.js +16 -0
- package/lib/langium/service-registry.js.map +1 -1
- package/lib/langium/shared-services.d.ts +15 -2
- package/lib/langium/shared-services.d.ts.map +1 -1
- package/lib/langium/shared-services.js.map +1 -1
- package/lib/langium/transfer/transfer-encoder.d.ts +60 -17
- package/lib/langium/transfer/transfer-encoder.d.ts.map +1 -1
- package/lib/langium/transfer/transfer-encoder.js +38 -16
- package/lib/langium/transfer/transfer-encoder.js.map +1 -1
- package/lib/langium/trivia/comment-preserver.d.ts +423 -0
- package/lib/langium/trivia/comment-preserver.d.ts.map +1 -0
- package/lib/langium/trivia/comment-preserver.js +906 -0
- package/lib/langium/trivia/comment-preserver.js.map +1 -0
- package/lib/langium/trivia/document-ending-preserver.d.ts +43 -0
- package/lib/langium/trivia/document-ending-preserver.d.ts.map +1 -0
- package/lib/langium/trivia/document-ending-preserver.js +48 -0
- package/lib/langium/trivia/document-ending-preserver.js.map +1 -0
- package/lib/langium/trivia/index.d.ts +14 -0
- package/lib/langium/trivia/index.d.ts.map +1 -0
- package/lib/langium/trivia/index.js +14 -0
- package/lib/langium/trivia/index.js.map +1 -0
- package/lib/langium/trivia/trivia-contribution.d.ts +37 -0
- package/lib/langium/trivia/trivia-contribution.d.ts.map +1 -0
- package/lib/langium/trivia/trivia-contribution.js +10 -0
- package/lib/langium/trivia/trivia-contribution.js.map +1 -0
- package/lib/langium/trivia/trivia-preserver.d.ts +50 -0
- package/lib/langium/trivia/trivia-preserver.d.ts.map +1 -0
- package/lib/langium/trivia/trivia-preserver.js +10 -0
- package/lib/langium/trivia/trivia-preserver.js.map +1 -0
- package/lib/langium/trivia/trivia-service.d.ts +70 -0
- package/lib/langium/trivia/trivia-service.d.ts.map +1 -0
- package/lib/langium/trivia/trivia-service.js +56 -0
- package/lib/langium/trivia/trivia-service.js.map +1 -0
- package/lib/langium/update-rewrite/update-rewrite.d.ts +1 -1
- package/lib/langium/validation/document-validator.d.ts +294 -10
- package/lib/langium/validation/document-validator.d.ts.map +1 -1
- package/lib/langium/validation/document-validator.js +448 -5
- package/lib/langium/validation/document-validator.js.map +1 -1
- package/lib/langium/workspace/document-uri-policy.d.ts +3 -4
- package/lib/langium/workspace/document-uri-policy.d.ts.map +1 -1
- package/lib/langium/workspace/document-uri-policy.js +3 -4
- package/lib/langium/workspace/document-uri-policy.js.map +1 -1
- package/lib/langium/workspace/file-system-provider.d.ts +9 -1
- package/lib/langium/workspace/file-system-provider.d.ts.map +1 -1
- package/lib/langium/workspace/file-system-provider.js +40 -7
- package/lib/langium/workspace/file-system-provider.js.map +1 -1
- package/lib/langium/workspace/hydranium-langium-document-factory.d.ts +25 -0
- package/lib/langium/workspace/hydranium-langium-document-factory.d.ts.map +1 -1
- package/lib/langium/workspace/hydranium-langium-document-factory.js +25 -0
- package/lib/langium/workspace/hydranium-langium-document-factory.js.map +1 -1
- package/lib/langium/workspace/hydranium-workspace-manager.d.ts +21 -1
- package/lib/langium/workspace/hydranium-workspace-manager.d.ts.map +1 -1
- package/lib/langium/workspace/hydranium-workspace-manager.js +28 -0
- package/lib/langium/workspace/hydranium-workspace-manager.js.map +1 -1
- package/lib/langium/workspace/in-memory-file-system-provider.d.ts +23 -0
- package/lib/langium/workspace/in-memory-file-system-provider.d.ts.map +1 -1
- package/lib/langium/workspace/in-memory-file-system-provider.js +55 -9
- package/lib/langium/workspace/in-memory-file-system-provider.js.map +1 -1
- package/lib/langium/workspace/initialize-workspace.d.ts +31 -2
- package/lib/langium/workspace/initialize-workspace.d.ts.map +1 -1
- package/lib/langium/workspace/initialize-workspace.js +13 -5
- package/lib/langium/workspace/initialize-workspace.js.map +1 -1
- package/lib/langium/workspace/langium-documents.d.ts +79 -17
- package/lib/langium/workspace/langium-documents.d.ts.map +1 -1
- package/lib/langium/workspace/langium-documents.js +83 -28
- package/lib/langium/workspace/langium-documents.js.map +1 -1
- package/lib/langium/workspace/virtual-document.d.ts +18 -3
- package/lib/langium/workspace/virtual-document.d.ts.map +1 -1
- package/lib/langium/workspace/virtual-document.js +19 -2
- package/lib/langium/workspace/virtual-document.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/locale/index.d.ts +10 -0
- package/lib/locale/index.d.ts.map +1 -0
- package/lib/locale/index.js +10 -0
- package/lib/locale/index.js.map +1 -0
- package/lib/locale/server-locale.d.ts +73 -0
- package/lib/locale/server-locale.d.ts.map +1 -0
- package/lib/locale/server-locale.js +61 -0
- package/lib/locale/server-locale.js.map +1 -0
- package/lib/lsp/completion/hydranium-completion-provider.d.ts +44 -2
- package/lib/lsp/completion/hydranium-completion-provider.d.ts.map +1 -1
- package/lib/lsp/completion/hydranium-completion-provider.js +68 -0
- package/lib/lsp/completion/hydranium-completion-provider.js.map +1 -1
- package/lib/lsp/connection-features.d.ts +23 -0
- package/lib/lsp/connection-features.d.ts.map +1 -0
- package/lib/lsp/connection-features.js +60 -0
- package/lib/lsp/connection-features.js.map +1 -0
- package/lib/lsp/diagnostics-connection.d.ts +27 -0
- package/lib/lsp/diagnostics-connection.d.ts.map +1 -0
- package/lib/lsp/diagnostics-connection.js +53 -0
- package/lib/lsp/diagnostics-connection.js.map +1 -0
- package/lib/lsp/hydranium-document-update-handler.d.ts +70 -62
- package/lib/lsp/hydranium-document-update-handler.d.ts.map +1 -1
- package/lib/lsp/hydranium-document-update-handler.js +123 -75
- package/lib/lsp/hydranium-document-update-handler.js.map +1 -1
- package/lib/lsp/index.d.ts +3 -1
- package/lib/lsp/index.d.ts.map +1 -1
- package/lib/lsp/index.js +3 -1
- package/lib/lsp/index.js.map +1 -1
- package/lib/lsp/lsp-latency.d.ts +39 -0
- package/lib/lsp/lsp-latency.d.ts.map +1 -0
- package/lib/lsp/lsp-latency.js +58 -0
- package/lib/lsp/lsp-latency.js.map +1 -0
- package/lib/lsp/semantic-token-provider.d.ts +34 -1
- package/lib/lsp/semantic-token-provider.d.ts.map +1 -1
- package/lib/lsp/semantic-token-provider.js +55 -8
- package/lib/lsp/semantic-token-provider.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 +8 -7
- package/lib/lsp/start-language-server.d.ts.map +1 -1
- package/lib/lsp/start-language-server.js +13 -7
- package/lib/lsp/start-language-server.js.map +1 -1
- package/lib/messages/carriers.d.ts +54 -0
- package/lib/messages/carriers.d.ts.map +1 -0
- package/lib/messages/carriers.js +62 -0
- package/lib/messages/carriers.js.map +1 -0
- package/lib/messages/index.d.ts +25 -0
- package/lib/messages/index.d.ts.map +1 -0
- package/lib/messages/index.js +25 -0
- package/lib/messages/index.js.map +1 -0
- package/lib/messages/renderer.d.ts +142 -0
- package/lib/messages/renderer.d.ts.map +1 -0
- package/lib/messages/renderer.js +165 -0
- package/lib/messages/renderer.js.map +1 -0
- package/lib/node/heap-ceiling.d.ts +61 -0
- package/lib/node/heap-ceiling.d.ts.map +1 -0
- package/lib/node/heap-ceiling.js +72 -0
- package/lib/node/heap-ceiling.js.map +1 -0
- package/lib/node/index.d.ts +1 -0
- package/lib/node/index.d.ts.map +1 -1
- package/lib/node/index.js +1 -0
- package/lib/node/index.js.map +1 -1
- package/lib/node/latency-from-env.d.ts +1 -1
- package/lib/node/latency-from-env.js +1 -1
- package/lib/node/measure-memory.d.ts.map +1 -1
- package/lib/node/measure-memory.js +1 -0
- package/lib/node/measure-memory.js.map +1 -1
- package/lib/node/node-file-system-provider.d.ts +35 -1
- package/lib/node/node-file-system-provider.d.ts.map +1 -1
- package/lib/node/node-file-system-provider.js +140 -45
- package/lib/node/node-file-system-provider.js.map +1 -1
- package/lib/node/profile-capture.d.ts +8 -2
- package/lib/node/profile-capture.d.ts.map +1 -1
- package/lib/node/profile-capture.js.map +1 -1
- package/lib/node/profiling-run.d.ts +2 -2
- package/lib/node/profiling-run.js +1 -1
- package/lib/node/profiling-run.js.map +1 -1
- package/lib/node/rename-over-open-readers.d.ts +52 -0
- package/lib/node/rename-over-open-readers.d.ts.map +1 -0
- package/lib/node/rename-over-open-readers.js +66 -0
- package/lib/node/rename-over-open-readers.js.map +1 -0
- package/lib/node/socket-launcher.d.ts +15 -0
- package/lib/node/socket-launcher.d.ts.map +1 -1
- package/lib/node/socket-launcher.js +3 -2
- package/lib/node/socket-launcher.js.map +1 -1
- package/lib/testing/fake-document.d.ts +16 -4
- package/lib/testing/fake-document.d.ts.map +1 -1
- package/lib/testing/fake-document.js +18 -3
- package/lib/testing/fake-document.js.map +1 -1
- package/lib/testing/make-noop-shared-services.d.ts +14 -0
- package/lib/testing/make-noop-shared-services.d.ts.map +1 -1
- package/lib/testing/make-noop-shared-services.js +28 -2
- package/lib/testing/make-noop-shared-services.js.map +1 -1
- package/lib/testing/make-test-services.d.ts +61 -13
- package/lib/testing/make-test-services.d.ts.map +1 -1
- package/lib/testing/make-test-services.js +25 -5
- package/lib/testing/make-test-services.js.map +1 -1
- package/lib/testing/node/index.d.ts +1 -0
- package/lib/testing/node/index.d.ts.map +1 -1
- package/lib/testing/node/index.js +1 -0
- package/lib/testing/node/index.js.map +1 -1
- package/lib/testing/node/lsp-harness.d.ts.map +1 -1
- package/lib/testing/node/lsp-harness.js +2 -0
- package/lib/testing/node/lsp-harness.js.map +1 -1
- package/lib/testing/node/lsp-server-connection.d.ts +11 -3
- package/lib/testing/node/lsp-server-connection.d.ts.map +1 -1
- package/lib/testing/node/lsp-server-connection.js +42 -9
- package/lib/testing/node/lsp-server-connection.js.map +1 -1
- package/lib/testing/node/scratch-workspace.d.ts.map +1 -1
- package/lib/testing/node/scratch-workspace.js +10 -5
- package/lib/testing/node/scratch-workspace.js.map +1 -1
- package/lib/testing/node/spawned-server.d.ts +14 -0
- package/lib/testing/node/spawned-server.d.ts.map +1 -1
- package/lib/testing/node/spawned-server.js +33 -1
- package/lib/testing/node/spawned-server.js.map +1 -1
- package/lib/testing/node/unhandled-rejections.d.ts +20 -0
- package/lib/testing/node/unhandled-rejections.d.ts.map +1 -0
- package/lib/testing/node/unhandled-rejections.js +32 -0
- package/lib/testing/node/unhandled-rejections.js.map +1 -0
- package/lib/testing/playwright/flaky-network-proxy.d.ts +76 -0
- package/lib/testing/playwright/flaky-network-proxy.d.ts.map +1 -0
- package/lib/testing/playwright/flaky-network-proxy.js +164 -0
- package/lib/testing/playwright/flaky-network-proxy.js.map +1 -0
- package/lib/testing/playwright/index.d.ts +1 -0
- package/lib/testing/playwright/index.d.ts.map +1 -1
- package/lib/testing/playwright/index.js +1 -0
- package/lib/testing/playwright/index.js.map +1 -1
- package/lib/testing/playwright/server-log-capture.d.ts +14 -4
- package/lib/testing/playwright/server-log-capture.d.ts.map +1 -1
- package/lib/testing/playwright/server-log-capture.js +21 -4
- package/lib/testing/playwright/server-log-capture.js.map +1 -1
- package/lib/testing/playwright/server-log-rename-reporter.d.ts.map +1 -1
- package/lib/testing/playwright/server-log-rename-reporter.js +10 -1
- package/lib/testing/playwright/server-log-rename-reporter.js.map +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 +10 -9
- package/lib/testing/stub-ast-document-manager.d.ts.map +1 -1
- package/lib/testing/stub-ast-document-manager.js +8 -9
- package/lib/testing/stub-ast-document-manager.js.map +1 -1
- package/lib/testing/stub-document-builder.d.ts +8 -0
- package/lib/testing/stub-document-builder.d.ts.map +1 -1
- package/lib/testing/stub-document-builder.js +22 -3
- package/lib/testing/stub-document-builder.js.map +1 -1
- package/lib/testing/stub-hydranium-text-documents.d.ts +19 -6
- package/lib/testing/stub-hydranium-text-documents.d.ts.map +1 -1
- package/lib/testing/stub-hydranium-text-documents.js +53 -15
- package/lib/testing/stub-hydranium-text-documents.js.map +1 -1
- package/lib/testing/stub-langium-documents.d.ts +3 -2
- package/lib/testing/stub-langium-documents.d.ts.map +1 -1
- package/lib/testing/stub-langium-documents.js.map +1 -1
- package/lib/testing/stub-model-service.d.ts +7 -6
- package/lib/testing/stub-model-service.d.ts.map +1 -1
- package/lib/testing/stub-model-service.js +4 -4
- package/lib/testing/stub-model-service.js.map +1 -1
- package/lib/util/connection-liveness.d.ts +7 -6
- package/lib/util/connection-liveness.d.ts.map +1 -1
- package/lib/util/connection-liveness.js +35 -14
- package/lib/util/connection-liveness.js.map +1 -1
- package/package.json +17 -8
- package/src/documents/ast-document-manager.ts +188 -45
- package/src/documents/client-ids.ts +5 -22
- package/src/documents/client-session-errors.ts +22 -0
- package/src/documents/client-session-registry.ts +237 -0
- package/src/documents/file-system-task-queue.ts +68 -0
- package/src/documents/hydranium-text-documents.ts +724 -142
- package/src/documents/index.ts +3 -0
- package/src/documents/language-client-text-shadow.ts +59 -11
- package/src/documents/self-save-registry.ts +52 -13
- package/src/index.ts +6 -0
- package/src/langium/ast-extension/ast-node-builder.ts +66 -22
- package/src/langium/bootstrap.ts +16 -9
- package/src/langium/config/configuration-provider.ts +119 -0
- package/src/langium/config/index.ts +1 -0
- package/src/langium/diagnostics/lsp-logger.ts +41 -6
- package/src/langium/document-builder/build-pipeline-integration.ts +50 -5
- package/src/langium/document-builder/build-session.ts +87 -0
- package/src/langium/document-builder/document-builder.ts +355 -13
- package/src/langium/document-builder/index.ts +1 -0
- package/src/langium/integration-services.ts +67 -6
- package/src/langium/integrity/integrity-rule.ts +13 -5
- package/src/langium/integrity/integrity-service.ts +201 -17
- package/src/langium/keys/containment.ts +87 -0
- package/src/langium/keys/index.ts +1 -0
- package/src/langium/keys/name-based-key-provider.ts +4 -0
- package/src/langium/language-module.ts +42 -4
- package/src/langium/model-service/client-session.ts +581 -0
- package/src/langium/model-service/index.ts +1 -0
- package/src/langium/model-service/model-service.ts +332 -274
- package/src/langium/module.ts +119 -22
- package/src/langium/naming/name-provider.ts +27 -5
- package/src/langium/naming/name-separator-validation.ts +34 -5
- package/src/langium/residency/cst-residency-service.ts +36 -14
- package/src/langium/scope/hydranium-scope-provider.ts +60 -22
- package/src/langium/serialization/abstract-serializer.ts +13 -32
- package/src/langium/service-registry.ts +19 -2
- package/src/langium/shared-services.ts +19 -2
- package/src/langium/transfer/transfer-encoder.ts +85 -24
- package/src/langium/trivia/comment-preserver.ts +1100 -0
- package/src/langium/trivia/document-ending-preserver.ts +55 -0
- package/src/langium/trivia/index.ts +14 -0
- package/src/langium/trivia/trivia-contribution.ts +39 -0
- package/src/langium/trivia/trivia-preserver.ts +54 -0
- package/src/langium/trivia/trivia-service.ts +99 -0
- package/src/langium/update-rewrite/update-rewrite.ts +1 -1
- package/src/langium/validation/document-validator.ts +537 -11
- package/src/langium/workspace/document-uri-policy.ts +3 -4
- package/src/langium/workspace/file-system-provider.ts +48 -8
- package/src/langium/workspace/hydranium-langium-document-factory.ts +34 -0
- package/src/langium/workspace/hydranium-workspace-manager.ts +30 -1
- package/src/langium/workspace/in-memory-file-system-provider.ts +62 -10
- package/src/langium/workspace/initialize-workspace.ts +43 -5
- package/src/langium/workspace/langium-documents.ts +106 -33
- package/src/langium/workspace/virtual-document.ts +21 -3
- package/src/langium/workspace/write-lock-scope.ts +1 -1
- package/src/locale/index.ts +10 -0
- package/src/locale/server-locale.ts +86 -0
- package/src/lsp/completion/hydranium-completion-provider.ts +82 -2
- package/src/lsp/connection-features.ts +67 -0
- package/src/lsp/diagnostics-connection.ts +56 -0
- package/src/lsp/hydranium-document-update-handler.ts +152 -79
- package/src/lsp/index.ts +3 -1
- package/src/lsp/lsp-latency.ts +62 -0
- package/src/lsp/semantic-token-provider.ts +74 -7
- package/src/lsp/shared-module.ts +4 -8
- package/src/lsp/start-language-server.ts +13 -7
- package/src/messages/carriers.ts +78 -0
- package/src/messages/index.ts +36 -0
- package/src/messages/renderer.ts +212 -0
- package/src/node/heap-ceiling.ts +108 -0
- package/src/node/index.ts +1 -0
- package/src/node/latency-from-env.ts +1 -1
- package/src/node/measure-memory.ts +1 -0
- package/src/node/node-file-system-provider.ts +154 -47
- package/src/node/profile-capture.ts +8 -2
- package/src/node/profiling-run.ts +3 -3
- package/src/node/rename-over-open-readers.ts +78 -0
- package/src/node/socket-launcher.ts +18 -2
- package/src/testing/fake-document.ts +24 -5
- package/src/testing/make-noop-shared-services.ts +50 -2
- package/src/testing/make-test-services.ts +99 -24
- package/src/testing/node/index.ts +1 -0
- package/src/testing/node/lsp-harness.ts +2 -0
- package/src/testing/node/lsp-server-connection.ts +61 -11
- package/src/testing/node/scratch-workspace.ts +10 -5
- package/src/testing/node/spawned-server.ts +35 -1
- package/src/testing/node/unhandled-rejections.ts +31 -0
- package/src/testing/playwright/flaky-network-proxy.ts +240 -0
- package/src/testing/playwright/index.ts +1 -0
- package/src/testing/playwright/server-log-capture.ts +24 -5
- package/src/testing/playwright/server-log-rename-reporter.ts +12 -1
- package/src/testing/run-update-pipeline.ts +4 -4
- package/src/testing/stub-ast-document-manager.ts +18 -31
- package/src/testing/stub-document-builder.ts +32 -3
- package/src/testing/stub-hydranium-text-documents.ts +78 -21
- package/src/testing/stub-langium-documents.ts +3 -2
- package/src/testing/stub-model-service.ts +9 -8
- package/src/util/connection-liveness.ts +37 -14
- package/lib/lsp/instrument-connection.d.ts +0 -36
- package/lib/lsp/instrument-connection.d.ts.map +0 -1
- package/lib/lsp/instrument-connection.js +0 -62
- package/lib/lsp/instrument-connection.js.map +0 -1
- package/src/lsp/instrument-connection.ts +0 -66
package/README.md
CHANGED
|
@@ -27,7 +27,9 @@ and so does every other head package (`@hydranium/data-server`,
|
|
|
27
27
|
`HydraniumTextDocuments`, `WritableFileSystemProvider` and `SelfSaveRegistry`
|
|
28
28
|
generalise the LSP document lifecycle to several co-editing heads, so an edit
|
|
29
29
|
made on one surface is observable on the others without a head-to-head
|
|
30
|
-
synchronisation protocol.
|
|
30
|
+
synchronisation protocol. A participant works through a `ClientSession` from
|
|
31
|
+
`ModelService.createSession`, which writes only what it has open; see
|
|
32
|
+
[client sessions](../../docs/concepts/client-sessions.md).
|
|
31
33
|
- **The projection the non-LSP heads build on:** `ModelService` (the in-process
|
|
32
34
|
workspace facade), `TransferEncoder` (AST → transfer model), and the
|
|
33
35
|
`Serializer` slot.
|
|
@@ -94,6 +96,8 @@ Alpha — pre-v0, not yet published. The API is not stable and may change withou
|
|
|
94
96
|
deprecation cycle. See the [repository README](../../README.md) for the current
|
|
95
97
|
status and known limitations.
|
|
96
98
|
|
|
99
|
+
For task-shaped adoption paths, start with the [validation check guide](../../docs/guides/add-validation-check.md). It shows the validation contribution boundary that this package supplies.
|
|
100
|
+
|
|
97
101
|
## License
|
|
98
102
|
|
|
99
103
|
`MIT` — see this package's [`LICENSE`](./LICENSE). Third-party notices for the
|
|
@@ -6,9 +6,10 @@
|
|
|
6
6
|
*
|
|
7
7
|
* SPDX-License-Identifier: MIT
|
|
8
8
|
********************************************************************************/
|
|
9
|
-
import { type CloseModelArgs, type Tracer, type TransferSavedEvent, type TransferUpdatedEvent, type OpenModelArgs } from '@hydranium/protocol';
|
|
9
|
+
import { type CanonicalUri, type CloseModelArgs, type Tracer, type TransferSavedEvent, type TransferUpdatedEvent, type OpenModelArgs, type SnapshotVersion } from '@hydranium/protocol';
|
|
10
10
|
import { type AstNode, type DocumentBuilder, type FileSystemProvider, type LangiumDocument, type LangiumDocuments } from '@hydranium/langium';
|
|
11
11
|
import { type LogNameOptions } from '../langium/diagnostics/logger.js';
|
|
12
|
+
import { type AstDiagnostic } from '../langium/validation/document-validator.js';
|
|
12
13
|
/**
|
|
13
14
|
* File-system provider extension that supports writes. Langium's standard
|
|
14
15
|
* {@link FileSystemProvider} is read-only; the manager needs to persist saves,
|
|
@@ -82,19 +83,18 @@ export interface UpdateInfo {
|
|
|
82
83
|
* twins; the type-system distinction is the generic constraint, and the
|
|
83
84
|
* conversion seam between them is the framework `TransferEncoder`.
|
|
84
85
|
*/
|
|
85
|
-
export interface AstDocument<TAst extends AstNode, TDiagnostic> {
|
|
86
|
+
export interface AstDocument<TAst extends AstNode, TDiagnostic extends AstDiagnostic = AstDiagnostic> {
|
|
86
87
|
root: TAst;
|
|
87
88
|
diagnostics: TDiagnostic[];
|
|
88
89
|
uri: string;
|
|
89
90
|
/**
|
|
90
91
|
* Text-document version this snapshot was taken at — read from
|
|
91
92
|
* `LangiumDocument.textDocument.version`. Symmetric with
|
|
92
|
-
* `TransferDocument.version` on the wire side: in-process
|
|
93
|
-
*
|
|
94
|
-
* `
|
|
95
|
-
* into the conflict gate.
|
|
93
|
+
* `TransferDocument.version` on the wire side: an in-process caller that
|
|
94
|
+
* holds an `AstDocument` and mutates it sends this straight back as the
|
|
95
|
+
* `basedOn` of its session's write, and the conflict gate arms on it.
|
|
96
96
|
*/
|
|
97
|
-
version:
|
|
97
|
+
version: SnapshotVersion;
|
|
98
98
|
}
|
|
99
99
|
export declare namespace AstDocument {
|
|
100
100
|
/**
|
|
@@ -103,7 +103,7 @@ export declare namespace AstDocument {
|
|
|
103
103
|
* don't need to repeat the empty array at every call site. Mirrors
|
|
104
104
|
* `TransferDocument.create` on the wire side.
|
|
105
105
|
*/
|
|
106
|
-
function create<TAst extends AstNode, TDiagnostic =
|
|
106
|
+
function create<TAst extends AstNode, TDiagnostic extends AstDiagnostic = AstDiagnostic>(uri: string, version: number, root: TAst, diagnostics?: TDiagnostic[]): AstDocument<TAst, TDiagnostic>;
|
|
107
107
|
/**
|
|
108
108
|
* Project a {@link LangiumDocument} into its {@link AstDocument}
|
|
109
109
|
* envelope — the single place that reads `root` / `diagnostics` /
|
|
@@ -117,15 +117,64 @@ export declare namespace AstDocument {
|
|
|
117
117
|
* carry that identity, not the subscriber's (possibly non-canonical) URI:
|
|
118
118
|
* a subscriber already knows the URI it subscribed with, so the useful
|
|
119
119
|
* thing to surface is the canonical one every other layer keys by.
|
|
120
|
+
*
|
|
121
|
+
* Narrowing `TDiagnostic` below the constraint asserts that the validators
|
|
122
|
+
* in play produce that shape, and nothing here checks it: the build fills the
|
|
123
|
+
* array, so a document carrying a diagnostic from elsewhere — a lexer error,
|
|
124
|
+
* another validator — satisfies the declared type and not the narrowed one.
|
|
120
125
|
*/
|
|
121
|
-
function from<TAst extends AstNode, TDiagnostic =
|
|
126
|
+
function from<TAst extends AstNode, TDiagnostic extends AstDiagnostic = AstDiagnostic>(document: LangiumDocument): AstDocument<TAst, TDiagnostic>;
|
|
122
127
|
}
|
|
123
128
|
/** Update event delivered by {@link AstDocumentManager.onUpdate} — typed alias over the generic event wrapper. */
|
|
124
|
-
export type AstDocumentUpdatedEvent<TAst extends AstNode, TDiagnostic> = TransferUpdatedEvent<AstDocument<TAst, TDiagnostic>>;
|
|
129
|
+
export type AstDocumentUpdatedEvent<TAst extends AstNode, TDiagnostic extends AstDiagnostic = AstDiagnostic> = TransferUpdatedEvent<AstDocument<TAst, TDiagnostic>>;
|
|
125
130
|
/** Save event delivered by {@link AstDocumentManager.onSave} — typed alias over the generic event wrapper. */
|
|
126
|
-
export type AstDocumentSavedEvent<TAst extends AstNode, TDiagnostic> = TransferSavedEvent<AstDocument<TAst, TDiagnostic>>;
|
|
131
|
+
export type AstDocumentSavedEvent<TAst extends AstNode, TDiagnostic extends AstDiagnostic = AstDiagnostic> = TransferSavedEvent<AstDocument<TAst, TDiagnostic>>;
|
|
127
132
|
/** Construction options for {@link AstDocumentManager}. */
|
|
128
|
-
export
|
|
133
|
+
export interface AstDocumentManagerOptions extends LogNameOptions {
|
|
134
|
+
/**
|
|
135
|
+
* Skip a queued save of a URI when a newer save of it is queued behind. The
|
|
136
|
+
* newer save took its text later, so disk ends the same with fewer writes.
|
|
137
|
+
* A skipped save announces nothing and takes the newer save's outcome: it
|
|
138
|
+
* resolves when that one lands and rejects with its error when it fails,
|
|
139
|
+
* since disk then holds neither text. Defaults to `false`: every save
|
|
140
|
+
* writes. The framework binds the manager without options, so turning this
|
|
141
|
+
* on means rebinding `AstDocumentManager` with them.
|
|
142
|
+
*/
|
|
143
|
+
readonly coalesceSaves?: boolean;
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* The document slot the model server and the integrity service talk to:
|
|
147
|
+
* open/close/update/save plus the AST-typed event streams, with the LSP
|
|
148
|
+
* plumbing hidden.
|
|
149
|
+
*
|
|
150
|
+
* Generic over `<TAst extends AstNode, TDiagnostic>` so each consumer projects
|
|
151
|
+
* its own AST root type and diagnostic shape into the emitted
|
|
152
|
+
* {@link AstDocument} envelopes.
|
|
153
|
+
*
|
|
154
|
+
* **URI contract.** Every URI-accepting member takes a URI in *any* spelling
|
|
155
|
+
* (canonical, symlinked, `..`/case-divergent) and canonicalizes internally
|
|
156
|
+
* through the {@link DocumentUriPolicy}, so a caller never has to canonicalize
|
|
157
|
+
* first and an implementation may not require it.
|
|
158
|
+
*/
|
|
159
|
+
export interface AstDocumentManager<TAst extends AstNode, TDiagnostic extends AstDiagnostic = AstDiagnostic> {
|
|
160
|
+
open(args: OpenModelArgs): Promise<Disposable>;
|
|
161
|
+
close(args: CloseModelArgs): Promise<void>;
|
|
162
|
+
isOpen(uri: string): boolean;
|
|
163
|
+
/** Apply `text` as `clientId`'s edit. Resolves to the resulting text-document version. */
|
|
164
|
+
update(uri: string, text: string, clientId: string): Promise<number>;
|
|
165
|
+
/**
|
|
166
|
+
* Write the document's current text to disk through `FileSystemTaskQueue`.
|
|
167
|
+
* The text is taken when this is called, so saves of one file land in the
|
|
168
|
+
* order they were called.
|
|
169
|
+
*/
|
|
170
|
+
save(uri: string, clientId: string): Promise<void>;
|
|
171
|
+
onUpdate(uri: string, listener: (event: AstDocumentUpdatedEvent<TAst, TDiagnostic>) => void): Disposable;
|
|
172
|
+
onSave(uri: string, listener: (event: AstDocumentSavedEvent<TAst, TDiagnostic>) => void | Promise<void>): Disposable;
|
|
173
|
+
onClientClosed(uri: string, clientId: string, listener: () => void): Disposable;
|
|
174
|
+
getDocument(uri: string): LangiumDocument | undefined;
|
|
175
|
+
/** Client id that authored the document's current version, or `undefined` for a framework-internal build. */
|
|
176
|
+
getAuthor(document: LangiumDocument): string | undefined;
|
|
177
|
+
}
|
|
129
178
|
/**
|
|
130
179
|
* Higher-level facade over {@link HydraniumTextDocuments} that speaks the
|
|
131
180
|
* model-server protocol (open/close/update/save with the transfer-model event
|
|
@@ -146,9 +195,12 @@ export type AstDocumentManagerOptions = LogNameOptions;
|
|
|
146
195
|
* resolution (the egress `applyEditToLanguageClient`) stay on
|
|
147
196
|
* {@link HydraniumTextDocuments}, their owner.
|
|
148
197
|
*/
|
|
149
|
-
export declare class
|
|
198
|
+
export declare class DefaultAstDocumentManager<TAst extends AstNode, TDiagnostic extends AstDiagnostic = AstDiagnostic> implements AstDocumentManager<TAst, TDiagnostic> {
|
|
150
199
|
protected readonly services: ServerSharedServices;
|
|
151
200
|
protected lastUpdate?: UpdateInfo;
|
|
201
|
+
/** Per canonical URI, the newest save queued for it, which {@link coalesceSaves} lets older queued saves defer to. */
|
|
202
|
+
protected readonly newestSaves: Map<CanonicalUri, Promise<void>>;
|
|
203
|
+
protected readonly coalesceSaves: boolean;
|
|
152
204
|
protected readonly textDocuments: HydraniumTextDocuments<TextDocument>;
|
|
153
205
|
protected readonly fileSystemProvider: WritableFileSystemProvider;
|
|
154
206
|
protected readonly langiumDocs: LangiumDocuments;
|
|
@@ -189,13 +241,13 @@ export declare class AstDocumentManager<TAst extends AstNode = AstNode, TDiagnos
|
|
|
189
241
|
* The client that authored `document`'s current version, or `undefined` when
|
|
190
242
|
* no client wrote it — a framework-internal rebuild (workspace startup, a
|
|
191
243
|
* cascade relink, a `didClose`-reload) or a genuine author gap. Honest about
|
|
192
|
-
* absence so routing
|
|
193
|
-
*
|
|
244
|
+
* absence so a routing consumer tests `undefined` directly rather than
|
|
245
|
+
* against a sentinel; the presentation
|
|
194
246
|
* default ({@link UNKNOWN_CLIENT_ID}) is applied at the boundary that needs a
|
|
195
247
|
* concrete value (the `onUpdate` event's `sourceClientId`, the data-server's
|
|
196
248
|
* `resolveSourceClientId`).
|
|
197
249
|
*/
|
|
198
|
-
getAuthor(document: LangiumDocument
|
|
250
|
+
getAuthor(document: LangiumDocument): string | undefined;
|
|
199
251
|
open(args: OpenModelArgs): Promise<Disposable>;
|
|
200
252
|
close(args: CloseModelArgs): Promise<void>;
|
|
201
253
|
/**
|
|
@@ -217,12 +269,34 @@ export declare class AstDocumentManager<TAst extends AstNode = AstNode, TDiagnos
|
|
|
217
269
|
* callers don't need to pass it — the manager owns content and version
|
|
218
270
|
* sequencing.
|
|
219
271
|
*
|
|
272
|
+
* The text is taken synchronously, before the save waits in the file's task
|
|
273
|
+
* queue; the compare and the write run in the queue. Taken later, a save
|
|
274
|
+
* that waits behind another writes whatever the store holds when its turn
|
|
275
|
+
* comes, edits made after the call included, and announces that text under
|
|
276
|
+
* its own client id.
|
|
277
|
+
*
|
|
278
|
+
* **The write is skipped when the file already holds that text; the
|
|
279
|
+
* notification is not.** A save announces that the content is on disk, which
|
|
280
|
+
* is true either way — so a subscriber clearing a dirty marker or reacting to
|
|
281
|
+
* a persist behaves the same, while an mtime is not moved for byte-identical
|
|
282
|
+
* content that a downstream mtime-keyed build would then read as new work.
|
|
283
|
+
*
|
|
220
284
|
* Throws if no document is open for `uri`.
|
|
221
285
|
*/
|
|
222
286
|
save(uri: string, clientId: string): Promise<void>;
|
|
287
|
+
/** Write `text` to `uri` unless the file already holds it, then announce the save. Runs inside the file's task queue. */
|
|
288
|
+
protected writeSave(uri: CanonicalUri, text: string, clientId: string): Promise<void>;
|
|
289
|
+
/**
|
|
290
|
+
* Whether the file at `uri` already holds `text`.
|
|
291
|
+
*
|
|
292
|
+
* Compared by CONTENT rather than against a remembered version, so a write
|
|
293
|
+
* from outside this server is still corrected: a version this manager already
|
|
294
|
+
* saved says nothing about what is on disk now. `false` when the file cannot
|
|
295
|
+
* be read at all, which is the answer that writes — a document whose file does
|
|
296
|
+
* not exist yet is exactly the one a first save has to create.
|
|
297
|
+
*/
|
|
298
|
+
protected matchesDisk(uri: string, text: string): Promise<boolean>;
|
|
223
299
|
isOpen(uri: string): boolean;
|
|
224
|
-
/** True if the URI was in the directly-changed set of the most recent build (not just affected). */
|
|
225
|
-
isDirectChange(uri: string): boolean;
|
|
226
300
|
/**
|
|
227
301
|
* The `LangiumDocument` for an externally-supplied URI, looked up by its
|
|
228
302
|
* canonical identity. Folds the `getDocument(toUri(canonicalUri(uri)))` idiom
|
|
@@ -232,7 +306,6 @@ export declare class AstDocumentManager<TAst extends AstNode = AstNode, TDiagnos
|
|
|
232
306
|
*/
|
|
233
307
|
getDocument(uri: string): LangiumDocument | undefined;
|
|
234
308
|
protected createDocumentFromTextOrFileSystem(uri: string, languageId?: string, version?: number, text?: string): Promise<TextDocumentItem>;
|
|
235
|
-
readFile(uri: string): Promise<string>;
|
|
236
309
|
/**
|
|
237
310
|
* Hook for subclasses that want to re-shape the emitted document (e.g. inject
|
|
238
311
|
* a custom-typed `diagnostics` field). The default delegates to
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ast-document-manager.d.ts","sourceRoot":"","sources":["../../src/documents/ast-document-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF,OAAO,EACJ,KAAK,cAAc,EACnB,KAAK,MAAM,EACX,KAAK,kBAAkB,EACvB,KAAK,oBAAoB,EACzB,KAAK,aAAa,
|
|
1
|
+
{"version":3,"file":"ast-document-manager.d.ts","sourceRoot":"","sources":["../../src/documents/ast-document-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
*
|
|
7
7
|
* SPDX-License-Identifier: MIT
|
|
8
8
|
********************************************************************************/
|
|
9
|
+
import { asSnapshotVersion } from '@hydranium/protocol';
|
|
9
10
|
import { DocumentState, UriUtils } from '@hydranium/langium';
|
|
10
11
|
import { Disposable } from 'vscode-languageserver';
|
|
11
12
|
import { TextDocumentIdentifier } from 'vscode-languageserver-protocol';
|
|
@@ -21,7 +22,7 @@ export var AstDocument;
|
|
|
21
22
|
* `TransferDocument.create` on the wire side.
|
|
22
23
|
*/
|
|
23
24
|
function create(uri, version, root, diagnostics = []) {
|
|
24
|
-
return { uri, version, root, diagnostics };
|
|
25
|
+
return { uri, version: asSnapshotVersion(version), root, diagnostics };
|
|
25
26
|
}
|
|
26
27
|
AstDocument.create = create;
|
|
27
28
|
/**
|
|
@@ -37,6 +38,11 @@ export var AstDocument;
|
|
|
37
38
|
* carry that identity, not the subscriber's (possibly non-canonical) URI:
|
|
38
39
|
* a subscriber already knows the URI it subscribed with, so the useful
|
|
39
40
|
* thing to surface is the canonical one every other layer keys by.
|
|
41
|
+
*
|
|
42
|
+
* Narrowing `TDiagnostic` below the constraint asserts that the validators
|
|
43
|
+
* in play produce that shape, and nothing here checks it: the build fills the
|
|
44
|
+
* array, so a document carrying a diagnostic from elsewhere — a lexer error,
|
|
45
|
+
* another validator — satisfies the declared type and not the narrowed one.
|
|
40
46
|
*/
|
|
41
47
|
function from(document) {
|
|
42
48
|
return create(document.textDocument.uri, document.textDocument.version, document.parseResult.value, (document.diagnostics ?? []));
|
|
@@ -63,9 +69,12 @@ export var AstDocument;
|
|
|
63
69
|
* resolution (the egress `applyEditToLanguageClient`) stay on
|
|
64
70
|
* {@link HydraniumTextDocuments}, their owner.
|
|
65
71
|
*/
|
|
66
|
-
export class
|
|
72
|
+
export class DefaultAstDocumentManager {
|
|
67
73
|
services;
|
|
68
74
|
lastUpdate;
|
|
75
|
+
/** Per canonical URI, the newest save queued for it, which {@link coalesceSaves} lets older queued saves defer to. */
|
|
76
|
+
newestSaves = new Map();
|
|
77
|
+
coalesceSaves;
|
|
69
78
|
textDocuments;
|
|
70
79
|
fileSystemProvider;
|
|
71
80
|
langiumDocs;
|
|
@@ -80,10 +89,17 @@ export class AstDocumentManager {
|
|
|
80
89
|
this.documentBuilder = services.workspace.DocumentBuilder;
|
|
81
90
|
this.uriPolicy = services.workspace.DocumentUriPolicy;
|
|
82
91
|
this.tracer = services.Tracer.for(options.logName ?? 'AstDocumentManager').trace('instantiated');
|
|
92
|
+
this.coalesceSaves = options.coalesceSaves ?? false;
|
|
83
93
|
this.textDocuments.onDidOpen(event => this.open({ clientId: event.clientId, uri: event.document.uri, languageId: event.document.languageId }));
|
|
84
94
|
this.textDocuments.onDidClose(event => this.close({ clientId: event.clientId, uri: event.document.uri }));
|
|
85
95
|
this.documentBuilder.onUpdate((changed, deleted) => {
|
|
86
96
|
this.lastUpdate = { changed, deleted };
|
|
97
|
+
// The only place a deletion is observable: `DocumentBuilder.update`
|
|
98
|
+
// removes a deleted document before it builds anything, so no phase
|
|
99
|
+
// listener ever sees it.
|
|
100
|
+
for (const uri of deleted) {
|
|
101
|
+
this.textDocuments.notifyDocumentDeleted(uri.toString());
|
|
102
|
+
}
|
|
87
103
|
});
|
|
88
104
|
// Content transitions for CLOSED documents bypass the text store: the
|
|
89
105
|
// last-close revert and watched-file changes rebuild from disk into a
|
|
@@ -176,11 +192,12 @@ export class AstDocumentManager {
|
|
|
176
192
|
const event = {
|
|
177
193
|
document: this.toAstDocument(document),
|
|
178
194
|
sourceClientId,
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
195
|
+
// No `'deleted'` arm: `DocumentBuilder.update` drops a deleted
|
|
196
|
+
// document from `LangiumDocuments` before deriving the rebuild set
|
|
197
|
+
// from it, so a deleted URI is never built and never reaches this
|
|
198
|
+
// phase listener. A subscriber needing deletions has to be told on
|
|
199
|
+
// a channel that does not require a built document.
|
|
200
|
+
reason: this.lastUpdate?.changed.some(changed => UriUtils.equals(changed, document.uri)) ? 'changed' : 'rebuilt'
|
|
184
201
|
};
|
|
185
202
|
this.tracer.with(uri).trace(`emitUpdate start: source=${sourceClientId}, reason=${event.reason}`);
|
|
186
203
|
listener(event);
|
|
@@ -192,8 +209,8 @@ export class AstDocumentManager {
|
|
|
192
209
|
* The client that authored `document`'s current version, or `undefined` when
|
|
193
210
|
* no client wrote it — a framework-internal rebuild (workspace startup, a
|
|
194
211
|
* cascade relink, a `didClose`-reload) or a genuine author gap. Honest about
|
|
195
|
-
* absence so routing
|
|
196
|
-
*
|
|
212
|
+
* absence so a routing consumer tests `undefined` directly rather than
|
|
213
|
+
* against a sentinel; the presentation
|
|
197
214
|
* default ({@link UNKNOWN_CLIENT_ID}) is applied at the boundary that needs a
|
|
198
215
|
* concrete value (the `onUpdate` event's `sourceClientId`, the data-server's
|
|
199
216
|
* `resolveSourceClientId`).
|
|
@@ -203,9 +220,9 @@ export class AstDocumentManager {
|
|
|
203
220
|
}
|
|
204
221
|
async open(args) {
|
|
205
222
|
// `open()` is the RPC-level "ensure this document is loaded" call. It is issued
|
|
206
|
-
// by a
|
|
207
|
-
//
|
|
208
|
-
//
|
|
223
|
+
// by a session opening the document, including by every additional client
|
|
224
|
+
// attaching to the same URI and the several sub-editors a composite view
|
|
225
|
+
// opens. When the document is already loaded there is nothing to
|
|
209
226
|
// do here but hand back the close-disposable — callers that want the current
|
|
210
227
|
// state read it from this method's surrounding RPC response, not from a re-build.
|
|
211
228
|
//
|
|
@@ -218,7 +235,18 @@ export class AstDocumentManager {
|
|
|
218
235
|
// transiently breaks cross-document linking mid-rebuild (a dependent briefly
|
|
219
236
|
// seeing an `extends`/`type` reference unresolved). And because the constructor
|
|
220
237
|
// wires `onDidOpen -> this.open`, it would fire a second, identical rebuild on
|
|
221
|
-
// every first open.
|
|
238
|
+
// every first open.
|
|
239
|
+
//
|
|
240
|
+
// So an already-open `open()` records the attaching client's open and nothing
|
|
241
|
+
// else. The open is per `(uri, clientId)` and the last-close revert counts down
|
|
242
|
+
// to it, so skipping it lets the first client's close tear down a document
|
|
243
|
+
// another client is still reading. A document waiting out the revert grace
|
|
244
|
+
// is still loaded: a client lost from it within its own grace attaches and
|
|
245
|
+
// keeps its text, and for any other client the attach releases it, so the
|
|
246
|
+
// open reads the file.
|
|
247
|
+
if (this.isOpen(args.uri)) {
|
|
248
|
+
this.textDocuments.attachClient(args.uri, args.clientId);
|
|
249
|
+
}
|
|
222
250
|
if (!this.isOpen(args.uri)) {
|
|
223
251
|
const textDocument = await this.createDocumentFromTextOrFileSystem(args.uri, args.languageId, args.version, args.text);
|
|
224
252
|
this.textDocuments.notifyDidOpenTextDocument({ textDocument }, args.clientId);
|
|
@@ -253,27 +281,75 @@ export class AstDocumentManager {
|
|
|
253
281
|
* callers don't need to pass it — the manager owns content and version
|
|
254
282
|
* sequencing.
|
|
255
283
|
*
|
|
284
|
+
* The text is taken synchronously, before the save waits in the file's task
|
|
285
|
+
* queue; the compare and the write run in the queue. Taken later, a save
|
|
286
|
+
* that waits behind another writes whatever the store holds when its turn
|
|
287
|
+
* comes, edits made after the call included, and announces that text under
|
|
288
|
+
* its own client id.
|
|
289
|
+
*
|
|
290
|
+
* **The write is skipped when the file already holds that text; the
|
|
291
|
+
* notification is not.** A save announces that the content is on disk, which
|
|
292
|
+
* is true either way — so a subscriber clearing a dirty marker or reacting to
|
|
293
|
+
* a persist behaves the same, while an mtime is not moved for byte-identical
|
|
294
|
+
* content that a downstream mtime-keyed build would then read as new work.
|
|
295
|
+
*
|
|
256
296
|
* Throws if no document is open for `uri`.
|
|
257
297
|
*/
|
|
258
298
|
async save(uri, clientId) {
|
|
259
|
-
|
|
299
|
+
// Canonical throughout: the write and the read that gates it must address
|
|
300
|
+
// the same file the store was keyed by, or a divergent spelling compares
|
|
301
|
+
// one file and writes another.
|
|
302
|
+
const canonical = this.uriPolicy.canonicalUri(uri);
|
|
303
|
+
const document = this.textDocuments.get(canonical);
|
|
260
304
|
if (!document) {
|
|
261
305
|
throw new Error(`Document ${uri} hasn't been opened for saving yet`);
|
|
262
306
|
}
|
|
263
307
|
const text = document.getText();
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
308
|
+
let supersededBy;
|
|
309
|
+
const saved = this.services.workspace.FileSystemTaskQueue.enqueue(canonical, async () => {
|
|
310
|
+
const newest = this.newestSaves.get(canonical);
|
|
311
|
+
if (this.coalesceSaves && newest !== saved) {
|
|
312
|
+
supersededBy = newest;
|
|
313
|
+
return;
|
|
314
|
+
}
|
|
315
|
+
await this.writeSave(canonical, text, clientId);
|
|
316
|
+
})
|
|
317
|
+
.then(() => supersededBy)
|
|
318
|
+
.finally(() => {
|
|
319
|
+
if (this.newestSaves.get(canonical) === saved) {
|
|
320
|
+
this.newestSaves.delete(canonical);
|
|
321
|
+
}
|
|
322
|
+
});
|
|
323
|
+
this.newestSaves.set(canonical, saved);
|
|
324
|
+
return saved;
|
|
325
|
+
}
|
|
326
|
+
/** Write `text` to `uri` unless the file already holds it, then announce the save. Runs inside the file's task queue. */
|
|
327
|
+
async writeSave(uri, text, clientId) {
|
|
328
|
+
if (!(await this.matchesDisk(uri, text))) {
|
|
329
|
+
await this.tracer.with(uri).time(`Write file (${text.length} bytes, from ${clientId})`,
|
|
330
|
+
// Async write so a slow disk does not block the event loop for the duration of the fs call.
|
|
331
|
+
() => this.fileSystemProvider.writeFile(UriUtils.toUri(uri), text), 'debug');
|
|
332
|
+
}
|
|
267
333
|
this.textDocuments.notifyDidSaveTextDocument({ textDocument: TextDocumentIdentifier.create(uri), text }, clientId);
|
|
268
334
|
}
|
|
335
|
+
/**
|
|
336
|
+
* Whether the file at `uri` already holds `text`.
|
|
337
|
+
*
|
|
338
|
+
* Compared by CONTENT rather than against a remembered version, so a write
|
|
339
|
+
* from outside this server is still corrected: a version this manager already
|
|
340
|
+
* saved says nothing about what is on disk now. `false` when the file cannot
|
|
341
|
+
* be read at all, which is the answer that writes — a document whose file does
|
|
342
|
+
* not exist yet is exactly the one a first save has to create.
|
|
343
|
+
*/
|
|
344
|
+
async matchesDisk(uri, text) {
|
|
345
|
+
return this.fileSystemProvider
|
|
346
|
+
.readFile(UriUtils.toUri(uri))
|
|
347
|
+
.then(onDisk => onDisk === text)
|
|
348
|
+
.catch(() => false);
|
|
349
|
+
}
|
|
269
350
|
isOpen(uri) {
|
|
270
351
|
return !!this.textDocuments.get(uri);
|
|
271
352
|
}
|
|
272
|
-
/** True if the URI was in the directly-changed set of the most recent build (not just affected). */
|
|
273
|
-
isDirectChange(uri) {
|
|
274
|
-
const canonical = this.uriPolicy.canonicalUri(uri);
|
|
275
|
-
return this.lastUpdate?.changed.some(changed => this.uriPolicy.canonicalUri(changed) === canonical) ?? false;
|
|
276
|
-
}
|
|
277
353
|
/**
|
|
278
354
|
* The `LangiumDocument` for an externally-supplied URI, looked up by its
|
|
279
355
|
* canonical identity. Folds the `getDocument(toUri(canonicalUri(uri)))` idiom
|
|
@@ -285,10 +361,15 @@ export class AstDocumentManager {
|
|
|
285
361
|
return this.langiumDocs.getDocument(UriUtils.toUri(this.uriPolicy.canonicalUri(uri)));
|
|
286
362
|
}
|
|
287
363
|
async createDocumentFromTextOrFileSystem(uri, languageId = this.resolveLanguageId(uri), version = 0, text) {
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
364
|
+
// Read in the file's task queue: a read beside a queued save of the file
|
|
365
|
+
// returns the text from before it, and the document then opens on that.
|
|
366
|
+
return {
|
|
367
|
+
uri,
|
|
368
|
+
languageId,
|
|
369
|
+
version,
|
|
370
|
+
text: text ??
|
|
371
|
+
(await this.services.workspace.FileSystemTaskQueue.enqueue(uri, () => this.fileSystemProvider.readFile(UriUtils.toUri(uri))))
|
|
372
|
+
};
|
|
292
373
|
}
|
|
293
374
|
/**
|
|
294
375
|
* Hook for subclasses that want to re-shape the emitted document (e.g. inject
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ast-document-manager.js","sourceRoot":"","sources":["../../src/documents/ast-document-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;
|
|
1
|
+
{"version":3,"file":"ast-document-manager.js","sourceRoot":"","sources":["../../src/documents/ast-document-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,24 +7,10 @@
|
|
|
7
7
|
* SPDX-License-Identifier: MIT
|
|
8
8
|
********************************************************************************/
|
|
9
9
|
/**
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
* client, and/or a structured-form client. Each kind carries a stable id so
|
|
15
|
-
* the server can route outbound corrections, edits, and notifications to the
|
|
16
|
-
* right transport.
|
|
17
|
-
*/
|
|
18
|
-
/** Identifier for an LSP-text client (Monaco, VS Code, …). */
|
|
19
|
-
export declare const LANGUAGE_CLIENT_ID = "language-client";
|
|
20
|
-
/** Fallback identifier when a document's author is unknown (e.g. cold workspace-init load). */
|
|
21
|
-
export declare const UNKNOWN_CLIENT_ID = "unknown";
|
|
22
|
-
/**
|
|
23
|
-
* Synthetic author id on the `onDocumentUpdated` broadcast a data-server
|
|
24
|
-
* emits after the LAST client closed a document and the framework rebuilt it
|
|
25
|
-
* from its disk content (discarding unsaved in-session edits). Not a real
|
|
26
|
-
* client: it lets consumers distinguish the revert broadcast from
|
|
27
|
-
* client-authored updates.
|
|
10
|
+
* Re-export, because these are WIRE values and the side that has to recognise
|
|
11
|
+
* them is the client. They are defined in `@hydranium/protocol` so a frontend
|
|
12
|
+
* can name them without depending on the server tier; this path stays so
|
|
13
|
+
* server-side code keeps importing them from where it already does.
|
|
28
14
|
*/
|
|
29
|
-
export
|
|
15
|
+
export { FRAMEWORK_CLIENT_IDS, LANGUAGE_CLIENT_ID, REVERT_ON_CLOSE_CLIENT_ID, UNKNOWN_CLIENT_ID } from '@hydranium/protocol';
|
|
30
16
|
//# sourceMappingURL=client-ids.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client-ids.d.ts","sourceRoot":"","sources":["../../src/documents/client-ids.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF
|
|
1
|
+
{"version":3,"file":"client-ids.d.ts","sourceRoot":"","sources":["../../src/documents/client-ids.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF;;;;;GAKG;AACH,OAAO,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,yBAAyB,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC"}
|
|
@@ -7,24 +7,10 @@
|
|
|
7
7
|
* SPDX-License-Identifier: MIT
|
|
8
8
|
********************************************************************************/
|
|
9
9
|
/**
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
* client, and/or a structured-form client. Each kind carries a stable id so
|
|
15
|
-
* the server can route outbound corrections, edits, and notifications to the
|
|
16
|
-
* right transport.
|
|
17
|
-
*/
|
|
18
|
-
/** Identifier for an LSP-text client (Monaco, VS Code, …). */
|
|
19
|
-
export const LANGUAGE_CLIENT_ID = 'language-client';
|
|
20
|
-
/** Fallback identifier when a document's author is unknown (e.g. cold workspace-init load). */
|
|
21
|
-
export const UNKNOWN_CLIENT_ID = 'unknown';
|
|
22
|
-
/**
|
|
23
|
-
* Synthetic author id on the `onDocumentUpdated` broadcast a data-server
|
|
24
|
-
* emits after the LAST client closed a document and the framework rebuilt it
|
|
25
|
-
* from its disk content (discarding unsaved in-session edits). Not a real
|
|
26
|
-
* client: it lets consumers distinguish the revert broadcast from
|
|
27
|
-
* client-authored updates.
|
|
10
|
+
* Re-export, because these are WIRE values and the side that has to recognise
|
|
11
|
+
* them is the client. They are defined in `@hydranium/protocol` so a frontend
|
|
12
|
+
* can name them without depending on the server tier; this path stays so
|
|
13
|
+
* server-side code keeps importing them from where it already does.
|
|
28
14
|
*/
|
|
29
|
-
export
|
|
15
|
+
export { FRAMEWORK_CLIENT_IDS, LANGUAGE_CLIENT_ID, REVERT_ON_CLOSE_CLIENT_ID, UNKNOWN_CLIENT_ID } from '@hydranium/protocol';
|
|
30
16
|
//# sourceMappingURL=client-ids.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client-ids.js","sourceRoot":"","sources":["../../src/documents/client-ids.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF
|
|
1
|
+
{"version":3,"file":"client-ids.js","sourceRoot":"","sources":["../../src/documents/client-ids.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF;;;;;GAKG;AACH,OAAO,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,yBAAyB,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/********************************************************************************
|
|
2
|
+
* Copyright (c) 2026 CrossBreeze, EclipseSource and others.
|
|
3
|
+
*
|
|
4
|
+
* This program and the accompanying materials are made available under the
|
|
5
|
+
* terms of the MIT License which is available in the project root.
|
|
6
|
+
*
|
|
7
|
+
* SPDX-License-Identifier: MIT
|
|
8
|
+
********************************************************************************/
|
|
9
|
+
/**
|
|
10
|
+
* Re-export, because these errors cross the wire and the side that has to
|
|
11
|
+
* recognise them is the client. They are defined in `@hydranium/protocol` so a
|
|
12
|
+
* frontend can name them without depending on the server tier.
|
|
13
|
+
*/
|
|
14
|
+
export { DocumentNotOpenError, DuplicateClientIdError, SessionClosedError, isDocumentNotOpenError, isDuplicateClientIdError, isSessionClosedError } from '@hydranium/protocol';
|
|
15
|
+
//# sourceMappingURL=client-session-errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client-session-errors.d.ts","sourceRoot":"","sources":["../../src/documents/client-session-errors.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF;;;;GAIG;AACH,OAAO,EACJ,oBAAoB,EACpB,sBAAsB,EACtB,kBAAkB,EAClB,sBAAsB,EACtB,wBAAwB,EACxB,oBAAoB,EACtB,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/********************************************************************************
|
|
2
|
+
* Copyright (c) 2026 CrossBreeze, EclipseSource and others.
|
|
3
|
+
*
|
|
4
|
+
* This program and the accompanying materials are made available under the
|
|
5
|
+
* terms of the MIT License which is available in the project root.
|
|
6
|
+
*
|
|
7
|
+
* SPDX-License-Identifier: MIT
|
|
8
|
+
********************************************************************************/
|
|
9
|
+
/**
|
|
10
|
+
* Re-export, because these errors cross the wire and the side that has to
|
|
11
|
+
* recognise them is the client. They are defined in `@hydranium/protocol` so a
|
|
12
|
+
* frontend can name them without depending on the server tier.
|
|
13
|
+
*/
|
|
14
|
+
export { DocumentNotOpenError, DuplicateClientIdError, SessionClosedError, isDocumentNotOpenError, isDuplicateClientIdError, isSessionClosedError } from '@hydranium/protocol';
|
|
15
|
+
//# sourceMappingURL=client-session-errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client-session-errors.js","sourceRoot":"","sources":["../../src/documents/client-session-errors.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF;;;;GAIG;AACH,OAAO,EACJ,oBAAoB,EACpB,sBAAsB,EACtB,kBAAkB,EAClB,sBAAsB,EACtB,wBAAwB,EACxB,oBAAoB,EACtB,MAAM,qBAAqB,CAAC"}
|