@hydranium/core 1.0.0-next.31 → 1.0.0-next.315
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/README.md +78 -82
- package/lib/browser/host-heads-in-worker.d.ts +77 -0
- package/lib/browser/host-heads-in-worker.d.ts.map +1 -0
- package/lib/browser/host-heads-in-worker.js +169 -0
- package/lib/browser/host-heads-in-worker.js.map +1 -0
- package/lib/browser/index.d.ts +12 -0
- package/lib/browser/index.d.ts.map +1 -0
- package/lib/browser/index.js +17 -0
- package/lib/browser/index.js.map +1 -0
- package/lib/browser/indexeddb-file-system-store.d.ts +82 -0
- package/lib/browser/indexeddb-file-system-store.d.ts.map +1 -0
- package/lib/browser/indexeddb-file-system-store.js +181 -0
- package/lib/browser/indexeddb-file-system-store.js.map +1 -0
- package/lib/browser/start-language-server-in-worker.d.ts +32 -0
- package/lib/browser/start-language-server-in-worker.d.ts.map +1 -0
- package/lib/browser/start-language-server-in-worker.js +40 -0
- package/lib/browser/start-language-server-in-worker.js.map +1 -0
- package/lib/documents/ast-document-manager.d.ts +256 -124
- package/lib/documents/ast-document-manager.d.ts.map +1 -1
- package/lib/documents/ast-document-manager.js +293 -132
- package/lib/documents/ast-document-manager.js.map +1 -1
- package/lib/documents/client-ids.d.ts +5 -19
- package/lib/documents/client-ids.d.ts.map +1 -1
- package/lib/documents/client-ids.js +5 -19
- package/lib/documents/client-ids.js.map +1 -1
- package/lib/documents/client-session-errors.d.ts +15 -0
- package/lib/documents/client-session-errors.d.ts.map +1 -0
- package/lib/documents/client-session-errors.js +15 -0
- package/lib/documents/client-session-errors.js.map +1 -0
- package/lib/documents/client-session-registry.d.ts +146 -0
- package/lib/documents/client-session-registry.d.ts.map +1 -0
- package/lib/documents/client-session-registry.js +207 -0
- package/lib/documents/client-session-registry.js.map +1 -0
- package/lib/documents/dirty-state-tracker.d.ts +101 -0
- package/lib/documents/dirty-state-tracker.d.ts.map +1 -0
- package/lib/documents/dirty-state-tracker.js +85 -0
- package/lib/documents/dirty-state-tracker.js.map +1 -0
- package/lib/documents/document-release-handler.d.ts +204 -0
- package/lib/documents/document-release-handler.d.ts.map +1 -0
- package/lib/documents/document-release-handler.js +317 -0
- package/lib/documents/document-release-handler.js.map +1 -0
- package/lib/documents/document-release-scheduler.d.ts +67 -0
- package/lib/documents/document-release-scheduler.d.ts.map +1 -0
- package/lib/documents/document-release-scheduler.js +80 -0
- package/lib/documents/document-release-scheduler.js.map +1 -0
- package/lib/documents/file-system-task-queue.d.ts +52 -0
- package/lib/documents/file-system-task-queue.d.ts.map +1 -0
- package/lib/documents/file-system-task-queue.js +37 -0
- package/lib/documents/file-system-task-queue.js.map +1 -0
- package/lib/documents/hydranium-text-documents.d.ts +436 -282
- package/lib/documents/hydranium-text-documents.d.ts.map +1 -1
- package/lib/documents/hydranium-text-documents.js +897 -483
- package/lib/documents/hydranium-text-documents.js.map +1 -1
- package/lib/documents/index.d.ts +10 -2
- package/lib/documents/index.d.ts.map +1 -1
- package/lib/documents/index.js +10 -2
- package/lib/documents/index.js.map +1 -1
- package/lib/documents/language-client-shadow.d.ts +234 -0
- package/lib/documents/language-client-shadow.d.ts.map +1 -0
- package/lib/documents/language-client-shadow.js +306 -0
- package/lib/documents/language-client-shadow.js.map +1 -0
- package/lib/documents/model-ledger.d.ts +47 -0
- package/lib/documents/model-ledger.d.ts.map +1 -0
- package/lib/documents/model-ledger.js +30 -0
- package/lib/documents/model-ledger.js.map +1 -0
- package/lib/documents/text-ledger.d.ts +64 -0
- package/lib/documents/text-ledger.d.ts.map +1 -0
- package/lib/documents/text-ledger.js +63 -0
- package/lib/documents/text-ledger.js.map +1 -0
- package/lib/documents/version-sync-service.d.ts +138 -0
- package/lib/documents/version-sync-service.d.ts.map +1 -0
- package/lib/documents/version-sync-service.js +173 -0
- package/lib/documents/version-sync-service.js.map +1 -0
- package/lib/index.d.ts +5 -0
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +8 -0
- package/lib/index.js.map +1 -1
- package/lib/langium/ast-extension/ast-extension-service.d.ts +42 -31
- package/lib/langium/ast-extension/ast-extension-service.d.ts.map +1 -1
- package/lib/langium/ast-extension/ast-extension-service.js +45 -19
- package/lib/langium/ast-extension/ast-extension-service.js.map +1 -1
- package/lib/langium/bootstrap.d.ts +49 -36
- package/lib/langium/bootstrap.d.ts.map +1 -1
- package/lib/langium/bootstrap.js +91 -45
- package/lib/langium/bootstrap.js.map +1 -1
- package/lib/langium/build-phase-pass/build-phase-pass-service.d.ts +9 -9
- package/lib/langium/build-phase-pass/build-phase-pass-service.d.ts.map +1 -1
- package/lib/langium/build-phase-pass/build-phase-pass-service.js +25 -16
- package/lib/langium/build-phase-pass/build-phase-pass-service.js.map +1 -1
- package/lib/langium/build-phase-pass/build-phase-pass.d.ts +20 -8
- package/lib/langium/build-phase-pass/build-phase-pass.d.ts.map +1 -1
- package/lib/langium/build-phase-pass/build-phase-pass.js +20 -0
- package/lib/langium/build-phase-pass/build-phase-pass.js.map +1 -1
- package/lib/langium/composite-ast-reflection.d.ts +46 -0
- package/lib/langium/composite-ast-reflection.d.ts.map +1 -0
- package/lib/langium/composite-ast-reflection.js +97 -0
- package/lib/langium/composite-ast-reflection.js.map +1 -0
- package/lib/langium/config/configuration-provider.d.ts +81 -0
- package/lib/langium/config/configuration-provider.d.ts.map +1 -0
- package/lib/langium/config/configuration-provider.js +112 -0
- package/lib/langium/config/configuration-provider.js.map +1 -0
- package/lib/langium/config/index.d.ts +1 -0
- package/lib/langium/config/index.d.ts.map +1 -1
- package/lib/langium/config/index.js +1 -0
- package/lib/langium/config/index.js.map +1 -1
- package/lib/langium/config/settings.js.map +1 -1
- package/lib/langium/diagnostics/hydranium-langium-profiler.d.ts +9 -20
- package/lib/langium/diagnostics/hydranium-langium-profiler.d.ts.map +1 -1
- package/lib/langium/diagnostics/hydranium-langium-profiler.js +15 -24
- package/lib/langium/diagnostics/hydranium-langium-profiler.js.map +1 -1
- package/lib/langium/diagnostics/log-preamble.js +1 -1
- package/lib/langium/diagnostics/log-preamble.js.map +1 -1
- package/lib/langium/diagnostics/logger.d.ts +19 -4
- package/lib/langium/diagnostics/logger.d.ts.map +1 -1
- package/lib/langium/diagnostics/logger.js +36 -11
- package/lib/langium/diagnostics/logger.js.map +1 -1
- package/lib/langium/diagnostics/lsp-logger.d.ts +17 -0
- package/lib/langium/diagnostics/lsp-logger.d.ts.map +1 -1
- package/lib/langium/diagnostics/lsp-logger.js +58 -17
- package/lib/langium/diagnostics/lsp-logger.js.map +1 -1
- package/lib/langium/diagnostics/server-tracer.d.ts.map +1 -1
- package/lib/langium/diagnostics/server-tracer.js.map +1 -1
- package/lib/langium/document-builder/build-pipeline-integration.d.ts +21 -1
- package/lib/langium/document-builder/build-pipeline-integration.d.ts.map +1 -1
- package/lib/langium/document-builder/build-pipeline-integration.js +28 -30
- package/lib/langium/document-builder/build-pipeline-integration.js.map +1 -1
- package/lib/langium/document-builder/build-session.d.ts +6 -5
- package/lib/langium/document-builder/build-session.d.ts.map +1 -1
- package/lib/langium/document-builder/build-session.js +5 -5
- package/lib/langium/document-builder/build-session.js.map +1 -1
- package/lib/langium/document-builder/document-builder.d.ts +309 -35
- package/lib/langium/document-builder/document-builder.d.ts.map +1 -1
- package/lib/langium/document-builder/document-builder.js +511 -75
- package/lib/langium/document-builder/document-builder.js.map +1 -1
- package/lib/langium/documentation/comment-provider.d.ts.map +1 -1
- package/lib/langium/documentation/comment-provider.js.map +1 -1
- package/lib/langium/integration-services.d.ts +40 -24
- package/lib/langium/integration-services.d.ts.map +1 -1
- package/lib/langium/integration-services.js +7 -4
- package/lib/langium/integration-services.js.map +1 -1
- package/lib/langium/integrity/integrity-rule.d.ts +17 -8
- package/lib/langium/integrity/integrity-rule.d.ts.map +1 -1
- package/lib/langium/integrity/integrity-rule.js.map +1 -1
- package/lib/langium/integrity/integrity-service.d.ts +95 -27
- package/lib/langium/integrity/integrity-service.d.ts.map +1 -1
- package/lib/langium/integrity/integrity-service.js +303 -63
- package/lib/langium/integrity/integrity-service.js.map +1 -1
- package/lib/langium/keys/containment.d.ts +64 -0
- package/lib/langium/keys/containment.d.ts.map +1 -0
- package/lib/langium/keys/containment.js +53 -0
- package/lib/langium/keys/containment.js.map +1 -0
- package/lib/langium/keys/index.d.ts +1 -0
- package/lib/langium/keys/index.d.ts.map +1 -1
- package/lib/langium/keys/index.js +1 -0
- package/lib/langium/keys/index.js.map +1 -1
- package/lib/langium/keys/name-based-key-provider.d.ts +4 -0
- package/lib/langium/keys/name-based-key-provider.d.ts.map +1 -1
- package/lib/langium/keys/name-based-key-provider.js +4 -0
- package/lib/langium/keys/name-based-key-provider.js.map +1 -1
- package/lib/langium/keys/positional-key-provider.d.ts.map +1 -1
- package/lib/langium/keys/positional-key-provider.js.map +1 -1
- package/lib/langium/labeling/label-provider.d.ts.map +1 -1
- package/lib/langium/labeling/label-provider.js.map +1 -1
- package/lib/langium/language-module.d.ts +30 -5
- package/lib/langium/language-module.d.ts.map +1 -1
- package/lib/langium/language-module.js +18 -4
- package/lib/langium/language-module.js.map +1 -1
- package/lib/langium/model-service/client-session.d.ts +383 -0
- package/lib/langium/model-service/client-session.d.ts.map +1 -0
- package/lib/langium/model-service/client-session.js +455 -0
- package/lib/langium/model-service/client-session.js.map +1 -0
- package/lib/langium/model-service/index.d.ts +2 -0
- package/lib/langium/model-service/index.d.ts.map +1 -1
- package/lib/langium/model-service/index.js +2 -0
- package/lib/langium/model-service/index.js.map +1 -1
- package/lib/langium/model-service/model-events.d.ts +66 -0
- package/lib/langium/model-service/model-events.d.ts.map +1 -0
- package/lib/langium/model-service/model-events.js +10 -0
- package/lib/langium/model-service/model-events.js.map +1 -0
- package/lib/langium/model-service/model-service.d.ts +480 -289
- package/lib/langium/model-service/model-service.d.ts.map +1 -1
- package/lib/langium/model-service/model-service.js +597 -456
- package/lib/langium/model-service/model-service.js.map +1 -1
- package/lib/langium/module.d.ts +158 -37
- package/lib/langium/module.d.ts.map +1 -1
- package/lib/langium/module.js +52 -36
- package/lib/langium/module.js.map +1 -1
- package/lib/langium/naming/name-provider.d.ts +42 -7
- package/lib/langium/naming/name-provider.d.ts.map +1 -1
- package/lib/langium/naming/name-provider.js +10 -4
- package/lib/langium/naming/name-provider.js.map +1 -1
- package/lib/langium/naming/name-separator-validation.d.ts +23 -1
- package/lib/langium/naming/name-separator-validation.d.ts.map +1 -1
- package/lib/langium/naming/name-separator-validation.js +22 -0
- package/lib/langium/naming/name-separator-validation.js.map +1 -1
- package/lib/langium/project/abstract-project-manager.d.ts.map +1 -1
- package/lib/langium/project/abstract-project-manager.js +13 -6
- package/lib/langium/project/abstract-project-manager.js.map +1 -1
- package/lib/langium/project/project-change-event.d.ts +2 -2
- package/lib/langium/project/single-project-manager.d.ts.map +1 -1
- package/lib/langium/project/single-project-manager.js.map +1 -1
- package/lib/langium/residency/cst-residency-service.d.ts +38 -14
- package/lib/langium/residency/cst-residency-service.d.ts.map +1 -1
- package/lib/langium/residency/cst-residency-service.js +24 -58
- package/lib/langium/residency/cst-residency-service.js.map +1 -1
- package/lib/langium/scope/ast-node-description-provider.d.ts.map +1 -1
- package/lib/langium/scope/ast-node-description-provider.js.map +1 -1
- package/lib/langium/scope/fallback-scope.d.ts +27 -0
- package/lib/langium/scope/fallback-scope.d.ts.map +1 -0
- package/lib/langium/scope/fallback-scope.js +35 -0
- package/lib/langium/scope/fallback-scope.js.map +1 -0
- package/lib/langium/scope/hydranium-scope-computation.d.ts +21 -18
- package/lib/langium/scope/hydranium-scope-computation.d.ts.map +1 -1
- package/lib/langium/scope/hydranium-scope-computation.js +38 -39
- package/lib/langium/scope/hydranium-scope-computation.js.map +1 -1
- package/lib/langium/scope/hydranium-scope-provider.d.ts +29 -11
- package/lib/langium/scope/hydranium-scope-provider.d.ts.map +1 -1
- package/lib/langium/scope/hydranium-scope-provider.js +37 -15
- package/lib/langium/scope/hydranium-scope-provider.js.map +1 -1
- package/lib/langium/scope/index.d.ts +1 -0
- package/lib/langium/scope/index.d.ts.map +1 -1
- package/lib/langium/scope/index.js +1 -0
- package/lib/langium/scope/index.js.map +1 -1
- package/lib/langium/scope/reference-builder.d.ts.map +1 -1
- package/lib/langium/scope/reference-builder.js.map +1 -1
- package/lib/langium/scope/reference-candidate-provider.d.ts +6 -5
- package/lib/langium/scope/reference-candidate-provider.d.ts.map +1 -1
- package/lib/langium/scope/reference-candidate-provider.js +3 -2
- package/lib/langium/scope/reference-candidate-provider.js.map +1 -1
- package/lib/langium/scope/scope-extension-service.d.ts +41 -37
- package/lib/langium/scope/scope-extension-service.d.ts.map +1 -1
- package/lib/langium/scope/scope-extension-service.js +57 -29
- package/lib/langium/scope/scope-extension-service.js.map +1 -1
- package/lib/langium/scope/scoped-ast-node-description.d.ts +1 -3
- package/lib/langium/scope/scoped-ast-node-description.d.ts.map +1 -1
- package/lib/langium/scope/scoped-ast-node-description.js +1 -3
- package/lib/langium/scope/scoped-ast-node-description.js.map +1 -1
- package/lib/langium/serialization/abstract-serializer.d.ts +38 -27
- package/lib/langium/serialization/abstract-serializer.d.ts.map +1 -1
- package/lib/langium/serialization/abstract-serializer.js +54 -30
- package/lib/langium/serialization/abstract-serializer.js.map +1 -1
- package/lib/langium/serialization/json-serializer.d.ts +8 -1
- package/lib/langium/serialization/json-serializer.d.ts.map +1 -1
- package/lib/langium/serialization/json-serializer.js +13 -3
- package/lib/langium/serialization/json-serializer.js.map +1 -1
- package/lib/langium/serialization/serializer.d.ts +1 -1
- package/lib/langium/serialization/yaml-serializer.d.ts +4 -0
- package/lib/langium/serialization/yaml-serializer.d.ts.map +1 -1
- package/lib/langium/serialization/yaml-serializer.js +4 -0
- package/lib/langium/serialization/yaml-serializer.js.map +1 -1
- package/lib/langium/service-registry.d.ts +29 -1
- package/lib/langium/service-registry.d.ts.map +1 -1
- package/lib/langium/service-registry.js +37 -0
- package/lib/langium/service-registry.js.map +1 -1
- package/lib/langium/shared-services.d.ts +23 -6
- package/lib/langium/shared-services.d.ts.map +1 -1
- package/lib/langium/shared-services.js.map +1 -1
- package/lib/langium/single-langium-copy.d.ts +22 -0
- package/lib/langium/single-langium-copy.d.ts.map +1 -0
- package/lib/langium/single-langium-copy.js +36 -0
- package/lib/langium/single-langium-copy.js.map +1 -0
- package/lib/langium/transfer/transfer-encoder.d.ts +84 -35
- package/lib/langium/transfer/transfer-encoder.d.ts.map +1 -1
- package/lib/langium/transfer/transfer-encoder.js +34 -23
- package/lib/langium/transfer/transfer-encoder.js.map +1 -1
- package/lib/langium/trivia/comment-preserver.d.ts +423 -0
- package/lib/langium/trivia/comment-preserver.d.ts.map +1 -0
- package/lib/langium/trivia/comment-preserver.js +906 -0
- package/lib/langium/trivia/comment-preserver.js.map +1 -0
- package/lib/langium/trivia/document-ending-preserver.d.ts +51 -0
- package/lib/langium/trivia/document-ending-preserver.d.ts.map +1 -0
- package/lib/langium/trivia/document-ending-preserver.js +62 -0
- package/lib/langium/trivia/document-ending-preserver.js.map +1 -0
- package/lib/langium/trivia/index.d.ts +14 -0
- package/lib/langium/trivia/index.d.ts.map +1 -0
- package/lib/langium/trivia/index.js +14 -0
- package/lib/langium/trivia/index.js.map +1 -0
- package/lib/langium/trivia/trivia-contribution.d.ts +37 -0
- package/lib/langium/trivia/trivia-contribution.d.ts.map +1 -0
- package/lib/langium/trivia/trivia-contribution.js +10 -0
- package/lib/langium/trivia/trivia-contribution.js.map +1 -0
- package/lib/langium/trivia/trivia-preserver.d.ts +52 -0
- package/lib/langium/trivia/trivia-preserver.d.ts.map +1 -0
- package/lib/langium/trivia/trivia-preserver.js +10 -0
- package/lib/langium/trivia/trivia-preserver.js.map +1 -0
- package/lib/langium/trivia/trivia-service.d.ts +70 -0
- package/lib/langium/trivia/trivia-service.d.ts.map +1 -0
- package/lib/langium/trivia/trivia-service.js +56 -0
- package/lib/langium/trivia/trivia-service.js.map +1 -0
- package/lib/langium/update-rewrite/normalize-empty-strings.d.ts.map +1 -1
- package/lib/langium/update-rewrite/update-rewrite-service.d.ts +1 -1
- package/lib/langium/update-rewrite/update-rewrite-service.d.ts.map +1 -1
- package/lib/langium/update-rewrite/update-rewrite-service.js.map +1 -1
- package/lib/langium/update-rewrite/update-rewrite.d.ts +1 -1
- package/lib/langium/validation/document-validator.d.ts +280 -9
- package/lib/langium/validation/document-validator.d.ts.map +1 -1
- package/lib/langium/validation/document-validator.js +453 -8
- package/lib/langium/validation/document-validator.js.map +1 -1
- package/lib/langium/validation/validation-contribution-collector.d.ts +9 -1
- package/lib/langium/validation/validation-contribution-collector.d.ts.map +1 -1
- package/lib/langium/validation/validation-contribution-collector.js +1 -1
- package/lib/langium/validation/validation-contribution-collector.js.map +1 -1
- package/lib/langium/workspace/document-uri-policy.d.ts +24 -15
- package/lib/langium/workspace/document-uri-policy.d.ts.map +1 -1
- package/lib/langium/workspace/document-uri-policy.js +22 -13
- package/lib/langium/workspace/document-uri-policy.js.map +1 -1
- package/lib/langium/workspace/file-not-found.d.ts +23 -0
- package/lib/langium/workspace/file-not-found.d.ts.map +1 -0
- package/lib/langium/workspace/file-not-found.js +31 -0
- package/lib/langium/workspace/file-not-found.js.map +1 -0
- package/lib/langium/workspace/file-system-provider.d.ts +167 -8
- package/lib/langium/workspace/file-system-provider.d.ts.map +1 -1
- package/lib/langium/workspace/file-system-provider.js +115 -13
- package/lib/langium/workspace/file-system-provider.js.map +1 -1
- package/lib/langium/workspace/hydranium-langium-document-factory.d.ts +31 -1
- package/lib/langium/workspace/hydranium-langium-document-factory.d.ts.map +1 -1
- package/lib/langium/workspace/hydranium-langium-document-factory.js +54 -0
- package/lib/langium/workspace/hydranium-langium-document-factory.js.map +1 -1
- package/lib/langium/workspace/hydranium-workspace-lock.d.ts +43 -1
- package/lib/langium/workspace/hydranium-workspace-lock.d.ts.map +1 -1
- package/lib/langium/workspace/hydranium-workspace-lock.js +58 -1
- package/lib/langium/workspace/hydranium-workspace-lock.js.map +1 -1
- package/lib/langium/workspace/hydranium-workspace-manager.d.ts +124 -22
- package/lib/langium/workspace/hydranium-workspace-manager.d.ts.map +1 -1
- package/lib/langium/workspace/hydranium-workspace-manager.js +212 -31
- package/lib/langium/workspace/hydranium-workspace-manager.js.map +1 -1
- package/lib/langium/workspace/in-memory-file-system-provider.d.ts +26 -9
- package/lib/langium/workspace/in-memory-file-system-provider.d.ts.map +1 -1
- package/lib/langium/workspace/in-memory-file-system-provider.js +45 -22
- package/lib/langium/workspace/in-memory-file-system-provider.js.map +1 -1
- package/lib/langium/workspace/index-manager.d.ts.map +1 -1
- package/lib/langium/workspace/index-manager.js.map +1 -1
- package/lib/langium/workspace/index.d.ts +1 -0
- package/lib/langium/workspace/index.d.ts.map +1 -1
- package/lib/langium/workspace/index.js +1 -0
- package/lib/langium/workspace/index.js.map +1 -1
- package/lib/langium/workspace/initialize-workspace.d.ts +61 -4
- package/lib/langium/workspace/initialize-workspace.d.ts.map +1 -1
- package/lib/langium/workspace/initialize-workspace.js +80 -7
- package/lib/langium/workspace/initialize-workspace.js.map +1 -1
- package/lib/langium/workspace/langium-documents.d.ts +7 -0
- package/lib/langium/workspace/langium-documents.d.ts.map +1 -1
- package/lib/langium/workspace/langium-documents.js +18 -1
- package/lib/langium/workspace/langium-documents.js.map +1 -1
- package/lib/langium/workspace/persistent-file-system-provider.d.ts +16 -10
- package/lib/langium/workspace/persistent-file-system-provider.d.ts.map +1 -1
- package/lib/langium/workspace/persistent-file-system-provider.js +25 -13
- package/lib/langium/workspace/persistent-file-system-provider.js.map +1 -1
- package/lib/langium/workspace/self-save-registry.d.ts +84 -0
- package/lib/langium/workspace/self-save-registry.d.ts.map +1 -0
- package/lib/{documents → langium/workspace}/self-save-registry.js +33 -22
- package/lib/langium/workspace/self-save-registry.js.map +1 -0
- package/lib/langium/workspace/virtual-document.d.ts +55 -21
- package/lib/langium/workspace/virtual-document.d.ts.map +1 -1
- package/lib/langium/workspace/virtual-document.js +87 -24
- package/lib/langium/workspace/virtual-document.js.map +1 -1
- package/lib/langium/workspace/write-lock-scope.d.ts +22 -10
- package/lib/langium/workspace/write-lock-scope.d.ts.map +1 -1
- package/lib/langium/workspace/write-lock-scope.js +15 -5
- package/lib/langium/workspace/write-lock-scope.js.map +1 -1
- package/lib/launcher/integrated-server.d.ts +3 -1
- package/lib/launcher/integrated-server.d.ts.map +1 -1
- package/lib/locale/index.d.ts +10 -0
- package/lib/locale/index.d.ts.map +1 -0
- package/lib/locale/index.js +10 -0
- package/lib/locale/index.js.map +1 -0
- package/lib/locale/server-locale.d.ts +73 -0
- package/lib/locale/server-locale.d.ts.map +1 -0
- package/lib/locale/server-locale.js +61 -0
- package/lib/locale/server-locale.js.map +1 -0
- package/lib/lsp/completion/hydranium-completion-provider.d.ts +44 -2
- package/lib/lsp/completion/hydranium-completion-provider.d.ts.map +1 -1
- package/lib/lsp/completion/hydranium-completion-provider.js +68 -0
- package/lib/lsp/completion/hydranium-completion-provider.js.map +1 -1
- package/lib/lsp/connection-features.d.ts +23 -0
- package/lib/lsp/connection-features.d.ts.map +1 -0
- package/lib/lsp/connection-features.js +60 -0
- package/lib/lsp/connection-features.js.map +1 -0
- package/lib/lsp/diagnostics-connection.d.ts +27 -0
- package/lib/lsp/diagnostics-connection.d.ts.map +1 -0
- package/lib/lsp/diagnostics-connection.js +53 -0
- package/lib/lsp/diagnostics-connection.js.map +1 -0
- package/lib/lsp/hydranium-document-update-handler.d.ts +126 -82
- package/lib/lsp/hydranium-document-update-handler.d.ts.map +1 -1
- package/lib/lsp/hydranium-document-update-handler.js +235 -102
- package/lib/lsp/hydranium-document-update-handler.js.map +1 -1
- package/lib/lsp/index.d.ts +4 -1
- package/lib/lsp/index.d.ts.map +1 -1
- package/lib/lsp/index.js +4 -1
- package/lib/lsp/index.js.map +1 -1
- package/lib/lsp/lsp-latency.d.ts +39 -0
- package/lib/lsp/lsp-latency.d.ts.map +1 -0
- package/lib/lsp/lsp-latency.js +58 -0
- package/lib/lsp/lsp-latency.js.map +1 -0
- package/lib/lsp/save-text-document.d.ts +31 -0
- package/lib/lsp/save-text-document.d.ts.map +1 -0
- package/lib/lsp/save-text-document.js +52 -0
- package/lib/lsp/save-text-document.js.map +1 -0
- package/lib/lsp/semantic-token-provider.d.ts +34 -1
- package/lib/lsp/semantic-token-provider.d.ts.map +1 -1
- package/lib/lsp/semantic-token-provider.js +55 -8
- package/lib/lsp/semantic-token-provider.js.map +1 -1
- package/lib/lsp/shared-module.d.ts +4 -8
- package/lib/lsp/shared-module.d.ts.map +1 -1
- package/lib/lsp/shared-module.js.map +1 -1
- package/lib/lsp/start-language-server.d.ts +8 -7
- package/lib/lsp/start-language-server.d.ts.map +1 -1
- package/lib/lsp/start-language-server.js +13 -7
- package/lib/lsp/start-language-server.js.map +1 -1
- package/lib/messages/carriers.d.ts +18 -12
- package/lib/messages/carriers.d.ts.map +1 -1
- package/lib/messages/carriers.js +22 -13
- package/lib/messages/carriers.js.map +1 -1
- package/lib/messages/index.d.ts +4 -1
- package/lib/messages/index.d.ts.map +1 -1
- package/lib/messages/index.js +4 -1
- package/lib/messages/index.js.map +1 -1
- package/lib/messages/renderer.d.ts +142 -0
- package/lib/messages/renderer.d.ts.map +1 -0
- package/lib/messages/renderer.js +165 -0
- package/lib/messages/renderer.js.map +1 -0
- package/lib/node/event-loop-monitor.d.ts.map +1 -1
- package/lib/node/event-loop-monitor.js +2 -1
- package/lib/node/event-loop-monitor.js.map +1 -1
- package/lib/node/heap-ceiling.d.ts +61 -0
- package/lib/node/heap-ceiling.d.ts.map +1 -0
- package/lib/node/heap-ceiling.js +72 -0
- package/lib/node/heap-ceiling.js.map +1 -0
- package/lib/node/index.d.ts +1 -1
- package/lib/node/index.d.ts.map +1 -1
- package/lib/node/index.js +5 -1
- package/lib/node/index.js.map +1 -1
- package/lib/node/latency-from-env.d.ts +1 -1
- package/lib/node/latency-from-env.js +1 -1
- package/lib/node/lint-grammar.js.map +1 -1
- package/lib/node/log-preamble-node.d.ts +5 -3
- package/lib/node/log-preamble-node.d.ts.map +1 -1
- package/lib/node/log-preamble-node.js +13 -10
- package/lib/node/log-preamble-node.js.map +1 -1
- package/lib/node/measure-memory.d.ts.map +1 -1
- package/lib/node/measure-memory.js +5 -4
- package/lib/node/measure-memory.js.map +1 -1
- package/lib/node/memory-monitor.d.ts +2 -2
- package/lib/node/memory-monitor.d.ts.map +1 -1
- package/lib/node/memory-monitor.js +9 -10
- package/lib/node/memory-monitor.js.map +1 -1
- package/lib/node/node-file-system-provider.d.ts +67 -9
- package/lib/node/node-file-system-provider.d.ts.map +1 -1
- package/lib/node/node-file-system-provider.js +198 -53
- package/lib/node/node-file-system-provider.js.map +1 -1
- package/lib/node/profile-capture.d.ts +12 -4
- package/lib/node/profile-capture.d.ts.map +1 -1
- package/lib/node/profile-capture.js +8 -6
- package/lib/node/profile-capture.js.map +1 -1
- package/lib/node/profile-digest.js.map +1 -1
- package/lib/node/profiling-run.d.ts +13 -3
- package/lib/node/profiling-run.d.ts.map +1 -1
- package/lib/node/profiling-run.js +17 -8
- package/lib/node/profiling-run.js.map +1 -1
- package/lib/node/rename-over-open-readers.d.ts +61 -0
- package/lib/node/rename-over-open-readers.d.ts.map +1 -0
- package/lib/node/rename-over-open-readers.js +80 -0
- package/lib/node/rename-over-open-readers.js.map +1 -0
- package/lib/node/server-diagnostics.js +1 -1
- package/lib/node/server-diagnostics.js.map +1 -1
- package/lib/node/server-state-snapshot.js +4 -4
- package/lib/node/server-state-snapshot.js.map +1 -1
- package/lib/node/socket-launcher.d.ts +43 -7
- package/lib/node/socket-launcher.d.ts.map +1 -1
- package/lib/node/socket-launcher.js +42 -7
- package/lib/node/socket-launcher.js.map +1 -1
- package/lib/node/startup-cpu-profile.d.ts +29 -0
- package/lib/node/startup-cpu-profile.d.ts.map +1 -0
- package/lib/node/startup-cpu-profile.js +91 -0
- package/lib/node/startup-cpu-profile.js.map +1 -0
- package/lib/node/stdio-launcher.d.ts +13 -13
- package/lib/node/stdio-launcher.d.ts.map +1 -1
- package/lib/node/stdio-launcher.js +21 -11
- package/lib/node/stdio-launcher.js.map +1 -1
- package/lib/testing/document-uri-policy-conformance.js +1 -1
- package/lib/testing/document-uri-policy-conformance.js.map +1 -1
- package/lib/testing/fake-description.js.map +1 -1
- package/lib/testing/fake-document.d.ts +2 -1
- package/lib/testing/fake-document.d.ts.map +1 -1
- package/lib/testing/fake-document.js.map +1 -1
- package/lib/testing/index.d.ts +1 -1
- package/lib/testing/index.d.ts.map +1 -1
- package/lib/testing/index.js +2 -1
- package/lib/testing/index.js.map +1 -1
- package/lib/testing/langium-test-helpers.d.ts.map +1 -1
- package/lib/testing/langium-test-helpers.js +1 -0
- package/lib/testing/langium-test-helpers.js.map +1 -1
- package/lib/testing/make-noop-language-services.js.map +1 -1
- package/lib/testing/make-noop-shared-services.d.ts +14 -0
- package/lib/testing/make-noop-shared-services.d.ts.map +1 -1
- package/lib/testing/make-noop-shared-services.js +28 -2
- package/lib/testing/make-noop-shared-services.js.map +1 -1
- package/lib/testing/make-test-services.d.ts +72 -14
- package/lib/testing/make-test-services.d.ts.map +1 -1
- package/lib/testing/make-test-services.js +42 -10
- package/lib/testing/make-test-services.js.map +1 -1
- package/lib/testing/make-test-tracer.d.ts +12 -0
- package/lib/testing/make-test-tracer.d.ts.map +1 -1
- package/lib/testing/make-test-tracer.js +13 -0
- package/lib/testing/make-test-tracer.js.map +1 -1
- package/lib/testing/node/applied-edit-capture.d.ts +29 -0
- package/lib/testing/node/applied-edit-capture.d.ts.map +1 -0
- package/lib/testing/node/applied-edit-capture.js +117 -0
- package/lib/testing/node/applied-edit-capture.js.map +1 -0
- package/lib/testing/node/golden-corpus.js.map +1 -1
- package/lib/testing/node/index.d.ts +1 -0
- package/lib/testing/node/index.d.ts.map +1 -1
- package/lib/testing/node/index.js +1 -0
- package/lib/testing/node/index.js.map +1 -1
- package/lib/testing/node/lsp-harness.d.ts.map +1 -1
- package/lib/testing/node/lsp-harness.js +2 -0
- package/lib/testing/node/lsp-harness.js.map +1 -1
- package/lib/testing/node/lsp-server-connection.d.ts +21 -6
- package/lib/testing/node/lsp-server-connection.d.ts.map +1 -1
- package/lib/testing/node/lsp-server-connection.js +49 -106
- package/lib/testing/node/lsp-server-connection.js.map +1 -1
- package/lib/testing/node/scratch-workspace.d.ts.map +1 -1
- package/lib/testing/node/scratch-workspace.js +10 -5
- package/lib/testing/node/scratch-workspace.js.map +1 -1
- package/lib/testing/node/spawned-server.d.ts +30 -1
- package/lib/testing/node/spawned-server.d.ts.map +1 -1
- package/lib/testing/node/spawned-server.js +39 -2
- package/lib/testing/node/spawned-server.js.map +1 -1
- package/lib/testing/node/unhandled-rejections.d.ts +20 -0
- package/lib/testing/node/unhandled-rejections.d.ts.map +1 -0
- package/lib/testing/node/unhandled-rejections.js +32 -0
- package/lib/testing/node/unhandled-rejections.js.map +1 -0
- package/lib/testing/playwright/browser-capture-bridge.js.map +1 -1
- package/lib/testing/playwright/e2e-profiling.js.map +1 -1
- package/lib/testing/playwright/flaky-network-proxy.d.ts +76 -0
- package/lib/testing/playwright/flaky-network-proxy.d.ts.map +1 -0
- package/lib/testing/playwright/flaky-network-proxy.js +164 -0
- package/lib/testing/playwright/flaky-network-proxy.js.map +1 -0
- package/lib/testing/playwright/index.d.ts +1 -0
- package/lib/testing/playwright/index.d.ts.map +1 -1
- package/lib/testing/playwright/index.js +1 -0
- package/lib/testing/playwright/index.js.map +1 -1
- package/lib/testing/playwright/server-log-capture.d.ts +46 -16
- package/lib/testing/playwright/server-log-capture.d.ts.map +1 -1
- package/lib/testing/playwright/server-log-capture.js +111 -40
- package/lib/testing/playwright/server-log-capture.js.map +1 -1
- package/lib/testing/playwright/server-log-fixture.d.ts +16 -0
- package/lib/testing/playwright/server-log-fixture.d.ts.map +1 -1
- package/lib/testing/playwright/server-log-fixture.js +25 -6
- package/lib/testing/playwright/server-log-fixture.js.map +1 -1
- package/lib/testing/playwright/server-log-region.d.ts +15 -0
- package/lib/testing/playwright/server-log-region.d.ts.map +1 -0
- package/lib/testing/playwright/server-log-region.js +30 -0
- package/lib/testing/playwright/server-log-region.js.map +1 -0
- package/lib/testing/playwright/server-log-rename-reporter.d.ts.map +1 -1
- package/lib/testing/playwright/server-log-rename-reporter.js +4 -3
- package/lib/testing/playwright/server-log-rename-reporter.js.map +1 -1
- package/lib/testing/run-update-pipeline.d.ts +8 -5
- package/lib/testing/run-update-pipeline.d.ts.map +1 -1
- package/lib/testing/run-update-pipeline.js.map +1 -1
- package/lib/testing/stub-ast-document-manager.d.ts +11 -52
- package/lib/testing/stub-ast-document-manager.d.ts.map +1 -1
- package/lib/testing/stub-ast-document-manager.js +31 -62
- package/lib/testing/stub-ast-document-manager.js.map +1 -1
- package/lib/testing/stub-document-builder.d.ts +33 -11
- package/lib/testing/stub-document-builder.d.ts.map +1 -1
- package/lib/testing/stub-document-builder.js +103 -5
- package/lib/testing/stub-document-builder.js.map +1 -1
- package/lib/testing/stub-hydranium-text-documents.d.ts +33 -10
- package/lib/testing/stub-hydranium-text-documents.d.ts.map +1 -1
- package/lib/testing/stub-hydranium-text-documents.js +132 -16
- package/lib/testing/stub-hydranium-text-documents.js.map +1 -1
- package/lib/testing/stub-index-manager.js.map +1 -1
- package/lib/testing/stub-langium-documents.d.ts +3 -2
- package/lib/testing/stub-langium-documents.d.ts.map +1 -1
- package/lib/testing/stub-langium-documents.js.map +1 -1
- package/lib/testing/stub-model-service.d.ts +9 -8
- package/lib/testing/stub-model-service.d.ts.map +1 -1
- package/lib/testing/stub-model-service.js +6 -6
- package/lib/testing/stub-model-service.js.map +1 -1
- package/lib/testing/stub-project-manager.js.map +1 -1
- package/lib/testing/stub-self-save-registry.d.ts +1 -1
- package/lib/testing/stub-self-save-registry.d.ts.map +1 -1
- package/lib/testing/stub-service-registry.d.ts +1 -1
- package/lib/testing/stub-service-registry.js.map +1 -1
- package/lib/testing/stub-writable-file-system.d.ts +1 -1
- package/lib/testing/stub-writable-file-system.d.ts.map +1 -1
- package/lib/testing/stub-writable-file-system.js +2 -1
- package/lib/testing/stub-writable-file-system.js.map +1 -1
- package/lib/util/connection-liveness.d.ts +19 -6
- package/lib/util/connection-liveness.d.ts.map +1 -1
- package/lib/util/connection-liveness.js +61 -15
- package/lib/util/connection-liveness.js.map +1 -1
- package/lib/util/environment.d.ts.map +1 -1
- package/lib/util/environment.js.map +1 -1
- package/lib/util/registry.d.ts.map +1 -1
- package/package.json +38 -57
- package/src/browser/host-heads-in-worker.ts +218 -0
- package/src/browser/index.ts +17 -0
- package/src/browser/indexeddb-file-system-store.ts +192 -0
- package/src/browser/start-language-server-in-worker.ts +56 -0
- package/src/documents/ast-document-manager.ts +467 -233
- package/src/documents/client-ids.ts +5 -22
- package/src/documents/client-session-errors.ts +24 -0
- package/src/documents/client-session-registry.ts +262 -0
- package/src/documents/dirty-state-tracker.ts +167 -0
- package/src/documents/document-release-handler.ts +404 -0
- package/src/documents/document-release-scheduler.ts +121 -0
- package/src/documents/file-system-task-queue.ts +74 -0
- package/src/documents/hydranium-text-documents.ts +1022 -595
- package/src/documents/index.ts +10 -2
- package/src/documents/language-client-shadow.ts +501 -0
- package/src/documents/model-ledger.ts +66 -0
- package/src/documents/text-ledger.ts +112 -0
- package/src/documents/version-sync-service.ts +275 -0
- package/src/index.ts +8 -0
- package/src/langium/ast-extension/ast-extension-service.ts +77 -41
- package/src/langium/bootstrap.ts +95 -52
- package/src/langium/build-phase-pass/build-phase-pass-service.ts +29 -19
- package/src/langium/build-phase-pass/build-phase-pass.ts +37 -8
- package/src/langium/composite-ast-reflection.ts +112 -0
- package/src/langium/config/configuration-provider.ts +119 -0
- package/src/langium/config/index.ts +1 -0
- package/src/langium/diagnostics/hydranium-langium-profiler.ts +15 -39
- package/src/langium/diagnostics/log-preamble.ts +1 -1
- package/src/langium/diagnostics/logger.ts +38 -11
- package/src/langium/diagnostics/lsp-logger.ts +61 -16
- package/src/langium/document-builder/build-pipeline-integration.ts +46 -32
- package/src/langium/document-builder/build-session.ts +4 -3
- package/src/langium/document-builder/document-builder.ts +616 -73
- package/src/langium/integration-services.ts +59 -28
- package/src/langium/integrity/integrity-rule.ts +17 -8
- package/src/langium/integrity/integrity-service.ts +332 -69
- package/src/langium/keys/containment.ts +87 -0
- package/src/langium/keys/index.ts +1 -0
- package/src/langium/keys/name-based-key-provider.ts +4 -0
- package/src/langium/language-module.ts +49 -8
- package/src/langium/model-service/client-session.ts +718 -0
- package/src/langium/model-service/index.ts +2 -0
- package/src/langium/model-service/model-events.ts +80 -0
- package/src/langium/model-service/model-service.ts +908 -485
- package/src/langium/module.ts +212 -67
- package/src/langium/naming/name-provider.ts +44 -8
- package/src/langium/naming/name-separator-validation.ts +25 -3
- package/src/langium/project/abstract-project-manager.ts +13 -5
- package/src/langium/project/project-change-event.ts +2 -2
- package/src/langium/residency/cst-residency-service.ts +54 -19
- package/src/langium/scope/fallback-scope.ts +38 -0
- package/src/langium/scope/hydranium-scope-computation.ts +45 -44
- package/src/langium/scope/hydranium-scope-provider.ts +49 -16
- package/src/langium/scope/index.ts +1 -0
- package/src/langium/scope/reference-candidate-provider.ts +6 -5
- package/src/langium/scope/scope-extension-service.ts +74 -59
- package/src/langium/scope/scoped-ast-node-description.ts +1 -3
- package/src/langium/serialization/abstract-serializer.ts +57 -41
- package/src/langium/serialization/json-serializer.ts +14 -3
- package/src/langium/serialization/serializer.ts +1 -1
- package/src/langium/serialization/yaml-serializer.ts +4 -0
- package/src/langium/service-registry.ts +41 -2
- package/src/langium/shared-services.ts +26 -6
- package/src/langium/single-langium-copy.ts +42 -0
- package/src/langium/transfer/transfer-encoder.ts +102 -45
- package/src/langium/trivia/comment-preserver.ts +1100 -0
- package/src/langium/trivia/document-ending-preserver.ts +71 -0
- package/src/langium/trivia/index.ts +14 -0
- package/src/langium/trivia/trivia-contribution.ts +39 -0
- package/src/langium/trivia/trivia-preserver.ts +56 -0
- package/src/langium/trivia/trivia-service.ts +99 -0
- package/src/langium/update-rewrite/update-rewrite-service.ts +1 -1
- package/src/langium/update-rewrite/update-rewrite.ts +1 -1
- package/src/langium/validation/document-validator.ts +528 -13
- package/src/langium/validation/validation-contribution-collector.ts +10 -1
- package/src/langium/workspace/document-uri-policy.ts +32 -18
- package/src/langium/workspace/file-not-found.ts +35 -0
- package/src/langium/workspace/file-system-provider.ts +258 -16
- package/src/langium/workspace/hydranium-langium-document-factory.ts +83 -0
- package/src/langium/workspace/hydranium-workspace-lock.ts +86 -2
- package/src/langium/workspace/hydranium-workspace-manager.ts +241 -35
- package/src/langium/workspace/in-memory-file-system-provider.ts +54 -23
- package/src/langium/workspace/index.ts +1 -0
- package/src/langium/workspace/initialize-workspace.ts +129 -8
- package/src/langium/workspace/langium-documents.ts +19 -1
- package/src/langium/workspace/persistent-file-system-provider.ts +27 -15
- package/src/langium/workspace/self-save-registry.ts +118 -0
- package/src/langium/workspace/virtual-document.ts +106 -25
- package/src/langium/workspace/write-lock-scope.ts +27 -12
- package/src/launcher/integrated-server.ts +3 -1
- package/src/locale/index.ts +10 -0
- package/src/locale/server-locale.ts +86 -0
- package/src/lsp/completion/hydranium-completion-provider.ts +82 -2
- package/src/lsp/connection-features.ts +67 -0
- package/src/lsp/diagnostics-connection.ts +56 -0
- package/src/lsp/hydranium-document-update-handler.ts +285 -111
- package/src/lsp/index.ts +4 -1
- package/src/lsp/lsp-latency.ts +62 -0
- package/src/lsp/save-text-document.ts +63 -0
- package/src/lsp/semantic-token-provider.ts +74 -7
- package/src/lsp/shared-module.ts +4 -8
- package/src/lsp/start-language-server.ts +13 -7
- package/src/messages/carriers.ts +23 -15
- package/src/messages/index.ts +13 -1
- package/src/messages/renderer.ts +212 -0
- package/src/node/event-loop-monitor.ts +2 -1
- package/src/node/heap-ceiling.ts +108 -0
- package/src/node/index.ts +5 -1
- package/src/node/latency-from-env.ts +1 -1
- package/src/node/log-preamble-node.ts +20 -10
- package/src/node/measure-memory.ts +5 -4
- package/src/node/memory-monitor.ts +10 -10
- package/src/node/node-file-system-provider.ts +214 -57
- package/src/node/profile-capture.ts +16 -15
- package/src/node/profiling-run.ts +30 -8
- package/src/node/rename-over-open-readers.ts +94 -0
- package/src/node/server-diagnostics.ts +1 -1
- package/src/node/server-state-snapshot.ts +5 -5
- package/src/node/socket-launcher.ts +78 -14
- package/src/node/startup-cpu-profile.ts +94 -0
- package/src/node/stdio-launcher.ts +29 -19
- package/src/testing/document-uri-policy-conformance.ts +1 -1
- package/src/testing/fake-document.ts +2 -1
- package/src/testing/index.ts +2 -1
- package/src/testing/langium-test-helpers.ts +1 -0
- package/src/testing/make-noop-shared-services.ts +50 -2
- package/src/testing/make-test-services.ts +125 -31
- package/src/testing/make-test-tracer.ts +26 -0
- package/src/testing/node/applied-edit-capture.ts +141 -0
- package/src/testing/node/index.ts +1 -0
- package/src/testing/node/lsp-harness.ts +2 -0
- package/src/testing/node/lsp-server-connection.ts +83 -119
- package/src/testing/node/scratch-workspace.ts +10 -5
- package/src/testing/node/spawned-server.ts +57 -3
- package/src/testing/node/unhandled-rejections.ts +31 -0
- package/src/testing/parse-semantic-root.ts +1 -1
- package/src/testing/playwright/flaky-network-proxy.ts +240 -0
- package/src/testing/playwright/index.ts +1 -0
- package/src/testing/playwright/server-log-capture.ts +137 -47
- package/src/testing/playwright/server-log-fixture.ts +46 -6
- package/src/testing/playwright/server-log-region.ts +32 -0
- package/src/testing/playwright/server-log-rename-reporter.ts +4 -3
- package/src/testing/run-update-pipeline.ts +8 -5
- package/src/testing/stub-ast-document-manager.ts +47 -128
- package/src/testing/stub-document-builder.ts +133 -18
- package/src/testing/stub-hydranium-text-documents.ts +184 -27
- package/src/testing/stub-langium-documents.ts +3 -2
- package/src/testing/stub-model-service.ts +11 -10
- package/src/testing/stub-self-save-registry.ts +1 -1
- package/src/testing/stub-service-registry.ts +1 -1
- package/src/testing/stub-writable-file-system.ts +3 -2
- package/src/util/connection-liveness.ts +67 -15
- package/src/util/environment.ts +9 -1
- package/lib/documents/language-client-text-shadow.d.ts +0 -101
- package/lib/documents/language-client-text-shadow.d.ts.map +0 -1
- package/lib/documents/language-client-text-shadow.js +0 -156
- package/lib/documents/language-client-text-shadow.js.map +0 -1
- package/lib/documents/self-save-registry.d.ts +0 -55
- package/lib/documents/self-save-registry.d.ts.map +0 -1
- package/lib/documents/self-save-registry.js.map +0 -1
- package/lib/lsp/instrument-connection.d.ts +0 -36
- package/lib/lsp/instrument-connection.d.ts.map +0 -1
- package/lib/lsp/instrument-connection.js +0 -62
- package/lib/lsp/instrument-connection.js.map +0 -1
- package/lib/node/process-memory.d.ts +0 -66
- package/lib/node/process-memory.d.ts.map +0 -1
- package/lib/node/process-memory.js +0 -252
- package/lib/node/process-memory.js.map +0 -1
- package/src/documents/language-client-text-shadow.ts +0 -175
- package/src/documents/self-save-registry.ts +0 -81
- package/src/lsp/instrument-connection.ts +0 -66
- package/src/node/process-memory.ts +0 -299
|
@@ -9,7 +9,9 @@
|
|
|
9
9
|
|
|
10
10
|
/**
|
|
11
11
|
* Driver for the structured-write transform chain — the rewrite registry plus
|
|
12
|
-
* the serializer —
|
|
12
|
+
* the serializer — answering the bare serializer output, without the trivia
|
|
13
|
+
* and `ModelService` overrides a session's write applies: call
|
|
14
|
+
* `ModelService.modelToText` with a canonical URI for that text.
|
|
13
15
|
*
|
|
14
16
|
* # Why a driver and not a documented recipe
|
|
15
17
|
*
|
|
@@ -27,7 +29,8 @@
|
|
|
27
29
|
* # Resolved per URI, not per language handle
|
|
28
30
|
*
|
|
29
31
|
* Both slots are resolved through `ServiceRegistry.getServices(uri)`, which is
|
|
30
|
-
* what `
|
|
32
|
+
* what `DefaultModelService.serialize` and `DefaultModelService.rewriteModel`
|
|
33
|
+
* do. Taking a
|
|
31
34
|
* language-services handle instead would be shorter, but it re-hardcodes the
|
|
32
35
|
* language at the call site and so cannot witness a multi-grammar workspace
|
|
33
36
|
* routing a write to the wrong language's rewrite set or serializer — the one
|
|
@@ -38,7 +41,7 @@
|
|
|
38
41
|
* This runs rewrite → serialize and stops. It does NOT open the document, push
|
|
39
42
|
* text into the multi-client store, drive a build or return an
|
|
40
43
|
* {@link AstDocument}: those need a live workspace, and a test that wants them
|
|
41
|
-
* should call `
|
|
44
|
+
* should call a session's `update` itself rather than a driver standing in for
|
|
42
45
|
* it. What is left is the part with no observable of its own — the text and the
|
|
43
46
|
* rewritten model — which is why it needed lifting.
|
|
44
47
|
*
|
|
@@ -61,7 +64,7 @@ export interface UpdatePipelineArgs<TTransfer extends TransferElement = Transfer
|
|
|
61
64
|
* rather than merely labelling it.
|
|
62
65
|
*/
|
|
63
66
|
readonly uri: string;
|
|
64
|
-
/** Transfer-model payload, as an adopter caller would hand it to `
|
|
67
|
+
/** Transfer-model payload, as an adopter caller would hand it to a session's `update`. */
|
|
65
68
|
readonly model: TTransfer;
|
|
66
69
|
/**
|
|
67
70
|
* Previous AST root threaded into every rewrite, so a diff-based rewrite can
|
|
@@ -90,7 +93,7 @@ export interface UpdatePipelineResult<TTransfer extends TransferElement = Transf
|
|
|
90
93
|
* surface but it makes the precise assertion unavailable.
|
|
91
94
|
*/
|
|
92
95
|
readonly rewritten: TTransfer;
|
|
93
|
-
/** The
|
|
96
|
+
/** The serializer's text, without the trivia a session's `update` carries over. */
|
|
94
97
|
readonly text: string;
|
|
95
98
|
}
|
|
96
99
|
|
|
@@ -9,27 +9,21 @@
|
|
|
9
9
|
|
|
10
10
|
import { type AstNode, type LangiumDocument, UriUtils } from '@hydranium/langium';
|
|
11
11
|
import { Disposable } from 'vscode-languageserver';
|
|
12
|
-
import {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
} from '
|
|
18
|
-
import type { CloseModelArgs, OpenModelArgs } from '@hydranium/protocol';
|
|
12
|
+
import { type AstDiagnostic } from '../langium/validation/document-validator.js';
|
|
13
|
+
import { AstDocument, type AstDocumentManager, type UpdateAttribution } from '../documents/ast-document-manager.js';
|
|
14
|
+
import { type WritableFileSystemProvider } from '../langium/workspace/file-system-provider.js';
|
|
15
|
+
import { UNKNOWN_CLIENT_ID } from '../documents/client-ids.js';
|
|
16
|
+
import { DefaultModelLedger, type ModelLedger } from '../documents/model-ledger.js';
|
|
17
|
+
import { type CloseModelArgs, type OpenModelArgs } from '@hydranium/protocol';
|
|
19
18
|
import type { StubHydraniumTextDocuments } from './stub-hydranium-text-documents.js';
|
|
20
19
|
import type { StubLangiumDocuments } from './stub-langium-documents.js';
|
|
21
20
|
|
|
22
21
|
/**
|
|
23
|
-
* Minimal stub of {@link AstDocumentManager} for use in test
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
* through {@link StubAstDocumentManager.emitUpdate} because the stub tree runs
|
|
29
|
-
* no build phases to emit from, and the remaining read helpers
|
|
30
|
-
* (`isDirectChange`, `getAuthor`, `readFile`) throw if invoked — tests that
|
|
31
|
-
* need them should wire a richer stub or use the real
|
|
32
|
-
* {@link AstDocumentManager}.
|
|
22
|
+
* Minimal stub of {@link AstDocumentManager} for use in test harnesses,
|
|
23
|
+
* implementing what the model service and client sessions call. `getAuthor`
|
|
24
|
+
* throws if invoked, and `attributeUpdate` reports every update as its
|
|
25
|
+
* author's change; tests that need either should wire a richer stub or use
|
|
26
|
+
* the real {@link AstDocumentManager}.
|
|
33
27
|
*
|
|
34
28
|
* Open state is tracked per URI as the set of holding client ids, so a
|
|
35
29
|
* document stays open until its last client closes. The stub forwards
|
|
@@ -45,75 +39,31 @@ import type { StubLangiumDocuments } from './stub-langium-documents.js';
|
|
|
45
39
|
* are still picked so signature drift on them produces a compile
|
|
46
40
|
* error rather than silent divergence.
|
|
47
41
|
*/
|
|
48
|
-
export interface StubAstDocumentManager<TAst extends AstNode, TDiagnostic =
|
|
42
|
+
export interface StubAstDocumentManager<TAst extends AstNode, TDiagnostic extends AstDiagnostic = AstDiagnostic> extends Pick<
|
|
49
43
|
AstDocumentManager<TAst, TDiagnostic>,
|
|
50
44
|
| 'open'
|
|
51
45
|
| 'close'
|
|
52
46
|
| 'isOpen'
|
|
53
47
|
| 'update'
|
|
54
48
|
| 'save'
|
|
55
|
-
| '
|
|
56
|
-
| '
|
|
57
|
-
| '
|
|
49
|
+
| 'delete'
|
|
50
|
+
| 'isDeleting'
|
|
51
|
+
| 'attributeDeletion'
|
|
58
52
|
| 'getAuthor'
|
|
59
53
|
| 'getDocument'
|
|
60
|
-
| '
|
|
61
|
-
| '
|
|
54
|
+
| 'toAstDocument'
|
|
55
|
+
| 'attributeUpdate'
|
|
62
56
|
> {
|
|
63
57
|
readonly openClients: Map<string, Set<string>>;
|
|
64
|
-
|
|
65
|
-
/**
|
|
66
|
-
* Deliver an update event to every live {@link StubAstDocumentManager.onUpdate}
|
|
67
|
-
* subscriber for `uri`. Returns how many listeners received it.
|
|
68
|
-
*
|
|
69
|
-
* **This exists because `onUpdate` cannot fire on its own, and that is a
|
|
70
|
-
* trap without a driver.** The real manager emits from a
|
|
71
|
-
* `DocumentBuilder.onDocumentPhase(Validated)` hook; a `makeTestServices`
|
|
72
|
-
* tree has a stub builder that runs no phases, so a subscription made
|
|
73
|
-
* through the stub would never be called. A test written as
|
|
74
|
-
* `onUpdate(uri, …); await tick(); expect(events).toHaveLength(0)` therefore
|
|
75
|
-
* passes for the wrong reason — the listener was never wired to anything —
|
|
76
|
-
* and reads as coverage of a suppression path it never reached. Driving the
|
|
77
|
-
* event explicitly is what lets such a test first prove delivery works, so
|
|
78
|
-
* the negative assertion means something.
|
|
79
|
-
*
|
|
80
|
-
* **The return value is the point, not a convenience.** `0` says no
|
|
81
|
-
* subscriber for that URI was registered, which is the state a negative
|
|
82
|
-
* assertion cannot distinguish from correct suppression. Assert it is
|
|
83
|
-
* non-zero before believing an empty event list.
|
|
84
|
-
*
|
|
85
|
-
* Two alternatives were rejected. Making `onUpdate` THROW would fence the
|
|
86
|
-
* hazard at zero API cost, but this harness ships (`files: ["lib", "src"]`)
|
|
87
|
-
* and an adopter subclass or test that subscribes and legitimately ignores
|
|
88
|
-
* the event would start failing on a stub it never asked to fire. Wiring the
|
|
89
|
-
* stub to the text-document store's change notifications — the way `onSave`
|
|
90
|
-
* is wired — would make it fire on its own, which moves the pass reason of
|
|
91
|
-
* every existing suite on a `makeTestServices` tree and asserts a phase
|
|
92
|
-
* semantics (`Validated`, with the real manager's author lookup and
|
|
93
|
-
* `changed`/`deleted`/`rebuilt` classification) that no stub tree has.
|
|
94
|
-
*/
|
|
95
|
-
emitUpdate(uri: string, event: AstDocumentUpdatedEvent<TAst, TDiagnostic>): number;
|
|
96
|
-
|
|
97
|
-
/**
|
|
98
|
-
* How many live {@link StubAstDocumentManager.onUpdate} subscribers `uri`
|
|
99
|
-
* has, or the total across every URI when called with no argument.
|
|
100
|
-
*
|
|
101
|
-
* Read from outside — it is what a test asserts to show a subscription was
|
|
102
|
-
* actually established, and what makes {@link emitUpdate}'s `0` legible.
|
|
103
|
-
*/
|
|
104
|
-
updateSubscriptions(uri?: string): number;
|
|
105
58
|
}
|
|
106
59
|
|
|
107
|
-
export function makeStubAstDocumentManager<TAst extends AstNode, TDiagnostic =
|
|
60
|
+
export function makeStubAstDocumentManager<TAst extends AstNode, TDiagnostic extends AstDiagnostic = AstDiagnostic>(
|
|
108
61
|
textDocuments: StubHydraniumTextDocuments,
|
|
109
62
|
fileSystem: Pick<WritableFileSystemProvider, 'writeFile'>,
|
|
110
|
-
documents?: StubLangiumDocuments<TAst, TDiagnostic
|
|
63
|
+
documents?: StubLangiumDocuments<TAst, TDiagnostic>,
|
|
64
|
+
ledger: ModelLedger = new DefaultModelLedger()
|
|
111
65
|
): StubAstDocumentManager<TAst, TDiagnostic> {
|
|
112
66
|
const openClients = new Map<string, Set<string>>();
|
|
113
|
-
// Keyed by the URI as given, not canonicalized: the stub has no URI policy,
|
|
114
|
-
// and `getDocument` below looks documents up by their given URI for the same
|
|
115
|
-
// reason, so both halves agree on identity.
|
|
116
|
-
const updateListeners = new Map<string, Set<(event: AstDocumentUpdatedEvent<TAst, TDiagnostic>) => void>>();
|
|
117
67
|
const notSupported = (method: string): never => {
|
|
118
68
|
throw new Error(`StubAstDocumentManager.${method} is not implemented; wire the real AstDocumentManager if your test needs it.`);
|
|
119
69
|
};
|
|
@@ -131,10 +81,13 @@ export function makeStubAstDocumentManager<TAst extends AstNode, TDiagnostic = u
|
|
|
131
81
|
clients.add(args.clientId);
|
|
132
82
|
openClients.set(args.uri, clients);
|
|
133
83
|
// The real `open` materialises the synced document (from the payload
|
|
134
|
-
// text or the filesystem)
|
|
135
|
-
//
|
|
84
|
+
// text or the filesystem), or attaches the client to the one that is
|
|
85
|
+
// there; mirror both so a subsequent `update` finds the document open
|
|
86
|
+
// for this client.
|
|
136
87
|
if (!textDocuments.get(args.uri)) {
|
|
137
88
|
textDocuments.seedOpen(args.uri, args.text ?? '', args.clientId);
|
|
89
|
+
} else {
|
|
90
|
+
textDocuments.attachClient(args.uri, args.clientId);
|
|
138
91
|
}
|
|
139
92
|
return Disposable.create(() => close({ uri: args.uri, clientId: args.clientId }));
|
|
140
93
|
},
|
|
@@ -147,78 +100,44 @@ export function makeStubAstDocumentManager<TAst extends AstNode, TDiagnostic = u
|
|
|
147
100
|
// (step iff the content changed) — no fabricated version numbers.
|
|
148
101
|
return textDocuments.applyContentChange(uri, text, clientId);
|
|
149
102
|
},
|
|
150
|
-
async save(uri: string, clientId: string): Promise<
|
|
103
|
+
async save(uri: string, clientId: string): Promise<number> {
|
|
151
104
|
const text = textDocuments.get(uri)?.getText() ?? '';
|
|
105
|
+
const version = textDocuments.version(uri);
|
|
152
106
|
await fileSystem.writeFile(UriUtils.toUri(uri), text);
|
|
153
107
|
textDocuments.notifyDidSaveTextDocument({ textDocument: { uri }, text }, clientId);
|
|
108
|
+
return version;
|
|
154
109
|
},
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
// stub tree runs no phases. `emitUpdate` is the only thing that fires it;
|
|
158
|
-
// see its declaration for why that is a driver rather than a throw or an
|
|
159
|
-
// autonomous wiring.
|
|
160
|
-
onUpdate(uri: string, listener: (event: AstDocumentUpdatedEvent<TAst, TDiagnostic>) => void): Disposable {
|
|
161
|
-
const listeners = updateListeners.get(uri) ?? new Set<(event: AstDocumentUpdatedEvent<TAst, TDiagnostic>) => void>();
|
|
162
|
-
listeners.add(listener);
|
|
163
|
-
updateListeners.set(uri, listeners);
|
|
164
|
-
return Disposable.create(() => {
|
|
165
|
-
listeners.delete(listener);
|
|
166
|
-
if (listeners.size === 0) {
|
|
167
|
-
updateListeners.delete(uri);
|
|
168
|
-
}
|
|
169
|
-
});
|
|
110
|
+
delete(): Promise<void> {
|
|
111
|
+
return notSupported('delete');
|
|
170
112
|
},
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
const listeners = [...(updateListeners.get(uri) ?? [])];
|
|
175
|
-
for (const listener of listeners) {
|
|
176
|
-
listener(event);
|
|
177
|
-
}
|
|
178
|
-
return listeners.length;
|
|
113
|
+
// The stub deletes nothing, so no delete is ever under way.
|
|
114
|
+
isDeleting(): boolean {
|
|
115
|
+
return false;
|
|
179
116
|
},
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
return updateListeners.get(uri)?.size ?? 0;
|
|
183
|
-
}
|
|
184
|
-
let total = 0;
|
|
185
|
-
for (const listeners of updateListeners.values()) {
|
|
186
|
-
total += listeners.size;
|
|
187
|
-
}
|
|
188
|
-
return total;
|
|
189
|
-
},
|
|
190
|
-
onSave(uri: string, listener: (event: { document: AstDocument<TAst, TDiagnostic>; sourceClientId: string }) => void): Disposable {
|
|
191
|
-
return textDocuments.onDidSave(event => {
|
|
192
|
-
if (event.document.uri !== uri) {
|
|
193
|
-
return;
|
|
194
|
-
}
|
|
195
|
-
listener({
|
|
196
|
-
document: { uri, version: textDocuments.version(uri), root: undefined as unknown as TAst, diagnostics: [] as TDiagnostic[] },
|
|
197
|
-
sourceClientId: event.clientId
|
|
198
|
-
});
|
|
199
|
-
});
|
|
200
|
-
},
|
|
201
|
-
onClientClosed(uri: string, clientId: string, listener: () => void): Disposable {
|
|
202
|
-
return textDocuments.onDidClose(event => {
|
|
203
|
-
if (event.clientId === clientId && event.document.uri === uri) {
|
|
204
|
-
listener();
|
|
205
|
-
}
|
|
206
|
-
});
|
|
117
|
+
attributeDeletion(): string {
|
|
118
|
+
return UNKNOWN_CLIENT_ID;
|
|
207
119
|
},
|
|
208
120
|
getAuthor(): string {
|
|
209
121
|
return notSupported('getAuthor');
|
|
210
122
|
},
|
|
123
|
+
// Reports every event as a change by the version's author: the stub
|
|
124
|
+
// tree runs no builds, so there is no delivery to tell a rebuild by. A
|
|
125
|
+
// test of the rebuilt branch replaces this method or uses the real
|
|
126
|
+
// manager.
|
|
127
|
+
attributeUpdate(document: LangiumDocument): UpdateAttribution {
|
|
128
|
+
const author = textDocuments.getAuthor(document.textDocument.uri, document.textDocument.version) ?? UNKNOWN_CLIENT_ID;
|
|
129
|
+
return { reason: 'changed', sourceClientId: author, causedBy: author };
|
|
130
|
+
},
|
|
211
131
|
// Canonicalizing document gateway. The stub has no canonicalizer, so it looks
|
|
212
132
|
// the document up in the seeded `StubLangiumDocuments` by its given URI (tests
|
|
213
133
|
// that need real symlink canonicalization wire the real AstDocumentManager).
|
|
214
134
|
getDocument(uri: string): LangiumDocument | undefined {
|
|
215
135
|
return documents?.getDocument(UriUtils.toUri(uri));
|
|
216
136
|
},
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
return notSupported(`readFile(${uri})`);
|
|
137
|
+
toAstDocument(document: LangiumDocument): AstDocument<TAst, TDiagnostic> {
|
|
138
|
+
const uri = document.textDocument.uri;
|
|
139
|
+
const root = document.parseResult.value as TAst;
|
|
140
|
+
return AstDocument.create<TAst, TDiagnostic>(uri, ledger.versionOf(root), root, document.diagnostics as TDiagnostic[] | undefined);
|
|
222
141
|
}
|
|
223
142
|
};
|
|
224
143
|
}
|
|
@@ -9,13 +9,17 @@
|
|
|
9
9
|
|
|
10
10
|
import {
|
|
11
11
|
type DocumentBuilder,
|
|
12
|
+
type DocumentBuildListener,
|
|
12
13
|
type DocumentPhaseListener,
|
|
13
14
|
type DocumentState,
|
|
14
15
|
type DocumentUpdateListener,
|
|
16
|
+
isOperationCancelled,
|
|
15
17
|
type LangiumDocument,
|
|
16
|
-
type URI
|
|
18
|
+
type URI,
|
|
19
|
+
type WorkspaceLock
|
|
17
20
|
} from '@hydranium/langium';
|
|
18
21
|
import { type CancellationToken, Disposable } from 'vscode-languageserver';
|
|
22
|
+
import { type BuildEndedEvent, HydraniumDocumentBuilder } from '../langium/document-builder/document-builder.js';
|
|
19
23
|
|
|
20
24
|
/** Recorded call to a stubbed {@link DocumentBuilder} method. */
|
|
21
25
|
export interface RecordedBuilderCall<TArgs extends unknown[]> {
|
|
@@ -45,8 +49,7 @@ export interface StubWaitUntilGate {
|
|
|
45
49
|
|
|
46
50
|
/**
|
|
47
51
|
* Stub for Langium's {@link DocumentBuilder}. Implements the slice production
|
|
48
|
-
* code reads
|
|
49
|
-
* `onDocumentPhase` / `onUpdate`) plus test-only helpers:
|
|
52
|
+
* code reads on the framework's test paths, plus test-only helpers:
|
|
50
53
|
*
|
|
51
54
|
* - {@link firePhase} — synchronously dispatch the registered phase
|
|
52
55
|
* listener(s) for a document, simulating a build completing.
|
|
@@ -64,16 +67,17 @@ export interface StubWaitUntilGate {
|
|
|
64
67
|
* Picks the methods the framework reads from {@link DocumentBuilder} on
|
|
65
68
|
* the slot path — the compiler enforces those signatures stay aligned.
|
|
66
69
|
* `update`, `onDocumentPhase`, `onUpdate`, and `waitUntil` carry stubbed
|
|
67
|
-
* implementations
|
|
68
|
-
*
|
|
69
|
-
*
|
|
70
|
+
* implementations, and `scheduleUpdate` calls `update` in one lock write per
|
|
71
|
+
* call (see {@link makeStubDocumentBuilder}); `build`, `onBuildPhase`, and
|
|
72
|
+
* `resetToState` are implemented as loud-failing `notSupported` throwers
|
|
73
|
+
* so production code that goes through the cast at the bind site (i.e. accesses methods the
|
|
70
74
|
* stub claims but doesn't meaningfully implement) fails with a clear
|
|
71
75
|
* message instead of "undefined is not a function".
|
|
72
76
|
*/
|
|
73
|
-
export interface StubDocumentBuilder
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
> {
|
|
77
|
+
export interface StubDocumentBuilder
|
|
78
|
+
extends
|
|
79
|
+
Pick<DocumentBuilder, 'update' | 'onDocumentPhase' | 'onUpdate' | 'build' | 'onBuildPhase' | 'resetToState' | 'updateBuildOptions'>,
|
|
80
|
+
Pick<HydraniumDocumentBuilder, 'onDocumentPhaseDelivered' | 'scheduleUpdate' | 'finalBuildState' | 'onBuildEnded'> {
|
|
77
81
|
/**
|
|
78
82
|
* Single-overload stub of {@link DocumentBuilder.waitUntil}. Real has
|
|
79
83
|
* two overloads (`(state, cancelToken?): Promise<void>` and
|
|
@@ -87,13 +91,29 @@ export interface StubDocumentBuilder extends Pick<
|
|
|
87
91
|
readonly waitUntilCalls: ReadonlyArray<RecordedBuilderCall<[DocumentState, URI | undefined]>>;
|
|
88
92
|
/**
|
|
89
93
|
* Synchronously fire the phase listener(s) registered for `state` with
|
|
90
|
-
* `document
|
|
91
|
-
*
|
|
92
|
-
*
|
|
94
|
+
* `document`, then, unless a listener was cancelled, the
|
|
95
|
+
* `onDocumentPhaseDelivered` listeners. `cancelToken` defaults to a
|
|
96
|
+
* non-cancelled token; pass a cancelled token to simulate a build preempted
|
|
97
|
+
* by a concurrent write lock.
|
|
93
98
|
*/
|
|
94
99
|
firePhase(state: DocumentState, document: LangiumDocument, cancelToken?: CancellationToken): void;
|
|
95
100
|
/** Synchronously fire every registered `onUpdate` listener. */
|
|
96
101
|
fireOnUpdate(changed: URI[], deleted: URI[]): void;
|
|
102
|
+
/**
|
|
103
|
+
* Synchronously fire the BUILD-phase listener(s) for `state` with the whole
|
|
104
|
+
* batch. The per-build counterpart of {@link firePhase}: a subject that
|
|
105
|
+
* reports once per build rather than once per document subscribes here, and
|
|
106
|
+
* a stub that only fired {@link firePhase} would leave it silent while
|
|
107
|
+
* looking wired.
|
|
108
|
+
*/
|
|
109
|
+
fireBuildPhase(state: DocumentState, built: LangiumDocument[], cancelToken?: CancellationToken): void;
|
|
110
|
+
/**
|
|
111
|
+
* Synchronously fire every {@link HydraniumDocumentBuilder.onBuildEnded}
|
|
112
|
+
* listener with `event`. As in the real builder, one that throws does not
|
|
113
|
+
* stop the others; the real builder logs the error, and this stub, having
|
|
114
|
+
* no logger, rethrows the first one once all have run.
|
|
115
|
+
*/
|
|
116
|
+
fireBuildEnded(event: BuildEndedEvent): void;
|
|
97
117
|
/**
|
|
98
118
|
* Hold the next {@link waitUntil} call. The returned handle releases it;
|
|
99
119
|
* the call's return value resolves on the next tick after `resolve` runs.
|
|
@@ -128,10 +148,18 @@ function reraise(result: unknown): void {
|
|
|
128
148
|
* want to observe rebuilt state should `set` the new root on the document
|
|
129
149
|
* registry and then call `firePhase` to trigger the framework's post-build
|
|
130
150
|
* read path.
|
|
151
|
+
*
|
|
152
|
+
* `workspaceLock` is the lock `scheduleUpdate` writes under, without the real
|
|
153
|
+
* builder's sharing: pass the services tree's own, so a caller's lock ordering
|
|
154
|
+
* and reentrancy behave as against the real builder. Without one,
|
|
155
|
+
* `scheduleUpdate` records the update unlocked.
|
|
131
156
|
*/
|
|
132
|
-
export function makeStubDocumentBuilder(): StubDocumentBuilder {
|
|
157
|
+
export function makeStubDocumentBuilder(workspaceLock?: WorkspaceLock): StubDocumentBuilder {
|
|
133
158
|
const phaseListeners = new Map<DocumentState, DocumentPhaseListener[]>();
|
|
159
|
+
const deliveredListeners = new Map<DocumentState, Array<(document: LangiumDocument, version: number) => void>>();
|
|
160
|
+
const buildPhaseListeners = new Map<DocumentState, DocumentBuildListener[]>();
|
|
134
161
|
const onUpdateListeners: DocumentUpdateListener[] = [];
|
|
162
|
+
const buildEndedListeners: Array<(event: BuildEndedEvent) => void> = [];
|
|
135
163
|
const gates: Array<{ take(release: () => void): void }> = [];
|
|
136
164
|
const updateCalls: RecordedBuilderCall<[URI[], URI[]]>[] = [];
|
|
137
165
|
const waitUntilCalls: RecordedBuilderCall<[DocumentState, URI | undefined]>[] = [];
|
|
@@ -140,6 +168,11 @@ export function makeStubDocumentBuilder(): StubDocumentBuilder {
|
|
|
140
168
|
throw new Error(`StubDocumentBuilder.${method} is not implemented; wire a real DocumentBuilder if your test needs it.`);
|
|
141
169
|
};
|
|
142
170
|
const stub: StubDocumentBuilder = {
|
|
171
|
+
// Langium's own default, so a session write waits for `Validated` here
|
|
172
|
+
// as it does against the real builder.
|
|
173
|
+
updateBuildOptions: { validation: { categories: ['built-in', 'fast'] } },
|
|
174
|
+
// The real rule, read off this stub's options, so the two cannot drift.
|
|
175
|
+
finalBuildState: () => HydraniumDocumentBuilder.prototype.finalBuildState.call(stub),
|
|
143
176
|
get updateCalls() {
|
|
144
177
|
return updateCalls;
|
|
145
178
|
},
|
|
@@ -149,6 +182,9 @@ export function makeStubDocumentBuilder(): StubDocumentBuilder {
|
|
|
149
182
|
async update(changed: URI[], deleted: URI[]) {
|
|
150
183
|
updateCalls.push({ args: [changed, deleted] });
|
|
151
184
|
},
|
|
185
|
+
scheduleUpdate(changed: URI[], deleted: URI[]) {
|
|
186
|
+
return workspaceLock ? workspaceLock.write(() => stub.update(changed, deleted)) : stub.update(changed, deleted);
|
|
187
|
+
},
|
|
152
188
|
async waitUntil(state: DocumentState, uri?: URI) {
|
|
153
189
|
waitUntilCalls.push({ args: [state, uri] });
|
|
154
190
|
const gate = gates.shift();
|
|
@@ -185,15 +221,95 @@ export function makeStubDocumentBuilder(): StubDocumentBuilder {
|
|
|
185
221
|
onCancellationRequested: () => Disposable.create(() => undefined)
|
|
186
222
|
} as CancellationToken);
|
|
187
223
|
const listeners = phaseListeners.get(state) ?? [];
|
|
224
|
+
const delivered = deliveredListeners.get(state) ?? [];
|
|
225
|
+
// Taken before the listeners, as the real builder does: one of them
|
|
226
|
+
// may stand in for a write that moves the version on. Read only when
|
|
227
|
+
// someone is told, since many fakes carry no text document.
|
|
228
|
+
const version = delivered.length > 0 ? document.textDocument.version : 0;
|
|
229
|
+
// As the real builder: a listener reached on a cancelled token, or
|
|
230
|
+
// throwing OperationCancelled, counts as cancelled and withholds the
|
|
231
|
+
// delivered listeners.
|
|
232
|
+
let cancelledListeners = 0;
|
|
188
233
|
for (const listener of listeners) {
|
|
189
|
-
|
|
234
|
+
if (token.isCancellationRequested) {
|
|
235
|
+
cancelledListeners++;
|
|
236
|
+
continue;
|
|
237
|
+
}
|
|
238
|
+
try {
|
|
239
|
+
reraise(listener(document, token));
|
|
240
|
+
} catch (err: unknown) {
|
|
241
|
+
if (!isOperationCancelled(err)) {
|
|
242
|
+
throw err;
|
|
243
|
+
}
|
|
244
|
+
cancelledListeners++;
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
if (cancelledListeners === 0) {
|
|
248
|
+
for (const listener of delivered) {
|
|
249
|
+
listener(document, version);
|
|
250
|
+
}
|
|
190
251
|
}
|
|
191
252
|
},
|
|
253
|
+
onDocumentPhaseDelivered(state: DocumentState, listener: (document: LangiumDocument, version: number) => void) {
|
|
254
|
+
const list = deliveredListeners.get(state) ?? [];
|
|
255
|
+
list.push(listener);
|
|
256
|
+
deliveredListeners.set(state, list);
|
|
257
|
+
return Disposable.create(() => {
|
|
258
|
+
const idx = list.indexOf(listener);
|
|
259
|
+
if (idx >= 0) {
|
|
260
|
+
list.splice(idx, 1);
|
|
261
|
+
}
|
|
262
|
+
});
|
|
263
|
+
},
|
|
192
264
|
fireOnUpdate(changed: URI[], deleted: URI[]) {
|
|
193
265
|
for (const listener of onUpdateListeners.slice()) {
|
|
194
266
|
reraise(listener(changed, deleted));
|
|
195
267
|
}
|
|
196
268
|
},
|
|
269
|
+
onBuildEnded(listener: (event: BuildEndedEvent) => void) {
|
|
270
|
+
buildEndedListeners.push(listener);
|
|
271
|
+
return Disposable.create(() => {
|
|
272
|
+
const idx = buildEndedListeners.indexOf(listener);
|
|
273
|
+
if (idx >= 0) {
|
|
274
|
+
buildEndedListeners.splice(idx, 1);
|
|
275
|
+
}
|
|
276
|
+
});
|
|
277
|
+
},
|
|
278
|
+
fireBuildEnded(event: BuildEndedEvent) {
|
|
279
|
+
const failures: unknown[] = [];
|
|
280
|
+
for (const listener of buildEndedListeners.slice()) {
|
|
281
|
+
try {
|
|
282
|
+
listener(event);
|
|
283
|
+
} catch (error: unknown) {
|
|
284
|
+
failures.push(error);
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
if (failures.length > 0) {
|
|
288
|
+
throw failures[0];
|
|
289
|
+
}
|
|
290
|
+
},
|
|
291
|
+
onBuildPhase(state: DocumentState, listener: DocumentBuildListener) {
|
|
292
|
+
const list = buildPhaseListeners.get(state) ?? [];
|
|
293
|
+
list.push(listener);
|
|
294
|
+
buildPhaseListeners.set(state, list);
|
|
295
|
+
return Disposable.create(() => {
|
|
296
|
+
const idx = list.indexOf(listener);
|
|
297
|
+
if (idx >= 0) {
|
|
298
|
+
list.splice(idx, 1);
|
|
299
|
+
}
|
|
300
|
+
});
|
|
301
|
+
},
|
|
302
|
+
fireBuildPhase(state: DocumentState, built: LangiumDocument[], cancelToken?: CancellationToken) {
|
|
303
|
+
const token =
|
|
304
|
+
cancelToken ??
|
|
305
|
+
({
|
|
306
|
+
isCancellationRequested: false,
|
|
307
|
+
onCancellationRequested: () => Disposable.create(() => undefined)
|
|
308
|
+
} as CancellationToken);
|
|
309
|
+
for (const listener of buildPhaseListeners.get(state) ?? []) {
|
|
310
|
+
reraise(listener(built, token));
|
|
311
|
+
}
|
|
312
|
+
},
|
|
197
313
|
gateNextWaitUntil(): StubWaitUntilGate {
|
|
198
314
|
let release: (() => void) | undefined;
|
|
199
315
|
const entry = {
|
|
@@ -224,15 +340,14 @@ export function makeStubDocumentBuilder(): StubDocumentBuilder {
|
|
|
224
340
|
build() {
|
|
225
341
|
return notSupported('build');
|
|
226
342
|
},
|
|
227
|
-
onBuildPhase() {
|
|
228
|
-
return notSupported('onBuildPhase');
|
|
229
|
-
},
|
|
230
343
|
resetToState() {
|
|
231
344
|
return notSupported('resetToState');
|
|
232
345
|
},
|
|
233
346
|
reset() {
|
|
234
347
|
phaseListeners.clear();
|
|
348
|
+
deliveredListeners.clear();
|
|
235
349
|
onUpdateListeners.length = 0;
|
|
350
|
+
buildEndedListeners.length = 0;
|
|
236
351
|
gates.length = 0;
|
|
237
352
|
updateCalls.length = 0;
|
|
238
353
|
waitUntilCalls.length = 0;
|