@hydranium/core 1.0.0-next.34 → 1.0.0-next.341
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 +78 -82
- package/lib/browser/host-heads-in-worker.d.ts +77 -0
- package/lib/browser/host-heads-in-worker.d.ts.map +1 -0
- package/lib/browser/host-heads-in-worker.js +169 -0
- package/lib/browser/host-heads-in-worker.js.map +1 -0
- package/lib/browser/index.d.ts +12 -0
- package/lib/browser/index.d.ts.map +1 -0
- package/lib/browser/index.js +17 -0
- package/lib/browser/index.js.map +1 -0
- package/lib/browser/indexeddb-file-system-store.d.ts +82 -0
- package/lib/browser/indexeddb-file-system-store.d.ts.map +1 -0
- package/lib/browser/indexeddb-file-system-store.js +181 -0
- package/lib/browser/indexeddb-file-system-store.js.map +1 -0
- package/lib/browser/start-language-server-in-worker.d.ts +32 -0
- package/lib/browser/start-language-server-in-worker.d.ts.map +1 -0
- package/lib/browser/start-language-server-in-worker.js +40 -0
- package/lib/browser/start-language-server-in-worker.js.map +1 -0
- package/lib/documents/ast-document-manager.d.ts +256 -124
- package/lib/documents/ast-document-manager.d.ts.map +1 -1
- package/lib/documents/ast-document-manager.js +293 -132
- 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 +146 -0
- package/lib/documents/client-session-registry.d.ts.map +1 -0
- package/lib/documents/client-session-registry.js +207 -0
- package/lib/documents/client-session-registry.js.map +1 -0
- package/lib/documents/dirty-state-tracker.d.ts +101 -0
- package/lib/documents/dirty-state-tracker.d.ts.map +1 -0
- package/lib/documents/dirty-state-tracker.js +85 -0
- package/lib/documents/dirty-state-tracker.js.map +1 -0
- package/lib/documents/document-release-handler.d.ts +204 -0
- package/lib/documents/document-release-handler.d.ts.map +1 -0
- package/lib/documents/document-release-handler.js +317 -0
- package/lib/documents/document-release-handler.js.map +1 -0
- package/lib/documents/document-release-scheduler.d.ts +67 -0
- package/lib/documents/document-release-scheduler.d.ts.map +1 -0
- package/lib/documents/document-release-scheduler.js +80 -0
- package/lib/documents/document-release-scheduler.js.map +1 -0
- package/lib/documents/file-system-task-queue.d.ts +52 -0
- package/lib/documents/file-system-task-queue.d.ts.map +1 -0
- package/lib/documents/file-system-task-queue.js +37 -0
- package/lib/documents/file-system-task-queue.js.map +1 -0
- package/lib/documents/hydranium-text-documents.d.ts +445 -282
- package/lib/documents/hydranium-text-documents.d.ts.map +1 -1
- package/lib/documents/hydranium-text-documents.js +903 -483
- package/lib/documents/hydranium-text-documents.js.map +1 -1
- package/lib/documents/index.d.ts +10 -2
- package/lib/documents/index.d.ts.map +1 -1
- package/lib/documents/index.js +10 -2
- package/lib/documents/index.js.map +1 -1
- package/lib/documents/language-client-shadow.d.ts +234 -0
- package/lib/documents/language-client-shadow.d.ts.map +1 -0
- package/lib/documents/language-client-shadow.js +306 -0
- package/lib/documents/language-client-shadow.js.map +1 -0
- package/lib/documents/model-ledger.d.ts +47 -0
- package/lib/documents/model-ledger.d.ts.map +1 -0
- package/lib/documents/model-ledger.js +30 -0
- package/lib/documents/model-ledger.js.map +1 -0
- package/lib/documents/text-ledger.d.ts +64 -0
- package/lib/documents/text-ledger.d.ts.map +1 -0
- package/lib/documents/text-ledger.js +63 -0
- package/lib/documents/text-ledger.js.map +1 -0
- package/lib/documents/version-sync-service.d.ts +138 -0
- package/lib/documents/version-sync-service.d.ts.map +1 -0
- package/lib/documents/version-sync-service.js +173 -0
- package/lib/documents/version-sync-service.js.map +1 -0
- package/lib/index.d.ts +4 -0
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +7 -0
- package/lib/index.js.map +1 -1
- package/lib/langium/ast-extension/ast-extension-service.d.ts +42 -31
- package/lib/langium/ast-extension/ast-extension-service.d.ts.map +1 -1
- package/lib/langium/ast-extension/ast-extension-service.js +45 -19
- package/lib/langium/ast-extension/ast-extension-service.js.map +1 -1
- package/lib/langium/ast-extension/ast-node-builder.d.ts +12 -7
- package/lib/langium/ast-extension/ast-node-builder.d.ts.map +1 -1
- package/lib/langium/ast-extension/ast-node-builder.js +25 -9
- package/lib/langium/ast-extension/ast-node-builder.js.map +1 -1
- package/lib/langium/bootstrap.d.ts +49 -36
- package/lib/langium/bootstrap.d.ts.map +1 -1
- package/lib/langium/bootstrap.js +83 -44
- package/lib/langium/bootstrap.js.map +1 -1
- package/lib/langium/build-phase-pass/build-phase-pass-service.d.ts +9 -9
- package/lib/langium/build-phase-pass/build-phase-pass-service.d.ts.map +1 -1
- package/lib/langium/build-phase-pass/build-phase-pass-service.js +25 -16
- package/lib/langium/build-phase-pass/build-phase-pass-service.js.map +1 -1
- package/lib/langium/build-phase-pass/build-phase-pass.d.ts +20 -8
- package/lib/langium/build-phase-pass/build-phase-pass.d.ts.map +1 -1
- package/lib/langium/build-phase-pass/build-phase-pass.js +20 -0
- package/lib/langium/build-phase-pass/build-phase-pass.js.map +1 -1
- package/lib/langium/composite-ast-reflection.d.ts +46 -0
- package/lib/langium/composite-ast-reflection.d.ts.map +1 -0
- package/lib/langium/composite-ast-reflection.js +97 -0
- package/lib/langium/composite-ast-reflection.js.map +1 -0
- 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/config/settings.js.map +1 -1
- package/lib/langium/diagnostics/console-tee.d.ts +27 -0
- package/lib/langium/diagnostics/console-tee.d.ts.map +1 -0
- package/lib/langium/diagnostics/console-tee.js +142 -0
- package/lib/langium/diagnostics/console-tee.js.map +1 -0
- package/lib/langium/diagnostics/format-log-arg.d.ts +18 -0
- package/lib/langium/diagnostics/format-log-arg.d.ts.map +1 -0
- package/lib/langium/diagnostics/format-log-arg.js +36 -0
- package/lib/langium/diagnostics/format-log-arg.js.map +1 -0
- package/lib/langium/diagnostics/hydranium-langium-profiler.d.ts +9 -20
- package/lib/langium/diagnostics/hydranium-langium-profiler.d.ts.map +1 -1
- package/lib/langium/diagnostics/hydranium-langium-profiler.js +15 -24
- package/lib/langium/diagnostics/hydranium-langium-profiler.js.map +1 -1
- package/lib/langium/diagnostics/log-preamble.js +1 -1
- package/lib/langium/diagnostics/log-preamble.js.map +1 -1
- package/lib/langium/diagnostics/logger.d.ts +25 -6
- package/lib/langium/diagnostics/logger.d.ts.map +1 -1
- package/lib/langium/diagnostics/logger.js +49 -17
- package/lib/langium/diagnostics/logger.js.map +1 -1
- package/lib/langium/diagnostics/lsp-logger.d.ts +25 -0
- package/lib/langium/diagnostics/lsp-logger.d.ts.map +1 -1
- package/lib/langium/diagnostics/lsp-logger.js +81 -45
- package/lib/langium/diagnostics/lsp-logger.js.map +1 -1
- package/lib/langium/diagnostics/server-tracer.d.ts.map +1 -1
- package/lib/langium/diagnostics/server-tracer.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 +28 -30
- package/lib/langium/document-builder/build-pipeline-integration.js.map +1 -1
- package/lib/langium/document-builder/build-session.d.ts +6 -5
- package/lib/langium/document-builder/build-session.d.ts.map +1 -1
- package/lib/langium/document-builder/build-session.js +5 -5
- package/lib/langium/document-builder/build-session.js.map +1 -1
- package/lib/langium/document-builder/document-builder.d.ts +283 -41
- package/lib/langium/document-builder/document-builder.d.ts.map +1 -1
- package/lib/langium/document-builder/document-builder.js +449 -79
- package/lib/langium/document-builder/document-builder.js.map +1 -1
- package/lib/langium/documentation/comment-provider.d.ts.map +1 -1
- package/lib/langium/documentation/comment-provider.js.map +1 -1
- package/lib/langium/integration-services.d.ts +40 -24
- package/lib/langium/integration-services.d.ts.map +1 -1
- package/lib/langium/integration-services.js +7 -4
- package/lib/langium/integration-services.js.map +1 -1
- package/lib/langium/integrity/integrity-rule.d.ts +17 -8
- 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 +95 -27
- package/lib/langium/integrity/integrity-service.d.ts.map +1 -1
- package/lib/langium/integrity/integrity-service.js +303 -63
- package/lib/langium/integrity/integrity-service.js.map +1 -1
- package/lib/langium/keys/name-based-key-provider.d.ts.map +1 -1
- package/lib/langium/keys/name-based-key-provider.js.map +1 -1
- package/lib/langium/keys/positional-key-provider.d.ts.map +1 -1
- package/lib/langium/keys/positional-key-provider.js.map +1 -1
- package/lib/langium/labeling/label-provider.d.ts.map +1 -1
- package/lib/langium/labeling/label-provider.js.map +1 -1
- package/lib/langium/language-module.d.ts +30 -5
- package/lib/langium/language-module.d.ts.map +1 -1
- package/lib/langium/language-module.js +18 -4
- package/lib/langium/language-module.js.map +1 -1
- package/lib/langium/model-service/client-session.d.ts +383 -0
- package/lib/langium/model-service/client-session.d.ts.map +1 -0
- package/lib/langium/model-service/client-session.js +455 -0
- package/lib/langium/model-service/client-session.js.map +1 -0
- package/lib/langium/model-service/index.d.ts +2 -0
- package/lib/langium/model-service/index.d.ts.map +1 -1
- package/lib/langium/model-service/index.js +2 -0
- package/lib/langium/model-service/index.js.map +1 -1
- package/lib/langium/model-service/model-events.d.ts +66 -0
- package/lib/langium/model-service/model-events.d.ts.map +1 -0
- package/lib/langium/model-service/model-events.js +10 -0
- package/lib/langium/model-service/model-events.js.map +1 -0
- package/lib/langium/model-service/model-service.d.ts +456 -300
- package/lib/langium/model-service/model-service.d.ts.map +1 -1
- package/lib/langium/model-service/model-service.js +571 -466
- package/lib/langium/model-service/model-service.js.map +1 -1
- package/lib/langium/module.d.ts +141 -40
- package/lib/langium/module.d.ts.map +1 -1
- package/lib/langium/module.js +52 -40
- package/lib/langium/module.js.map +1 -1
- package/lib/langium/naming/name-provider.d.ts +32 -7
- package/lib/langium/naming/name-provider.d.ts.map +1 -1
- package/lib/langium/naming/name-provider.js +10 -4
- package/lib/langium/naming/name-provider.js.map +1 -1
- package/lib/langium/naming/name-separator-validation.d.ts.map +1 -1
- package/lib/langium/project/abstract-project-manager.d.ts.map +1 -1
- package/lib/langium/project/abstract-project-manager.js +13 -6
- package/lib/langium/project/abstract-project-manager.js.map +1 -1
- package/lib/langium/project/project-change-event.d.ts +2 -2
- package/lib/langium/project/single-project-manager.d.ts.map +1 -1
- package/lib/langium/project/single-project-manager.js.map +1 -1
- package/lib/langium/residency/cst-residency-service.d.ts +38 -14
- package/lib/langium/residency/cst-residency-service.d.ts.map +1 -1
- package/lib/langium/residency/cst-residency-service.js +24 -58
- package/lib/langium/residency/cst-residency-service.js.map +1 -1
- package/lib/langium/scope/ast-node-description-provider.d.ts.map +1 -1
- package/lib/langium/scope/ast-node-description-provider.js.map +1 -1
- package/lib/langium/scope/fallback-scope.d.ts +27 -0
- package/lib/langium/scope/fallback-scope.d.ts.map +1 -0
- package/lib/langium/scope/fallback-scope.js +35 -0
- package/lib/langium/scope/fallback-scope.js.map +1 -0
- package/lib/langium/scope/hydranium-scope-computation.d.ts +21 -18
- package/lib/langium/scope/hydranium-scope-computation.d.ts.map +1 -1
- package/lib/langium/scope/hydranium-scope-computation.js +38 -39
- package/lib/langium/scope/hydranium-scope-computation.js.map +1 -1
- package/lib/langium/scope/hydranium-scope-provider.d.ts +66 -26
- package/lib/langium/scope/hydranium-scope-provider.d.ts.map +1 -1
- package/lib/langium/scope/hydranium-scope-provider.js +114 -33
- package/lib/langium/scope/hydranium-scope-provider.js.map +1 -1
- package/lib/langium/scope/index.d.ts +1 -0
- package/lib/langium/scope/index.d.ts.map +1 -1
- package/lib/langium/scope/index.js +1 -0
- package/lib/langium/scope/index.js.map +1 -1
- package/lib/langium/scope/reference-builder.d.ts.map +1 -1
- package/lib/langium/scope/reference-builder.js.map +1 -1
- package/lib/langium/scope/reference-candidate-provider.d.ts +6 -5
- package/lib/langium/scope/reference-candidate-provider.d.ts.map +1 -1
- package/lib/langium/scope/reference-candidate-provider.js +3 -2
- package/lib/langium/scope/reference-candidate-provider.js.map +1 -1
- package/lib/langium/scope/scope-extension-service.d.ts +41 -37
- package/lib/langium/scope/scope-extension-service.d.ts.map +1 -1
- package/lib/langium/scope/scope-extension-service.js +57 -29
- package/lib/langium/scope/scope-extension-service.js.map +1 -1
- package/lib/langium/scope/scoped-ast-node-description.d.ts +1 -3
- package/lib/langium/scope/scoped-ast-node-description.d.ts.map +1 -1
- package/lib/langium/scope/scoped-ast-node-description.js +1 -3
- package/lib/langium/scope/scoped-ast-node-description.js.map +1 -1
- package/lib/langium/serialization/abstract-serializer.d.ts +38 -27
- package/lib/langium/serialization/abstract-serializer.d.ts.map +1 -1
- package/lib/langium/serialization/abstract-serializer.js +54 -30
- package/lib/langium/serialization/abstract-serializer.js.map +1 -1
- package/lib/langium/serialization/json-serializer.d.ts +8 -1
- package/lib/langium/serialization/json-serializer.d.ts.map +1 -1
- package/lib/langium/serialization/json-serializer.js +13 -3
- package/lib/langium/serialization/json-serializer.js.map +1 -1
- package/lib/langium/serialization/serializer.d.ts +1 -1
- package/lib/langium/serialization/yaml-serializer.d.ts +4 -0
- package/lib/langium/serialization/yaml-serializer.d.ts.map +1 -1
- package/lib/langium/serialization/yaml-serializer.js +4 -0
- package/lib/langium/serialization/yaml-serializer.js.map +1 -1
- package/lib/langium/service-registry.d.ts +29 -1
- package/lib/langium/service-registry.d.ts.map +1 -1
- package/lib/langium/service-registry.js +37 -0
- package/lib/langium/service-registry.js.map +1 -1
- package/lib/langium/shared-services.d.ts +13 -7
- package/lib/langium/shared-services.d.ts.map +1 -1
- package/lib/langium/shared-services.js.map +1 -1
- package/lib/langium/single-langium-copy.d.ts +22 -0
- package/lib/langium/single-langium-copy.d.ts.map +1 -0
- package/lib/langium/single-langium-copy.js +36 -0
- package/lib/langium/single-langium-copy.js.map +1 -0
- package/lib/langium/transfer/transfer-encoder.d.ts +86 -37
- package/lib/langium/transfer/transfer-encoder.d.ts.map +1 -1
- package/lib/langium/transfer/transfer-encoder.js +36 -25
- package/lib/langium/transfer/transfer-encoder.js.map +1 -1
- package/lib/langium/trivia/comment-preserver.d.ts +543 -0
- package/lib/langium/trivia/comment-preserver.d.ts.map +1 -0
- package/lib/langium/trivia/comment-preserver.js +1164 -0
- package/lib/langium/trivia/comment-preserver.js.map +1 -0
- package/lib/langium/trivia/document-ending-preserver.d.ts +51 -0
- package/lib/langium/trivia/document-ending-preserver.d.ts.map +1 -0
- package/lib/langium/trivia/document-ending-preserver.js +62 -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 +52 -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/normalize-empty-strings.d.ts.map +1 -1
- package/lib/langium/update-rewrite/update-rewrite-service.d.ts +1 -1
- package/lib/langium/update-rewrite/update-rewrite-service.d.ts.map +1 -1
- package/lib/langium/update-rewrite/update-rewrite-service.js.map +1 -1
- package/lib/langium/update-rewrite/update-rewrite.d.ts +1 -1
- package/lib/langium/validation/document-validator.d.ts +168 -23
- package/lib/langium/validation/document-validator.d.ts.map +1 -1
- package/lib/langium/validation/document-validator.js +264 -26
- package/lib/langium/validation/document-validator.js.map +1 -1
- package/lib/langium/validation/validation-contribution-collector.d.ts +9 -1
- package/lib/langium/validation/validation-contribution-collector.d.ts.map +1 -1
- package/lib/langium/validation/validation-contribution-collector.js +1 -1
- package/lib/langium/validation/validation-contribution-collector.js.map +1 -1
- package/lib/langium/workspace/document-uri-policy.d.ts +24 -15
- package/lib/langium/workspace/document-uri-policy.d.ts.map +1 -1
- package/lib/langium/workspace/document-uri-policy.js +22 -13
- package/lib/langium/workspace/document-uri-policy.js.map +1 -1
- package/lib/langium/workspace/file-not-found.d.ts +23 -0
- package/lib/langium/workspace/file-not-found.d.ts.map +1 -0
- package/lib/langium/workspace/file-not-found.js +31 -0
- package/lib/langium/workspace/file-not-found.js.map +1 -0
- package/lib/langium/workspace/file-system-provider.d.ts +167 -8
- package/lib/langium/workspace/file-system-provider.d.ts.map +1 -1
- package/lib/langium/workspace/file-system-provider.js +115 -13
- package/lib/langium/workspace/file-system-provider.js.map +1 -1
- package/lib/langium/workspace/hydranium-langium-document-factory.d.ts +31 -1
- package/lib/langium/workspace/hydranium-langium-document-factory.d.ts.map +1 -1
- package/lib/langium/workspace/hydranium-langium-document-factory.js +54 -0
- package/lib/langium/workspace/hydranium-langium-document-factory.js.map +1 -1
- package/lib/langium/workspace/hydranium-workspace-lock.d.ts +43 -1
- package/lib/langium/workspace/hydranium-workspace-lock.d.ts.map +1 -1
- package/lib/langium/workspace/hydranium-workspace-lock.js +58 -1
- package/lib/langium/workspace/hydranium-workspace-lock.js.map +1 -1
- package/lib/langium/workspace/hydranium-workspace-manager.d.ts +103 -21
- package/lib/langium/workspace/hydranium-workspace-manager.d.ts.map +1 -1
- package/lib/langium/workspace/hydranium-workspace-manager.js +184 -31
- package/lib/langium/workspace/hydranium-workspace-manager.js.map +1 -1
- package/lib/langium/workspace/in-memory-file-system-provider.d.ts +26 -9
- package/lib/langium/workspace/in-memory-file-system-provider.d.ts.map +1 -1
- package/lib/langium/workspace/in-memory-file-system-provider.js +45 -22
- package/lib/langium/workspace/in-memory-file-system-provider.js.map +1 -1
- package/lib/langium/workspace/index-manager.d.ts.map +1 -1
- package/lib/langium/workspace/index-manager.js.map +1 -1
- package/lib/langium/workspace/index.d.ts +1 -0
- package/lib/langium/workspace/index.d.ts.map +1 -1
- package/lib/langium/workspace/index.js +1 -0
- package/lib/langium/workspace/index.js.map +1 -1
- package/lib/langium/workspace/initialize-workspace.d.ts +40 -3
- package/lib/langium/workspace/initialize-workspace.d.ts.map +1 -1
- package/lib/langium/workspace/initialize-workspace.js +68 -3
- package/lib/langium/workspace/initialize-workspace.js.map +1 -1
- package/lib/langium/workspace/langium-documents.d.ts +7 -0
- package/lib/langium/workspace/langium-documents.d.ts.map +1 -1
- package/lib/langium/workspace/langium-documents.js +18 -1
- package/lib/langium/workspace/langium-documents.js.map +1 -1
- package/lib/langium/workspace/persistent-file-system-provider.d.ts +16 -10
- package/lib/langium/workspace/persistent-file-system-provider.d.ts.map +1 -1
- package/lib/langium/workspace/persistent-file-system-provider.js +25 -13
- package/lib/langium/workspace/persistent-file-system-provider.js.map +1 -1
- package/lib/langium/workspace/self-save-registry.d.ts +84 -0
- package/lib/langium/workspace/self-save-registry.d.ts.map +1 -0
- package/lib/{documents → langium/workspace}/self-save-registry.js +33 -22
- package/lib/langium/workspace/self-save-registry.js.map +1 -0
- package/lib/langium/workspace/virtual-document.d.ts +55 -21
- package/lib/langium/workspace/virtual-document.d.ts.map +1 -1
- package/lib/langium/workspace/virtual-document.js +87 -24
- package/lib/langium/workspace/virtual-document.js.map +1 -1
- package/lib/langium/workspace/write-lock-scope.d.ts +22 -10
- package/lib/langium/workspace/write-lock-scope.d.ts.map +1 -1
- package/lib/langium/workspace/write-lock-scope.js +15 -5
- package/lib/langium/workspace/write-lock-scope.js.map +1 -1
- package/lib/launcher/integrated-server.d.ts +3 -1
- package/lib/launcher/integrated-server.d.ts.map +1 -1
- package/lib/locale/server-locale.d.ts +19 -5
- package/lib/locale/server-locale.d.ts.map +1 -1
- package/lib/locale/server-locale.js +1 -1
- package/lib/locale/server-locale.js.map +1 -1
- 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/edit-requests-guard.d.ts +31 -0
- package/lib/lsp/edit-requests-guard.d.ts.map +1 -0
- package/lib/lsp/edit-requests-guard.js +125 -0
- package/lib/lsp/edit-requests-guard.js.map +1 -0
- package/lib/lsp/hydranium-document-update-handler.d.ts +126 -82
- package/lib/lsp/hydranium-document-update-handler.d.ts.map +1 -1
- package/lib/lsp/hydranium-document-update-handler.js +235 -102
- package/lib/lsp/hydranium-document-update-handler.js.map +1 -1
- package/lib/lsp/index.d.ts +6 -2
- package/lib/lsp/index.d.ts.map +1 -1
- package/lib/lsp/index.js +6 -2
- 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/save-text-document.d.ts +31 -0
- package/lib/lsp/save-text-document.d.ts.map +1 -0
- package/lib/lsp/save-text-document.js +52 -0
- package/lib/lsp/save-text-document.js.map +1 -0
- package/lib/lsp/semantic-token-provider.d.ts +58 -2
- package/lib/lsp/semantic-token-provider.d.ts.map +1 -1
- package/lib/lsp/semantic-token-provider.js +98 -9
- 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 +12 -7
- package/lib/lsp/start-language-server.d.ts.map +1 -1
- package/lib/lsp/start-language-server.js +21 -7
- package/lib/lsp/start-language-server.js.map +1 -1
- package/lib/messages/carriers.d.ts +4 -6
- package/lib/messages/carriers.d.ts.map +1 -1
- package/lib/messages/carriers.js +4 -6
- package/lib/messages/carriers.js.map +1 -1
- package/lib/messages/index.d.ts +2 -2
- package/lib/messages/index.d.ts.map +1 -1
- package/lib/messages/index.js +2 -2
- package/lib/messages/index.js.map +1 -1
- package/lib/messages/renderer.d.ts +32 -7
- package/lib/messages/renderer.d.ts.map +1 -1
- package/lib/messages/renderer.js +7 -1
- package/lib/messages/renderer.js.map +1 -1
- package/lib/node/event-loop-monitor.d.ts.map +1 -1
- package/lib/node/event-loop-monitor.js +2 -1
- package/lib/node/event-loop-monitor.js.map +1 -1
- 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 -1
- package/lib/node/index.d.ts.map +1 -1
- package/lib/node/index.js +5 -1
- 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/lint-grammar.js.map +1 -1
- package/lib/node/log-file-sink.d.ts +3 -2
- package/lib/node/log-file-sink.d.ts.map +1 -1
- package/lib/node/log-file-sink.js +6 -2
- package/lib/node/log-file-sink.js.map +1 -1
- package/lib/node/log-preamble-node.d.ts +5 -3
- package/lib/node/log-preamble-node.d.ts.map +1 -1
- package/lib/node/log-preamble-node.js +13 -10
- package/lib/node/log-preamble-node.js.map +1 -1
- package/lib/node/measure-memory.d.ts.map +1 -1
- package/lib/node/measure-memory.js +5 -4
- package/lib/node/measure-memory.js.map +1 -1
- package/lib/node/memory-monitor.d.ts +2 -2
- package/lib/node/memory-monitor.d.ts.map +1 -1
- package/lib/node/memory-monitor.js +9 -10
- package/lib/node/memory-monitor.js.map +1 -1
- package/lib/node/node-file-system-provider.d.ts +67 -9
- package/lib/node/node-file-system-provider.d.ts.map +1 -1
- package/lib/node/node-file-system-provider.js +198 -53
- package/lib/node/node-file-system-provider.js.map +1 -1
- package/lib/node/profile-capture.d.ts +12 -4
- package/lib/node/profile-capture.d.ts.map +1 -1
- package/lib/node/profile-capture.js +8 -6
- package/lib/node/profile-capture.js.map +1 -1
- package/lib/node/profile-digest.js.map +1 -1
- package/lib/node/profiling-run.d.ts +13 -3
- package/lib/node/profiling-run.d.ts.map +1 -1
- package/lib/node/profiling-run.js +17 -8
- package/lib/node/profiling-run.js.map +1 -1
- package/lib/node/rename-over-open-readers.d.ts +61 -0
- package/lib/node/rename-over-open-readers.d.ts.map +1 -0
- package/lib/node/rename-over-open-readers.js +80 -0
- package/lib/node/rename-over-open-readers.js.map +1 -0
- package/lib/node/server-diagnostics.js +1 -1
- package/lib/node/server-diagnostics.js.map +1 -1
- package/lib/node/server-state-snapshot.js +4 -4
- package/lib/node/server-state-snapshot.js.map +1 -1
- package/lib/node/socket-launcher.d.ts +43 -7
- package/lib/node/socket-launcher.d.ts.map +1 -1
- package/lib/node/socket-launcher.js +42 -7
- package/lib/node/socket-launcher.js.map +1 -1
- package/lib/node/startup-cpu-profile.d.ts +29 -0
- package/lib/node/startup-cpu-profile.d.ts.map +1 -0
- package/lib/node/startup-cpu-profile.js +91 -0
- package/lib/node/startup-cpu-profile.js.map +1 -0
- package/lib/node/stdio-launcher.d.ts +13 -13
- package/lib/node/stdio-launcher.d.ts.map +1 -1
- package/lib/node/stdio-launcher.js +21 -11
- package/lib/node/stdio-launcher.js.map +1 -1
- package/lib/node/validate-workspace.d.ts +1 -1
- package/lib/node/validate-workspace.d.ts.map +1 -1
- package/lib/node/validate-workspace.js +5 -1
- package/lib/node/validate-workspace.js.map +1 -1
- package/lib/testing/document-uri-policy-conformance.js +1 -1
- package/lib/testing/document-uri-policy-conformance.js.map +1 -1
- package/lib/testing/fake-description.js.map +1 -1
- package/lib/testing/fake-document.d.ts +2 -1
- package/lib/testing/fake-document.d.ts.map +1 -1
- package/lib/testing/fake-document.js.map +1 -1
- package/lib/testing/index.d.ts +1 -1
- package/lib/testing/index.d.ts.map +1 -1
- package/lib/testing/index.js +2 -1
- package/lib/testing/index.js.map +1 -1
- package/lib/testing/langium-test-helpers.d.ts.map +1 -1
- package/lib/testing/langium-test-helpers.js +1 -0
- package/lib/testing/langium-test-helpers.js.map +1 -1
- package/lib/testing/make-noop-language-services.js.map +1 -1
- package/lib/testing/make-noop-shared-services.d.ts +4 -4
- package/lib/testing/make-noop-shared-services.d.ts.map +1 -1
- package/lib/testing/make-noop-shared-services.js +4 -4
- package/lib/testing/make-noop-shared-services.js.map +1 -1
- package/lib/testing/make-test-services.d.ts +51 -20
- package/lib/testing/make-test-services.d.ts.map +1 -1
- package/lib/testing/make-test-services.js +29 -13
- package/lib/testing/make-test-services.js.map +1 -1
- package/lib/testing/make-test-tracer.d.ts +12 -0
- package/lib/testing/make-test-tracer.d.ts.map +1 -1
- package/lib/testing/make-test-tracer.js +13 -0
- package/lib/testing/make-test-tracer.js.map +1 -1
- package/lib/testing/node/applied-edit-capture.d.ts +29 -0
- package/lib/testing/node/applied-edit-capture.d.ts.map +1 -0
- package/lib/testing/node/applied-edit-capture.js +117 -0
- package/lib/testing/node/applied-edit-capture.js.map +1 -0
- package/lib/testing/node/golden-corpus.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 +21 -6
- package/lib/testing/node/lsp-server-connection.d.ts.map +1 -1
- package/lib/testing/node/lsp-server-connection.js +49 -106
- 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 +30 -1
- package/lib/testing/node/spawned-server.d.ts.map +1 -1
- package/lib/testing/node/spawned-server.js +39 -2
- 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/browser-capture-bridge.js.map +1 -1
- package/lib/testing/playwright/e2e-profiling.js.map +1 -1
- 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 +46 -16
- package/lib/testing/playwright/server-log-capture.d.ts.map +1 -1
- package/lib/testing/playwright/server-log-capture.js +111 -40
- package/lib/testing/playwright/server-log-capture.js.map +1 -1
- package/lib/testing/playwright/server-log-fixture.d.ts +16 -0
- package/lib/testing/playwright/server-log-fixture.d.ts.map +1 -1
- package/lib/testing/playwright/server-log-fixture.js +25 -6
- package/lib/testing/playwright/server-log-fixture.js.map +1 -1
- package/lib/testing/playwright/server-log-region.d.ts +15 -0
- package/lib/testing/playwright/server-log-region.d.ts.map +1 -0
- package/lib/testing/playwright/server-log-region.js +30 -0
- package/lib/testing/playwright/server-log-region.js.map +1 -0
- package/lib/testing/playwright/server-log-rename-reporter.d.ts.map +1 -1
- package/lib/testing/playwright/server-log-rename-reporter.js +4 -3
- package/lib/testing/playwright/server-log-rename-reporter.js.map +1 -1
- package/lib/testing/run-update-pipeline.d.ts +8 -5
- package/lib/testing/run-update-pipeline.d.ts.map +1 -1
- package/lib/testing/run-update-pipeline.js.map +1 -1
- package/lib/testing/stub-ast-document-manager.d.ts +11 -52
- package/lib/testing/stub-ast-document-manager.d.ts.map +1 -1
- package/lib/testing/stub-ast-document-manager.js +31 -62
- package/lib/testing/stub-ast-document-manager.js.map +1 -1
- package/lib/testing/stub-document-builder.d.ts +33 -11
- package/lib/testing/stub-document-builder.d.ts.map +1 -1
- package/lib/testing/stub-document-builder.js +103 -5
- package/lib/testing/stub-document-builder.js.map +1 -1
- package/lib/testing/stub-hydranium-text-documents.d.ts +33 -10
- package/lib/testing/stub-hydranium-text-documents.d.ts.map +1 -1
- package/lib/testing/stub-hydranium-text-documents.js +132 -16
- package/lib/testing/stub-hydranium-text-documents.js.map +1 -1
- package/lib/testing/stub-index-manager.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 +9 -8
- package/lib/testing/stub-model-service.d.ts.map +1 -1
- package/lib/testing/stub-model-service.js +6 -6
- package/lib/testing/stub-model-service.js.map +1 -1
- package/lib/testing/stub-project-manager.js.map +1 -1
- package/lib/testing/stub-self-save-registry.d.ts +1 -1
- package/lib/testing/stub-self-save-registry.d.ts.map +1 -1
- package/lib/testing/stub-service-registry.d.ts +1 -1
- package/lib/testing/stub-service-registry.js.map +1 -1
- package/lib/testing/stub-writable-file-system.d.ts +1 -1
- package/lib/testing/stub-writable-file-system.d.ts.map +1 -1
- package/lib/testing/stub-writable-file-system.js +2 -1
- package/lib/testing/stub-writable-file-system.js.map +1 -1
- package/lib/util/connection-liveness.d.ts +22 -6
- package/lib/util/connection-liveness.d.ts.map +1 -1
- package/lib/util/connection-liveness.js +74 -15
- package/lib/util/connection-liveness.js.map +1 -1
- package/lib/util/environment.d.ts +7 -0
- package/lib/util/environment.d.ts.map +1 -1
- package/lib/util/environment.js +15 -1
- package/lib/util/environment.js.map +1 -1
- package/lib/util/registry.d.ts.map +1 -1
- package/package.json +41 -60
- package/src/browser/host-heads-in-worker.ts +218 -0
- package/src/browser/index.ts +17 -0
- package/src/browser/indexeddb-file-system-store.ts +192 -0
- package/src/browser/start-language-server-in-worker.ts +56 -0
- package/src/documents/ast-document-manager.ts +467 -233
- package/src/documents/client-ids.ts +5 -22
- package/src/documents/client-session-errors.ts +24 -0
- package/src/documents/client-session-registry.ts +262 -0
- package/src/documents/dirty-state-tracker.ts +167 -0
- package/src/documents/document-release-handler.ts +404 -0
- package/src/documents/document-release-scheduler.ts +121 -0
- package/src/documents/file-system-task-queue.ts +74 -0
- package/src/documents/hydranium-text-documents.ts +1029 -595
- package/src/documents/index.ts +10 -2
- package/src/documents/language-client-shadow.ts +501 -0
- package/src/documents/model-ledger.ts +66 -0
- package/src/documents/text-ledger.ts +112 -0
- package/src/documents/version-sync-service.ts +275 -0
- package/src/index.ts +7 -0
- package/src/langium/ast-extension/ast-extension-service.ts +77 -41
- package/src/langium/ast-extension/ast-node-builder.ts +35 -13
- package/src/langium/bootstrap.ts +87 -51
- package/src/langium/build-phase-pass/build-phase-pass-service.ts +29 -19
- package/src/langium/build-phase-pass/build-phase-pass.ts +37 -8
- package/src/langium/composite-ast-reflection.ts +112 -0
- package/src/langium/config/configuration-provider.ts +119 -0
- package/src/langium/config/index.ts +1 -0
- package/src/langium/diagnostics/console-tee.ts +151 -0
- package/src/langium/diagnostics/format-log-arg.ts +36 -0
- package/src/langium/diagnostics/hydranium-langium-profiler.ts +15 -39
- package/src/langium/diagnostics/log-preamble.ts +1 -1
- package/src/langium/diagnostics/logger.ts +51 -17
- package/src/langium/diagnostics/lsp-logger.ts +83 -44
- package/src/langium/document-builder/build-pipeline-integration.ts +46 -32
- package/src/langium/document-builder/build-session.ts +4 -3
- package/src/langium/document-builder/document-builder.ts +554 -79
- package/src/langium/integration-services.ts +59 -28
- package/src/langium/integrity/integrity-rule.ts +17 -8
- package/src/langium/integrity/integrity-service.ts +332 -69
- package/src/langium/language-module.ts +49 -8
- package/src/langium/model-service/client-session.ts +718 -0
- package/src/langium/model-service/index.ts +2 -0
- package/src/langium/model-service/model-events.ts +80 -0
- package/src/langium/model-service/model-service.ts +878 -494
- package/src/langium/module.ts +195 -72
- package/src/langium/naming/name-provider.ts +34 -8
- package/src/langium/project/abstract-project-manager.ts +13 -5
- package/src/langium/project/project-change-event.ts +2 -2
- package/src/langium/residency/cst-residency-service.ts +54 -19
- package/src/langium/scope/fallback-scope.ts +38 -0
- package/src/langium/scope/hydranium-scope-computation.ts +45 -44
- package/src/langium/scope/hydranium-scope-provider.ts +132 -33
- package/src/langium/scope/index.ts +1 -0
- package/src/langium/scope/reference-candidate-provider.ts +6 -5
- package/src/langium/scope/scope-extension-service.ts +74 -59
- package/src/langium/scope/scoped-ast-node-description.ts +1 -3
- package/src/langium/serialization/abstract-serializer.ts +57 -41
- package/src/langium/serialization/json-serializer.ts +14 -3
- package/src/langium/serialization/serializer.ts +1 -1
- package/src/langium/serialization/yaml-serializer.ts +4 -0
- package/src/langium/service-registry.ts +41 -2
- package/src/langium/shared-services.ts +16 -7
- package/src/langium/single-langium-copy.ts +42 -0
- package/src/langium/transfer/transfer-encoder.ts +104 -47
- package/src/langium/trivia/comment-preserver.ts +1409 -0
- package/src/langium/trivia/document-ending-preserver.ts +71 -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 +56 -0
- package/src/langium/trivia/trivia-service.ts +99 -0
- package/src/langium/update-rewrite/update-rewrite-service.ts +1 -1
- package/src/langium/update-rewrite/update-rewrite.ts +1 -1
- package/src/langium/validation/document-validator.ts +312 -31
- package/src/langium/validation/validation-contribution-collector.ts +10 -1
- package/src/langium/workspace/document-uri-policy.ts +32 -18
- package/src/langium/workspace/file-not-found.ts +35 -0
- package/src/langium/workspace/file-system-provider.ts +258 -16
- package/src/langium/workspace/hydranium-langium-document-factory.ts +83 -0
- package/src/langium/workspace/hydranium-workspace-lock.ts +86 -2
- package/src/langium/workspace/hydranium-workspace-manager.ts +212 -35
- package/src/langium/workspace/in-memory-file-system-provider.ts +54 -23
- package/src/langium/workspace/index.ts +1 -0
- package/src/langium/workspace/initialize-workspace.ts +96 -4
- package/src/langium/workspace/langium-documents.ts +19 -1
- package/src/langium/workspace/persistent-file-system-provider.ts +27 -15
- package/src/langium/workspace/self-save-registry.ts +118 -0
- package/src/langium/workspace/virtual-document.ts +106 -25
- package/src/langium/workspace/write-lock-scope.ts +27 -12
- package/src/launcher/integrated-server.ts +3 -1
- package/src/locale/server-locale.ts +20 -5
- 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/edit-requests-guard.ts +152 -0
- package/src/lsp/hydranium-document-update-handler.ts +285 -111
- package/src/lsp/index.ts +6 -2
- package/src/lsp/lsp-latency.ts +62 -0
- package/src/lsp/save-text-document.ts +63 -0
- package/src/lsp/semantic-token-provider.ts +146 -8
- package/src/lsp/shared-module.ts +4 -8
- package/src/lsp/start-language-server.ts +21 -7
- package/src/messages/carriers.ts +4 -6
- package/src/messages/index.ts +11 -2
- package/src/messages/renderer.ts +34 -6
- package/src/node/event-loop-monitor.ts +2 -1
- package/src/node/heap-ceiling.ts +108 -0
- package/src/node/index.ts +5 -1
- package/src/node/latency-from-env.ts +1 -1
- package/src/node/log-file-sink.ts +6 -2
- package/src/node/log-preamble-node.ts +20 -10
- package/src/node/measure-memory.ts +5 -4
- package/src/node/memory-monitor.ts +10 -10
- package/src/node/node-file-system-provider.ts +214 -57
- package/src/node/profile-capture.ts +16 -15
- package/src/node/profiling-run.ts +30 -8
- package/src/node/rename-over-open-readers.ts +94 -0
- package/src/node/server-diagnostics.ts +1 -1
- package/src/node/server-state-snapshot.ts +5 -5
- package/src/node/socket-launcher.ts +78 -14
- package/src/node/startup-cpu-profile.ts +94 -0
- package/src/node/stdio-launcher.ts +29 -19
- package/src/node/validate-workspace.ts +8 -2
- package/src/testing/document-uri-policy-conformance.ts +1 -1
- package/src/testing/fake-document.ts +2 -1
- package/src/testing/index.ts +2 -1
- package/src/testing/langium-test-helpers.ts +1 -0
- package/src/testing/make-noop-shared-services.ts +6 -6
- package/src/testing/make-test-services.ts +93 -41
- package/src/testing/make-test-tracer.ts +26 -0
- package/src/testing/node/applied-edit-capture.ts +141 -0
- 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 +83 -119
- package/src/testing/node/scratch-workspace.ts +10 -5
- package/src/testing/node/spawned-server.ts +57 -3
- package/src/testing/node/unhandled-rejections.ts +31 -0
- package/src/testing/parse-semantic-root.ts +1 -1
- 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 +137 -47
- package/src/testing/playwright/server-log-fixture.ts +46 -6
- package/src/testing/playwright/server-log-region.ts +32 -0
- package/src/testing/playwright/server-log-rename-reporter.ts +4 -3
- package/src/testing/run-update-pipeline.ts +8 -5
- package/src/testing/stub-ast-document-manager.ts +47 -128
- package/src/testing/stub-document-builder.ts +133 -18
- package/src/testing/stub-hydranium-text-documents.ts +184 -27
- package/src/testing/stub-langium-documents.ts +3 -2
- package/src/testing/stub-model-service.ts +11 -10
- package/src/testing/stub-self-save-registry.ts +1 -1
- package/src/testing/stub-service-registry.ts +1 -1
- package/src/testing/stub-writable-file-system.ts +3 -2
- package/src/util/connection-liveness.ts +80 -15
- package/src/util/environment.ts +24 -2
- package/lib/documents/language-client-text-shadow.d.ts +0 -101
- package/lib/documents/language-client-text-shadow.d.ts.map +0 -1
- package/lib/documents/language-client-text-shadow.js +0 -156
- package/lib/documents/language-client-text-shadow.js.map +0 -1
- package/lib/documents/self-save-registry.d.ts +0 -55
- package/lib/documents/self-save-registry.d.ts.map +0 -1
- package/lib/documents/self-save-registry.js.map +0 -1
- 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/lib/node/process-memory.d.ts +0 -66
- package/lib/node/process-memory.d.ts.map +0 -1
- package/lib/node/process-memory.js +0 -252
- package/lib/node/process-memory.js.map +0 -1
- package/src/documents/language-client-text-shadow.ts +0 -175
- package/src/documents/self-save-registry.ts +0 -81
- package/src/lsp/instrument-connection.ts +0 -66
- package/src/node/process-memory.ts +0 -299
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
import {
|
|
11
11
|
type Clock,
|
|
12
12
|
DefaultTracer,
|
|
13
|
+
type Locale,
|
|
13
14
|
type Logger,
|
|
14
15
|
NoopLogger,
|
|
15
16
|
type Project,
|
|
@@ -18,15 +19,25 @@ import {
|
|
|
18
19
|
type TransferDiagnostic,
|
|
19
20
|
type TransferElement
|
|
20
21
|
} from '@hydranium/protocol';
|
|
21
|
-
import { ServerLocale } from '../locale/server-locale.js';
|
|
22
|
-
import {
|
|
22
|
+
import { DefaultServerLocale, type ServerLocale } from '../locale/server-locale.js';
|
|
23
|
+
import { DefaultMessageRenderer, type MessageRenderer } from '../messages/renderer.js';
|
|
23
24
|
import type { Harness } from '@hydranium/protocol/testing';
|
|
24
25
|
import { type AstNode, type AstNodeDescription, type WorkspaceLock } from '@hydranium/langium';
|
|
26
|
+
import {
|
|
27
|
+
type ClientSessionFactory,
|
|
28
|
+
type ClientSessionFactoryOptions,
|
|
29
|
+
DefaultClientSessionFactory
|
|
30
|
+
} from '../langium/model-service/client-session.js';
|
|
25
31
|
import type { ModelService, ModelServiceOptions } from '../langium/model-service/model-service.js';
|
|
26
32
|
import type { ServerSharedServices } from '../langium/module.js';
|
|
27
|
-
import {
|
|
33
|
+
import type { AstDiagnostic } from '../langium/validation/document-validator.js';
|
|
34
|
+
import { DefaultTransferEncoder, type TransferEncoder } from '../langium/transfer/transfer-encoder.js';
|
|
28
35
|
import { DefaultDocumentUriPolicy, type DocumentUriPolicy } from '../langium/workspace/document-uri-policy.js';
|
|
29
36
|
import { HydraniumWorkspaceLock } from '../langium/workspace/hydranium-workspace-lock.js';
|
|
37
|
+
import { DefaultFileSystemTaskQueue, type FileSystemTaskQueue } from '../documents/file-system-task-queue.js';
|
|
38
|
+
import { DefaultModelLedger, type ModelLedger } from '../documents/model-ledger.js';
|
|
39
|
+
import { DefaultDocumentReleaseHandler, type DocumentReleaseHandler } from '../documents/document-release-handler.js';
|
|
40
|
+
import { DefaultVersionSyncService, type VersionSyncService } from '../documents/version-sync-service.js';
|
|
30
41
|
import type { FakeDocumentOptions } from './fake-document.js';
|
|
31
42
|
import { makeStubDocumentBuilder, type StubDocumentBuilder } from './stub-document-builder.js';
|
|
32
43
|
import { makeStubIndexManager, type StubIndexManager } from './stub-index-manager.js';
|
|
@@ -48,12 +59,21 @@ import { makeStubWritableFileSystem, type StubWritableFileSystem } from './stub-
|
|
|
48
59
|
* to `ServerSharedServices` in {@link makeTestServices} is therefore the
|
|
49
60
|
* single named place where the "stub stands in for the full service tree"
|
|
50
61
|
* assertion happens.
|
|
62
|
+
*
|
|
63
|
+
* **`TDiagnostic` and `TTransferDiagnostic` are the two ends of a conversion
|
|
64
|
+
* and must stay separate.** The first is what the build left on
|
|
65
|
+
* `LangiumDocument.diagnostics` and what `ModelService` hands back on an
|
|
66
|
+
* `AstDocument`; the second is what `TransferEncoder.toTransferDiagnostic`
|
|
67
|
+
* produces for the wire. One parameter serving both makes the tree
|
|
68
|
+
* unbindable for an adopter who extends either shape, since extending one
|
|
69
|
+
* says nothing about the other.
|
|
51
70
|
*/
|
|
52
71
|
export interface TestSharedServices<
|
|
53
72
|
TAst extends AstNode = AstNode,
|
|
54
|
-
TDiagnostic extends
|
|
73
|
+
TDiagnostic extends AstDiagnostic = AstDiagnostic,
|
|
55
74
|
TTransfer extends TransferElement = TransferElement,
|
|
56
|
-
TProject extends Project = Project
|
|
75
|
+
TProject extends Project = Project,
|
|
76
|
+
TTransferDiagnostic extends TransferDiagnostic = TransferDiagnostic
|
|
57
77
|
> {
|
|
58
78
|
readonly Clock: Clock;
|
|
59
79
|
readonly Logger: Logger;
|
|
@@ -74,6 +94,8 @@ export interface TestSharedServices<
|
|
|
74
94
|
SelfSaveRegistry: StubSelfSaveRegistry;
|
|
75
95
|
ProjectManager: StubProjectManager<TProject>;
|
|
76
96
|
DocumentUriPolicy: DocumentUriPolicy;
|
|
97
|
+
/** The REAL queue: a stub that runs each task at once hides the save interleaving the queue exists to prevent. */
|
|
98
|
+
FileSystemTaskQueue: FileSystemTaskQueue;
|
|
77
99
|
/**
|
|
78
100
|
* Present only when {@link MakeTestServicesOptions.seedIndex} was passed.
|
|
79
101
|
* Omitted otherwise for the same reason as `ServiceRegistry` — see that
|
|
@@ -90,10 +112,17 @@ export interface TestSharedServices<
|
|
|
90
112
|
* through this tree and let a reentrant write pass unnoticed.
|
|
91
113
|
*/
|
|
92
114
|
WorkspaceLock: WorkspaceLock;
|
|
115
|
+
/** The REAL ledger: it is a weak map with no dependencies. */
|
|
116
|
+
ModelLedger: ModelLedger;
|
|
117
|
+
/** The REAL service, over this tree's stubs; it reconciles nothing against the stub store. */
|
|
118
|
+
VersionSyncService: VersionSyncService;
|
|
119
|
+
/** The REAL handler, over this tree's stubs; the stub store releases nothing to it. */
|
|
120
|
+
DocumentReleaseHandler: DocumentReleaseHandler;
|
|
93
121
|
};
|
|
94
122
|
readonly model: {
|
|
95
|
-
TransferEncoder: TransferEncoder<
|
|
123
|
+
TransferEncoder: TransferEncoder<TTransferDiagnostic>;
|
|
96
124
|
ModelService: ModelService<TAst, TDiagnostic, TTransfer>;
|
|
125
|
+
ClientSessionFactory: ClientSessionFactory;
|
|
97
126
|
};
|
|
98
127
|
/**
|
|
99
128
|
* The REAL services, not stubs — the framework renderer's no-catalogue
|
|
@@ -103,15 +132,16 @@ export interface TestSharedServices<
|
|
|
103
132
|
* `Validated` phase, where an omitted slot is a `TypeError`.
|
|
104
133
|
*/
|
|
105
134
|
readonly ServerLocale: ServerLocale;
|
|
106
|
-
readonly MessageRenderer:
|
|
135
|
+
readonly MessageRenderer: MessageRenderer;
|
|
107
136
|
}
|
|
108
137
|
|
|
109
138
|
/** Optional configuration for {@link makeTestServices}. */
|
|
110
139
|
export interface MakeTestServicesOptions<
|
|
111
140
|
TAst extends AstNode = AstNode,
|
|
112
|
-
TDiagnostic extends
|
|
141
|
+
TDiagnostic extends AstDiagnostic = AstDiagnostic,
|
|
113
142
|
TTransfer extends TransferElement = TransferElement,
|
|
114
|
-
TProject extends Project = Project
|
|
143
|
+
TProject extends Project = Project,
|
|
144
|
+
TTransferDiagnostic extends TransferDiagnostic = TransferDiagnostic
|
|
115
145
|
> {
|
|
116
146
|
/**
|
|
117
147
|
* Serialiser used by the bundled `StubModelService`. The stub tree
|
|
@@ -128,9 +158,9 @@ export interface MakeTestServicesOptions<
|
|
|
128
158
|
* passes every sentence through unchanged. Supply one to install a catalogue
|
|
129
159
|
* or to drive the throwing path.
|
|
130
160
|
*/
|
|
131
|
-
messageRenderer?: (services: ServerSharedServices<TProject>) =>
|
|
161
|
+
messageRenderer?: (services: ServerSharedServices<TProject>) => MessageRenderer;
|
|
132
162
|
/** Locale handed to the bundle's {@link ServerLocale}. Default: none, i.e. the framework's English. */
|
|
133
|
-
locale?:
|
|
163
|
+
locale?: Locale;
|
|
134
164
|
/**
|
|
135
165
|
* Languages to register on a {@link StubServiceRegistry} bound on the
|
|
136
166
|
* `ServiceRegistry` slot. This is how a test gets multi-language routing:
|
|
@@ -139,7 +169,7 @@ export interface MakeTestServicesOptions<
|
|
|
139
169
|
*
|
|
140
170
|
* **Default: no `ServiceRegistry` slot at all.** Binding an empty registry
|
|
141
171
|
* by default would silently change behaviour for the tests that rely on the
|
|
142
|
-
* slot being absent — `
|
|
172
|
+
* slot being absent — `DefaultModelService.rewriteModel` optional-chains it
|
|
143
173
|
* precisely for those bundles — so a registry appears only when a test asks
|
|
144
174
|
* for one.
|
|
145
175
|
*/
|
|
@@ -197,16 +227,23 @@ export interface MakeTestServicesOptions<
|
|
|
197
227
|
modelService?: (services: ServerSharedServices<TProject>) => ModelService<TAst, TDiagnostic, TTransfer>;
|
|
198
228
|
/**
|
|
199
229
|
* Framework {@link ModelServiceOptions} for the DEFAULT stub service, so a
|
|
200
|
-
* test can reach an option-gated path (`
|
|
201
|
-
*
|
|
202
|
-
*
|
|
230
|
+
* test can reach an option-gated path (`allowReentrantBuilds`) without supplying
|
|
231
|
+
* a whole {@link modelService} factory. Ignored when `modelService` is
|
|
232
|
+
* given — that factory owns its own construction.
|
|
203
233
|
*/
|
|
204
234
|
modelServiceOptions?: ModelServiceOptions;
|
|
235
|
+
/**
|
|
236
|
+
* Options of the {@link DefaultClientSessionFactory} bound on
|
|
237
|
+
* `model.ClientSessionFactory`, so a test can reach the slow-update warn.
|
|
238
|
+
* Its sessions serialise and rebuild through the `model.ModelService` slot,
|
|
239
|
+
* so a test of a model service subclass passes it as {@link modelService}.
|
|
240
|
+
*/
|
|
241
|
+
clientSessionFactoryOptions?: ClientSessionFactoryOptions;
|
|
205
242
|
/**
|
|
206
243
|
* Override the {@link TransferEncoder} factory. Default: framework
|
|
207
244
|
* {@link TransferEncoder} with no overrides.
|
|
208
245
|
*/
|
|
209
|
-
transferEncoder?: (services: ServerSharedServices<TProject>) => TransferEncoder<
|
|
246
|
+
transferEncoder?: (services: ServerSharedServices<TProject, TTransferDiagnostic>) => TransferEncoder<TTransferDiagnostic>;
|
|
210
247
|
}
|
|
211
248
|
|
|
212
249
|
/**
|
|
@@ -224,11 +261,12 @@ export interface MakeTestServicesOptions<
|
|
|
224
261
|
*/
|
|
225
262
|
export interface TestServicesBundle<
|
|
226
263
|
TAst extends AstNode = AstNode,
|
|
227
|
-
TDiagnostic extends
|
|
264
|
+
TDiagnostic extends AstDiagnostic = AstDiagnostic,
|
|
228
265
|
TTransfer extends TransferElement = TransferElement,
|
|
229
|
-
TProject extends Project = Project
|
|
266
|
+
TProject extends Project = Project,
|
|
267
|
+
TTransferDiagnostic extends TransferDiagnostic = TransferDiagnostic
|
|
230
268
|
> extends Harness {
|
|
231
|
-
readonly services: ServerSharedServices<TProject>;
|
|
269
|
+
readonly services: ServerSharedServices<TProject, TTransferDiagnostic>;
|
|
232
270
|
readonly documents: StubLangiumDocuments<TAst, TDiagnostic>;
|
|
233
271
|
readonly textDocuments: StubHydraniumTextDocuments;
|
|
234
272
|
readonly astDocumentManager: StubAstDocumentManager<TAst, TDiagnostic>;
|
|
@@ -237,6 +275,7 @@ export interface TestServicesBundle<
|
|
|
237
275
|
readonly selfSaveRegistry: StubSelfSaveRegistry;
|
|
238
276
|
readonly projectManager: StubProjectManager<TProject>;
|
|
239
277
|
readonly documentUriPolicy: DocumentUriPolicy;
|
|
278
|
+
readonly modelLedger: ModelLedger;
|
|
240
279
|
/**
|
|
241
280
|
* The registry bound on the `ServiceRegistry` slot, or `undefined` when no
|
|
242
281
|
* {@link MakeTestServicesOptions.languages} were declared.
|
|
@@ -248,7 +287,7 @@ export interface TestServicesBundle<
|
|
|
248
287
|
*/
|
|
249
288
|
readonly indexManager: StubIndexManager | undefined;
|
|
250
289
|
readonly modelService: ModelService<TAst, TDiagnostic, TTransfer>;
|
|
251
|
-
readonly transferEncoder: TransferEncoder<
|
|
290
|
+
readonly transferEncoder: TransferEncoder<TTransferDiagnostic>;
|
|
252
291
|
readonly logger: Logger;
|
|
253
292
|
/** The clock bound on the `Clock` slot — a `makeFakeClock()` if one was passed. */
|
|
254
293
|
readonly clock: Clock;
|
|
@@ -259,7 +298,7 @@ export interface TestServicesBundle<
|
|
|
259
298
|
*/
|
|
260
299
|
readonly serverLocale: ServerLocale;
|
|
261
300
|
/** The renderer bound on `MessageRenderer` — the framework's own unless one was supplied. */
|
|
262
|
-
readonly messageRenderer:
|
|
301
|
+
readonly messageRenderer: MessageRenderer;
|
|
263
302
|
}
|
|
264
303
|
|
|
265
304
|
/**
|
|
@@ -274,22 +313,25 @@ export interface TestServicesBundle<
|
|
|
274
313
|
*/
|
|
275
314
|
export function makeTestServices<
|
|
276
315
|
TAst extends AstNode = AstNode,
|
|
277
|
-
TDiagnostic extends
|
|
316
|
+
TDiagnostic extends AstDiagnostic = AstDiagnostic,
|
|
278
317
|
TTransfer extends TransferElement = TransferElement,
|
|
279
|
-
TProject extends Project = Project
|
|
318
|
+
TProject extends Project = Project,
|
|
319
|
+
TTransferDiagnostic extends TransferDiagnostic = TransferDiagnostic
|
|
280
320
|
>(
|
|
281
|
-
options: MakeTestServicesOptions<TAst, TDiagnostic, TTransfer, TProject> = {}
|
|
282
|
-
): TestServicesBundle<TAst, TDiagnostic, TTransfer, TProject> {
|
|
321
|
+
options: MakeTestServicesOptions<TAst, TDiagnostic, TTransfer, TProject, TTransferDiagnostic> = {}
|
|
322
|
+
): TestServicesBundle<TAst, TDiagnostic, TTransfer, TProject, TTransferDiagnostic> {
|
|
283
323
|
const documents = makeStubLangiumDocuments<TAst, TDiagnostic>(options.seedDocuments);
|
|
284
324
|
const textDocuments = makeStubHydraniumTextDocuments();
|
|
285
|
-
const documentBuilder = makeStubDocumentBuilder();
|
|
286
|
-
const selfSaveRegistry = makeStubSelfSaveRegistry();
|
|
287
|
-
const fileSystem = makeStubWritableFileSystem(selfSaveRegistry);
|
|
288
|
-
const projectManager = makeStubProjectManager<TProject>(options.seedProjects);
|
|
289
|
-
const astDocumentManager = makeStubAstDocumentManager<TAst, TDiagnostic>(textDocuments, fileSystem, documents);
|
|
290
325
|
const logger = options.logger ?? new NoopLogger();
|
|
291
326
|
const clock = options.clock ?? new SystemClock();
|
|
292
327
|
const tracer = new DefaultTracer(logger, clock);
|
|
328
|
+
const workspaceLock = new HydraniumWorkspaceLock({ Clock: clock, Tracer: tracer });
|
|
329
|
+
const documentBuilder = makeStubDocumentBuilder(workspaceLock);
|
|
330
|
+
const selfSaveRegistry = makeStubSelfSaveRegistry();
|
|
331
|
+
const fileSystem = makeStubWritableFileSystem(selfSaveRegistry);
|
|
332
|
+
const projectManager = makeStubProjectManager<TProject>(options.seedProjects);
|
|
333
|
+
const modelLedger = new DefaultModelLedger();
|
|
334
|
+
const astDocumentManager = makeStubAstDocumentManager<TAst, TDiagnostic>(textDocuments, fileSystem, documents, modelLedger);
|
|
293
335
|
const documentUriPolicy = options.documentUriPolicy ?? new DefaultDocumentUriPolicy();
|
|
294
336
|
const serviceRegistry = options.languages
|
|
295
337
|
? makeStubServiceRegistry(options.languages, { openLanguageIds: options.openLanguageIds })
|
|
@@ -312,11 +354,11 @@ export function makeTestServices<
|
|
|
312
354
|
// is dependency-free (as `HydraniumWorkspaceLock` is) — a no-op stub of a
|
|
313
355
|
// synchronisation primitive hides the very interleaving it exists to prevent.
|
|
314
356
|
//
|
|
315
|
-
// `model
|
|
357
|
+
// The `model` slots are populated below
|
|
316
358
|
// (after the factories run); the literal uses unsafe casts to
|
|
317
359
|
// partially-built objects to satisfy TestSharedServices, then patches
|
|
318
360
|
// them in.
|
|
319
|
-
const services: TestSharedServices<TAst, TDiagnostic, TTransfer, TProject> = {
|
|
361
|
+
const services: TestSharedServices<TAst, TDiagnostic, TTransfer, TProject, TTransferDiagnostic> = {
|
|
320
362
|
Clock: clock,
|
|
321
363
|
Logger: logger,
|
|
322
364
|
Tracer: tracer,
|
|
@@ -336,39 +378,48 @@ export function makeTestServices<
|
|
|
336
378
|
// Spread for the same reason as `ServiceRegistry` above — the slot must
|
|
337
379
|
// be genuinely ABSENT, not present-and-undefined, when no index was seeded.
|
|
338
380
|
...(indexManager ? { IndexManager: indexManager } : {}),
|
|
339
|
-
WorkspaceLock:
|
|
381
|
+
WorkspaceLock: workspaceLock,
|
|
382
|
+
FileSystemTaskQueue: new DefaultFileSystemTaskQueue({ workspace: { DocumentUriPolicy: documentUriPolicy } }),
|
|
383
|
+
ModelLedger: modelLedger,
|
|
384
|
+
// Patched in below, as both read the tree they belong to.
|
|
385
|
+
VersionSyncService: {} as VersionSyncService,
|
|
386
|
+
DocumentReleaseHandler: {} as DocumentReleaseHandler
|
|
340
387
|
},
|
|
341
|
-
model: {} as TestSharedServices<TAst, TDiagnostic, TTransfer, TProject>['model'],
|
|
388
|
+
model: {} as TestSharedServices<TAst, TDiagnostic, TTransfer, TProject, TTransferDiagnostic>['model'],
|
|
342
389
|
ServerLocale: {} as ServerLocale,
|
|
343
|
-
MessageRenderer: {} as
|
|
390
|
+
MessageRenderer: {} as DefaultMessageRenderer
|
|
344
391
|
};
|
|
345
|
-
const sharedServices = services as unknown as ServerSharedServices<TProject>;
|
|
392
|
+
const sharedServices = services as unknown as ServerSharedServices<TProject, TTransferDiagnostic>;
|
|
346
393
|
|
|
347
394
|
// Patched in after the literal, like `model` below: both read the tree they
|
|
348
395
|
// belong to, and the renderer reads the locale service.
|
|
349
|
-
|
|
350
|
-
|
|
396
|
+
services.workspace.VersionSyncService = new DefaultVersionSyncService(sharedServices);
|
|
397
|
+
services.workspace.DocumentReleaseHandler = new DefaultDocumentReleaseHandler(sharedServices);
|
|
398
|
+
const mutableMessages = services as { ServerLocale: ServerLocale; MessageRenderer: MessageRenderer };
|
|
399
|
+
const serverLocale = new DefaultServerLocale(sharedServices);
|
|
351
400
|
if (options.locale) {
|
|
352
401
|
serverLocale.accept(options.locale);
|
|
353
402
|
}
|
|
354
403
|
mutableMessages.ServerLocale = serverLocale;
|
|
355
|
-
const messageRenderer = options.messageRenderer?.(sharedServices) ?? new
|
|
404
|
+
const messageRenderer = options.messageRenderer?.(sharedServices) ?? new DefaultMessageRenderer(sharedServices);
|
|
356
405
|
mutableMessages.MessageRenderer = messageRenderer;
|
|
357
406
|
|
|
358
407
|
const serialize = options.serialize ?? ((_uri: string, root: TTransfer) => JSON.stringify(root));
|
|
359
408
|
const transferEncoder = options.transferEncoder
|
|
360
409
|
? options.transferEncoder(sharedServices)
|
|
361
|
-
: new
|
|
410
|
+
: new DefaultTransferEncoder<unknown, TTransferDiagnostic>(sharedServices);
|
|
362
411
|
const modelService = options.modelService
|
|
363
412
|
? options.modelService(sharedServices)
|
|
364
413
|
: makeStubModelService<TAst, TDiagnostic, TTransfer>(sharedServices, serialize, options.modelServiceOptions);
|
|
365
414
|
|
|
366
415
|
const mutableModel = services.model as {
|
|
367
|
-
TransferEncoder: TransferEncoder<
|
|
416
|
+
TransferEncoder: TransferEncoder<TTransferDiagnostic>;
|
|
368
417
|
ModelService: ModelService<TAst, TDiagnostic, TTransfer>;
|
|
418
|
+
ClientSessionFactory: ClientSessionFactory;
|
|
369
419
|
};
|
|
370
420
|
mutableModel.TransferEncoder = transferEncoder;
|
|
371
421
|
mutableModel.ModelService = modelService;
|
|
422
|
+
mutableModel.ClientSessionFactory = new DefaultClientSessionFactory(sharedServices, options.clientSessionFactoryOptions);
|
|
372
423
|
|
|
373
424
|
return {
|
|
374
425
|
services: sharedServices,
|
|
@@ -380,6 +431,7 @@ export function makeTestServices<
|
|
|
380
431
|
selfSaveRegistry,
|
|
381
432
|
projectManager,
|
|
382
433
|
documentUriPolicy,
|
|
434
|
+
modelLedger,
|
|
383
435
|
serviceRegistry,
|
|
384
436
|
indexManager,
|
|
385
437
|
modelService,
|
|
@@ -71,6 +71,32 @@ export function makeCapturingLogger(): CapturingLogger {
|
|
|
71
71
|
return { logger: new Capturing(), lines };
|
|
72
72
|
}
|
|
73
73
|
|
|
74
|
+
/** A captured line with the logger component it was emitted under. */
|
|
75
|
+
export interface AttributedLine extends CapturedLine {
|
|
76
|
+
readonly component: string | undefined;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/** A {@link Logger} whose emitted lines are captured with their component. */
|
|
80
|
+
export interface AttributingLogger {
|
|
81
|
+
readonly logger: Logger;
|
|
82
|
+
/** Every line emitted through the logger (and its derived children), in order. */
|
|
83
|
+
readonly lines: AttributedLine[];
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
/** A capturing logger that also records each line's component, which {@link makeCapturingLogger} drops. */
|
|
87
|
+
export function makeAttributingLogger(): AttributingLogger {
|
|
88
|
+
const lines: AttributedLine[] = [];
|
|
89
|
+
class Attributing extends NoopLogger {
|
|
90
|
+
protected override emit(level: LogLevel, _label: string, message: string): void {
|
|
91
|
+
lines.push({ level, message, component: this.component });
|
|
92
|
+
}
|
|
93
|
+
protected override derive(component: string): this {
|
|
94
|
+
return new Attributing(component) as this;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
return { logger: new Attributing(), lines };
|
|
98
|
+
}
|
|
99
|
+
|
|
74
100
|
/** A {@link Tracer} whose emitted lines are captured for assertions. */
|
|
75
101
|
export interface CapturingTracer {
|
|
76
102
|
readonly tracer: Tracer;
|
|
@@ -0,0 +1,141 @@
|
|
|
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
|
+
import {
|
|
11
|
+
ApplyWorkspaceEditRequest,
|
|
12
|
+
type ApplyWorkspaceEditParams,
|
|
13
|
+
type ApplyWorkspaceEditResult,
|
|
14
|
+
type ProtocolConnection,
|
|
15
|
+
type WorkspaceEdit
|
|
16
|
+
} from 'vscode-languageserver-protocol/node';
|
|
17
|
+
import type { AppliedEdit, NextAppliedEditOptions } from './lsp-server-connection.js';
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* The client side of `workspace/applyEdit` on one LSP connection, shared by the
|
|
21
|
+
* in-process and the spawned tiers so their capture and wait cannot drift.
|
|
22
|
+
*/
|
|
23
|
+
export interface AppliedEditCapture {
|
|
24
|
+
readonly appliedEdits: ReadonlyArray<AppliedEdit>;
|
|
25
|
+
nextAppliedEdit(uri: string, timeoutMsOrOptions?: number | NextAppliedEditOptions): Promise<AppliedEdit>;
|
|
26
|
+
setApplyEditHandler(handler: (params: ApplyWorkspaceEditParams) => ApplyWorkspaceEditResult | Promise<ApplyWorkspaceEditResult>): void;
|
|
27
|
+
dispose(): void;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Answer and record every `workspace/applyEdit` arriving on `client`.
|
|
32
|
+
*
|
|
33
|
+
* Register before the connection can receive one: `vscode-jsonrpc` keeps a
|
|
34
|
+
* single handler per request type, so this must be the only `applyEdit`
|
|
35
|
+
* handler on `client`, and a second registration displaces the capture.
|
|
36
|
+
*/
|
|
37
|
+
export function captureAppliedEdits(client: ProtocolConnection, defaultTimeoutMs: number): AppliedEditCapture {
|
|
38
|
+
const appliedEdits: AppliedEdit[] = [];
|
|
39
|
+
const waiters: Array<(edit: AppliedEdit) => boolean> = [];
|
|
40
|
+
let handler: (params: ApplyWorkspaceEditParams) => ApplyWorkspaceEditResult | Promise<ApplyWorkspaceEditResult> = () => ({
|
|
41
|
+
applied: true
|
|
42
|
+
});
|
|
43
|
+
const subscription = client.onRequest(ApplyWorkspaceEditRequest.type, (params: ApplyWorkspaceEditParams) => {
|
|
44
|
+
const edit: AppliedEdit = { params, uris: editedUris(params.edit), text: insertedText(params.edit) };
|
|
45
|
+
// Record before the handler runs, so a handler that rejects the edit or
|
|
46
|
+
// throws still leaves the push observable — the send is what the egress
|
|
47
|
+
// assertion is about.
|
|
48
|
+
appliedEdits.push(edit);
|
|
49
|
+
for (const waiter of [...waiters]) {
|
|
50
|
+
if (waiter(edit)) {
|
|
51
|
+
const at = waiters.indexOf(waiter);
|
|
52
|
+
if (at >= 0) {
|
|
53
|
+
waiters.splice(at, 1);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
return handler(params);
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
return {
|
|
61
|
+
appliedEdits,
|
|
62
|
+
|
|
63
|
+
nextAppliedEdit(uri: string, timeoutMsOrOptions?: number | NextAppliedEditOptions): Promise<AppliedEdit> {
|
|
64
|
+
const options: NextAppliedEditOptions =
|
|
65
|
+
typeof timeoutMsOrOptions === 'number' ? { timeoutMs: timeoutMsOrOptions } : (timeoutMsOrOptions ?? {});
|
|
66
|
+
const timeoutMs = options.timeoutMs ?? defaultTimeoutMs;
|
|
67
|
+
const { fromIndex, match } = options;
|
|
68
|
+
const matches = (edit: AppliedEdit): boolean => edit.uris.includes(uri) && (match?.(edit) ?? true);
|
|
69
|
+
if (fromIndex !== undefined) {
|
|
70
|
+
// Replay from the capture first: the push may already have arrived,
|
|
71
|
+
// and a waiter only ever sees later ones.
|
|
72
|
+
const captured = appliedEdits.slice(Math.max(0, fromIndex)).find(matches);
|
|
73
|
+
if (captured) {
|
|
74
|
+
return Promise.resolve(captured);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
return new Promise<AppliedEdit>((resolve, reject) => {
|
|
78
|
+
const waiter = (edit: AppliedEdit): boolean => {
|
|
79
|
+
if (!matches(edit)) {
|
|
80
|
+
return false;
|
|
81
|
+
}
|
|
82
|
+
clearTimeout(timer);
|
|
83
|
+
resolve(edit);
|
|
84
|
+
return true;
|
|
85
|
+
};
|
|
86
|
+
const timer = setTimeout(() => {
|
|
87
|
+
const at = waiters.indexOf(waiter);
|
|
88
|
+
if (at >= 0) {
|
|
89
|
+
waiters.splice(at, 1);
|
|
90
|
+
}
|
|
91
|
+
reject(new Error(`Timed out waiting for a workspace/applyEdit addressing ${uri}`));
|
|
92
|
+
}, timeoutMs);
|
|
93
|
+
waiters.push(waiter);
|
|
94
|
+
});
|
|
95
|
+
},
|
|
96
|
+
|
|
97
|
+
setApplyEditHandler(next: (params: ApplyWorkspaceEditParams) => ApplyWorkspaceEditResult | Promise<ApplyWorkspaceEditResult>): void {
|
|
98
|
+
handler = next;
|
|
99
|
+
},
|
|
100
|
+
|
|
101
|
+
dispose(): void {
|
|
102
|
+
subscription.dispose();
|
|
103
|
+
}
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/** Every URI a {@link WorkspaceEdit} addresses, in `documentChanges` then `changes` order. */
|
|
108
|
+
function editedUris(edit: WorkspaceEdit): string[] {
|
|
109
|
+
const uris: string[] = [];
|
|
110
|
+
for (const change of edit.documentChanges ?? []) {
|
|
111
|
+
if ('textDocument' in change) {
|
|
112
|
+
uris.push(change.textDocument.uri);
|
|
113
|
+
} else if ('oldUri' in change) {
|
|
114
|
+
uris.push(change.oldUri, change.newUri);
|
|
115
|
+
} else {
|
|
116
|
+
uris.push(change.uri);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
uris.push(...Object.keys(edit.changes ?? {}));
|
|
120
|
+
return uris;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
/** Every text edit's `newText` in a {@link WorkspaceEdit}, concatenated in edit order. */
|
|
124
|
+
function insertedText(edit: WorkspaceEdit): string {
|
|
125
|
+
const parts: string[] = [];
|
|
126
|
+
for (const change of edit.documentChanges ?? []) {
|
|
127
|
+
if ('edits' in change) {
|
|
128
|
+
for (const textEdit of change.edits) {
|
|
129
|
+
if ('newText' in textEdit) {
|
|
130
|
+
parts.push(textEdit.newText);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
for (const textEdits of Object.values(edit.changes ?? {})) {
|
|
136
|
+
for (const textEdit of textEdits) {
|
|
137
|
+
parts.push(textEdit.newText);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
return parts.join('');
|
|
141
|
+
}
|
|
@@ -216,12 +216,14 @@ export function makeLspHarness(options: MakeLspHarnessOptions): LspHarness {
|
|
|
216
216
|
},
|
|
217
217
|
shutdown: transport.shutdown,
|
|
218
218
|
openDocument: transport.openDocument,
|
|
219
|
+
closeDocument: transport.closeDocument,
|
|
219
220
|
changeDocument: transport.changeDocument,
|
|
220
221
|
completion: transport.completion,
|
|
221
222
|
hover: transport.hover,
|
|
222
223
|
semanticTokens: transport.semanticTokens,
|
|
223
224
|
nextDiagnostics: transport.nextDiagnostics,
|
|
224
225
|
appliedEdits: transport.appliedEdits,
|
|
226
|
+
wireBytes: transport.wireBytes,
|
|
225
227
|
nextAppliedEdit: transport.nextAppliedEdit,
|
|
226
228
|
setApplyEditHandler: transport.setApplyEditHandler,
|
|
227
229
|
buildWorkspace: folders => buildWorkspaceProgrammatically(services, folders),
|