@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,119 @@
|
|
|
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
|
+
* Parse a document INTO THE WORKSPACE and hand back its typed semantic root.
|
|
11
|
+
*
|
|
12
|
+
* # What Langium's `parseHelper` leaves out
|
|
13
|
+
*
|
|
14
|
+
* `parseHelper` builds the text into a `LangiumDocument` and registers it on
|
|
15
|
+
* `LangiumDocuments`. It does not put the text on the workspace filesystem. For
|
|
16
|
+
* a single self-contained document that is enough; for anything a modelling
|
|
17
|
+
* language actually tests it is not, because the framework has readers that go
|
|
18
|
+
* to the filesystem rather than to the document registry:
|
|
19
|
+
*
|
|
20
|
+
* - project discovery reads descriptors through the `FileSystemProvider`, and a
|
|
21
|
+
* document whose project was never discovered gets no project-tier
|
|
22
|
+
* visibility — so a cross-project reference has nothing to resolve against;
|
|
23
|
+
* - `DocumentBuilder.update` re-reads a document's text from the provider, so a
|
|
24
|
+
* rebuild of a never-written document sees whatever the provider has, not
|
|
25
|
+
* what was parsed;
|
|
26
|
+
* - `getOrCreateDocument` for a URI not already registered loads it from the
|
|
27
|
+
* provider.
|
|
28
|
+
*
|
|
29
|
+
* The write is therefore not a convenience — it is what makes the document
|
|
30
|
+
* exist to the parts of the framework that do not consult `LangiumDocuments`.
|
|
31
|
+
*
|
|
32
|
+
* # Semantic root, not document root
|
|
33
|
+
*
|
|
34
|
+
* Grammars split two ways. Some make the meaningful declaration the document
|
|
35
|
+
* root itself; others wrap it, so the parse result is a container whose single
|
|
36
|
+
* populated property is the thing under test. This resolves both by checking
|
|
37
|
+
* the root against the guard first and then its direct children, which is why
|
|
38
|
+
* the caller supplies a type guard rather than a type argument: the narrowing
|
|
39
|
+
* has to happen at runtime, on a value whose shape only the guard knows.
|
|
40
|
+
*
|
|
41
|
+
* # Throws rather than asserting
|
|
42
|
+
*
|
|
43
|
+
* A syntax error makes every later assertion meaningless, so it is reported
|
|
44
|
+
* here — but through a thrown error, not a test framework's `expect`. Reaching
|
|
45
|
+
* for `expect` would bind this helper to one runner and put a global in a
|
|
46
|
+
* shipped module; a throw carries the offending messages just as well and reads
|
|
47
|
+
* the same under vitest, jest and a bare script.
|
|
48
|
+
*
|
|
49
|
+
* There is deliberately NO `$document` assignment. Langium sets `$document` on
|
|
50
|
+
* the parse root, and `AstUtils.getDocument` walks `$container` upwards from any
|
|
51
|
+
* descendant, so a returned child is already reachable to its document without
|
|
52
|
+
* a cast onto a read-only field.
|
|
53
|
+
*/
|
|
54
|
+
import { AstUtils, URI } from '@hydranium/langium';
|
|
55
|
+
import { parseHelper } from '@hydranium/langium/test';
|
|
56
|
+
/**
|
|
57
|
+
* Build a parse function over `services` that returns roots narrowed by
|
|
58
|
+
* `guard`.
|
|
59
|
+
*
|
|
60
|
+
* The returned function is reusable across a suite and each call parses one
|
|
61
|
+
* document, so several calls against the same services build a linked
|
|
62
|
+
* multi-document workspace — which is the point: a cross-reference needs a
|
|
63
|
+
* target, and the target has to have been written too.
|
|
64
|
+
*
|
|
65
|
+
* `documentUri` is worth passing explicitly whenever the URI matters — a
|
|
66
|
+
* project-relative location, a specific file extension in a multi-grammar
|
|
67
|
+
* workspace. Without it Langium mints a counter-based `file:///N<ext>` URI,
|
|
68
|
+
* which lands every document at the workspace root under the first extension
|
|
69
|
+
* the language declares.
|
|
70
|
+
*/
|
|
71
|
+
export function makeParseSemanticRoot(services, guard) {
|
|
72
|
+
const parse = parseHelper(services);
|
|
73
|
+
// Typed writable on `ServerSharedServices`; widened back to Langium's
|
|
74
|
+
// read-only slot type by `LangiumCoreServices` on the parameter, so the
|
|
75
|
+
// narrowing happens once here instead of at the write.
|
|
76
|
+
const fileSystem = services.shared.workspace.FileSystemProvider;
|
|
77
|
+
return async (text, options = {}) => {
|
|
78
|
+
// BEFORE the parse whenever the URI is known, because the build the parse
|
|
79
|
+
// triggers already has filesystem readers in it — project discovery reads
|
|
80
|
+
// the descriptor off the provider during that build, and a file not yet
|
|
81
|
+
// written is reported as unparseable, so the document's own project is
|
|
82
|
+
// missing for the build that matters.
|
|
83
|
+
if (options.documentUri !== undefined) {
|
|
84
|
+
await fileSystem.writeFile(URI.parse(options.documentUri), text);
|
|
85
|
+
}
|
|
86
|
+
const document = await parse(text, options);
|
|
87
|
+
// Only when the caller left the URI to Langium: the parse is what mints
|
|
88
|
+
// it, so the write cannot precede it, and it has to land on the URI the
|
|
89
|
+
// document was actually registered under or the two identities diverge
|
|
90
|
+
// and every filesystem reader sees nothing.
|
|
91
|
+
if (options.documentUri === undefined) {
|
|
92
|
+
await fileSystem.writeFile(URI.parse(document.textDocument.uri), text);
|
|
93
|
+
}
|
|
94
|
+
const expectedLexerErrors = options.lexerErrors ?? 0;
|
|
95
|
+
const expectedParserErrors = options.parserErrors ?? 0;
|
|
96
|
+
const lexerErrors = document.parseResult.lexerErrors;
|
|
97
|
+
const parserErrors = document.parseResult.parserErrors;
|
|
98
|
+
if (lexerErrors.length !== expectedLexerErrors) {
|
|
99
|
+
throw new Error(`Expected ${expectedLexerErrors} lexer error(s) in ${document.textDocument.uri}, got ${lexerErrors.length}:\n` +
|
|
100
|
+
lexerErrors.map(error => ` ${error.message}`).join('\n'));
|
|
101
|
+
}
|
|
102
|
+
if (parserErrors.length !== expectedParserErrors) {
|
|
103
|
+
throw new Error(`Expected ${expectedParserErrors} parser error(s) in ${document.textDocument.uri}, got ${parserErrors.length}:\n` +
|
|
104
|
+
parserErrors.map(error => ` ${error.message}`).join('\n'));
|
|
105
|
+
}
|
|
106
|
+
const root = document.parseResult.value;
|
|
107
|
+
if (guard(root)) {
|
|
108
|
+
return root;
|
|
109
|
+
}
|
|
110
|
+
for (const child of AstUtils.streamContents(root)) {
|
|
111
|
+
if (guard(child)) {
|
|
112
|
+
return child;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
throw new Error(`No semantic root matching the guard in ${document.textDocument.uri}; the parse root is '${root.$type}' ` +
|
|
116
|
+
`with children ${[...AstUtils.streamContents(root)].map(child => `'${child.$type}'`).join(', ') || '(none)'}.`);
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
//# sourceMappingURL=parse-semantic-root.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse-semantic-root.js","sourceRoot":"","sources":["../../src/testing/parse-semantic-root.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,80 @@
|
|
|
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
|
+
import type { BrowserRuntimeSample, BrowserStateReport } from '@hydranium/protocol';
|
|
10
|
+
/**
|
|
11
|
+
* Structural subset of a Playwright `Page` used by the bridge — declared locally
|
|
12
|
+
* so this module imports nothing from `@playwright/test` (an optional peer). The
|
|
13
|
+
* single-argument `evaluate` matches Playwright's `page.evaluate(pageFunction)`.
|
|
14
|
+
*/
|
|
15
|
+
export interface EvaluatablePage {
|
|
16
|
+
evaluate<R>(pageFunction: () => R | Promise<R>): Promise<R>;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Structural subset of a Playwright `CDPSession` — `send(method, params?)` plus the
|
|
20
|
+
* EventEmitter `on`/`off` for streamed responses. Declared locally so this module
|
|
21
|
+
* keeps its zero-dependency-on-`@playwright/test` discipline; the adopter obtains
|
|
22
|
+
* the real session with `page.context().newCDPSession(page)` and passes it in.
|
|
23
|
+
*
|
|
24
|
+
* CDP is a driver-side protocol — a session can only be opened by the process
|
|
25
|
+
* DRIVING the browser (Playwright), never by page JS on itself. That is why the
|
|
26
|
+
* CDP-backed captures ({@link captureBrowserRuntimeSample}, {@link captureBrowserHeapSnapshot})
|
|
27
|
+
* are e2e-only, whereas the page-side `page.evaluate` read this bridge also performs
|
|
28
|
+
* has a live counterpart in the frontend's "Dump Frontend State" command. The
|
|
29
|
+
* CDP captures also need no cross-origin isolation.
|
|
30
|
+
*
|
|
31
|
+
* `send`/`on`/`off` are declared as METHODS (not arrow-typed properties) on purpose:
|
|
32
|
+
* TypeScript checks method parameters bivariantly, so Playwright's `CDPSession` —
|
|
33
|
+
* whose `send` is typed per-method — is assignable to this neutral type with NO cast
|
|
34
|
+
* (`const cdp: CdpSession = await page.context().newCDPSession(page)`). Switching them
|
|
35
|
+
* to arrow properties would force contravariant checks and break that plug-in.
|
|
36
|
+
*/
|
|
37
|
+
export interface CdpSession {
|
|
38
|
+
send(method: string, params?: Record<string, unknown>): Promise<unknown>;
|
|
39
|
+
on(event: string, handler: (payload: unknown) => void): void;
|
|
40
|
+
off?(event: string, handler: (payload: unknown) => void): void;
|
|
41
|
+
}
|
|
42
|
+
/** Default filename for the CDP renderer heap snapshot — the browser counterpart to the server's `server-heap`. */
|
|
43
|
+
export declare const BROWSER_HEAP_SNAPSHOT_FILE = "browser-heap.heapsnapshot";
|
|
44
|
+
/**
|
|
45
|
+
* Capture a renderer sample via CDP `Performance.getMetrics` (enabling the domain
|
|
46
|
+
* first). Maps the CDP `{name, value}` list onto the named {@link BrowserRuntimeSample}
|
|
47
|
+
* fields — `nodes`/`jsEventListeners`/`documents`/`frames`/`layoutCount`/
|
|
48
|
+
* `recalcStyleCount` + JS-heap used/total the `performance.memory` triple cannot
|
|
49
|
+
* give — omitting counters the runtime did not report.
|
|
50
|
+
*/
|
|
51
|
+
export declare function captureBrowserRuntimeSample(cdp: CdpSession): Promise<BrowserRuntimeSample>;
|
|
52
|
+
/** Per-field `after − before` for the numeric counters present in BOTH samples; others are omitted. */
|
|
53
|
+
export declare function browserRuntimeDelta(before: BrowserRuntimeSample, after: BrowserRuntimeSample): BrowserRuntimeSample;
|
|
54
|
+
/**
|
|
55
|
+
* Capture the renderer's V8 heap snapshot via CDP `HeapProfiler.takeHeapSnapshot`
|
|
56
|
+
* (enabling the domain first) — the browser counterpart to the server's
|
|
57
|
+
* `server-heap.heapsnapshot`, giving the renderer the same retained-object-graph
|
|
58
|
+
* view. The snapshot streams as `addHeapSnapshotChunk` events; the chunks are
|
|
59
|
+
* concatenated and written to `sessionDir/<fileName>`. Returns the filename.
|
|
60
|
+
*/
|
|
61
|
+
export declare function captureBrowserHeapSnapshot(cdp: CdpSession, sessionDir: string, fileName?: string): Promise<string>;
|
|
62
|
+
/**
|
|
63
|
+
* Start recording the main-thread timeline in the page — call BEFORE the scenario
|
|
64
|
+
* body so long tasks + user-timing spans accrue during it. Installs a
|
|
65
|
+
* `PerformanceObserver` (for the entry types the runtime supports, so it degrades
|
|
66
|
+
* cleanly where `longtask` is absent) and stashes it on `window` for
|
|
67
|
+
* {@link bridgeBrowserState} to stop. A no-op observer when no type is supported.
|
|
68
|
+
*/
|
|
69
|
+
export declare function startBrowserTimeline(page: EvaluatablePage): Promise<void>;
|
|
70
|
+
/**
|
|
71
|
+
* Capture the browser-origin state AFTER the scenario body — the renderer runtime
|
|
72
|
+
* (precise `measureUserAgentSpecificMemory`, else coarse `performance.memory`, else
|
|
73
|
+
* `unavailable`) as a single-point {@link BrowserRuntimeReport} plus the timeline
|
|
74
|
+
* collected since {@link startBrowserTimeline} (stopping its observer) — and write
|
|
75
|
+
* `browser-timeline.json` into `sessionDir`. The runtime report is RETURNED (not
|
|
76
|
+
* written) so the caller can supersede it with the richer two-point CDP report
|
|
77
|
+
* before writing the single `browser-runtime.json`.
|
|
78
|
+
*/
|
|
79
|
+
export declare function bridgeBrowserState(page: EvaluatablePage, sessionDir: string): Promise<BrowserStateReport>;
|
|
80
|
+
//# sourceMappingURL=browser-capture-bridge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browser-capture-bridge.d.ts","sourceRoot":"","sources":["../../../src/testing/playwright/browser-capture-bridge.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAwBlF,OAAO,KAAK,EAAwB,oBAAoB,EAAE,kBAAkB,EAAwB,MAAM,qBAAqB,CAAC;AAIhI;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC7B,QAAQ,CAAC,CAAC,EAAE,YAAY,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;CAC9D;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,WAAW,UAAU;IACxB,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACzE,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,GAAG,IAAI,CAAC;IAC7D,GAAG,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,GAAG,IAAI,CAAC;CACjE;AAiBD,mHAAmH;AACnH,eAAO,MAAM,0BAA0B,8BAA8B,CAAC;AAEtE;;;;;;GAMG;AACH,wBAAsB,2BAA2B,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAgBhG;AAED,uGAAuG;AACvG,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,oBAAoB,EAAE,KAAK,EAAE,oBAAoB,GAAG,oBAAoB,CAUnH;AAED;;;;;;GAMG;AACH,wBAAsB,0BAA0B,CAC7C,GAAG,EAAE,UAAU,EACf,UAAU,EAAE,MAAM,EAClB,QAAQ,GAAE,MAAmC,GAC7C,OAAO,CAAC,MAAM,CAAC,CAmBjB;AAiCD;;;;;;GAMG;AACH,wBAAsB,oBAAoB,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAoB/E;AAED;;;;;;;;GAQG;AACH,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC,CA+B/G"}
|
|
@@ -0,0 +1,161 @@
|
|
|
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
|
+
import { writeFileSync } from 'node:fs';
|
|
10
|
+
import { join } from 'node:path';
|
|
11
|
+
/** CDP `Performance.getMetrics` metric name → the {@link BrowserRuntimeSample} field it populates. */
|
|
12
|
+
const CDP_METRIC_FIELDS = {
|
|
13
|
+
JSHeapUsedSize: 'jsHeapUsedBytes',
|
|
14
|
+
JSHeapTotalSize: 'jsHeapTotalBytes',
|
|
15
|
+
Nodes: 'nodes',
|
|
16
|
+
JSEventListeners: 'jsEventListeners',
|
|
17
|
+
Documents: 'documents',
|
|
18
|
+
Frames: 'frames',
|
|
19
|
+
LayoutCount: 'layoutCount',
|
|
20
|
+
RecalcStyleCount: 'recalcStyleCount'
|
|
21
|
+
};
|
|
22
|
+
/** Numeric fields of a {@link BrowserRuntimeSample} — the CDP counters + JS-heap, which alone carry a delta. */
|
|
23
|
+
const NUMERIC_SAMPLE_FIELDS = Object.values(CDP_METRIC_FIELDS);
|
|
24
|
+
/** Default filename for the CDP renderer heap snapshot — the browser counterpart to the server's `server-heap`. */
|
|
25
|
+
export const BROWSER_HEAP_SNAPSHOT_FILE = 'browser-heap.heapsnapshot';
|
|
26
|
+
/**
|
|
27
|
+
* Capture a renderer sample via CDP `Performance.getMetrics` (enabling the domain
|
|
28
|
+
* first). Maps the CDP `{name, value}` list onto the named {@link BrowserRuntimeSample}
|
|
29
|
+
* fields — `nodes`/`jsEventListeners`/`documents`/`frames`/`layoutCount`/
|
|
30
|
+
* `recalcStyleCount` + JS-heap used/total the `performance.memory` triple cannot
|
|
31
|
+
* give — omitting counters the runtime did not report.
|
|
32
|
+
*/
|
|
33
|
+
export async function captureBrowserRuntimeSample(cdp) {
|
|
34
|
+
await cdp.send('Performance.enable');
|
|
35
|
+
try {
|
|
36
|
+
const result = (await cdp.send('Performance.getMetrics'));
|
|
37
|
+
const sample = {};
|
|
38
|
+
for (const metric of result.metrics ?? []) {
|
|
39
|
+
const field = CDP_METRIC_FIELDS[metric.name];
|
|
40
|
+
if (field !== undefined) {
|
|
41
|
+
sample[field] = metric.value;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
return sample;
|
|
45
|
+
}
|
|
46
|
+
finally {
|
|
47
|
+
// Balance the enable so the domain is not left on for the session's lifetime.
|
|
48
|
+
await cdp.send('Performance.disable').catch(() => undefined);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
/** Per-field `after − before` for the numeric counters present in BOTH samples; others are omitted. */
|
|
52
|
+
export function browserRuntimeDelta(before, after) {
|
|
53
|
+
const delta = {};
|
|
54
|
+
for (const field of NUMERIC_SAMPLE_FIELDS) {
|
|
55
|
+
const from = before[field];
|
|
56
|
+
const to = after[field];
|
|
57
|
+
if (typeof from === 'number' && typeof to === 'number') {
|
|
58
|
+
delta[field] = to - from;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
return delta;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Capture the renderer's V8 heap snapshot via CDP `HeapProfiler.takeHeapSnapshot`
|
|
65
|
+
* (enabling the domain first) — the browser counterpart to the server's
|
|
66
|
+
* `server-heap.heapsnapshot`, giving the renderer the same retained-object-graph
|
|
67
|
+
* view. The snapshot streams as `addHeapSnapshotChunk` events; the chunks are
|
|
68
|
+
* concatenated and written to `sessionDir/<fileName>`. Returns the filename.
|
|
69
|
+
*/
|
|
70
|
+
export async function captureBrowserHeapSnapshot(cdp, sessionDir, fileName = BROWSER_HEAP_SNAPSHOT_FILE) {
|
|
71
|
+
await cdp.send('HeapProfiler.enable');
|
|
72
|
+
const chunks = [];
|
|
73
|
+
const onChunk = (payload) => {
|
|
74
|
+
const chunk = payload.chunk;
|
|
75
|
+
if (typeof chunk === 'string') {
|
|
76
|
+
chunks.push(chunk);
|
|
77
|
+
}
|
|
78
|
+
};
|
|
79
|
+
cdp.on('HeapProfiler.addHeapSnapshotChunk', onChunk);
|
|
80
|
+
try {
|
|
81
|
+
await cdp.send('HeapProfiler.takeHeapSnapshot', { reportProgress: false });
|
|
82
|
+
}
|
|
83
|
+
finally {
|
|
84
|
+
cdp.off?.('HeapProfiler.addHeapSnapshotChunk', onChunk);
|
|
85
|
+
// Balance the enable so the domain is not left on for the session's lifetime.
|
|
86
|
+
await cdp.send('HeapProfiler.disable').catch(() => undefined);
|
|
87
|
+
}
|
|
88
|
+
writeFileSync(join(sessionDir, fileName), chunks.join(''));
|
|
89
|
+
return fileName;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Start recording the main-thread timeline in the page — call BEFORE the scenario
|
|
93
|
+
* body so long tasks + user-timing spans accrue during it. Installs a
|
|
94
|
+
* `PerformanceObserver` (for the entry types the runtime supports, so it degrades
|
|
95
|
+
* cleanly where `longtask` is absent) and stashes it on `window` for
|
|
96
|
+
* {@link bridgeBrowserState} to stop. A no-op observer when no type is supported.
|
|
97
|
+
*/
|
|
98
|
+
export async function startBrowserTimeline(page) {
|
|
99
|
+
await page.evaluate(() => {
|
|
100
|
+
const key = '__hydraniumBrowserTimeline__';
|
|
101
|
+
const scope = globalThis;
|
|
102
|
+
const entries = [];
|
|
103
|
+
const handle = { entries };
|
|
104
|
+
const ObserverCtor = globalThis.PerformanceObserver;
|
|
105
|
+
const supported = ObserverCtor?.supportedEntryTypes ?? [];
|
|
106
|
+
const types = ['longtask', 'measure'].filter(type => supported.includes(type));
|
|
107
|
+
if (ObserverCtor && types.length > 0) {
|
|
108
|
+
const observer = new ObserverCtor(list => {
|
|
109
|
+
for (const entry of list.getEntries()) {
|
|
110
|
+
entries.push({ name: entry.name, entryType: entry.entryType, startTimeMs: entry.startTime, durationMs: entry.duration });
|
|
111
|
+
}
|
|
112
|
+
});
|
|
113
|
+
observer.observe({ entryTypes: types });
|
|
114
|
+
handle.observer = observer;
|
|
115
|
+
}
|
|
116
|
+
scope[key] = handle;
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Capture the browser-origin state AFTER the scenario body — the renderer runtime
|
|
121
|
+
* (precise `measureUserAgentSpecificMemory`, else coarse `performance.memory`, else
|
|
122
|
+
* `unavailable`) as a single-point {@link BrowserRuntimeReport} plus the timeline
|
|
123
|
+
* collected since {@link startBrowserTimeline} (stopping its observer) — and write
|
|
124
|
+
* `browser-timeline.json` into `sessionDir`. The runtime report is RETURNED (not
|
|
125
|
+
* written) so the caller can supersede it with the richer two-point CDP report
|
|
126
|
+
* before writing the single `browser-runtime.json`.
|
|
127
|
+
*/
|
|
128
|
+
export async function bridgeBrowserState(page, sessionDir) {
|
|
129
|
+
const state = await page.evaluate(async () => {
|
|
130
|
+
const key = '__hydraniumBrowserTimeline__';
|
|
131
|
+
const scope = globalThis;
|
|
132
|
+
const perf = globalThis.performance;
|
|
133
|
+
let runtime = { source: 'unavailable', after: {} };
|
|
134
|
+
if (perf?.measureUserAgentSpecificMemory) {
|
|
135
|
+
try {
|
|
136
|
+
const result = await perf.measureUserAgentSpecificMemory();
|
|
137
|
+
runtime = { source: 'measureUserAgentSpecificMemory', after: { totalBytes: result.bytes, breakdown: result.breakdown } };
|
|
138
|
+
}
|
|
139
|
+
catch {
|
|
140
|
+
// COI missing or rate-limited — fall through to the coarse fallback.
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
if (runtime.source === 'unavailable' && perf?.memory) {
|
|
144
|
+
runtime = {
|
|
145
|
+
source: 'performance.memory',
|
|
146
|
+
after: {
|
|
147
|
+
jsHeapUsedBytes: perf.memory.usedJSHeapSize,
|
|
148
|
+
jsHeapTotalBytes: perf.memory.totalJSHeapSize,
|
|
149
|
+
jsHeapLimitBytes: perf.memory.jsHeapSizeLimit
|
|
150
|
+
}
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
const handle = scope[key];
|
|
154
|
+
handle?.observer?.disconnect();
|
|
155
|
+
const timeline = handle ? [...handle.entries] : [];
|
|
156
|
+
return { runtime, timeline };
|
|
157
|
+
});
|
|
158
|
+
writeFileSync(join(sessionDir, 'browser-timeline.json'), JSON.stringify(state.timeline, undefined, 2));
|
|
159
|
+
return state;
|
|
160
|
+
}
|
|
161
|
+
//# sourceMappingURL=browser-capture-bridge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browser-capture-bridge.js","sourceRoot":"","sources":["../../../src/testing/playwright/browser-capture-bridge.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,132 @@
|
|
|
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
|
+
import { type BrowserRuntimeSample, type LatencyReport, type ProfileCaptureOptions, type ProfilingManifest } from '@hydranium/protocol';
|
|
10
|
+
import { type CdpSession, type EvaluatablePage } from './browser-capture-bridge.js';
|
|
11
|
+
/**
|
|
12
|
+
* Env flag that opts a run into e2e profiling. Its presence (any non-empty value)
|
|
13
|
+
* is the switch — {@link withE2EProfiling} is an inert pass-through when it is
|
|
14
|
+
* unset, so a spec can keep the wrapper permanently and only capture on demand.
|
|
15
|
+
*/
|
|
16
|
+
export declare const DEFAULT_PROFILE_E2E_ENV = "HYDRANIUM_PROFILE_E2E";
|
|
17
|
+
/** True when the e2e profiling env flag is set to a non-empty value. */
|
|
18
|
+
export declare function isE2EProfilingEnabled(): boolean;
|
|
19
|
+
/**
|
|
20
|
+
* The environment a SPAWNED server needs for an e2e profiling run to have
|
|
21
|
+
* anything to report — spread into the `env` of whatever launches the server
|
|
22
|
+
* (Playwright's `webServer`, a `spawn`), since a child process inherits only
|
|
23
|
+
* what its launcher hands it.
|
|
24
|
+
*
|
|
25
|
+
* {@link finishE2EProfiling} calls `hooks.getLatency()`, but the collector that
|
|
26
|
+
* answers it is installed by `latencyFromEnv` in the server process and is
|
|
27
|
+
* off unless `HYDRANIUM_LATENCY` is set there. Setting only the profiling flag
|
|
28
|
+
* therefore yields a bundle whose `server-latency.json` is empty — a silent hole
|
|
29
|
+
* rather than a failure.
|
|
30
|
+
*
|
|
31
|
+
* Empty off a run with profiling disabled, so an unconditional spread leaves a
|
|
32
|
+
* normal run's environment untouched. An explicitly-set `HYDRANIUM_LATENCY` is
|
|
33
|
+
* passed through rather than overwritten.
|
|
34
|
+
*/
|
|
35
|
+
export declare function e2eProfilingServerEnv(env?: Record<string, string | undefined>): Record<string, string>;
|
|
36
|
+
/** The default capture dimensions — every sampled dimension except the heavy `heapSnapshot`. */
|
|
37
|
+
export declare const DEFAULT_E2E_DIMENSIONS: ProfileCaptureOptions;
|
|
38
|
+
/**
|
|
39
|
+
* The adopter-supplied bridge to its model-service RPC — only the adopter knows how
|
|
40
|
+
* to reach the running head from the page (e.g. a `page.evaluate` into its frontend
|
|
41
|
+
* proxy). Each call maps to a `DataServerDiagnosticsProtocol` method.
|
|
42
|
+
*/
|
|
43
|
+
export interface E2EProfilingHooks {
|
|
44
|
+
/** Begin the server-side sampled capture for the given dimensions. */
|
|
45
|
+
startProfiling(options: ProfileCaptureOptions): Promise<void>;
|
|
46
|
+
/** Stop the capture, writing the profile artefacts into `directory` (the session dir). */
|
|
47
|
+
stopProfiling(directory: string): Promise<unknown>;
|
|
48
|
+
/** Return the per-method RPC/LSP latency collected during the scenario. */
|
|
49
|
+
getLatency(): Promise<LatencyReport>;
|
|
50
|
+
}
|
|
51
|
+
/** Options shared by {@link startE2EProfiling} / {@link finishE2EProfiling} / {@link withE2EProfiling}. */
|
|
52
|
+
export interface E2EProfilingOptions {
|
|
53
|
+
/** The Playwright page — bridged for the browser runtime/timeline. */
|
|
54
|
+
page: EvaluatablePage;
|
|
55
|
+
/** The session directory both the server (profile files) and the assembler write into. */
|
|
56
|
+
sessionDir: string;
|
|
57
|
+
/** Adopter hooks reaching the model-service RPC. */
|
|
58
|
+
hooks: E2EProfilingHooks;
|
|
59
|
+
/** Capture dimensions; defaults to {@link DEFAULT_E2E_DIMENSIONS}. */
|
|
60
|
+
dimensions?: ProfileCaptureOptions;
|
|
61
|
+
/**
|
|
62
|
+
* A CDP session on {@link page} (`page.context().newCDPSession(page)`). When
|
|
63
|
+
* given, the run grades `browser-runtime.json` up to the two-point
|
|
64
|
+
* `cdp-performance` source — DOM nodes, listeners, JS heap + delta — which the
|
|
65
|
+
* `page.evaluate` bridge cannot reach. Absent: the run keeps the coarser
|
|
66
|
+
* `page.evaluate` runtime read (no CDP counters).
|
|
67
|
+
*/
|
|
68
|
+
cdp?: CdpSession;
|
|
69
|
+
/** Also capture a renderer heap snapshot via CDP (heavy; opt-in, like the server's `heapSnapshot`). Requires {@link cdp}. */
|
|
70
|
+
browserHeapSnapshot?: boolean;
|
|
71
|
+
/** The pre-scenario runtime sample from {@link startE2EProfiling}, paired against the post-scenario sample for the delta. */
|
|
72
|
+
browserRuntimeBefore?: BrowserRuntimeSample;
|
|
73
|
+
/** A per-workspace server.log to fold into the bundle (copied to `<session>/server.log`). */
|
|
74
|
+
serverLogPath?: string;
|
|
75
|
+
/** A per-workspace browser-console log to fold into the bundle (copied to `<session>/browser-console.log`). */
|
|
76
|
+
browserLogPath?: string;
|
|
77
|
+
/** The commit the run reflects — anchors a skill's `file:line` findings. */
|
|
78
|
+
commit?: string;
|
|
79
|
+
/** The workspace under test. */
|
|
80
|
+
workspace?: string;
|
|
81
|
+
}
|
|
82
|
+
/** What {@link startE2EProfiling} hands back for {@link finishE2EProfiling} to pair against. */
|
|
83
|
+
export interface E2EProfilingStart {
|
|
84
|
+
/** The pre-scenario renderer-runtime sample, when a {@link E2EProfilingOptions.cdp} session was given. */
|
|
85
|
+
browserRuntimeBefore?: BrowserRuntimeSample;
|
|
86
|
+
}
|
|
87
|
+
/** Options for {@link assembleProfilingManifest}. */
|
|
88
|
+
export interface AssembleManifestOptions {
|
|
89
|
+
/** `app` (default here — an e2e run drives the real app) vs `harness`. */
|
|
90
|
+
mode?: 'harness' | 'app';
|
|
91
|
+
commit?: string;
|
|
92
|
+
workspace?: string;
|
|
93
|
+
/** Windows the run captured, when known (the e2e path typically has none). */
|
|
94
|
+
windows?: {
|
|
95
|
+
label: string;
|
|
96
|
+
ms: number;
|
|
97
|
+
}[];
|
|
98
|
+
container?: boolean;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Scan a session directory for the gathered profiling artefacts and write a
|
|
102
|
+
* `manifest.json` indexing them — the Playwright process assembles the bundle from
|
|
103
|
+
* the files the fixture gathered. Returns the manifest. Ignores its own
|
|
104
|
+
* `manifest.json` and loose `.txt` digests (referenced from their profile).
|
|
105
|
+
*/
|
|
106
|
+
export declare function assembleProfilingManifest(sessionDir: string, options?: AssembleManifestOptions): ProfilingManifest;
|
|
107
|
+
/**
|
|
108
|
+
* Begin capture — call BEFORE the scenario body. Starts the server-side sampled
|
|
109
|
+
* profile (adopter hook) and the in-page main-thread timeline, and — when a CDP
|
|
110
|
+
* session is given — takes the pre-scenario renderer-runtime sample so
|
|
111
|
+
* {@link finishE2EProfiling} can report the growth delta.
|
|
112
|
+
*/
|
|
113
|
+
export declare function startE2EProfiling(options: E2EProfilingOptions): Promise<E2EProfilingStart>;
|
|
114
|
+
/**
|
|
115
|
+
* End capture — call AFTER the scenario body. Stops the server capture (its files
|
|
116
|
+
* land in the session dir), writes `server-latency.json` from the RPC, bridges the
|
|
117
|
+
* browser state to disk (`browser-timeline.json` + a single source-graded
|
|
118
|
+
* `browser-runtime.json` — the richer two-point CDP read superseding the coarse
|
|
119
|
+
* `page.evaluate` read when a CDP session is given), folds in `server.log` when
|
|
120
|
+
* given, and assembles the manifest. Returns the manifest.
|
|
121
|
+
*/
|
|
122
|
+
export declare function finishE2EProfiling(options: E2EProfilingOptions): Promise<ProfilingManifest>;
|
|
123
|
+
/**
|
|
124
|
+
* Bracket a scenario with a full profiling capture — the one-call ergonomic. When
|
|
125
|
+
* {@link isE2EProfilingEnabled} is false this is an inert pass-through (runs the
|
|
126
|
+
* scenario, captures nothing, returns `undefined`), so a spec keeps the wrapper
|
|
127
|
+
* permanently and profiles only when the env flag is set. The bundle is still
|
|
128
|
+
* assembled if the scenario throws (a failing run is worth profiling), and the
|
|
129
|
+
* scenario error is re-thrown after.
|
|
130
|
+
*/
|
|
131
|
+
export declare function withE2EProfiling(options: E2EProfilingOptions, scenario: () => Promise<void>): Promise<ProfilingManifest | undefined>;
|
|
132
|
+
//# sourceMappingURL=e2e-profiling.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"e2e-profiling.d.ts","sourceRoot":"","sources":["../../../src/testing/playwright/e2e-profiling.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAmBlF,OAAO,EAGJ,KAAK,oBAAoB,EACzB,KAAK,aAAa,EAClB,KAAK,qBAAqB,EAG1B,KAAK,iBAAiB,EACxB,MAAM,qBAAqB,CAAC;AAK7B,OAAO,EAKJ,KAAK,UAAU,EACf,KAAK,eAAe,EAEtB,MAAM,6BAA6B,CAAC;AAErC;;;;GAIG;AACH,eAAO,MAAM,uBAAuB,0BAA0B,CAAC;AAE/D,wEAAwE;AACxE,wBAAgB,qBAAqB,IAAI,OAAO,CAE/C;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAe,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CASnH;AAED,gGAAgG;AAChG,eAAO,MAAM,sBAAsB,EAAE,qBAAuF,CAAC;AAE7H;;;;GAIG;AACH,MAAM,WAAW,iBAAiB;IAC/B,sEAAsE;IACtE,cAAc,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9D,0FAA0F;IAC1F,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACnD,2EAA2E;IAC3E,UAAU,IAAI,OAAO,CAAC,aAAa,CAAC,CAAC;CACvC;AAED,2GAA2G;AAC3G,MAAM,WAAW,mBAAmB;IACjC,sEAAsE;IACtE,IAAI,EAAE,eAAe,CAAC;IACtB,0FAA0F;IAC1F,UAAU,EAAE,MAAM,CAAC;IACnB,oDAAoD;IACpD,KAAK,EAAE,iBAAiB,CAAC;IACzB,sEAAsE;IACtE,UAAU,CAAC,EAAE,qBAAqB,CAAC;IACnC;;;;;;OAMG;IACH,GAAG,CAAC,EAAE,UAAU,CAAC;IACjB,6HAA6H;IAC7H,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,6HAA6H;IAC7H,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;IAC5C,6FAA6F;IAC7F,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,+GAA+G;IAC/G,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,4EAA4E;IAC5E,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gCAAgC;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,gGAAgG;AAChG,MAAM,WAAW,iBAAiB;IAC/B,0GAA0G;IAC1G,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;CAC9C;AAED,qDAAqD;AACrD,MAAM,WAAW,uBAAuB;IACrC,0EAA0E;IAC1E,IAAI,CAAC,EAAE,SAAS,GAAG,KAAK,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,8EAA8E;IAC9E,OAAO,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC1C,SAAS,CAAC,EAAE,OAAO,CAAC;CACtB;AA8DD;;;;;GAKG;AACH,wBAAgB,yBAAyB,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,GAAE,uBAA4B,GAAG,iBAAiB,CA6BtH;AAQD;;;;;GAKG;AACH,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAShG;AAED;;;;;;;GAOG;AACH,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAsCjG;AAED;;;;;;;GAOG;AACH,wBAAsB,gBAAgB,CACnC,OAAO,EAAE,mBAAmB,EAC5B,QAAQ,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAC7B,OAAO,CAAC,iBAAiB,GAAG,SAAS,CAAC,CA2BxC"}
|