@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,187 @@
|
|
|
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 { Format, Logger, type Tracer } from '@hydranium/protocol';
|
|
11
|
+
import {
|
|
12
|
+
DefaultLangiumProfiler,
|
|
13
|
+
DocumentState,
|
|
14
|
+
MultiMap,
|
|
15
|
+
type ProfilingCategory,
|
|
16
|
+
type ProfilingRecord,
|
|
17
|
+
ProfilingTask
|
|
18
|
+
} from '@hydranium/langium';
|
|
19
|
+
import { type LogNameOptions } from './logger.js';
|
|
20
|
+
import { type ServerSharedServicesMinimal } from '../shared-services.js';
|
|
21
|
+
|
|
22
|
+
/** Langium's full profiling-category set — the default window {@link HydraniumLangiumProfiler.flush} aggregates. */
|
|
23
|
+
const ALL_CATEGORIES: readonly ProfilingCategory[] = ['parsing', 'linking', 'validating'];
|
|
24
|
+
|
|
25
|
+
/** Construction options for {@link HydraniumLangiumProfiler}. */
|
|
26
|
+
export interface LangiumProfilerOptions extends LogNameOptions {
|
|
27
|
+
/**
|
|
28
|
+
* Categories profiled while active. Defaults (via the base
|
|
29
|
+
* {@link DefaultLangiumProfiler}) to Langium's full set when omitted.
|
|
30
|
+
*/
|
|
31
|
+
readonly activeCategories?: Set<ProfilingCategory>;
|
|
32
|
+
/**
|
|
33
|
+
* Priority of the per-build flush pass at the `Validated` phase. The flush is
|
|
34
|
+
* normally the only pass at `Validated`, so order is immaterial; the option
|
|
35
|
+
* exists for symmetry with the other framework passes. Default
|
|
36
|
+
* {@link PROFILER_FLUSH_PASS_PRIORITY}.
|
|
37
|
+
*/
|
|
38
|
+
readonly flushPriority?: number;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/** Default priority of the profiler's per-build flush pass (see {@link LangiumProfilerOptions.flushPriority}). */
|
|
42
|
+
export const PROFILER_FLUSH_PASS_PRIORITY = 0;
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Framework adapter over Langium's {@link DefaultLangiumProfiler} that is
|
|
46
|
+
* **trace-gated** and emits a single **aggregated** per-category breakdown
|
|
47
|
+
* once per build through the framework {@link Tracer}, instead of one
|
|
48
|
+
* `console.table` dump per document.
|
|
49
|
+
*
|
|
50
|
+
* - **Aggregate, not per-document.** Langium creates one profiling task per
|
|
51
|
+
* document (`createTask('validating', languageId)`) and the stock
|
|
52
|
+
* {@link DefaultLangiumProfiler.dumpRecord} prints each as it completes —
|
|
53
|
+
* dozens of near-identical blocks, all labelled with the language id (the
|
|
54
|
+
* task identifier), so the per-document records carry no distinguishing
|
|
55
|
+
* information anyway. We instead accumulate records in {@link records} and
|
|
56
|
+
* {@link flush} one breakdown per category — self-time and invocation counts
|
|
57
|
+
* summed per `$type` across the whole build — on the terminal `Validated`
|
|
58
|
+
* build phase (self-registered in the constructor). One report per build, not
|
|
59
|
+
* one per file.
|
|
60
|
+
* - **Transport safety.** The stock per-record dump uses `console.table`, which
|
|
61
|
+
* is NOT in the set `patchConsole` reroutes; under `vscode-languageserver`'s
|
|
62
|
+
* `--stdio` transport `process.stdout` *is* the JSON-RPC channel, so the
|
|
63
|
+
* native ASCII grid corrupts the protocol stream. {@link createTask} bypasses
|
|
64
|
+
* `dumpRecord` entirely (records are stored, never grid-printed); {@link flush}
|
|
65
|
+
* emits one {@link Tracer} line per row.
|
|
66
|
+
* - **Opt-in / no production cost.** {@link isActive} is gated on the global
|
|
67
|
+
* `trace` threshold, so at the default `info` level (and even at `debug`)
|
|
68
|
+
* every Langium parse/link/validate guard (`profiler?.isActive(category)`)
|
|
69
|
+
* short-circuits to `false` and no task is ever created. The per-`$type`
|
|
70
|
+
* self-time is high-volume diagnostic detail, so it sits at the `trace` tier
|
|
71
|
+
* deliberately — `debug` keeps the readable one-line-per-phase
|
|
72
|
+
* `DocumentBuilder` overview without this spam. The gate is evaluated per
|
|
73
|
+
* call, so flipping the level at runtime turns profiling on/off without a
|
|
74
|
+
* restart. Langium's own `start`/`stop` category selection still applies *on
|
|
75
|
+
* top of* the trace gate.
|
|
76
|
+
*
|
|
77
|
+
* Registered eagerly (see `DEFAULT_EAGER_SERVICES`) so its `Validated`-phase
|
|
78
|
+
* flush pass is registered before the first build. Gives the per-grammar-rule /
|
|
79
|
+
* per-`$type` parse/link/validate self-time the framework's own
|
|
80
|
+
* `ServerTracer` / `ProfileSession` passes
|
|
81
|
+
* cannot produce (those cover the framework's passes *outside* Langium's
|
|
82
|
+
* parse/link/validate categories).
|
|
83
|
+
*/
|
|
84
|
+
export class HydraniumLangiumProfiler extends DefaultLangiumProfiler {
|
|
85
|
+
/** Component-tagged tracer (`LangiumProfiler`); the per-category tag is added per flush. */
|
|
86
|
+
protected readonly tracer: Tracer;
|
|
87
|
+
|
|
88
|
+
constructor(services: ServerSharedServicesMinimal, options: LangiumProfilerOptions = {}) {
|
|
89
|
+
super(options.activeCategories);
|
|
90
|
+
this.tracer = services.Tracer.for(options.logName ?? 'LangiumProfiler').trace('instantiated');
|
|
91
|
+
// Flush once per build on the terminal phase rather than once per document.
|
|
92
|
+
// By `Validated`, every parse/link/validate record for the batch is in.
|
|
93
|
+
// Registered as a build-phase pass (not a direct onBuildPhase listener) so
|
|
94
|
+
// every framework + adopter build-phase reaction shares one dispatcher.
|
|
95
|
+
services.workspace.BuildPhasePassService.register({
|
|
96
|
+
id: 'framework:langium-profiler:flush',
|
|
97
|
+
state: DocumentState.Validated,
|
|
98
|
+
priority: options.flushPriority ?? PROFILER_FLUSH_PASS_PRIORITY,
|
|
99
|
+
run: () => this.flush()
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* A category profiles only while the global threshold admits `trace` *and*
|
|
105
|
+
* Langium's category selection has it active. The trace gate is the master
|
|
106
|
+
* switch (zero cost at `info`/`debug`); the category set is the sub-selection.
|
|
107
|
+
*/
|
|
108
|
+
override isActive(category: ProfilingCategory): boolean {
|
|
109
|
+
return Logger.isLevelEnabled('trace') && super.isActive(category);
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
/**
|
|
113
|
+
* Accumulate each completed task's record in {@link records} for the
|
|
114
|
+
* end-of-build {@link flush}. Bypasses the base's `console.table`
|
|
115
|
+
* {@link DefaultLangiumProfiler.dumpRecord} (the `--stdio` hazard) — records
|
|
116
|
+
* are stored, never grid-printed.
|
|
117
|
+
*/
|
|
118
|
+
override createTask(category: ProfilingCategory, taskId: string): ProfilingTask {
|
|
119
|
+
if (!this.isActive(category)) {
|
|
120
|
+
throw new Error(`Category "${category}" is not active.`);
|
|
121
|
+
}
|
|
122
|
+
return new ProfilingTask(record => this.records.add(category, this.captureRecord(record)), taskId);
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
/**
|
|
126
|
+
* Snapshot a completed record's `entries` into an independent {@link MultiMap}.
|
|
127
|
+
* {@link ProfilingTask.stop} clears its `entries` immediately after invoking
|
|
128
|
+
* this callback, and the record holds that map by reference — so the read
|
|
129
|
+
* MUST happen now (the stock `dumpRecord` reads synchronously here too).
|
|
130
|
+
* Deferring to {@link flush} without this copy would see emptied entries.
|
|
131
|
+
*/
|
|
132
|
+
protected captureRecord(record: ProfilingRecord): ProfilingRecord {
|
|
133
|
+
const entries = new MultiMap<string, number>();
|
|
134
|
+
for (const key of record.entries.keys()) {
|
|
135
|
+
for (const value of record.entries.get(key)) {
|
|
136
|
+
entries.add(key, value);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
return { ...record, entries };
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
/**
|
|
143
|
+
* Emit one aggregated breakdown per category — self-time and invocation
|
|
144
|
+
* counts summed per `<languageId>.<$type>` across every record collected
|
|
145
|
+
* this build — then clear the window. Self-registered as a `Validated`-phase
|
|
146
|
+
* build pass, so it fires once per build, not per document. Pass explicit
|
|
147
|
+
* categories to flush a subset; defaults to all.
|
|
148
|
+
*
|
|
149
|
+
* `flush` is the sole reset point: because it clears each flushed category,
|
|
150
|
+
* memory is bounded per completed build. A build cancelled before `Validated`
|
|
151
|
+
* leaves its partial records to roll into the next build's flush (slightly
|
|
152
|
+
* inflated counts, self-correcting) rather than accumulating without bound.
|
|
153
|
+
*/
|
|
154
|
+
flush(...categories: ProfilingCategory[]): void {
|
|
155
|
+
const toFlush = categories.length > 0 ? categories : ALL_CATEGORIES;
|
|
156
|
+
for (const category of toFlush) {
|
|
157
|
+
const records = this.getRecords(category).toArray();
|
|
158
|
+
if (records.length === 0) {
|
|
159
|
+
continue;
|
|
160
|
+
}
|
|
161
|
+
const totals = new Map<string, { count: number; selfMs: number }>();
|
|
162
|
+
let totalMs = 0;
|
|
163
|
+
for (const record of records) {
|
|
164
|
+
totalMs += record.duration;
|
|
165
|
+
for (const key of record.entries.keys()) {
|
|
166
|
+
const name = `${record.identifier}.${key}`;
|
|
167
|
+
const values = record.entries.get(key);
|
|
168
|
+
const aggregate = totals.get(name) ?? { count: 0, selfMs: 0 };
|
|
169
|
+
aggregate.count += values.length;
|
|
170
|
+
aggregate.selfMs += values.reduce((sum, value) => sum + value, 0);
|
|
171
|
+
totals.set(name, aggregate);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
const rows = [...totals.entries()]
|
|
175
|
+
.map(([name, aggregate]) => ({ name, ...aggregate }))
|
|
176
|
+
.sort((left, right) => right.selfMs - left.selfMs);
|
|
177
|
+
|
|
178
|
+
const log = this.tracer.sub(category);
|
|
179
|
+
log.trace(`${category}: ${records.length} docs, ${Format.elapsed(totalMs)} total`);
|
|
180
|
+
for (const row of rows) {
|
|
181
|
+
const pct = totalMs > 0 ? Math.round((100 * row.selfMs) / totalMs) : 0;
|
|
182
|
+
log.trace(`${row.name} ×${row.count} ${pct}% ${Format.elapsed(row.selfMs)}`);
|
|
183
|
+
}
|
|
184
|
+
this.records.delete(category);
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
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
|
+
// Node-only diagnostics (`event-loop-monitor`, `memory-monitor`,
|
|
11
|
+
// `server-state-snapshot`) live in `@hydranium/core/node` — they pull
|
|
12
|
+
// `node:perf_hooks` / `node:v8`. `logger`/`lsp-logger`/`log-preamble` stay
|
|
13
|
+
// portable here (the file-tee + Node runtime details are injected, so the
|
|
14
|
+
// barrel stays browser-executable).
|
|
15
|
+
export * from './hydranium-langium-profiler.js';
|
|
16
|
+
export * from './log-preamble.js';
|
|
17
|
+
export * from './logger.js';
|
|
18
|
+
export * from './lsp-logger.js';
|
|
19
|
+
export * from './server-tracer.js';
|
|
@@ -0,0 +1,26 @@
|
|
|
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
|
+
// Dependency-light on purpose: no Langium / vscode-* imports, so a Playwright
|
|
11
|
+
// test helper (which correlates server logs to a workspace) can reuse the exact
|
|
12
|
+
// same token derivation without pulling the language-server module graph. The
|
|
13
|
+
// env-var-name conventions it pairs with live in `@hydranium/protocol`.
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Derive the `{workspace}` placeholder token from a workspace folder URI or
|
|
17
|
+
* filesystem path: its basename, with filename-unsafe characters replaced by
|
|
18
|
+
* `_`. The server (file-tee) and a log-correlating test harness call this on
|
|
19
|
+
* the same workspace path so they agree on the file name.
|
|
20
|
+
*/
|
|
21
|
+
export function toLogFileWorkspaceToken(uriOrPath: string): string {
|
|
22
|
+
const trimmed = uriOrPath.replace(/[/\\]+$/, '');
|
|
23
|
+
const lastSep = Math.max(trimmed.lastIndexOf('/'), trimmed.lastIndexOf('\\'));
|
|
24
|
+
const base = trimmed.slice(lastSep + 1);
|
|
25
|
+
return base.replace(/[^A-Za-z0-9._-]/g, '_') || 'workspace';
|
|
26
|
+
}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/********************************************************************************
|
|
2
|
+
* Copyright (c) 2023-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 { DEFER_START_MS, type Logger } from '@hydranium/protocol';
|
|
11
|
+
|
|
12
|
+
const DIVIDER = '───────────────────────────────────────────────────────────────────';
|
|
13
|
+
|
|
14
|
+
export interface LogPreambleOptions {
|
|
15
|
+
/** Product name shown in the session header. */
|
|
16
|
+
productName: string;
|
|
17
|
+
/** Resolved product version. */
|
|
18
|
+
version: string;
|
|
19
|
+
/**
|
|
20
|
+
* Threshold (ms) above which the framework emits per-phase rebuild detail in
|
|
21
|
+
* its document builder. Used in the format-conventions section so log readers
|
|
22
|
+
* know which timings expand into sub-phases. Defaults to 50.
|
|
23
|
+
*/
|
|
24
|
+
phaseDetailThresholdMs?: number;
|
|
25
|
+
/**
|
|
26
|
+
* Extra session-info lines appended to the header block (e.g. Node
|
|
27
|
+
* runtime / platform / pid / heap-limit / host). Empty on portable hosts;
|
|
28
|
+
* `@hydranium/core/node`'s `nodeSystemInfoLines()` supplies them on Node.
|
|
29
|
+
*/
|
|
30
|
+
systemInfoLines?: readonly string[];
|
|
31
|
+
/**
|
|
32
|
+
* Extra format-convention lines appended to the conventions block (e.g. the
|
|
33
|
+
* Node-only `[EventLoop]` / `[Memory]` monitor + memory-suffix behaviour).
|
|
34
|
+
* Empty on portable hosts; `@hydranium/core/node`'s `nodeConventionLines()`
|
|
35
|
+
* supplies them on Node.
|
|
36
|
+
*/
|
|
37
|
+
conventionLines?: readonly string[];
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Emits session info and log format conventions. The body is portable
|
|
42
|
+
* (browser-safe); Node-specific runtime details and monitor conventions are
|
|
43
|
+
* injected via {@link LogPreambleOptions.systemInfoLines} /
|
|
44
|
+
* {@link LogPreambleOptions.conventionLines} (see `@hydranium/core/node`).
|
|
45
|
+
*/
|
|
46
|
+
export function logPreamble(logger: Logger, options: LogPreambleOptions): void {
|
|
47
|
+
logSessionInfo(logger, options.productName, options.version, options.systemInfoLines ?? []);
|
|
48
|
+
logFormatConventions(logger, options.phaseDetailThresholdMs ?? 50, options.conventionLines ?? []);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
function logSessionInfo(logger: Logger, productName: string, version: string, systemInfoLines: readonly string[]): void {
|
|
52
|
+
const now = new Date();
|
|
53
|
+
const dateStr = now.toISOString().slice(0, 10); // YYYY-MM-DD, unambiguous across midnight
|
|
54
|
+
const lines = [
|
|
55
|
+
DIVIDER,
|
|
56
|
+
`${productName} server session`,
|
|
57
|
+
DIVIDER,
|
|
58
|
+
`date ${dateStr}`,
|
|
59
|
+
`version ${version}`,
|
|
60
|
+
...systemInfoLines,
|
|
61
|
+
DIVIDER
|
|
62
|
+
];
|
|
63
|
+
for (const line of lines) {
|
|
64
|
+
logger.info(line);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
function logFormatConventions(logger: Logger, phaseDetailThresholdMs: number, conventionLines: readonly string[]): void {
|
|
69
|
+
const lines = [
|
|
70
|
+
'Log format conventions',
|
|
71
|
+
DIVIDER,
|
|
72
|
+
'• Timing pairs: "<op> [#N start]" -> "<op> [#N done|cancelled|failed, Nms]"',
|
|
73
|
+
'• Rebuild tags: contextual metadata lives inside the status brackets, e.g.',
|
|
74
|
+
' "[#N start, event: didChangeContent, cancels #M]"',
|
|
75
|
+
`• Quiet ops: operations under ${DEFER_START_MS}ms are silent; lifecycle ops (save, load) always log`,
|
|
76
|
+
' (failures/cancels always log, even below the threshold - in that case',
|
|
77
|
+
' [start] is emitted retroactively so timestamps may be back-to-back while',
|
|
78
|
+
' the reported Nms is the real elapsed time)',
|
|
79
|
+
`• Phase detail: Parsed/IndexedContent/.../Validated shown only for rebuilds >=${phaseDetailThresholdMs}ms;`,
|
|
80
|
+
' workspace init always emits per-phase lines live',
|
|
81
|
+
...conventionLines,
|
|
82
|
+
DIVIDER
|
|
83
|
+
];
|
|
84
|
+
for (const line of lines) {
|
|
85
|
+
logger.info(line);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
@@ -0,0 +1,246 @@
|
|
|
1
|
+
/********************************************************************************
|
|
2
|
+
* Copyright (c) 2023-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 { Format } from '@hydranium/protocol';
|
|
11
|
+
import { currentMemoryUsage, onProcessEvent, processPid } from '../../util/environment.js';
|
|
12
|
+
|
|
13
|
+
/** Only append a memory suffix when the heap has moved by at least this much since the last log line. */
|
|
14
|
+
export const MEMORY_DELTA_BYTES = 5 * 1024 * 1024;
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Pluggable file-tee sink. The file-tee's only platform coupling is the
|
|
18
|
+
* actual disk write + directory create; routing those through an injected
|
|
19
|
+
* sink keeps this module free of `node:fs` so it stays on the portable `.`
|
|
20
|
+
* entry. `@hydranium/core/node` installs a `node:fs`-backed sink (see
|
|
21
|
+
* `installNodeLogFileSink`); when
|
|
22
|
+
* no sink is installed (browser / in-memory hosts) the file-tee is inert and
|
|
23
|
+
* lines fan out only to the LSP/console destination. Configuring a tee target
|
|
24
|
+
* (`HYDRANIUM_LOG_FILE`) is itself Node-only, so the inert path is never hit
|
|
25
|
+
* in a browser.
|
|
26
|
+
*/
|
|
27
|
+
export interface LogFileSink {
|
|
28
|
+
/** Append already-formatted text to the file at `path`. Must not throw. */
|
|
29
|
+
append(path: string, data: string): void;
|
|
30
|
+
/** Best-effort create of the parent directory for `path`. Must not throw. */
|
|
31
|
+
ensureDir(path: string): void;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
let fileSink: LogFileSink | undefined;
|
|
35
|
+
|
|
36
|
+
/** Install (or clear, with `undefined`) the file-tee sink. Idempotent. */
|
|
37
|
+
export function setLogFileSink(sink: LogFileSink | undefined): void {
|
|
38
|
+
fileSink = sink;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* File-tee state for `LspLogger`'s emit. When
|
|
43
|
+
* non-empty, every formatted log line is appended to the path in addition to
|
|
44
|
+
* its LSP `window/logMessage` / console destination (see {@link teeLogLine}).
|
|
45
|
+
* Diagnostic surface only — once the LSP connection binds, server logs route
|
|
46
|
+
* through `connection.console.*` and disappear from any pipe watching backend
|
|
47
|
+
* stdout; setting this path makes them visible to a headless test harness
|
|
48
|
+
* without scraping the client's Output view.
|
|
49
|
+
*
|
|
50
|
+
* The sink writes synchronously, so log lines preserve emission order; errors
|
|
51
|
+
* are swallowed because a failing log sink must not propagate.
|
|
52
|
+
* Append-only — the path is the consumer's responsibility to truncate / rotate.
|
|
53
|
+
*
|
|
54
|
+
* Raw configured target — may contain `{placeholder}` tokens (e.g.
|
|
55
|
+
* `{workspace}`) that are not known at module-load time.
|
|
56
|
+
*/
|
|
57
|
+
let logFileTemplate: string | undefined;
|
|
58
|
+
/** Fully-resolved target (no remaining placeholders). `undefined` while pending. */
|
|
59
|
+
let resolvedLogFilePath: string | undefined;
|
|
60
|
+
/** Placeholder values supplied so far via {@link resolveLogFilePlaceholder}. */
|
|
61
|
+
const logFilePlaceholders = new Map<string, string>();
|
|
62
|
+
/**
|
|
63
|
+
* Lines emitted while the target is still pending (placeholders unresolved).
|
|
64
|
+
* Flushed verbatim — preserving emission order — once the target resolves, so
|
|
65
|
+
* no startup line is ever dropped. Each entry already carries its trailing `\n`.
|
|
66
|
+
*/
|
|
67
|
+
const pendingLogLines: string[] = [];
|
|
68
|
+
|
|
69
|
+
/** Matches any remaining `{name}` placeholder token. */
|
|
70
|
+
const PLACEHOLDER_PATTERN = /\{[^}]+\}/;
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* Recompute {@link resolvedLogFilePath} from the template + known placeholders.
|
|
74
|
+
* Resolves (and flushes the pending buffer) only once no `{...}` token remains.
|
|
75
|
+
*/
|
|
76
|
+
function tryResolveLogFilePath(): void {
|
|
77
|
+
if (!logFileTemplate) {
|
|
78
|
+
resolvedLogFilePath = undefined;
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
let path = logFileTemplate;
|
|
82
|
+
for (const [name, value] of logFilePlaceholders) {
|
|
83
|
+
path = path.split(`{${name}}`).join(value);
|
|
84
|
+
}
|
|
85
|
+
if (PLACEHOLDER_PATTERN.test(path)) {
|
|
86
|
+
resolvedLogFilePath = undefined;
|
|
87
|
+
// Target is pending — guarantee the buffer is flushed even if the process
|
|
88
|
+
// exits before the remaining placeholders are ever supplied.
|
|
89
|
+
ensureFallbackHandler();
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
resolvedLogFilePath = path;
|
|
93
|
+
ensureLogDir(path);
|
|
94
|
+
flushPendingLogLines();
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* Best-effort create of the target's parent directory. Covers the headless-test
|
|
99
|
+
* case where the runner wipes the output directory before the server writes its
|
|
100
|
+
* log under it. Failures are swallowed — a log sink must never propagate.
|
|
101
|
+
*/
|
|
102
|
+
function ensureLogDir(filePath: string): void {
|
|
103
|
+
// No-op when no sink is installed (browser); the Node sink swallows its own errors.
|
|
104
|
+
fileSink?.ensureDir(filePath);
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/** Append the buffered lines to the resolved target, then clear the buffer. */
|
|
108
|
+
function flushPendingLogLines(): void {
|
|
109
|
+
if (!resolvedLogFilePath || pendingLogLines.length === 0) {
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
fileSink?.append(resolvedLogFilePath, pendingLogLines.join(''));
|
|
113
|
+
pendingLogLines.length = 0;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
* Set the file-tee target programmatically. Pass `undefined` to disable. The
|
|
118
|
+
* path may contain `{placeholder}` tokens (e.g. `{workspace}`); lines buffer
|
|
119
|
+
* until every token is supplied via {@link resolveLogFilePlaceholder}.
|
|
120
|
+
* Called by the `LspLogger` constructor's
|
|
121
|
+
* one-time `HYDRANIUM_LOG_FILE` env baseline (and by tests).
|
|
122
|
+
*/
|
|
123
|
+
export function setLogFilePath(path: string | undefined): void {
|
|
124
|
+
logFileTemplate = path && path.length > 0 ? path : undefined;
|
|
125
|
+
logFilePlaceholders.clear();
|
|
126
|
+
pendingLogLines.length = 0;
|
|
127
|
+
resolvedLogFilePath = undefined;
|
|
128
|
+
tryResolveLogFilePath();
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
/**
|
|
132
|
+
* Supply a value for a `{name}` placeholder in the configured target. Once the
|
|
133
|
+
* last placeholder is supplied the target resolves and any lines buffered while
|
|
134
|
+
* it was pending are flushed in emission order.
|
|
135
|
+
*/
|
|
136
|
+
export function resolveLogFilePlaceholder(name: string, value: string): void {
|
|
137
|
+
logFilePlaceholders.set(name, value);
|
|
138
|
+
tryResolveLogFilePath();
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
/**
|
|
142
|
+
* Last-resort flush for the case where the target never resolves (e.g. the
|
|
143
|
+
* server crashed before the workspace was known). Substitutes any remaining
|
|
144
|
+
* `{...}` token with a process-unique `_startup-<pid>` segment and flushes the
|
|
145
|
+
* buffer, so startup / failure lines are never lost. No-op when the target is
|
|
146
|
+
* already resolved or there is nothing buffered. Registered on `process.exit`
|
|
147
|
+
* as soon as an unresolved target is configured.
|
|
148
|
+
*/
|
|
149
|
+
export function flushLogFileFallback(): void {
|
|
150
|
+
if (!logFileTemplate || resolvedLogFilePath || pendingLogLines.length === 0) {
|
|
151
|
+
return;
|
|
152
|
+
}
|
|
153
|
+
resolvedLogFilePath = logFileTemplate.replace(/\{[^}]+\}/g, `_startup-${processPid() ?? 'unknown'}`);
|
|
154
|
+
ensureLogDir(resolvedLogFilePath);
|
|
155
|
+
flushPendingLogLines();
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
/** Registered at most once; flushes any pending buffer on process teardown. */
|
|
159
|
+
let fallbackHandlerRegistered = false;
|
|
160
|
+
function ensureFallbackHandler(): void {
|
|
161
|
+
if (fallbackHandlerRegistered) {
|
|
162
|
+
return;
|
|
163
|
+
}
|
|
164
|
+
fallbackHandlerRegistered = true;
|
|
165
|
+
// Node-only teardown flush; a no-op in a browser worker (no `exit` event).
|
|
166
|
+
onProcessEvent('exit', () => flushLogFileFallback());
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
/** Current resolved file-tee target. `undefined` when disabled or still pending. */
|
|
170
|
+
export function getLogFilePath(): string | undefined {
|
|
171
|
+
return resolvedLogFilePath;
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
/**
|
|
175
|
+
* Fan a single already-formatted log line out to the file-tee target, if one is
|
|
176
|
+
* configured. Called by `LspLogger`'s emit in
|
|
177
|
+
* addition to the LSP/console sink — log sinks fan out, they don't replace.
|
|
178
|
+
* While the target is still pending (unresolved `{placeholder}`), the line is
|
|
179
|
+
* buffered instead of dropped.
|
|
180
|
+
*/
|
|
181
|
+
export function teeLogLine(formatted: string): void {
|
|
182
|
+
if (!logFileTemplate) {
|
|
183
|
+
return;
|
|
184
|
+
}
|
|
185
|
+
const line = `${formatted}\n`;
|
|
186
|
+
if (resolvedLogFilePath) {
|
|
187
|
+
// The sink swallows its own errors; recursing into the logger here would
|
|
188
|
+
// re-enter emit and loop. The LSP/console sink already delivered the line.
|
|
189
|
+
fileSink?.append(resolvedLogFilePath, line);
|
|
190
|
+
} else {
|
|
191
|
+
pendingLogLines.push(line);
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
// Re-exported so the token derivation is reachable from the diagnostics barrel.
|
|
196
|
+
// It is defined in a standalone, dependency-light module so a Playwright test
|
|
197
|
+
// helper can import it directly without pulling the barrel's module graph.
|
|
198
|
+
export { toLogFileWorkspaceToken } from './log-file-token.js';
|
|
199
|
+
|
|
200
|
+
/**
|
|
201
|
+
* Shared options-base for every framework-bound service that derives a
|
|
202
|
+
* `Tracer` (or
|
|
203
|
+
* `Logger`) from its `services`
|
|
204
|
+
* constructor parameter. Carries the `logName` label used to identify the
|
|
205
|
+
* service in its log / trace output and in the startup instantiation trace.
|
|
206
|
+
*
|
|
207
|
+
* The field name reads from the adopter's perspective — `logName` is "the
|
|
208
|
+
* name this service appears under in the log". Distinct from
|
|
209
|
+
* `LspLoggerOptions.component`, which is the logger's own identity field
|
|
210
|
+
* (matches `AbstractLogger.component` and `Logger.for`'s argument).
|
|
211
|
+
*
|
|
212
|
+
* A framework service's constructor stores a tracer named by `logName` and
|
|
213
|
+
* emits a single instantiation trace. The fallback used when `logName` is
|
|
214
|
+
* absent is chosen per service: a fixed curated string where the slot has one
|
|
215
|
+
* canonical implementation, or `this.constructor.name` where it has swappable
|
|
216
|
+
* strategy bindings, so the log shows which implementation ran. The
|
|
217
|
+
* framework's default `Logger` level is `'info'`, so those trace lines are
|
|
218
|
+
* no-ops in production; raising the level to `trace` — directly or via the
|
|
219
|
+
* LSP-config-bound setting — before workspace load makes startup
|
|
220
|
+
* instantiation visible.
|
|
221
|
+
*/
|
|
222
|
+
export interface LogNameOptions {
|
|
223
|
+
/**
|
|
224
|
+
* Name passed to `Tracer.for(...)` / `Logger.for(...)` — the label the
|
|
225
|
+
* service appears under in its log / trace output. Optional; each
|
|
226
|
+
* service supplies its own default (a fixed curated string, or
|
|
227
|
+
* `this.constructor.name`). Override when the runtime class name is
|
|
228
|
+
* generic (anonymous adopter subclass) or when multiple instances of
|
|
229
|
+
* the same class are bound to distinct slots and the adopter wants to
|
|
230
|
+
* disambiguate them in the log.
|
|
231
|
+
*/
|
|
232
|
+
readonly logName?: string;
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
/**
|
|
236
|
+
* Format current memory as "heap used/total, rss N". Returns `''` where
|
|
237
|
+
* `process.memoryUsage` is unavailable (browser) so callers can append it
|
|
238
|
+
* unconditionally.
|
|
239
|
+
*/
|
|
240
|
+
export function formatMemory(): string {
|
|
241
|
+
const mem = currentMemoryUsage();
|
|
242
|
+
if (!mem) {
|
|
243
|
+
return '';
|
|
244
|
+
}
|
|
245
|
+
return `heap ${Format.bytes(mem.heapUsed)}/${Format.bytes(mem.heapTotal)}, rss ${Format.bytes(mem.rss)}`;
|
|
246
|
+
}
|