@hydranium/core 1.0.0-next.31 → 1.0.0-next.313
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 +436 -282
- package/lib/documents/hydranium-text-documents.d.ts.map +1 -1
- package/lib/documents/hydranium-text-documents.js +897 -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 +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 +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/bootstrap.d.ts +49 -36
- package/lib/langium/bootstrap.d.ts.map +1 -1
- package/lib/langium/bootstrap.js +91 -45
- 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/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 +19 -4
- package/lib/langium/diagnostics/logger.d.ts.map +1 -1
- package/lib/langium/diagnostics/logger.js +36 -11
- 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 +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 +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 +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 +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 +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 +480 -289
- package/lib/langium/model-service/model-service.d.ts.map +1 -1
- package/lib/langium/model-service/model-service.js +597 -456
- package/lib/langium/model-service/model-service.js.map +1 -1
- package/lib/langium/module.d.ts +158 -37
- package/lib/langium/module.d.ts.map +1 -1
- package/lib/langium/module.js +52 -36
- package/lib/langium/module.js.map +1 -1
- package/lib/langium/naming/name-provider.d.ts +42 -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 +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 +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 +29 -11
- package/lib/langium/scope/hydranium-scope-provider.d.ts.map +1 -1
- package/lib/langium/scope/hydranium-scope-provider.js +37 -15
- 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 +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 +84 -35
- package/lib/langium/transfer/transfer-encoder.d.ts.map +1 -1
- package/lib/langium/transfer/transfer-encoder.js +34 -23
- 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 +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 +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 +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 +124 -22
- package/lib/langium/workspace/hydranium-workspace-manager.d.ts.map +1 -1
- package/lib/langium/workspace/hydranium-workspace-manager.js +212 -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 +61 -4
- package/lib/langium/workspace/initialize-workspace.d.ts.map +1 -1
- package/lib/langium/workspace/initialize-workspace.js +80 -7
- 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/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 +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 +4 -1
- package/lib/lsp/index.d.ts.map +1 -1
- package/lib/lsp/index.js +4 -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/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 +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 +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-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/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 +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 +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 +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 +38 -57
- 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 +1022 -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 +8 -0
- package/src/langium/ast-extension/ast-extension-service.ts +77 -41
- package/src/langium/bootstrap.ts +95 -52
- 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/hydranium-langium-profiler.ts +15 -39
- package/src/langium/diagnostics/log-preamble.ts +1 -1
- package/src/langium/diagnostics/logger.ts +38 -11
- package/src/langium/diagnostics/lsp-logger.ts +61 -16
- 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 +616 -73
- package/src/langium/integration-services.ts +59 -28
- 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 +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 +908 -485
- package/src/langium/module.ts +212 -67
- package/src/langium/naming/name-provider.ts +44 -8
- 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 +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 +49 -16
- 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 +26 -6
- package/src/langium/single-langium-copy.ts +42 -0
- package/src/langium/transfer/transfer-encoder.ts +102 -45
- package/src/langium/trivia/comment-preserver.ts +1100 -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 +528 -13
- 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 +241 -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 +129 -8
- 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/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 +285 -111
- package/src/lsp/index.ts +4 -1
- package/src/lsp/lsp-latency.ts +62 -0
- package/src/lsp/save-text-document.ts +63 -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 +5 -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 +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/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 +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 +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 +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
package/src/langium/module.ts
CHANGED
|
@@ -8,20 +8,24 @@
|
|
|
8
8
|
********************************************************************************/
|
|
9
9
|
|
|
10
10
|
import { type Clock, type Logger, type Project, type Tracer, type TransferDiagnostic, NoopLogger, SystemClock } from '@hydranium/protocol';
|
|
11
|
+
import { DefaultServerLocale, type ServerLocale } from '../locale/server-locale.js';
|
|
12
|
+
import { DefaultMessageRenderer, type MessageRenderer } from '../messages/renderer.js';
|
|
11
13
|
import { ServerTracer } from './diagnostics/server-tracer.js';
|
|
12
14
|
import { HydraniumLangiumProfiler } from './diagnostics/hydranium-langium-profiler.js';
|
|
13
15
|
import { type AstNode, type Module } from '@hydranium/langium';
|
|
14
16
|
import { type DefaultSharedModuleContext, type LangiumSharedServices, type PartialLangiumSharedServices } from '@hydranium/langium/lsp';
|
|
15
17
|
import { type TextDocument } from 'vscode-languageserver-textdocument';
|
|
16
|
-
import {
|
|
18
|
+
import { type ClientSessionFactory, DefaultClientSessionFactory } from './model-service/client-session.js';
|
|
19
|
+
import { DefaultModelService, type ModelService } from './model-service/model-service.js';
|
|
17
20
|
import { type ProjectManager } from './project/project-manager.js';
|
|
18
21
|
import { SingleProjectManager } from './project/single-project-manager.js';
|
|
19
|
-
import { TransferEncoder } from './transfer/transfer-encoder.js';
|
|
22
|
+
import { DefaultTransferEncoder, type TransferEncoder } from './transfer/transfer-encoder.js';
|
|
20
23
|
import { HydraniumDocumentBuilder } from './document-builder/document-builder.js';
|
|
21
|
-
import { BuildPipelineIntegration } from './document-builder/build-pipeline-integration.js';
|
|
24
|
+
import { DefaultBuildPipelineIntegration, type BuildPipelineIntegration } from './document-builder/build-pipeline-integration.js';
|
|
22
25
|
import { type BuildPhasePassContribution } from './build-phase-pass/build-phase-pass.js';
|
|
23
26
|
import { type BuildPhasePassService, DefaultBuildPhasePassService } from './build-phase-pass/build-phase-pass-service.js';
|
|
24
|
-
import { CstResidencyService } from './residency/index.js';
|
|
27
|
+
import { DefaultCstResidencyService, type CstResidencyService } from './residency/index.js';
|
|
28
|
+
import { HydraniumConfigurationProvider } from './config/configuration-provider.js';
|
|
25
29
|
import { HydraniumIndexManager } from './workspace/index-manager.js';
|
|
26
30
|
import { HydraniumWorkspaceManager } from './workspace/hydranium-workspace-manager.js';
|
|
27
31
|
import { HydraniumWorkspaceLock } from './workspace/hydranium-workspace-lock.js';
|
|
@@ -30,9 +34,19 @@ import { type HydraniumDocumentRegistry, HydraniumLangiumDocuments } from './wor
|
|
|
30
34
|
import { type AdditionalDocumentContribution } from './workspace/additional-document-contribution.js';
|
|
31
35
|
import { DefaultDocumentUriPolicy, type DocumentUriPolicy } from './workspace/document-uri-policy.js';
|
|
32
36
|
import { HydraniumTextDocuments } from '../documents/hydranium-text-documents.js';
|
|
33
|
-
import {
|
|
34
|
-
import { SelfSaveRegistry } from '
|
|
35
|
-
import {
|
|
37
|
+
import { DefaultAstDocumentManager, type AstDocumentManager } from '../documents/ast-document-manager.js';
|
|
38
|
+
import { DefaultSelfSaveRegistry, type SelfSaveRegistry } from './workspace/self-save-registry.js';
|
|
39
|
+
import { DefaultFileSystemTaskQueue, type FileSystemTaskQueue } from '../documents/file-system-task-queue.js';
|
|
40
|
+
import { DefaultModelLedger, type ModelLedger } from '../documents/model-ledger.js';
|
|
41
|
+
import { DefaultDocumentReleaseHandler, type DocumentReleaseHandler } from '../documents/document-release-handler.js';
|
|
42
|
+
import { DefaultVersionSyncService, type VersionSyncService } from '../documents/version-sync-service.js';
|
|
43
|
+
import {
|
|
44
|
+
DefaultEmptyFileSystemProvider,
|
|
45
|
+
DefaultFileSystemProviderRegistry,
|
|
46
|
+
type FileSystemProviderRegistry,
|
|
47
|
+
type WritableFileSystemProvider
|
|
48
|
+
} from './workspace/file-system-provider.js';
|
|
49
|
+
import { VIRTUAL_SCHEME, VirtualFileSystemProvider } from './workspace/virtual-document.js';
|
|
36
50
|
import { type ServerLanguageServices } from './language-module.js';
|
|
37
51
|
import { ExtendedServiceRegistry } from './service-registry.js';
|
|
38
52
|
|
|
@@ -44,7 +58,10 @@ import { ExtendedServiceRegistry } from './service-registry.js';
|
|
|
44
58
|
* these shared services; per-head shared bindings, if any, are
|
|
45
59
|
* contributed by additional modules layered after this one.
|
|
46
60
|
*/
|
|
47
|
-
export interface ServerAddedSharedServices<
|
|
61
|
+
export interface ServerAddedSharedServices<
|
|
62
|
+
TProject extends Project = Project,
|
|
63
|
+
TDiagnostic extends TransferDiagnostic = TransferDiagnostic
|
|
64
|
+
> {
|
|
48
65
|
/**
|
|
49
66
|
* Injectable time source. Framework default is {@link SystemClock} (real
|
|
50
67
|
* `Date.now` / `performance.now` / `setTimeout`); tests bind a fake to
|
|
@@ -92,6 +109,24 @@ export interface ServerAddedSharedServices<TProject extends Project = Project> {
|
|
|
92
109
|
* plain `DefaultTracer` with their own `MemoryReader`.
|
|
93
110
|
*/
|
|
94
111
|
Tracer: Tracer;
|
|
112
|
+
/**
|
|
113
|
+
* Renders each user-facing message once, before the server sends it — so
|
|
114
|
+
* every message is rendered by the side that knows the reading user's
|
|
115
|
+
* language. All three heads inherit one diagnostics pass, which is what
|
|
116
|
+
* makes this the single slot an adopter with i18n rebinds; the same binding
|
|
117
|
+
* serves framework codes and their own `defineMessage` codes alike.
|
|
118
|
+
*
|
|
119
|
+
* The framework ships English only and selects no locale, so the default
|
|
120
|
+
* returns every sentence unchanged. Adopters subclass and override
|
|
121
|
+
* `translationsFor`.
|
|
122
|
+
*/
|
|
123
|
+
MessageRenderer: MessageRenderer;
|
|
124
|
+
/**
|
|
125
|
+
* The locale an init handed the server, for whoever renders in it. Held
|
|
126
|
+
* apart from the renderer so replacing the renderer cannot drop locale
|
|
127
|
+
* handling.
|
|
128
|
+
*/
|
|
129
|
+
ServerLocale: ServerLocale;
|
|
95
130
|
/**
|
|
96
131
|
* LSP-bound slots layered on top of Langium's `LangiumSharedLSPServices`.
|
|
97
132
|
* The framework contributes a single string slot here —
|
|
@@ -134,12 +169,11 @@ export interface ServerAddedSharedServices<TProject extends Project = Project> {
|
|
|
134
169
|
* the `awaitDocumentState` bug-fix, framework-wired phase logs,
|
|
135
170
|
* and the `markNextReason` observability primitive without
|
|
136
171
|
* binding the slot explicitly. The
|
|
137
|
-
* `HydraniumDocumentUpdateHandler`'s `dispatch`
|
|
138
|
-
*
|
|
139
|
-
*
|
|
140
|
-
*
|
|
141
|
-
*
|
|
142
|
-
* compile-time target.
|
|
172
|
+
* `HydraniumDocumentUpdateHandler`'s `dispatch` and
|
|
173
|
+
* `ModelService.rebuild` build through this slot's
|
|
174
|
+
* `scheduleUpdate`, so narrowing here is a load-bearing contract:
|
|
175
|
+
* a builder without it fails every LSP-driven build, and every
|
|
176
|
+
* session write that takes the lock, at run time.
|
|
143
177
|
*/
|
|
144
178
|
/* override */ DocumentBuilder: HydraniumDocumentBuilder;
|
|
145
179
|
/**
|
|
@@ -153,20 +187,36 @@ export interface ServerAddedSharedServices<TProject extends Project = Project> {
|
|
|
153
187
|
*/
|
|
154
188
|
/* override */ WorkspaceLock: HydraniumWorkspaceLock;
|
|
155
189
|
/**
|
|
156
|
-
* Tighten Langium's read-only `FileSystemProvider` slot to
|
|
157
|
-
* {@link
|
|
158
|
-
* ({@link AstDocumentManager.save}, integrity
|
|
159
|
-
* `
|
|
160
|
-
*
|
|
161
|
-
*
|
|
162
|
-
*
|
|
163
|
-
* {@link
|
|
164
|
-
*
|
|
165
|
-
*
|
|
166
|
-
*
|
|
190
|
+
* Tighten Langium's read-only `FileSystemProvider` slot to a
|
|
191
|
+
* {@link FileSystemProviderRegistry}, which is writable: the
|
|
192
|
+
* framework's save path ({@link AstDocumentManager.save}, integrity
|
|
193
|
+
* corrections, a session's `save`) requires write semantics, and a
|
|
194
|
+
* read-only slot type defers the failure of a read-only
|
|
195
|
+
* implementation to the first save.
|
|
196
|
+
*
|
|
197
|
+
* Bound to {@link DefaultFileSystemProviderRegistry}, which dispatches
|
|
198
|
+
* by scheme to the {@link ServerAddedSharedServices.fileSystemProviders}
|
|
199
|
+
* group and sends every other scheme to its `host`: the provider
|
|
200
|
+
* `context.fileSystemProvider` returns when it is writable, or else
|
|
201
|
+
* `DefaultEmptyFileSystemProvider`, which is what keeps the core
|
|
202
|
+
* barrel free of `node:fs` and therefore browser-bundleable. A Node
|
|
203
|
+
* host passes `@hydranium/core/node`'s Node-backed provider (wired to
|
|
204
|
+
* {@link SelfSaveRegistry}) instead, and adopters pass their own
|
|
167
205
|
* writable implementation when neither fits.
|
|
206
|
+
*
|
|
207
|
+
* To reach the members of its own provider, an adopter declares this
|
|
208
|
+
* slot as `FileSystemProviderRegistry<MyProvider>` through
|
|
209
|
+
* {@link WithServiceOverrides}, binds a
|
|
210
|
+
* `DefaultFileSystemProviderRegistry` with that host from a factory
|
|
211
|
+
* whose return type names the narrowed slot (a module's `DeepPartial`
|
|
212
|
+
* checks no host member otherwise), and reads
|
|
213
|
+
* `FileSystemProvider.host`. A
|
|
214
|
+
* registry that serves a seeded document under none of its providers
|
|
215
|
+
* loses the document at its last close, which
|
|
216
|
+
* {@link HydraniumWorkspaceManager.warnIfDocumentsUnserved} reports
|
|
217
|
+
* once at startup.
|
|
168
218
|
*/
|
|
169
|
-
/* override */ FileSystemProvider:
|
|
219
|
+
/* override */ FileSystemProvider: FileSystemProviderRegistry;
|
|
170
220
|
ProjectManager: ProjectManager<TProject>;
|
|
171
221
|
SelfSaveRegistry: SelfSaveRegistry;
|
|
172
222
|
/**
|
|
@@ -193,9 +243,17 @@ export interface ServerAddedSharedServices<TProject extends Project = Project> {
|
|
|
193
243
|
* there is only one, and `'plaintext'` when there are several, rather
|
|
194
244
|
* than naming a language the document demonstrably is not. Consumers
|
|
195
245
|
* that need to narrow the diagnostic type or override lifecycle
|
|
196
|
-
* behaviour rebind this slot with a subclass.
|
|
246
|
+
* behaviour rebind this slot with a subclass. Subscribes to the build
|
|
247
|
+
* pipeline and the text store in its constructor, so it is eagerly
|
|
248
|
+
* constructed via `DEFAULT_EAGER_SERVICES`.
|
|
197
249
|
*/
|
|
198
|
-
AstDocumentManager: AstDocumentManager<AstNode
|
|
250
|
+
AstDocumentManager: AstDocumentManager<AstNode>;
|
|
251
|
+
/**
|
|
252
|
+
* Orders the server's disk accesses of each file. One slot for every
|
|
253
|
+
* reader and writer: a service given a queue of its own does not order
|
|
254
|
+
* against the others.
|
|
255
|
+
*/
|
|
256
|
+
FileSystemTaskQueue: FileSystemTaskQueue;
|
|
199
257
|
/**
|
|
200
258
|
* Wires the framework's build-time features (integrity, AST
|
|
201
259
|
* enrichment) into Langium's build pipeline: owns the build-phase
|
|
@@ -210,7 +268,7 @@ export interface ServerAddedSharedServices<TProject extends Project = Project> {
|
|
|
210
268
|
* `onBuildPhase` sibling of the per-node `AstExtensionService`
|
|
211
269
|
* (`onDocumentPhase`) and `IntegrityService`. {@link BuildPipelineIntegration}
|
|
212
270
|
* drives it from its phase listeners; the framework self-registers its
|
|
213
|
-
* integrity
|
|
271
|
+
* integrity and CST-residency passes into it, and adopters
|
|
214
272
|
* contribute via the shared {@link ServerAddedSharedServices.buildPhasePasses}
|
|
215
273
|
* group. A single priority space orders framework and adopter passes
|
|
216
274
|
* against one another deterministically.
|
|
@@ -227,6 +285,16 @@ export interface ServerAddedSharedServices<TProject extends Project = Project> {
|
|
|
227
285
|
* strategy (`shed-closed-when-idle`) to enable shedding.
|
|
228
286
|
*/
|
|
229
287
|
CstResidencyService: CstResidencyService;
|
|
288
|
+
/** The version of the text each root was parsed from. */
|
|
289
|
+
ModelLedger: ModelLedger;
|
|
290
|
+
/** Reconciles each produced root with the store, and owns every build that syncs a root to its text or recovers one. */
|
|
291
|
+
VersionSyncService: VersionSyncService;
|
|
292
|
+
/**
|
|
293
|
+
* What the build keeps for a document {@link HydraniumTextDocuments} has
|
|
294
|
+
* released, for every head. Bound to {@link DefaultDocumentReleaseHandler},
|
|
295
|
+
* which reverts it to disk.
|
|
296
|
+
*/
|
|
297
|
+
DocumentReleaseHandler: DocumentReleaseHandler;
|
|
230
298
|
};
|
|
231
299
|
/**
|
|
232
300
|
* In-process workspace facade ({@link ModelService}) + AST→transfer
|
|
@@ -235,15 +303,29 @@ export interface ServerAddedSharedServices<TProject extends Project = Project> {
|
|
|
235
303
|
* heads read both slots from shared services rather than constructor
|
|
236
304
|
* arguments.
|
|
237
305
|
*
|
|
238
|
-
*
|
|
239
|
-
*
|
|
240
|
-
*
|
|
241
|
-
*
|
|
242
|
-
*
|
|
306
|
+
* `TransferEncoder` is the INTERFACE, not `DefaultTransferEncoder` — an
|
|
307
|
+
* adopter can therefore REPLACE this declaration (see
|
|
308
|
+
* {@link WithServiceOverrides}) rather than intersect with it, which is what
|
|
309
|
+
* keeps slot resolution independent of the order a services type is written
|
|
310
|
+
* in. `ModelService` is an interface for the same reason.
|
|
311
|
+
*
|
|
312
|
+
* A class in a slot costs two things, both measured. Its `protected` members
|
|
313
|
+
* join every assignability check and are compared NOMINALLY, so a subclass
|
|
314
|
+
* declared against a second physical copy of this package cannot satisfy it.
|
|
315
|
+
* And where the class is generic over a map reached through `keyof`, that
|
|
316
|
+
* parameter is measured INVARIANT — instantiations then relate only when
|
|
317
|
+
* their arguments are mutually assignable, which no adopter map is with the
|
|
318
|
+
* framework's. Neither survives on an interface.
|
|
243
319
|
*/
|
|
244
320
|
model: {
|
|
245
|
-
TransferEncoder: TransferEncoder<
|
|
246
|
-
|
|
321
|
+
TransferEncoder: TransferEncoder<TDiagnostic>;
|
|
322
|
+
/**
|
|
323
|
+
* Subscribes to the settled document phase in its constructor, so it is
|
|
324
|
+
* eagerly constructed via `DEFAULT_EAGER_SERVICES`.
|
|
325
|
+
*/
|
|
326
|
+
ModelService: ModelService<AstNode>;
|
|
327
|
+
/** Builds the handle of every session `ModelService.createSession` starts. */
|
|
328
|
+
ClientSessionFactory: ClientSessionFactory;
|
|
247
329
|
};
|
|
248
330
|
/**
|
|
249
331
|
* Shared contribution group for batch-level build-phase passes (see
|
|
@@ -266,6 +348,15 @@ export interface ServerAddedSharedServices<TProject extends Project = Project> {
|
|
|
266
348
|
* contribute none never touch it.
|
|
267
349
|
*/
|
|
268
350
|
additionalDocuments: Record<string, AdditionalDocumentContribution>;
|
|
351
|
+
/**
|
|
352
|
+
* Shared contribution group of file system providers keyed by the URI
|
|
353
|
+
* scheme each answers for, which {@link FileSystemProviderRegistry}
|
|
354
|
+
* dispatches to. The framework registers {@link VirtualFileSystemProvider}
|
|
355
|
+
* under `virtual`; an adopter deep-merges a provider for a scheme of its
|
|
356
|
+
* own, and an entry under `virtual` replaces the framework's. A scheme with
|
|
357
|
+
* no entry goes to the registry's `host`.
|
|
358
|
+
*/
|
|
359
|
+
fileSystemProviders: Record<string, WritableFileSystemProvider>;
|
|
269
360
|
}
|
|
270
361
|
|
|
271
362
|
/**
|
|
@@ -281,10 +372,57 @@ export interface ServerAddedSharedServices<TProject extends Project = Project> {
|
|
|
281
372
|
* `ClientTextDocumentChangeEvent` payload (with `clientId`);
|
|
282
373
|
* `ServiceRegistry.getServices(uri)` keeps the
|
|
283
374
|
* {@link ServerLanguageServices} return shape.
|
|
375
|
+
*
|
|
376
|
+
* `TDiagnostic` is the diagnostic the bound `model.TransferEncoder` emits. A
|
|
377
|
+
* head that sends a narrower diagnostic than `TransferDiagnostic` takes
|
|
378
|
+
* services typed with it, so none of its envelopes claims a shape the encoder
|
|
379
|
+
* does not produce.
|
|
284
380
|
*/
|
|
285
|
-
export type ServerSharedServices<TProject extends Project = Project
|
|
381
|
+
export type ServerSharedServices<TProject extends Project = Project, TDiagnostic extends TransferDiagnostic = TransferDiagnostic> = Omit<
|
|
382
|
+
LangiumSharedServices,
|
|
383
|
+
'workspace' | 'ServiceRegistry'
|
|
384
|
+
> & {
|
|
286
385
|
workspace: Omit<LangiumSharedServices['workspace'], 'TextDocuments' | 'DocumentBuilder'>;
|
|
287
|
-
} & ServerAddedSharedServices<TProject>;
|
|
386
|
+
} & ServerAddedSharedServices<TProject, TDiagnostic>;
|
|
387
|
+
|
|
388
|
+
/**
|
|
389
|
+
* The service-tree namespaces — the keys whose value groups further slots
|
|
390
|
+
* rather than being a slot itself.
|
|
391
|
+
*
|
|
392
|
+
* Consumed by {@link WithServiceOverrides} to know where to merge one level
|
|
393
|
+
* deeper. **Add a namespace to {@link ServerAddedSharedServices} and you must
|
|
394
|
+
* add it here**, and the failure of forgetting is silent in the direction that
|
|
395
|
+
* matters: an unlisted namespace is treated as a leaf, so an adopter overriding
|
|
396
|
+
* one slot inside it replaces the WHOLE namespace and loses the sibling slots
|
|
397
|
+
* with no diagnostic. The reverse mistake — listing a leaf — fails loudly.
|
|
398
|
+
*/
|
|
399
|
+
type ServiceNamespace = 'lsp' | 'workspace' | 'model';
|
|
400
|
+
|
|
401
|
+
/**
|
|
402
|
+
* Compose an adopter's service tree so its declarations REPLACE the framework's
|
|
403
|
+
* rather than intersecting with them.
|
|
404
|
+
*
|
|
405
|
+
* Langium composes services by intersection, which accumulates: two
|
|
406
|
+
* declarations of one slot survive as an overload set, and which one a call
|
|
407
|
+
* resolves to depends on the order the intersection was written in — silently,
|
|
408
|
+
* with no diagnostic at the point a reorder changes it. There is no override
|
|
409
|
+
* operator for intersections, so the framework's declaration has to be removed
|
|
410
|
+
* before the adopter's is added. This does that, one level deep for each
|
|
411
|
+
* {@link ServiceNamespace}, so a narrowed slot replaces its framework twin
|
|
412
|
+
* while its siblings survive.
|
|
413
|
+
*
|
|
414
|
+
* Only slots typed as INTERFACES can be replaced this way. A class-typed slot
|
|
415
|
+
* drags its `protected` members into the assignability check — compared
|
|
416
|
+
* nominally — so an adopter subclass does not satisfy it and the framework's
|
|
417
|
+
* declaration cannot be dropped.
|
|
418
|
+
*/
|
|
419
|
+
export type WithServiceOverrides<TBase, TOverrides> = Omit<TBase, keyof TOverrides> & {
|
|
420
|
+
[K in keyof TOverrides]: K extends ServiceNamespace
|
|
421
|
+
? K extends keyof TBase
|
|
422
|
+
? Omit<TBase[K], keyof TOverrides[K]> & TOverrides[K]
|
|
423
|
+
: TOverrides[K]
|
|
424
|
+
: TOverrides[K];
|
|
425
|
+
};
|
|
288
426
|
|
|
289
427
|
/**
|
|
290
428
|
* Construction context for {@link createServerSharedModule}.
|
|
@@ -334,6 +472,8 @@ export function createServerSharedModule(
|
|
|
334
472
|
ServiceRegistry: services => new ExtendedServiceRegistry<ServerLanguageServices>(services),
|
|
335
473
|
Logger: () => new NoopLogger(),
|
|
336
474
|
Tracer: services => new ServerTracer(services.Logger, services.Clock),
|
|
475
|
+
ServerLocale: services => new DefaultServerLocale(services),
|
|
476
|
+
MessageRenderer: services => new DefaultMessageRenderer(services),
|
|
337
477
|
// Bind Langium's per-grammar-rule / per-`$type` parse/link/validate
|
|
338
478
|
// profiler (the data the framework's own `Tracer`/`ProfileSession` passes
|
|
339
479
|
// cannot produce), routed through our `Logger` and debug-gated. At the
|
|
@@ -395,9 +535,13 @@ export function createServerSharedModule(
|
|
|
395
535
|
TextDocuments: services => new HydraniumTextDocuments(services),
|
|
396
536
|
WorkspaceManager: services => new HydraniumWorkspaceManager(services),
|
|
397
537
|
IndexManager: services => new HydraniumIndexManager(services),
|
|
538
|
+
// Langium's default asks only about sections named after registered
|
|
539
|
+
// language ids, so a section `lsp.configurationRoot` is bound to reads
|
|
540
|
+
// `undefined` forever with no request on the wire.
|
|
541
|
+
ConfigurationProvider: services => new HydraniumConfigurationProvider(services),
|
|
398
542
|
// Override Langium's factory so a `fromModel` (code-built) virtual
|
|
399
543
|
// document retains serialized text via the per-language Serializer,
|
|
400
|
-
// making it re-read-safe through
|
|
544
|
+
// making it re-read-safe through `VirtualFileSystemProvider`.
|
|
401
545
|
LangiumDocumentFactory: services => new HydraniumLangiumDocumentFactory(services),
|
|
402
546
|
// Langium's default routes through no identity seam and treats every
|
|
403
547
|
// failed load alike, so leaving this unbound opts a server out of both
|
|
@@ -406,52 +550,53 @@ export function createServerSharedModule(
|
|
|
406
550
|
DocumentBuilder: services => new HydraniumDocumentBuilder(services),
|
|
407
551
|
// The write-lock scope this marks is inert unless a host installs a
|
|
408
552
|
// scope tracker — `@hydranium/core/node` does.
|
|
409
|
-
WorkspaceLock:
|
|
553
|
+
WorkspaceLock: services => new HydraniumWorkspaceLock(services),
|
|
410
554
|
ProjectManager: services => new SingleProjectManager(services),
|
|
411
|
-
SelfSaveRegistry: services => new
|
|
555
|
+
SelfSaveRegistry: services => new DefaultSelfSaveRegistry(services),
|
|
412
556
|
DocumentUriPolicy: () => new DefaultDocumentUriPolicy(),
|
|
413
|
-
//
|
|
414
|
-
//
|
|
415
|
-
//
|
|
416
|
-
//
|
|
417
|
-
// (in-memory, browser, test stub like `DefaultEmptyFileSystemProvider`).
|
|
418
|
-
// - Otherwise — the portable default `DefaultEmptyFileSystemProvider`
|
|
419
|
-
// (no-op writes, no disk access). Node hosts opt into real disk I/O
|
|
420
|
-
// by binding `@hydranium/core/node`'s `DefaultFileSystemProvider`
|
|
421
|
-
// (Node-backed, wired to `SelfSaveRegistry` so framework `writeFile`
|
|
422
|
-
// calls register their mtime and adopters can suppress the
|
|
423
|
-
// `didChangeWatchedFiles` echo) — typically via this same
|
|
424
|
-
// `context.fileSystemProvider` channel or by rebinding
|
|
425
|
-
// the slot. Keeping the `.`-entry default empty is what lets the
|
|
426
|
-
// core barrel stay free of `node:fs` (browser-bundleable); see the
|
|
427
|
-
// `@hydranium/core/node` carve.
|
|
557
|
+
// The host is the provider `context.fileSystemProvider` returns
|
|
558
|
+
// when it is writable (has `writeFile`); anything narrower gets the
|
|
559
|
+
// empty provider, which is what keeps the core barrel free of
|
|
560
|
+
// `node:fs`.
|
|
428
561
|
FileSystemProvider: services => {
|
|
429
562
|
const fromContext = context.fileSystemProvider?.(services);
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
563
|
+
const writable = typeof (fromContext as Partial<WritableFileSystemProvider> | undefined)?.writeFile === 'function';
|
|
564
|
+
return new DefaultFileSystemProviderRegistry(services, {
|
|
565
|
+
host: writable ? (fromContext as WritableFileSystemProvider) : new DefaultEmptyFileSystemProvider(services)
|
|
566
|
+
});
|
|
434
567
|
},
|
|
435
|
-
|
|
568
|
+
// Eagerly constructed, so its build-pipeline and text-store listeners
|
|
569
|
+
// attach before the first build.
|
|
570
|
+
AstDocumentManager: services => new DefaultAstDocumentManager(services),
|
|
571
|
+
FileSystemTaskQueue: services => new DefaultFileSystemTaskQueue(services),
|
|
436
572
|
// Eagerly constructed, so its build-phase listeners attach before the
|
|
437
573
|
// first build.
|
|
438
|
-
BuildPipelineIntegration: services => new
|
|
574
|
+
BuildPipelineIntegration: services => new DefaultBuildPipelineIntegration(services),
|
|
439
575
|
BuildPhasePassService: services => new DefaultBuildPhasePassService(services),
|
|
440
576
|
// Eagerly constructed, so its `Validated` pass registers before the
|
|
441
577
|
// first build.
|
|
442
|
-
CstResidencyService: services => new
|
|
578
|
+
CstResidencyService: services => new DefaultCstResidencyService(services),
|
|
579
|
+
ModelLedger: () => new DefaultModelLedger(),
|
|
580
|
+
VersionSyncService: services => new DefaultVersionSyncService(services),
|
|
581
|
+
DocumentReleaseHandler: services => new DefaultDocumentReleaseHandler(services)
|
|
443
582
|
},
|
|
444
583
|
model: {
|
|
445
584
|
// Generic walker — adopters with a typed `$type → wire shape` overlay
|
|
446
585
|
// rebind this slot with a subclass.
|
|
447
|
-
TransferEncoder: services => new
|
|
448
|
-
|
|
586
|
+
TransferEncoder: services => new DefaultTransferEncoder(services),
|
|
587
|
+
// Eagerly constructed, so its settled-phase listener attaches before
|
|
588
|
+
// the first build.
|
|
589
|
+
ModelService: services => new DefaultModelService(services),
|
|
590
|
+
ClientSessionFactory: services => new DefaultClientSessionFactory(services)
|
|
449
591
|
},
|
|
450
592
|
// Empty default so `services.buildPhasePasses` always resolves (Langium
|
|
451
593
|
// throws on access to an unbound slot). The framework's own integrity /
|
|
452
|
-
//
|
|
594
|
+
// CST-residency passes self-register imperatively, not here.
|
|
453
595
|
buildPhasePasses: {},
|
|
454
596
|
// Empty default so `services.additionalDocuments` always resolves.
|
|
455
|
-
additionalDocuments: {}
|
|
597
|
+
additionalDocuments: {},
|
|
598
|
+
fileSystemProviders: {
|
|
599
|
+
[VIRTUAL_SCHEME]: services => new VirtualFileSystemProvider(services)
|
|
600
|
+
}
|
|
456
601
|
};
|
|
457
602
|
}
|
|
@@ -59,6 +59,16 @@ export interface NameProviderOptions {
|
|
|
59
59
|
* an `id` field) override explicitly; the explicit override at
|
|
60
60
|
* the adopter side documents the grammar's convention rather than
|
|
61
61
|
* burying it in a framework default.
|
|
62
|
+
*
|
|
63
|
+
* **The override is not optional where `name` is a display LABEL rather
|
|
64
|
+
* than an identifier**, and getting it wrong is quiet at first and then
|
|
65
|
+
* loud. A `name=STRING` holding `"Order.Line"` is legitimate content, but
|
|
66
|
+
* the default reads it as the identifier: `getName` composes a qualified
|
|
67
|
+
* name whose segments cannot be told apart from the label's own dots, and
|
|
68
|
+
* `nameSeparatorCheck` reports `hydranium/core/separator-in-name` on every
|
|
69
|
+
* such node. That diagnostic then names the wrong remedy — it asks for a
|
|
70
|
+
* different character, when the fix is to point this option at the property
|
|
71
|
+
* that really is the identifier.
|
|
62
72
|
*/
|
|
63
73
|
readonly nameProperties?: readonly string[];
|
|
64
74
|
}
|
|
@@ -211,6 +221,11 @@ export interface NameProvider extends LangiumNameProvider {
|
|
|
211
221
|
* walk traverses through the document root: if the root has its own
|
|
212
222
|
* name, that name IS part of the qualified form. Adopters who want a
|
|
213
223
|
* different boundary override this method.
|
|
224
|
+
*
|
|
225
|
+
* May answer as of its first read since the last build: the default
|
|
226
|
+
* memoises per built node, so a name changed in memory after that read
|
|
227
|
+
* reads as the old one until its document rebuilds. A node in no document
|
|
228
|
+
* is named afresh on every call.
|
|
214
229
|
*/
|
|
215
230
|
getDocumentQualifiedName(node?: AstNode): string | undefined;
|
|
216
231
|
|
|
@@ -226,6 +241,10 @@ export interface NameProvider extends LangiumNameProvider {
|
|
|
226
241
|
* string) or no project owns the URI — in those cases project-
|
|
227
242
|
* qualified equals document-qualified, and
|
|
228
243
|
* `HydraniumScopeComputation` skips the multi-tier emit.
|
|
244
|
+
*
|
|
245
|
+
* The default memoises it as it does {@link getDocumentQualifiedName}, and
|
|
246
|
+
* for a node in no document answers the document-qualified name: there is
|
|
247
|
+
* no project to prefix.
|
|
229
248
|
*/
|
|
230
249
|
getProjectQualifiedName(node?: AstNode): string | undefined;
|
|
231
250
|
|
|
@@ -244,10 +263,21 @@ export interface NameProvider extends LangiumNameProvider {
|
|
|
244
263
|
/**
|
|
245
264
|
* Find a unique name for a new node within `container`, using `base`
|
|
246
265
|
* as a stem. Walks the AST subtree rooted at `container` and avoids
|
|
247
|
-
* names already
|
|
248
|
-
* generates `${base}1`,
|
|
249
|
-
* found. Used by create-element
|
|
250
|
-
* uniqueness scope is one AST subtree.
|
|
266
|
+
* names already held there by nodes of `type` or of any subtype of it,
|
|
267
|
+
* as `AstReflection.isSubtype` reports. Default generates `${base}1`,
|
|
268
|
+
* `${base}2`, ... until an unused value is found. Used by create-element
|
|
269
|
+
* operation handlers when the uniqueness scope is one AST subtree.
|
|
270
|
+
*
|
|
271
|
+
* Subtype-closed rather than `$type`-exact, because a name space shared by
|
|
272
|
+
* several concrete types is named by their common supertype and by no
|
|
273
|
+
* concrete type at all — the shape a cross-reference whose target type is
|
|
274
|
+
* that supertype produces. An exact filter finds no collisions for such a
|
|
275
|
+
* call and returns the proposal unchanged, which a caller cannot tell from
|
|
276
|
+
* a name that was genuinely free.
|
|
277
|
+
* {@link NameProvider.findNextDocumentQualifiedName} and
|
|
278
|
+
* {@link NameProvider.findNextProjectQualifiedName} resolve `type` the same
|
|
279
|
+
* way, through `IndexManager.allElements`, so one type argument does not
|
|
280
|
+
* mean different sets at different tiers.
|
|
251
281
|
*/
|
|
252
282
|
findNextName(type: string, base: string, container: AstNode): string;
|
|
253
283
|
|
|
@@ -305,6 +335,9 @@ export class DefaultNameProvider implements NameProvider {
|
|
|
305
335
|
* document's lifetime. Evicted automatically when Langium rebuilds
|
|
306
336
|
* the document.
|
|
307
337
|
*
|
|
338
|
+
* So a built node renamed in memory reads its old name until the rebuild,
|
|
339
|
+
* as {@link NameProvider.getDocumentQualifiedName} warns.
|
|
340
|
+
*
|
|
308
341
|
* Only cached when the computed result is a defined string — `undefined`
|
|
309
342
|
* results re-evaluate on each call (cheap path: `getOwnName` returns
|
|
310
343
|
* undefined for unnamed nodes, no chain walk needed).
|
|
@@ -313,7 +346,9 @@ export class DefaultNameProvider implements NameProvider {
|
|
|
313
346
|
/**
|
|
314
347
|
* Per-document memo for {@link getProjectQualifiedName} results.
|
|
315
348
|
* Sibling of {@link documentQualifiedNameCache}; covers the additional
|
|
316
|
-
* project-reference-name lookup the project-qualified variant performs
|
|
349
|
+
* project-reference-name lookup the project-qualified variant performs,
|
|
350
|
+
* and goes stale on an in-memory rename the same way, as
|
|
351
|
+
* {@link NameProvider.getDocumentQualifiedName} warns.
|
|
317
352
|
*
|
|
318
353
|
* **Project-rename caveat.** If `Project.referenceName` mutates without
|
|
319
354
|
* a corresponding document rebuild, cached entries become stale. Adopters
|
|
@@ -450,8 +485,8 @@ export class DefaultNameProvider implements NameProvider {
|
|
|
450
485
|
* qualified names.
|
|
451
486
|
*
|
|
452
487
|
* **Within-document references stay keyed by bare names** via
|
|
453
|
-
* `HydraniumScopeComputation.
|
|
454
|
-
* {@link getOwnName} when populating the local-symbols map (bypassing
|
|
488
|
+
* `HydraniumScopeComputation.addLocalSymbolByOwnName`, which explicitly
|
|
489
|
+
* calls {@link getOwnName} when populating the local-symbols map (bypassing
|
|
455
490
|
* Langium's default that goes through this `getName`). The
|
|
456
491
|
* separation lets `getName` carry the workspace-unique form for the
|
|
457
492
|
* linker without forcing qualified names into the per-document
|
|
@@ -486,8 +521,9 @@ export class DefaultNameProvider implements NameProvider {
|
|
|
486
521
|
|
|
487
522
|
findNextName(type: string, base: string, container: AstNode): string {
|
|
488
523
|
const proposal = base.replaceAll(this.nameSeparator, '_');
|
|
524
|
+
const reflection = this.services.shared.AstReflection;
|
|
489
525
|
const knownNames = AstUtils.streamAst(container)
|
|
490
|
-
.filter(node => node.$type
|
|
526
|
+
.filter(node => reflection.isSubtype(node.$type, type))
|
|
491
527
|
.map(node => this.getOwnName(node))
|
|
492
528
|
.nonNullable()
|
|
493
529
|
.toArray();
|
|
@@ -10,14 +10,36 @@
|
|
|
10
10
|
import { type AstNode, type ValidationAcceptor, type ValidationChecks } from '@hydranium/langium';
|
|
11
11
|
import { defineMessage } from '@hydranium/protocol';
|
|
12
12
|
import { acceptMessage } from '../../messages/carriers.js';
|
|
13
|
+
import { type ServerLanguageServices } from '../language-module.js';
|
|
14
|
+
import { type ValidationCheckContribution, type ValidationCheckRegistry } from '../validation/validation-contribution.js';
|
|
15
|
+
import type { NameProvider } from './name-provider.js';
|
|
13
16
|
|
|
17
|
+
/**
|
|
18
|
+
* A name value that collides with the qualified-name separator.
|
|
19
|
+
*
|
|
20
|
+
* **The sentence addresses a MODELLER, and the remedy it names is theirs**:
|
|
21
|
+
* where `name` really is the identifier, a different character is the fix and
|
|
22
|
+
* the only one available to whoever is typing.
|
|
23
|
+
*
|
|
24
|
+
* **The adopter-facing failure is a different one, and this message cannot
|
|
25
|
+
* carry it.** With `nameProperties` left at its default `['name']` over a
|
|
26
|
+
* grammar where `name` is a display LABEL — a `STRING` legitimately holding
|
|
27
|
+
* `"Order.Line"` — this fires on every dotted label at once, and "use a
|
|
28
|
+
* different character" is then advice nobody can act on: the content is
|
|
29
|
+
* correct and the configuration is not. A burst of this diagnostic across
|
|
30
|
+
* unrelated nodes is that misconfiguration, not a naming problem, and the fix
|
|
31
|
+
* is `nameProperties`. Widening the sentence to say both was rejected: a
|
|
32
|
+
* modeller cannot act on a DI option, and naming one in an editor squiggle
|
|
33
|
+
* teaches the wrong audience.
|
|
34
|
+
*
|
|
35
|
+
* Unreachable from a grammar whose identifier charset excludes the separator,
|
|
36
|
+
* which is every example here and the reference adopter — so it reads as dead
|
|
37
|
+
* and is not: it guards the configuration, not the content.
|
|
38
|
+
*/
|
|
14
39
|
export const SEPARATOR_IN_NAME = defineMessage(
|
|
15
40
|
'hydranium/core/separator-in-name',
|
|
16
41
|
"Name '{name}' contains the configured name separator '{separator}', which is reserved for qualified-name composition — use a different character."
|
|
17
42
|
);
|
|
18
|
-
import { type ServerLanguageServices } from '../language-module.js';
|
|
19
|
-
import { type ValidationCheckContribution, type ValidationCheckRegistry } from '../validation/validation-contribution.js';
|
|
20
|
-
import type { NameProvider } from './name-provider.js';
|
|
21
43
|
|
|
22
44
|
/**
|
|
23
45
|
* Per-node validation check: flag name-bearing AST nodes whose name
|
|
@@ -7,18 +7,19 @@
|
|
|
7
7
|
* SPDX-License-Identifier: MIT
|
|
8
8
|
********************************************************************************/
|
|
9
9
|
|
|
10
|
-
import { Deferred, type Project, type Tracer, UNQUALIFIED_PROJECT_REFERENCE } from '@hydranium/protocol';
|
|
10
|
+
import { Deferred, type Project, type Tracer, UNQUALIFIED_PROJECT_REFERENCE, describeErrorWithStack } from '@hydranium/protocol';
|
|
11
11
|
import {
|
|
12
12
|
type AstNode,
|
|
13
13
|
AstUtils,
|
|
14
14
|
type DocumentBuilder,
|
|
15
|
+
DocumentState,
|
|
15
16
|
type FileSystemProvider,
|
|
16
17
|
type LangiumDocument,
|
|
17
18
|
type LangiumDocuments,
|
|
18
19
|
type URI,
|
|
19
20
|
UriUtils
|
|
20
21
|
} from '@hydranium/langium';
|
|
21
|
-
import { Disposable } from 'vscode-languageserver';
|
|
22
|
+
import { CancellationToken, Disposable } from 'vscode-languageserver';
|
|
22
23
|
import type { WorkspaceFolder } from 'vscode-languageserver-types';
|
|
23
24
|
import type { LogNameOptions } from '../diagnostics/logger.js';
|
|
24
25
|
import { type ServerSharedServicesMinimal } from '../shared-services.js';
|
|
@@ -225,7 +226,7 @@ export abstract class AbstractProjectManager<TProject extends Project = Project>
|
|
|
225
226
|
try {
|
|
226
227
|
entries = await this.fileSystemProvider.readDirectory(folder);
|
|
227
228
|
} catch (error) {
|
|
228
|
-
this.tracer.warn(`Failed to read directory ${folder.toString()}: ${error}`);
|
|
229
|
+
this.tracer.warn(`Failed to read directory ${folder.toString()}: ${describeErrorWithStack(error)}`);
|
|
229
230
|
return;
|
|
230
231
|
}
|
|
231
232
|
for (const entry of entries) {
|
|
@@ -377,6 +378,13 @@ export abstract class AbstractProjectManager<TProject extends Project = Project>
|
|
|
377
378
|
protected async loadDescriptor(uri: URI): Promise<TProject | undefined> {
|
|
378
379
|
try {
|
|
379
380
|
const document = await this.langiumDocuments.getOrCreateDocument(uri);
|
|
381
|
+
if (document.state < DocumentState.Parsed) {
|
|
382
|
+
// `onUpdate` fires before the build parses, so the AST is still the previous edit's.
|
|
383
|
+
// The state is restored so the build still runs, and notifies, its own parse phase.
|
|
384
|
+
const state = document.state;
|
|
385
|
+
await this.services.workspace.LangiumDocumentFactory.update(document, CancellationToken.None);
|
|
386
|
+
document.state = state;
|
|
387
|
+
}
|
|
380
388
|
const project = await this.parseProjectDescriptor(uri, document);
|
|
381
389
|
if (project) {
|
|
382
390
|
this.projects.set(project.id, project);
|
|
@@ -387,7 +395,7 @@ export abstract class AbstractProjectManager<TProject extends Project = Project>
|
|
|
387
395
|
}
|
|
388
396
|
return project;
|
|
389
397
|
} catch (error) {
|
|
390
|
-
this.tracer.error(`Failed to parse ${this.conceptName()} descriptor at ${uri.toString()}: ${error}`);
|
|
398
|
+
this.tracer.error(`Failed to parse ${this.conceptName()} descriptor at ${uri.toString()}: ${describeErrorWithStack(error)}`);
|
|
391
399
|
return undefined;
|
|
392
400
|
}
|
|
393
401
|
}
|
|
@@ -612,7 +620,7 @@ export abstract class AbstractProjectManager<TProject extends Project = Project>
|
|
|
612
620
|
try {
|
|
613
621
|
listener(event);
|
|
614
622
|
} catch (error) {
|
|
615
|
-
this.tracer.error(`Project change listener failed: ${error}`);
|
|
623
|
+
this.tracer.error(`Project change listener failed: ${describeErrorWithStack(error)}`);
|
|
616
624
|
}
|
|
617
625
|
}
|
|
618
626
|
}
|
|
@@ -28,8 +28,8 @@ import type { URI } from '@hydranium/langium';
|
|
|
28
28
|
* - {@link affectedDocuments} lists URIs whose reachable scope changed. The
|
|
29
29
|
* default cascade plumbing in `HydraniumWorkspaceManager` subscribes to
|
|
30
30
|
* this event and re-runs `DocumentBuilder.resetToState` for each entry,
|
|
31
|
-
* which the
|
|
32
|
-
* independently for other reactions.
|
|
31
|
+
* which the build of the update that changed the descriptor picks up.
|
|
32
|
+
* Consumers can subscribe independently for other reactions.
|
|
33
33
|
*/
|
|
34
34
|
export interface ProjectChangeEvent<TProject extends Project = Project> {
|
|
35
35
|
/** Ids of projects newly registered since the last event. */
|