@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,207 @@
|
|
|
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 { URI } from '@hydranium/langium';
|
|
10
|
+
import { type WritableFileSystemProvider } from '../../documents/ast-document-manager.js';
|
|
11
|
+
import { type ServerSharedServicesMinimal } from '../shared-services.js';
|
|
12
|
+
import { type FileSystemSeed, InMemoryFileSystemProvider, type InMemoryFileSystemOptions } from './in-memory-file-system-provider.js';
|
|
13
|
+
/**
|
|
14
|
+
* An asynchronous key/value store a {@link PersistentFileSystemProvider} mirrors
|
|
15
|
+
* its writes into and is restored from.
|
|
16
|
+
*
|
|
17
|
+
* # Why a store behind the map, rather than a provider over the store
|
|
18
|
+
*
|
|
19
|
+
* Langium's `FileSystemProvider` requires SYNCHRONOUS reads — `statSync`,
|
|
20
|
+
* `existsSync`, `readFileSync`, `readDirectorySync` — and the stores a browser
|
|
21
|
+
* offers cannot answer synchronously: `IndexedDB` has no sync API at all, and
|
|
22
|
+
* OPFS has synchronous file handles but still enumerates a directory
|
|
23
|
+
* asynchronously, so even there a directory index has to be held in memory. A
|
|
24
|
+
* store therefore cannot back the provider directly, whatever it is. The map
|
|
25
|
+
* stays the read path and the store is a write-through mirror loaded once,
|
|
26
|
+
* before the server starts.
|
|
27
|
+
*
|
|
28
|
+
* # A key here is a SEED key, not a URI
|
|
29
|
+
*
|
|
30
|
+
* Keys are exactly {@link FileSystemSeed} keys: relative to the provider's
|
|
31
|
+
* `rootUri` when it has one, an absolute URI string when it does not. Two
|
|
32
|
+
* consequences worth having — a stored workspace reloads under a different
|
|
33
|
+
* `rootUri` than it was written from, and the seed and the store are the same
|
|
34
|
+
* key space, so restoring is an overlay rather than a translation step only one
|
|
35
|
+
* side would remember.
|
|
36
|
+
*
|
|
37
|
+
* # Failure is the caller's to see
|
|
38
|
+
*
|
|
39
|
+
* Every method may reject, and the provider propagates a rejection out of
|
|
40
|
+
* `writeFile` rather than absorbing it — a save that reports success for content
|
|
41
|
+
* no store holds is the failure this seam exists to make impossible. Browser
|
|
42
|
+
* storage really does fail: a quota is finite, and the user agent may EVICT the
|
|
43
|
+
* whole origin's storage under pressure or on a "clear site data".
|
|
44
|
+
*/
|
|
45
|
+
export interface FileSystemStore {
|
|
46
|
+
/**
|
|
47
|
+
* Everything the store holds. An empty record is the first-visit answer and
|
|
48
|
+
* not an error, which is what makes the provider's seed the baseline.
|
|
49
|
+
*/
|
|
50
|
+
load(): Promise<FileSystemSeed>;
|
|
51
|
+
/**
|
|
52
|
+
* Store `content` under `path`, replacing any previous content.
|
|
53
|
+
*
|
|
54
|
+
* `content` is OPAQUE and must be stored byte for byte: the provider also
|
|
55
|
+
* writes a deletion marker through here, so a store that validated or
|
|
56
|
+
* normalised what it was given would turn a delete into a file whose content
|
|
57
|
+
* is the marker.
|
|
58
|
+
*/
|
|
59
|
+
write(path: string, content: string): Promise<void>;
|
|
60
|
+
/** Drop `path`. Storing nothing there already is not an error. */
|
|
61
|
+
remove(path: string): Promise<void>;
|
|
62
|
+
}
|
|
63
|
+
/** Options for {@link PersistentFileSystemProvider} and {@link persistentFileSystem}. */
|
|
64
|
+
export interface PersistentFileSystemOptions extends InMemoryFileSystemOptions {
|
|
65
|
+
/** The store writes mirror into and {@link restored} content came out of. */
|
|
66
|
+
store: FileSystemStore;
|
|
67
|
+
/**
|
|
68
|
+
* Content already read out of {@link store}, applied OVER
|
|
69
|
+
* {@link InMemoryFileSystemOptions.seed} at construction.
|
|
70
|
+
*
|
|
71
|
+
* Filled by {@link persistentFileSystem}, which is the supported way in: the
|
|
72
|
+
* provider is constructed synchronously by the services factory, so a load
|
|
73
|
+
* cannot happen inside it.
|
|
74
|
+
*/
|
|
75
|
+
restored?: FileSystemSeed;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* An {@link InMemoryFileSystemProvider} whose writes survive the page: the map
|
|
79
|
+
* is still the read path, and every write is mirrored into an asynchronous
|
|
80
|
+
* {@link FileSystemStore} that the next start is restored from.
|
|
81
|
+
*
|
|
82
|
+
* # The seed is the baseline and the store is the delta
|
|
83
|
+
*
|
|
84
|
+
* A restored entry wins over the seed for the same key; a seeded file the store
|
|
85
|
+
* has never heard of is served from the seed. So a first visit is the seed
|
|
86
|
+
* exactly, a returning visit is the seed with the edits laid over it, and a file
|
|
87
|
+
* the host adds to its seed later appears for a visitor who already has stored
|
|
88
|
+
* content — which whole-store precedence would have hidden until they cleared
|
|
89
|
+
* their storage.
|
|
90
|
+
*
|
|
91
|
+
* # Deleting a seeded file writes a marker, because dropping its entry would not
|
|
92
|
+
*
|
|
93
|
+
* A delta over a baseline cannot express absence by omission: removing the
|
|
94
|
+
* stored entry for a seeded file returns it to its seeded content on the next
|
|
95
|
+
* restore, which is a deletion that undoes itself. So {@link deleteFile} stores
|
|
96
|
+
* a TOMBSTONE for a path the seed carries, and restoring one applies it as a
|
|
97
|
+
* deletion rather than as content. Re-creating the file is an ordinary write over
|
|
98
|
+
* the marker, so nothing has to un-mark it.
|
|
99
|
+
*
|
|
100
|
+
* A path the seed does NOT carry needs no marker — absence from the store is
|
|
101
|
+
* already absence — so its entry is removed instead, which is what keeps a host
|
|
102
|
+
* that creates and deletes scratch files from growing the store forever.
|
|
103
|
+
*
|
|
104
|
+
* The marker is a reserved VALUE rather than a reserved key, and that is for the
|
|
105
|
+
* store's sake: a key is a seed-space path by contract, and a store may map keys
|
|
106
|
+
* to real filenames, where a reserved key prefix would ask it to create a file
|
|
107
|
+
* whose name is not a path. As a value it needs nothing from any store. Two
|
|
108
|
+
* consequences worth knowing: a host that reads the store directly — to count
|
|
109
|
+
* what is held, say — sees marker entries among the content ones and cannot tell
|
|
110
|
+
* them apart; and a document whose ENTIRE content is the marker string would be
|
|
111
|
+
* restored as deleted, which is why the marker is NUL-wrapped and text a grammar
|
|
112
|
+
* can parse is not.
|
|
113
|
+
*
|
|
114
|
+
* # A registered virtual document still wins
|
|
115
|
+
*
|
|
116
|
+
* `readFileSync` consults the virtual-document seam before the map, so a stdlib
|
|
117
|
+
* contributed in code keeps answering for its URI whether or not the store holds
|
|
118
|
+
* one. The store cannot shadow it, which is what keeps a rebuild that re-reads
|
|
119
|
+
* that URI from losing the stdlib.
|
|
120
|
+
*
|
|
121
|
+
* # What it deliberately does not answer
|
|
122
|
+
*
|
|
123
|
+
* The store is scoped to the ORIGIN, not to the page: two pages on the same
|
|
124
|
+
* origin share it, and the user agent may evict it entirely. Both are properties
|
|
125
|
+
* of browser storage rather than of this class, and neither is worth a stub —
|
|
126
|
+
* eviction presents as a first visit, which is a state this provider is
|
|
127
|
+
* correct in.
|
|
128
|
+
*/
|
|
129
|
+
export declare class PersistentFileSystemProvider extends InMemoryFileSystemProvider {
|
|
130
|
+
protected readonly store: FileSystemStore;
|
|
131
|
+
/**
|
|
132
|
+
* The map-key prefix store keys are relative to, WITH its trailing
|
|
133
|
+
* separator, or `undefined` when store keys are absolute URIs.
|
|
134
|
+
*/
|
|
135
|
+
protected readonly storeRoot?: string;
|
|
136
|
+
/**
|
|
137
|
+
* The seed's paths, in STORE-key space rather than as the record was written.
|
|
138
|
+
*
|
|
139
|
+
* Normalised on the way in for the same reason restoring is: a seed key and
|
|
140
|
+
* the key derived from a URI disagree for a percent-encodable path, so a raw
|
|
141
|
+
* `Object.keys` set would call `a b.x` unseeded and remove its entry instead
|
|
142
|
+
* of marking it — a deletion that quietly undoes itself on the next load.
|
|
143
|
+
*/
|
|
144
|
+
protected readonly seededPaths: ReadonlySet<string>;
|
|
145
|
+
constructor(services: ServerSharedServicesMinimal, options: PersistentFileSystemOptions);
|
|
146
|
+
/**
|
|
147
|
+
* The sync twin, mirrored without waiting.
|
|
148
|
+
*
|
|
149
|
+
* It has no way to report a store failure to its caller, so the tracer is the
|
|
150
|
+
* only channel it has — which is why {@link writeFile}, the path a save
|
|
151
|
+
* actually takes, awaits instead.
|
|
152
|
+
*/
|
|
153
|
+
setFile(uri: URI, content: string): void;
|
|
154
|
+
/**
|
|
155
|
+
* Write through to the store and REJECT if it refuses.
|
|
156
|
+
*
|
|
157
|
+
* A quota failure or an evicted origin has to reach the client that asked for
|
|
158
|
+
* the save: the alternative is a page that reports a saved workspace and
|
|
159
|
+
* reloads without it, which is the same shape as persistence working.
|
|
160
|
+
*
|
|
161
|
+
* `super.setFile` rather than `this.setFile`, so the awaited mirror below is
|
|
162
|
+
* the only one — the override would fire a second, unawaited write for the
|
|
163
|
+
* same content.
|
|
164
|
+
*/
|
|
165
|
+
writeFile(uri: URI, content: string): Promise<void>;
|
|
166
|
+
deleteFile(uri: URI): void;
|
|
167
|
+
/** The absolute URI a store-space `path` addresses. */
|
|
168
|
+
protected storeUri(path: string): URI;
|
|
169
|
+
/** Mirror one write. `async` so a bad key rejects rather than throwing at the call site. */
|
|
170
|
+
protected persist(uri: URI, content: string): Promise<void>;
|
|
171
|
+
/**
|
|
172
|
+
* Mirror one deletion: a tombstone where the seed would otherwise bring the
|
|
173
|
+
* file back, a plain removal where it would not. `async` for the same reason
|
|
174
|
+
* as {@link persist}.
|
|
175
|
+
*/
|
|
176
|
+
protected forget(uri: URI): Promise<void>;
|
|
177
|
+
/**
|
|
178
|
+
* The store key for `uri`, in the seed's key space.
|
|
179
|
+
*
|
|
180
|
+
* Throws for a URI outside `rootUri` rather than keying it absolutely beside
|
|
181
|
+
* the relative ones: a store holding both spellings restores under neither,
|
|
182
|
+
* and a host writing outside the workspace it declared has a wiring fault
|
|
183
|
+
* worth hearing about.
|
|
184
|
+
*/
|
|
185
|
+
protected storeKey(uri: URI): string;
|
|
186
|
+
protected reportStoreFailure(operation: string, uri: URI, error: unknown): void;
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Restore `options.store` and bind a {@link PersistentFileSystemProvider} over
|
|
190
|
+
* it, spread into the services context exactly where a Node host spreads
|
|
191
|
+
* `NodeFileSystem`.
|
|
192
|
+
*
|
|
193
|
+
* **It is asynchronous, and that is the ordering contract rather than an
|
|
194
|
+
* implementation detail.** The provider's reads are synchronous, so the stored
|
|
195
|
+
* workspace must be in the map before anything reads it — and a `hydrate()`
|
|
196
|
+
* method on the provider could not enforce that, because awaiting one after the
|
|
197
|
+
* transport exists is already too late: a `BrowserMessageReader` starts its port
|
|
198
|
+
* on construction but fires into an emitter with no listener until
|
|
199
|
+
* `startLanguageServer` calls `listen`, so an `initialize` arriving during the
|
|
200
|
+
* await is DROPPED — no error, no reply, a client that waits forever. Loading
|
|
201
|
+
* here, before the services and therefore before the connection exist, makes
|
|
202
|
+
* that unrepresentable rather than documented.
|
|
203
|
+
*/
|
|
204
|
+
export declare function persistentFileSystem(options: PersistentFileSystemOptions): Promise<{
|
|
205
|
+
fileSystemProvider: (services: unknown) => WritableFileSystemProvider;
|
|
206
|
+
}>;
|
|
207
|
+
//# sourceMappingURL=persistent-file-system-provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"persistent-file-system-provider.d.ts","sourceRoot":"","sources":["../../../src/langium/workspace/persistent-file-system-provider.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF,OAAO,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAC;AACzC,OAAO,EAAE,KAAK,0BAA0B,EAAE,MAAM,yCAAyC,CAAC;AAC1F,OAAO,EAAuB,KAAK,2BAA2B,EAAE,MAAM,uBAAuB,CAAC;AAC9F,OAAO,EAAE,KAAK,cAAc,EAAE,0BAA0B,EAAE,KAAK,yBAAyB,EAAE,MAAM,qCAAqC,CAAC;AAEtI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,MAAM,WAAW,eAAe;IAC7B;;;OAGG;IACH,IAAI,IAAI,OAAO,CAAC,cAAc,CAAC,CAAC;IAChC;;;;;;;OAOG;IACH,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACpD,kEAAkE;IAClE,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACtC;AAYD,yFAAyF;AACzF,MAAM,WAAW,2BAA4B,SAAQ,yBAAyB;IAC3E,6EAA6E;IAC7E,KAAK,EAAE,eAAe,CAAC;IACvB;;;;;;;OAOG;IACH,QAAQ,CAAC,EAAE,cAAc,CAAC;CAC5B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmDG;AACH,qBAAa,4BAA6B,SAAQ,0BAA0B;IACzE,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,eAAe,CAAC;IAC1C;;;OAGG;IACH,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IACtC;;;;;;;OAOG;IACH,SAAS,CAAC,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;gBAExC,QAAQ,EAAE,2BAA2B,EAAE,OAAO,EAAE,2BAA2B;IAuBvF;;;;;;OAMG;IACM,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAKjD;;;;;;;;;;OAUG;IACY,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKzD,UAAU,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI;IAKnC,uDAAuD;IACvD,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG;IAIrC,4FAA4F;cAC5E,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIjE;;;;OAIG;cACa,MAAM,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IAS/C;;;;;;;OAOG;IACH,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM;IAWpC,SAAS,CAAC,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI;CAGjF;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,oBAAoB,CAAC,OAAO,EAAE,2BAA2B,GAAG,OAAO,CAAC;IACvF,kBAAkB,EAAE,CAAC,QAAQ,EAAE,OAAO,KAAK,0BAA0B,CAAC;CACxE,CAAC,CAKD"}
|
|
@@ -0,0 +1,208 @@
|
|
|
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 { URI } from '@hydranium/langium';
|
|
10
|
+
import { serverSharedFactory } from '../shared-services.js';
|
|
11
|
+
import { InMemoryFileSystemProvider } from './in-memory-file-system-provider.js';
|
|
12
|
+
/**
|
|
13
|
+
* The stored VALUE that means "deleted", as opposed to content.
|
|
14
|
+
*
|
|
15
|
+
* NUL-wrapped so no document can be taken for one: a file whose entire content
|
|
16
|
+
* is this exact string would be restored as a deletion, and text a grammar can
|
|
17
|
+
* parse holds no NUL. Deliberately not exported — a store must treat it as
|
|
18
|
+
* opaque content, and a host that could recognise it would be tempted to.
|
|
19
|
+
*/
|
|
20
|
+
const TOMBSTONE = '\u0000hydranium:deleted\u0000';
|
|
21
|
+
/**
|
|
22
|
+
* An {@link InMemoryFileSystemProvider} whose writes survive the page: the map
|
|
23
|
+
* is still the read path, and every write is mirrored into an asynchronous
|
|
24
|
+
* {@link FileSystemStore} that the next start is restored from.
|
|
25
|
+
*
|
|
26
|
+
* # The seed is the baseline and the store is the delta
|
|
27
|
+
*
|
|
28
|
+
* A restored entry wins over the seed for the same key; a seeded file the store
|
|
29
|
+
* has never heard of is served from the seed. So a first visit is the seed
|
|
30
|
+
* exactly, a returning visit is the seed with the edits laid over it, and a file
|
|
31
|
+
* the host adds to its seed later appears for a visitor who already has stored
|
|
32
|
+
* content — which whole-store precedence would have hidden until they cleared
|
|
33
|
+
* their storage.
|
|
34
|
+
*
|
|
35
|
+
* # Deleting a seeded file writes a marker, because dropping its entry would not
|
|
36
|
+
*
|
|
37
|
+
* A delta over a baseline cannot express absence by omission: removing the
|
|
38
|
+
* stored entry for a seeded file returns it to its seeded content on the next
|
|
39
|
+
* restore, which is a deletion that undoes itself. So {@link deleteFile} stores
|
|
40
|
+
* a TOMBSTONE for a path the seed carries, and restoring one applies it as a
|
|
41
|
+
* deletion rather than as content. Re-creating the file is an ordinary write over
|
|
42
|
+
* the marker, so nothing has to un-mark it.
|
|
43
|
+
*
|
|
44
|
+
* A path the seed does NOT carry needs no marker — absence from the store is
|
|
45
|
+
* already absence — so its entry is removed instead, which is what keeps a host
|
|
46
|
+
* that creates and deletes scratch files from growing the store forever.
|
|
47
|
+
*
|
|
48
|
+
* The marker is a reserved VALUE rather than a reserved key, and that is for the
|
|
49
|
+
* store's sake: a key is a seed-space path by contract, and a store may map keys
|
|
50
|
+
* to real filenames, where a reserved key prefix would ask it to create a file
|
|
51
|
+
* whose name is not a path. As a value it needs nothing from any store. Two
|
|
52
|
+
* consequences worth knowing: a host that reads the store directly — to count
|
|
53
|
+
* what is held, say — sees marker entries among the content ones and cannot tell
|
|
54
|
+
* them apart; and a document whose ENTIRE content is the marker string would be
|
|
55
|
+
* restored as deleted, which is why the marker is NUL-wrapped and text a grammar
|
|
56
|
+
* can parse is not.
|
|
57
|
+
*
|
|
58
|
+
* # A registered virtual document still wins
|
|
59
|
+
*
|
|
60
|
+
* `readFileSync` consults the virtual-document seam before the map, so a stdlib
|
|
61
|
+
* contributed in code keeps answering for its URI whether or not the store holds
|
|
62
|
+
* one. The store cannot shadow it, which is what keeps a rebuild that re-reads
|
|
63
|
+
* that URI from losing the stdlib.
|
|
64
|
+
*
|
|
65
|
+
* # What it deliberately does not answer
|
|
66
|
+
*
|
|
67
|
+
* The store is scoped to the ORIGIN, not to the page: two pages on the same
|
|
68
|
+
* origin share it, and the user agent may evict it entirely. Both are properties
|
|
69
|
+
* of browser storage rather than of this class, and neither is worth a stub —
|
|
70
|
+
* eviction presents as a first visit, which is a state this provider is
|
|
71
|
+
* correct in.
|
|
72
|
+
*/
|
|
73
|
+
export class PersistentFileSystemProvider extends InMemoryFileSystemProvider {
|
|
74
|
+
store;
|
|
75
|
+
/**
|
|
76
|
+
* The map-key prefix store keys are relative to, WITH its trailing
|
|
77
|
+
* separator, or `undefined` when store keys are absolute URIs.
|
|
78
|
+
*/
|
|
79
|
+
storeRoot;
|
|
80
|
+
/**
|
|
81
|
+
* The seed's paths, in STORE-key space rather than as the record was written.
|
|
82
|
+
*
|
|
83
|
+
* Normalised on the way in for the same reason restoring is: a seed key and
|
|
84
|
+
* the key derived from a URI disagree for a percent-encodable path, so a raw
|
|
85
|
+
* `Object.keys` set would call `a b.x` unseeded and remove its entry instead
|
|
86
|
+
* of marking it — a deletion that quietly undoes itself on the next load.
|
|
87
|
+
*/
|
|
88
|
+
seededPaths;
|
|
89
|
+
constructor(services, options) {
|
|
90
|
+
super(services, options);
|
|
91
|
+
this.store = options.store;
|
|
92
|
+
this.storeRoot = options.rootUri === undefined ? undefined : `${this.fileKey(options.rootUri)}/`;
|
|
93
|
+
this.seededPaths = new Set(Object.keys(options.seed ?? {}).map(path => this.storeKey(this.storeUri(path))));
|
|
94
|
+
for (const [path, content] of Object.entries(options.restored ?? {})) {
|
|
95
|
+
// `super.*`, so restoring does not mirror straight back into the store
|
|
96
|
+
// it just came from — a write-back on every start, and one that would
|
|
97
|
+
// resurrect an entry the store had legitimately dropped.
|
|
98
|
+
//
|
|
99
|
+
// Applied AFTER the seed and through the same key normalisation, which
|
|
100
|
+
// is what makes "restored wins" hold for a key the two spell
|
|
101
|
+
// differently (`a b.x` against `a%20b.x`) instead of depending on the
|
|
102
|
+
// insertion order of a merged record.
|
|
103
|
+
const uri = this.storeUri(path);
|
|
104
|
+
if (content === TOMBSTONE) {
|
|
105
|
+
super.deleteFile(uri);
|
|
106
|
+
}
|
|
107
|
+
else {
|
|
108
|
+
super.setFile(uri, content);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* The sync twin, mirrored without waiting.
|
|
114
|
+
*
|
|
115
|
+
* It has no way to report a store failure to its caller, so the tracer is the
|
|
116
|
+
* only channel it has — which is why {@link writeFile}, the path a save
|
|
117
|
+
* actually takes, awaits instead.
|
|
118
|
+
*/
|
|
119
|
+
setFile(uri, content) {
|
|
120
|
+
super.setFile(uri, content);
|
|
121
|
+
this.persist(uri, content).catch((error) => this.reportStoreFailure('store', uri, error));
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Write through to the store and REJECT if it refuses.
|
|
125
|
+
*
|
|
126
|
+
* A quota failure or an evicted origin has to reach the client that asked for
|
|
127
|
+
* the save: the alternative is a page that reports a saved workspace and
|
|
128
|
+
* reloads without it, which is the same shape as persistence working.
|
|
129
|
+
*
|
|
130
|
+
* `super.setFile` rather than `this.setFile`, so the awaited mirror below is
|
|
131
|
+
* the only one — the override would fire a second, unawaited write for the
|
|
132
|
+
* same content.
|
|
133
|
+
*/
|
|
134
|
+
async writeFile(uri, content) {
|
|
135
|
+
super.setFile(uri, content);
|
|
136
|
+
await this.persist(uri, content);
|
|
137
|
+
}
|
|
138
|
+
deleteFile(uri) {
|
|
139
|
+
super.deleteFile(uri);
|
|
140
|
+
this.forget(uri).catch((error) => this.reportStoreFailure('forget', uri, error));
|
|
141
|
+
}
|
|
142
|
+
/** The absolute URI a store-space `path` addresses. */
|
|
143
|
+
storeUri(path) {
|
|
144
|
+
return URI.parse(this.storeRoot === undefined ? path : `${this.storeRoot}${path}`);
|
|
145
|
+
}
|
|
146
|
+
/** Mirror one write. `async` so a bad key rejects rather than throwing at the call site. */
|
|
147
|
+
async persist(uri, content) {
|
|
148
|
+
await this.store.write(this.storeKey(uri), content);
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Mirror one deletion: a tombstone where the seed would otherwise bring the
|
|
152
|
+
* file back, a plain removal where it would not. `async` for the same reason
|
|
153
|
+
* as {@link persist}.
|
|
154
|
+
*/
|
|
155
|
+
async forget(uri) {
|
|
156
|
+
const path = this.storeKey(uri);
|
|
157
|
+
if (this.seededPaths.has(path)) {
|
|
158
|
+
await this.store.write(path, TOMBSTONE);
|
|
159
|
+
}
|
|
160
|
+
else {
|
|
161
|
+
await this.store.remove(path);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* The store key for `uri`, in the seed's key space.
|
|
166
|
+
*
|
|
167
|
+
* Throws for a URI outside `rootUri` rather than keying it absolutely beside
|
|
168
|
+
* the relative ones: a store holding both spellings restores under neither,
|
|
169
|
+
* and a host writing outside the workspace it declared has a wiring fault
|
|
170
|
+
* worth hearing about.
|
|
171
|
+
*/
|
|
172
|
+
storeKey(uri) {
|
|
173
|
+
const key = this.fileKey(uri);
|
|
174
|
+
if (this.storeRoot === undefined) {
|
|
175
|
+
return key;
|
|
176
|
+
}
|
|
177
|
+
if (!key.startsWith(this.storeRoot)) {
|
|
178
|
+
throw new Error(`Cannot persist ${uri.toString()}: outside the store root ${this.storeRoot}`);
|
|
179
|
+
}
|
|
180
|
+
return key.slice(this.storeRoot.length);
|
|
181
|
+
}
|
|
182
|
+
reportStoreFailure(operation, uri, error) {
|
|
183
|
+
this.tracer.error(`Failed to ${operation} ${uri.toString()}: ${error instanceof Error ? error.message : String(error)}`);
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Restore `options.store` and bind a {@link PersistentFileSystemProvider} over
|
|
188
|
+
* it, spread into the services context exactly where a Node host spreads
|
|
189
|
+
* `NodeFileSystem`.
|
|
190
|
+
*
|
|
191
|
+
* **It is asynchronous, and that is the ordering contract rather than an
|
|
192
|
+
* implementation detail.** The provider's reads are synchronous, so the stored
|
|
193
|
+
* workspace must be in the map before anything reads it — and a `hydrate()`
|
|
194
|
+
* method on the provider could not enforce that, because awaiting one after the
|
|
195
|
+
* transport exists is already too late: a `BrowserMessageReader` starts its port
|
|
196
|
+
* on construction but fires into an emitter with no listener until
|
|
197
|
+
* `startLanguageServer` calls `listen`, so an `initialize` arriving during the
|
|
198
|
+
* await is DROPPED — no error, no reply, a client that waits forever. Loading
|
|
199
|
+
* here, before the services and therefore before the connection exist, makes
|
|
200
|
+
* that unrepresentable rather than documented.
|
|
201
|
+
*/
|
|
202
|
+
export async function persistentFileSystem(options) {
|
|
203
|
+
const restored = await options.store.load();
|
|
204
|
+
return {
|
|
205
|
+
fileSystemProvider: serverSharedFactory(services => new PersistentFileSystemProvider(services, { ...options, restored }))
|
|
206
|
+
};
|
|
207
|
+
}
|
|
208
|
+
//# sourceMappingURL=persistent-file-system-provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"persistent-file-system-provider.js","sourceRoot":"","sources":["../../../src/langium/workspace/persistent-file-system-provider.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF,OAAO,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAC;AAEzC,OAAO,EAAE,mBAAmB,EAAoC,MAAM,uBAAuB,CAAC;AAC9F,OAAO,EAAuB,0BAA0B,EAAkC,MAAM,qCAAqC,CAAC;AAqDtI;;;;;;;GAOG;AACH,MAAM,SAAS,GAAG,+BAA+B,CAAC;AAiBlD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmDG;AACH,MAAM,OAAO,4BAA6B,SAAQ,0BAA0B;IACtD,KAAK,CAAkB;IAC1C;;;OAGG;IACgB,SAAS,CAAU;IACtC;;;;;;;OAOG;IACgB,WAAW,CAAsB;IAEpD,YAAY,QAAqC,EAAE,OAAoC;QACpF,KAAK,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACzB,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;QAC3B,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC;QACjG,IAAI,CAAC,WAAW,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5G,KAAK,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAC,EAAE,CAAC;YACpE,uEAAuE;YACvE,sEAAsE;YACtE,yDAAyD;YACzD,EAAE;YACF,uEAAuE;YACvE,6DAA6D;YAC7D,sEAAsE;YACtE,sCAAsC;YACtC,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YAChC,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;gBACzB,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;YACzB,CAAC;iBAAM,CAAC;gBACL,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;YAC/B,CAAC;QACJ,CAAC;IACJ,CAAC;IAED;;;;;;OAMG;IACM,OAAO,CAAC,GAAQ,EAAE,OAAe;QACvC,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QAC5B,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;IACtG,CAAC;IAED;;;;;;;;;;OAUG;IACM,KAAK,CAAC,SAAS,CAAC,GAAQ,EAAE,OAAe;QAC/C,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QAC5B,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IACpC,CAAC;IAEQ,UAAU,CAAC,GAAQ;QACzB,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;QACtB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,QAAQ,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;IAC7F,CAAC;IAED,uDAAuD;IAC7C,QAAQ,CAAC,IAAY;QAC5B,OAAO,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS,GAAG,IAAI,EAAE,CAAC,CAAC;IACtF,CAAC;IAED,4FAA4F;IAClF,KAAK,CAAC,OAAO,CAAC,GAAQ,EAAE,OAAe;QAC9C,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;IACvD,CAAC;IAED;;;;OAIG;IACO,KAAK,CAAC,MAAM,CAAC,GAAQ;QAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QAChC,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAC9B,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QAC3C,CAAC;aAAM,CAAC;YACL,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACjC,CAAC;IACJ,CAAC;IAED;;;;;;;OAOG;IACO,QAAQ,CAAC,GAAQ;QACxB,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC9B,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;YAChC,OAAO,GAAG,CAAC;QACd,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;YACnC,MAAM,IAAI,KAAK,CAAC,kBAAkB,GAAG,CAAC,QAAQ,EAAE,4BAA4B,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;QACjG,CAAC;QACD,OAAO,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IAC3C,CAAC;IAES,kBAAkB,CAAC,SAAiB,EAAE,GAAQ,EAAE,KAAc;QACrE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,SAAS,IAAI,GAAG,CAAC,QAAQ,EAAE,KAAK,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC5H,CAAC;CACH;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,OAAoC;IAG5E,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;IAC5C,OAAO;QACJ,kBAAkB,EAAE,mBAAmB,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,4BAA4B,CAAC,QAAQ,EAAE,EAAE,GAAG,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;KAC3H,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
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 AstNode } from '@hydranium/langium';
|
|
10
|
+
/**
|
|
11
|
+
* Mark `node` as synthetic. Returns the node for fluent chaining.
|
|
12
|
+
*
|
|
13
|
+
* Opting into the synthetic marker drives behaviour changes downstream
|
|
14
|
+
* — most notably, the framework's
|
|
15
|
+
* `HydraniumDocumentValidator.shouldSkipValidation` default
|
|
16
|
+
* skips marked nodes (unless `validateSyntheticNodes` is enabled),
|
|
17
|
+
* short-circuiting validation for mirrors and stdlib content. Adopters
|
|
18
|
+
* who want a synthetic node validated normally simply do not mark it.
|
|
19
|
+
*/
|
|
20
|
+
export declare function markSynthetic<T extends AstNode>(node: T): T;
|
|
21
|
+
/**
|
|
22
|
+
* Walk an AST tree rooted at `root` and {@link markSynthetic mark}
|
|
23
|
+
* every node. Use when building a stdlib / library document where
|
|
24
|
+
* every node should opt into skip-validation semantics in one stroke.
|
|
25
|
+
*
|
|
26
|
+
* For partial marking (some nodes mirrored, some validated normally),
|
|
27
|
+
* call {@link markSynthetic} on the specific nodes instead.
|
|
28
|
+
*/
|
|
29
|
+
export declare function markSyntheticTree(root: AstNode): void;
|
|
30
|
+
/**
|
|
31
|
+
* True iff `node` has been explicitly marked synthetic via
|
|
32
|
+
* {@link markSynthetic} / {@link markSyntheticTree}. The check is a
|
|
33
|
+
* pure flag read — the URI scheme of the containing document does
|
|
34
|
+
* not influence this predicate (see `isVirtualUri` for the separate
|
|
35
|
+
* document-identity axis).
|
|
36
|
+
*/
|
|
37
|
+
export declare function isSyntheticNode(node: AstNode): boolean;
|
|
38
|
+
//# sourceMappingURL=synthetic.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"synthetic.d.ts","sourceRoot":"","sources":["../../../src/langium/workspace/synthetic.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAGlF,OAAO,EAAE,KAAK,OAAO,EAAY,MAAM,oBAAoB,CAAC;AAc5D;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAAC,CAAC,SAAS,OAAO,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,CAG3D;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAIrD;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAEtD"}
|
|
@@ -0,0 +1,58 @@
|
|
|
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 { AstUtils } from '@hydranium/langium';
|
|
10
|
+
// The `$synthetic` `AstNode` type augmentation lives in `@hydranium/langium`
|
|
11
|
+
// (the langium chokepoint); it arrives here ambiently via that dependency.
|
|
12
|
+
// This module owns the *behaviour* of the synthetic-node concept — the marker
|
|
13
|
+
// helpers below and the validation-skip default that reads them.
|
|
14
|
+
//
|
|
15
|
+
// This is the NODE-provenance axis: a synthetic node is one not authored by
|
|
16
|
+
// the user — synthesized in code (a stdlib element) or by projection (a mirror
|
|
17
|
+
// of an inherited member). It is distinct from the *document* axis, where a
|
|
18
|
+
// virtual document is one with no backing file. The two are orthogonal: a
|
|
19
|
+
// synthetic node can live in a real file, and a virtual document can hold
|
|
20
|
+
// non-synthetic nodes.
|
|
21
|
+
/**
|
|
22
|
+
* Mark `node` as synthetic. Returns the node for fluent chaining.
|
|
23
|
+
*
|
|
24
|
+
* Opting into the synthetic marker drives behaviour changes downstream
|
|
25
|
+
* — most notably, the framework's
|
|
26
|
+
* `HydraniumDocumentValidator.shouldSkipValidation` default
|
|
27
|
+
* skips marked nodes (unless `validateSyntheticNodes` is enabled),
|
|
28
|
+
* short-circuiting validation for mirrors and stdlib content. Adopters
|
|
29
|
+
* who want a synthetic node validated normally simply do not mark it.
|
|
30
|
+
*/
|
|
31
|
+
export function markSynthetic(node) {
|
|
32
|
+
node.$synthetic = true;
|
|
33
|
+
return node;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Walk an AST tree rooted at `root` and {@link markSynthetic mark}
|
|
37
|
+
* every node. Use when building a stdlib / library document where
|
|
38
|
+
* every node should opt into skip-validation semantics in one stroke.
|
|
39
|
+
*
|
|
40
|
+
* For partial marking (some nodes mirrored, some validated normally),
|
|
41
|
+
* call {@link markSynthetic} on the specific nodes instead.
|
|
42
|
+
*/
|
|
43
|
+
export function markSyntheticTree(root) {
|
|
44
|
+
for (const node of AstUtils.streamAst(root)) {
|
|
45
|
+
markSynthetic(node);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* True iff `node` has been explicitly marked synthetic via
|
|
50
|
+
* {@link markSynthetic} / {@link markSyntheticTree}. The check is a
|
|
51
|
+
* pure flag read — the URI scheme of the containing document does
|
|
52
|
+
* not influence this predicate (see `isVirtualUri` for the separate
|
|
53
|
+
* document-identity axis).
|
|
54
|
+
*/
|
|
55
|
+
export function isSyntheticNode(node) {
|
|
56
|
+
return node.$synthetic === true;
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=synthetic.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"synthetic.js","sourceRoot":"","sources":["../../../src/langium/workspace/synthetic.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAGlF,OAAO,EAAgB,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAE5D,6EAA6E;AAC7E,2EAA2E;AAC3E,8EAA8E;AAC9E,iEAAiE;AACjE,EAAE;AACF,4EAA4E;AAC5E,+EAA+E;AAC/E,4EAA4E;AAC5E,0EAA0E;AAC1E,0EAA0E;AAC1E,uBAAuB;AAEvB;;;;;;;;;GASG;AACH,MAAM,UAAU,aAAa,CAAoB,IAAO;IACpD,IAAmB,CAAC,UAAU,GAAG,IAAI,CAAC;IACvC,OAAO,IAAI,CAAC;AACf,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAa;IAC5C,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;QAC3C,aAAa,CAAC,IAAI,CAAC,CAAC;IACvB,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,eAAe,CAAC,IAAa;IAC1C,OAAO,IAAI,CAAC,UAAU,KAAK,IAAI,CAAC;AACnC,CAAC"}
|
|
@@ -0,0 +1,78 @@
|
|
|
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 { URI } from '@hydranium/langium';
|
|
10
|
+
import { type ServerSharedServicesMinimal } from '../shared-services.js';
|
|
11
|
+
/**
|
|
12
|
+
* URI scheme for virtual documents — LangiumDocuments that have no backing
|
|
13
|
+
* file on disk (a language's stdlib, library types, built-in definitions,
|
|
14
|
+
* mirrors, generated views). Chosen so it cannot collide with on-disk `file:`
|
|
15
|
+
* URIs, and so the framework's FileSystemProvider can recognise and serve them
|
|
16
|
+
* on re-read (see {@link serveVirtualDocument}).
|
|
17
|
+
*/
|
|
18
|
+
export declare const VIRTUAL_SCHEME = "virtual";
|
|
19
|
+
/**
|
|
20
|
+
* Build a URI for a virtual document — one whose content is provided in code
|
|
21
|
+
* rather than read from disk, either as a parsed string
|
|
22
|
+
* (`LangiumDocumentFactory.fromString`) or a code-built AST
|
|
23
|
+
* (`LangiumDocumentFactory.fromModel`).
|
|
24
|
+
*
|
|
25
|
+
* The URI uses the {@link VIRTUAL_SCHEME} scheme. The first segment carries
|
|
26
|
+
* contributor identity for diagnostics, telemetry, and "go to source" UI;
|
|
27
|
+
* additional segments scope sub-documents within one contributor.
|
|
28
|
+
*
|
|
29
|
+
* Pair with a `LangiumDocumentFactory` to construct a document whose content
|
|
30
|
+
* lives in memory. The resulting document is suitable as the `document`
|
|
31
|
+
* argument to the tier factories on `HydraniumAstNodeDescriptionProvider`
|
|
32
|
+
* (`createLocal` / `createProject` / `createPublic` / `createUniversal`).
|
|
33
|
+
*
|
|
34
|
+
* # End the URI with a registered file extension
|
|
35
|
+
*
|
|
36
|
+
* Called with a contributor and no further segments this yields
|
|
37
|
+
* `virtual:<contributor>`, which has no extension and so matches no registered
|
|
38
|
+
* language — a trap. Every per-language service is resolved per URI, and a
|
|
39
|
+
* virtual document is never open in `TextDocuments`, so the declared-languageId
|
|
40
|
+
* lookup rung cannot serve it either: the document is indexed but inert,
|
|
41
|
+
* contributing nothing to the scopes it was written to populate, with no error
|
|
42
|
+
* anywhere. Pass the extension as the last segment,
|
|
43
|
+
* `virtualUri(contributor, 'name.<ext>')`. `HydraniumWorkspaceManager` warns
|
|
44
|
+
* when a seeded additional document fails to route, which is where this
|
|
45
|
+
* usually surfaces.
|
|
46
|
+
*
|
|
47
|
+
* # Relationship to the `$synthetic` node marker
|
|
48
|
+
*
|
|
49
|
+
* The URI scheme tags the *document* as not-from-disk; the `$synthetic` node
|
|
50
|
+
* marker (see `markSynthetic` / `isSyntheticNode`) tags an individual *node* as
|
|
51
|
+
* not user-authored. A virtual document may contain non-synthetic nodes and
|
|
52
|
+
* vice versa.
|
|
53
|
+
*
|
|
54
|
+
* Both axes are read by `HydraniumDocumentValidator`, at different
|
|
55
|
+
* granularities: the scheme skips the WHOLE document
|
|
56
|
+
* (`validateVirtualDocuments`, default `false`, so the walk is avoided
|
|
57
|
+
* entirely), the marker skips a node and its children
|
|
58
|
+
* (`validateSyntheticNodes`, default `false`).
|
|
59
|
+
*/
|
|
60
|
+
export declare function virtualUri(contributor: string, ...segments: string[]): URI;
|
|
61
|
+
/** True iff `uri` uses the {@link VIRTUAL_SCHEME} scheme produced by {@link virtualUri}. */
|
|
62
|
+
export declare function isVirtualUri(uri: URI | string): boolean;
|
|
63
|
+
/**
|
|
64
|
+
* Serve the text of a registered virtual document, or `undefined` when `uri`
|
|
65
|
+
* is not virtual or no document is registered for it (so a FileSystemProvider
|
|
66
|
+
* delegates to its real backing).
|
|
67
|
+
*
|
|
68
|
+
* The framework's FileSystemProvider defaults call this at the top of
|
|
69
|
+
* `readFile` / `readFileSync` so a virtual document survives a re-read:
|
|
70
|
+
* `DocumentBuilder.update` / `LangiumDocumentFactory.update` re-read a changed
|
|
71
|
+
* URI from the FileSystemProvider, and nothing on disk backs a virtual URI. The
|
|
72
|
+
* text comes from the registered document — the original source for a
|
|
73
|
+
* `fromString` document, or the serialized form retained by the framework's
|
|
74
|
+
* `fromModel` (which fills in the text Langium leaves empty). No serializer is
|
|
75
|
+
* consulted here; the text is already on the document.
|
|
76
|
+
*/
|
|
77
|
+
export declare function serveVirtualDocument(services: ServerSharedServicesMinimal, uri: URI): string | undefined;
|
|
78
|
+
//# sourceMappingURL=virtual-document.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"virtual-document.d.ts","sourceRoot":"","sources":["../../../src/langium/workspace/virtual-document.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF,OAAO,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAC;AACzC,OAAO,EAAE,KAAK,2BAA2B,EAAE,MAAM,uBAAuB,CAAC;AAEzE;;;;;;GAMG;AACH,eAAO,MAAM,cAAc,YAAY,CAAC;AAExC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AACH,wBAAgB,UAAU,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,QAAQ,EAAE,MAAM,EAAE,GAAG,GAAG,CAG1E;AAED,4FAA4F;AAC5F,wBAAgB,YAAY,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,GAAG,OAAO,CAGvD;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,2BAA2B,EAAE,GAAG,EAAE,GAAG,GAAG,MAAM,GAAG,SAAS,CAMxG"}
|