@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,316 @@
|
|
|
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 MaybePromise, type Tracer, type TransferElement } from '@hydranium/protocol';
|
|
10
|
+
import { type AstNode, type AstReflection } from '@hydranium/langium';
|
|
11
|
+
import { type LogNameOptions } from '../diagnostics/logger.js';
|
|
12
|
+
import { type HydraniumLanguageServices } from '../language-module.js';
|
|
13
|
+
import { type Serializer } from './serializer.js';
|
|
14
|
+
/**
|
|
15
|
+
* Format-agnostic options shared by all {@link AbstractSerializer} implementations.
|
|
16
|
+
*
|
|
17
|
+
* Each field captures a piece of language-specific knowledge the algorithm
|
|
18
|
+
* cannot derive from grammar reflection alone. Format-specific subclasses
|
|
19
|
+
* (YAML, JSON, …) extend this with their own style settings.
|
|
20
|
+
*
|
|
21
|
+
* `propertyOrder` is the load-bearing one: Langium's generated AST uses
|
|
22
|
+
* interface-property order which doesn't match grammar-declaration order due
|
|
23
|
+
* to inheritance, so consumers ship an explicit per-type order map.
|
|
24
|
+
*
|
|
25
|
+
* `reflection` is intentionally NOT on this options shape — the serializer
|
|
26
|
+
* reads it from `services.shared.AstReflection` so adopters bind one
|
|
27
|
+
* source of truth at the DI graph rather than passing the reflection
|
|
28
|
+
* object explicitly. Keeping it off `AbstractSerializerOptions` matches the
|
|
29
|
+
* wider `(services, options)` constructor convention.
|
|
30
|
+
*/
|
|
31
|
+
export interface AbstractSerializerOptions extends LogNameOptions {
|
|
32
|
+
/**
|
|
33
|
+
* Per-AST-type ordered list of property names, matching the grammar's
|
|
34
|
+
* declaration order. Optional — when no entry exists for a given type,
|
|
35
|
+
* the walker falls back to {@link Object.keys}(node), which yields the
|
|
36
|
+
* AST node's own key order (in practice Langium's parser populates
|
|
37
|
+
* properties in grammar-source order, so the fallback is usually
|
|
38
|
+
* correct). Adopters who care about deterministic per-type ordering
|
|
39
|
+
* — e.g. when augmenting the AST with extra fields the grammar didn't
|
|
40
|
+
* place — supply the map; adopters without that concern omit it.
|
|
41
|
+
*/
|
|
42
|
+
readonly propertyOrder?: ReadonlyMap<string, readonly string[]>;
|
|
43
|
+
/**
|
|
44
|
+
* AST types that exist to wrap a single cross-reference. Maps the
|
|
45
|
+
* type name to the property holding the reference. The serializer emits
|
|
46
|
+
* just the reference id, dropping the wrapper noise. Defaults to an empty
|
|
47
|
+
* map — grammars without single-reference wrapper types omit this.
|
|
48
|
+
*
|
|
49
|
+
* A type may stay in this map even when it declares further optional
|
|
50
|
+
* properties: the collapse only applies while every other property is
|
|
51
|
+
* empty (see {@link AbstractSerializer.getReferenceWrapperProperty}), so
|
|
52
|
+
* a wrapper that grows an optional property keeps its collapsed form for
|
|
53
|
+
* existing documents and switches to a regular property block as soon as
|
|
54
|
+
* the extra property carries a value.
|
|
55
|
+
*/
|
|
56
|
+
readonly referenceWrapperTypes?: ReadonlyMap<string, string>;
|
|
57
|
+
/**
|
|
58
|
+
* Whether {@link AbstractSerializer.serializeAst} trims trailing whitespace
|
|
59
|
+
* from the final output (leading whitespace is always trimmed). Defaults to
|
|
60
|
+
* `true` — the conventional "no trailing blank lines" document shape. Set to
|
|
61
|
+
* `false` for grammars whose values may legitimately END the document with
|
|
62
|
+
* blank lines that must survive a round-trip — e.g. a multi-line block-scalar
|
|
63
|
+
* property (see `YamlSerializerOptions.blockScalarProperties`),
|
|
64
|
+
* where a trailing-trim would silently eat user-typed blank lines.
|
|
65
|
+
*/
|
|
66
|
+
readonly trimTrailingWhitespace?: boolean;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Abstract base for hand-written grammar-aware AST → text serializers.
|
|
70
|
+
*
|
|
71
|
+
* Langium ships no serializer ([discussion 683]; [discussion 863]) so
|
|
72
|
+
* consumers roll their own. This class is the shared algorithm — a
|
|
73
|
+
* property-by-property walk in grammar-declared order, dispatching each value
|
|
74
|
+
* through type-aware paths (references, id properties, inline types,
|
|
75
|
+
* reference-wrapper types, nested AST nodes, arrays, primitives).
|
|
76
|
+
*
|
|
77
|
+
* The same algorithm handles two value shapes uniformly:
|
|
78
|
+
* - **AST mode** — direct Langium AST nodes with `Reference` objects.
|
|
79
|
+
* - **Transfer-model mode** — structurally equivalent objects where references
|
|
80
|
+
* are plain string ids.
|
|
81
|
+
*
|
|
82
|
+
* Both shapes round-trip through {@link serializeReferenceText}, so consumers
|
|
83
|
+
* don't need a separate serializer per mode — and that holds for a subclass
|
|
84
|
+
* that replaces the generic walk with hand-written per-`$type` emitters, not
|
|
85
|
+
* only for one that inherits it. Such an emitter calls
|
|
86
|
+
* {@link serializeReferenceText} directly, so it is the single method that has
|
|
87
|
+
* to understand both shapes; see its contract for why gating on
|
|
88
|
+
* {@link isReferenceProperty} inside {@link serializePropertyValue} is what
|
|
89
|
+
* makes that safe.
|
|
90
|
+
*
|
|
91
|
+
* Format-specific subclasses (`YamlSerializer`,
|
|
92
|
+
* `JsonSerializer`) implement the abstract
|
|
93
|
+
* methods to lay out the actual output text: how a node's properties are
|
|
94
|
+
* composed into an object representation, how arrays are bracketed, and how
|
|
95
|
+
* indentation is rendered.
|
|
96
|
+
*
|
|
97
|
+
* **Extension points** (override in a subclass):
|
|
98
|
+
* - {@link serializeReferenceText} — extract the textual form of a
|
|
99
|
+
* cross-reference; defaults to the value's `$refText`.
|
|
100
|
+
* - {@link formatReferenceValue} — format a cross-reference value for emission;
|
|
101
|
+
* defaults to `JSON.stringify`.
|
|
102
|
+
* - {@link serializeCustomValue} — type-specific serialization for values
|
|
103
|
+
* that don't fit the generic paths. Runs after all reference detection, so
|
|
104
|
+
* references never reach this hook. Returns `undefined` to fall through to
|
|
105
|
+
* the default handling.
|
|
106
|
+
*
|
|
107
|
+
* [discussion 683]: https://github.com/langium/langium/discussions/683
|
|
108
|
+
* [discussion 863]: https://github.com/langium/langium/discussions/863
|
|
109
|
+
*/
|
|
110
|
+
export declare abstract class AbstractSerializer<TAst extends AstNode = AstNode, TTransfer extends TransferElement = TransferElement> implements Serializer<TAst, TTransfer> {
|
|
111
|
+
protected readonly services: HydraniumLanguageServices;
|
|
112
|
+
protected readonly options: AbstractSerializerOptions;
|
|
113
|
+
protected readonly reflection: AstReflection;
|
|
114
|
+
protected readonly tracer: Tracer;
|
|
115
|
+
constructor(services: HydraniumLanguageServices, options?: AbstractSerializerOptions);
|
|
116
|
+
/**
|
|
117
|
+
* Entry point for AST-shape inputs. Typically the grammar root, but any
|
|
118
|
+
* AST node works — the walker is recursive and shape-agnostic.
|
|
119
|
+
*
|
|
120
|
+
* Preserves the sync fast path: when every subclass override and every
|
|
121
|
+
* adopter hook is sync, the return is a bare `string` (no Promise
|
|
122
|
+
* allocation, no microtask). The async branch fires only if at least one
|
|
123
|
+
* recursive `serializeNode` call resolved to a Promise.
|
|
124
|
+
*/
|
|
125
|
+
serializeAst(model: TAst): MaybePromise<string>;
|
|
126
|
+
/**
|
|
127
|
+
* Trim the final serialized output. Leading whitespace is always removed;
|
|
128
|
+
* trailing whitespace is removed unless {@link AbstractSerializerOptions.trimTrailingWhitespace}
|
|
129
|
+
* is `false` (which preserves document-ending blank lines, e.g. inside a block scalar).
|
|
130
|
+
*/
|
|
131
|
+
protected trimSerialized(text: string | undefined): string;
|
|
132
|
+
/**
|
|
133
|
+
* Entry point for transfer-model-shape inputs (cross-references as plain
|
|
134
|
+
* string ids rather than `Reference` objects).
|
|
135
|
+
* Typically the transfer root, but any transfer element works.
|
|
136
|
+
*
|
|
137
|
+
* Default delegates back to {@link serializeAst} because the property
|
|
138
|
+
* walker is shape-agnostic — both shapes traverse the same
|
|
139
|
+
* {@link serializePropertyValue} dispatch and resolve references through
|
|
140
|
+
* the same {@link serializeReferenceText} read.
|
|
141
|
+
* Adopters who need shape-specific formatting override this method
|
|
142
|
+
* independently.
|
|
143
|
+
*
|
|
144
|
+
* The `as unknown as TAst` cast is honest: `TAst` and `TTransfer` are
|
|
145
|
+
* independent narrowings of two different `AstNode`-rooted hierarchies, so
|
|
146
|
+
* TS rightly refuses a direct narrowing. The walker reads only `$type` and
|
|
147
|
+
* property values, so the runtime read does not depend on the assignment
|
|
148
|
+
* being type-correct.
|
|
149
|
+
*/
|
|
150
|
+
serializeTransfer(model: TTransfer): MaybePromise<string>;
|
|
151
|
+
/**
|
|
152
|
+
* Format-specific layout of an AST or transfer-model node's properties.
|
|
153
|
+
* Subclasses iterate {@link getOrderedPropertyNames}, call
|
|
154
|
+
* {@link serializePropertyValue} per property, and compose the results
|
|
155
|
+
* into the format's object representation.
|
|
156
|
+
*
|
|
157
|
+
* Returns {@link MaybePromise} so subclasses may transparently await
|
|
158
|
+
* async adopter hooks; the per-property loop in each subclass gates with
|
|
159
|
+
* {@link isPromiseLike} so sync hooks skip the microtask per
|
|
160
|
+
* iteration.
|
|
161
|
+
*
|
|
162
|
+
* @param isArrayElement when `true`, the caller is producing an array
|
|
163
|
+
* element — formats may use this to suppress leading indentation
|
|
164
|
+
* (YAML's `- ` prefix handles alignment).
|
|
165
|
+
*/
|
|
166
|
+
protected abstract serializeNode(node: AstNode | Record<string, unknown>, indentationLevel: number, isArrayElement?: boolean): MaybePromise<string>;
|
|
167
|
+
/** Format-specific layout of an array of non-reference values. */
|
|
168
|
+
protected abstract serializeArray(items: unknown[], nodeType: string, key: string, indentationLevel: number): MaybePromise<string>;
|
|
169
|
+
/** Format-specific layout of an array of reference values (Langium References or plain strings). */
|
|
170
|
+
protected abstract serializeReferenceArray(items: unknown[], indentationLevel: number): MaybePromise<string>;
|
|
171
|
+
/**
|
|
172
|
+
* Serialize a single property value. Dispatch order (first match wins):
|
|
173
|
+
*
|
|
174
|
+
* 1. `$`-prefixed keys are skipped (Langium internals — `$type`, `$container`, …).
|
|
175
|
+
* 2. Reference-typed property (per grammar reflection): an array via
|
|
176
|
+
* {@link serializeReferenceArray}, otherwise a single reference via
|
|
177
|
+
* {@link serializeReferenceText} — which resolves an AST-mode Langium
|
|
178
|
+
* `Reference` and a transfer-mode plain string id alike.
|
|
179
|
+
* 3. Reference-wrapper AST node — emitted as the wrapped reference id
|
|
180
|
+
* (only while the node's other properties are empty, see
|
|
181
|
+
* {@link getReferenceWrapperProperty}).
|
|
182
|
+
* 4. {@link serializeCustomValue} hook — type-specific consumer overrides.
|
|
183
|
+
* 5. Nested AST node — recurse into {@link serializeNode}.
|
|
184
|
+
* 6. Array — element-by-element via {@link serializeArray}.
|
|
185
|
+
* 7. Anything else — {@link formatPrimitive}.
|
|
186
|
+
*
|
|
187
|
+
* Reference detection (steps 2-3) runs before {@link serializeCustomValue}
|
|
188
|
+
* so that references in either shape always route through
|
|
189
|
+
* {@link formatReferenceValue}; the custom hook never has to defend against
|
|
190
|
+
* them.
|
|
191
|
+
*
|
|
192
|
+
* **Reflection is consulted before the value is inspected**, and that order
|
|
193
|
+
* is load-bearing: it is what lets {@link serializeReferenceText} accept a
|
|
194
|
+
* bare transfer-mode id without a primitive string property such as `name`
|
|
195
|
+
* being mistaken for a cross-reference. Inspecting the value first would
|
|
196
|
+
* force the two shapes down two different code paths — and a hand-written
|
|
197
|
+
* emitter, which has no `(nodeType, key)` pair to offer, could then only
|
|
198
|
+
* reach the AST-mode one.
|
|
199
|
+
*
|
|
200
|
+
* Returns {@link MaybePromise} but does not `await` internally: each
|
|
201
|
+
* dispatch branch either returns a sync value directly or returns the
|
|
202
|
+
* recursive call's result verbatim. Callers (the subclass loops) gate
|
|
203
|
+
* with {@link isPromiseLike} so sync values bypass the
|
|
204
|
+
* microtask per iteration.
|
|
205
|
+
*
|
|
206
|
+
* @param isArrayElement when `true`, nested nodes do not indent their first
|
|
207
|
+
* property (the array element prefix handles alignment).
|
|
208
|
+
*/
|
|
209
|
+
protected serializePropertyValue(nodeType: string, key: string, value: unknown, indentationLevel: number, isArrayElement?: boolean): MaybePromise<string | undefined>;
|
|
210
|
+
/**
|
|
211
|
+
* Render a cross-reference to the text the grammar accepts, in **either**
|
|
212
|
+
* serialization shape:
|
|
213
|
+
*
|
|
214
|
+
* - **AST mode** — a Langium `Reference`, or any `{ $refText }` object.
|
|
215
|
+
* Langium's `isReference` additionally requires a resolved `ref`, but the
|
|
216
|
+
* emitted text is the same `$refText` either way, so the single
|
|
217
|
+
* {@link isRefTextObject} check covers both. Reading `$refText` rather
|
|
218
|
+
* than the resolved target is deliberate: an unresolvable reference then
|
|
219
|
+
* round-trips as the text the user typed instead of being dropped.
|
|
220
|
+
* - **Transfer mode** — a plain string id, which the framework
|
|
221
|
+
* `TransferEncoder` emits for every cross-reference.
|
|
222
|
+
*
|
|
223
|
+
* Returns `undefined` only when the value is neither.
|
|
224
|
+
*
|
|
225
|
+
* **Call this only on values that ARE cross-references.** A bare string is
|
|
226
|
+
* indistinguishable from a primitive string value, so this method trusts
|
|
227
|
+
* its caller. The generic walker earns that trust by gating on
|
|
228
|
+
* {@link isReferenceProperty} (see {@link serializePropertyValue}); a
|
|
229
|
+
* hand-written per-`$type` emitter earns it by construction, because the
|
|
230
|
+
* author calls this on a property they know the grammar declares a
|
|
231
|
+
* reference. That is what makes ONE method correct for both the walker and
|
|
232
|
+
* a custom concrete syntax.
|
|
233
|
+
*
|
|
234
|
+
* Override to apply an adopter-specific reference-text convention — e.g.
|
|
235
|
+
* deriving text from the resolved target via the language's `NameProvider`
|
|
236
|
+
* when `$refText` is empty. The default deliberately does not reach for the
|
|
237
|
+
* `NameProvider`: a real Langium `Reference` always carries a `$refText`
|
|
238
|
+
* string, so no fallback can fire on the common path.
|
|
239
|
+
*
|
|
240
|
+
* Distinct from `ReferenceBuilder.getReferenceName`, which *mints* the name
|
|
241
|
+
* for a NEW reference from a source↔target relationship. This one *renders*
|
|
242
|
+
* a reference that already exists.
|
|
243
|
+
*/
|
|
244
|
+
protected serializeReferenceText(value: unknown): string | undefined;
|
|
245
|
+
/**
|
|
246
|
+
* Whether a property should be skipped because it carries no meaningful
|
|
247
|
+
* value: `undefined`, `null`, an empty array, a default value per grammar
|
|
248
|
+
* reflection, or a blank string. Subclasses may override to widen or
|
|
249
|
+
* narrow the skip policy.
|
|
250
|
+
*/
|
|
251
|
+
protected shouldSkipProperty(nodeType: string, prop: string, value: unknown): boolean;
|
|
252
|
+
/**
|
|
253
|
+
* Resolve the property that collapses a reference-wrapper node
|
|
254
|
+
* ({@link AbstractSerializerOptions.referenceWrapperTypes}) to its bare
|
|
255
|
+
* reference id, or `undefined` when the node carries additional non-empty
|
|
256
|
+
* GRAMMAR-DECLARED properties and must serialize as a regular nested node
|
|
257
|
+
* instead — an unconditional collapse would silently drop those values.
|
|
258
|
+
*
|
|
259
|
+
* The scan reads the declared property names from grammar reflection, NOT
|
|
260
|
+
* the node's own keys: transfer-model objects may carry synthesized
|
|
261
|
+
* companion fields (display labels, derived projections) that never
|
|
262
|
+
* persist, and counting those as "more" would break the collapse for
|
|
263
|
+
* every wrapper that crosses the wire in an enriched projection.
|
|
264
|
+
*
|
|
265
|
+
* Emptiness is judged by {@link shouldSkipProperty} plus one
|
|
266
|
+
* reference-specific rule: a reference object with a blank `$refText` is
|
|
267
|
+
* an unset reference and counts as empty. The rule lives here rather than
|
|
268
|
+
* in {@link shouldSkipProperty} so regular property emission is unchanged.
|
|
269
|
+
*
|
|
270
|
+
* Works on both value shapes — Langium AST nodes and transfer-model
|
|
271
|
+
* objects (plain string reference ids).
|
|
272
|
+
*/
|
|
273
|
+
protected getReferenceWrapperProperty(node: AstNode): string | undefined;
|
|
274
|
+
/**
|
|
275
|
+
* Per-type ordered property names. Resolves the configured
|
|
276
|
+
* {@link AbstractSerializerOptions.propertyOrder} entry for `type`; falls back
|
|
277
|
+
* to the node's own JS-key order ({@link Object.keys}) when no entry
|
|
278
|
+
* exists. The walker filters `$`-prefixed keys downstream in
|
|
279
|
+
* {@link serializePropertyValue}, so passing every own key here is safe.
|
|
280
|
+
*/
|
|
281
|
+
protected getOrderedPropertyNames(node: AstNode | Record<string, unknown>, type: string): readonly string[];
|
|
282
|
+
/**
|
|
283
|
+
* Format a cross-reference value for emission. Defaults to `JSON.stringify`.
|
|
284
|
+
* Override to apply language-specific reference quoting — e.g. an
|
|
285
|
+
* id-reference formatter that mirrors the grammar's id convention.
|
|
286
|
+
*
|
|
287
|
+
* Returns {@link MaybePromise} so adopters with async formatting needs
|
|
288
|
+
* (remote schema lookup, external canonical-id resolution) can return a
|
|
289
|
+
* `Promise<string>`. Sync overrides remain valid.
|
|
290
|
+
*/
|
|
291
|
+
protected formatReferenceValue(value: string): MaybePromise<string>;
|
|
292
|
+
/**
|
|
293
|
+
* Format a primitive value (string, number, boolean) for emission. Defaults
|
|
294
|
+
* to `JSON.stringify`, which quotes strings, formats numbers/booleans, and
|
|
295
|
+
* is valid both as a YAML scalar and a JSON value.
|
|
296
|
+
*
|
|
297
|
+
* Returns {@link MaybePromise} so adopters with async formatting needs
|
|
298
|
+
* (e.g. delegating to `prettier.format` for a specific value class) can
|
|
299
|
+
* return a `Promise<string>`.
|
|
300
|
+
*/
|
|
301
|
+
protected formatPrimitive(value: unknown): MaybePromise<string>;
|
|
302
|
+
/**
|
|
303
|
+
* Hook for type-specific serialization that doesn't fit the generic
|
|
304
|
+
* dispatch table. Runs after all reference detection (steps 2-4 of
|
|
305
|
+
* {@link serializePropertyValue}) and before the nested-AST-node recurse,
|
|
306
|
+
* so references never reach this hook and the override may key purely on
|
|
307
|
+
* `(nodeType, key, value)`. Return `undefined` to fall through to the
|
|
308
|
+
* default handling. Default: returns `undefined` for everything.
|
|
309
|
+
*
|
|
310
|
+
* The in-repo override is
|
|
311
|
+
* `YamlSerializer`'s, which emits
|
|
312
|
+
* grammar-declared unquoted terminals as bare strings.
|
|
313
|
+
*/
|
|
314
|
+
protected serializeCustomValue(_nodeType: string, _key: string, _value: unknown, _indentationLevel: number): MaybePromise<string | undefined>;
|
|
315
|
+
}
|
|
316
|
+
//# sourceMappingURL=abstract-serializer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"abstract-serializer.d.ts","sourceRoot":"","sources":["../../../src/langium/serialization/abstract-serializer.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF,OAAO,EAAiB,KAAK,YAAY,EAAE,KAAK,MAAM,EAAE,KAAK,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC1G,OAAO,EAAE,KAAK,OAAO,EAAE,KAAK,aAAa,EAAkC,MAAM,oBAAoB,CAAC;AACtG,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,KAAK,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AACvE,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAYlD;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,WAAW,yBAA0B,SAAQ,cAAc;IAC9D;;;;;;;;;OASG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAAC;IAChE;;;;;;;;;;;;OAYG;IACH,QAAQ,CAAC,qBAAqB,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7D;;;;;;;;OAQG;IACH,QAAQ,CAAC,sBAAsB,CAAC,EAAE,OAAO,CAAC;CAC5C;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AACH,8BAAsB,kBAAkB,CACrC,IAAI,SAAS,OAAO,GAAG,OAAO,EAC9B,SAAS,SAAS,eAAe,GAAG,eAAe,CACpD,YAAW,UAAU,CAAC,IAAI,EAAE,SAAS,CAAC;IAKlC,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,yBAAyB;IACtD,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,yBAAyB;IALxD,SAAS,CAAC,QAAQ,CAAC,UAAU,EAAE,aAAa,CAAC;IAC7C,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;gBAGZ,QAAQ,EAAE,yBAAyB,EACnC,OAAO,GAAE,yBAA8B;IAM7D;;;;;;;;OAQG;IACH,YAAY,CAAC,KAAK,EAAE,IAAI,GAAG,YAAY,CAAC,MAAM,CAAC;IAQ/C;;;;OAIG;IACH,SAAS,CAAC,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM;IAO1D;;;;;;;;;;;;;;;;;OAiBG;IACH,iBAAiB,CAAC,KAAK,EAAE,SAAS,GAAG,YAAY,CAAC,MAAM,CAAC;IAIzD;;;;;;;;;;;;;;OAcG;IACH,SAAS,CAAC,QAAQ,CAAC,aAAa,CAC7B,IAAI,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACvC,gBAAgB,EAAE,MAAM,EACxB,cAAc,CAAC,EAAE,OAAO,GACxB,YAAY,CAAC,MAAM,CAAC;IAEvB,kEAAkE;IAClE,SAAS,CAAC,QAAQ,CAAC,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC;IAElI,oGAAoG;IACpG,SAAS,CAAC,QAAQ,CAAC,uBAAuB,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,gBAAgB,EAAE,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC;IAE5G;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAqCG;IACH,SAAS,CAAC,sBAAsB,CAC7B,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,OAAO,EACd,gBAAgB,EAAE,MAAM,EACxB,cAAc,UAAQ,GACtB,YAAY,CAAC,MAAM,GAAG,SAAS,CAAC;IAqDnC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAiCG;IACH,SAAS,CAAC,sBAAsB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS;IAOpE;;;;;OAKG;IACH,SAAS,CAAC,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO;IAgBrF;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,SAAS,CAAC,2BAA2B,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS;IAoBxE;;;;;;OAMG;IACH,SAAS,CAAC,uBAAuB,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE;IAI3G;;;;;;;;OAQG;IACH,SAAS,CAAC,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC;IAInE;;;;;;;;OAQG;IACH,SAAS,CAAC,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,YAAY,CAAC,MAAM,CAAC;IAI/D;;;;;;;;;;;OAWG;IACH,SAAS,CAAC,oBAAoB,CAC3B,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,OAAO,EACf,iBAAiB,EAAE,MAAM,GACzB,YAAY,CAAC,MAAM,GAAG,SAAS,CAAC;CAGrC"}
|
|
@@ -0,0 +1,351 @@
|
|
|
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 { isPromiseLike } from '@hydranium/protocol';
|
|
10
|
+
import { isAstNode } from '@hydranium/langium';
|
|
11
|
+
import { isDefaultValue, isReferenceProperty } from './serialization-util.js';
|
|
12
|
+
function isRefTextObject(value) {
|
|
13
|
+
return typeof value === 'object' && value !== null && '$refText' in value && typeof value.$refText === 'string';
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Abstract base for hand-written grammar-aware AST → text serializers.
|
|
17
|
+
*
|
|
18
|
+
* Langium ships no serializer ([discussion 683]; [discussion 863]) so
|
|
19
|
+
* consumers roll their own. This class is the shared algorithm — a
|
|
20
|
+
* property-by-property walk in grammar-declared order, dispatching each value
|
|
21
|
+
* through type-aware paths (references, id properties, inline types,
|
|
22
|
+
* reference-wrapper types, nested AST nodes, arrays, primitives).
|
|
23
|
+
*
|
|
24
|
+
* The same algorithm handles two value shapes uniformly:
|
|
25
|
+
* - **AST mode** — direct Langium AST nodes with `Reference` objects.
|
|
26
|
+
* - **Transfer-model mode** — structurally equivalent objects where references
|
|
27
|
+
* are plain string ids.
|
|
28
|
+
*
|
|
29
|
+
* Both shapes round-trip through {@link serializeReferenceText}, so consumers
|
|
30
|
+
* don't need a separate serializer per mode — and that holds for a subclass
|
|
31
|
+
* that replaces the generic walk with hand-written per-`$type` emitters, not
|
|
32
|
+
* only for one that inherits it. Such an emitter calls
|
|
33
|
+
* {@link serializeReferenceText} directly, so it is the single method that has
|
|
34
|
+
* to understand both shapes; see its contract for why gating on
|
|
35
|
+
* {@link isReferenceProperty} inside {@link serializePropertyValue} is what
|
|
36
|
+
* makes that safe.
|
|
37
|
+
*
|
|
38
|
+
* Format-specific subclasses (`YamlSerializer`,
|
|
39
|
+
* `JsonSerializer`) implement the abstract
|
|
40
|
+
* methods to lay out the actual output text: how a node's properties are
|
|
41
|
+
* composed into an object representation, how arrays are bracketed, and how
|
|
42
|
+
* indentation is rendered.
|
|
43
|
+
*
|
|
44
|
+
* **Extension points** (override in a subclass):
|
|
45
|
+
* - {@link serializeReferenceText} — extract the textual form of a
|
|
46
|
+
* cross-reference; defaults to the value's `$refText`.
|
|
47
|
+
* - {@link formatReferenceValue} — format a cross-reference value for emission;
|
|
48
|
+
* defaults to `JSON.stringify`.
|
|
49
|
+
* - {@link serializeCustomValue} — type-specific serialization for values
|
|
50
|
+
* that don't fit the generic paths. Runs after all reference detection, so
|
|
51
|
+
* references never reach this hook. Returns `undefined` to fall through to
|
|
52
|
+
* the default handling.
|
|
53
|
+
*
|
|
54
|
+
* [discussion 683]: https://github.com/langium/langium/discussions/683
|
|
55
|
+
* [discussion 863]: https://github.com/langium/langium/discussions/863
|
|
56
|
+
*/
|
|
57
|
+
export class AbstractSerializer {
|
|
58
|
+
services;
|
|
59
|
+
options;
|
|
60
|
+
reflection;
|
|
61
|
+
tracer;
|
|
62
|
+
constructor(services, options = {}) {
|
|
63
|
+
this.services = services;
|
|
64
|
+
this.options = options;
|
|
65
|
+
this.reflection = services.shared.AstReflection;
|
|
66
|
+
this.tracer = services.shared.Tracer.for(options.logName ?? this.constructor.name).trace('instantiated');
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Entry point for AST-shape inputs. Typically the grammar root, but any
|
|
70
|
+
* AST node works — the walker is recursive and shape-agnostic.
|
|
71
|
+
*
|
|
72
|
+
* Preserves the sync fast path: when every subclass override and every
|
|
73
|
+
* adopter hook is sync, the return is a bare `string` (no Promise
|
|
74
|
+
* allocation, no microtask). The async branch fires only if at least one
|
|
75
|
+
* recursive `serializeNode` call resolved to a Promise.
|
|
76
|
+
*/
|
|
77
|
+
serializeAst(model) {
|
|
78
|
+
const result = this.serializeNode(model, 0);
|
|
79
|
+
if (isPromiseLike(result)) {
|
|
80
|
+
return result.then(text => this.trimSerialized(text));
|
|
81
|
+
}
|
|
82
|
+
return this.trimSerialized(result);
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Trim the final serialized output. Leading whitespace is always removed;
|
|
86
|
+
* trailing whitespace is removed unless {@link AbstractSerializerOptions.trimTrailingWhitespace}
|
|
87
|
+
* is `false` (which preserves document-ending blank lines, e.g. inside a block scalar).
|
|
88
|
+
*/
|
|
89
|
+
trimSerialized(text) {
|
|
90
|
+
if (text === undefined) {
|
|
91
|
+
return '';
|
|
92
|
+
}
|
|
93
|
+
return this.options.trimTrailingWhitespace === false ? text.trimStart() : text.trim();
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Entry point for transfer-model-shape inputs (cross-references as plain
|
|
97
|
+
* string ids rather than `Reference` objects).
|
|
98
|
+
* Typically the transfer root, but any transfer element works.
|
|
99
|
+
*
|
|
100
|
+
* Default delegates back to {@link serializeAst} because the property
|
|
101
|
+
* walker is shape-agnostic — both shapes traverse the same
|
|
102
|
+
* {@link serializePropertyValue} dispatch and resolve references through
|
|
103
|
+
* the same {@link serializeReferenceText} read.
|
|
104
|
+
* Adopters who need shape-specific formatting override this method
|
|
105
|
+
* independently.
|
|
106
|
+
*
|
|
107
|
+
* The `as unknown as TAst` cast is honest: `TAst` and `TTransfer` are
|
|
108
|
+
* independent narrowings of two different `AstNode`-rooted hierarchies, so
|
|
109
|
+
* TS rightly refuses a direct narrowing. The walker reads only `$type` and
|
|
110
|
+
* property values, so the runtime read does not depend on the assignment
|
|
111
|
+
* being type-correct.
|
|
112
|
+
*/
|
|
113
|
+
serializeTransfer(model) {
|
|
114
|
+
return this.serializeAst(model);
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Serialize a single property value. Dispatch order (first match wins):
|
|
118
|
+
*
|
|
119
|
+
* 1. `$`-prefixed keys are skipped (Langium internals — `$type`, `$container`, …).
|
|
120
|
+
* 2. Reference-typed property (per grammar reflection): an array via
|
|
121
|
+
* {@link serializeReferenceArray}, otherwise a single reference via
|
|
122
|
+
* {@link serializeReferenceText} — which resolves an AST-mode Langium
|
|
123
|
+
* `Reference` and a transfer-mode plain string id alike.
|
|
124
|
+
* 3. Reference-wrapper AST node — emitted as the wrapped reference id
|
|
125
|
+
* (only while the node's other properties are empty, see
|
|
126
|
+
* {@link getReferenceWrapperProperty}).
|
|
127
|
+
* 4. {@link serializeCustomValue} hook — type-specific consumer overrides.
|
|
128
|
+
* 5. Nested AST node — recurse into {@link serializeNode}.
|
|
129
|
+
* 6. Array — element-by-element via {@link serializeArray}.
|
|
130
|
+
* 7. Anything else — {@link formatPrimitive}.
|
|
131
|
+
*
|
|
132
|
+
* Reference detection (steps 2-3) runs before {@link serializeCustomValue}
|
|
133
|
+
* so that references in either shape always route through
|
|
134
|
+
* {@link formatReferenceValue}; the custom hook never has to defend against
|
|
135
|
+
* them.
|
|
136
|
+
*
|
|
137
|
+
* **Reflection is consulted before the value is inspected**, and that order
|
|
138
|
+
* is load-bearing: it is what lets {@link serializeReferenceText} accept a
|
|
139
|
+
* bare transfer-mode id without a primitive string property such as `name`
|
|
140
|
+
* being mistaken for a cross-reference. Inspecting the value first would
|
|
141
|
+
* force the two shapes down two different code paths — and a hand-written
|
|
142
|
+
* emitter, which has no `(nodeType, key)` pair to offer, could then only
|
|
143
|
+
* reach the AST-mode one.
|
|
144
|
+
*
|
|
145
|
+
* Returns {@link MaybePromise} but does not `await` internally: each
|
|
146
|
+
* dispatch branch either returns a sync value directly or returns the
|
|
147
|
+
* recursive call's result verbatim. Callers (the subclass loops) gate
|
|
148
|
+
* with {@link isPromiseLike} so sync values bypass the
|
|
149
|
+
* microtask per iteration.
|
|
150
|
+
*
|
|
151
|
+
* @param isArrayElement when `true`, nested nodes do not indent their first
|
|
152
|
+
* property (the array element prefix handles alignment).
|
|
153
|
+
*/
|
|
154
|
+
serializePropertyValue(nodeType, key, value, indentationLevel, isArrayElement = false) {
|
|
155
|
+
if (key.startsWith('$')) {
|
|
156
|
+
return undefined;
|
|
157
|
+
}
|
|
158
|
+
// Reference-typed properties (per grammar reflection), in EITHER shape: an
|
|
159
|
+
// array of references, or a single reference resolved by
|
|
160
|
+
// `serializeReferenceText`. Gating on reflection first is what lets that
|
|
161
|
+
// method accept a bare transfer-mode id — it only ever sees values the
|
|
162
|
+
// grammar declares a cross-reference, so a plain string property such as
|
|
163
|
+
// `name` can never be mistaken for one.
|
|
164
|
+
if (isReferenceProperty(this.reflection, nodeType, key)) {
|
|
165
|
+
if (Array.isArray(value)) {
|
|
166
|
+
return this.serializeReferenceArray(value, indentationLevel);
|
|
167
|
+
}
|
|
168
|
+
const reference = this.serializeReferenceText(value);
|
|
169
|
+
if (reference !== undefined) {
|
|
170
|
+
return this.formatReferenceValue(reference);
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
// Reference wrapper types: a node that exists to wrap a reference, collapsed to the
|
|
174
|
+
// bare reference id while its other properties are empty.
|
|
175
|
+
if (isAstNode(value)) {
|
|
176
|
+
const refProperty = this.getReferenceWrapperProperty(value);
|
|
177
|
+
if (refProperty) {
|
|
178
|
+
const propertyReference = this.serializeReferenceText(value[refProperty]);
|
|
179
|
+
if (propertyReference !== undefined) {
|
|
180
|
+
return this.formatReferenceValue(propertyReference);
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
// Custom hook: type-specific consumer overrides (runs after reference detection).
|
|
185
|
+
const custom = this.serializeCustomValue(nodeType, key, value, indentationLevel);
|
|
186
|
+
if (custom !== undefined) {
|
|
187
|
+
return custom;
|
|
188
|
+
}
|
|
189
|
+
// Nested AST node: recurse.
|
|
190
|
+
if (isAstNode(value)) {
|
|
191
|
+
return this.serializeNode(value, indentationLevel, isArrayElement);
|
|
192
|
+
}
|
|
193
|
+
// Arrays of non-reference values.
|
|
194
|
+
if (Array.isArray(value)) {
|
|
195
|
+
return this.serializeArray(value, nodeType, key, indentationLevel);
|
|
196
|
+
}
|
|
197
|
+
// Primitive values.
|
|
198
|
+
return this.formatPrimitive(value);
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* Render a cross-reference to the text the grammar accepts, in **either**
|
|
202
|
+
* serialization shape:
|
|
203
|
+
*
|
|
204
|
+
* - **AST mode** — a Langium `Reference`, or any `{ $refText }` object.
|
|
205
|
+
* Langium's `isReference` additionally requires a resolved `ref`, but the
|
|
206
|
+
* emitted text is the same `$refText` either way, so the single
|
|
207
|
+
* {@link isRefTextObject} check covers both. Reading `$refText` rather
|
|
208
|
+
* than the resolved target is deliberate: an unresolvable reference then
|
|
209
|
+
* round-trips as the text the user typed instead of being dropped.
|
|
210
|
+
* - **Transfer mode** — a plain string id, which the framework
|
|
211
|
+
* `TransferEncoder` emits for every cross-reference.
|
|
212
|
+
*
|
|
213
|
+
* Returns `undefined` only when the value is neither.
|
|
214
|
+
*
|
|
215
|
+
* **Call this only on values that ARE cross-references.** A bare string is
|
|
216
|
+
* indistinguishable from a primitive string value, so this method trusts
|
|
217
|
+
* its caller. The generic walker earns that trust by gating on
|
|
218
|
+
* {@link isReferenceProperty} (see {@link serializePropertyValue}); a
|
|
219
|
+
* hand-written per-`$type` emitter earns it by construction, because the
|
|
220
|
+
* author calls this on a property they know the grammar declares a
|
|
221
|
+
* reference. That is what makes ONE method correct for both the walker and
|
|
222
|
+
* a custom concrete syntax.
|
|
223
|
+
*
|
|
224
|
+
* Override to apply an adopter-specific reference-text convention — e.g.
|
|
225
|
+
* deriving text from the resolved target via the language's `NameProvider`
|
|
226
|
+
* when `$refText` is empty. The default deliberately does not reach for the
|
|
227
|
+
* `NameProvider`: a real Langium `Reference` always carries a `$refText`
|
|
228
|
+
* string, so no fallback can fire on the common path.
|
|
229
|
+
*
|
|
230
|
+
* Distinct from `ReferenceBuilder.getReferenceName`, which *mints* the name
|
|
231
|
+
* for a NEW reference from a source↔target relationship. This one *renders*
|
|
232
|
+
* a reference that already exists.
|
|
233
|
+
*/
|
|
234
|
+
serializeReferenceText(value) {
|
|
235
|
+
if (isRefTextObject(value)) {
|
|
236
|
+
return value.$refText;
|
|
237
|
+
}
|
|
238
|
+
return typeof value === 'string' ? value : undefined;
|
|
239
|
+
}
|
|
240
|
+
/**
|
|
241
|
+
* Whether a property should be skipped because it carries no meaningful
|
|
242
|
+
* value: `undefined`, `null`, an empty array, a default value per grammar
|
|
243
|
+
* reflection, or a blank string. Subclasses may override to widen or
|
|
244
|
+
* narrow the skip policy.
|
|
245
|
+
*/
|
|
246
|
+
shouldSkipProperty(nodeType, prop, value) {
|
|
247
|
+
if (value === undefined || value === null) {
|
|
248
|
+
return true;
|
|
249
|
+
}
|
|
250
|
+
if (Array.isArray(value) && value.length === 0) {
|
|
251
|
+
return true;
|
|
252
|
+
}
|
|
253
|
+
if (isDefaultValue(this.reflection, nodeType, prop, value)) {
|
|
254
|
+
return true;
|
|
255
|
+
}
|
|
256
|
+
if (typeof value === 'string' && value.trim() === '') {
|
|
257
|
+
return true;
|
|
258
|
+
}
|
|
259
|
+
return false;
|
|
260
|
+
}
|
|
261
|
+
/**
|
|
262
|
+
* Resolve the property that collapses a reference-wrapper node
|
|
263
|
+
* ({@link AbstractSerializerOptions.referenceWrapperTypes}) to its bare
|
|
264
|
+
* reference id, or `undefined` when the node carries additional non-empty
|
|
265
|
+
* GRAMMAR-DECLARED properties and must serialize as a regular nested node
|
|
266
|
+
* instead — an unconditional collapse would silently drop those values.
|
|
267
|
+
*
|
|
268
|
+
* The scan reads the declared property names from grammar reflection, NOT
|
|
269
|
+
* the node's own keys: transfer-model objects may carry synthesized
|
|
270
|
+
* companion fields (display labels, derived projections) that never
|
|
271
|
+
* persist, and counting those as "more" would break the collapse for
|
|
272
|
+
* every wrapper that crosses the wire in an enriched projection.
|
|
273
|
+
*
|
|
274
|
+
* Emptiness is judged by {@link shouldSkipProperty} plus one
|
|
275
|
+
* reference-specific rule: a reference object with a blank `$refText` is
|
|
276
|
+
* an unset reference and counts as empty. The rule lives here rather than
|
|
277
|
+
* in {@link shouldSkipProperty} so regular property emission is unchanged.
|
|
278
|
+
*
|
|
279
|
+
* Works on both value shapes — Langium AST nodes and transfer-model
|
|
280
|
+
* objects (plain string reference ids).
|
|
281
|
+
*/
|
|
282
|
+
getReferenceWrapperProperty(node) {
|
|
283
|
+
const referenceProperty = this.options.referenceWrapperTypes?.get(node.$type);
|
|
284
|
+
if (!referenceProperty) {
|
|
285
|
+
return undefined;
|
|
286
|
+
}
|
|
287
|
+
const generic = node;
|
|
288
|
+
const declaredProperties = Object.keys(this.reflection.getTypeMetaData(node.$type).properties);
|
|
289
|
+
const carriesMore = declaredProperties.some(property => {
|
|
290
|
+
if (property === referenceProperty) {
|
|
291
|
+
return false;
|
|
292
|
+
}
|
|
293
|
+
const propertyValue = generic[property];
|
|
294
|
+
if (isRefTextObject(propertyValue) && propertyValue.$refText.trim() === '') {
|
|
295
|
+
return false;
|
|
296
|
+
}
|
|
297
|
+
return !this.shouldSkipProperty(node.$type, property, propertyValue);
|
|
298
|
+
});
|
|
299
|
+
return carriesMore ? undefined : referenceProperty;
|
|
300
|
+
}
|
|
301
|
+
/**
|
|
302
|
+
* Per-type ordered property names. Resolves the configured
|
|
303
|
+
* {@link AbstractSerializerOptions.propertyOrder} entry for `type`; falls back
|
|
304
|
+
* to the node's own JS-key order ({@link Object.keys}) when no entry
|
|
305
|
+
* exists. The walker filters `$`-prefixed keys downstream in
|
|
306
|
+
* {@link serializePropertyValue}, so passing every own key here is safe.
|
|
307
|
+
*/
|
|
308
|
+
getOrderedPropertyNames(node, type) {
|
|
309
|
+
return this.options.propertyOrder?.get(type) ?? Object.keys(node);
|
|
310
|
+
}
|
|
311
|
+
/**
|
|
312
|
+
* Format a cross-reference value for emission. Defaults to `JSON.stringify`.
|
|
313
|
+
* Override to apply language-specific reference quoting — e.g. an
|
|
314
|
+
* id-reference formatter that mirrors the grammar's id convention.
|
|
315
|
+
*
|
|
316
|
+
* Returns {@link MaybePromise} so adopters with async formatting needs
|
|
317
|
+
* (remote schema lookup, external canonical-id resolution) can return a
|
|
318
|
+
* `Promise<string>`. Sync overrides remain valid.
|
|
319
|
+
*/
|
|
320
|
+
formatReferenceValue(value) {
|
|
321
|
+
return JSON.stringify(value);
|
|
322
|
+
}
|
|
323
|
+
/**
|
|
324
|
+
* Format a primitive value (string, number, boolean) for emission. Defaults
|
|
325
|
+
* to `JSON.stringify`, which quotes strings, formats numbers/booleans, and
|
|
326
|
+
* is valid both as a YAML scalar and a JSON value.
|
|
327
|
+
*
|
|
328
|
+
* Returns {@link MaybePromise} so adopters with async formatting needs
|
|
329
|
+
* (e.g. delegating to `prettier.format` for a specific value class) can
|
|
330
|
+
* return a `Promise<string>`.
|
|
331
|
+
*/
|
|
332
|
+
formatPrimitive(value) {
|
|
333
|
+
return JSON.stringify(value);
|
|
334
|
+
}
|
|
335
|
+
/**
|
|
336
|
+
* Hook for type-specific serialization that doesn't fit the generic
|
|
337
|
+
* dispatch table. Runs after all reference detection (steps 2-4 of
|
|
338
|
+
* {@link serializePropertyValue}) and before the nested-AST-node recurse,
|
|
339
|
+
* so references never reach this hook and the override may key purely on
|
|
340
|
+
* `(nodeType, key, value)`. Return `undefined` to fall through to the
|
|
341
|
+
* default handling. Default: returns `undefined` for everything.
|
|
342
|
+
*
|
|
343
|
+
* The in-repo override is
|
|
344
|
+
* `YamlSerializer`'s, which emits
|
|
345
|
+
* grammar-declared unquoted terminals as bare strings.
|
|
346
|
+
*/
|
|
347
|
+
serializeCustomValue(_nodeType, _key, _value, _indentationLevel) {
|
|
348
|
+
return undefined;
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
//# sourceMappingURL=abstract-serializer.js.map
|