@hydranium/core 1.0.0-next.10
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/LICENSE +21 -0
- package/README.md +100 -0
- package/lib/documents/ast-document-manager.d.ts +243 -0
- package/lib/documents/ast-document-manager.d.ts.map +1 -0
- package/lib/documents/ast-document-manager.js +302 -0
- package/lib/documents/ast-document-manager.js.map +1 -0
- package/lib/documents/client-ids.d.ts +30 -0
- package/lib/documents/client-ids.d.ts.map +1 -0
- package/lib/documents/client-ids.js +30 -0
- package/lib/documents/client-ids.js.map +1 -0
- package/lib/documents/hydranium-text-documents.d.ts +490 -0
- package/lib/documents/hydranium-text-documents.d.ts.map +1 -0
- package/lib/documents/hydranium-text-documents.js +893 -0
- package/lib/documents/hydranium-text-documents.js.map +1 -0
- package/lib/documents/index.d.ts +14 -0
- package/lib/documents/index.d.ts.map +1 -0
- package/lib/documents/index.js +14 -0
- package/lib/documents/index.js.map +1 -0
- package/lib/documents/language-client-text-shadow.d.ts +101 -0
- package/lib/documents/language-client-text-shadow.d.ts.map +1 -0
- package/lib/documents/language-client-text-shadow.js +156 -0
- package/lib/documents/language-client-text-shadow.js.map +1 -0
- package/lib/documents/self-save-registry.d.ts +55 -0
- package/lib/documents/self-save-registry.d.ts.map +1 -0
- package/lib/documents/self-save-registry.js +68 -0
- package/lib/documents/self-save-registry.js.map +1 -0
- package/lib/index.d.ts +38 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +39 -0
- package/lib/index.js.map +1 -0
- package/lib/langium/ast-extension/ast-extension-contribution.d.ts +33 -0
- package/lib/langium/ast-extension/ast-extension-contribution.d.ts.map +1 -0
- package/lib/langium/ast-extension/ast-extension-contribution.js +10 -0
- package/lib/langium/ast-extension/ast-extension-contribution.js.map +1 -0
- package/lib/langium/ast-extension/ast-extension-service.d.ts +212 -0
- package/lib/langium/ast-extension/ast-extension-service.d.ts.map +1 -0
- package/lib/langium/ast-extension/ast-extension-service.js +181 -0
- package/lib/langium/ast-extension/ast-extension-service.js.map +1 -0
- package/lib/langium/ast-extension/ast-node-builder.d.ts +90 -0
- package/lib/langium/ast-extension/ast-node-builder.d.ts.map +1 -0
- package/lib/langium/ast-extension/ast-node-builder.js +61 -0
- package/lib/langium/ast-extension/ast-node-builder.js.map +1 -0
- package/lib/langium/ast-extension/index.d.ts +12 -0
- package/lib/langium/ast-extension/index.d.ts.map +1 -0
- package/lib/langium/ast-extension/index.js +12 -0
- package/lib/langium/ast-extension/index.js.map +1 -0
- package/lib/langium/bootstrap.d.ts +224 -0
- package/lib/langium/bootstrap.d.ts.map +1 -0
- package/lib/langium/bootstrap.js +512 -0
- package/lib/langium/bootstrap.js.map +1 -0
- package/lib/langium/build-phase-pass/build-phase-pass-service.d.ts +77 -0
- package/lib/langium/build-phase-pass/build-phase-pass-service.d.ts.map +1 -0
- package/lib/langium/build-phase-pass/build-phase-pass-service.js +102 -0
- package/lib/langium/build-phase-pass/build-phase-pass-service.js.map +1 -0
- package/lib/langium/build-phase-pass/build-phase-pass.d.ts +106 -0
- package/lib/langium/build-phase-pass/build-phase-pass.d.ts.map +1 -0
- package/lib/langium/build-phase-pass/build-phase-pass.js +43 -0
- package/lib/langium/build-phase-pass/build-phase-pass.js.map +1 -0
- package/lib/langium/build-phase-pass/index.d.ts +11 -0
- package/lib/langium/build-phase-pass/index.d.ts.map +1 -0
- package/lib/langium/build-phase-pass/index.js +11 -0
- package/lib/langium/build-phase-pass/index.js.map +1 -0
- package/lib/langium/config/index.d.ts +10 -0
- package/lib/langium/config/index.d.ts.map +1 -0
- package/lib/langium/config/index.js +10 -0
- package/lib/langium/config/index.js.map +1 -0
- package/lib/langium/config/settings.d.ts +173 -0
- package/lib/langium/config/settings.d.ts.map +1 -0
- package/lib/langium/config/settings.js +196 -0
- package/lib/langium/config/settings.js.map +1 -0
- package/lib/langium/diagnostics/hydranium-langium-profiler.d.ts +109 -0
- package/lib/langium/diagnostics/hydranium-langium-profiler.d.ts.map +1 -0
- package/lib/langium/diagnostics/hydranium-langium-profiler.js +153 -0
- package/lib/langium/diagnostics/hydranium-langium-profiler.js.map +1 -0
- package/lib/langium/diagnostics/index.d.ts +14 -0
- package/lib/langium/diagnostics/index.d.ts.map +1 -0
- package/lib/langium/diagnostics/index.js +19 -0
- package/lib/langium/diagnostics/index.js.map +1 -0
- package/lib/langium/diagnostics/log-file-token.d.ts +16 -0
- package/lib/langium/diagnostics/log-file-token.d.ts.map +1 -0
- package/lib/langium/diagnostics/log-file-token.js +25 -0
- package/lib/langium/diagnostics/log-file-token.js.map +1 -0
- package/lib/langium/diagnostics/log-preamble.d.ts +42 -0
- package/lib/langium/diagnostics/log-preamble.d.ts.map +1 -0
- package/lib/langium/diagnostics/log-preamble.js +57 -0
- package/lib/langium/diagnostics/log-preamble.js.map +1 -0
- package/lib/langium/diagnostics/logger.d.ts +104 -0
- package/lib/langium/diagnostics/logger.d.ts.map +1 -0
- package/lib/langium/diagnostics/logger.js +178 -0
- package/lib/langium/diagnostics/logger.js.map +1 -0
- package/lib/langium/diagnostics/lsp-logger.d.ts +76 -0
- package/lib/langium/diagnostics/lsp-logger.d.ts.map +1 -0
- package/lib/langium/diagnostics/lsp-logger.js +223 -0
- package/lib/langium/diagnostics/lsp-logger.js.map +1 -0
- package/lib/langium/diagnostics/server-tracer.d.ts +27 -0
- package/lib/langium/diagnostics/server-tracer.d.ts.map +1 -0
- package/lib/langium/diagnostics/server-tracer.js +66 -0
- package/lib/langium/diagnostics/server-tracer.js.map +1 -0
- package/lib/langium/document-builder/build-pipeline-integration.d.ts +88 -0
- package/lib/langium/document-builder/build-pipeline-integration.d.ts.map +1 -0
- package/lib/langium/document-builder/build-pipeline-integration.js +151 -0
- package/lib/langium/document-builder/build-pipeline-integration.js.map +1 -0
- package/lib/langium/document-builder/document-builder.d.ts +405 -0
- package/lib/langium/document-builder/document-builder.d.ts.map +1 -0
- package/lib/langium/document-builder/document-builder.js +729 -0
- package/lib/langium/document-builder/document-builder.js.map +1 -0
- package/lib/langium/document-builder/index.d.ts +12 -0
- package/lib/langium/document-builder/index.d.ts.map +1 -0
- package/lib/langium/document-builder/index.js +12 -0
- package/lib/langium/document-builder/index.js.map +1 -0
- package/lib/langium/document-builder/labeled-phase-listener.d.ts +21 -0
- package/lib/langium/document-builder/labeled-phase-listener.d.ts.map +1 -0
- package/lib/langium/document-builder/labeled-phase-listener.js +15 -0
- package/lib/langium/document-builder/labeled-phase-listener.js.map +1 -0
- package/lib/langium/documentation/comment-provider.d.ts +31 -0
- package/lib/langium/documentation/comment-provider.d.ts.map +1 -0
- package/lib/langium/documentation/comment-provider.js +36 -0
- package/lib/langium/documentation/comment-provider.js.map +1 -0
- package/lib/langium/documentation/index.d.ts +10 -0
- package/lib/langium/documentation/index.d.ts.map +1 -0
- package/lib/langium/documentation/index.js +10 -0
- package/lib/langium/documentation/index.js.map +1 -0
- package/lib/langium/integration-services.d.ts +200 -0
- package/lib/langium/integration-services.d.ts.map +1 -0
- package/lib/langium/integration-services.js +65 -0
- package/lib/langium/integration-services.js.map +1 -0
- package/lib/langium/integrity/index.d.ts +12 -0
- package/lib/langium/integrity/index.d.ts.map +1 -0
- package/lib/langium/integrity/index.js +12 -0
- package/lib/langium/integrity/index.js.map +1 -0
- package/lib/langium/integrity/integrity-contribution.d.ts +42 -0
- package/lib/langium/integrity/integrity-contribution.d.ts.map +1 -0
- package/lib/langium/integrity/integrity-contribution.js +10 -0
- package/lib/langium/integrity/integrity-contribution.js.map +1 -0
- package/lib/langium/integrity/integrity-rule.d.ts +82 -0
- package/lib/langium/integrity/integrity-rule.d.ts.map +1 -0
- package/lib/langium/integrity/integrity-rule.js +52 -0
- package/lib/langium/integrity/integrity-rule.js.map +1 -0
- package/lib/langium/integrity/integrity-service.d.ts +221 -0
- package/lib/langium/integrity/integrity-service.d.ts.map +1 -0
- package/lib/langium/integrity/integrity-service.js +328 -0
- package/lib/langium/integrity/integrity-service.js.map +1 -0
- package/lib/langium/keys/default-element-key-provider.d.ts +19 -0
- package/lib/langium/keys/default-element-key-provider.d.ts.map +1 -0
- package/lib/langium/keys/default-element-key-provider.js +18 -0
- package/lib/langium/keys/default-element-key-provider.js.map +1 -0
- package/lib/langium/keys/element-key-provider.d.ts +106 -0
- package/lib/langium/keys/element-key-provider.d.ts.map +1 -0
- package/lib/langium/keys/element-key-provider.js +25 -0
- package/lib/langium/keys/element-key-provider.js.map +1 -0
- package/lib/langium/keys/index.d.ts +13 -0
- package/lib/langium/keys/index.d.ts.map +1 -0
- package/lib/langium/keys/index.js +13 -0
- package/lib/langium/keys/index.js.map +1 -0
- package/lib/langium/keys/name-based-key-provider.d.ts +99 -0
- package/lib/langium/keys/name-based-key-provider.d.ts.map +1 -0
- package/lib/langium/keys/name-based-key-provider.js +134 -0
- package/lib/langium/keys/name-based-key-provider.js.map +1 -0
- package/lib/langium/keys/positional-key-provider.d.ts +41 -0
- package/lib/langium/keys/positional-key-provider.d.ts.map +1 -0
- package/lib/langium/keys/positional-key-provider.js +48 -0
- package/lib/langium/keys/positional-key-provider.js.map +1 -0
- package/lib/langium/labeling/index.d.ts +10 -0
- package/lib/langium/labeling/index.d.ts.map +1 -0
- package/lib/langium/labeling/index.js +10 -0
- package/lib/langium/labeling/index.js.map +1 -0
- package/lib/langium/labeling/label-provider.d.ts +79 -0
- package/lib/langium/labeling/label-provider.d.ts.map +1 -0
- package/lib/langium/labeling/label-provider.js +44 -0
- package/lib/langium/labeling/label-provider.js.map +1 -0
- package/lib/langium/language-module.d.ts +281 -0
- package/lib/langium/language-module.d.ts.map +1 -0
- package/lib/langium/language-module.js +103 -0
- package/lib/langium/language-module.js.map +1 -0
- package/lib/langium/language-types.d.ts +85 -0
- package/lib/langium/language-types.d.ts.map +1 -0
- package/lib/langium/language-types.js +173 -0
- package/lib/langium/language-types.js.map +1 -0
- package/lib/langium/model-service/index.d.ts +10 -0
- package/lib/langium/model-service/index.d.ts.map +1 -0
- package/lib/langium/model-service/index.js +10 -0
- package/lib/langium/model-service/index.js.map +1 -0
- package/lib/langium/model-service/model-service.d.ts +598 -0
- package/lib/langium/model-service/model-service.d.ts.map +1 -0
- package/lib/langium/model-service/model-service.js +889 -0
- package/lib/langium/model-service/model-service.js.map +1 -0
- package/lib/langium/module.d.ts +308 -0
- package/lib/langium/module.d.ts.map +1 -0
- package/lib/langium/module.js +165 -0
- package/lib/langium/module.js.map +1 -0
- package/lib/langium/naming/index.d.ts +11 -0
- package/lib/langium/naming/index.d.ts.map +1 -0
- package/lib/langium/naming/index.js +11 -0
- package/lib/langium/naming/index.js.map +1 -0
- package/lib/langium/naming/name-provider.d.ts +360 -0
- package/lib/langium/naming/name-provider.d.ts.map +1 -0
- package/lib/langium/naming/name-provider.js +240 -0
- package/lib/langium/naming/name-provider.js.map +1 -0
- package/lib/langium/naming/name-separator-validation.d.ts +47 -0
- package/lib/langium/naming/name-separator-validation.d.ts.map +1 -0
- package/lib/langium/naming/name-separator-validation.js +61 -0
- package/lib/langium/naming/name-separator-validation.js.map +1 -0
- package/lib/langium/project/abstract-project-manager.d.ts +242 -0
- package/lib/langium/project/abstract-project-manager.d.ts.map +1 -0
- package/lib/langium/project/abstract-project-manager.js +545 -0
- package/lib/langium/project/abstract-project-manager.js.map +1 -0
- package/lib/langium/project/index.d.ts +13 -0
- package/lib/langium/project/index.d.ts.map +1 -0
- package/lib/langium/project/index.js +13 -0
- package/lib/langium/project/index.js.map +1 -0
- package/lib/langium/project/project-change-event.d.ts +64 -0
- package/lib/langium/project/project-change-event.d.ts.map +1 -0
- package/lib/langium/project/project-change-event.js +10 -0
- package/lib/langium/project/project-change-event.js.map +1 -0
- package/lib/langium/project/project-manager.d.ts +196 -0
- package/lib/langium/project/project-manager.d.ts.map +1 -0
- package/lib/langium/project/project-manager.js +10 -0
- package/lib/langium/project/project-manager.js.map +1 -0
- package/lib/langium/project/single-project-manager.d.ts +69 -0
- package/lib/langium/project/single-project-manager.d.ts.map +1 -0
- package/lib/langium/project/single-project-manager.js +104 -0
- package/lib/langium/project/single-project-manager.js.map +1 -0
- package/lib/langium/residency/cst-residency-service.d.ts +214 -0
- package/lib/langium/residency/cst-residency-service.d.ts.map +1 -0
- package/lib/langium/residency/cst-residency-service.js +349 -0
- package/lib/langium/residency/cst-residency-service.js.map +1 -0
- package/lib/langium/residency/index.d.ts +10 -0
- package/lib/langium/residency/index.d.ts.map +1 -0
- package/lib/langium/residency/index.js +10 -0
- package/lib/langium/residency/index.js.map +1 -0
- package/lib/langium/scope/ast-node-description-provider.d.ts +122 -0
- package/lib/langium/scope/ast-node-description-provider.d.ts.map +1 -0
- package/lib/langium/scope/ast-node-description-provider.js +115 -0
- package/lib/langium/scope/ast-node-description-provider.js.map +1 -0
- package/lib/langium/scope/hydranium-scope-computation.d.ts +163 -0
- package/lib/langium/scope/hydranium-scope-computation.d.ts.map +1 -0
- package/lib/langium/scope/hydranium-scope-computation.js +220 -0
- package/lib/langium/scope/hydranium-scope-computation.js.map +1 -0
- package/lib/langium/scope/hydranium-scope-provider.d.ts +411 -0
- package/lib/langium/scope/hydranium-scope-provider.d.ts.map +1 -0
- package/lib/langium/scope/hydranium-scope-provider.js +543 -0
- package/lib/langium/scope/hydranium-scope-provider.js.map +1 -0
- package/lib/langium/scope/index.d.ts +18 -0
- package/lib/langium/scope/index.d.ts.map +1 -0
- package/lib/langium/scope/index.js +18 -0
- package/lib/langium/scope/index.js.map +1 -0
- package/lib/langium/scope/reference-builder.d.ts +125 -0
- package/lib/langium/scope/reference-builder.d.ts.map +1 -0
- package/lib/langium/scope/reference-builder.js +115 -0
- package/lib/langium/scope/reference-builder.js.map +1 -0
- package/lib/langium/scope/reference-candidate-provider.d.ts +228 -0
- package/lib/langium/scope/reference-candidate-provider.d.ts.map +1 -0
- package/lib/langium/scope/reference-candidate-provider.js +185 -0
- package/lib/langium/scope/reference-candidate-provider.js.map +1 -0
- package/lib/langium/scope/scope-extension-contribution.d.ts +32 -0
- package/lib/langium/scope/scope-extension-contribution.d.ts.map +1 -0
- package/lib/langium/scope/scope-extension-contribution.js +10 -0
- package/lib/langium/scope/scope-extension-contribution.js.map +1 -0
- package/lib/langium/scope/scope-extension-service.d.ts +149 -0
- package/lib/langium/scope/scope-extension-service.d.ts.map +1 -0
- package/lib/langium/scope/scope-extension-service.js +94 -0
- package/lib/langium/scope/scope-extension-service.js.map +1 -0
- package/lib/langium/scope/scoped-ast-node-description.d.ts +160 -0
- package/lib/langium/scope/scoped-ast-node-description.d.ts.map +1 -0
- package/lib/langium/scope/scoped-ast-node-description.js +98 -0
- package/lib/langium/scope/scoped-ast-node-description.js.map +1 -0
- package/lib/langium/scope/tier-specificity.d.ts +47 -0
- package/lib/langium/scope/tier-specificity.d.ts.map +1 -0
- package/lib/langium/scope/tier-specificity.js +83 -0
- package/lib/langium/scope/tier-specificity.js.map +1 -0
- package/lib/langium/serialization/abstract-serializer.d.ts +316 -0
- package/lib/langium/serialization/abstract-serializer.d.ts.map +1 -0
- package/lib/langium/serialization/abstract-serializer.js +351 -0
- package/lib/langium/serialization/abstract-serializer.js.map +1 -0
- package/lib/langium/serialization/index.d.ts +14 -0
- package/lib/langium/serialization/index.d.ts.map +1 -0
- package/lib/langium/serialization/index.js +14 -0
- package/lib/langium/serialization/index.js.map +1 -0
- package/lib/langium/serialization/json-serializer.d.ts +106 -0
- package/lib/langium/serialization/json-serializer.d.ts.map +1 -0
- package/lib/langium/serialization/json-serializer.js +198 -0
- package/lib/langium/serialization/json-serializer.js.map +1 -0
- package/lib/langium/serialization/serialization-util.d.ts +29 -0
- package/lib/langium/serialization/serialization-util.d.ts.map +1 -0
- package/lib/langium/serialization/serialization-util.js +37 -0
- package/lib/langium/serialization/serialization-util.js.map +1 -0
- package/lib/langium/serialization/serializer.d.ts +66 -0
- package/lib/langium/serialization/serializer.d.ts.map +1 -0
- package/lib/langium/serialization/serializer.js +10 -0
- package/lib/langium/serialization/serializer.js.map +1 -0
- package/lib/langium/serialization/yaml-serializer.d.ts +166 -0
- package/lib/langium/serialization/yaml-serializer.d.ts.map +1 -0
- package/lib/langium/serialization/yaml-serializer.js +228 -0
- package/lib/langium/serialization/yaml-serializer.js.map +1 -0
- package/lib/langium/service-registry.d.ts +220 -0
- package/lib/langium/service-registry.d.ts.map +1 -0
- package/lib/langium/service-registry.js +258 -0
- package/lib/langium/service-registry.js.map +1 -0
- package/lib/langium/shared-services.d.ts +98 -0
- package/lib/langium/shared-services.d.ts.map +1 -0
- package/lib/langium/shared-services.js +30 -0
- package/lib/langium/shared-services.js.map +1 -0
- package/lib/langium/transfer/index.d.ts +10 -0
- package/lib/langium/transfer/index.d.ts.map +1 -0
- package/lib/langium/transfer/index.js +10 -0
- package/lib/langium/transfer/index.js.map +1 -0
- package/lib/langium/transfer/transfer-encoder.d.ts +294 -0
- package/lib/langium/transfer/transfer-encoder.d.ts.map +1 -0
- package/lib/langium/transfer/transfer-encoder.js +328 -0
- package/lib/langium/transfer/transfer-encoder.js.map +1 -0
- package/lib/langium/update-rewrite/index.d.ts +14 -0
- package/lib/langium/update-rewrite/index.d.ts.map +1 -0
- package/lib/langium/update-rewrite/index.js +14 -0
- package/lib/langium/update-rewrite/index.js.map +1 -0
- package/lib/langium/update-rewrite/normalize-empty-strings.d.ts +52 -0
- package/lib/langium/update-rewrite/normalize-empty-strings.d.ts.map +1 -0
- package/lib/langium/update-rewrite/normalize-empty-strings.js +83 -0
- package/lib/langium/update-rewrite/normalize-empty-strings.js.map +1 -0
- package/lib/langium/update-rewrite/semantic-root-rewrite.d.ts +37 -0
- package/lib/langium/update-rewrite/semantic-root-rewrite.d.ts.map +1 -0
- package/lib/langium/update-rewrite/semantic-root-rewrite.js +51 -0
- package/lib/langium/update-rewrite/semantic-root-rewrite.js.map +1 -0
- package/lib/langium/update-rewrite/update-rewrite-contribution.d.ts +42 -0
- package/lib/langium/update-rewrite/update-rewrite-contribution.d.ts.map +1 -0
- package/lib/langium/update-rewrite/update-rewrite-contribution.js +10 -0
- package/lib/langium/update-rewrite/update-rewrite-contribution.js.map +1 -0
- package/lib/langium/update-rewrite/update-rewrite-service.d.ts +89 -0
- package/lib/langium/update-rewrite/update-rewrite-service.d.ts.map +1 -0
- package/lib/langium/update-rewrite/update-rewrite-service.js +75 -0
- package/lib/langium/update-rewrite/update-rewrite-service.js.map +1 -0
- package/lib/langium/update-rewrite/update-rewrite.d.ts +59 -0
- package/lib/langium/update-rewrite/update-rewrite.d.ts.map +1 -0
- package/lib/langium/update-rewrite/update-rewrite.js +10 -0
- package/lib/langium/update-rewrite/update-rewrite.js.map +1 -0
- package/lib/langium/validation/document-validator.d.ts +106 -0
- package/lib/langium/validation/document-validator.d.ts.map +1 -0
- package/lib/langium/validation/document-validator.js +118 -0
- package/lib/langium/validation/document-validator.js.map +1 -0
- package/lib/langium/validation/index.d.ts +12 -0
- package/lib/langium/validation/index.d.ts.map +1 -0
- package/lib/langium/validation/index.js +12 -0
- package/lib/langium/validation/index.js.map +1 -0
- package/lib/langium/validation/validation-contribution-collector.d.ts +34 -0
- package/lib/langium/validation/validation-contribution-collector.d.ts.map +1 -0
- package/lib/langium/validation/validation-contribution-collector.js +51 -0
- package/lib/langium/validation/validation-contribution-collector.js.map +1 -0
- package/lib/langium/validation/validation-contribution.d.ts +36 -0
- package/lib/langium/validation/validation-contribution.d.ts.map +1 -0
- package/lib/langium/validation/validation-contribution.js +10 -0
- package/lib/langium/validation/validation-contribution.js.map +1 -0
- package/lib/langium/workspace/additional-document-contribution.d.ts +68 -0
- package/lib/langium/workspace/additional-document-contribution.d.ts.map +1 -0
- package/lib/langium/workspace/additional-document-contribution.js +23 -0
- package/lib/langium/workspace/additional-document-contribution.js.map +1 -0
- package/lib/langium/workspace/document-uri-policy.d.ts +151 -0
- package/lib/langium/workspace/document-uri-policy.d.ts.map +1 -0
- package/lib/langium/workspace/document-uri-policy.js +121 -0
- package/lib/langium/workspace/document-uri-policy.js.map +1 -0
- package/lib/langium/workspace/file-system-provider.d.ts +30 -0
- package/lib/langium/workspace/file-system-provider.d.ts.map +1 -0
- package/lib/langium/workspace/file-system-provider.js +41 -0
- package/lib/langium/workspace/file-system-provider.js.map +1 -0
- package/lib/langium/workspace/hydranium-langium-document-factory.d.ts +45 -0
- package/lib/langium/workspace/hydranium-langium-document-factory.d.ts.map +1 -0
- package/lib/langium/workspace/hydranium-langium-document-factory.js +64 -0
- package/lib/langium/workspace/hydranium-langium-document-factory.js.map +1 -0
- package/lib/langium/workspace/hydranium-workspace-lock.d.ts +31 -0
- package/lib/langium/workspace/hydranium-workspace-lock.d.ts.map +1 -0
- package/lib/langium/workspace/hydranium-workspace-lock.js +33 -0
- package/lib/langium/workspace/hydranium-workspace-lock.js.map +1 -0
- package/lib/langium/workspace/hydranium-workspace-manager.d.ts +232 -0
- package/lib/langium/workspace/hydranium-workspace-manager.d.ts.map +1 -0
- package/lib/langium/workspace/hydranium-workspace-manager.js +368 -0
- package/lib/langium/workspace/hydranium-workspace-manager.js.map +1 -0
- package/lib/langium/workspace/in-memory-file-system-provider.d.ts +127 -0
- package/lib/langium/workspace/in-memory-file-system-provider.d.ts.map +1 -0
- package/lib/langium/workspace/in-memory-file-system-provider.js +195 -0
- package/lib/langium/workspace/in-memory-file-system-provider.js.map +1 -0
- package/lib/langium/workspace/index-manager.d.ts +142 -0
- package/lib/langium/workspace/index-manager.d.ts.map +1 -0
- package/lib/langium/workspace/index-manager.js +245 -0
- package/lib/langium/workspace/index-manager.js.map +1 -0
- package/lib/langium/workspace/index.d.ts +23 -0
- package/lib/langium/workspace/index.d.ts.map +1 -0
- package/lib/langium/workspace/index.js +23 -0
- package/lib/langium/workspace/index.js.map +1 -0
- package/lib/langium/workspace/initialize-workspace.d.ts +63 -0
- package/lib/langium/workspace/initialize-workspace.d.ts.map +1 -0
- package/lib/langium/workspace/initialize-workspace.js +88 -0
- package/lib/langium/workspace/initialize-workspace.js.map +1 -0
- package/lib/langium/workspace/langium-documents.d.ts +47 -0
- package/lib/langium/workspace/langium-documents.d.ts.map +1 -0
- package/lib/langium/workspace/langium-documents.js +85 -0
- package/lib/langium/workspace/langium-documents.js.map +1 -0
- package/lib/langium/workspace/persistent-file-system-provider.d.ts +207 -0
- package/lib/langium/workspace/persistent-file-system-provider.d.ts.map +1 -0
- package/lib/langium/workspace/persistent-file-system-provider.js +208 -0
- package/lib/langium/workspace/persistent-file-system-provider.js.map +1 -0
- package/lib/langium/workspace/synthetic.d.ts +38 -0
- package/lib/langium/workspace/synthetic.d.ts.map +1 -0
- package/lib/langium/workspace/synthetic.js +58 -0
- package/lib/langium/workspace/synthetic.js.map +1 -0
- package/lib/langium/workspace/virtual-document.d.ts +78 -0
- package/lib/langium/workspace/virtual-document.d.ts.map +1 -0
- package/lib/langium/workspace/virtual-document.js +89 -0
- package/lib/langium/workspace/virtual-document.js.map +1 -0
- package/lib/langium/workspace/write-lock-scope.d.ts +69 -0
- package/lib/langium/workspace/write-lock-scope.d.ts.map +1 -0
- package/lib/langium/workspace/write-lock-scope.js +54 -0
- package/lib/langium/workspace/write-lock-scope.js.map +1 -0
- package/lib/launcher/index.d.ts +10 -0
- package/lib/launcher/index.d.ts.map +1 -0
- package/lib/launcher/index.js +12 -0
- package/lib/launcher/index.js.map +1 -0
- package/lib/launcher/integrated-server.d.ts +28 -0
- package/lib/launcher/integrated-server.d.ts.map +1 -0
- package/lib/launcher/integrated-server.js +10 -0
- package/lib/launcher/integrated-server.js.map +1 -0
- package/lib/lsp/completion/hydranium-completion-provider.d.ts +89 -0
- package/lib/lsp/completion/hydranium-completion-provider.d.ts.map +1 -0
- package/lib/lsp/completion/hydranium-completion-provider.js +123 -0
- package/lib/lsp/completion/hydranium-completion-provider.js.map +1 -0
- package/lib/lsp/hydranium-document-update-handler.d.ts +204 -0
- package/lib/lsp/hydranium-document-update-handler.d.ts.map +1 -0
- package/lib/lsp/hydranium-document-update-handler.js +288 -0
- package/lib/lsp/hydranium-document-update-handler.js.map +1 -0
- package/lib/lsp/index.d.ts +23 -0
- package/lib/lsp/index.d.ts.map +1 -0
- package/lib/lsp/index.js +23 -0
- package/lib/lsp/index.js.map +1 -0
- package/lib/lsp/instrument-connection.d.ts +36 -0
- package/lib/lsp/instrument-connection.d.ts.map +1 -0
- package/lib/lsp/instrument-connection.js +62 -0
- package/lib/lsp/instrument-connection.js.map +1 -0
- package/lib/lsp/language-module.d.ts +53 -0
- package/lib/lsp/language-module.d.ts.map +1 -0
- package/lib/lsp/language-module.js +28 -0
- package/lib/lsp/language-module.js.map +1 -0
- package/lib/lsp/semantic-token-provider.d.ts +131 -0
- package/lib/lsp/semantic-token-provider.d.ts.map +1 -0
- package/lib/lsp/semantic-token-provider.js +148 -0
- package/lib/lsp/semantic-token-provider.js.map +1 -0
- package/lib/lsp/shared-module.d.ts +76 -0
- package/lib/lsp/shared-module.d.ts.map +1 -0
- package/lib/lsp/shared-module.js +33 -0
- package/lib/lsp/shared-module.js.map +1 -0
- package/lib/lsp/start-language-server.d.ts +43 -0
- package/lib/lsp/start-language-server.d.ts.map +1 -0
- package/lib/lsp/start-language-server.js +60 -0
- package/lib/lsp/start-language-server.js.map +1 -0
- package/lib/node/ast-ground-truth.d.ts +57 -0
- package/lib/node/ast-ground-truth.d.ts.map +1 -0
- package/lib/node/ast-ground-truth.js +46 -0
- package/lib/node/ast-ground-truth.js.map +1 -0
- package/lib/node/event-loop-monitor.d.ts +40 -0
- package/lib/node/event-loop-monitor.d.ts.map +1 -0
- package/lib/node/event-loop-monitor.js +62 -0
- package/lib/node/event-loop-monitor.js.map +1 -0
- package/lib/node/index.d.ts +29 -0
- package/lib/node/index.d.ts.map +1 -0
- package/lib/node/index.js +50 -0
- package/lib/node/index.js.map +1 -0
- package/lib/node/latency-from-env.d.ts +32 -0
- package/lib/node/latency-from-env.d.ts.map +1 -0
- package/lib/node/latency-from-env.js +36 -0
- package/lib/node/latency-from-env.js.map +1 -0
- package/lib/node/lint-grammar.d.ts +87 -0
- package/lib/node/lint-grammar.d.ts.map +1 -0
- package/lib/node/lint-grammar.js +124 -0
- package/lib/node/lint-grammar.js.map +1 -0
- package/lib/node/log-file-sink.d.ts +22 -0
- package/lib/node/log-file-sink.d.ts.map +1 -0
- package/lib/node/log-file-sink.js +43 -0
- package/lib/node/log-file-sink.js.map +1 -0
- package/lib/node/log-preamble-node.d.ts +28 -0
- package/lib/node/log-preamble-node.d.ts.map +1 -0
- package/lib/node/log-preamble-node.js +55 -0
- package/lib/node/log-preamble-node.js.map +1 -0
- package/lib/node/measure-memory.d.ts +86 -0
- package/lib/node/measure-memory.d.ts.map +1 -0
- package/lib/node/measure-memory.js +128 -0
- package/lib/node/measure-memory.js.map +1 -0
- package/lib/node/memory-monitor.d.ts +42 -0
- package/lib/node/memory-monitor.d.ts.map +1 -0
- package/lib/node/memory-monitor.js +83 -0
- package/lib/node/memory-monitor.js.map +1 -0
- package/lib/node/node-file-system-provider.d.ts +112 -0
- package/lib/node/node-file-system-provider.d.ts.map +1 -0
- package/lib/node/node-file-system-provider.js +230 -0
- package/lib/node/node-file-system-provider.js.map +1 -0
- package/lib/node/process-memory.d.ts +66 -0
- package/lib/node/process-memory.d.ts.map +1 -0
- package/lib/node/process-memory.js +252 -0
- package/lib/node/process-memory.js.map +1 -0
- package/lib/node/profile-capture.d.ts +118 -0
- package/lib/node/profile-capture.d.ts.map +1 -0
- package/lib/node/profile-capture.js +315 -0
- package/lib/node/profile-capture.js.map +1 -0
- package/lib/node/profile-digest.d.ts +49 -0
- package/lib/node/profile-digest.d.ts.map +1 -0
- package/lib/node/profile-digest.js +74 -0
- package/lib/node/profile-digest.js.map +1 -0
- package/lib/node/profiling-run.d.ts +80 -0
- package/lib/node/profiling-run.d.ts.map +1 -0
- package/lib/node/profiling-run.js +183 -0
- package/lib/node/profiling-run.js.map +1 -0
- package/lib/node/reflect-grammar.d.ts +109 -0
- package/lib/node/reflect-grammar.d.ts.map +1 -0
- package/lib/node/reflect-grammar.js +96 -0
- package/lib/node/reflect-grammar.js.map +1 -0
- package/lib/node/server-diagnostics.d.ts +43 -0
- package/lib/node/server-diagnostics.d.ts.map +1 -0
- package/lib/node/server-diagnostics.js +46 -0
- package/lib/node/server-diagnostics.js.map +1 -0
- package/lib/node/server-state-snapshot.d.ts +48 -0
- package/lib/node/server-state-snapshot.d.ts.map +1 -0
- package/lib/node/server-state-snapshot.js +139 -0
- package/lib/node/server-state-snapshot.js.map +1 -0
- package/lib/node/socket-launcher.d.ts +106 -0
- package/lib/node/socket-launcher.d.ts.map +1 -0
- package/lib/node/socket-launcher.js +138 -0
- package/lib/node/socket-launcher.js.map +1 -0
- package/lib/node/stdio-launcher.d.ts +88 -0
- package/lib/node/stdio-launcher.d.ts.map +1 -0
- package/lib/node/stdio-launcher.js +83 -0
- package/lib/node/stdio-launcher.js.map +1 -0
- package/lib/node/validate-workspace.d.ts +80 -0
- package/lib/node/validate-workspace.d.ts.map +1 -0
- package/lib/node/validate-workspace.js +72 -0
- package/lib/node/validate-workspace.js.map +1 -0
- package/lib/node/write-lock-scope-node.d.ts +27 -0
- package/lib/node/write-lock-scope-node.d.ts.map +1 -0
- package/lib/node/write-lock-scope-node.js +38 -0
- package/lib/node/write-lock-scope-node.js.map +1 -0
- package/lib/testing/ast-snapshot.d.ts +38 -0
- package/lib/testing/ast-snapshot.d.ts.map +1 -0
- package/lib/testing/ast-snapshot.js +78 -0
- package/lib/testing/ast-snapshot.js.map +1 -0
- package/lib/testing/document-uri-policy-conformance.d.ts +65 -0
- package/lib/testing/document-uri-policy-conformance.d.ts.map +1 -0
- package/lib/testing/document-uri-policy-conformance.js +69 -0
- package/lib/testing/document-uri-policy-conformance.js.map +1 -0
- package/lib/testing/fake-description.d.ts +35 -0
- package/lib/testing/fake-description.d.ts.map +1 -0
- package/lib/testing/fake-description.js +38 -0
- package/lib/testing/fake-description.js.map +1 -0
- package/lib/testing/fake-document.d.ts +71 -0
- package/lib/testing/fake-document.d.ts.map +1 -0
- package/lib/testing/fake-document.js +85 -0
- package/lib/testing/fake-document.js.map +1 -0
- package/lib/testing/fake-reflection.d.ts +29 -0
- package/lib/testing/fake-reflection.d.ts.map +1 -0
- package/lib/testing/fake-reflection.js +30 -0
- package/lib/testing/fake-reflection.js.map +1 -0
- package/lib/testing/index.d.ts +44 -0
- package/lib/testing/index.d.ts.map +1 -0
- package/lib/testing/index.js +44 -0
- package/lib/testing/index.js.map +1 -0
- package/lib/testing/langium-test-helpers.d.ts +26 -0
- package/lib/testing/langium-test-helpers.d.ts.map +1 -0
- package/lib/testing/langium-test-helpers.js +26 -0
- package/lib/testing/langium-test-helpers.js.map +1 -0
- package/lib/testing/make-noop-language-services.d.ts +39 -0
- package/lib/testing/make-noop-language-services.d.ts.map +1 -0
- package/lib/testing/make-noop-language-services.js +30 -0
- package/lib/testing/make-noop-language-services.js.map +1 -0
- package/lib/testing/make-noop-shared-services.d.ts +61 -0
- package/lib/testing/make-noop-shared-services.d.ts.map +1 -0
- package/lib/testing/make-noop-shared-services.js +49 -0
- package/lib/testing/make-noop-shared-services.js.map +1 -0
- package/lib/testing/make-test-services.d.ts +217 -0
- package/lib/testing/make-test-services.d.ts.map +1 -0
- package/lib/testing/make-test-services.js +128 -0
- package/lib/testing/make-test-services.js.map +1 -0
- package/lib/testing/make-test-tracer.d.ts +67 -0
- package/lib/testing/make-test-tracer.d.ts.map +1 -0
- package/lib/testing/make-test-tracer.js +68 -0
- package/lib/testing/make-test-tracer.js.map +1 -0
- package/lib/testing/node/generated-workspace.d.ts +95 -0
- package/lib/testing/node/generated-workspace.d.ts.map +1 -0
- package/lib/testing/node/generated-workspace.js +134 -0
- package/lib/testing/node/generated-workspace.js.map +1 -0
- package/lib/testing/node/golden-corpus.d.ts +50 -0
- package/lib/testing/node/golden-corpus.d.ts.map +1 -0
- package/lib/testing/node/golden-corpus.js +80 -0
- package/lib/testing/node/golden-corpus.js.map +1 -0
- package/lib/testing/node/index.d.ts +28 -0
- package/lib/testing/node/index.d.ts.map +1 -0
- package/lib/testing/node/index.js +28 -0
- package/lib/testing/node/index.js.map +1 -0
- package/lib/testing/node/lsp-harness.d.ts +139 -0
- package/lib/testing/node/lsp-harness.d.ts.map +1 -0
- package/lib/testing/node/lsp-harness.js +119 -0
- package/lib/testing/node/lsp-harness.js.map +1 -0
- package/lib/testing/node/lsp-server-connection.d.ts +232 -0
- package/lib/testing/node/lsp-server-connection.d.ts.map +1 -0
- package/lib/testing/node/lsp-server-connection.js +304 -0
- package/lib/testing/node/lsp-server-connection.js.map +1 -0
- package/lib/testing/node/scratch-workspace.d.ts +60 -0
- package/lib/testing/node/scratch-workspace.d.ts.map +1 -0
- package/lib/testing/node/scratch-workspace.js +87 -0
- package/lib/testing/node/scratch-workspace.js.map +1 -0
- package/lib/testing/node/spawned-server.d.ts +170 -0
- package/lib/testing/node/spawned-server.d.ts.map +1 -0
- package/lib/testing/node/spawned-server.js +265 -0
- package/lib/testing/node/spawned-server.js.map +1 -0
- package/lib/testing/parse-semantic-root.d.ts +83 -0
- package/lib/testing/parse-semantic-root.d.ts.map +1 -0
- package/lib/testing/parse-semantic-root.js +119 -0
- package/lib/testing/parse-semantic-root.js.map +1 -0
- package/lib/testing/playwright/browser-capture-bridge.d.ts +80 -0
- package/lib/testing/playwright/browser-capture-bridge.d.ts.map +1 -0
- package/lib/testing/playwright/browser-capture-bridge.js +161 -0
- package/lib/testing/playwright/browser-capture-bridge.js.map +1 -0
- package/lib/testing/playwright/e2e-profiling.d.ts +132 -0
- package/lib/testing/playwright/e2e-profiling.d.ts.map +1 -0
- package/lib/testing/playwright/e2e-profiling.js +270 -0
- package/lib/testing/playwright/e2e-profiling.js.map +1 -0
- package/lib/testing/playwright/index.d.ts +13 -0
- package/lib/testing/playwright/index.d.ts.map +1 -0
- package/lib/testing/playwright/index.js +16 -0
- package/lib/testing/playwright/index.js.map +1 -0
- package/lib/testing/playwright/server-log-capture.d.ts +230 -0
- package/lib/testing/playwright/server-log-capture.d.ts.map +1 -0
- package/lib/testing/playwright/server-log-capture.js +336 -0
- package/lib/testing/playwright/server-log-capture.js.map +1 -0
- package/lib/testing/playwright/server-log-fixture.d.ts +36 -0
- package/lib/testing/playwright/server-log-fixture.d.ts.map +1 -0
- package/lib/testing/playwright/server-log-fixture.js +38 -0
- package/lib/testing/playwright/server-log-fixture.js.map +1 -0
- package/lib/testing/playwright/server-log-rename-reporter.d.ts +22 -0
- package/lib/testing/playwright/server-log-rename-reporter.d.ts.map +1 -0
- package/lib/testing/playwright/server-log-rename-reporter.js +26 -0
- package/lib/testing/playwright/server-log-rename-reporter.js.map +1 -0
- package/lib/testing/run-update-pipeline.d.ts +99 -0
- package/lib/testing/run-update-pipeline.d.ts.map +1 -0
- package/lib/testing/run-update-pipeline.js +24 -0
- package/lib/testing/run-update-pipeline.js.map +1 -0
- package/lib/testing/stub-ast-document-manager.d.ts +82 -0
- package/lib/testing/stub-ast-document-manager.d.ts.map +1 -0
- package/lib/testing/stub-ast-document-manager.js +125 -0
- package/lib/testing/stub-ast-document-manager.js.map +1 -0
- package/lib/testing/stub-document-builder.d.ts +99 -0
- package/lib/testing/stub-document-builder.d.ts.map +1 -0
- package/lib/testing/stub-document-builder.js +142 -0
- package/lib/testing/stub-document-builder.js.map +1 -0
- package/lib/testing/stub-hydranium-text-documents.d.ts +125 -0
- package/lib/testing/stub-hydranium-text-documents.d.ts.map +1 -0
- package/lib/testing/stub-hydranium-text-documents.js +164 -0
- package/lib/testing/stub-hydranium-text-documents.js.map +1 -0
- package/lib/testing/stub-index-manager.d.ts +40 -0
- package/lib/testing/stub-index-manager.d.ts.map +1 -0
- package/lib/testing/stub-index-manager.js +38 -0
- package/lib/testing/stub-index-manager.js.map +1 -0
- package/lib/testing/stub-langium-documents.d.ts +53 -0
- package/lib/testing/stub-langium-documents.d.ts.map +1 -0
- package/lib/testing/stub-langium-documents.js +62 -0
- package/lib/testing/stub-langium-documents.js.map +1 -0
- package/lib/testing/stub-model-service.d.ts +31 -0
- package/lib/testing/stub-model-service.d.ts.map +1 -0
- package/lib/testing/stub-model-service.js +45 -0
- package/lib/testing/stub-model-service.js.map +1 -0
- package/lib/testing/stub-project-manager.d.ts +43 -0
- package/lib/testing/stub-project-manager.d.ts.map +1 -0
- package/lib/testing/stub-project-manager.js +125 -0
- package/lib/testing/stub-project-manager.js.map +1 -0
- package/lib/testing/stub-self-save-registry.d.ts +31 -0
- package/lib/testing/stub-self-save-registry.d.ts.map +1 -0
- package/lib/testing/stub-self-save-registry.js +23 -0
- package/lib/testing/stub-self-save-registry.js.map +1 -0
- package/lib/testing/stub-service-registry.d.ts +95 -0
- package/lib/testing/stub-service-registry.d.ts.map +1 -0
- package/lib/testing/stub-service-registry.js +108 -0
- package/lib/testing/stub-service-registry.js.map +1 -0
- package/lib/testing/stub-writable-file-system.d.ts +42 -0
- package/lib/testing/stub-writable-file-system.d.ts.map +1 -0
- package/lib/testing/stub-writable-file-system.js +26 -0
- package/lib/testing/stub-writable-file-system.js.map +1 -0
- package/lib/util/connection-liveness.d.ts +25 -0
- package/lib/util/connection-liveness.d.ts.map +1 -0
- package/lib/util/connection-liveness.js +46 -0
- package/lib/util/connection-liveness.js.map +1 -0
- package/lib/util/environment.d.ts +53 -0
- package/lib/util/environment.d.ts.map +1 -0
- package/lib/util/environment.js +78 -0
- package/lib/util/environment.js.map +1 -0
- package/lib/util/index.d.ts +13 -0
- package/lib/util/index.d.ts.map +1 -0
- package/lib/util/index.js +18 -0
- package/lib/util/index.js.map +1 -0
- package/lib/util/registry.d.ts +88 -0
- package/lib/util/registry.d.ts.map +1 -0
- package/lib/util/registry.js +105 -0
- package/lib/util/registry.js.map +1 -0
- package/package.json +134 -0
- package/src/documents/ast-document-manager.ts +455 -0
- package/src/documents/client-ids.ts +33 -0
- package/src/documents/hydranium-text-documents.ts +1142 -0
- package/src/documents/index.ts +14 -0
- package/src/documents/language-client-text-shadow.ts +175 -0
- package/src/documents/self-save-registry.ts +81 -0
- package/src/index.ts +39 -0
- package/src/langium/ast-extension/ast-extension-contribution.ts +35 -0
- package/src/langium/ast-extension/ast-extension-service.ts +311 -0
- package/src/langium/ast-extension/ast-node-builder.ts +125 -0
- package/src/langium/ast-extension/index.ts +12 -0
- package/src/langium/bootstrap.ts +600 -0
- package/src/langium/build-phase-pass/build-phase-pass-service.ts +141 -0
- package/src/langium/build-phase-pass/build-phase-pass.ts +123 -0
- package/src/langium/build-phase-pass/index.ts +11 -0
- package/src/langium/config/index.ts +10 -0
- package/src/langium/config/settings.ts +353 -0
- package/src/langium/diagnostics/hydranium-langium-profiler.ts +187 -0
- package/src/langium/diagnostics/index.ts +19 -0
- package/src/langium/diagnostics/log-file-token.ts +26 -0
- package/src/langium/diagnostics/log-preamble.ts +87 -0
- package/src/langium/diagnostics/logger.ts +246 -0
- package/src/langium/diagnostics/lsp-logger.ts +277 -0
- package/src/langium/diagnostics/server-tracer.ts +73 -0
- package/src/langium/document-builder/build-pipeline-integration.ts +193 -0
- package/src/langium/document-builder/document-builder.ts +839 -0
- package/src/langium/document-builder/index.ts +12 -0
- package/src/langium/document-builder/labeled-phase-listener.ts +26 -0
- package/src/langium/documentation/comment-provider.ts +37 -0
- package/src/langium/documentation/index.ts +10 -0
- package/src/langium/integration-services.ts +281 -0
- package/src/langium/integrity/index.ts +12 -0
- package/src/langium/integrity/integrity-contribution.ts +44 -0
- package/src/langium/integrity/integrity-rule.ts +100 -0
- package/src/langium/integrity/integrity-service.ts +423 -0
- package/src/langium/keys/default-element-key-provider.ts +20 -0
- package/src/langium/keys/element-key-provider.ts +114 -0
- package/src/langium/keys/index.ts +13 -0
- package/src/langium/keys/name-based-key-provider.ts +146 -0
- package/src/langium/keys/positional-key-provider.ts +57 -0
- package/src/langium/labeling/index.ts +10 -0
- package/src/langium/labeling/label-provider.ts +110 -0
- package/src/langium/language-module.ts +367 -0
- package/src/langium/language-types.ts +214 -0
- package/src/langium/model-service/index.ts +10 -0
- package/src/langium/model-service/model-service.ts +1051 -0
- package/src/langium/module.ts +446 -0
- package/src/langium/naming/index.ts +11 -0
- package/src/langium/naming/name-provider.ts +533 -0
- package/src/langium/naming/name-separator-validation.ts +73 -0
- package/src/langium/project/abstract-project-manager.ts +630 -0
- package/src/langium/project/index.ts +13 -0
- package/src/langium/project/project-change-event.ts +66 -0
- package/src/langium/project/project-manager.ts +221 -0
- package/src/langium/project/single-project-manager.ts +126 -0
- package/src/langium/residency/cst-residency-service.ts +412 -0
- package/src/langium/residency/index.ts +10 -0
- package/src/langium/scope/ast-node-description-provider.ts +141 -0
- package/src/langium/scope/hydranium-scope-computation.ts +246 -0
- package/src/langium/scope/hydranium-scope-provider.ts +659 -0
- package/src/langium/scope/index.ts +18 -0
- package/src/langium/scope/reference-builder.ts +194 -0
- package/src/langium/scope/reference-candidate-provider.ts +314 -0
- package/src/langium/scope/scope-extension-contribution.ts +34 -0
- package/src/langium/scope/scope-extension-service.ts +207 -0
- package/src/langium/scope/scoped-ast-node-description.ts +174 -0
- package/src/langium/scope/tier-specificity.ts +89 -0
- package/src/langium/serialization/abstract-serializer.ts +474 -0
- package/src/langium/serialization/index.ts +14 -0
- package/src/langium/serialization/json-serializer.ts +264 -0
- package/src/langium/serialization/serialization-util.ts +40 -0
- package/src/langium/serialization/serializer.ts +68 -0
- package/src/langium/serialization/yaml-serializer.ts +348 -0
- package/src/langium/service-registry.ts +323 -0
- package/src/langium/shared-services.ts +107 -0
- package/src/langium/transfer/index.ts +10 -0
- package/src/langium/transfer/transfer-encoder.ts +434 -0
- package/src/langium/update-rewrite/index.ts +14 -0
- package/src/langium/update-rewrite/normalize-empty-strings.ts +86 -0
- package/src/langium/update-rewrite/semantic-root-rewrite.ts +57 -0
- package/src/langium/update-rewrite/update-rewrite-contribution.ts +44 -0
- package/src/langium/update-rewrite/update-rewrite-service.ts +129 -0
- package/src/langium/update-rewrite/update-rewrite.ts +60 -0
- package/src/langium/validation/document-validator.ts +188 -0
- package/src/langium/validation/index.ts +12 -0
- package/src/langium/validation/validation-contribution-collector.ts +61 -0
- package/src/langium/validation/validation-contribution.ts +38 -0
- package/src/langium/workspace/additional-document-contribution.ts +80 -0
- package/src/langium/workspace/document-uri-policy.ts +187 -0
- package/src/langium/workspace/file-system-provider.ts +52 -0
- package/src/langium/workspace/hydranium-langium-document-factory.ts +78 -0
- package/src/langium/workspace/hydranium-workspace-lock.ts +35 -0
- package/src/langium/workspace/hydranium-workspace-manager.ts +412 -0
- package/src/langium/workspace/in-memory-file-system-provider.ts +241 -0
- package/src/langium/workspace/index-manager.ts +266 -0
- package/src/langium/workspace/index.ts +23 -0
- package/src/langium/workspace/initialize-workspace.ts +102 -0
- package/src/langium/workspace/langium-documents.ts +94 -0
- package/src/langium/workspace/persistent-file-system-provider.ts +287 -0
- package/src/langium/workspace/synthetic.ts +63 -0
- package/src/langium/workspace/virtual-document.ts +94 -0
- package/src/langium/workspace/write-lock-scope.ts +88 -0
- package/src/launcher/index.ts +12 -0
- package/src/launcher/integrated-server.ts +28 -0
- package/src/lsp/completion/hydranium-completion-provider.ts +132 -0
- package/src/lsp/hydranium-document-update-handler.ts +345 -0
- package/src/lsp/index.ts +24 -0
- package/src/lsp/instrument-connection.ts +66 -0
- package/src/lsp/language-module.ts +64 -0
- package/src/lsp/semantic-token-provider.ts +215 -0
- package/src/lsp/shared-module.ts +88 -0
- package/src/lsp/start-language-server.ts +68 -0
- package/src/node/ast-ground-truth.ts +76 -0
- package/src/node/event-loop-monitor.ts +89 -0
- package/src/node/index.ts +53 -0
- package/src/node/latency-from-env.ts +39 -0
- package/src/node/lint-grammar.ts +189 -0
- package/src/node/log-file-sink.ts +43 -0
- package/src/node/log-preamble-node.ts +63 -0
- package/src/node/measure-memory.ts +196 -0
- package/src/node/memory-monitor.ts +103 -0
- package/src/node/node-file-system-provider.ts +252 -0
- package/src/node/process-memory.ts +299 -0
- package/src/node/profile-capture.ts +377 -0
- package/src/node/profile-digest.ts +112 -0
- package/src/node/profiling-run.ts +236 -0
- package/src/node/reflect-grammar.ts +182 -0
- package/src/node/server-diagnostics.ts +63 -0
- package/src/node/server-state-snapshot.ts +192 -0
- package/src/node/socket-launcher.ts +210 -0
- package/src/node/stdio-launcher.ts +150 -0
- package/src/node/validate-workspace.ts +133 -0
- package/src/node/write-lock-scope-node.ts +41 -0
- package/src/testing/ast-snapshot.ts +88 -0
- package/src/testing/document-uri-policy-conformance.ts +104 -0
- package/src/testing/fake-description.ts +52 -0
- package/src/testing/fake-document.ts +120 -0
- package/src/testing/fake-reflection.ts +39 -0
- package/src/testing/index.ts +45 -0
- package/src/testing/langium-test-helpers.ts +26 -0
- package/src/testing/make-noop-language-services.ts +47 -0
- package/src/testing/make-noop-shared-services.ts +78 -0
- package/src/testing/make-test-services.ts +356 -0
- package/src/testing/make-test-tracer.ts +92 -0
- package/src/testing/node/generated-workspace.ts +222 -0
- package/src/testing/node/golden-corpus.ts +114 -0
- package/src/testing/node/index.ts +29 -0
- package/src/testing/node/lsp-harness.ts +230 -0
- package/src/testing/node/lsp-server-connection.ts +575 -0
- package/src/testing/node/scratch-workspace.ts +137 -0
- package/src/testing/node/spawned-server.ts +447 -0
- package/src/testing/parse-semantic-root.ts +150 -0
- package/src/testing/playwright/browser-capture-bridge.ts +258 -0
- package/src/testing/playwright/e2e-profiling.ts +362 -0
- package/src/testing/playwright/index.ts +16 -0
- package/src/testing/playwright/server-log-capture.ts +433 -0
- package/src/testing/playwright/server-log-fixture.ts +57 -0
- package/src/testing/playwright/server-log-rename-reporter.ts +29 -0
- package/src/testing/run-update-pipeline.ts +113 -0
- package/src/testing/stub-ast-document-manager.ts +224 -0
- package/src/testing/stub-document-builder.ts +242 -0
- package/src/testing/stub-hydranium-text-documents.ts +270 -0
- package/src/testing/stub-index-manager.ts +79 -0
- package/src/testing/stub-langium-documents.ts +104 -0
- package/src/testing/stub-model-service.ts +72 -0
- package/src/testing/stub-project-manager.ts +161 -0
- package/src/testing/stub-self-save-registry.ts +43 -0
- package/src/testing/stub-service-registry.ts +192 -0
- package/src/testing/stub-writable-file-system.ts +58 -0
- package/src/util/connection-liveness.ts +47 -0
- package/src/util/environment.ts +88 -0
- package/src/util/index.ts +18 -0
- package/src/util/registry.ts +129 -0
|
@@ -0,0 +1,600 @@
|
|
|
1
|
+
/********************************************************************************
|
|
2
|
+
* Copyright (c) 2026 CrossBreeze, EclipseSource and others.
|
|
3
|
+
*
|
|
4
|
+
* This program and the accompanying materials are made available under the
|
|
5
|
+
* terms of the MIT License which is available in the project root.
|
|
6
|
+
*
|
|
7
|
+
* SPDX-License-Identifier: MIT
|
|
8
|
+
********************************************************************************/
|
|
9
|
+
|
|
10
|
+
import { type Logger } from '@hydranium/protocol';
|
|
11
|
+
import { type LangiumSharedCoreServices } from '@hydranium/langium';
|
|
12
|
+
import { type LangiumServices, type LangiumSharedServices } from '@hydranium/langium/lsp';
|
|
13
|
+
import type { ServerSharedServicesMinimal } from './shared-services.js';
|
|
14
|
+
import { collectProducibleTypes } from './language-types.js';
|
|
15
|
+
import { AstDocumentManager } from '../documents/ast-document-manager.js';
|
|
16
|
+
import { HydraniumTextDocuments } from '../documents/hydranium-text-documents.js';
|
|
17
|
+
import { BuildPipelineIntegration } from './document-builder/build-pipeline-integration.js';
|
|
18
|
+
import { HydraniumDocumentBuilder } from './document-builder/document-builder.js';
|
|
19
|
+
import { ModelService } from './model-service/model-service.js';
|
|
20
|
+
import { HydraniumScopeComputation } from './scope/hydranium-scope-computation.js';
|
|
21
|
+
import { HydraniumScopeProvider } from './scope/hydranium-scope-provider.js';
|
|
22
|
+
import { processEnv } from '../util/environment.js';
|
|
23
|
+
import { TransferEncoder } from './transfer/transfer-encoder.js';
|
|
24
|
+
import { HydraniumWorkspaceManager } from './workspace/hydranium-workspace-manager.js';
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Side: which side of the DI tree a missing slot lives on. Drives the
|
|
28
|
+
* teaching error message — `shared` slots are bound by
|
|
29
|
+
* `createServerSharedModule`, `services` slots by
|
|
30
|
+
* `createServerLanguageModule`.
|
|
31
|
+
*/
|
|
32
|
+
type Side = 'shared' | 'services';
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* A slot the framework expects to be bound after composition. The `get`
|
|
36
|
+
* callback walks an opaque services object (typed loosely on purpose,
|
|
37
|
+
* since the assertion exists precisely to detect missing properties)
|
|
38
|
+
* and returns `undefined` when the slot was never bound.
|
|
39
|
+
*/
|
|
40
|
+
interface ExpectedSlot {
|
|
41
|
+
side: Side;
|
|
42
|
+
path: string;
|
|
43
|
+
get: (services: Record<string, unknown>) => unknown;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
function nested(services: Record<string, unknown>, ...keys: readonly string[]): unknown {
|
|
47
|
+
let current: unknown = services;
|
|
48
|
+
for (const key of keys) {
|
|
49
|
+
if (current === null || typeof current !== 'object') {
|
|
50
|
+
return undefined;
|
|
51
|
+
}
|
|
52
|
+
current = (current as Record<string, unknown>)[key];
|
|
53
|
+
}
|
|
54
|
+
return current;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* Shared-side slots bound by `createServerSharedModule`. If any of
|
|
59
|
+
* these is missing after composition, the most likely cause is that the
|
|
60
|
+
* factory was omitted from the consumer's `inject(...)` of the shared
|
|
61
|
+
* tree (or merged in the wrong order — modules layered after the
|
|
62
|
+
* `@hydranium/core` factory can override these slots back to `undefined`).
|
|
63
|
+
*/
|
|
64
|
+
const EXPECTED_SHARED_SLOTS: readonly ExpectedSlot[] = [
|
|
65
|
+
{ side: 'shared', path: 'Logger', get: services => nested(services, 'Logger') },
|
|
66
|
+
{ side: 'shared', path: 'lsp.configurationRoot', get: services => nested(services, 'lsp', 'configurationRoot') },
|
|
67
|
+
{ side: 'shared', path: 'workspace.WorkspaceManager', get: services => nested(services, 'workspace', 'WorkspaceManager') },
|
|
68
|
+
{ side: 'shared', path: 'workspace.ProjectManager', get: services => nested(services, 'workspace', 'ProjectManager') },
|
|
69
|
+
{ side: 'shared', path: 'workspace.SelfSaveRegistry', get: services => nested(services, 'workspace', 'SelfSaveRegistry') },
|
|
70
|
+
{ side: 'shared', path: 'workspace.TextDocuments', get: services => nested(services, 'workspace', 'TextDocuments') },
|
|
71
|
+
{ side: 'shared', path: 'workspace.AstDocumentManager', get: services => nested(services, 'workspace', 'AstDocumentManager') },
|
|
72
|
+
{
|
|
73
|
+
side: 'shared',
|
|
74
|
+
path: 'workspace.BuildPipelineIntegration',
|
|
75
|
+
get: services => nested(services, 'workspace', 'BuildPipelineIntegration')
|
|
76
|
+
}
|
|
77
|
+
];
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* Language-side slots bound by `createServerLanguageModule`. If any
|
|
81
|
+
* is missing the consumer most likely forgot to compose the
|
|
82
|
+
* `@hydranium/core` language factory into their `inject(...)` of the
|
|
83
|
+
* language tree.
|
|
84
|
+
*/
|
|
85
|
+
const EXPECTED_LANGUAGE_SLOTS: readonly ExpectedSlot[] = [
|
|
86
|
+
{ side: 'services', path: 'references.ScopeComputation', get: services => nested(services, 'references', 'ScopeComputation') },
|
|
87
|
+
{ side: 'services', path: 'references.ScopeProvider', get: services => nested(services, 'references', 'ScopeProvider') },
|
|
88
|
+
{ side: 'services', path: 'references.ElementKeyProvider', get: services => nested(services, 'references', 'ElementKeyProvider') },
|
|
89
|
+
{ side: 'services', path: 'references.NameProvider', get: services => nested(services, 'references', 'NameProvider') },
|
|
90
|
+
{ side: 'services', path: 'serializer.Serializer', get: services => nested(services, 'serializer', 'Serializer') }
|
|
91
|
+
];
|
|
92
|
+
|
|
93
|
+
const COMPOSITION_HINT = `Expected composition order:
|
|
94
|
+
|
|
95
|
+
const shared = inject(
|
|
96
|
+
createDefaultSharedModule(ctx),
|
|
97
|
+
YourGeneratedSharedModule,
|
|
98
|
+
createServerSharedModule(ctx), // <-- required, head-neutral base
|
|
99
|
+
createLspServerSharedModule(ctx), // optional protocol head
|
|
100
|
+
YourSharedOverridesModule
|
|
101
|
+
);
|
|
102
|
+
|
|
103
|
+
const language = inject(
|
|
104
|
+
createDefaultModule({ shared }),
|
|
105
|
+
YourGeneratedModule,
|
|
106
|
+
createServerLanguageModule(ctx), // <-- required, head-neutral base
|
|
107
|
+
createLspServerLanguageModule(ctx), // optional protocol head
|
|
108
|
+
YourLanguageOverridesModule
|
|
109
|
+
);
|
|
110
|
+
|
|
111
|
+
Each protocol head (lsp-server, data-server, glsp-server) builds on the
|
|
112
|
+
\`@hydranium/core\` modules above; they must be composed BEFORE
|
|
113
|
+
any head module so head bindings override (later-wins).`;
|
|
114
|
+
|
|
115
|
+
function buildMessage(slot: ExpectedSlot): string {
|
|
116
|
+
const factory = slot.side === 'shared' ? 'createServerSharedModule(ctx)' : 'createServerLanguageModule(ctx)';
|
|
117
|
+
return `[hydranium] Expected \`${slot.side}.${slot.path}\` to be bound, but it returned undefined.
|
|
118
|
+
|
|
119
|
+
Most likely cause: \`${factory}\` was not included in your \`inject(...)\` composition, or another module merged after it cleared the slot.
|
|
120
|
+
|
|
121
|
+
${COMPOSITION_HINT}`;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
/**
|
|
125
|
+
* Verify that the slots `@hydranium/core` is responsible for
|
|
126
|
+
* binding are populated after composition. Throws an error with a
|
|
127
|
+
* teaching message naming the missing slot and the most likely cause.
|
|
128
|
+
*
|
|
129
|
+
* Invoked from {@link bootstrapLangium}; consumers don't normally call
|
|
130
|
+
* this directly. Exported so framework integration tests can pin the
|
|
131
|
+
* error-message contract.
|
|
132
|
+
*
|
|
133
|
+
* Why a runtime check on top of TypeScript: in practice the consumer
|
|
134
|
+
* pattern `inject(...) as MyServices` widens away the composition shape
|
|
135
|
+
* — a missing module compiles but produces a half-bound services tree.
|
|
136
|
+
* The first failure surfaces deep inside Langium with a stack pointing
|
|
137
|
+
* at an unrelated slot. This assertion fails fast at bootstrap with a
|
|
138
|
+
* message that points at the actual cause and the fix.
|
|
139
|
+
*/
|
|
140
|
+
export function assertCoreSlotsBound(shared: LangiumSharedServices, language: LangiumServices): void {
|
|
141
|
+
const sharedTree = shared as unknown as Record<string, unknown>;
|
|
142
|
+
const languageTree = language as unknown as Record<string, unknown>;
|
|
143
|
+
for (const slot of EXPECTED_SHARED_SLOTS) {
|
|
144
|
+
if (slot.get(sharedTree) === undefined) {
|
|
145
|
+
throw new Error(buildMessage(slot));
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
for (const slot of EXPECTED_LANGUAGE_SLOTS) {
|
|
149
|
+
if (slot.get(languageTree) === undefined) {
|
|
150
|
+
throw new Error(buildMessage(slot));
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
/**
|
|
156
|
+
* Environment variable that opts into the strict-binding diagnostic. Set
|
|
157
|
+
* to `1` / `true` / `yes` / `on` to enable; unset (the default) skips the
|
|
158
|
+
* check entirely. Off by default because it is a development aid, not a
|
|
159
|
+
* production gate.
|
|
160
|
+
*/
|
|
161
|
+
export const STRICT_BINDINGS_ENV = 'HYDRANIUM_STRICT_BINDINGS';
|
|
162
|
+
|
|
163
|
+
/** Constructor usable as the right-hand side of `instanceof`. */
|
|
164
|
+
type Constructor = new (...args: never[]) => object;
|
|
165
|
+
|
|
166
|
+
/**
|
|
167
|
+
* A framework slot whose bound value is expected to be an instance of a
|
|
168
|
+
* specific framework base class (the framework's behaviour for that slot
|
|
169
|
+
* lives in the base). Distinct from {@link ExpectedSlot}, which only
|
|
170
|
+
* checks the slot is bound at all: this checks the bound value actually
|
|
171
|
+
* extends the framework base. Only slots with a single behaviour-bearing
|
|
172
|
+
* base class are listed — interface slots with legitimate independent
|
|
173
|
+
* implementations (`Logger`, `references.ElementKeyProvider`,
|
|
174
|
+
* `serializer.Serializer`, `lsp.configurationRoot`) are deliberately
|
|
175
|
+
* omitted, since an `instanceof` check there would false-positive on a
|
|
176
|
+
* valid binding.
|
|
177
|
+
*/
|
|
178
|
+
interface StrictSlot {
|
|
179
|
+
side: Side;
|
|
180
|
+
path: string;
|
|
181
|
+
base: Constructor;
|
|
182
|
+
get: (services: Record<string, unknown>) => unknown;
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
const STRICT_SHARED_SLOTS: readonly StrictSlot[] = [
|
|
186
|
+
{ side: 'shared', path: 'workspace.TextDocuments', base: HydraniumTextDocuments, get: s => nested(s, 'workspace', 'TextDocuments') },
|
|
187
|
+
{
|
|
188
|
+
side: 'shared',
|
|
189
|
+
path: 'workspace.WorkspaceManager',
|
|
190
|
+
base: HydraniumWorkspaceManager,
|
|
191
|
+
get: s => nested(s, 'workspace', 'WorkspaceManager')
|
|
192
|
+
},
|
|
193
|
+
{
|
|
194
|
+
side: 'shared',
|
|
195
|
+
path: 'workspace.DocumentBuilder',
|
|
196
|
+
base: HydraniumDocumentBuilder,
|
|
197
|
+
get: s => nested(s, 'workspace', 'DocumentBuilder')
|
|
198
|
+
},
|
|
199
|
+
{
|
|
200
|
+
side: 'shared',
|
|
201
|
+
path: 'workspace.AstDocumentManager',
|
|
202
|
+
base: AstDocumentManager,
|
|
203
|
+
get: s => nested(s, 'workspace', 'AstDocumentManager')
|
|
204
|
+
},
|
|
205
|
+
{
|
|
206
|
+
side: 'shared',
|
|
207
|
+
path: 'workspace.BuildPipelineIntegration',
|
|
208
|
+
base: BuildPipelineIntegration,
|
|
209
|
+
get: s => nested(s, 'workspace', 'BuildPipelineIntegration')
|
|
210
|
+
},
|
|
211
|
+
{ side: 'shared', path: 'model.TransferEncoder', base: TransferEncoder, get: s => nested(s, 'model', 'TransferEncoder') },
|
|
212
|
+
{ side: 'shared', path: 'model.ModelService', base: ModelService, get: s => nested(s, 'model', 'ModelService') }
|
|
213
|
+
];
|
|
214
|
+
|
|
215
|
+
const STRICT_LANGUAGE_SLOTS: readonly StrictSlot[] = [
|
|
216
|
+
{
|
|
217
|
+
side: 'services',
|
|
218
|
+
path: 'references.ScopeComputation',
|
|
219
|
+
base: HydraniumScopeComputation,
|
|
220
|
+
get: s => nested(s, 'references', 'ScopeComputation')
|
|
221
|
+
},
|
|
222
|
+
{ side: 'services', path: 'references.ScopeProvider', base: HydraniumScopeProvider, get: s => nested(s, 'references', 'ScopeProvider') }
|
|
223
|
+
];
|
|
224
|
+
|
|
225
|
+
function strictBindingsEnabled(): boolean {
|
|
226
|
+
const value = processEnv()?.[STRICT_BINDINGS_ENV]?.toLowerCase();
|
|
227
|
+
return value === '1' || value === 'true' || value === 'yes' || value === 'on';
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
function warnLooseSlot(logger: Logger | undefined, slot: StrictSlot, actual: object): void {
|
|
231
|
+
const actualName = actual.constructor?.name ?? '<anonymous>';
|
|
232
|
+
const message =
|
|
233
|
+
`[hydranium] Strict bindings: \`${slot.side}.${slot.path}\` is bound to \`${actualName}\`, ` +
|
|
234
|
+
`which does not extend the framework base \`${slot.base.name}\` — framework behaviour on ` +
|
|
235
|
+
`this slot is silently lost. Bind a subclass of \`${slot.base.name}\`, or unset ` +
|
|
236
|
+
`\`${STRICT_BINDINGS_ENV}\` to silence.`;
|
|
237
|
+
if (logger) {
|
|
238
|
+
logger.warn(message);
|
|
239
|
+
} else {
|
|
240
|
+
console.warn(message);
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
/**
|
|
245
|
+
* Opt-in diagnostic (gated by {@link STRICT_BINDINGS_ENV}): warn when a
|
|
246
|
+
* framework slot is bound to a value that does NOT extend the framework
|
|
247
|
+
* base class for that slot. Langium DI is structural, so such a binding
|
|
248
|
+
* compiles and runs but silently drops the framework behaviour the base
|
|
249
|
+
* carries (e.g. a `ScopeComputation` not extending
|
|
250
|
+
* {@link HydraniumScopeComputation} loses tier-aware export). Warns, never
|
|
251
|
+
* throws — safe to leave enabled in a dev/test run; a no-op unless the env
|
|
252
|
+
* var is set.
|
|
253
|
+
*
|
|
254
|
+
* Invoked from {@link bootstrapLangium} after {@link assertCoreSlotsBound}.
|
|
255
|
+
* Exported so framework integration tests can pin the warning contract.
|
|
256
|
+
*/
|
|
257
|
+
export function warnOnUnexpectedBindings(shared: LangiumSharedServices, language: LangiumServices): void {
|
|
258
|
+
if (!strictBindingsEnabled()) {
|
|
259
|
+
return;
|
|
260
|
+
}
|
|
261
|
+
const sharedTree = shared as unknown as Record<string, unknown>;
|
|
262
|
+
const languageTree = language as unknown as Record<string, unknown>;
|
|
263
|
+
const logger = nested(sharedTree, 'Logger') as Logger | undefined;
|
|
264
|
+
const check = (tree: Record<string, unknown>, slots: readonly StrictSlot[]): void => {
|
|
265
|
+
for (const slot of slots) {
|
|
266
|
+
const value = slot.get(tree);
|
|
267
|
+
if (typeof value === 'object' && value !== null && !(value instanceof slot.base)) {
|
|
268
|
+
warnLooseSlot(logger, slot, value);
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
};
|
|
272
|
+
check(sharedTree, STRICT_SHARED_SLOTS);
|
|
273
|
+
check(languageTree, STRICT_LANGUAGE_SLOTS);
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
/**
|
|
277
|
+
* Default eager-construction list for {@link bootstrapLangium}. Contains
|
|
278
|
+
* the framework services whose constructors attach to the build pipeline —
|
|
279
|
+
* either as a direct `documentBuilder` listener or as a
|
|
280
|
+
* `BuildPhasePassService` pass — and which therefore must be instantiated
|
|
281
|
+
* before the first build cycle:
|
|
282
|
+
*
|
|
283
|
+
* - **`workspace.ProjectManager`** — subscribes to
|
|
284
|
+
* `documentBuilder.onUpdate` to track descriptor file changes.
|
|
285
|
+
* - **`workspace.BuildPipelineIntegration`** — registers the
|
|
286
|
+
* `documentBuilder.onBuildPhase` / `onDocumentPhase` listeners that
|
|
287
|
+
* dispatch every build-phase pass and drive AST enrichment, and
|
|
288
|
+
* registers the framework integrity passes itself. The per-language
|
|
289
|
+
* feature services it routes to (`ast.AstExtensionService` +
|
|
290
|
+
* `integrity.IntegrityService`, plus `references.ScopeExtensionService`
|
|
291
|
+
* read by the scope provider) hold the registries and the logic but own
|
|
292
|
+
* no listeners, so they need not be eager: each language's services
|
|
293
|
+
* construct lazily when the orchestrator (or scope provider) first
|
|
294
|
+
* reaches them, and their constructors register that language's rules /
|
|
295
|
+
* extensions just-in-time.
|
|
296
|
+
* - **`profilers.LangiumProfiler`** — self-registers a `Validated`
|
|
297
|
+
* BuildPhasePass that flushes the aggregated parse/link/validate profile
|
|
298
|
+
* once per build. No production cost (the profiler is trace-gated), but
|
|
299
|
+
* the pass must be registered up front.
|
|
300
|
+
* - **`workspace.CstResidencyService`** — self-registers a `Validated`
|
|
301
|
+
* BuildPhasePass that sheds the CST of closed documents. The framework
|
|
302
|
+
* default strategy is `always-keep`, so the pass runs but sheds nothing
|
|
303
|
+
* until an adopter configures a shedding strategy.
|
|
304
|
+
*
|
|
305
|
+
* Consumers with no additional eager targets can omit the third argument
|
|
306
|
+
* to {@link bootstrapLangium} — the parameter default is this exact set.
|
|
307
|
+
* Adopters needing extra eager targets spread this constant into their own
|
|
308
|
+
* array and append their accessors.
|
|
309
|
+
*/
|
|
310
|
+
export const DEFAULT_EAGER_SERVICES: ReadonlyArray<(services: ServerSharedServicesMinimal) => unknown> = [
|
|
311
|
+
services => services.workspace.ProjectManager,
|
|
312
|
+
services => services.workspace.BuildPipelineIntegration,
|
|
313
|
+
services => services.profilers.LangiumProfiler,
|
|
314
|
+
services => services.workspace.CstResidencyService
|
|
315
|
+
];
|
|
316
|
+
|
|
317
|
+
/**
|
|
318
|
+
* After `inject(...)` returns, services are constructed lazily on first
|
|
319
|
+
* access. Some framework services attach to the build pipeline in their
|
|
320
|
+
* constructors — a `documentBuilder.onUpdate` / `onDocumentPhase` /
|
|
321
|
+
* `onBuildPhase` listener, or a build-phase pass — and that attachment
|
|
322
|
+
* has to happen **before** the first build runs, so those services must
|
|
323
|
+
* be constructed eagerly during bootstrap.
|
|
324
|
+
*
|
|
325
|
+
* Defaults to {@link DEFAULT_EAGER_SERVICES} when no list is supplied,
|
|
326
|
+
* which covers every framework service that needs it. Consumers with
|
|
327
|
+
* additional eager targets spread the default into their own list.
|
|
328
|
+
* Accessors are invoked in array order and their return values are
|
|
329
|
+
* discarded.
|
|
330
|
+
*
|
|
331
|
+
* Bootstrap responsibilities, in order:
|
|
332
|
+
* 1. Hand the shared services to `shared.ServiceRegistry` if it accepts
|
|
333
|
+
* them after construction, so Langium's declared-languageId lookup
|
|
334
|
+
* rung works however the adopter's registry binding was built.
|
|
335
|
+
* 2. {@link assertDistinctFileRouting} — before registration, because
|
|
336
|
+
* `register` resolves a routing collision by last-wins and afterwards
|
|
337
|
+
* the evidence is gone.
|
|
338
|
+
* 3. Register `language` against `shared.ServiceRegistry`, the
|
|
339
|
+
* required final step of any Langium DI bootstrap. Done before slot
|
|
340
|
+
* validation so subclassed registries (typed-accessor extensions)
|
|
341
|
+
* populate any side state before validation walks construct services
|
|
342
|
+
* that read from the registry.
|
|
343
|
+
* 4. {@link assertCoreSlotsBound} — fail fast if the consumer's
|
|
344
|
+
* `inject(...)` composition is missing a `@hydranium/core` module. May
|
|
345
|
+
* trigger lazy service construction as side effect of walking the
|
|
346
|
+
* slots; that construction expects a populated `ServiceRegistry`,
|
|
347
|
+
* hence the order.
|
|
348
|
+
* 5. {@link warnOnUnexpectedBindings} — opt-in (gated by
|
|
349
|
+
* {@link STRICT_BINDINGS_ENV}); warns when a framework slot is bound
|
|
350
|
+
* to a non-subclass of its framework base. No-op unless the env is set.
|
|
351
|
+
* 6. {@link assertReflectionCoversLanguages} — catch a clobbered shared
|
|
352
|
+
* `AstReflection` before it starts silently answering `isSubtype`
|
|
353
|
+
* false for a registered language's types. Skipped here, since a lone
|
|
354
|
+
* language has no sibling that could clobber it.
|
|
355
|
+
* 7. Invoke eager-construction accessors in array order.
|
|
356
|
+
*
|
|
357
|
+
* Multi-grammar adopters use {@link bootstrapLangiumLanguages}, which
|
|
358
|
+
* registers every language before validating slots or constructing the
|
|
359
|
+
* eager set.
|
|
360
|
+
*/
|
|
361
|
+
export function bootstrapLangium<TShared extends LangiumSharedServices & ServerSharedServicesMinimal, TLang extends LangiumServices>(
|
|
362
|
+
shared: TShared,
|
|
363
|
+
language: TLang,
|
|
364
|
+
eagerlyConstructedServices: ReadonlyArray<(services: TShared) => unknown> = DEFAULT_EAGER_SERVICES
|
|
365
|
+
): { shared: TShared; language: TLang } {
|
|
366
|
+
bootstrapLangiumLanguages(shared, [language], eagerlyConstructedServices);
|
|
367
|
+
return { shared, language };
|
|
368
|
+
}
|
|
369
|
+
|
|
370
|
+
/**
|
|
371
|
+
* Multi-language form of {@link bootstrapLangium}: bootstraps several
|
|
372
|
+
* languages that share ONE shared-services tier, as a multi-grammar adopter
|
|
373
|
+
* needs when its grammars cross-reference each other through the shared
|
|
374
|
+
* index.
|
|
375
|
+
*
|
|
376
|
+
* Same responsibilities as the single-language form, but the phase
|
|
377
|
+
* ORDER across languages is what makes this a distinct function rather
|
|
378
|
+
* than a loop the caller could write:
|
|
379
|
+
*
|
|
380
|
+
* 1. **Every** language is registered against `shared.ServiceRegistry`
|
|
381
|
+
* first. Slot validation and eager construction both build services
|
|
382
|
+
* that read the registry — a per-language
|
|
383
|
+
* register-then-validate-then-eager loop would run them while later
|
|
384
|
+
* languages were still missing, so a shared service that walks
|
|
385
|
+
* `ServiceRegistry.all` (or resolves by extension) would see a
|
|
386
|
+
* half-populated registry and cache the wrong answer.
|
|
387
|
+
* 2. `assertCoreSlotsBound` / `warnOnUnexpectedBindings` per language —
|
|
388
|
+
* each language composes its own module chain, so each is checked.
|
|
389
|
+
* 3. Eager accessors run **once**, after all registrations. They take
|
|
390
|
+
* the shared tier, and the framework's eager set is shared-tier only
|
|
391
|
+
* (`ProjectManager`, `BuildPipelineIntegration`, `LangiumProfiler`,
|
|
392
|
+
* `CstResidencyService`) — `BuildPipelineIntegration` in particular
|
|
393
|
+
* routes per document URI to each language's `IntegrityService` /
|
|
394
|
+
* `AstExtensionService`, so it must be constructed knowing all of
|
|
395
|
+
* them. Running the set per language would attach its
|
|
396
|
+
* `documentBuilder` listeners N times and enforce each phase N times.
|
|
397
|
+
*
|
|
398
|
+
* Throws when `languages` is empty: a shared tier with no registered
|
|
399
|
+
* language never validates its slots, which silently defers a
|
|
400
|
+
* composition error to the first build.
|
|
401
|
+
*/
|
|
402
|
+
export function bootstrapLangiumLanguages<
|
|
403
|
+
TShared extends LangiumSharedServices & ServerSharedServicesMinimal,
|
|
404
|
+
TLang extends LangiumServices
|
|
405
|
+
>(
|
|
406
|
+
shared: TShared,
|
|
407
|
+
languages: ReadonlyArray<TLang>,
|
|
408
|
+
eagerlyConstructedServices: ReadonlyArray<(services: TShared) => unknown> = DEFAULT_EAGER_SERVICES
|
|
409
|
+
): { shared: TShared; languages: ReadonlyArray<TLang> } {
|
|
410
|
+
if (languages.length === 0) {
|
|
411
|
+
throw new Error(
|
|
412
|
+
'[hydranium] bootstrapLangiumLanguages requires at least one language — a shared tier with no ' +
|
|
413
|
+
'registered language cannot validate its slots. Pass the language(s) produced by your ' +
|
|
414
|
+
'`inject(...)` composition.'
|
|
415
|
+
);
|
|
416
|
+
}
|
|
417
|
+
// Back-fill the shared services onto a registry that was constructed
|
|
418
|
+
// without them, so Langium's declared-languageId lookup rung works no
|
|
419
|
+
// matter how the adopter's `ServiceRegistry` binding built it. An adopter
|
|
420
|
+
// rebinding the slot with a zero-argument `new MyRegistry()` would
|
|
421
|
+
// otherwise lose that rung with nothing to indicate it — the same
|
|
422
|
+
// silent-inertness shape as a `DocumentUpdateHandler` bound on the
|
|
423
|
+
// per-language tier. Only fills an empty reference.
|
|
424
|
+
if (acceptsSharedServices(shared.ServiceRegistry)) {
|
|
425
|
+
shared.ServiceRegistry.acceptSharedServices(shared);
|
|
426
|
+
}
|
|
427
|
+
// Before registering, not after: `register` resolves a collision by
|
|
428
|
+
// last-wins, so afterwards the losing language is already unreachable.
|
|
429
|
+
assertDistinctFileRouting(languages);
|
|
430
|
+
for (const language of languages) {
|
|
431
|
+
shared.ServiceRegistry.register(language);
|
|
432
|
+
}
|
|
433
|
+
for (const language of languages) {
|
|
434
|
+
assertCoreSlotsBound(shared, language);
|
|
435
|
+
warnOnUnexpectedBindings(shared, language);
|
|
436
|
+
}
|
|
437
|
+
assertReflectionCoversLanguages(shared, languages);
|
|
438
|
+
for (const accessor of eagerlyConstructedServices) {
|
|
439
|
+
accessor(shared);
|
|
440
|
+
}
|
|
441
|
+
return { shared, languages };
|
|
442
|
+
}
|
|
443
|
+
|
|
444
|
+
/**
|
|
445
|
+
* A registry that can take its shared services after construction. Structural
|
|
446
|
+
* rather than an `instanceof HydraniumServiceRegistry` check so an adopter
|
|
447
|
+
* registry that implements the method without extending the framework base
|
|
448
|
+
* still gets the languageId rung.
|
|
449
|
+
*/
|
|
450
|
+
function acceptsSharedServices(registry: unknown): registry is { acceptSharedServices(services: LangiumSharedCoreServices): void } {
|
|
451
|
+
return typeof (registry as { acceptSharedServices?: unknown } | null)?.acceptSharedServices === 'function';
|
|
452
|
+
}
|
|
453
|
+
|
|
454
|
+
/**
|
|
455
|
+
* Fail fast when two registered languages claim the same routing key — a file
|
|
456
|
+
* extension, a whole file name, or a language id.
|
|
457
|
+
*
|
|
458
|
+
* **Why this is an error and not a warning.** Langium's `ServiceRegistry.register`
|
|
459
|
+
* resolves a collision by last-wins and reports it with a raw `console.warn`.
|
|
460
|
+
* That warning goes to the process console, outside the framework `Logger`, so
|
|
461
|
+
* it never reaches the LSP output channel an adopter reads — and the result is
|
|
462
|
+
* that every file of the losing language is parsed, scoped and validated by the
|
|
463
|
+
* WRONG grammar. There is no configuration under which that is intended, and
|
|
464
|
+
* the symptom (mass validation errors in files that look fine) points nowhere
|
|
465
|
+
* near the cause.
|
|
466
|
+
*
|
|
467
|
+
* A duplicate `languageId` is worse still: the id keys `languageIdMap`, so the
|
|
468
|
+
* losing language becomes unreachable by every lookup path at once, including
|
|
469
|
+
* the declared-id rung and `getServicesById`.
|
|
470
|
+
*
|
|
471
|
+
* Runs before registration, since afterwards the collision has already been
|
|
472
|
+
* resolved and the evidence is gone.
|
|
473
|
+
*/
|
|
474
|
+
export function assertDistinctFileRouting(languages: ReadonlyArray<LangiumServices>): void {
|
|
475
|
+
const owners = new Map<string, string>();
|
|
476
|
+
const claim = (kind: string, key: string, languageId: string): void => {
|
|
477
|
+
const mapKey = `${kind}:${key}`;
|
|
478
|
+
const previous = owners.get(mapKey);
|
|
479
|
+
if (previous !== undefined) {
|
|
480
|
+
throw new Error(
|
|
481
|
+
`[hydranium] two registered languages claim the same ${kind} '${key}': '${previous}' and '${languageId}'. ` +
|
|
482
|
+
'Langium resolves this by last-wins with a bare console.warn, so every such file would be parsed and ' +
|
|
483
|
+
'validated by whichever grammar registered last — invisible in the LSP log. Give each grammar a ' +
|
|
484
|
+
`distinct ${kind} in its langium-config.`
|
|
485
|
+
);
|
|
486
|
+
}
|
|
487
|
+
owners.set(mapKey, languageId);
|
|
488
|
+
};
|
|
489
|
+
for (const language of languages) {
|
|
490
|
+
const metadata = language.LanguageMetaData;
|
|
491
|
+
if (!metadata) {
|
|
492
|
+
// An unbound `LanguageMetaData` is a different failure with its own
|
|
493
|
+
// reporting — Langium's `register` reads it one line later. Reporting
|
|
494
|
+
// it here in the vocabulary of a routing collision would misname it.
|
|
495
|
+
continue;
|
|
496
|
+
}
|
|
497
|
+
claim('language id', metadata.languageId, metadata.languageId);
|
|
498
|
+
for (const extension of metadata.fileExtensions) {
|
|
499
|
+
claim('file extension', extension, metadata.languageId);
|
|
500
|
+
}
|
|
501
|
+
for (const fileName of metadata.fileNames ?? []) {
|
|
502
|
+
claim('file name', fileName, metadata.languageId);
|
|
503
|
+
}
|
|
504
|
+
}
|
|
505
|
+
}
|
|
506
|
+
|
|
507
|
+
/**
|
|
508
|
+
* Fail fast when the shared `AstReflection` does not know a registered
|
|
509
|
+
* language's types.
|
|
510
|
+
*
|
|
511
|
+
* **The composition mistake this catches.** `AstReflection` lives in Langium's
|
|
512
|
+
* `LangiumGeneratedSharedCoreServices` — ONE slot for the whole project. A
|
|
513
|
+
* single `langium-cli` run over several grammars emits one combined reflection
|
|
514
|
+
* covering all of them, which is fine. But composing two *separately generated*
|
|
515
|
+
* language packages means composing two `…GeneratedSharedModule`s, each binding
|
|
516
|
+
* that one slot: last-wins, and the loser's types vanish from the reflection.
|
|
517
|
+
* Nothing errors. Instead `isSubtype` silently answers `false` for those types,
|
|
518
|
+
* which quietly breaks `IndexManager.allElements(type)` and `getElementByName`
|
|
519
|
+
* (so reference routing finds nothing), `getTypeMetaData` (so the encoder's
|
|
520
|
+
* `'grammar'` mode emits nothing), and Langium's own linking.
|
|
521
|
+
*
|
|
522
|
+
* The check is per language, on the types its grammar can produce, and costs
|
|
523
|
+
* one grammar walk per language at boot; a single-language composition, which
|
|
524
|
+
* nothing can clobber, is skipped entirely. It cannot repair the situation — a
|
|
525
|
+
* reflection that spans independently generated grammars is a real design piece
|
|
526
|
+
* (a composite reflection dispatching per owning language) and is not attempted
|
|
527
|
+
* here; the point is to turn a silent runtime misbehaviour into a boot failure
|
|
528
|
+
* that names the language and the mistake.
|
|
529
|
+
*
|
|
530
|
+
* **Two severities, because a clobber is not always total.** Throwing only when
|
|
531
|
+
* NONE of a language's types are known misses the realistic case: two grammars
|
|
532
|
+
* that share an imported base overlap heavily, so a reflection covering only
|
|
533
|
+
* one of them still recognises most of the other's types and a
|
|
534
|
+
* none-are-known test passes while the language's DISTINCTIVE types are
|
|
535
|
+
* absent. So any non-empty gap now warns (naming the missing types), and the
|
|
536
|
+
* throw is reserved for the unambiguous all-missing case. The warning can also
|
|
537
|
+
* fire benignly — a generator folding an unused rule away leaves a type the
|
|
538
|
+
* reflection never had — which is why partial coverage warns rather than
|
|
539
|
+
* throwing.
|
|
540
|
+
*/
|
|
541
|
+
export function assertReflectionCoversLanguages(shared: LangiumSharedServices, languages: ReadonlyArray<LangiumServices>): void {
|
|
542
|
+
if (languages.length < 2) {
|
|
543
|
+
// One language cannot be clobbered by another's shared module.
|
|
544
|
+
return;
|
|
545
|
+
}
|
|
546
|
+
if (typeof shared.AstReflection?.getAllTypes !== 'function') {
|
|
547
|
+
// No reflection at all is a different failure (an unbound slot) with its
|
|
548
|
+
// own reporting. This check is about a reflection that EXISTS but covers
|
|
549
|
+
// the wrong grammar, so it stays quiet rather than reporting the absence
|
|
550
|
+
// in the vocabulary of a clobbered binding.
|
|
551
|
+
return;
|
|
552
|
+
}
|
|
553
|
+
const known = new Set(shared.AstReflection.getAllTypes());
|
|
554
|
+
const logger = nested(shared as unknown as Record<string, unknown>, 'Logger') as Logger | undefined;
|
|
555
|
+
for (const language of languages) {
|
|
556
|
+
const produced = collectProducibleTypes(language.Grammar);
|
|
557
|
+
const missing = [...produced].filter(type => !known.has(type));
|
|
558
|
+
if (missing.length === 0) {
|
|
559
|
+
continue;
|
|
560
|
+
}
|
|
561
|
+
const languageId = language.LanguageMetaData.languageId;
|
|
562
|
+
if (missing.length < produced.size) {
|
|
563
|
+
warnPartialReflectionCoverage(logger, languageId, missing, produced.size);
|
|
564
|
+
continue;
|
|
565
|
+
}
|
|
566
|
+
throw new Error(
|
|
567
|
+
`[hydranium] the shared AstReflection knows NONE of the ${produced.size} types the language ` +
|
|
568
|
+
`'${languageId}' can produce (e.g. ${missing.slice(0, 3).join(', ')}). ` +
|
|
569
|
+
'AstReflection is a single shared slot, so composing two independently generated language ' +
|
|
570
|
+
'packages leaves only the last one bound. Generate all grammars in ONE langium-cli run (one ' +
|
|
571
|
+
'langium-config with several entry grammars) so a single combined reflection covers them all.'
|
|
572
|
+
);
|
|
573
|
+
}
|
|
574
|
+
}
|
|
575
|
+
|
|
576
|
+
/** Maximum missing type names spelled out before the message elides the rest. */
|
|
577
|
+
const MAX_REPORTED_MISSING_TYPES = 8;
|
|
578
|
+
|
|
579
|
+
function warnPartialReflectionCoverage(
|
|
580
|
+
logger: Logger | undefined,
|
|
581
|
+
languageId: string,
|
|
582
|
+
missing: readonly string[],
|
|
583
|
+
producedCount: number
|
|
584
|
+
): void {
|
|
585
|
+
const named = missing.slice(0, MAX_REPORTED_MISSING_TYPES).join(', ');
|
|
586
|
+
const elided = missing.length > MAX_REPORTED_MISSING_TYPES ? `, … (${missing.length - MAX_REPORTED_MISSING_TYPES} more)` : '';
|
|
587
|
+
const message =
|
|
588
|
+
`[hydranium] the shared AstReflection is missing ${missing.length} of the ${producedCount} types the ` +
|
|
589
|
+
`language '${languageId}' can produce: ${named}${elided}. ` +
|
|
590
|
+
'For those types `isSubtype` answers false and `getTypeMetaData` is empty, so `IndexManager.allElements` ' +
|
|
591
|
+
'finds nothing, reference routing misses, and the encoder emits nothing. Most likely two independently ' +
|
|
592
|
+
'generated language packages each bound the single shared AstReflection slot and the last one won — ' +
|
|
593
|
+
'generate all grammars in ONE langium-cli run so a single combined reflection covers them. If instead ' +
|
|
594
|
+
'these are rules your generator legitimately folded away, this warning is expected.';
|
|
595
|
+
if (logger) {
|
|
596
|
+
logger.warn(message);
|
|
597
|
+
} else {
|
|
598
|
+
console.warn(message);
|
|
599
|
+
}
|
|
600
|
+
}
|