@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,287 @@
|
|
|
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 { URI } from '@hydranium/langium';
|
|
11
|
+
import { type WritableFileSystemProvider } from '../../documents/ast-document-manager.js';
|
|
12
|
+
import { serverSharedFactory, type ServerSharedServicesMinimal } from '../shared-services.js';
|
|
13
|
+
import { type FileSystemSeed, InMemoryFileSystemProvider, type InMemoryFileSystemOptions } from './in-memory-file-system-provider.js';
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* An asynchronous key/value store a {@link PersistentFileSystemProvider} mirrors
|
|
17
|
+
* its writes into and is restored from.
|
|
18
|
+
*
|
|
19
|
+
* # Why a store behind the map, rather than a provider over the store
|
|
20
|
+
*
|
|
21
|
+
* Langium's `FileSystemProvider` requires SYNCHRONOUS reads — `statSync`,
|
|
22
|
+
* `existsSync`, `readFileSync`, `readDirectorySync` — and the stores a browser
|
|
23
|
+
* offers cannot answer synchronously: `IndexedDB` has no sync API at all, and
|
|
24
|
+
* OPFS has synchronous file handles but still enumerates a directory
|
|
25
|
+
* asynchronously, so even there a directory index has to be held in memory. A
|
|
26
|
+
* store therefore cannot back the provider directly, whatever it is. The map
|
|
27
|
+
* stays the read path and the store is a write-through mirror loaded once,
|
|
28
|
+
* before the server starts.
|
|
29
|
+
*
|
|
30
|
+
* # A key here is a SEED key, not a URI
|
|
31
|
+
*
|
|
32
|
+
* Keys are exactly {@link FileSystemSeed} keys: relative to the provider's
|
|
33
|
+
* `rootUri` when it has one, an absolute URI string when it does not. Two
|
|
34
|
+
* consequences worth having — a stored workspace reloads under a different
|
|
35
|
+
* `rootUri` than it was written from, and the seed and the store are the same
|
|
36
|
+
* key space, so restoring is an overlay rather than a translation step only one
|
|
37
|
+
* side would remember.
|
|
38
|
+
*
|
|
39
|
+
* # Failure is the caller's to see
|
|
40
|
+
*
|
|
41
|
+
* Every method may reject, and the provider propagates a rejection out of
|
|
42
|
+
* `writeFile` rather than absorbing it — a save that reports success for content
|
|
43
|
+
* no store holds is the failure this seam exists to make impossible. Browser
|
|
44
|
+
* storage really does fail: a quota is finite, and the user agent may EVICT the
|
|
45
|
+
* whole origin's storage under pressure or on a "clear site data".
|
|
46
|
+
*/
|
|
47
|
+
export interface FileSystemStore {
|
|
48
|
+
/**
|
|
49
|
+
* Everything the store holds. An empty record is the first-visit answer and
|
|
50
|
+
* not an error, which is what makes the provider's seed the baseline.
|
|
51
|
+
*/
|
|
52
|
+
load(): Promise<FileSystemSeed>;
|
|
53
|
+
/**
|
|
54
|
+
* Store `content` under `path`, replacing any previous content.
|
|
55
|
+
*
|
|
56
|
+
* `content` is OPAQUE and must be stored byte for byte: the provider also
|
|
57
|
+
* writes a deletion marker through here, so a store that validated or
|
|
58
|
+
* normalised what it was given would turn a delete into a file whose content
|
|
59
|
+
* is the marker.
|
|
60
|
+
*/
|
|
61
|
+
write(path: string, content: string): Promise<void>;
|
|
62
|
+
/** Drop `path`. Storing nothing there already is not an error. */
|
|
63
|
+
remove(path: string): Promise<void>;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* The stored VALUE that means "deleted", as opposed to content.
|
|
68
|
+
*
|
|
69
|
+
* NUL-wrapped so no document can be taken for one: a file whose entire content
|
|
70
|
+
* is this exact string would be restored as a deletion, and text a grammar can
|
|
71
|
+
* parse holds no NUL. Deliberately not exported — a store must treat it as
|
|
72
|
+
* opaque content, and a host that could recognise it would be tempted to.
|
|
73
|
+
*/
|
|
74
|
+
const TOMBSTONE = '\u0000hydranium:deleted\u0000';
|
|
75
|
+
|
|
76
|
+
/** Options for {@link PersistentFileSystemProvider} and {@link persistentFileSystem}. */
|
|
77
|
+
export interface PersistentFileSystemOptions extends InMemoryFileSystemOptions {
|
|
78
|
+
/** The store writes mirror into and {@link restored} content came out of. */
|
|
79
|
+
store: FileSystemStore;
|
|
80
|
+
/**
|
|
81
|
+
* Content already read out of {@link store}, applied OVER
|
|
82
|
+
* {@link InMemoryFileSystemOptions.seed} at construction.
|
|
83
|
+
*
|
|
84
|
+
* Filled by {@link persistentFileSystem}, which is the supported way in: the
|
|
85
|
+
* provider is constructed synchronously by the services factory, so a load
|
|
86
|
+
* cannot happen inside it.
|
|
87
|
+
*/
|
|
88
|
+
restored?: FileSystemSeed;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* An {@link InMemoryFileSystemProvider} whose writes survive the page: the map
|
|
93
|
+
* is still the read path, and every write is mirrored into an asynchronous
|
|
94
|
+
* {@link FileSystemStore} that the next start is restored from.
|
|
95
|
+
*
|
|
96
|
+
* # The seed is the baseline and the store is the delta
|
|
97
|
+
*
|
|
98
|
+
* A restored entry wins over the seed for the same key; a seeded file the store
|
|
99
|
+
* has never heard of is served from the seed. So a first visit is the seed
|
|
100
|
+
* exactly, a returning visit is the seed with the edits laid over it, and a file
|
|
101
|
+
* the host adds to its seed later appears for a visitor who already has stored
|
|
102
|
+
* content — which whole-store precedence would have hidden until they cleared
|
|
103
|
+
* their storage.
|
|
104
|
+
*
|
|
105
|
+
* # Deleting a seeded file writes a marker, because dropping its entry would not
|
|
106
|
+
*
|
|
107
|
+
* A delta over a baseline cannot express absence by omission: removing the
|
|
108
|
+
* stored entry for a seeded file returns it to its seeded content on the next
|
|
109
|
+
* restore, which is a deletion that undoes itself. So {@link deleteFile} stores
|
|
110
|
+
* a TOMBSTONE for a path the seed carries, and restoring one applies it as a
|
|
111
|
+
* deletion rather than as content. Re-creating the file is an ordinary write over
|
|
112
|
+
* the marker, so nothing has to un-mark it.
|
|
113
|
+
*
|
|
114
|
+
* A path the seed does NOT carry needs no marker — absence from the store is
|
|
115
|
+
* already absence — so its entry is removed instead, which is what keeps a host
|
|
116
|
+
* that creates and deletes scratch files from growing the store forever.
|
|
117
|
+
*
|
|
118
|
+
* The marker is a reserved VALUE rather than a reserved key, and that is for the
|
|
119
|
+
* store's sake: a key is a seed-space path by contract, and a store may map keys
|
|
120
|
+
* to real filenames, where a reserved key prefix would ask it to create a file
|
|
121
|
+
* whose name is not a path. As a value it needs nothing from any store. Two
|
|
122
|
+
* consequences worth knowing: a host that reads the store directly — to count
|
|
123
|
+
* what is held, say — sees marker entries among the content ones and cannot tell
|
|
124
|
+
* them apart; and a document whose ENTIRE content is the marker string would be
|
|
125
|
+
* restored as deleted, which is why the marker is NUL-wrapped and text a grammar
|
|
126
|
+
* can parse is not.
|
|
127
|
+
*
|
|
128
|
+
* # A registered virtual document still wins
|
|
129
|
+
*
|
|
130
|
+
* `readFileSync` consults the virtual-document seam before the map, so a stdlib
|
|
131
|
+
* contributed in code keeps answering for its URI whether or not the store holds
|
|
132
|
+
* one. The store cannot shadow it, which is what keeps a rebuild that re-reads
|
|
133
|
+
* that URI from losing the stdlib.
|
|
134
|
+
*
|
|
135
|
+
* # What it deliberately does not answer
|
|
136
|
+
*
|
|
137
|
+
* The store is scoped to the ORIGIN, not to the page: two pages on the same
|
|
138
|
+
* origin share it, and the user agent may evict it entirely. Both are properties
|
|
139
|
+
* of browser storage rather than of this class, and neither is worth a stub —
|
|
140
|
+
* eviction presents as a first visit, which is a state this provider is
|
|
141
|
+
* correct in.
|
|
142
|
+
*/
|
|
143
|
+
export class PersistentFileSystemProvider extends InMemoryFileSystemProvider {
|
|
144
|
+
protected readonly store: FileSystemStore;
|
|
145
|
+
/**
|
|
146
|
+
* The map-key prefix store keys are relative to, WITH its trailing
|
|
147
|
+
* separator, or `undefined` when store keys are absolute URIs.
|
|
148
|
+
*/
|
|
149
|
+
protected readonly storeRoot?: string;
|
|
150
|
+
/**
|
|
151
|
+
* The seed's paths, in STORE-key space rather than as the record was written.
|
|
152
|
+
*
|
|
153
|
+
* Normalised on the way in for the same reason restoring is: a seed key and
|
|
154
|
+
* the key derived from a URI disagree for a percent-encodable path, so a raw
|
|
155
|
+
* `Object.keys` set would call `a b.x` unseeded and remove its entry instead
|
|
156
|
+
* of marking it — a deletion that quietly undoes itself on the next load.
|
|
157
|
+
*/
|
|
158
|
+
protected readonly seededPaths: ReadonlySet<string>;
|
|
159
|
+
|
|
160
|
+
constructor(services: ServerSharedServicesMinimal, options: PersistentFileSystemOptions) {
|
|
161
|
+
super(services, options);
|
|
162
|
+
this.store = options.store;
|
|
163
|
+
this.storeRoot = options.rootUri === undefined ? undefined : `${this.fileKey(options.rootUri)}/`;
|
|
164
|
+
this.seededPaths = new Set(Object.keys(options.seed ?? {}).map(path => this.storeKey(this.storeUri(path))));
|
|
165
|
+
for (const [path, content] of Object.entries(options.restored ?? {})) {
|
|
166
|
+
// `super.*`, so restoring does not mirror straight back into the store
|
|
167
|
+
// it just came from — a write-back on every start, and one that would
|
|
168
|
+
// resurrect an entry the store had legitimately dropped.
|
|
169
|
+
//
|
|
170
|
+
// Applied AFTER the seed and through the same key normalisation, which
|
|
171
|
+
// is what makes "restored wins" hold for a key the two spell
|
|
172
|
+
// differently (`a b.x` against `a%20b.x`) instead of depending on the
|
|
173
|
+
// insertion order of a merged record.
|
|
174
|
+
const uri = this.storeUri(path);
|
|
175
|
+
if (content === TOMBSTONE) {
|
|
176
|
+
super.deleteFile(uri);
|
|
177
|
+
} else {
|
|
178
|
+
super.setFile(uri, content);
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
/**
|
|
184
|
+
* The sync twin, mirrored without waiting.
|
|
185
|
+
*
|
|
186
|
+
* It has no way to report a store failure to its caller, so the tracer is the
|
|
187
|
+
* only channel it has — which is why {@link writeFile}, the path a save
|
|
188
|
+
* actually takes, awaits instead.
|
|
189
|
+
*/
|
|
190
|
+
override setFile(uri: URI, content: string): void {
|
|
191
|
+
super.setFile(uri, content);
|
|
192
|
+
this.persist(uri, content).catch((error: unknown) => this.reportStoreFailure('store', uri, error));
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
/**
|
|
196
|
+
* Write through to the store and REJECT if it refuses.
|
|
197
|
+
*
|
|
198
|
+
* A quota failure or an evicted origin has to reach the client that asked for
|
|
199
|
+
* the save: the alternative is a page that reports a saved workspace and
|
|
200
|
+
* reloads without it, which is the same shape as persistence working.
|
|
201
|
+
*
|
|
202
|
+
* `super.setFile` rather than `this.setFile`, so the awaited mirror below is
|
|
203
|
+
* the only one — the override would fire a second, unawaited write for the
|
|
204
|
+
* same content.
|
|
205
|
+
*/
|
|
206
|
+
override async writeFile(uri: URI, content: string): Promise<void> {
|
|
207
|
+
super.setFile(uri, content);
|
|
208
|
+
await this.persist(uri, content);
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
override deleteFile(uri: URI): void {
|
|
212
|
+
super.deleteFile(uri);
|
|
213
|
+
this.forget(uri).catch((error: unknown) => this.reportStoreFailure('forget', uri, error));
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
/** The absolute URI a store-space `path` addresses. */
|
|
217
|
+
protected storeUri(path: string): URI {
|
|
218
|
+
return URI.parse(this.storeRoot === undefined ? path : `${this.storeRoot}${path}`);
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
/** Mirror one write. `async` so a bad key rejects rather than throwing at the call site. */
|
|
222
|
+
protected async persist(uri: URI, content: string): Promise<void> {
|
|
223
|
+
await this.store.write(this.storeKey(uri), content);
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
/**
|
|
227
|
+
* Mirror one deletion: a tombstone where the seed would otherwise bring the
|
|
228
|
+
* file back, a plain removal where it would not. `async` for the same reason
|
|
229
|
+
* as {@link persist}.
|
|
230
|
+
*/
|
|
231
|
+
protected async forget(uri: URI): Promise<void> {
|
|
232
|
+
const path = this.storeKey(uri);
|
|
233
|
+
if (this.seededPaths.has(path)) {
|
|
234
|
+
await this.store.write(path, TOMBSTONE);
|
|
235
|
+
} else {
|
|
236
|
+
await this.store.remove(path);
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
/**
|
|
241
|
+
* The store key for `uri`, in the seed's key space.
|
|
242
|
+
*
|
|
243
|
+
* Throws for a URI outside `rootUri` rather than keying it absolutely beside
|
|
244
|
+
* the relative ones: a store holding both spellings restores under neither,
|
|
245
|
+
* and a host writing outside the workspace it declared has a wiring fault
|
|
246
|
+
* worth hearing about.
|
|
247
|
+
*/
|
|
248
|
+
protected storeKey(uri: URI): string {
|
|
249
|
+
const key = this.fileKey(uri);
|
|
250
|
+
if (this.storeRoot === undefined) {
|
|
251
|
+
return key;
|
|
252
|
+
}
|
|
253
|
+
if (!key.startsWith(this.storeRoot)) {
|
|
254
|
+
throw new Error(`Cannot persist ${uri.toString()}: outside the store root ${this.storeRoot}`);
|
|
255
|
+
}
|
|
256
|
+
return key.slice(this.storeRoot.length);
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
protected reportStoreFailure(operation: string, uri: URI, error: unknown): void {
|
|
260
|
+
this.tracer.error(`Failed to ${operation} ${uri.toString()}: ${error instanceof Error ? error.message : String(error)}`);
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
/**
|
|
265
|
+
* Restore `options.store` and bind a {@link PersistentFileSystemProvider} over
|
|
266
|
+
* it, spread into the services context exactly where a Node host spreads
|
|
267
|
+
* `NodeFileSystem`.
|
|
268
|
+
*
|
|
269
|
+
* **It is asynchronous, and that is the ordering contract rather than an
|
|
270
|
+
* implementation detail.** The provider's reads are synchronous, so the stored
|
|
271
|
+
* workspace must be in the map before anything reads it — and a `hydrate()`
|
|
272
|
+
* method on the provider could not enforce that, because awaiting one after the
|
|
273
|
+
* transport exists is already too late: a `BrowserMessageReader` starts its port
|
|
274
|
+
* on construction but fires into an emitter with no listener until
|
|
275
|
+
* `startLanguageServer` calls `listen`, so an `initialize` arriving during the
|
|
276
|
+
* await is DROPPED — no error, no reply, a client that waits forever. Loading
|
|
277
|
+
* here, before the services and therefore before the connection exist, makes
|
|
278
|
+
* that unrepresentable rather than documented.
|
|
279
|
+
*/
|
|
280
|
+
export async function persistentFileSystem(options: PersistentFileSystemOptions): Promise<{
|
|
281
|
+
fileSystemProvider: (services: unknown) => WritableFileSystemProvider;
|
|
282
|
+
}> {
|
|
283
|
+
const restored = await options.store.load();
|
|
284
|
+
return {
|
|
285
|
+
fileSystemProvider: serverSharedFactory(services => new PersistentFileSystemProvider(services, { ...options, restored }))
|
|
286
|
+
};
|
|
287
|
+
}
|
|
@@ -0,0 +1,63 @@
|
|
|
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 Mutable } from '@hydranium/protocol';
|
|
11
|
+
import { type AstNode, AstUtils } from '@hydranium/langium';
|
|
12
|
+
|
|
13
|
+
// The `$synthetic` `AstNode` type augmentation lives in `@hydranium/langium`
|
|
14
|
+
// (the langium chokepoint); it arrives here ambiently via that dependency.
|
|
15
|
+
// This module owns the *behaviour* of the synthetic-node concept — the marker
|
|
16
|
+
// helpers below and the validation-skip default that reads them.
|
|
17
|
+
//
|
|
18
|
+
// This is the NODE-provenance axis: a synthetic node is one not authored by
|
|
19
|
+
// the user — synthesized in code (a stdlib element) or by projection (a mirror
|
|
20
|
+
// of an inherited member). It is distinct from the *document* axis, where a
|
|
21
|
+
// virtual document is one with no backing file. The two are orthogonal: a
|
|
22
|
+
// synthetic node can live in a real file, and a virtual document can hold
|
|
23
|
+
// non-synthetic nodes.
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Mark `node` as synthetic. Returns the node for fluent chaining.
|
|
27
|
+
*
|
|
28
|
+
* Opting into the synthetic marker drives behaviour changes downstream
|
|
29
|
+
* — most notably, the framework's
|
|
30
|
+
* `HydraniumDocumentValidator.shouldSkipValidation` default
|
|
31
|
+
* skips marked nodes (unless `validateSyntheticNodes` is enabled),
|
|
32
|
+
* short-circuiting validation for mirrors and stdlib content. Adopters
|
|
33
|
+
* who want a synthetic node validated normally simply do not mark it.
|
|
34
|
+
*/
|
|
35
|
+
export function markSynthetic<T extends AstNode>(node: T): T {
|
|
36
|
+
(node as Mutable<T>).$synthetic = true;
|
|
37
|
+
return node;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Walk an AST tree rooted at `root` and {@link markSynthetic mark}
|
|
42
|
+
* every node. Use when building a stdlib / library document where
|
|
43
|
+
* every node should opt into skip-validation semantics in one stroke.
|
|
44
|
+
*
|
|
45
|
+
* For partial marking (some nodes mirrored, some validated normally),
|
|
46
|
+
* call {@link markSynthetic} on the specific nodes instead.
|
|
47
|
+
*/
|
|
48
|
+
export function markSyntheticTree(root: AstNode): void {
|
|
49
|
+
for (const node of AstUtils.streamAst(root)) {
|
|
50
|
+
markSynthetic(node);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* True iff `node` has been explicitly marked synthetic via
|
|
56
|
+
* {@link markSynthetic} / {@link markSyntheticTree}. The check is a
|
|
57
|
+
* pure flag read — the URI scheme of the containing document does
|
|
58
|
+
* not influence this predicate (see `isVirtualUri` for the separate
|
|
59
|
+
* document-identity axis).
|
|
60
|
+
*/
|
|
61
|
+
export function isSyntheticNode(node: AstNode): boolean {
|
|
62
|
+
return node.$synthetic === true;
|
|
63
|
+
}
|
|
@@ -0,0 +1,94 @@
|
|
|
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 { URI } from '@hydranium/langium';
|
|
11
|
+
import { type ServerSharedServicesMinimal } from '../shared-services.js';
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* URI scheme for virtual documents — LangiumDocuments that have no backing
|
|
15
|
+
* file on disk (a language's stdlib, library types, built-in definitions,
|
|
16
|
+
* mirrors, generated views). Chosen so it cannot collide with on-disk `file:`
|
|
17
|
+
* URIs, and so the framework's FileSystemProvider can recognise and serve them
|
|
18
|
+
* on re-read (see {@link serveVirtualDocument}).
|
|
19
|
+
*/
|
|
20
|
+
export const VIRTUAL_SCHEME = 'virtual';
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Build a URI for a virtual document — one whose content is provided in code
|
|
24
|
+
* rather than read from disk, either as a parsed string
|
|
25
|
+
* (`LangiumDocumentFactory.fromString`) or a code-built AST
|
|
26
|
+
* (`LangiumDocumentFactory.fromModel`).
|
|
27
|
+
*
|
|
28
|
+
* The URI uses the {@link VIRTUAL_SCHEME} scheme. The first segment carries
|
|
29
|
+
* contributor identity for diagnostics, telemetry, and "go to source" UI;
|
|
30
|
+
* additional segments scope sub-documents within one contributor.
|
|
31
|
+
*
|
|
32
|
+
* Pair with a `LangiumDocumentFactory` to construct a document whose content
|
|
33
|
+
* lives in memory. The resulting document is suitable as the `document`
|
|
34
|
+
* argument to the tier factories on `HydraniumAstNodeDescriptionProvider`
|
|
35
|
+
* (`createLocal` / `createProject` / `createPublic` / `createUniversal`).
|
|
36
|
+
*
|
|
37
|
+
* # End the URI with a registered file extension
|
|
38
|
+
*
|
|
39
|
+
* Called with a contributor and no further segments this yields
|
|
40
|
+
* `virtual:<contributor>`, which has no extension and so matches no registered
|
|
41
|
+
* language — a trap. Every per-language service is resolved per URI, and a
|
|
42
|
+
* virtual document is never open in `TextDocuments`, so the declared-languageId
|
|
43
|
+
* lookup rung cannot serve it either: the document is indexed but inert,
|
|
44
|
+
* contributing nothing to the scopes it was written to populate, with no error
|
|
45
|
+
* anywhere. Pass the extension as the last segment,
|
|
46
|
+
* `virtualUri(contributor, 'name.<ext>')`. `HydraniumWorkspaceManager` warns
|
|
47
|
+
* when a seeded additional document fails to route, which is where this
|
|
48
|
+
* usually surfaces.
|
|
49
|
+
*
|
|
50
|
+
* # Relationship to the `$synthetic` node marker
|
|
51
|
+
*
|
|
52
|
+
* The URI scheme tags the *document* as not-from-disk; the `$synthetic` node
|
|
53
|
+
* marker (see `markSynthetic` / `isSyntheticNode`) tags an individual *node* as
|
|
54
|
+
* not user-authored. A virtual document may contain non-synthetic nodes and
|
|
55
|
+
* vice versa.
|
|
56
|
+
*
|
|
57
|
+
* Both axes are read by `HydraniumDocumentValidator`, at different
|
|
58
|
+
* granularities: the scheme skips the WHOLE document
|
|
59
|
+
* (`validateVirtualDocuments`, default `false`, so the walk is avoided
|
|
60
|
+
* entirely), the marker skips a node and its children
|
|
61
|
+
* (`validateSyntheticNodes`, default `false`).
|
|
62
|
+
*/
|
|
63
|
+
export function virtualUri(contributor: string, ...segments: string[]): URI {
|
|
64
|
+
const tail = segments.length > 0 ? '/' + segments.join('/') : '';
|
|
65
|
+
return URI.parse(`${VIRTUAL_SCHEME}:${contributor}${tail}`);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/** True iff `uri` uses the {@link VIRTUAL_SCHEME} scheme produced by {@link virtualUri}. */
|
|
69
|
+
export function isVirtualUri(uri: URI | string): boolean {
|
|
70
|
+
const scheme = typeof uri === 'string' ? URI.parse(uri).scheme : uri.scheme;
|
|
71
|
+
return scheme === VIRTUAL_SCHEME;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* Serve the text of a registered virtual document, or `undefined` when `uri`
|
|
76
|
+
* is not virtual or no document is registered for it (so a FileSystemProvider
|
|
77
|
+
* delegates to its real backing).
|
|
78
|
+
*
|
|
79
|
+
* The framework's FileSystemProvider defaults call this at the top of
|
|
80
|
+
* `readFile` / `readFileSync` so a virtual document survives a re-read:
|
|
81
|
+
* `DocumentBuilder.update` / `LangiumDocumentFactory.update` re-read a changed
|
|
82
|
+
* URI from the FileSystemProvider, and nothing on disk backs a virtual URI. The
|
|
83
|
+
* text comes from the registered document — the original source for a
|
|
84
|
+
* `fromString` document, or the serialized form retained by the framework's
|
|
85
|
+
* `fromModel` (which fills in the text Langium leaves empty). No serializer is
|
|
86
|
+
* consulted here; the text is already on the document.
|
|
87
|
+
*/
|
|
88
|
+
export function serveVirtualDocument(services: ServerSharedServicesMinimal, uri: URI): string | undefined {
|
|
89
|
+
if (!isVirtualUri(uri)) {
|
|
90
|
+
return undefined;
|
|
91
|
+
}
|
|
92
|
+
const document = services.workspace.LangiumDocuments.getDocument(uri);
|
|
93
|
+
return document ? document.textDocument.getText() : undefined;
|
|
94
|
+
}
|
|
@@ -0,0 +1,88 @@
|
|
|
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
|
+
/**
|
|
11
|
+
* Tracks whether the currently-executing code is running inside a holder of the
|
|
12
|
+
* workspace WRITE lock.
|
|
13
|
+
*
|
|
14
|
+
* The question matters because `WorkspaceLock` is not reentrant: acquiring the
|
|
15
|
+
* write lock calls `cancelWrite()` on the running holder, so a caller that
|
|
16
|
+
* reaches the model facade from inside a build has its ENCLOSING build cancelled
|
|
17
|
+
* and may then stall in the follow-up phase wait. That is a latent deadlock with
|
|
18
|
+
* no static signature — the call looks ordinary at every layer — so the only way
|
|
19
|
+
* to surface it is to know, at the moment of acquisition, whether the lock is
|
|
20
|
+
* already held further up the same async stack.
|
|
21
|
+
*
|
|
22
|
+
* Answering it needs async-context propagation, which has no browser-neutral
|
|
23
|
+
* implementation: Node's `AsyncLocalStorage` is a `node:async_hooks` import (so
|
|
24
|
+
* it cannot appear on the portable `.` entry, which `check:neutral` gates), and
|
|
25
|
+
* TC39's `AsyncContext` is unshipped. Hence the same seam shape the log file-tee
|
|
26
|
+
* uses: this module declares the contract and defaults to inert, and
|
|
27
|
+
* `@hydranium/core/node` installs a real implementation at entry load. A browser
|
|
28
|
+
* bundle therefore gets NO detection rather than a broken approximation, which
|
|
29
|
+
* is the right degradation — the reentrant shape is a server-side build concern,
|
|
30
|
+
* and a false negative costs the pre-existing stall while a false positive would
|
|
31
|
+
* reject a legitimate write.
|
|
32
|
+
*/
|
|
33
|
+
export interface WriteLockScope {
|
|
34
|
+
/** Run `fn` marked as executing inside a write-lock holder. */
|
|
35
|
+
run<T>(fn: () => T): T;
|
|
36
|
+
/** Whether the caller is already inside a {@link run} scope. */
|
|
37
|
+
isInside(): boolean;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
let writeLockScope: WriteLockScope | undefined;
|
|
41
|
+
|
|
42
|
+
/** Install (or clear, with `undefined`) the write-lock scope tracker. Idempotent. */
|
|
43
|
+
export function setWriteLockScope(scope: WriteLockScope | undefined): void {
|
|
44
|
+
writeLockScope = scope;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Run `fn` inside the write-lock scope, if a tracker is installed. Without one
|
|
49
|
+
* this is a plain call, so the wrapper is safe to apply unconditionally on the
|
|
50
|
+
* neutral path.
|
|
51
|
+
*/
|
|
52
|
+
export function runInWriteLockScope<T>(fn: () => T): T {
|
|
53
|
+
return writeLockScope ? writeLockScope.run(fn) : fn();
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Whether the caller is executing inside a workspace write-lock holder.
|
|
58
|
+
*
|
|
59
|
+
* Returns `false` when no tracker is installed, so every guard reading this
|
|
60
|
+
* fails OPEN — an un-instrumented host keeps its current behaviour rather than
|
|
61
|
+
* gaining spurious rejections.
|
|
62
|
+
*/
|
|
63
|
+
export function isInsideWriteLock(): boolean {
|
|
64
|
+
return writeLockScope?.isInside() ?? false;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* Thrown when the model facade is reached from inside a workspace write-lock
|
|
69
|
+
* holder — typically an integrity rule or build-phase pass writing through
|
|
70
|
+
* `ModelService.update` / `save` / `rebuild` during a build.
|
|
71
|
+
*
|
|
72
|
+
* Named rather than a bare `Error` because the remedy is specific and worth
|
|
73
|
+
* pointing at: either move the write out of the build (integrity rules that
|
|
74
|
+
* persist repairs should write through `FileSystemProvider.writeFile`, which
|
|
75
|
+
* takes no lock), or set `ModelServiceOptions.serializeBuilds: false` to accept
|
|
76
|
+
* unserialised builds in exchange for the reentrancy.
|
|
77
|
+
*/
|
|
78
|
+
export class ReentrantWriteLockError extends Error {
|
|
79
|
+
constructor(readonly uri: string) {
|
|
80
|
+
super(
|
|
81
|
+
`Model facade reached for '${uri}' from inside a workspace write-lock holder. ` +
|
|
82
|
+
'Acquiring the write lock would cancel the enclosing build and may stall this call. ' +
|
|
83
|
+
'Write through FileSystemProvider.writeFile from a build-phase pass, or set ' +
|
|
84
|
+
'ModelServiceOptions.serializeBuilds: false to opt out of build serialisation.'
|
|
85
|
+
);
|
|
86
|
+
this.name = 'ReentrantWriteLockError';
|
|
87
|
+
}
|
|
88
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
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
|
+
export * from './integrated-server.js';
|
|
11
|
+
// Only the transport-agnostic handle belongs here: `socket-launcher` pulls
|
|
12
|
+
// `node:net` and therefore ships from `@hydranium/core/node` instead.
|
|
@@ -0,0 +1,28 @@
|
|
|
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
|
+
/**
|
|
11
|
+
* Lifecycle handle for a protocol-head server (socket-based, stdio-based,
|
|
12
|
+
* or otherwise) that the adopter starts during language-server bootstrap.
|
|
13
|
+
*
|
|
14
|
+
* The two promises encode the canonical two-phase startup pattern:
|
|
15
|
+
* - {@link started} resolves once the head is accepting traffic — for a
|
|
16
|
+
* socket server, this means `net.Server.listen` resolved AND the bound
|
|
17
|
+
* port is known. Adopter bootstrap code awaits this before publishing
|
|
18
|
+
* the port and announcing readiness over the LSP connection.
|
|
19
|
+
* - {@link stopped} resolves once the head has shut down cleanly — used
|
|
20
|
+
* primarily by tests waiting for tidy teardown.
|
|
21
|
+
*
|
|
22
|
+
* Either promise may reject if startup or shutdown encounters an error
|
|
23
|
+
* the head can't recover from.
|
|
24
|
+
*/
|
|
25
|
+
export interface IntegratedServer {
|
|
26
|
+
readonly started: Promise<void>;
|
|
27
|
+
readonly stopped: Promise<void>;
|
|
28
|
+
}
|