@hydranium/core 1.0.0-next.27 → 1.0.0-next.271
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 +64 -82
- package/lib/documents/ast-document-manager.d.ts +219 -122
- package/lib/documents/ast-document-manager.d.ts.map +1 -1
- package/lib/documents/ast-document-manager.js +242 -130
- 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 +86 -0
- package/lib/documents/dirty-state-tracker.d.ts.map +1 -0
- package/lib/documents/dirty-state-tracker.js +72 -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 +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 +401 -282
- package/lib/documents/hydranium-text-documents.d.ts.map +1 -1
- package/lib/documents/hydranium-text-documents.js +827 -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 +218 -0
- package/lib/documents/language-client-shadow.d.ts.map +1 -0
- package/lib/documents/language-client-shadow.js +284 -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 +5 -0
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +8 -0
- package/lib/index.js.map +1 -1
- package/lib/langium/ast-extension/ast-extension-service.d.ts +3 -0
- package/lib/langium/ast-extension/ast-extension-service.d.ts.map +1 -1
- package/lib/langium/ast-extension/ast-extension-service.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 +34 -25
- package/lib/langium/bootstrap.d.ts.map +1 -1
- package/lib/langium/bootstrap.js +77 -37
- package/lib/langium/bootstrap.js.map +1 -1
- package/lib/langium/build-phase-pass/build-phase-pass-service.d.ts +1 -1
- 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.map +1 -1
- package/lib/langium/build-phase-pass/build-phase-pass.d.ts +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/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 +10 -3
- package/lib/langium/diagnostics/logger.d.ts.map +1 -1
- package/lib/langium/diagnostics/logger.js +12 -5
- package/lib/langium/diagnostics/logger.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 +58 -17
- 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 +32 -5
- 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 +309 -35
- package/lib/langium/document-builder/document-builder.d.ts.map +1 -1
- package/lib/langium/document-builder/document-builder.js +511 -75
- 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 +61 -19
- 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 +16 -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 +83 -27
- package/lib/langium/integrity/integrity-service.d.ts.map +1 -1
- package/lib/langium/integrity/integrity-service.js +273 -63
- 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/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 +343 -0
- package/lib/langium/model-service/client-session.d.ts.map +1 -0
- package/lib/langium/model-service/client-session.js +428 -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 +61 -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 +433 -282
- package/lib/langium/model-service/model-service.d.ts.map +1 -1
- package/lib/langium/model-service/model-service.js +537 -441
- package/lib/langium/model-service/model-service.js.map +1 -1
- package/lib/langium/module.d.ts +151 -36
- package/lib/langium/module.d.ts.map +1 -1
- package/lib/langium/module.js +48 -36
- package/lib/langium/module.js.map +1 -1
- package/lib/langium/naming/name-provider.d.ts +27 -6
- package/lib/langium/naming/name-provider.d.ts.map +1 -1
- package/lib/langium/naming/name-provider.js +4 -3
- package/lib/langium/naming/name-provider.js.map +1 -1
- package/lib/langium/naming/name-separator-validation.d.ts +23 -1
- package/lib/langium/naming/name-separator-validation.d.ts.map +1 -1
- package/lib/langium/naming/name-separator-validation.js +22 -0
- package/lib/langium/naming/name-separator-validation.js.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 +35 -12
- package/lib/langium/residency/cst-residency-service.d.ts.map +1 -1
- package/lib/langium/residency/cst-residency-service.js +23 -57
- 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 +61 -24
- package/lib/langium/scope/hydranium-scope-provider.d.ts.map +1 -1
- package/lib/langium/scope/hydranium-scope-provider.js +74 -35
- 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 +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/serialization/json-serializer.d.ts +1 -1
- package/lib/langium/serialization/json-serializer.d.ts.map +1 -1
- 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.map +1 -1
- 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 +23 -6
- 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 +88 -36
- package/lib/langium/transfer/transfer-encoder.d.ts.map +1 -1
- package/lib/langium/transfer/transfer-encoder.js +46 -24
- 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/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 +280 -9
- package/lib/langium/validation/document-validator.d.ts.map +1 -1
- package/lib/langium/validation/document-validator.js +453 -8
- 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 +15 -10
- package/lib/langium/workspace/document-uri-policy.d.ts.map +1 -1
- package/lib/langium/workspace/document-uri-policy.js +7 -5
- 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 +147 -9
- package/lib/langium/workspace/file-system-provider.d.ts.map +1 -1
- package/lib/langium/workspace/file-system-provider.js +97 -14
- package/lib/langium/workspace/file-system-provider.js.map +1 -1
- package/lib/langium/workspace/hydranium-langium-document-factory.d.ts +56 -1
- package/lib/langium/workspace/hydranium-langium-document-factory.d.ts.map +1 -1
- package/lib/langium/workspace/hydranium-langium-document-factory.js +79 -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 +82 -9
- package/lib/langium/workspace/hydranium-workspace-manager.d.ts.map +1 -1
- package/lib/langium/workspace/hydranium-workspace-manager.js +129 -12
- package/lib/langium/workspace/hydranium-workspace-manager.js.map +1 -1
- package/lib/langium/workspace/in-memory-file-system-provider.d.ts +22 -7
- package/lib/langium/workspace/in-memory-file-system-provider.d.ts.map +1 -1
- package/lib/langium/workspace/in-memory-file-system-provider.js +36 -19
- 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 +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 +37 -4
- package/lib/langium/workspace/langium-documents.d.ts.map +1 -1
- package/lib/langium/workspace/langium-documents.js +49 -4
- package/lib/langium/workspace/langium-documents.js.map +1 -1
- package/lib/langium/workspace/persistent-file-system-provider.d.ts +1 -8
- package/lib/langium/workspace/persistent-file-system-provider.d.ts.map +1 -1
- package/lib/langium/workspace/persistent-file-system-provider.js +2 -8
- 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 +48 -15
- package/lib/langium/workspace/virtual-document.d.ts.map +1 -1
- package/lib/langium/workspace/virtual-document.js +78 -18
- package/lib/langium/workspace/virtual-document.js.map +1 -1
- package/lib/langium/workspace/write-lock-scope.d.ts +20 -10
- package/lib/langium/workspace/write-lock-scope.d.ts.map +1 -1
- package/lib/langium/workspace/write-lock-scope.js +12 -4
- 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/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 +92 -81
- package/lib/lsp/hydranium-document-update-handler.d.ts.map +1 -1
- package/lib/lsp/hydranium-document-update-handler.js +155 -101
- 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 +18 -12
- package/lib/messages/carriers.d.ts.map +1 -1
- package/lib/messages/carriers.js +22 -13
- package/lib/messages/carriers.js.map +1 -1
- package/lib/messages/index.d.ts +4 -1
- package/lib/messages/index.d.ts.map +1 -1
- package/lib/messages/index.js +4 -1
- package/lib/messages/index.js.map +1 -1
- 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/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 +1 -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-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 +54 -9
- package/lib/node/node-file-system-provider.d.ts.map +1 -1
- package/lib/node/node-file-system-provider.js +141 -52
- 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 +20 -4
- package/lib/node/socket-launcher.d.ts.map +1 -1
- package/lib/node/socket-launcher.js +8 -7
- package/lib/node/socket-launcher.js.map +1 -1
- package/lib/node/stdio-launcher.d.ts +6 -5
- package/lib/node/stdio-launcher.d.ts.map +1 -1
- package/lib/node/stdio-launcher.js +13 -4
- package/lib/node/stdio-launcher.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 +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/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 +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 +72 -14
- package/lib/testing/make-test-services.d.ts.map +1 -1
- package/lib/testing/make-test-services.js +42 -10
- 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 +115 -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 +12 -4
- package/lib/testing/node/lsp-server-connection.d.ts.map +1 -1
- package/lib/testing/node/lsp-server-connection.js +45 -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 +35 -8
- package/lib/testing/playwright/server-log-capture.d.ts.map +1 -1
- package/lib/testing/playwright/server-log-capture.js +39 -6
- 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 +10 -1
- package/lib/testing/playwright/server-log-rename-reporter.js.map +1 -1
- package/lib/testing/run-update-pipeline.d.ts +6 -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 +24 -65
- 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 +115 -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 +19 -6
- package/lib/util/connection-liveness.d.ts.map +1 -1
- package/lib/util/connection-liveness.js +61 -15
- package/lib/util/connection-liveness.js.map +1 -1
- package/lib/util/environment.d.ts.map +1 -1
- package/lib/util/environment.js.map +1 -1
- package/lib/util/registry.d.ts.map +1 -1
- package/package.json +29 -53
- package/src/documents/ast-document-manager.ts +383 -231
- 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 +140 -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 +68 -0
- package/src/documents/hydranium-text-documents.ts +944 -595
- package/src/documents/index.ts +10 -2
- package/src/documents/language-client-shadow.ts +452 -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 +8 -0
- package/src/langium/ast-extension/ast-extension-service.ts +3 -0
- package/src/langium/ast-extension/ast-node-builder.ts +66 -22
- package/src/langium/bootstrap.ts +77 -37
- package/src/langium/build-phase-pass/build-phase-pass-service.ts +1 -1
- package/src/langium/build-phase-pass/build-phase-pass.ts +1 -1
- 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/hydranium-langium-profiler.ts +15 -39
- package/src/langium/diagnostics/log-preamble.ts +1 -1
- package/src/langium/diagnostics/logger.ts +12 -5
- package/src/langium/diagnostics/lsp-logger.ts +61 -16
- package/src/langium/document-builder/build-pipeline-integration.ts +50 -5
- package/src/langium/document-builder/build-session.ts +4 -3
- package/src/langium/document-builder/document-builder.ts +616 -73
- package/src/langium/integration-services.ts +83 -24
- package/src/langium/integrity/integrity-rule.ts +16 -8
- package/src/langium/integrity/integrity-service.ts +296 -69
- 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 +49 -8
- package/src/langium/model-service/client-session.ts +661 -0
- package/src/langium/model-service/index.ts +2 -0
- package/src/langium/model-service/model-events.ts +75 -0
- package/src/langium/model-service/model-service.ts +824 -471
- package/src/langium/module.ts +201 -66
- package/src/langium/naming/name-provider.ts +29 -7
- package/src/langium/naming/name-separator-validation.ts +25 -3
- 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 +50 -16
- 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 +89 -38
- 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 +13 -32
- package/src/langium/serialization/serializer.ts +1 -1
- package/src/langium/service-registry.ts +41 -2
- package/src/langium/shared-services.ts +26 -6
- package/src/langium/single-langium-copy.ts +42 -0
- package/src/langium/transfer/transfer-encoder.ts +115 -47
- 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-service.ts +1 -1
- package/src/langium/update-rewrite/update-rewrite.ts +1 -1
- package/src/langium/validation/document-validator.ts +528 -13
- package/src/langium/validation/validation-contribution-collector.ts +10 -1
- package/src/langium/workspace/document-uri-policy.ts +15 -10
- package/src/langium/workspace/file-not-found.ts +35 -0
- package/src/langium/workspace/file-system-provider.ts +221 -17
- package/src/langium/workspace/hydranium-langium-document-factory.ts +117 -0
- package/src/langium/workspace/hydranium-workspace-lock.ts +86 -2
- package/src/langium/workspace/hydranium-workspace-manager.ts +155 -16
- package/src/langium/workspace/in-memory-file-system-provider.ts +41 -20
- package/src/langium/workspace/index.ts +1 -0
- package/src/langium/workspace/initialize-workspace.ts +43 -5
- package/src/langium/workspace/langium-documents.ts +63 -5
- package/src/langium/workspace/persistent-file-system-provider.ts +3 -9
- package/src/langium/workspace/self-save-registry.ts +118 -0
- package/src/langium/workspace/virtual-document.ts +96 -19
- package/src/langium/workspace/write-lock-scope.ts +24 -11
- package/src/launcher/integrated-server.ts +3 -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 +197 -110
- 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 +23 -15
- package/src/messages/index.ts +13 -1
- package/src/messages/renderer.ts +212 -0
- package/src/node/event-loop-monitor.ts +2 -1
- package/src/node/heap-ceiling.ts +108 -0
- package/src/node/index.ts +1 -1
- package/src/node/latency-from-env.ts +1 -1
- 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 +157 -56
- 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 +27 -11
- package/src/node/stdio-launcher.ts +18 -9
- package/src/testing/document-uri-policy-conformance.ts +1 -1
- package/src/testing/fake-document.ts +24 -5
- package/src/testing/index.ts +2 -1
- package/src/testing/langium-test-helpers.ts +1 -0
- package/src/testing/make-noop-shared-services.ts +50 -2
- package/src/testing/make-test-services.ts +125 -31
- package/src/testing/make-test-tracer.ts +26 -0
- package/src/testing/node/applied-edit-capture.ts +139 -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 +74 -117
- 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 +63 -11
- 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 +12 -1
- package/src/testing/run-update-pipeline.ts +6 -5
- package/src/testing/stub-ast-document-manager.ts +36 -138
- package/src/testing/stub-document-builder.ts +133 -18
- package/src/testing/stub-hydranium-text-documents.ts +165 -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 +67 -15
- package/src/util/environment.ts +9 -1
- 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
|
@@ -7,9 +7,8 @@
|
|
|
7
7
|
* SPDX-License-Identifier: MIT
|
|
8
8
|
********************************************************************************/
|
|
9
9
|
|
|
10
|
-
import { Deferred } from '@hydranium/langium';
|
|
11
10
|
import * as net from 'node:net';
|
|
12
|
-
import type
|
|
11
|
+
import { Deferred, describeErrorWithStack, type Disposable, type Logger } from '@hydranium/protocol';
|
|
13
12
|
import { createMessageConnection, SocketMessageReader, SocketMessageWriter } from 'vscode-jsonrpc/node';
|
|
14
13
|
import type { MessageConnection } from 'vscode-jsonrpc';
|
|
15
14
|
import type { IntegratedServer } from '../launcher/integrated-server.js';
|
|
@@ -25,9 +24,25 @@ export interface SocketServerOptions {
|
|
|
25
24
|
*/
|
|
26
25
|
readonly port?: number;
|
|
27
26
|
/**
|
|
28
|
-
*
|
|
29
|
-
*
|
|
30
|
-
*
|
|
27
|
+
* Interface to bind. Default `'127.0.0.1'` (LOCAL ONLY) — a head whose
|
|
28
|
+
* port is OS-assigned and announced over the LSP connection is
|
|
29
|
+
* reachable only by a client on the same machine anyway, so a wider
|
|
30
|
+
* binding exposes a port nothing off-box can address. Matches
|
|
31
|
+
* `startGlspServer`'s default, so the two socket heads agree.
|
|
32
|
+
*
|
|
33
|
+
* Pass `'::'` for every interface: that is the dual-stack any-address,
|
|
34
|
+
* so both IPv4 and IPv6 clients connect. `'0.0.0.0'` is NOT the same —
|
|
35
|
+
* it takes IPv4 only and refuses `::1`.
|
|
36
|
+
*
|
|
37
|
+
* An address no local interface holds fails the bind, so `started`
|
|
38
|
+
* rejects with `EADDRNOTAVAIL` rather than falling back to a wider one.
|
|
39
|
+
*/
|
|
40
|
+
readonly host?: string;
|
|
41
|
+
/**
|
|
42
|
+
* Optional logger for lifecycle lines and each connection's protocol
|
|
43
|
+
* faults. If omitted, the launcher runs silently — the adopter is expected
|
|
44
|
+
* to surface lifecycle events through their own logging in
|
|
45
|
+
* {@link OnClientConnection} if needed.
|
|
31
46
|
*/
|
|
32
47
|
readonly logger?: Logger;
|
|
33
48
|
/** Tag included in lifecycle log lines. Default `"SocketServer"`. */
|
|
@@ -88,6 +103,7 @@ export interface StartedSocketServer extends IntegratedServer {
|
|
|
88
103
|
*/
|
|
89
104
|
export function startSocketServer(options: SocketServerOptions, onClientConnection: OnClientConnection): StartedSocketServer {
|
|
90
105
|
const port = options.port ?? 0;
|
|
106
|
+
const host = options.host ?? '127.0.0.1';
|
|
91
107
|
const logger = options.logger;
|
|
92
108
|
const tag = options.logTag ?? 'SocketServer';
|
|
93
109
|
const started = new Deferred<void>();
|
|
@@ -100,7 +116,7 @@ export function startSocketServer(options: SocketServerOptions, onClientConnecti
|
|
|
100
116
|
const activeConnections: Array<{ connection: MessageConnection; adopterDisposable: Disposable }> = [];
|
|
101
117
|
|
|
102
118
|
const netServer = net.createServer(socket => {
|
|
103
|
-
const connection = createMessageConnection(new SocketMessageReader(socket), new SocketMessageWriter(socket));
|
|
119
|
+
const connection = createMessageConnection(new SocketMessageReader(socket), new SocketMessageWriter(socket), logger?.with(tag));
|
|
104
120
|
const adopterDisposable = onClientConnection(connection);
|
|
105
121
|
const entry = { connection, adopterDisposable };
|
|
106
122
|
activeConnections.push(entry);
|
|
@@ -115,7 +131,7 @@ export function startSocketServer(options: SocketServerOptions, onClientConnecti
|
|
|
115
131
|
try {
|
|
116
132
|
adopterDisposable.dispose();
|
|
117
133
|
} catch (err) {
|
|
118
|
-
logger?.warn(`[${tag}] Adopter disposable threw on cleanup: ${(err
|
|
134
|
+
logger?.warn(`[${tag}] Adopter disposable threw on cleanup: ${describeErrorWithStack(err)}`);
|
|
119
135
|
}
|
|
120
136
|
connection.dispose();
|
|
121
137
|
const idx = activeConnections.indexOf(entry);
|
|
@@ -128,7 +144,7 @@ export function startSocketServer(options: SocketServerOptions, onClientConnecti
|
|
|
128
144
|
connection.listen();
|
|
129
145
|
});
|
|
130
146
|
|
|
131
|
-
netServer.listen(port);
|
|
147
|
+
netServer.listen(port, host);
|
|
132
148
|
netServer.on('listening', () => {
|
|
133
149
|
const addressInfo = netServer.address();
|
|
134
150
|
if (!addressInfo) {
|
|
@@ -144,11 +160,11 @@ export function startSocketServer(options: SocketServerOptions, onClientConnecti
|
|
|
144
160
|
return;
|
|
145
161
|
}
|
|
146
162
|
handle.port = addressInfo.port;
|
|
147
|
-
logger?.info(`[${tag}] Ready to accept new client requests on port: ${addressInfo.port}`);
|
|
163
|
+
logger?.info(`[${tag}] Ready to accept new client requests on ${addressInfo.address} port: ${addressInfo.port}`);
|
|
148
164
|
started.resolve();
|
|
149
165
|
});
|
|
150
166
|
netServer.on('error', err => {
|
|
151
|
-
logger?.error(`[${tag}] Error: ${err
|
|
167
|
+
logger?.error(`[${tag}] Error: ${describeErrorWithStack(err)}`);
|
|
152
168
|
started.reject(err);
|
|
153
169
|
});
|
|
154
170
|
netServer.on('close', () => {
|
|
@@ -158,7 +174,7 @@ export function startSocketServer(options: SocketServerOptions, onClientConnecti
|
|
|
158
174
|
try {
|
|
159
175
|
entry.adopterDisposable.dispose();
|
|
160
176
|
} catch (err) {
|
|
161
|
-
logger?.warn(`[${tag}] Adopter disposable threw on shutdown: ${(err
|
|
177
|
+
logger?.warn(`[${tag}] Adopter disposable threw on shutdown: ${describeErrorWithStack(err)}`);
|
|
162
178
|
}
|
|
163
179
|
entry.connection.dispose();
|
|
164
180
|
}
|
|
@@ -7,8 +7,7 @@
|
|
|
7
7
|
* SPDX-License-Identifier: MIT
|
|
8
8
|
********************************************************************************/
|
|
9
9
|
|
|
10
|
-
import { Deferred } from '@hydranium/
|
|
11
|
-
import type { Disposable, Logger } from '@hydranium/protocol';
|
|
10
|
+
import { Deferred, type Disposable, type Logger, describeError, describeErrorWithStack } from '@hydranium/protocol';
|
|
12
11
|
import type { MessageConnection } from 'vscode-jsonrpc';
|
|
13
12
|
import { createMessageConnection, StreamMessageReader, StreamMessageWriter } from 'vscode-jsonrpc/node';
|
|
14
13
|
import type { IntegratedServer } from '../launcher/integrated-server.js';
|
|
@@ -30,10 +29,11 @@ export interface StdioServerOptions {
|
|
|
30
29
|
*/
|
|
31
30
|
readonly workspace?: WorkspaceFolderInput | ReadonlyArray<WorkspaceFolderInput>;
|
|
32
31
|
/**
|
|
33
|
-
* Optional logger for lifecycle lines
|
|
34
|
-
*
|
|
35
|
-
*
|
|
36
|
-
*
|
|
32
|
+
* Optional logger for lifecycle lines and the connection's protocol
|
|
33
|
+
* faults. Omitted means silent — note that a logger writing to **stdout**
|
|
34
|
+
* would corrupt this head's protocol stream, so anything passed here must
|
|
35
|
+
* sink elsewhere. The framework's own `LspLogger` writes to stderr when no
|
|
36
|
+
* LSP connection is bound, which is correct here.
|
|
37
37
|
*/
|
|
38
38
|
readonly logger?: Logger;
|
|
39
39
|
/** Tag included in lifecycle log lines. Default `"StdioServer"`. */
|
|
@@ -101,7 +101,8 @@ export function startStdioServer(
|
|
|
101
101
|
|
|
102
102
|
const connection = createMessageConnection(
|
|
103
103
|
new StreamMessageReader(options.input ?? process.stdin),
|
|
104
|
-
new StreamMessageWriter(options.output ?? process.stdout)
|
|
104
|
+
new StreamMessageWriter(options.output ?? process.stdout),
|
|
105
|
+
logger?.with(tag)
|
|
105
106
|
);
|
|
106
107
|
const adopterDisposable = onConnection(connection);
|
|
107
108
|
|
|
@@ -114,17 +115,21 @@ export function startStdioServer(
|
|
|
114
115
|
try {
|
|
115
116
|
adopterDisposable.dispose();
|
|
116
117
|
} catch (err: unknown) {
|
|
117
|
-
logger?.warn(`[${tag}] Adopter disposable threw on cleanup: ${
|
|
118
|
+
logger?.warn(`[${tag}] Adopter disposable threw on cleanup: ${describeErrorWithStack(err)}`);
|
|
118
119
|
}
|
|
119
120
|
connection.dispose();
|
|
120
121
|
stopped.resolve();
|
|
121
122
|
};
|
|
122
123
|
connection.onClose(() => close());
|
|
123
124
|
|
|
125
|
+
// The workspace manager logs a failed initialization itself.
|
|
126
|
+
let initializing = false;
|
|
124
127
|
const begin = async (): Promise<void> => {
|
|
125
128
|
if (options.workspace !== undefined) {
|
|
126
129
|
logger?.info(`[${tag}] Initializing workspace`);
|
|
130
|
+
initializing = true;
|
|
127
131
|
await initializeWorkspaceProgrammatically(options.shared, options.workspace);
|
|
132
|
+
initializing = false;
|
|
128
133
|
}
|
|
129
134
|
// Only now attach the reader — see the ordering note in the doc above.
|
|
130
135
|
connection.listen();
|
|
@@ -137,7 +142,11 @@ export function startStdioServer(
|
|
|
137
142
|
// A failed startup must not leave a half-live head: report it on
|
|
138
143
|
// `started` and tear the connection down rather than listening over an
|
|
139
144
|
// uninitialized workspace.
|
|
140
|
-
|
|
145
|
+
if (initializing) {
|
|
146
|
+
logger?.debug(`[${tag}] Startup failed: the workspace did not initialize. ${describeError(err)}`);
|
|
147
|
+
} else {
|
|
148
|
+
logger?.error(`[${tag}] Startup failed: ${describeErrorWithStack(err)}`);
|
|
149
|
+
}
|
|
141
150
|
started.reject(err);
|
|
142
151
|
close();
|
|
143
152
|
}
|
|
@@ -96,7 +96,7 @@ export function documentUriPolicyConformance(
|
|
|
96
96
|
// Computed here rather than tallied from the assertions above, so the
|
|
97
97
|
// guard does not depend on the runner executing tests in declaration
|
|
98
98
|
// order (a `--shuffle` run would otherwise read it as zero).
|
|
99
|
-
it(`at least one sample URI is loadable
|
|
99
|
+
it(`at least one sample URI is loadable among ${sampleUris.join(', ')}`, () => {
|
|
100
100
|
const loadable = sampleUris.filter(uri => makePolicy().loadUri(uri) !== undefined);
|
|
101
101
|
expect(loadable.length > 0).toBe(true);
|
|
102
102
|
});
|
|
@@ -7,7 +7,9 @@
|
|
|
7
7
|
* SPDX-License-Identifier: MIT
|
|
8
8
|
********************************************************************************/
|
|
9
9
|
|
|
10
|
-
import { DocumentState, type AstNode, type LangiumDocument, UriUtils, type URI } from '@hydranium/langium';
|
|
10
|
+
import { DocumentState, type AstNode, type AstReflection, type LangiumDocument, UriUtils, type URI } from '@hydranium/langium';
|
|
11
|
+
import { buildAstNode } from '../langium/ast-extension/ast-node-builder.js';
|
|
12
|
+
import { type AstDiagnostic } from '../langium/validation/document-validator.js';
|
|
11
13
|
|
|
12
14
|
/**
|
|
13
15
|
* Build a typed AST-node fixture for unit tests.
|
|
@@ -23,12 +25,29 @@ import { DocumentState, type AstNode, type LangiumDocument, UriUtils, type URI }
|
|
|
23
25
|
* framework synthetic node, and marking it would change scope/index behaviour.
|
|
24
26
|
* A test that wants a genuine synthetic node calls `markSynthetic` explicitly.
|
|
25
27
|
*
|
|
28
|
+
* **Without a `reflection`, the fixture carries only what the test spells out**,
|
|
29
|
+
* which is a shape production never produces: a parsed or built node always has
|
|
30
|
+
* its grammar-declared containment arrays, so a fixture that omits one lets a
|
|
31
|
+
* test pass against an impossible node, and lets code that walks a list crash
|
|
32
|
+
* only under test. Pass the grammar's reflection whenever the type is a real
|
|
33
|
+
* one and the code under test reads a collection off it. Fixtures typed against
|
|
34
|
+
* ad-hoc names have no reflection to pass and keep the plain form.
|
|
35
|
+
*
|
|
26
36
|
* @param node the node shape — `$type` is required; every other property is a
|
|
27
37
|
* value the test cares about (`$container`, cross-reference values, internal
|
|
28
|
-
* `_id` fields, …).
|
|
38
|
+
* `_id` fields, …).
|
|
39
|
+
* @param reflection when given, pre-fills the grammar's declared defaults the
|
|
40
|
+
* same way {@link buildAstNode} does, and the result is a fresh object rather
|
|
41
|
+
* than `node` itself. Omitted, `node` is returned by reference.
|
|
29
42
|
*/
|
|
30
|
-
export function makeFakeAstNode<TAst extends AstNode = AstNode>(
|
|
31
|
-
|
|
43
|
+
export function makeFakeAstNode<TAst extends AstNode = AstNode>(
|
|
44
|
+
node: { $type: string } & Record<string, unknown>,
|
|
45
|
+
reflection?: AstReflection
|
|
46
|
+
): TAst {
|
|
47
|
+
if (!reflection) {
|
|
48
|
+
return node as unknown as TAst;
|
|
49
|
+
}
|
|
50
|
+
return buildAstNode<TAst>(reflection, node.$type, node);
|
|
32
51
|
}
|
|
33
52
|
|
|
34
53
|
/**
|
|
@@ -86,7 +105,7 @@ function stringifyFakeRoot(root: unknown): string {
|
|
|
86
105
|
* staging. Override via `options.state` for tests that gate on earlier
|
|
87
106
|
* phases.
|
|
88
107
|
*/
|
|
89
|
-
export function makeFakeDocument<TAst extends AstNode = AstNode, TDiagnostic =
|
|
108
|
+
export function makeFakeDocument<TAst extends AstNode = AstNode, TDiagnostic extends AstDiagnostic = AstDiagnostic>(
|
|
90
109
|
uri: string | URI,
|
|
91
110
|
root: TAst,
|
|
92
111
|
options: FakeDocumentOptions<TAst, TDiagnostic> = {}
|
package/src/testing/index.ts
CHANGED
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
* builders, the snapshot and URI-policy conformance primitives, the
|
|
15
15
|
* structured-write pipeline driver, and a re-export of `langium/test`.
|
|
16
16
|
*
|
|
17
|
-
* Neutrality is gated (`scripts/check-neutral-bundles.
|
|
17
|
+
* Neutrality is gated (`scripts/check-neutral-bundles.mts`). The test support
|
|
18
18
|
* that needs a real filesystem or a Node stream transport — the scratch
|
|
19
19
|
* workspace, the golden corpus, the LSP transport and its harness — lives at
|
|
20
20
|
* `@hydranium/core/testing/node`, on the same rule the package surface uses:
|
|
@@ -26,6 +26,7 @@ export * from './document-uri-policy-conformance.js';
|
|
|
26
26
|
export * from './fake-description.js';
|
|
27
27
|
export * from './fake-document.js';
|
|
28
28
|
export * from './fake-reflection.js';
|
|
29
|
+
// oxlint-disable-next-line import/export -- misreads export * from an npm package: https://github.com/oxc-project/oxc/pull/26872
|
|
29
30
|
export * from './langium-test-helpers.js';
|
|
30
31
|
export * from './make-noop-language-services.js';
|
|
31
32
|
export * from './make-noop-shared-services.js';
|
|
@@ -23,4 +23,5 @@
|
|
|
23
23
|
* contracts stays Langium upstream, so a rename there surfaces here rather than
|
|
24
24
|
* being absorbed by a hand-maintained list.
|
|
25
25
|
*/
|
|
26
|
+
// oxlint-disable-next-line import/export -- misreads export * from an npm package: https://github.com/oxc-project/oxc/pull/26872
|
|
26
27
|
export * from '@hydranium/langium/test';
|
|
@@ -9,6 +9,8 @@
|
|
|
9
9
|
|
|
10
10
|
import { type Clock, DefaultTracer, type Logger, NoopLogger, SystemClock, type Tracer } from '@hydranium/protocol';
|
|
11
11
|
import type { ServerSharedServicesMinimal } from '../langium/shared-services.js';
|
|
12
|
+
import { DefaultServerLocale, type ServerLocale } from '../locale/server-locale.js';
|
|
13
|
+
import { DefaultMessageRenderer, type MessageRenderer } from '../messages/renderer.js';
|
|
12
14
|
|
|
13
15
|
/**
|
|
14
16
|
* Overrides for {@link makeNoopSharedServices}. The three observability slots
|
|
@@ -29,6 +31,18 @@ export interface NoopSharedServicesOverrides {
|
|
|
29
31
|
Logger?: Logger;
|
|
30
32
|
/** Bound on the top-level `Tracer` slot. Default: a `DefaultTracer` over `Logger` + `Clock`. */
|
|
31
33
|
Tracer?: Tracer;
|
|
34
|
+
/** Factory for the `ServerLocale` slot. Default: a real one, reporting no locale. */
|
|
35
|
+
ServerLocale?: (services: ServerSharedServicesMinimal) => ServerLocale;
|
|
36
|
+
/**
|
|
37
|
+
* Factory for the `MessageRenderer` slot. Default: the real
|
|
38
|
+
* {@link DefaultMessageRenderer}, whose no-catalogue behaviour is a
|
|
39
|
+
* pass-through — so the default is the framework's own behaviour, not a stub.
|
|
40
|
+
*
|
|
41
|
+
* A factory rather than an instance, because a renderer reads the tree it is
|
|
42
|
+
* bound into. Both slots are resolved lazily, so an override is honoured
|
|
43
|
+
* however late the caller reads them.
|
|
44
|
+
*/
|
|
45
|
+
MessageRenderer?: (services: ServerSharedServicesMinimal) => MessageRenderer;
|
|
32
46
|
/** Per-slot `workspace` overrides. Slots left out resolve to `undefined`. */
|
|
33
47
|
workspace?: Record<string, unknown>;
|
|
34
48
|
/** Any other minimal slot (`ServiceRegistry`, `AstReflection`, `additionalDocuments`, …). */
|
|
@@ -63,11 +77,21 @@ export interface NoopSharedServicesOverrides {
|
|
|
63
77
|
export function makeNoopSharedServices<T extends ServerSharedServicesMinimal = ServerSharedServicesMinimal>(
|
|
64
78
|
overrides: NoopSharedServicesOverrides = {}
|
|
65
79
|
): T {
|
|
66
|
-
const {
|
|
80
|
+
const {
|
|
81
|
+
Clock: clock,
|
|
82
|
+
Logger: logger,
|
|
83
|
+
Tracer: tracer,
|
|
84
|
+
ServerLocale: serverLocale,
|
|
85
|
+
MessageRenderer: messageRenderer,
|
|
86
|
+
workspace,
|
|
87
|
+
additionalDocuments,
|
|
88
|
+
...restTop
|
|
89
|
+
} = overrides;
|
|
67
90
|
const resolvedClock = clock ?? new SystemClock();
|
|
68
91
|
const resolvedLogger = logger ?? new NoopLogger();
|
|
69
92
|
const resolvedTracer = tracer ?? new DefaultTracer(resolvedLogger, resolvedClock);
|
|
70
|
-
|
|
93
|
+
// Assembled in two steps, because both defaults read the tree they belong to.
|
|
94
|
+
const services = {
|
|
71
95
|
Clock: resolvedClock,
|
|
72
96
|
Logger: resolvedLogger,
|
|
73
97
|
Tracer: resolvedTracer,
|
|
@@ -75,4 +99,28 @@ export function makeNoopSharedServices<T extends ServerSharedServicesMinimal = S
|
|
|
75
99
|
...restTop,
|
|
76
100
|
workspace: { ...(workspace ?? {}) }
|
|
77
101
|
} as unknown as T;
|
|
102
|
+
// Lazy, like Langium's own per-slot construction — and load-bearing here:
|
|
103
|
+
// both services emit an `instantiated` trace, so building them eagerly puts
|
|
104
|
+
// two lines into the capture of every test that passes a capturing logger
|
|
105
|
+
// and asserts on emptiness.
|
|
106
|
+
defineLazySlot(services, 'ServerLocale', () => serverLocale?.(services) ?? new DefaultServerLocale(services));
|
|
107
|
+
defineLazySlot(services, 'MessageRenderer', () => messageRenderer?.(services) ?? new DefaultMessageRenderer(services));
|
|
108
|
+
return services;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/** Install `name` as a memoized getter, so nothing is constructed until it is read. */
|
|
112
|
+
function defineLazySlot(target: object, name: string, create: () => unknown): void {
|
|
113
|
+
let resolved: unknown;
|
|
114
|
+
let built = false;
|
|
115
|
+
Object.defineProperty(target, name, {
|
|
116
|
+
configurable: true,
|
|
117
|
+
enumerable: true,
|
|
118
|
+
get: () => {
|
|
119
|
+
if (!built) {
|
|
120
|
+
resolved = create();
|
|
121
|
+
built = true;
|
|
122
|
+
}
|
|
123
|
+
return resolved;
|
|
124
|
+
}
|
|
125
|
+
});
|
|
78
126
|
}
|
|
@@ -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,13 +19,25 @@ import {
|
|
|
18
19
|
type TransferDiagnostic,
|
|
19
20
|
type TransferElement
|
|
20
21
|
} from '@hydranium/protocol';
|
|
22
|
+
import { DefaultServerLocale, type ServerLocale } from '../locale/server-locale.js';
|
|
23
|
+
import { DefaultMessageRenderer, type MessageRenderer } from '../messages/renderer.js';
|
|
21
24
|
import type { Harness } from '@hydranium/protocol/testing';
|
|
22
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';
|
|
23
31
|
import type { ModelService, ModelServiceOptions } from '../langium/model-service/model-service.js';
|
|
24
32
|
import type { ServerSharedServices } from '../langium/module.js';
|
|
25
|
-
import {
|
|
33
|
+
import type { AstDiagnostic } from '../langium/validation/document-validator.js';
|
|
34
|
+
import { DefaultTransferEncoder, type TransferEncoder } from '../langium/transfer/transfer-encoder.js';
|
|
26
35
|
import { DefaultDocumentUriPolicy, type DocumentUriPolicy } from '../langium/workspace/document-uri-policy.js';
|
|
27
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';
|
|
28
41
|
import type { FakeDocumentOptions } from './fake-document.js';
|
|
29
42
|
import { makeStubDocumentBuilder, type StubDocumentBuilder } from './stub-document-builder.js';
|
|
30
43
|
import { makeStubIndexManager, type StubIndexManager } from './stub-index-manager.js';
|
|
@@ -46,12 +59,21 @@ import { makeStubWritableFileSystem, type StubWritableFileSystem } from './stub-
|
|
|
46
59
|
* to `ServerSharedServices` in {@link makeTestServices} is therefore the
|
|
47
60
|
* single named place where the "stub stands in for the full service tree"
|
|
48
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.
|
|
49
70
|
*/
|
|
50
71
|
export interface TestSharedServices<
|
|
51
72
|
TAst extends AstNode = AstNode,
|
|
52
|
-
TDiagnostic extends
|
|
73
|
+
TDiagnostic extends AstDiagnostic = AstDiagnostic,
|
|
53
74
|
TTransfer extends TransferElement = TransferElement,
|
|
54
|
-
TProject extends Project = Project
|
|
75
|
+
TProject extends Project = Project,
|
|
76
|
+
TTransferDiagnostic extends TransferDiagnostic = TransferDiagnostic
|
|
55
77
|
> {
|
|
56
78
|
readonly Clock: Clock;
|
|
57
79
|
readonly Logger: Logger;
|
|
@@ -72,6 +94,8 @@ export interface TestSharedServices<
|
|
|
72
94
|
SelfSaveRegistry: StubSelfSaveRegistry;
|
|
73
95
|
ProjectManager: StubProjectManager<TProject>;
|
|
74
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;
|
|
75
99
|
/**
|
|
76
100
|
* Present only when {@link MakeTestServicesOptions.seedIndex} was passed.
|
|
77
101
|
* Omitted otherwise for the same reason as `ServiceRegistry` — see that
|
|
@@ -88,19 +112,36 @@ export interface TestSharedServices<
|
|
|
88
112
|
* through this tree and let a reentrant write pass unnoticed.
|
|
89
113
|
*/
|
|
90
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;
|
|
91
121
|
};
|
|
92
122
|
readonly model: {
|
|
93
|
-
TransferEncoder: TransferEncoder<
|
|
123
|
+
TransferEncoder: TransferEncoder<TTransferDiagnostic>;
|
|
94
124
|
ModelService: ModelService<TAst, TDiagnostic, TTransfer>;
|
|
125
|
+
ClientSessionFactory: ClientSessionFactory;
|
|
95
126
|
};
|
|
127
|
+
/**
|
|
128
|
+
* The REAL services, not stubs — the framework renderer's no-catalogue
|
|
129
|
+
* behaviour is a pass-through, so the stub tree agrees with a production one
|
|
130
|
+
* unless a test installs a catalogue. Bound rather than omitted because
|
|
131
|
+
* `HydraniumDocumentBuilder` renders through the renderer on every
|
|
132
|
+
* `Validated` phase, where an omitted slot is a `TypeError`.
|
|
133
|
+
*/
|
|
134
|
+
readonly ServerLocale: ServerLocale;
|
|
135
|
+
readonly MessageRenderer: MessageRenderer;
|
|
96
136
|
}
|
|
97
137
|
|
|
98
138
|
/** Optional configuration for {@link makeTestServices}. */
|
|
99
139
|
export interface MakeTestServicesOptions<
|
|
100
140
|
TAst extends AstNode = AstNode,
|
|
101
|
-
TDiagnostic extends
|
|
141
|
+
TDiagnostic extends AstDiagnostic = AstDiagnostic,
|
|
102
142
|
TTransfer extends TransferElement = TransferElement,
|
|
103
|
-
TProject extends Project = Project
|
|
143
|
+
TProject extends Project = Project,
|
|
144
|
+
TTransferDiagnostic extends TransferDiagnostic = TransferDiagnostic
|
|
104
145
|
> {
|
|
105
146
|
/**
|
|
106
147
|
* Serialiser used by the bundled `StubModelService`. The stub tree
|
|
@@ -112,6 +153,14 @@ export interface MakeTestServicesOptions<
|
|
|
112
153
|
* for tests that don't assert on the produced text.
|
|
113
154
|
*/
|
|
114
155
|
serialize?: (uri: string, root: TTransfer) => string;
|
|
156
|
+
/**
|
|
157
|
+
* Renderer bound on `MessageRenderer`. Default: the framework's own, which
|
|
158
|
+
* passes every sentence through unchanged. Supply one to install a catalogue
|
|
159
|
+
* or to drive the throwing path.
|
|
160
|
+
*/
|
|
161
|
+
messageRenderer?: (services: ServerSharedServices<TProject>) => MessageRenderer;
|
|
162
|
+
/** Locale handed to the bundle's {@link ServerLocale}. Default: none, i.e. the framework's English. */
|
|
163
|
+
locale?: Locale;
|
|
115
164
|
/**
|
|
116
165
|
* Languages to register on a {@link StubServiceRegistry} bound on the
|
|
117
166
|
* `ServiceRegistry` slot. This is how a test gets multi-language routing:
|
|
@@ -120,7 +169,7 @@ export interface MakeTestServicesOptions<
|
|
|
120
169
|
*
|
|
121
170
|
* **Default: no `ServiceRegistry` slot at all.** Binding an empty registry
|
|
122
171
|
* by default would silently change behaviour for the tests that rely on the
|
|
123
|
-
* slot being absent — `
|
|
172
|
+
* slot being absent — `DefaultModelService.rewriteModel` optional-chains it
|
|
124
173
|
* precisely for those bundles — so a registry appears only when a test asks
|
|
125
174
|
* for one.
|
|
126
175
|
*/
|
|
@@ -178,16 +227,23 @@ export interface MakeTestServicesOptions<
|
|
|
178
227
|
modelService?: (services: ServerSharedServices<TProject>) => ModelService<TAst, TDiagnostic, TTransfer>;
|
|
179
228
|
/**
|
|
180
229
|
* Framework {@link ModelServiceOptions} for the DEFAULT stub service, so a
|
|
181
|
-
* test can reach an option-gated path (`
|
|
182
|
-
*
|
|
183
|
-
*
|
|
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.
|
|
184
233
|
*/
|
|
185
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;
|
|
186
242
|
/**
|
|
187
243
|
* Override the {@link TransferEncoder} factory. Default: framework
|
|
188
244
|
* {@link TransferEncoder} with no overrides.
|
|
189
245
|
*/
|
|
190
|
-
transferEncoder?: (services: ServerSharedServices<TProject>) => TransferEncoder<
|
|
246
|
+
transferEncoder?: (services: ServerSharedServices<TProject, TTransferDiagnostic>) => TransferEncoder<TTransferDiagnostic>;
|
|
191
247
|
}
|
|
192
248
|
|
|
193
249
|
/**
|
|
@@ -205,11 +261,12 @@ export interface MakeTestServicesOptions<
|
|
|
205
261
|
*/
|
|
206
262
|
export interface TestServicesBundle<
|
|
207
263
|
TAst extends AstNode = AstNode,
|
|
208
|
-
TDiagnostic extends
|
|
264
|
+
TDiagnostic extends AstDiagnostic = AstDiagnostic,
|
|
209
265
|
TTransfer extends TransferElement = TransferElement,
|
|
210
|
-
TProject extends Project = Project
|
|
266
|
+
TProject extends Project = Project,
|
|
267
|
+
TTransferDiagnostic extends TransferDiagnostic = TransferDiagnostic
|
|
211
268
|
> extends Harness {
|
|
212
|
-
readonly services: ServerSharedServices<TProject>;
|
|
269
|
+
readonly services: ServerSharedServices<TProject, TTransferDiagnostic>;
|
|
213
270
|
readonly documents: StubLangiumDocuments<TAst, TDiagnostic>;
|
|
214
271
|
readonly textDocuments: StubHydraniumTextDocuments;
|
|
215
272
|
readonly astDocumentManager: StubAstDocumentManager<TAst, TDiagnostic>;
|
|
@@ -218,6 +275,7 @@ export interface TestServicesBundle<
|
|
|
218
275
|
readonly selfSaveRegistry: StubSelfSaveRegistry;
|
|
219
276
|
readonly projectManager: StubProjectManager<TProject>;
|
|
220
277
|
readonly documentUriPolicy: DocumentUriPolicy;
|
|
278
|
+
readonly modelLedger: ModelLedger;
|
|
221
279
|
/**
|
|
222
280
|
* The registry bound on the `ServiceRegistry` slot, or `undefined` when no
|
|
223
281
|
* {@link MakeTestServicesOptions.languages} were declared.
|
|
@@ -229,10 +287,18 @@ export interface TestServicesBundle<
|
|
|
229
287
|
*/
|
|
230
288
|
readonly indexManager: StubIndexManager | undefined;
|
|
231
289
|
readonly modelService: ModelService<TAst, TDiagnostic, TTransfer>;
|
|
232
|
-
readonly transferEncoder: TransferEncoder<
|
|
290
|
+
readonly transferEncoder: TransferEncoder<TTransferDiagnostic>;
|
|
233
291
|
readonly logger: Logger;
|
|
234
292
|
/** The clock bound on the `Clock` slot — a `makeFakeClock()` if one was passed. */
|
|
235
293
|
readonly clock: Clock;
|
|
294
|
+
/**
|
|
295
|
+
* The service bound on `ServerLocale`, so a test can hand over a locale
|
|
296
|
+
* mid-run — which is also how it verifies the renderer reads the locale per
|
|
297
|
+
* render rather than caching it at construction.
|
|
298
|
+
*/
|
|
299
|
+
readonly serverLocale: ServerLocale;
|
|
300
|
+
/** The renderer bound on `MessageRenderer` — the framework's own unless one was supplied. */
|
|
301
|
+
readonly messageRenderer: MessageRenderer;
|
|
236
302
|
}
|
|
237
303
|
|
|
238
304
|
/**
|
|
@@ -247,22 +313,25 @@ export interface TestServicesBundle<
|
|
|
247
313
|
*/
|
|
248
314
|
export function makeTestServices<
|
|
249
315
|
TAst extends AstNode = AstNode,
|
|
250
|
-
TDiagnostic extends
|
|
316
|
+
TDiagnostic extends AstDiagnostic = AstDiagnostic,
|
|
251
317
|
TTransfer extends TransferElement = TransferElement,
|
|
252
|
-
TProject extends Project = Project
|
|
318
|
+
TProject extends Project = Project,
|
|
319
|
+
TTransferDiagnostic extends TransferDiagnostic = TransferDiagnostic
|
|
253
320
|
>(
|
|
254
|
-
options: MakeTestServicesOptions<TAst, TDiagnostic, TTransfer, TProject> = {}
|
|
255
|
-
): TestServicesBundle<TAst, TDiagnostic, TTransfer, TProject> {
|
|
321
|
+
options: MakeTestServicesOptions<TAst, TDiagnostic, TTransfer, TProject, TTransferDiagnostic> = {}
|
|
322
|
+
): TestServicesBundle<TAst, TDiagnostic, TTransfer, TProject, TTransferDiagnostic> {
|
|
256
323
|
const documents = makeStubLangiumDocuments<TAst, TDiagnostic>(options.seedDocuments);
|
|
257
324
|
const textDocuments = makeStubHydraniumTextDocuments();
|
|
258
|
-
const documentBuilder = makeStubDocumentBuilder();
|
|
259
|
-
const selfSaveRegistry = makeStubSelfSaveRegistry();
|
|
260
|
-
const fileSystem = makeStubWritableFileSystem(selfSaveRegistry);
|
|
261
|
-
const projectManager = makeStubProjectManager<TProject>(options.seedProjects);
|
|
262
|
-
const astDocumentManager = makeStubAstDocumentManager<TAst, TDiagnostic>(textDocuments, fileSystem, documents);
|
|
263
325
|
const logger = options.logger ?? new NoopLogger();
|
|
264
326
|
const clock = options.clock ?? new SystemClock();
|
|
265
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);
|
|
266
335
|
const documentUriPolicy = options.documentUriPolicy ?? new DefaultDocumentUriPolicy();
|
|
267
336
|
const serviceRegistry = options.languages
|
|
268
337
|
? makeStubServiceRegistry(options.languages, { openLanguageIds: options.openLanguageIds })
|
|
@@ -285,11 +354,11 @@ export function makeTestServices<
|
|
|
285
354
|
// is dependency-free (as `HydraniumWorkspaceLock` is) — a no-op stub of a
|
|
286
355
|
// synchronisation primitive hides the very interleaving it exists to prevent.
|
|
287
356
|
//
|
|
288
|
-
// `model
|
|
357
|
+
// The `model` slots are populated below
|
|
289
358
|
// (after the factories run); the literal uses unsafe casts to
|
|
290
359
|
// partially-built objects to satisfy TestSharedServices, then patches
|
|
291
360
|
// them in.
|
|
292
|
-
const services: TestSharedServices<TAst, TDiagnostic, TTransfer, TProject> = {
|
|
361
|
+
const services: TestSharedServices<TAst, TDiagnostic, TTransfer, TProject, TTransferDiagnostic> = {
|
|
293
362
|
Clock: clock,
|
|
294
363
|
Logger: logger,
|
|
295
364
|
Tracer: tracer,
|
|
@@ -309,26 +378,48 @@ export function makeTestServices<
|
|
|
309
378
|
// Spread for the same reason as `ServiceRegistry` above — the slot must
|
|
310
379
|
// be genuinely ABSENT, not present-and-undefined, when no index was seeded.
|
|
311
380
|
...(indexManager ? { IndexManager: indexManager } : {}),
|
|
312
|
-
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
|
|
313
387
|
},
|
|
314
|
-
model: {} as TestSharedServices<TAst, TDiagnostic, TTransfer, TProject>['model']
|
|
388
|
+
model: {} as TestSharedServices<TAst, TDiagnostic, TTransfer, TProject, TTransferDiagnostic>['model'],
|
|
389
|
+
ServerLocale: {} as ServerLocale,
|
|
390
|
+
MessageRenderer: {} as DefaultMessageRenderer
|
|
315
391
|
};
|
|
316
|
-
const sharedServices = services as unknown as ServerSharedServices<TProject>;
|
|
392
|
+
const sharedServices = services as unknown as ServerSharedServices<TProject, TTransferDiagnostic>;
|
|
393
|
+
|
|
394
|
+
// Patched in after the literal, like `model` below: both read the tree they
|
|
395
|
+
// belong to, and the renderer reads the locale service.
|
|
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);
|
|
400
|
+
if (options.locale) {
|
|
401
|
+
serverLocale.accept(options.locale);
|
|
402
|
+
}
|
|
403
|
+
mutableMessages.ServerLocale = serverLocale;
|
|
404
|
+
const messageRenderer = options.messageRenderer?.(sharedServices) ?? new DefaultMessageRenderer(sharedServices);
|
|
405
|
+
mutableMessages.MessageRenderer = messageRenderer;
|
|
317
406
|
|
|
318
407
|
const serialize = options.serialize ?? ((_uri: string, root: TTransfer) => JSON.stringify(root));
|
|
319
408
|
const transferEncoder = options.transferEncoder
|
|
320
409
|
? options.transferEncoder(sharedServices)
|
|
321
|
-
: new
|
|
410
|
+
: new DefaultTransferEncoder<unknown, TTransferDiagnostic>(sharedServices);
|
|
322
411
|
const modelService = options.modelService
|
|
323
412
|
? options.modelService(sharedServices)
|
|
324
413
|
: makeStubModelService<TAst, TDiagnostic, TTransfer>(sharedServices, serialize, options.modelServiceOptions);
|
|
325
414
|
|
|
326
415
|
const mutableModel = services.model as {
|
|
327
|
-
TransferEncoder: TransferEncoder<
|
|
416
|
+
TransferEncoder: TransferEncoder<TTransferDiagnostic>;
|
|
328
417
|
ModelService: ModelService<TAst, TDiagnostic, TTransfer>;
|
|
418
|
+
ClientSessionFactory: ClientSessionFactory;
|
|
329
419
|
};
|
|
330
420
|
mutableModel.TransferEncoder = transferEncoder;
|
|
331
421
|
mutableModel.ModelService = modelService;
|
|
422
|
+
mutableModel.ClientSessionFactory = new DefaultClientSessionFactory(sharedServices, options.clientSessionFactoryOptions);
|
|
332
423
|
|
|
333
424
|
return {
|
|
334
425
|
services: sharedServices,
|
|
@@ -340,12 +431,15 @@ export function makeTestServices<
|
|
|
340
431
|
selfSaveRegistry,
|
|
341
432
|
projectManager,
|
|
342
433
|
documentUriPolicy,
|
|
434
|
+
modelLedger,
|
|
343
435
|
serviceRegistry,
|
|
344
436
|
indexManager,
|
|
345
437
|
modelService,
|
|
346
438
|
transferEncoder,
|
|
347
439
|
logger,
|
|
348
440
|
clock,
|
|
441
|
+
serverLocale,
|
|
442
|
+
messageRenderer,
|
|
349
443
|
dispose: () => {
|
|
350
444
|
// No-op: the bundled stubs hold only in-memory state (maps, arrays),
|
|
351
445
|
// released with the bundle when it goes out of scope. The hook exists
|