@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,137 @@
|
|
|
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
|
+
* Throwaway on-disk workspace directories for tests.
|
|
12
|
+
*
|
|
13
|
+
* # Why a framework helper rather than four lines per test
|
|
14
|
+
*
|
|
15
|
+
* Any test that drives a **write path** needs one, and the reason is not
|
|
16
|
+
* obvious enough to rediscover per suite. The writes themselves are usually
|
|
17
|
+
* in-memory — `ModelService.update` goes to the multi-client text store, and
|
|
18
|
+
* only `save` reaches disk — but a rebuild also runs the integrity rules, and
|
|
19
|
+
* their default `'silent'` sync mode persists repairs through
|
|
20
|
+
* `WritableFileSystemProvider.writeFile`. So a write-path test pointed at a
|
|
21
|
+
* committed sample workspace can **rewrite the sample files**, after which
|
|
22
|
+
* every later run asserts against already-repaired input: a suite that passes
|
|
23
|
+
* while testing nothing. The same applies to a fixture built in place, which
|
|
24
|
+
* additionally loses its explanatory comments, because the write-back goes
|
|
25
|
+
* through the serializer.
|
|
26
|
+
*
|
|
27
|
+
* The second reason is cleanup. Hand-rolled `mkdtempSync` without a matching
|
|
28
|
+
* `rmSync` leaks a directory per test run into the OS temp dir, which nobody
|
|
29
|
+
* notices until a CI box fills up.
|
|
30
|
+
*
|
|
31
|
+
* # Two shapes, because both occur
|
|
32
|
+
*
|
|
33
|
+
* - **Seeded** — copy a committed sample workspace and work on the copy. Use
|
|
34
|
+
* this when the test wants realistic, linked, multi-file input.
|
|
35
|
+
* - **Empty, then written** — start bare and author the files the test needs.
|
|
36
|
+
* Use this when the point IS the file layout: project discovery, document
|
|
37
|
+
* identity, symlinks, a deliberately broken descriptor.
|
|
38
|
+
*
|
|
39
|
+
* Both are the same object; `seed` is optional and {@link ScratchWorkspace.write}
|
|
40
|
+
* is available either way, so a seeded workspace can still gain a file.
|
|
41
|
+
*
|
|
42
|
+
* # Not a Langium anything
|
|
43
|
+
*
|
|
44
|
+
* This deliberately knows nothing about services, documents or builds — it
|
|
45
|
+
* makes a directory and removes it. The caller decides what to initialize over
|
|
46
|
+
* it (`initializeWorkspaceProgrammatically` for the editor-equivalent path,
|
|
47
|
+
* `buildWorkspaceProgrammatically` for the eager one), because that choice is
|
|
48
|
+
* itself often what a test is pinning.
|
|
49
|
+
*/
|
|
50
|
+
|
|
51
|
+
import { URI } from '@hydranium/langium';
|
|
52
|
+
import { cpSync, mkdirSync, mkdtempSync, rmSync, writeFileSync } from 'node:fs';
|
|
53
|
+
import { tmpdir } from 'node:os';
|
|
54
|
+
import * as path from 'node:path';
|
|
55
|
+
|
|
56
|
+
/** Options for {@link makeScratchWorkspace}. */
|
|
57
|
+
export interface ScratchWorkspaceOptions {
|
|
58
|
+
/**
|
|
59
|
+
* Directory to copy in as the starting content, recursively. Omit for an
|
|
60
|
+
* empty workspace.
|
|
61
|
+
*/
|
|
62
|
+
readonly seed?: string;
|
|
63
|
+
/**
|
|
64
|
+
* Prefix for the temp directory name, so a leaked directory is traceable to
|
|
65
|
+
* the suite that made it. Defaults to `hydranium-scratch-`.
|
|
66
|
+
*/
|
|
67
|
+
readonly prefix?: string;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/** A temp directory with a cleanup hook. */
|
|
71
|
+
export interface ScratchWorkspace {
|
|
72
|
+
/** Absolute path of the workspace root. */
|
|
73
|
+
readonly root: string;
|
|
74
|
+
/**
|
|
75
|
+
* Write a file under {@link root}, creating parent directories. Returns the
|
|
76
|
+
* absolute path, so a caller can hand it straight to a URI.
|
|
77
|
+
*/
|
|
78
|
+
write(relativePath: string, content: string): string;
|
|
79
|
+
/** Absolute path of `relativePath` under {@link root}, without writing. */
|
|
80
|
+
resolve(relativePath: string): string;
|
|
81
|
+
/**
|
|
82
|
+
* `file:` URI string of `relativePath` under {@link root}, or of the root
|
|
83
|
+
* itself when called with no argument. This is what the wire carries, so it
|
|
84
|
+
* is what a test hands to `initialize`, `openModelDocument` or any request
|
|
85
|
+
* keyed by URI.
|
|
86
|
+
*
|
|
87
|
+
* **Exists so `` `file://${workspace.root}` `` cannot be hand-rolled**, which
|
|
88
|
+
* is not a style preference. {@link root} comes from `mkdtempSync` and is
|
|
89
|
+
* therefore OS-NATIVE: on Windows the template form yields
|
|
90
|
+
* `file://C:\dir\…`, where the drive letter parses as the authority and the
|
|
91
|
+
* backslashes are not separators, so every URI comparison in the suite fails
|
|
92
|
+
* against the `file:///c:/dir/…` the server produces. `URI.file` applies
|
|
93
|
+
* the drive-letter lowercasing, the third slash and the percent-encoding that
|
|
94
|
+
* makes the two agree.
|
|
95
|
+
*/
|
|
96
|
+
uri(relativePath?: string): string;
|
|
97
|
+
/**
|
|
98
|
+
* Remove the directory. Idempotent, and safe to call from an `afterEach`
|
|
99
|
+
* that may run after a failed `beforeEach`.
|
|
100
|
+
*/
|
|
101
|
+
dispose(): void;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* Create a throwaway workspace directory. The caller owns teardown — pair the
|
|
106
|
+
* returned {@link ScratchWorkspace.dispose} with an `afterEach`.
|
|
107
|
+
*/
|
|
108
|
+
export function makeScratchWorkspace(options: ScratchWorkspaceOptions = {}): ScratchWorkspace {
|
|
109
|
+
const root = mkdtempSync(path.join(tmpdir(), options.prefix ?? 'hydranium-scratch-'));
|
|
110
|
+
if (options.seed) {
|
|
111
|
+
cpSync(options.seed, root, { recursive: true });
|
|
112
|
+
}
|
|
113
|
+
let disposed = false;
|
|
114
|
+
const resolve = (relativePath: string): string => path.join(root, relativePath);
|
|
115
|
+
return {
|
|
116
|
+
root,
|
|
117
|
+
resolve,
|
|
118
|
+
uri(relativePath?: string) {
|
|
119
|
+
return URI.file(relativePath === undefined ? root : resolve(relativePath)).toString();
|
|
120
|
+
},
|
|
121
|
+
write(relativePath, content) {
|
|
122
|
+
const target = resolve(relativePath);
|
|
123
|
+
mkdirSync(path.dirname(target), { recursive: true });
|
|
124
|
+
writeFileSync(target, content, 'utf8');
|
|
125
|
+
return target;
|
|
126
|
+
},
|
|
127
|
+
dispose() {
|
|
128
|
+
if (disposed) {
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
disposed = true;
|
|
132
|
+
// `force` so a test that already removed the directory, or never got
|
|
133
|
+
// far enough to populate it, does not fail teardown.
|
|
134
|
+
rmSync(root, { recursive: true, force: true });
|
|
135
|
+
}
|
|
136
|
+
};
|
|
137
|
+
}
|
|
@@ -0,0 +1,447 @@
|
|
|
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
|
+
* The subprocess tier: a BUILT server entry run as a real child process and
|
|
12
|
+
* driven over the real LSP wire.
|
|
13
|
+
*
|
|
14
|
+
* Four claims are reachable from nowhere else. That the built entry is
|
|
15
|
+
* executable and composes at all — every in-process tier constructs the
|
|
16
|
+
* services tree itself and so cannot fail on a missing registration in the
|
|
17
|
+
* entry module. That **stdout carries nothing but protocol** under `--stdio`,
|
|
18
|
+
* because stdout IS the transport there: a framework or third-party log written
|
|
19
|
+
* to it corrupts the JSON-RPC framing, and the handshake is what detects it.
|
|
20
|
+
* That an ephemeral port is published where a host can find it. And that
|
|
21
|
+
* shutdown actually terminates the process.
|
|
22
|
+
*
|
|
23
|
+
* Two properties of the transport shape this code.
|
|
24
|
+
*
|
|
25
|
+
* - **stderr is captured for REPORTING, never asserted empty.** With a client
|
|
26
|
+
* attached, log output routes over `window/logMessage`, so the stderr line
|
|
27
|
+
* count is log-level-dependent and unbounded — an assertion over it is
|
|
28
|
+
* vacuous in one configuration and flaky in another. A suite asking "did the
|
|
29
|
+
* logs corrupt the protocol?" reads {@link SpawnedServer.logMessages}.
|
|
30
|
+
* - **A publish fans out.** Diagnostics are captured append-only and read by
|
|
31
|
+
* index, the discipline `LspServerConnection.diagnostics` names: record the
|
|
32
|
+
* length before acting, then read the tail. A register-one-handler-per-wait
|
|
33
|
+
* scheme loses races instead, because `onNotification` keeps exactly ONE
|
|
34
|
+
* handler per method and a second registration silently displaces the first.
|
|
35
|
+
*
|
|
36
|
+
* **The port lookup is deliberately NOT part of the boot.**
|
|
37
|
+
* {@link SpawnedServer.port} is a method a caller invokes, so a head whose port
|
|
38
|
+
* publication is broken fails only the suite that asks for that port. Polling
|
|
39
|
+
* every head's port during the handshake would make one head's break red across
|
|
40
|
+
* every suite and destroy the per-transport asymmetry this tier exists to
|
|
41
|
+
* measure.
|
|
42
|
+
*/
|
|
43
|
+
|
|
44
|
+
import { type Harness } from '@hydranium/protocol/testing';
|
|
45
|
+
import { type ChildProcessWithoutNullStreams, spawn } from 'node:child_process';
|
|
46
|
+
import { existsSync } from 'node:fs';
|
|
47
|
+
import * as path from 'node:path';
|
|
48
|
+
import { pathToFileURL } from 'node:url';
|
|
49
|
+
import {
|
|
50
|
+
ExitNotification,
|
|
51
|
+
InitializeRequest,
|
|
52
|
+
InitializedNotification,
|
|
53
|
+
LogMessageNotification,
|
|
54
|
+
ShutdownRequest,
|
|
55
|
+
PublishDiagnosticsNotification,
|
|
56
|
+
createProtocolConnection,
|
|
57
|
+
type Diagnostic,
|
|
58
|
+
type InitializeParams,
|
|
59
|
+
type InitializeResult,
|
|
60
|
+
type LogMessageParams,
|
|
61
|
+
type ProtocolConnection,
|
|
62
|
+
type PublishDiagnosticsParams
|
|
63
|
+
} from 'vscode-languageserver-protocol/node';
|
|
64
|
+
import { type NextDiagnosticsOptions } from './lsp-server-connection.js';
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* Default bound on the `initialize` handshake, and the reason there is one at
|
|
68
|
+
* all: without it a child that never answers hangs until the test runner's own
|
|
69
|
+
* timeout, which reports as an anonymous hang and names neither the module nor
|
|
70
|
+
* what was on its streams.
|
|
71
|
+
*
|
|
72
|
+
* Sized for a COLD subprocess boot — several grammars plus whatever else the
|
|
73
|
+
* entry composes, on a machine already running the rest of the suite in
|
|
74
|
+
* parallel — so it is far past a runner's default and is not a latency
|
|
75
|
+
* measurement.
|
|
76
|
+
*/
|
|
77
|
+
export const SPAWNED_SERVER_BOOT_TIMEOUT_MS = 45_000;
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* What to give a test hook that boots or tears down a spawned server.
|
|
81
|
+
*
|
|
82
|
+
* Deliberately LARGER than {@link SPAWNED_SERVER_BOOT_TIMEOUT_MS}: the two
|
|
83
|
+
* budgets race, and the harness's own error is the one that names the module,
|
|
84
|
+
* the stdout prefix and the captured stderr. A hook budget at or below the boot
|
|
85
|
+
* budget wins that race and throws all of it away.
|
|
86
|
+
*/
|
|
87
|
+
export const SPAWNED_SERVER_HOOK_TIMEOUT_MS = 60_000;
|
|
88
|
+
|
|
89
|
+
/** Wait for a single post-boot publish or port answer, once the process is warm. */
|
|
90
|
+
const RESPONSE_TIMEOUT_MS = 15_000;
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* Grace between the graceful teardown and `SIGKILL`, applied TWICE — once to the
|
|
94
|
+
* `shutdown` request and once to the process exit. A child that hangs answering
|
|
95
|
+
* `shutdown` is a distinct fault from one that answers and then fails to exit,
|
|
96
|
+
* and a fallback covering only the second leaves teardown able to hang forever.
|
|
97
|
+
*/
|
|
98
|
+
const DEFAULT_KILL_TIMEOUT_MS = 3_000;
|
|
99
|
+
|
|
100
|
+
/** Default child arguments: the stdio transport, where stdout is the protocol channel. */
|
|
101
|
+
const DEFAULT_ARGS: readonly string[] = ['--stdio'];
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* How much of the child's stdout to keep for a boot-failure report. Bounded
|
|
105
|
+
* because the healthy content is protocol framing and unbounded protocol in an
|
|
106
|
+
* error message buries the one interesting case, which is a log line arriving
|
|
107
|
+
* BEFORE any framing.
|
|
108
|
+
*/
|
|
109
|
+
const STDOUT_PREFIX_LIMIT = 400;
|
|
110
|
+
|
|
111
|
+
/** Options for {@link SpawnedServer.port}. */
|
|
112
|
+
export interface PortLookupOptions {
|
|
113
|
+
/** Give up after this many requests. */
|
|
114
|
+
readonly attempts?: number;
|
|
115
|
+
/** Wait this long between requests. */
|
|
116
|
+
readonly intervalMs?: number;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
/** Configuration for {@link startSpawnedServer}. */
|
|
120
|
+
export interface SpawnedServerOptions {
|
|
121
|
+
/**
|
|
122
|
+
* Absolute path to the BUILT entry module to run — the artefact a host
|
|
123
|
+
* spawns, not its source. A test runner that builds before testing is what
|
|
124
|
+
* guarantees it exists; a missing file fails naming the path, because the
|
|
125
|
+
* alternative failure is an unexplained handshake timeout.
|
|
126
|
+
*/
|
|
127
|
+
readonly serverModule: string;
|
|
128
|
+
/** Arguments after the module path. Defaults to the stdio transport flag. */
|
|
129
|
+
readonly args?: readonly string[];
|
|
130
|
+
/**
|
|
131
|
+
* Absolute directory the child indexes as its single workspace folder.
|
|
132
|
+
* Omitted ⇒ no folders, so nothing is discovered or built.
|
|
133
|
+
*
|
|
134
|
+
* Pass a DISPOSABLE COPY of any committed fixture tree: an initial build runs
|
|
135
|
+
* the integrity rules, whose default silent mode persists repairs through the
|
|
136
|
+
* filesystem provider, so a child booted over the committed tree rewrites it.
|
|
137
|
+
*/
|
|
138
|
+
readonly workspaceRoot?: string;
|
|
139
|
+
/** Name reported for the workspace folder. Defaults to the folder's basename. */
|
|
140
|
+
readonly workspaceFolderName?: string;
|
|
141
|
+
/**
|
|
142
|
+
* Merged OVER the inherited environment, so a caller can raise the child's
|
|
143
|
+
* log level without touching the test worker's own environment.
|
|
144
|
+
*/
|
|
145
|
+
readonly env?: NodeJS.ProcessEnv;
|
|
146
|
+
/** Interpreter to run. Defaults to the current Node executable. */
|
|
147
|
+
readonly execPath?: string;
|
|
148
|
+
/** Fields merged over the default `initialize` params, after the workspace folder. */
|
|
149
|
+
readonly initializeParams?: Partial<InitializeParams>;
|
|
150
|
+
/** Bound on the handshake. Defaults to {@link SPAWNED_SERVER_BOOT_TIMEOUT_MS}. */
|
|
151
|
+
readonly bootTimeoutMs?: number;
|
|
152
|
+
/** Grace before `SIGKILL` during {@link SpawnedServer.dispose}. */
|
|
153
|
+
readonly killTimeoutMs?: number;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
/** A spawned server entry, initialized and ready to drive. */
|
|
157
|
+
export interface SpawnedServer extends Harness {
|
|
158
|
+
/** The client half of the LSP wire to the child. */
|
|
159
|
+
readonly connection: ProtocolConnection;
|
|
160
|
+
/** The child's process id, for asserting that teardown actually terminated it. */
|
|
161
|
+
readonly pid: number | undefined;
|
|
162
|
+
/** What `initialize` answered — the capability surface every head boots behind. */
|
|
163
|
+
readonly initializeResult: InitializeResult;
|
|
164
|
+
/** Every `publishDiagnostics` notification, in arrival order; append-only, never cleared. */
|
|
165
|
+
readonly diagnostics: ReadonlyArray<PublishDiagnosticsParams>;
|
|
166
|
+
/**
|
|
167
|
+
* Every `window/logMessage` notification, in arrival order; append-only.
|
|
168
|
+
*
|
|
169
|
+
* This is where a server's log lines actually go while a client is attached,
|
|
170
|
+
* precisely because stdout is the transport. So the assertion "the logs did
|
|
171
|
+
* not corrupt the protocol" reads THIS, and an stderr-based one is vacuous.
|
|
172
|
+
*/
|
|
173
|
+
readonly logMessages: ReadonlyArray<LogMessageParams>;
|
|
174
|
+
/** Everything the child has written to stderr so far. */
|
|
175
|
+
stderr(): string;
|
|
176
|
+
/**
|
|
177
|
+
* Ask the LSP wire for a head's published socket port.
|
|
178
|
+
*
|
|
179
|
+
* Polls rather than waits a fixed time: a port is published once that head's
|
|
180
|
+
* own startup resolves, so the first request can legitimately land before the
|
|
181
|
+
* handler is registered. Rejects naming the command, so an unpublished port
|
|
182
|
+
* fails as itself instead of as a later socket-connect timeout.
|
|
183
|
+
*/
|
|
184
|
+
port(command: string, options?: PortLookupOptions): Promise<number>;
|
|
185
|
+
/**
|
|
186
|
+
* Resolve with the diagnostics of the next `publishDiagnostics` matching
|
|
187
|
+
* `uri`. Reject on timeout so a missing publish fails fast instead of
|
|
188
|
+
* hanging.
|
|
189
|
+
*
|
|
190
|
+
* **Pass `{ fromIndex }` for anything a write provoked.** Record
|
|
191
|
+
* {@link diagnostics}`.length` BEFORE the triggering edit and hand it over:
|
|
192
|
+
* that is what makes the read immune both to a publish that arrives before
|
|
193
|
+
* the wait is armed and to an earlier publish for the same URI. Without it
|
|
194
|
+
* this answers "the next publish for one URI", which is the wrong question
|
|
195
|
+
* whenever one action fans out.
|
|
196
|
+
*/
|
|
197
|
+
nextDiagnostics(uri: string, timeoutMsOrOptions?: number | NextDiagnosticsOptions): Promise<Diagnostic[]>;
|
|
198
|
+
/**
|
|
199
|
+
* Graceful `shutdown` / `exit`, each bounded, then `SIGKILL`. Resolves with
|
|
200
|
+
* the child's exit code — `null` when a signal ended it, which is itself the
|
|
201
|
+
* observable that the graceful path did not work. Idempotent.
|
|
202
|
+
*/
|
|
203
|
+
dispose(): Promise<number | null>;
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
/** The captured streams, quoted into a boot-failure message. */
|
|
207
|
+
function bootDiagnosis(stdoutPrefix: string, stderr: string): string {
|
|
208
|
+
return (
|
|
209
|
+
`First bytes on stdout (the protocol channel under the stdio transport, so a log written ` +
|
|
210
|
+
`there corrupts the framing): ${JSON.stringify(stdoutPrefix) || '(nothing)'}. ` +
|
|
211
|
+
`Captured stderr: ${stderr || '(nothing)'}`
|
|
212
|
+
);
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
/**
|
|
216
|
+
* Spawn a built server entry and complete the `initialize` / `initialized`
|
|
217
|
+
* handshake.
|
|
218
|
+
*
|
|
219
|
+
* Rejects rather than hangs on all three ways a boot can fail — the module is
|
|
220
|
+
* not there, the child dies, the handshake never answers — and each rejection
|
|
221
|
+
* carries what the streams held, because the streams are the only evidence a
|
|
222
|
+
* dead child leaves. A failed boot leaves NO child behind: the process is
|
|
223
|
+
* killed before the rejection propagates, since an orphan holding a socket
|
|
224
|
+
* makes the next run's result meaningless.
|
|
225
|
+
*/
|
|
226
|
+
export async function startSpawnedServer(options: SpawnedServerOptions): Promise<SpawnedServer> {
|
|
227
|
+
const serverModule = path.resolve(options.serverModule);
|
|
228
|
+
if (!existsSync(serverModule)) {
|
|
229
|
+
throw new Error(
|
|
230
|
+
`Spawned-server module missing at ${serverModule}. This tier drives the BUILT artefact, so build the package that produces it before running the test.`
|
|
231
|
+
);
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
const child: ChildProcessWithoutNullStreams = spawn(
|
|
235
|
+
options.execPath ?? process.execPath,
|
|
236
|
+
[serverModule, ...(options.args ?? DEFAULT_ARGS)],
|
|
237
|
+
{
|
|
238
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
239
|
+
env: { ...process.env, ...options.env }
|
|
240
|
+
}
|
|
241
|
+
);
|
|
242
|
+
let stderrBuf = '';
|
|
243
|
+
child.stderr.on('data', chunk => {
|
|
244
|
+
stderrBuf += String(chunk);
|
|
245
|
+
});
|
|
246
|
+
// A second `data` listener beside the protocol reader's, so the bytes are
|
|
247
|
+
// both parsed and observable. Without it a log leaked to stdout is visible
|
|
248
|
+
// only as a framing error with nothing to name.
|
|
249
|
+
let stdoutPrefix = '';
|
|
250
|
+
child.stdout.on('data', chunk => {
|
|
251
|
+
if (stdoutPrefix.length < STDOUT_PREFIX_LIMIT) {
|
|
252
|
+
stdoutPrefix = (stdoutPrefix + String(chunk)).slice(0, STDOUT_PREFIX_LIMIT);
|
|
253
|
+
}
|
|
254
|
+
});
|
|
255
|
+
|
|
256
|
+
const connection = createProtocolConnection(child.stdout, child.stdin);
|
|
257
|
+
const diagnostics: PublishDiagnosticsParams[] = [];
|
|
258
|
+
/**
|
|
259
|
+
* Waiters armed by {@link SpawnedServer.nextDiagnostics}, fanned out to from
|
|
260
|
+
* the ONE handler below and registered before `listen()`, so no publish that
|
|
261
|
+
* races the handshake can be missed. A second `onNotification` for the same
|
|
262
|
+
* method would displace this one, taking the always-on capture with it.
|
|
263
|
+
*/
|
|
264
|
+
const waiters = new Set<(params: PublishDiagnosticsParams) => void>();
|
|
265
|
+
connection.onNotification(PublishDiagnosticsNotification.type, params => {
|
|
266
|
+
diagnostics.push(params);
|
|
267
|
+
for (const notify of [...waiters]) {
|
|
268
|
+
notify(params);
|
|
269
|
+
}
|
|
270
|
+
});
|
|
271
|
+
const logMessages: LogMessageParams[] = [];
|
|
272
|
+
connection.onNotification(LogMessageNotification.type, params => {
|
|
273
|
+
logMessages.push(params);
|
|
274
|
+
});
|
|
275
|
+
connection.listen();
|
|
276
|
+
|
|
277
|
+
const killTimeoutMs = options.killTimeoutMs ?? DEFAULT_KILL_TIMEOUT_MS;
|
|
278
|
+
|
|
279
|
+
/** Terminate unconditionally and wait for the child to be reaped. */
|
|
280
|
+
async function forceTerminate(): Promise<number | null> {
|
|
281
|
+
connection.dispose();
|
|
282
|
+
const exitCode = await new Promise<number | null>(resolve => {
|
|
283
|
+
if (child.exitCode !== null || child.signalCode !== null) {
|
|
284
|
+
resolve(child.exitCode);
|
|
285
|
+
return;
|
|
286
|
+
}
|
|
287
|
+
child.once('close', code => resolve(code));
|
|
288
|
+
child.kill('SIGKILL');
|
|
289
|
+
});
|
|
290
|
+
child.stdin.destroy();
|
|
291
|
+
child.stdout.destroy();
|
|
292
|
+
child.stderr.destroy();
|
|
293
|
+
return exitCode;
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
const rootUri = options.workspaceRoot ? pathToFileURL(options.workspaceRoot).toString() : null;
|
|
297
|
+
const initializeParams: InitializeParams = {
|
|
298
|
+
processId: process.pid,
|
|
299
|
+
rootUri,
|
|
300
|
+
workspaceFolders:
|
|
301
|
+
rootUri && options.workspaceRoot
|
|
302
|
+
? [{ uri: rootUri, name: options.workspaceFolderName ?? path.basename(options.workspaceRoot) }]
|
|
303
|
+
: null,
|
|
304
|
+
capabilities: {},
|
|
305
|
+
...options.initializeParams
|
|
306
|
+
};
|
|
307
|
+
|
|
308
|
+
const bootTimeoutMs = options.bootTimeoutMs ?? SPAWNED_SERVER_BOOT_TIMEOUT_MS;
|
|
309
|
+
let bootTimer: NodeJS.Timeout | undefined;
|
|
310
|
+
let onEarlyClose: ((code: number | null) => void) | undefined;
|
|
311
|
+
let initializeResult: InitializeResult;
|
|
312
|
+
try {
|
|
313
|
+
initializeResult = await new Promise<InitializeResult>((resolve, reject) => {
|
|
314
|
+
bootTimer = setTimeout(() => {
|
|
315
|
+
reject(
|
|
316
|
+
new Error(
|
|
317
|
+
`Spawned server ${serverModule} did not answer "initialize" within ${bootTimeoutMs}ms. ${bootDiagnosis(stdoutPrefix, stderrBuf)}`
|
|
318
|
+
)
|
|
319
|
+
);
|
|
320
|
+
}, bootTimeoutMs);
|
|
321
|
+
onEarlyClose = code => {
|
|
322
|
+
reject(
|
|
323
|
+
new Error(
|
|
324
|
+
`Spawned server ${serverModule} exited with code ${code} during the handshake. ${bootDiagnosis(stdoutPrefix, stderrBuf)}`
|
|
325
|
+
)
|
|
326
|
+
);
|
|
327
|
+
};
|
|
328
|
+
child.once('close', onEarlyClose);
|
|
329
|
+
child.once('error', reject);
|
|
330
|
+
connection.sendRequest(InitializeRequest.type, initializeParams).then(resolve, reject);
|
|
331
|
+
});
|
|
332
|
+
} catch (error: unknown) {
|
|
333
|
+
await forceTerminate();
|
|
334
|
+
throw error;
|
|
335
|
+
} finally {
|
|
336
|
+
clearTimeout(bootTimer);
|
|
337
|
+
if (onEarlyClose) {
|
|
338
|
+
child.off('close', onEarlyClose);
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
connection.sendNotification(InitializedNotification.type, {});
|
|
342
|
+
|
|
343
|
+
let disposal: Promise<number | null> | undefined;
|
|
344
|
+
|
|
345
|
+
/** Bound `promise` by `killTimeoutMs`, resolving either way — teardown never fails on a hang. */
|
|
346
|
+
function bounded(promise: Promise<unknown>): Promise<void> {
|
|
347
|
+
return new Promise<void>(resolve => {
|
|
348
|
+
const timer = setTimeout(resolve, killTimeoutMs);
|
|
349
|
+
promise.then(
|
|
350
|
+
() => {
|
|
351
|
+
clearTimeout(timer);
|
|
352
|
+
resolve();
|
|
353
|
+
},
|
|
354
|
+
() => {
|
|
355
|
+
clearTimeout(timer);
|
|
356
|
+
resolve();
|
|
357
|
+
}
|
|
358
|
+
);
|
|
359
|
+
});
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
async function terminate(): Promise<number | null> {
|
|
363
|
+
// Both halves are bounded. A child that hangs ANSWERING `shutdown` never
|
|
364
|
+
// reaches the exit wait, so a fallback guarding only the exit leaves
|
|
365
|
+
// teardown able to hang for as long as the test runner allows.
|
|
366
|
+
await bounded(connection.sendRequest(ShutdownRequest.type, undefined));
|
|
367
|
+
await bounded(Promise.resolve(connection.sendNotification(ExitNotification.type)));
|
|
368
|
+
// Dispose the connection first so the reader stops holding stdout open,
|
|
369
|
+
// then wait for the child to fully close (exit AND stdio drain), so no
|
|
370
|
+
// lingering handle outlives the test.
|
|
371
|
+
connection.dispose();
|
|
372
|
+
const exitCode = await new Promise<number | null>(resolve => {
|
|
373
|
+
if (child.exitCode !== null || child.signalCode !== null) {
|
|
374
|
+
resolve(child.exitCode);
|
|
375
|
+
return;
|
|
376
|
+
}
|
|
377
|
+
const killTimer = setTimeout(() => {
|
|
378
|
+
if (child.exitCode === null) {
|
|
379
|
+
child.kill('SIGKILL');
|
|
380
|
+
}
|
|
381
|
+
}, killTimeoutMs);
|
|
382
|
+
child.once('close', code => {
|
|
383
|
+
clearTimeout(killTimer);
|
|
384
|
+
resolve(code);
|
|
385
|
+
});
|
|
386
|
+
});
|
|
387
|
+
child.stdin.destroy();
|
|
388
|
+
child.stdout.destroy();
|
|
389
|
+
child.stderr.destroy();
|
|
390
|
+
return exitCode;
|
|
391
|
+
}
|
|
392
|
+
|
|
393
|
+
return {
|
|
394
|
+
connection,
|
|
395
|
+
pid: child.pid,
|
|
396
|
+
initializeResult,
|
|
397
|
+
diagnostics,
|
|
398
|
+
logMessages,
|
|
399
|
+
stderr: () => stderrBuf,
|
|
400
|
+
async port(command: string, portOptions: PortLookupOptions = {}): Promise<number> {
|
|
401
|
+
const attempts = portOptions.attempts ?? 40;
|
|
402
|
+
const intervalMs = portOptions.intervalMs ?? 100;
|
|
403
|
+
for (let attempt = 0; attempt < attempts; attempt++) {
|
|
404
|
+
const answer = await connection.sendRequest<number | undefined>(command).catch(() => undefined);
|
|
405
|
+
if (typeof answer === 'number' && answer > 0) {
|
|
406
|
+
return answer;
|
|
407
|
+
}
|
|
408
|
+
await new Promise(resolve => setTimeout(resolve, intervalMs));
|
|
409
|
+
}
|
|
410
|
+
throw new Error(`No port published for LSP request "${command}" after ${attempts} attempts`);
|
|
411
|
+
},
|
|
412
|
+
nextDiagnostics(uri: string, timeoutMsOrOptions?: number | NextDiagnosticsOptions): Promise<Diagnostic[]> {
|
|
413
|
+
const nextOptions: NextDiagnosticsOptions =
|
|
414
|
+
typeof timeoutMsOrOptions === 'number' ? { timeoutMs: timeoutMsOrOptions } : (timeoutMsOrOptions ?? {});
|
|
415
|
+
const timeoutMs = nextOptions.timeoutMs ?? RESPONSE_TIMEOUT_MS;
|
|
416
|
+
const { fromIndex } = nextOptions;
|
|
417
|
+
if (fromIndex !== undefined) {
|
|
418
|
+
// Replay from the capture first: the publish this call asks about may
|
|
419
|
+
// already have arrived, and a waiter only ever sees later ones.
|
|
420
|
+
const captured = diagnostics.slice(Math.max(0, fromIndex)).find(params => params.uri === uri);
|
|
421
|
+
if (captured) {
|
|
422
|
+
return Promise.resolve(captured.diagnostics);
|
|
423
|
+
}
|
|
424
|
+
}
|
|
425
|
+
return new Promise<Diagnostic[]>((resolve, reject) => {
|
|
426
|
+
const notify = (params: PublishDiagnosticsParams): void => {
|
|
427
|
+
if (params.uri !== uri) {
|
|
428
|
+
return;
|
|
429
|
+
}
|
|
430
|
+
clearTimeout(timer);
|
|
431
|
+
waiters.delete(notify);
|
|
432
|
+
resolve(params.diagnostics);
|
|
433
|
+
};
|
|
434
|
+
const timer = setTimeout(() => {
|
|
435
|
+
waiters.delete(notify);
|
|
436
|
+
const seen = diagnostics.slice(fromIndex ?? 0).map(params => params.uri);
|
|
437
|
+
reject(new Error(`Timed out waiting for diagnostics for ${uri}; published since: ${seen.join(', ') || '(nothing)'}`));
|
|
438
|
+
}, timeoutMs);
|
|
439
|
+
waiters.add(notify);
|
|
440
|
+
});
|
|
441
|
+
},
|
|
442
|
+
dispose(): Promise<number | null> {
|
|
443
|
+
disposal ??= terminate();
|
|
444
|
+
return disposal;
|
|
445
|
+
}
|
|
446
|
+
};
|
|
447
|
+
}
|