@hydranium/core 1.0.0-next.23 → 1.0.0-next.232
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 +21 -13
- 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 +241 -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 +79 -0
- package/lib/documents/dirty-state-tracker.d.ts.map +1 -0
- package/lib/documents/dirty-state-tracker.js +69 -0
- package/lib/documents/dirty-state-tracker.js.map +1 -0
- package/lib/documents/document-release-handler.d.ts +179 -0
- package/lib/documents/document-release-handler.d.ts.map +1 -0
- package/lib/documents/document-release-handler.js +283 -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 +399 -282
- package/lib/documents/hydranium-text-documents.d.ts.map +1 -1
- package/lib/documents/hydranium-text-documents.js +816 -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 +283 -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 +134 -0
- package/lib/documents/version-sync-service.d.ts.map +1 -0
- package/lib/documents/version-sync-service.js +171 -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.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 +23 -16
- package/lib/langium/bootstrap.d.ts.map +1 -1
- package/lib/langium/bootstrap.js +66 -28
- package/lib/langium/bootstrap.js.map +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/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.map +1 -1
- package/lib/langium/diagnostics/hydranium-langium-profiler.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 +57 -16
- 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 +93 -0
- package/lib/langium/document-builder/build-session.d.ts.map +1 -0
- package/lib/langium/document-builder/build-session.js +72 -0
- package/lib/langium/document-builder/build-session.js.map +1 -0
- package/lib/langium/document-builder/document-builder.d.ts +401 -29
- package/lib/langium/document-builder/document-builder.d.ts.map +1 -1
- package/lib/langium/document-builder/document-builder.js +698 -61
- package/lib/langium/document-builder/document-builder.js.map +1 -1
- package/lib/langium/document-builder/index.d.ts +1 -0
- package/lib/langium/document-builder/index.d.ts.map +1 -1
- package/lib/langium/document-builder/index.js +1 -0
- package/lib/langium/document-builder/index.js.map +1 -1
- package/lib/langium/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 +81 -24
- package/lib/langium/integrity/integrity-service.d.ts.map +1 -1
- package/lib/langium/integrity/integrity-service.js +264 -57
- 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 +29 -4
- 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 +411 -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 +432 -282
- package/lib/langium/model-service/model-service.d.ts.map +1 -1
- package/lib/langium/model-service/model-service.js +504 -438
- package/lib/langium/model-service/model-service.js.map +1 -1
- package/lib/langium/module.d.ts +157 -35
- package/lib/langium/module.d.ts.map +1 -1
- package/lib/langium/module.js +52 -35
- package/lib/langium/module.js.map +1 -1
- package/lib/langium/naming/name-provider.d.ts +25 -4
- package/lib/langium/naming/name-provider.d.ts.map +1 -1
- package/lib/langium/naming/name-provider.js +2 -1
- package/lib/langium/naming/name-provider.js.map +1 -1
- package/lib/langium/naming/name-separator-validation.d.ts +23 -0
- package/lib/langium/naming/name-separator-validation.d.ts.map +1 -1
- package/lib/langium/naming/name-separator-validation.js +30 -1
- package/lib/langium/naming/name-separator-validation.js.map +1 -1
- package/lib/langium/project/abstract-project-manager.d.ts.map +1 -1
- package/lib/langium/project/abstract-project-manager.js +9 -2
- 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 +31 -11
- 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/hydranium-scope-computation.d.ts.map +1 -1
- package/lib/langium/scope/hydranium-scope-computation.js.map +1 -1
- package/lib/langium/scope/hydranium-scope-provider.d.ts +48 -13
- package/lib/langium/scope/hydranium-scope-provider.d.ts.map +1 -1
- package/lib/langium/scope/hydranium-scope-provider.js +56 -20
- package/lib/langium/scope/hydranium-scope-provider.js.map +1 -1
- package/lib/langium/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.map +1 -1
- package/lib/langium/scope/reference-candidate-provider.js.map +1 -1
- package/lib/langium/scope/scope-extension-service.d.ts.map +1 -1
- package/lib/langium/scope/scope-extension-service.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/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 +77 -26
- 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.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 +294 -10
- package/lib/langium/validation/document-validator.d.ts.map +1 -1
- package/lib/langium/validation/document-validator.js +448 -5
- package/lib/langium/validation/document-validator.js.map +1 -1
- package/lib/langium/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 +18 -14
- package/lib/langium/workspace/document-uri-policy.d.ts.map +1 -1
- package/lib/langium/workspace/document-uri-policy.js +10 -9
- 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 +135 -9
- package/lib/langium/workspace/file-system-provider.d.ts.map +1 -1
- package/lib/langium/workspace/file-system-provider.js +93 -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 +128 -10
- package/lib/langium/workspace/hydranium-workspace-manager.js.map +1 -1
- package/lib/langium/workspace/in-memory-file-system-provider.d.ts +26 -3
- package/lib/langium/workspace/in-memory-file-system-provider.d.ts.map +1 -1
- package/lib/langium/workspace/in-memory-file-system-provider.js +41 -15
- 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 +86 -17
- package/lib/langium/workspace/langium-documents.d.ts.map +1 -1
- package/lib/langium/workspace/langium-documents.js +101 -29
- 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 +0 -7
- package/lib/langium/workspace/persistent-file-system-provider.js.map +1 -1
- package/lib/{documents → langium/workspace}/self-save-registry.d.ts +38 -7
- package/lib/langium/workspace/self-save-registry.d.ts.map +1 -0
- package/lib/{documents → langium/workspace}/self-save-registry.js +29 -16
- 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/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 +153 -99
- package/lib/lsp/hydranium-document-update-handler.js.map +1 -1
- package/lib/lsp/index.d.ts +3 -1
- package/lib/lsp/index.d.ts.map +1 -1
- package/lib/lsp/index.js +3 -1
- package/lib/lsp/index.js.map +1 -1
- package/lib/lsp/lsp-latency.d.ts +39 -0
- package/lib/lsp/lsp-latency.d.ts.map +1 -0
- package/lib/lsp/lsp-latency.js +58 -0
- package/lib/lsp/lsp-latency.js.map +1 -0
- package/lib/lsp/semantic-token-provider.d.ts +34 -1
- package/lib/lsp/semantic-token-provider.d.ts.map +1 -1
- package/lib/lsp/semantic-token-provider.js +55 -8
- package/lib/lsp/semantic-token-provider.js.map +1 -1
- package/lib/lsp/shared-module.d.ts +4 -8
- package/lib/lsp/shared-module.d.ts.map +1 -1
- package/lib/lsp/shared-module.js.map +1 -1
- package/lib/lsp/start-language-server.d.ts +8 -7
- package/lib/lsp/start-language-server.d.ts.map +1 -1
- package/lib/lsp/start-language-server.js +13 -7
- package/lib/lsp/start-language-server.js.map +1 -1
- package/lib/messages/carriers.d.ts +54 -0
- package/lib/messages/carriers.d.ts.map +1 -0
- package/lib/messages/carriers.js +62 -0
- package/lib/messages/carriers.js.map +1 -0
- package/lib/messages/index.d.ts +25 -0
- package/lib/messages/index.d.ts.map +1 -0
- package/lib/messages/index.js +25 -0
- package/lib/messages/index.js.map +1 -0
- package/lib/messages/renderer.d.ts +142 -0
- package/lib/messages/renderer.d.ts.map +1 -0
- package/lib/messages/renderer.js +165 -0
- package/lib/messages/renderer.js.map +1 -0
- package/lib/node/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/measure-memory.d.ts.map +1 -1
- package/lib/node/measure-memory.js +1 -0
- package/lib/node/measure-memory.js.map +1 -1
- package/lib/node/memory-monitor.js.map +1 -1
- package/lib/node/node-file-system-provider.d.ts +41 -6
- package/lib/node/node-file-system-provider.d.ts.map +1 -1
- package/lib/node/node-file-system-provider.js +109 -49
- package/lib/node/node-file-system-provider.js.map +1 -1
- package/lib/node/profile-capture.d.ts +8 -2
- package/lib/node/profile-capture.d.ts.map +1 -1
- package/lib/node/profile-capture.js +1 -1
- 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 +52 -0
- package/lib/node/rename-over-open-readers.d.ts.map +1 -0
- package/lib/node/rename-over-open-readers.js +66 -0
- package/lib/node/rename-over-open-readers.js.map +1 -0
- package/lib/node/socket-launcher.d.ts +20 -4
- package/lib/node/socket-launcher.d.ts.map +1 -1
- package/lib/node/socket-launcher.js +5 -4
- 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 +2 -2
- package/lib/node/stdio-launcher.js.map +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/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 +11 -3
- package/lib/testing/node/lsp-server-connection.d.ts.map +1 -1
- package/lib/testing/node/lsp-server-connection.js +43 -10
- package/lib/testing/node/lsp-server-connection.js.map +1 -1
- package/lib/testing/node/scratch-workspace.d.ts.map +1 -1
- package/lib/testing/node/scratch-workspace.js +10 -5
- package/lib/testing/node/scratch-workspace.js.map +1 -1
- package/lib/testing/node/spawned-server.d.ts +14 -0
- package/lib/testing/node/spawned-server.d.ts.map +1 -1
- package/lib/testing/node/spawned-server.js +34 -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 +24 -8
- package/lib/testing/playwright/server-log-capture.d.ts.map +1 -1
- package/lib/testing/playwright/server-log-capture.js +27 -6
- package/lib/testing/playwright/server-log-capture.js.map +1 -1
- package/lib/testing/playwright/server-log-rename-reporter.d.ts.map +1 -1
- package/lib/testing/playwright/server-log-rename-reporter.js +10 -1
- package/lib/testing/playwright/server-log-rename-reporter.js.map +1 -1
- package/lib/testing/run-update-pipeline.d.ts +4 -4
- package/lib/testing/run-update-pipeline.d.ts.map +1 -1
- package/lib/testing/stub-ast-document-manager.d.ts +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 +26 -11
- package/lib/testing/stub-document-builder.d.ts.map +1 -1
- package/lib/testing/stub-document-builder.js +78 -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 +7 -6
- package/lib/testing/stub-model-service.d.ts.map +1 -1
- package/lib/testing/stub-model-service.js +4 -4
- package/lib/testing/stub-model-service.js.map +1 -1
- package/lib/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/util/connection-liveness.d.ts +7 -6
- package/lib/util/connection-liveness.d.ts.map +1 -1
- package/lib/util/connection-liveness.js +35 -14
- package/lib/util/connection-liveness.js.map +1 -1
- package/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 +32 -48
- package/src/documents/ast-document-manager.ts +379 -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 +130 -0
- package/src/documents/document-release-handler.ts +365 -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 +931 -595
- package/src/documents/index.ts +10 -2
- package/src/documents/language-client-shadow.ts +451 -0
- package/src/documents/model-ledger.ts +66 -0
- package/src/documents/text-ledger.ts +112 -0
- package/src/documents/version-sync-service.ts +267 -0
- package/src/index.ts +8 -0
- package/src/langium/ast-extension/ast-node-builder.ts +66 -22
- package/src/langium/bootstrap.ts +66 -28
- 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/logger.ts +12 -5
- package/src/langium/diagnostics/lsp-logger.ts +59 -15
- package/src/langium/document-builder/build-pipeline-integration.ts +50 -5
- package/src/langium/document-builder/build-session.ts +87 -0
- package/src/langium/document-builder/document-builder.ts +825 -59
- package/src/langium/document-builder/index.ts +1 -0
- package/src/langium/integration-services.ts +83 -24
- package/src/langium/integrity/integrity-rule.ts +16 -8
- package/src/langium/integrity/integrity-service.ts +287 -62
- 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 +48 -7
- package/src/langium/model-service/client-session.ts +644 -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 +790 -468
- package/src/langium/module.ts +210 -64
- package/src/langium/naming/name-provider.ts +27 -5
- package/src/langium/naming/name-separator-validation.ts +34 -5
- package/src/langium/project/abstract-project-manager.ts +9 -1
- package/src/langium/project/project-change-event.ts +2 -2
- package/src/langium/residency/cst-residency-service.ts +46 -15
- package/src/langium/scope/hydranium-scope-provider.ts +60 -22
- package/src/langium/serialization/abstract-serializer.ts +13 -32
- package/src/langium/service-registry.ts +41 -2
- package/src/langium/shared-services.ts +27 -6
- package/src/langium/single-langium-copy.ts +42 -0
- package/src/langium/transfer/transfer-encoder.ts +104 -37
- package/src/langium/trivia/comment-preserver.ts +1100 -0
- package/src/langium/trivia/document-ending-preserver.ts +55 -0
- package/src/langium/trivia/index.ts +14 -0
- package/src/langium/trivia/trivia-contribution.ts +39 -0
- package/src/langium/trivia/trivia-preserver.ts +54 -0
- package/src/langium/trivia/trivia-service.ts +99 -0
- package/src/langium/update-rewrite/update-rewrite.ts +1 -1
- package/src/langium/validation/document-validator.ts +537 -11
- package/src/langium/validation/validation-contribution-collector.ts +10 -1
- package/src/langium/workspace/document-uri-policy.ts +18 -14
- package/src/langium/workspace/file-not-found.ts +35 -0
- package/src/langium/workspace/file-system-provider.ts +205 -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 +154 -14
- package/src/langium/workspace/in-memory-file-system-provider.ts +48 -17
- package/src/langium/workspace/index.ts +1 -0
- package/src/langium/workspace/initialize-workspace.ts +43 -5
- package/src/langium/workspace/langium-documents.ts +124 -33
- package/src/langium/workspace/persistent-file-system-provider.ts +1 -8
- package/src/{documents → langium/workspace}/self-save-registry.ts +54 -15
- package/src/langium/workspace/virtual-document.ts +96 -19
- package/src/langium/workspace/write-lock-scope.ts +24 -11
- 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 +187 -108
- package/src/lsp/index.ts +3 -1
- package/src/lsp/lsp-latency.ts +62 -0
- package/src/lsp/semantic-token-provider.ts +74 -7
- package/src/lsp/shared-module.ts +4 -8
- package/src/lsp/start-language-server.ts +13 -7
- package/src/messages/carriers.ts +78 -0
- package/src/messages/index.ts +36 -0
- package/src/messages/renderer.ts +212 -0
- package/src/node/heap-ceiling.ts +108 -0
- package/src/node/index.ts +1 -1
- package/src/node/latency-from-env.ts +1 -1
- package/src/node/measure-memory.ts +1 -0
- package/src/node/node-file-system-provider.ts +124 -53
- package/src/node/profile-capture.ts +9 -3
- package/src/node/profiling-run.ts +30 -8
- package/src/node/rename-over-open-readers.ts +78 -0
- package/src/node/socket-launcher.ts +24 -8
- package/src/node/stdio-launcher.ts +8 -7
- 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/index.ts +1 -0
- package/src/testing/node/lsp-harness.ts +2 -0
- package/src/testing/node/lsp-server-connection.ts +66 -12
- package/src/testing/node/scratch-workspace.ts +10 -5
- package/src/testing/node/spawned-server.ts +36 -2
- 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 +45 -11
- package/src/testing/playwright/server-log-rename-reporter.ts +12 -1
- package/src/testing/run-update-pipeline.ts +4 -4
- package/src/testing/stub-ast-document-manager.ts +36 -138
- package/src/testing/stub-document-builder.ts +102 -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 +9 -8
- 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 +1 -1
- package/src/util/connection-liveness.ts +37 -14
- 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.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/lsp/instrument-connection.ts +0 -66
- package/src/node/process-memory.ts +0 -299
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* SPDX-License-Identifier: MIT
|
|
8
8
|
********************************************************************************/
|
|
9
9
|
|
|
10
|
-
import { asMutable, type Clock, Debouncer, Format, type Tracer } from '@hydranium/protocol';
|
|
10
|
+
import { asMutable, type Clock, Debouncer, Format, type Tracer, UNRECORDED_VERSION } from '@hydranium/protocol';
|
|
11
11
|
import {
|
|
12
12
|
type AstNode,
|
|
13
13
|
AstUtils,
|
|
@@ -24,9 +24,13 @@ import { type ServerSharedServicesMinimal } from '../shared-services.js';
|
|
|
24
24
|
/**
|
|
25
25
|
* Default priority of the CST-residency pass. Deliberately very high so it runs
|
|
26
26
|
* *last* among `Validated` build-phase passes (the registry iterates priority
|
|
27
|
-
* ascending)
|
|
28
|
-
*
|
|
29
|
-
*
|
|
27
|
+
* ascending).
|
|
28
|
+
*
|
|
29
|
+
* The ordering is defensive, not load-bearing: the pass only arms or cancels an
|
|
30
|
+
* idle timer, so every pass at `Validated` reads a resident CST whichever order
|
|
31
|
+
* they run in, and lowering it changes nothing observable while that holds. It
|
|
32
|
+
* becomes load-bearing the moment the shed stops being deferred — a pass that
|
|
33
|
+
* frees the CST synchronously has to run after every reader of it.
|
|
30
34
|
*/
|
|
31
35
|
export const CST_RESIDENCY_PASS_PRIORITY = 1_000_000;
|
|
32
36
|
|
|
@@ -181,8 +185,10 @@ function rehydrateCst(document: LangiumDocument, factory: LangiumDocumentFactory
|
|
|
181
185
|
}
|
|
182
186
|
|
|
183
187
|
/**
|
|
184
|
-
*
|
|
185
|
-
*
|
|
188
|
+
* Keeps a document's CST available to the readers that need one, shedding it
|
|
189
|
+
* for documents that have gone idle and re-grafting on demand.
|
|
190
|
+
*
|
|
191
|
+
* Each build refreshes
|
|
186
192
|
* the idle window of the documents in its batch; when a closed, sheddable
|
|
187
193
|
* document's window elapses, every AST node's `$cstNode` and every reference's
|
|
188
194
|
* `$refNode` are nulled, and the CST root, `Range`s and `Position`s become
|
|
@@ -225,9 +231,25 @@ function rehydrateCst(document: LangiumDocument, factory: LangiumDocumentFactory
|
|
|
225
231
|
* demand by the identity-preserving graft of {@link rehydrateNode} /
|
|
226
232
|
* {@link rehydrate}, driven transparently from the framework
|
|
227
233
|
* `NameProvider.getNameNode` chokepoint, the comment provider, and
|
|
228
|
-
* `
|
|
234
|
+
* `HydraniumLangiumDocuments.getOrCreateDocument`.
|
|
229
235
|
*/
|
|
230
|
-
export
|
|
236
|
+
export interface CstResidencyService {
|
|
237
|
+
/**
|
|
238
|
+
* Ensure `document` has a CST, re-parsing its retained text if it was shed.
|
|
239
|
+
* A resident document is left exactly as it is, so this is safe to call on
|
|
240
|
+
* a hot path and safe to call twice.
|
|
241
|
+
*/
|
|
242
|
+
rehydrate(document: LangiumDocument): void;
|
|
243
|
+
|
|
244
|
+
/**
|
|
245
|
+
* Node-level convenience over {@link rehydrate}, cheap enough for an
|
|
246
|
+
* unconditional call: a node whose `$cstNode` is already set returns
|
|
247
|
+
* without resolving its document.
|
|
248
|
+
*/
|
|
249
|
+
rehydrateNode(node: AstNode): void;
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
export class DefaultCstResidencyService implements CstResidencyService {
|
|
231
253
|
protected readonly strategy: CstResidencyStrategy;
|
|
232
254
|
/** Bytes-per-node for the optional reclaim estimate in traces; `0` disables it. */
|
|
233
255
|
protected readonly estimatedBytesPerShedNode: number;
|
|
@@ -277,8 +299,8 @@ export class CstResidencyService {
|
|
|
277
299
|
* until navigation latency on shed files is actually observed to hurt. This
|
|
278
300
|
* method is where that hook goes.
|
|
279
301
|
*/
|
|
280
|
-
rehydrate(document: LangiumDocument):
|
|
281
|
-
|
|
302
|
+
rehydrate(document: LangiumDocument): void {
|
|
303
|
+
rehydrateCst(document, this.services.workspace.LangiumDocumentFactory);
|
|
282
304
|
}
|
|
283
305
|
|
|
284
306
|
/**
|
|
@@ -287,11 +309,11 @@ export class CstResidencyService {
|
|
|
287
309
|
* `true` without even resolving the document, so hot read paths
|
|
288
310
|
* (`getNameNode`, comment lookup) call this unconditionally.
|
|
289
311
|
*/
|
|
290
|
-
rehydrateNode(node: AstNode):
|
|
312
|
+
rehydrateNode(node: AstNode): void {
|
|
291
313
|
if (node.$cstNode !== undefined) {
|
|
292
|
-
return
|
|
314
|
+
return;
|
|
293
315
|
}
|
|
294
|
-
|
|
316
|
+
this.rehydrate(AstUtils.getDocument(node));
|
|
295
317
|
}
|
|
296
318
|
|
|
297
319
|
/**
|
|
@@ -353,8 +375,8 @@ export class CstResidencyService {
|
|
|
353
375
|
this.shedTotal += this.shed(document);
|
|
354
376
|
}
|
|
355
377
|
|
|
356
|
-
/** Cancel
|
|
357
|
-
|
|
378
|
+
/** Cancel every armed shed, so a document that has gone idle keeps its CST. */
|
|
379
|
+
cancelPendingShed(): void {
|
|
358
380
|
for (const timer of this.idleTimers.values()) {
|
|
359
381
|
timer.dispose();
|
|
360
382
|
}
|
|
@@ -383,6 +405,15 @@ export class CstResidencyService {
|
|
|
383
405
|
if (root === undefined || root.$cstNode === undefined) {
|
|
384
406
|
return 0;
|
|
385
407
|
}
|
|
408
|
+
// Readers of the parsed text, the `'text-diagnostics'` fingerprint among
|
|
409
|
+
// them, otherwise see none once the CST is gone. Recorded in the ledger
|
|
410
|
+
// directly: no root is produced, and reconciling it with the store would
|
|
411
|
+
// step a closed document's sequence for a root behind its text.
|
|
412
|
+
const ledger = this.services.workspace.ModelLedger;
|
|
413
|
+
const version = ledger.versionOf(root);
|
|
414
|
+
if (version !== UNRECORDED_VERSION) {
|
|
415
|
+
ledger.record(root, version, ledger.textOf(root));
|
|
416
|
+
}
|
|
386
417
|
let cleared = 0;
|
|
387
418
|
for (const node of AstUtils.streamAst(root)) {
|
|
388
419
|
if (node.$cstNode) {
|
|
@@ -24,7 +24,6 @@ import {
|
|
|
24
24
|
type AstNodeLocator,
|
|
25
25
|
AstUtils,
|
|
26
26
|
DefaultScopeProvider,
|
|
27
|
-
type LangiumDocuments,
|
|
28
27
|
MapScope,
|
|
29
28
|
type ReferenceInfo,
|
|
30
29
|
type Scope,
|
|
@@ -35,9 +34,11 @@ import {
|
|
|
35
34
|
WorkspaceCache,
|
|
36
35
|
stream
|
|
37
36
|
} from '@hydranium/langium';
|
|
37
|
+
import { buildAstNode } from '../ast-extension/ast-node-builder.js';
|
|
38
38
|
import { type LogNameOptions } from '../diagnostics/logger.js';
|
|
39
39
|
import { type HydraniumLanguageServices } from '../language-module.js';
|
|
40
40
|
import { type NameProvider } from '../naming/name-provider.js';
|
|
41
|
+
import { type HydraniumDocumentRegistry } from '../workspace/langium-documents.js';
|
|
41
42
|
import { type ScopeExtensionService } from './scope-extension-service.js';
|
|
42
43
|
import { isTieredDescription } from './scoped-ast-node-description.js';
|
|
43
44
|
|
|
@@ -143,7 +144,7 @@ export interface ScopeContext {
|
|
|
143
144
|
* `reference-candidate-provider.ts` module.
|
|
144
145
|
*/
|
|
145
146
|
export class HydraniumScopeProvider extends DefaultScopeProvider {
|
|
146
|
-
protected readonly langiumDocuments:
|
|
147
|
+
protected readonly langiumDocuments: HydraniumDocumentRegistry;
|
|
147
148
|
protected readonly astNodeLocator: AstNodeLocator;
|
|
148
149
|
protected readonly scopeExtensionService: ScopeExtensionService;
|
|
149
150
|
protected readonly options: HydraniumScopeProviderOptions;
|
|
@@ -182,6 +183,26 @@ export class HydraniumScopeProvider extends DefaultScopeProvider {
|
|
|
182
183
|
this.tracer = services.shared.Tracer.for(options.logName ?? 'ScopeProvider').trace('instantiated');
|
|
183
184
|
}
|
|
184
185
|
|
|
186
|
+
/**
|
|
187
|
+
* Drop every cached scope — the framework's project-tier chain and the
|
|
188
|
+
* inherited global scope it is filtered from.
|
|
189
|
+
*
|
|
190
|
+
* **Called from outside the class**, by the build pipeline once the batch is
|
|
191
|
+
* re-indexed. The caches' own eviction does not cover this:
|
|
192
|
+
* `DocumentBuilder.onUpdate` fires after the build has taken every changed
|
|
193
|
+
* document's symbols out of the index and before it puts them back, so a
|
|
194
|
+
* scope built in that gap denies those symbols exist and every document the
|
|
195
|
+
* same build links afterwards resolves against it.
|
|
196
|
+
*
|
|
197
|
+
* Both go together because the second is derived from the first: clearing
|
|
198
|
+
* only {@link scopeCache} refills it from a stale `globalScopeCache`, and
|
|
199
|
+
* clearing only `globalScopeCache` leaves the filtered copy standing.
|
|
200
|
+
*/
|
|
201
|
+
clearScopeCaches(): void {
|
|
202
|
+
this.scopeCache.clear();
|
|
203
|
+
this.globalScopeCache.clear();
|
|
204
|
+
}
|
|
205
|
+
|
|
185
206
|
/**
|
|
186
207
|
* Framework-owned assembly seam. **Adopters do NOT override this** —
|
|
187
208
|
* override {@link createGlobalScope} instead. This method layers the
|
|
@@ -469,12 +490,13 @@ export class HydraniumScopeProvider extends DefaultScopeProvider {
|
|
|
469
490
|
* Convert a protocol-layer {@link ReferenceContext} into a Langium
|
|
470
491
|
* {@link ReferenceInfo} the rest of the scope/linking machinery accepts.
|
|
471
492
|
*
|
|
472
|
-
* Walks `syntheticPath` by FABRICATING a
|
|
473
|
-
*
|
|
474
|
-
*
|
|
475
|
-
*
|
|
476
|
-
*
|
|
477
|
-
* the
|
|
493
|
+
* Walks `syntheticPath` by FABRICATING a stub per step, so a scope can be
|
|
494
|
+
* queried for an element that does not exist yet — which is what synthetic
|
|
495
|
+
* paths are for. A stub carries the grammar's declared defaults and nothing
|
|
496
|
+
* else, so its containment lists are present but EMPTY: a caller that needs
|
|
497
|
+
* to read a populated collection off the leaf wants
|
|
498
|
+
* {@link resolveReferenceSource} instead, which walks the same path into the
|
|
499
|
+
* real tree.
|
|
478
500
|
*
|
|
479
501
|
* Throws if the context references an unresolvable source; callers
|
|
480
502
|
* that prefer a soft failure should catch and fall back to
|
|
@@ -486,16 +508,15 @@ export class HydraniumScopeProvider extends DefaultScopeProvider {
|
|
|
486
508
|
throw new Error('Invalid reference source');
|
|
487
509
|
}
|
|
488
510
|
for (const step of ctx.syntheticPath ?? []) {
|
|
489
|
-
container = {
|
|
511
|
+
container = buildAstNode(this.services.shared.AstReflection, step.type, {
|
|
490
512
|
$container: container,
|
|
491
513
|
$containerProperty: step.containerProperty,
|
|
492
514
|
// Part of Langium's own container contract, so a stub that omits it
|
|
493
515
|
// is an under-specified node: anything reading position off the
|
|
494
516
|
// chain (a key provider, an adopter scope extension) sees
|
|
495
517
|
// `undefined` where the caller named a slot.
|
|
496
|
-
$containerIndex: step.index
|
|
497
|
-
|
|
498
|
-
};
|
|
518
|
+
$containerIndex: step.index
|
|
519
|
+
});
|
|
499
520
|
}
|
|
500
521
|
return {
|
|
501
522
|
reference: { $refText: '', ref: undefined },
|
|
@@ -586,18 +607,35 @@ export class HydraniumScopeProvider extends DefaultScopeProvider {
|
|
|
586
607
|
}
|
|
587
608
|
|
|
588
609
|
/**
|
|
589
|
-
* Build a transient AST-node stub for a {@link SyntheticSource} request
|
|
590
|
-
*
|
|
591
|
-
*
|
|
592
|
-
*
|
|
593
|
-
*
|
|
610
|
+
* Build a transient AST-node stub for a {@link SyntheticSource} request: a
|
|
611
|
+
* node of the requested type, contained by the document at `source.uri`.
|
|
612
|
+
*
|
|
613
|
+
* **The container is materialised when no document is loaded there**, which
|
|
614
|
+
* is the case the source type exists for — a `SyntheticSource` names a node
|
|
615
|
+
* that does not exist yet, and the create-element flow asks at the FOLDER
|
|
616
|
+
* the file is about to be written into. Abstaining there would answer an
|
|
617
|
+
* empty candidate list, which a client cannot tell from "nothing matches".
|
|
618
|
+
*
|
|
619
|
+
* The stand-in parses under THIS provider's grammar, because a folder URI
|
|
620
|
+
* carries no extension for the routing ladder to end on and this provider is
|
|
621
|
+
* bound per grammar. Reaching for `createEmptyDocument(uri)` without the id
|
|
622
|
+
* instead fails inside the parse, on an empty extension rather than on the
|
|
623
|
+
* URI.
|
|
624
|
+
*
|
|
625
|
+
* The materialised document is unregistered and transient; see
|
|
626
|
+
* `createEmptyDocument`. Overriding is still open to a consumer whose
|
|
627
|
+
* "container" is an inner element rather than the parse root, or one that
|
|
628
|
+
* deliberately declines to answer for an absent document.
|
|
629
|
+
*
|
|
630
|
+
* The stub carries the grammar's declared defaults, so an extension reading a
|
|
631
|
+
* containment list off it sees an empty array rather than `undefined`.
|
|
594
632
|
*/
|
|
595
633
|
protected resolveSyntheticSource(source: SyntheticSource): AstNode | undefined {
|
|
596
|
-
const
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
return
|
|
634
|
+
const uri = UriUtils.toUri(source.uri);
|
|
635
|
+
const document =
|
|
636
|
+
this.langiumDocuments.getDocument(uri) ??
|
|
637
|
+
this.langiumDocuments.createEmptyDocument(uri, this.services.LanguageMetaData.languageId);
|
|
638
|
+
return buildAstNode(this.services.shared.AstReflection, source.type, { $container: document.parseResult.value });
|
|
601
639
|
}
|
|
602
640
|
|
|
603
641
|
/**
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* SPDX-License-Identifier: MIT
|
|
8
8
|
********************************************************************************/
|
|
9
9
|
|
|
10
|
-
import {
|
|
10
|
+
import { type MaybePromise, type Tracer, type TransferElement } from '@hydranium/protocol';
|
|
11
11
|
import { type AstNode, type AstReflection, type GenericAstNode, isAstNode } from '@hydranium/langium';
|
|
12
12
|
import { type LogNameOptions } from '../diagnostics/logger.js';
|
|
13
13
|
import { type HydraniumLanguageServices } from '../language-module.js';
|
|
@@ -66,16 +66,6 @@ export interface AbstractSerializerOptions extends LogNameOptions {
|
|
|
66
66
|
* the extra property carries a value.
|
|
67
67
|
*/
|
|
68
68
|
readonly referenceWrapperTypes?: ReadonlyMap<string, string>;
|
|
69
|
-
/**
|
|
70
|
-
* Whether {@link AbstractSerializer.serializeAst} trims trailing whitespace
|
|
71
|
-
* from the final output (leading whitespace is always trimmed). Defaults to
|
|
72
|
-
* `true` — the conventional "no trailing blank lines" document shape. Set to
|
|
73
|
-
* `false` for grammars whose values may legitimately END the document with
|
|
74
|
-
* blank lines that must survive a round-trip — e.g. a multi-line block-scalar
|
|
75
|
-
* property (see `YamlSerializerOptions.blockScalarProperties`),
|
|
76
|
-
* where a trailing-trim would silently eat user-typed blank lines.
|
|
77
|
-
*/
|
|
78
|
-
readonly trimTrailingWhitespace?: boolean;
|
|
79
69
|
}
|
|
80
70
|
|
|
81
71
|
/**
|
|
@@ -139,29 +129,20 @@ export abstract class AbstractSerializer<
|
|
|
139
129
|
* Entry point for AST-shape inputs. Typically the grammar root, but any
|
|
140
130
|
* AST node works — the walker is recursive and shape-agnostic.
|
|
141
131
|
*
|
|
142
|
-
*
|
|
143
|
-
*
|
|
144
|
-
*
|
|
145
|
-
*
|
|
132
|
+
* **Emits the model and nothing else — do not trim here.** Trailing
|
|
133
|
+
* whitespace belongs to the author, and a write path holding the prior
|
|
134
|
+
* document restores it from there; trimming at this end deletes it before
|
|
135
|
+
* that restore sees it. A serializer has no prior document to consult, so it
|
|
136
|
+
* cannot tell a deliberate blank line from an accidental one.
|
|
137
|
+
*
|
|
138
|
+
* **Nothing trims what a subclass emits**, at either end. Emitting leading
|
|
139
|
+
* whitespace therefore puts it in the file, where no write path removes it.
|
|
140
|
+
*
|
|
141
|
+
* Returns whatever `serializeNode` returns, so a fully sync subclass keeps a
|
|
142
|
+
* bare `string` with no promise allocation.
|
|
146
143
|
*/
|
|
147
144
|
serializeAst(model: TAst): MaybePromise<string> {
|
|
148
|
-
|
|
149
|
-
if (isPromiseLike(result)) {
|
|
150
|
-
return result.then(text => this.trimSerialized(text));
|
|
151
|
-
}
|
|
152
|
-
return this.trimSerialized(result);
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
/**
|
|
156
|
-
* Trim the final serialized output. Leading whitespace is always removed;
|
|
157
|
-
* trailing whitespace is removed unless {@link AbstractSerializerOptions.trimTrailingWhitespace}
|
|
158
|
-
* is `false` (which preserves document-ending blank lines, e.g. inside a block scalar).
|
|
159
|
-
*/
|
|
160
|
-
protected trimSerialized(text: string | undefined): string {
|
|
161
|
-
if (text === undefined) {
|
|
162
|
-
return '';
|
|
163
|
-
}
|
|
164
|
-
return this.options.trimTrailingWhitespace === false ? text.trimStart() : text.trim();
|
|
145
|
+
return this.serializeNode(model, 0);
|
|
165
146
|
}
|
|
166
147
|
|
|
167
148
|
/**
|
|
@@ -209,6 +209,19 @@ export class ExtendedServiceRegistry<
|
|
|
209
209
|
return super.getServices(arg);
|
|
210
210
|
}
|
|
211
211
|
|
|
212
|
+
/**
|
|
213
|
+
* Every registered language's services, typed as `TServices` like the
|
|
214
|
+
* lookups here rather than as Langium's base shape, so a sweep of the whole
|
|
215
|
+
* set reaches what a URI or a typed handle would have given it.
|
|
216
|
+
*
|
|
217
|
+
* The cast is sound because {@link register} is the only way a language
|
|
218
|
+
* enters and takes `TServices`; the inherited accessor is typed to Langium's
|
|
219
|
+
* base, which is the only reason one is needed.
|
|
220
|
+
*/
|
|
221
|
+
override get all(): readonly TServices[] {
|
|
222
|
+
return super.all as readonly TServices[];
|
|
223
|
+
}
|
|
224
|
+
|
|
212
225
|
/**
|
|
213
226
|
* Lookup by anything that identifies a document — an AST node (routed by
|
|
214
227
|
* the document it lives in), a `URI`, or a URI string. `undefined` when the
|
|
@@ -255,9 +268,13 @@ export class ExtendedServiceRegistry<
|
|
|
255
268
|
* inherited Langium semantics, which throws on miss). Used for
|
|
256
269
|
* dynamically-routed lookups where the language id comes from
|
|
257
270
|
* external input.
|
|
271
|
+
*
|
|
272
|
+
* The cast is sound because {@link register} is the only way a language
|
|
273
|
+
* enters and takes `TServices`; `languageIdMap` is inherited and typed to
|
|
274
|
+
* Langium's base, which is the only reason one is needed.
|
|
258
275
|
*/
|
|
259
|
-
getServicesById(languageId: string):
|
|
260
|
-
return this.languageIdMap.get(languageId);
|
|
276
|
+
getServicesById(languageId: string): TServices | undefined {
|
|
277
|
+
return this.languageIdMap.get(languageId) as TServices | undefined;
|
|
261
278
|
}
|
|
262
279
|
|
|
263
280
|
/**
|
|
@@ -299,6 +316,28 @@ export class ExtendedServiceRegistry<
|
|
|
299
316
|
return owners.length === 1 ? owners[0] : undefined;
|
|
300
317
|
}
|
|
301
318
|
|
|
319
|
+
/**
|
|
320
|
+
* The language the strongest signal given names: a declared `languageId`,
|
|
321
|
+
* then `target`'s document, then the only registered language, then the sole
|
|
322
|
+
* producer of `type`. `undefined` when none answers, which leaves the
|
|
323
|
+
* fallback to the caller, since it differs per caller.
|
|
324
|
+
*
|
|
325
|
+
* A declared id comes first because every later signal is inferred, and an
|
|
326
|
+
* inference must not override a caller that said which grammar it means.
|
|
327
|
+
*/
|
|
328
|
+
getLanguageFor(hint: { readonly languageId?: string; readonly target?: LanguageTarget; readonly type?: string }): TServices | undefined {
|
|
329
|
+
const declared = hint.languageId === undefined ? undefined : this.getServicesById(hint.languageId);
|
|
330
|
+
const located = declared ?? this.getServicesFor(hint.target);
|
|
331
|
+
if (located) {
|
|
332
|
+
return located;
|
|
333
|
+
}
|
|
334
|
+
const all = this.all;
|
|
335
|
+
if (all.length === 1) {
|
|
336
|
+
return all[0];
|
|
337
|
+
}
|
|
338
|
+
return hint.type === undefined ? undefined : this.soleServicesByType(hint.type);
|
|
339
|
+
}
|
|
340
|
+
|
|
302
341
|
/**
|
|
303
342
|
* Drop the memoised type index, so a language registered after the first
|
|
304
343
|
* type lookup is accounted for. The reason this index belongs on the
|
|
@@ -9,8 +9,13 @@
|
|
|
9
9
|
|
|
10
10
|
import type { Clock, Logger, Project, Tracer } from '@hydranium/protocol';
|
|
11
11
|
import type { LangiumSharedCoreServices } from '@hydranium/langium';
|
|
12
|
-
import type {
|
|
13
|
-
import type {
|
|
12
|
+
import type { ServerLocale } from '../locale/server-locale.js';
|
|
13
|
+
import type { MessageRenderer } from '../messages/renderer.js';
|
|
14
|
+
import type { SelfSaveRegistry } from './workspace/self-save-registry.js';
|
|
15
|
+
import type { ModelLedger } from '../documents/model-ledger.js';
|
|
16
|
+
import type { VersionSyncService } from '../documents/version-sync-service.js';
|
|
17
|
+
import type { WritableFileSystemProvider } from './workspace/file-system-provider.js';
|
|
18
|
+
import type { HydraniumDocumentRegistry } from './workspace/langium-documents.js';
|
|
14
19
|
import type { BuildPhasePassService } from './build-phase-pass/build-phase-pass-service.js';
|
|
15
20
|
import type { CstResidencyService } from './residency/cst-residency-service.js';
|
|
16
21
|
import type { BuildPipelineIntegration } from './document-builder/build-pipeline-integration.js';
|
|
@@ -27,12 +32,13 @@ import type { AdditionalDocumentContribution } from './workspace/additional-docu
|
|
|
27
32
|
* framework additions that other framework services consume: the dedicated
|
|
28
33
|
* {@link Clock}, {@link Logger} and {@link Tracer} top-level slots (injectable
|
|
29
34
|
* time source, emission-only logger, and the measure-and-emit tracer composed
|
|
30
|
-
* from the other two), the {@link AdditionalDocumentContribution} group,
|
|
31
|
-
* {@link
|
|
35
|
+
* from the other two), the {@link AdditionalDocumentContribution} group, the
|
|
36
|
+
* {@link MessageRenderer} and the {@link ServerLocale} it renders in,
|
|
37
|
+
* an {@link ExtendedServiceRegistry}, and on `workspace` a writable file-system
|
|
32
38
|
* provider plus {@link HydraniumWorkspaceManager}, {@link ProjectManager},
|
|
33
39
|
* {@link SelfSaveRegistry}, {@link BuildPipelineIntegration},
|
|
34
|
-
* {@link BuildPhasePassService}, {@link CstResidencyService}
|
|
35
|
-
* {@link DocumentUriPolicy}.
|
|
40
|
+
* {@link BuildPhasePassService}, {@link CstResidencyService},
|
|
41
|
+
* {@link DocumentUriPolicy}, {@link ModelLedger} and {@link VersionSyncService}.
|
|
36
42
|
*
|
|
37
43
|
* Declared structurally (interface extends + intersection on nested slots)
|
|
38
44
|
* so the full `ServerSharedServices` and any consumer-extended variant
|
|
@@ -57,6 +63,14 @@ export interface ServerSharedServicesMinimal<TProject extends Project = Project>
|
|
|
57
63
|
* adopters deep-merge contributions that seed built-in / stdlib documents.
|
|
58
64
|
*/
|
|
59
65
|
additionalDocuments: Record<string, AdditionalDocumentContribution>;
|
|
66
|
+
/**
|
|
67
|
+
* Renders each user-facing message once, before the server sends it. On the
|
|
68
|
+
* shared tier with no workspace dependency, because all three heads'
|
|
69
|
+
* messages pass through it.
|
|
70
|
+
*/
|
|
71
|
+
MessageRenderer: MessageRenderer;
|
|
72
|
+
/** The locale an init handed the server, for whoever renders in it. */
|
|
73
|
+
ServerLocale: ServerLocale;
|
|
60
74
|
/**
|
|
61
75
|
* Narrows Langium's base `ServiceRegistry` slot to the framework impl the
|
|
62
76
|
* framework always binds, so the abstaining lookups — `getServicesFor`
|
|
@@ -75,12 +89,19 @@ export interface ServerSharedServicesMinimal<TProject extends Project = Project>
|
|
|
75
89
|
// framework always binds, so `wsRelativePath` and the folder-walk are
|
|
76
90
|
// reachable from the minimal surface without a cast.
|
|
77
91
|
WorkspaceManager: HydraniumWorkspaceManager;
|
|
92
|
+
// Same, for the registry: the framework always binds
|
|
93
|
+
// `HydraniumLangiumDocuments`, and `createEmptyDocument` is reachable
|
|
94
|
+
// only through this narrowing — a scope provider querying a URI before
|
|
95
|
+
// the file exists is the caller that needs it.
|
|
96
|
+
/* override */ LangiumDocuments: HydraniumDocumentRegistry;
|
|
78
97
|
ProjectManager: ProjectManager<TProject>;
|
|
79
98
|
SelfSaveRegistry: SelfSaveRegistry;
|
|
80
99
|
BuildPipelineIntegration: BuildPipelineIntegration;
|
|
81
100
|
BuildPhasePassService: BuildPhasePassService;
|
|
82
101
|
CstResidencyService: CstResidencyService;
|
|
83
102
|
DocumentUriPolicy: DocumentUriPolicy;
|
|
103
|
+
ModelLedger: ModelLedger;
|
|
104
|
+
VersionSyncService: VersionSyncService;
|
|
84
105
|
};
|
|
85
106
|
}
|
|
86
107
|
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/********************************************************************************
|
|
2
|
+
* Copyright (c) 2026 EclipseSource and others.
|
|
3
|
+
*
|
|
4
|
+
* This program and the accompanying materials are made available under the
|
|
5
|
+
* terms of the MIT License which is available in the project root.
|
|
6
|
+
*
|
|
7
|
+
* SPDX-License-Identifier: MIT
|
|
8
|
+
********************************************************************************/
|
|
9
|
+
|
|
10
|
+
import { AbstractAstReflection, type AstReflection } from '@hydranium/langium';
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Fail fast when `reflection` extends `AbstractAstReflection` from a second
|
|
14
|
+
* copy of `langium`, which the files `langium-cli` generates run on: a second
|
|
15
|
+
* install, or one install a bundler or test runner loads twice.
|
|
16
|
+
*
|
|
17
|
+
* A reflection whose prototype chain misses this copy's base is taken to come
|
|
18
|
+
* from another copy when it carries the `subtypes` and `allSubtypes` fields that
|
|
19
|
+
* base creates, which `AstReflection` does not declare. Fields rather than the
|
|
20
|
+
* class name, because bundlers and minifiers rename classes; a hand-written
|
|
21
|
+
* reflection passes unless it declares both fields itself.
|
|
22
|
+
*/
|
|
23
|
+
export function assertSingleLangiumCopy(
|
|
24
|
+
reflection: AstReflection,
|
|
25
|
+
subject: () => string = () => `the shared AstReflection (${reflection.constructor?.name ?? 'no constructor'})`
|
|
26
|
+
): void {
|
|
27
|
+
if (reflection instanceof AbstractAstReflection) {
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
if (Object.hasOwn(reflection, 'subtypes') && Object.hasOwn(reflection, 'allSubtypes')) {
|
|
31
|
+
throw new Error(
|
|
32
|
+
`[hydranium] ${subject()} extends \`AbstractAstReflection\` from another instance of \`langium\` than ` +
|
|
33
|
+
'the one `@hydranium/langium` loads, a second physical copy or one install loaded twice, so the generated ' +
|
|
34
|
+
'code runs on one and the framework on the other. Values Langium compares by identity, such as its ' +
|
|
35
|
+
'cancellation signal, are not recognised across the two. `npm explain langium` lists each installed copy ' +
|
|
36
|
+
'and what requires it. If your package resolves another version, declare `langium` at the version ' +
|
|
37
|
+
'`@hydranium/langium` pins and reinstall from scratch, without the lockfile; in a workspace, declare the ' +
|
|
38
|
+
'same pins in the root as well. If a test runner or bundler inlines `langium` but not `@hydranium/*`, ' +
|
|
39
|
+
'load both the same way.'
|
|
40
|
+
);
|
|
41
|
+
}
|
|
42
|
+
}
|