@hydranium/core 1.0.0-next.39 → 1.0.0-next.390
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 +254 -140
- package/lib/documents/ast-document-manager.d.ts.map +1 -1
- package/lib/documents/ast-document-manager.js +311 -128
- 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 +40 -0
- package/lib/documents/file-system-task-queue.js.map +1 -0
- package/lib/documents/hydranium-text-documents.d.ts +453 -282
- package/lib/documents/hydranium-text-documents.d.ts.map +1 -1
- package/lib/documents/hydranium-text-documents.js +918 -504
- 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 +153 -0
- package/lib/documents/version-sync-service.d.ts.map +1 -0
- package/lib/documents/version-sync-service.js +186 -0
- package/lib/documents/version-sync-service.js.map +1 -0
- package/lib/index.d.ts +3 -0
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +3 -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/ast-extension/ast-node-builder.d.ts +12 -7
- package/lib/langium/ast-extension/ast-node-builder.d.ts.map +1 -1
- package/lib/langium/ast-extension/ast-node-builder.js +25 -9
- package/lib/langium/ast-extension/ast-node-builder.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 +75 -36
- 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/console-tee.d.ts +27 -0
- package/lib/langium/diagnostics/console-tee.d.ts.map +1 -0
- package/lib/langium/diagnostics/console-tee.js +141 -0
- package/lib/langium/diagnostics/console-tee.js.map +1 -0
- 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 +25 -6
- package/lib/langium/diagnostics/logger.d.ts.map +1 -1
- package/lib/langium/diagnostics/logger.js +49 -17
- package/lib/langium/diagnostics/logger.js.map +1 -1
- package/lib/langium/diagnostics/lsp-logger.d.ts +25 -0
- package/lib/langium/diagnostics/lsp-logger.d.ts.map +1 -1
- package/lib/langium/diagnostics/lsp-logger.js +81 -46
- 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 +43 -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 +390 -40
- package/lib/langium/document-builder/document-builder.d.ts.map +1 -1
- package/lib/langium/document-builder/document-builder.js +635 -102
- 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 +20 -23
- package/lib/langium/integration-services.d.ts.map +1 -1
- package/lib/langium/integration-services.js.map +1 -1
- package/lib/langium/integrity/integrity-rule.d.ts +22 -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 +217 -29
- package/lib/langium/integrity/integrity-service.d.ts.map +1 -1
- package/lib/langium/integrity/integrity-service.js +588 -84
- package/lib/langium/integrity/integrity-service.js.map +1 -1
- package/lib/langium/keys/containment.d.ts +3 -2
- package/lib/langium/keys/containment.d.ts.map +1 -1
- package/lib/langium/keys/containment.js.map +1 -1
- package/lib/langium/keys/name-based-key-provider.d.ts +17 -10
- package/lib/langium/keys/name-based-key-provider.d.ts.map +1 -1
- package/lib/langium/keys/name-based-key-provider.js +24 -12
- 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 +21 -5
- package/lib/langium/language-module.js.map +1 -1
- package/lib/langium/model-service/client-session.d.ts +405 -0
- package/lib/langium/model-service/client-session.d.ts.map +1 -0
- package/lib/langium/model-service/client-session.js +479 -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 +68 -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 +441 -323
- package/lib/langium/model-service/model-service.d.ts.map +1 -1
- package/lib/langium/model-service/model-service.js +602 -407
- package/lib/langium/model-service/model-service.js.map +1 -1
- package/lib/langium/module.d.ts +96 -37
- package/lib/langium/module.d.ts.map +1 -1
- package/lib/langium/module.js +41 -29
- package/lib/langium/module.js.map +1 -1
- package/lib/langium/naming/name-provider.d.ts +32 -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.map +1 -1
- package/lib/langium/project/abstract-project-manager.d.ts +184 -13
- package/lib/langium/project/abstract-project-manager.d.ts.map +1 -1
- package/lib/langium/project/abstract-project-manager.js +336 -16
- package/lib/langium/project/abstract-project-manager.js.map +1 -1
- package/lib/langium/project/project-change-event.d.ts +22 -3
- package/lib/langium/project/project-change-event.d.ts.map +1 -1
- package/lib/langium/project/project-manager.d.ts +28 -2
- package/lib/langium/project/project-manager.d.ts.map +1 -1
- package/lib/langium/project/single-project-manager.d.ts +7 -1
- package/lib/langium/project/single-project-manager.d.ts.map +1 -1
- package/lib/langium/project/single-project-manager.js +12 -0
- package/lib/langium/project/single-project-manager.js.map +1 -1
- package/lib/langium/residency/cst-residency-service.d.ts +92 -52
- package/lib/langium/residency/cst-residency-service.d.ts.map +1 -1
- package/lib/langium/residency/cst-residency-service.js +154 -58
- package/lib/langium/residency/cst-residency-service.js.map +1 -1
- package/lib/langium/scope/ast-node-description-provider.d.ts +46 -10
- package/lib/langium/scope/ast-node-description-provider.d.ts.map +1 -1
- package/lib/langium/scope/ast-node-description-provider.js +88 -15
- package/lib/langium/scope/ast-node-description-provider.js.map +1 -1
- package/lib/langium/scope/built-local-symbols.d.ts +12 -0
- package/lib/langium/scope/built-local-symbols.d.ts.map +1 -0
- package/lib/langium/scope/built-local-symbols.js +11 -0
- package/lib/langium/scope/built-local-symbols.js.map +1 -0
- 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 +122 -32
- package/lib/langium/scope/hydranium-scope-provider.d.ts.map +1 -1
- package/lib/langium/scope/hydranium-scope-provider.js +217 -39
- 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 +69 -37
- package/lib/langium/scope/scope-extension-service.d.ts.map +1 -1
- package/lib/langium/scope/scope-extension-service.js +102 -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 +12 -0
- package/lib/langium/serialization/yaml-serializer.d.ts.map +1 -1
- package/lib/langium/serialization/yaml-serializer.js +24 -4
- 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 +10 -4
- 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 +60 -39
- package/lib/langium/transfer/transfer-encoder.d.ts.map +1 -1
- package/lib/langium/transfer/transfer-encoder.js +35 -24
- package/lib/langium/transfer/transfer-encoder.js.map +1 -1
- package/lib/langium/trivia/comment-preserver.d.ts +543 -0
- package/lib/langium/trivia/comment-preserver.d.ts.map +1 -0
- package/lib/langium/trivia/comment-preserver.js +1165 -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 +168 -23
- package/lib/langium/validation/document-validator.d.ts.map +1 -1
- package/lib/langium/validation/document-validator.js +264 -26
- 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/ast-node-locator.d.ts +24 -0
- package/lib/langium/workspace/ast-node-locator.d.ts.map +1 -0
- package/lib/langium/workspace/ast-node-locator.js +32 -0
- package/lib/langium/workspace/ast-node-locator.js.map +1 -0
- 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 +78 -4
- package/lib/langium/workspace/hydranium-langium-document-factory.d.ts.map +1 -1
- package/lib/langium/workspace/hydranium-langium-document-factory.js +188 -5
- package/lib/langium/workspace/hydranium-langium-document-factory.js.map +1 -1
- package/lib/langium/workspace/hydranium-workspace-lock.d.ts +50 -1
- package/lib/langium/workspace/hydranium-workspace-lock.d.ts.map +1 -1
- package/lib/langium/workspace/hydranium-workspace-lock.js +73 -1
- package/lib/langium/workspace/hydranium-workspace-lock.js.map +1 -1
- package/lib/langium/workspace/hydranium-workspace-manager.d.ts +105 -21
- package/lib/langium/workspace/hydranium-workspace-manager.d.ts.map +1 -1
- package/lib/langium/workspace/hydranium-workspace-manager.js +186 -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 +3 -0
- package/lib/langium/workspace/index.d.ts.map +1 -1
- package/lib/langium/workspace/index.js +3 -0
- package/lib/langium/workspace/index.js.map +1 -1
- package/lib/langium/workspace/initialize-workspace.d.ts +40 -3
- package/lib/langium/workspace/initialize-workspace.d.ts.map +1 -1
- package/lib/langium/workspace/initialize-workspace.js +68 -3
- 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/{documents → langium/workspace}/self-save-registry.d.ts +7 -9
- package/lib/langium/workspace/self-save-registry.d.ts.map +1 -0
- package/lib/{documents → langium/workspace}/self-save-registry.js +9 -11
- package/lib/langium/workspace/self-save-registry.js.map +1 -0
- package/lib/langium/workspace/syntax-errors.d.ts +23 -0
- package/lib/langium/workspace/syntax-errors.d.ts.map +1 -0
- package/lib/langium/workspace/syntax-errors.js +29 -0
- package/lib/langium/workspace/syntax-errors.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/server-locale.d.ts +6 -6
- package/lib/locale/server-locale.d.ts.map +1 -1
- package/lib/locale/server-locale.js.map +1 -1
- 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/edit-requests-guard.d.ts +31 -0
- package/lib/lsp/edit-requests-guard.d.ts.map +1 -0
- package/lib/lsp/edit-requests-guard.js +125 -0
- package/lib/lsp/edit-requests-guard.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 +234 -101
- package/lib/lsp/hydranium-document-update-handler.js.map +1 -1
- package/lib/lsp/index.d.ts +6 -2
- package/lib/lsp/index.d.ts.map +1 -1
- package/lib/lsp/index.js +6 -2
- 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 +58 -2
- package/lib/lsp/semantic-token-provider.d.ts.map +1 -1
- package/lib/lsp/semantic-token-provider.js +98 -9
- 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 +12 -7
- package/lib/lsp/start-language-server.d.ts.map +1 -1
- package/lib/lsp/start-language-server.js +21 -7
- package/lib/lsp/start-language-server.js.map +1 -1
- package/lib/messages/carriers.d.ts +4 -6
- package/lib/messages/carriers.d.ts.map +1 -1
- package/lib/messages/carriers.js +4 -6
- package/lib/messages/carriers.js.map +1 -1
- package/lib/messages/index.d.ts +2 -2
- package/lib/messages/index.d.ts.map +1 -1
- package/lib/messages/index.js +2 -2
- package/lib/messages/index.js.map +1 -1
- package/lib/messages/renderer.d.ts +10 -4
- package/lib/messages/renderer.d.ts.map +1 -1
- package/lib/messages/renderer.js +6 -0
- package/lib/messages/renderer.js.map +1 -1
- package/lib/node/event-loop-monitor.d.ts.map +1 -1
- package/lib/node/event-loop-monitor.js +3 -2
- 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-file-sink.d.ts +3 -2
- package/lib/node/log-file-sink.d.ts.map +1 -1
- package/lib/node/log-file-sink.js +6 -2
- package/lib/node/log-file-sink.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.d.ts +6 -5
- package/lib/node/server-state-snapshot.d.ts.map +1 -1
- package/lib/node/server-state-snapshot.js +20 -17
- 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/node/validate-workspace.d.ts +1 -1
- package/lib/node/validate-workspace.d.ts.map +1 -1
- package/lib/node/validate-workspace.js +5 -1
- package/lib/node/validate-workspace.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.js.map +1 -1
- package/lib/testing/make-test-services.d.ts +45 -14
- package/lib/testing/make-test-services.d.ts.map +1 -1
- package/lib/testing/make-test-services.js +23 -7
- 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 +4 -1
- package/lib/testing/node/index.d.ts.map +1 -1
- package/lib/testing/node/index.js +4 -1
- 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 +2 -1
- package/lib/testing/node/scratch-workspace.d.ts.map +1 -1
- package/lib/testing/node/scratch-workspace.js +12 -6
- package/lib/testing/node/scratch-workspace.js.map +1 -1
- package/lib/testing/node/settle-server.d.ts +33 -0
- package/lib/testing/node/settle-server.d.ts.map +1 -0
- package/lib/testing/node/settle-server.js +84 -0
- package/lib/testing/node/settle-server.js.map +1 -0
- 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/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 -51
- package/lib/testing/stub-ast-document-manager.d.ts.map +1 -1
- package/lib/testing/stub-ast-document-manager.js +31 -59
- package/lib/testing/stub-ast-document-manager.js.map +1 -1
- package/lib/testing/stub-document-builder.d.ts +25 -11
- package/lib/testing/stub-document-builder.d.ts.map +1 -1
- package/lib/testing/stub-document-builder.js +91 -2
- 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 +8 -7
- package/lib/testing/stub-model-service.d.ts.map +1 -1
- package/lib/testing/stub-model-service.js +4 -4
- package/lib/testing/stub-model-service.js.map +1 -1
- package/lib/testing/stub-project-manager.d.ts.map +1 -1
- package/lib/testing/stub-project-manager.js +10 -0
- 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 +22 -6
- package/lib/util/connection-liveness.d.ts.map +1 -1
- package/lib/util/connection-liveness.js +75 -15
- package/lib/util/connection-liveness.js.map +1 -1
- package/lib/util/environment.d.ts +7 -0
- package/lib/util/environment.d.ts.map +1 -1
- package/lib/util/environment.js +15 -1
- package/lib/util/environment.js.map +1 -1
- package/lib/util/registry.d.ts.map +1 -1
- package/package.json +41 -60
- 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 +477 -250
- package/src/documents/client-ids.ts +5 -22
- package/src/documents/client-session-errors.ts +26 -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 +77 -0
- package/src/documents/hydranium-text-documents.ts +1044 -615
- 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 +304 -0
- package/src/index.ts +3 -0
- package/src/langium/ast-extension/ast-extension-service.ts +77 -41
- package/src/langium/ast-extension/ast-node-builder.ts +35 -13
- package/src/langium/bootstrap.ts +79 -43
- 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/console-tee.ts +150 -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 +51 -17
- package/src/langium/diagnostics/lsp-logger.ts +83 -45
- package/src/langium/document-builder/build-pipeline-integration.ts +57 -32
- package/src/langium/document-builder/build-session.ts +4 -3
- package/src/langium/document-builder/document-builder.ts +773 -106
- package/src/langium/integration-services.ts +20 -23
- package/src/langium/integrity/integrity-rule.ts +22 -8
- package/src/langium/integrity/integrity-service.ts +656 -90
- package/src/langium/keys/containment.ts +3 -2
- package/src/langium/keys/name-based-key-provider.ts +24 -12
- package/src/langium/language-module.ts +52 -9
- package/src/langium/model-service/client-session.ts +769 -0
- package/src/langium/model-service/index.ts +2 -0
- package/src/langium/model-service/model-events.ts +82 -0
- package/src/langium/model-service/model-service.ts +885 -532
- package/src/langium/module.ts +141 -65
- package/src/langium/naming/name-provider.ts +34 -8
- package/src/langium/project/abstract-project-manager.ts +409 -20
- package/src/langium/project/project-change-event.ts +25 -3
- package/src/langium/project/project-manager.ts +31 -2
- package/src/langium/project/single-project-manager.ts +16 -1
- package/src/langium/residency/cst-residency-service.ts +210 -87
- package/src/langium/scope/ast-node-description-provider.ts +111 -16
- package/src/langium/scope/built-local-symbols.ts +13 -0
- 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 +245 -41
- 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 +148 -56
- 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 +26 -4
- package/src/langium/service-registry.ts +41 -2
- package/src/langium/shared-services.ts +13 -4
- package/src/langium/single-langium-copy.ts +42 -0
- package/src/langium/transfer/transfer-encoder.ts +76 -50
- package/src/langium/trivia/comment-preserver.ts +1410 -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 +312 -31
- package/src/langium/validation/validation-contribution-collector.ts +10 -1
- package/src/langium/workspace/ast-node-locator.ts +33 -0
- 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 +239 -4
- package/src/langium/workspace/hydranium-workspace-lock.ts +101 -2
- package/src/langium/workspace/hydranium-workspace-manager.ts +214 -35
- package/src/langium/workspace/in-memory-file-system-provider.ts +54 -23
- package/src/langium/workspace/index.ts +3 -0
- package/src/langium/workspace/initialize-workspace.ts +96 -4
- package/src/langium/workspace/langium-documents.ts +19 -1
- package/src/langium/workspace/persistent-file-system-provider.ts +27 -15
- package/src/{documents → langium/workspace}/self-save-registry.ts +12 -14
- package/src/langium/workspace/syntax-errors.ts +34 -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/server-locale.ts +6 -6
- 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/edit-requests-guard.ts +152 -0
- package/src/lsp/hydranium-document-update-handler.ts +284 -110
- package/src/lsp/index.ts +6 -2
- package/src/lsp/lsp-latency.ts +62 -0
- package/src/lsp/save-text-document.ts +63 -0
- package/src/lsp/semantic-token-provider.ts +146 -8
- package/src/lsp/shared-module.ts +4 -8
- package/src/lsp/start-language-server.ts +21 -7
- package/src/messages/carriers.ts +4 -6
- package/src/messages/index.ts +11 -2
- package/src/messages/renderer.ts +11 -3
- package/src/node/event-loop-monitor.ts +3 -4
- 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-file-sink.ts +6 -2
- 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 +28 -20
- 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/node/validate-workspace.ts +8 -2
- 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-test-services.ts +83 -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 +4 -1
- 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 +12 -6
- package/src/testing/node/settle-server.ts +89 -0
- package/src/testing/node/spawned-server.ts +57 -3
- 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 -123
- package/src/testing/stub-document-builder.ts +128 -15
- 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 +9 -8
- package/src/testing/stub-project-manager.ts +10 -0
- 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 +81 -15
- package/src/util/environment.ts +24 -2
- package/lib/documents/language-client-text-shadow.d.ts +0 -124
- package/lib/documents/language-client-text-shadow.d.ts.map +0 -1
- package/lib/documents/language-client-text-shadow.js +0 -190
- package/lib/documents/language-client-text-shadow.js.map +0 -1
- 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 -211
- 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,26 +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
|
-
* (`isTriggeringEdit`, `getAuthor`) throw if invoked — tests that need them
|
|
31
|
-
* should wire a richer stub or use the real {@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}.
|
|
32
27
|
*
|
|
33
28
|
* Open state is tracked per URI as the set of holding client ids, so a
|
|
34
29
|
* document stays open until its last client closes. The stub forwards
|
|
@@ -44,74 +39,31 @@ import type { StubLangiumDocuments } from './stub-langium-documents.js';
|
|
|
44
39
|
* are still picked so signature drift on them produces a compile
|
|
45
40
|
* error rather than silent divergence.
|
|
46
41
|
*/
|
|
47
|
-
export interface StubAstDocumentManager<TAst extends AstNode, TDiagnostic =
|
|
42
|
+
export interface StubAstDocumentManager<TAst extends AstNode, TDiagnostic extends AstDiagnostic = AstDiagnostic> extends Pick<
|
|
48
43
|
AstDocumentManager<TAst, TDiagnostic>,
|
|
49
44
|
| 'open'
|
|
50
45
|
| 'close'
|
|
51
46
|
| 'isOpen'
|
|
52
47
|
| 'update'
|
|
53
48
|
| 'save'
|
|
54
|
-
| '
|
|
55
|
-
| '
|
|
56
|
-
| '
|
|
49
|
+
| 'delete'
|
|
50
|
+
| 'isDeleting'
|
|
51
|
+
| 'attributeDeletion'
|
|
57
52
|
| 'getAuthor'
|
|
58
53
|
| 'getDocument'
|
|
59
|
-
| '
|
|
54
|
+
| 'toAstDocument'
|
|
55
|
+
| 'attributeUpdate'
|
|
60
56
|
> {
|
|
61
57
|
readonly openClients: Map<string, Set<string>>;
|
|
62
|
-
|
|
63
|
-
/**
|
|
64
|
-
* Deliver an update event to every live {@link StubAstDocumentManager.onUpdate}
|
|
65
|
-
* subscriber for `uri`. Returns how many listeners received it.
|
|
66
|
-
*
|
|
67
|
-
* **This exists because `onUpdate` cannot fire on its own, and that is a
|
|
68
|
-
* trap without a driver.** The real manager emits from a
|
|
69
|
-
* `DocumentBuilder.onDocumentPhase(Validated)` hook; a `makeTestServices`
|
|
70
|
-
* tree has a stub builder that runs no phases, so a subscription made
|
|
71
|
-
* through the stub would never be called. A test written as
|
|
72
|
-
* `onUpdate(uri, …); await tick(); expect(events).toHaveLength(0)` therefore
|
|
73
|
-
* passes for the wrong reason — the listener was never wired to anything —
|
|
74
|
-
* and reads as coverage of a suppression path it never reached. Driving the
|
|
75
|
-
* event explicitly is what lets such a test first prove delivery works, so
|
|
76
|
-
* the negative assertion means something.
|
|
77
|
-
*
|
|
78
|
-
* **The return value is the point, not a convenience.** `0` says no
|
|
79
|
-
* subscriber for that URI was registered, which is the state a negative
|
|
80
|
-
* assertion cannot distinguish from correct suppression. Assert it is
|
|
81
|
-
* non-zero before believing an empty event list.
|
|
82
|
-
*
|
|
83
|
-
* Two alternatives were rejected. Making `onUpdate` THROW would fence the
|
|
84
|
-
* hazard at zero API cost, but this harness ships (`files: ["lib", "src"]`)
|
|
85
|
-
* and an adopter subclass or test that subscribes and legitimately ignores
|
|
86
|
-
* the event would start failing on a stub it never asked to fire. Wiring the
|
|
87
|
-
* stub to the text-document store's change notifications — the way `onSave`
|
|
88
|
-
* is wired — would make it fire on its own, which moves the pass reason of
|
|
89
|
-
* every existing suite on a `makeTestServices` tree and asserts a phase
|
|
90
|
-
* semantics (`Validated`, with the real manager's author lookup and
|
|
91
|
-
* `changed`/`deleted`/`rebuilt` classification) that no stub tree has.
|
|
92
|
-
*/
|
|
93
|
-
emitUpdate(uri: string, event: AstDocumentUpdatedEvent<TAst, TDiagnostic>): number;
|
|
94
|
-
|
|
95
|
-
/**
|
|
96
|
-
* How many live {@link StubAstDocumentManager.onUpdate} subscribers `uri`
|
|
97
|
-
* has, or the total across every URI when called with no argument.
|
|
98
|
-
*
|
|
99
|
-
* Read from outside — it is what a test asserts to show a subscription was
|
|
100
|
-
* actually established, and what makes {@link emitUpdate}'s `0` legible.
|
|
101
|
-
*/
|
|
102
|
-
updateSubscriptions(uri?: string): number;
|
|
103
58
|
}
|
|
104
59
|
|
|
105
|
-
export function makeStubAstDocumentManager<TAst extends AstNode, TDiagnostic =
|
|
60
|
+
export function makeStubAstDocumentManager<TAst extends AstNode, TDiagnostic extends AstDiagnostic = AstDiagnostic>(
|
|
106
61
|
textDocuments: StubHydraniumTextDocuments,
|
|
107
62
|
fileSystem: Pick<WritableFileSystemProvider, 'writeFile'>,
|
|
108
|
-
documents?: StubLangiumDocuments<TAst, TDiagnostic
|
|
63
|
+
documents?: StubLangiumDocuments<TAst, TDiagnostic>,
|
|
64
|
+
ledger: ModelLedger = new DefaultModelLedger()
|
|
109
65
|
): StubAstDocumentManager<TAst, TDiagnostic> {
|
|
110
66
|
const openClients = new Map<string, Set<string>>();
|
|
111
|
-
// Keyed by the URI as given, not canonicalized: the stub has no URI policy,
|
|
112
|
-
// and `getDocument` below looks documents up by their given URI for the same
|
|
113
|
-
// reason, so both halves agree on identity.
|
|
114
|
-
const updateListeners = new Map<string, Set<(event: AstDocumentUpdatedEvent<TAst, TDiagnostic>) => void>>();
|
|
115
67
|
const notSupported = (method: string): never => {
|
|
116
68
|
throw new Error(`StubAstDocumentManager.${method} is not implemented; wire the real AstDocumentManager if your test needs it.`);
|
|
117
69
|
};
|
|
@@ -129,10 +81,13 @@ export function makeStubAstDocumentManager<TAst extends AstNode, TDiagnostic = u
|
|
|
129
81
|
clients.add(args.clientId);
|
|
130
82
|
openClients.set(args.uri, clients);
|
|
131
83
|
// The real `open` materialises the synced document (from the payload
|
|
132
|
-
// text or the filesystem)
|
|
133
|
-
//
|
|
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.
|
|
134
87
|
if (!textDocuments.get(args.uri)) {
|
|
135
88
|
textDocuments.seedOpen(args.uri, args.text ?? '', args.clientId);
|
|
89
|
+
} else {
|
|
90
|
+
textDocuments.attachClient(args.uri, args.clientId);
|
|
136
91
|
}
|
|
137
92
|
return Disposable.create(() => close({ uri: args.uri, clientId: args.clientId }));
|
|
138
93
|
},
|
|
@@ -145,75 +100,44 @@ export function makeStubAstDocumentManager<TAst extends AstNode, TDiagnostic = u
|
|
|
145
100
|
// (step iff the content changed) — no fabricated version numbers.
|
|
146
101
|
return textDocuments.applyContentChange(uri, text, clientId);
|
|
147
102
|
},
|
|
148
|
-
async save(uri: string, clientId: string): Promise<
|
|
103
|
+
async save(uri: string, clientId: string): Promise<number> {
|
|
149
104
|
const text = textDocuments.get(uri)?.getText() ?? '';
|
|
105
|
+
const version = textDocuments.version(uri);
|
|
150
106
|
await fileSystem.writeFile(UriUtils.toUri(uri), text);
|
|
151
107
|
textDocuments.notifyDidSaveTextDocument({ textDocument: { uri }, text }, clientId);
|
|
108
|
+
return version;
|
|
152
109
|
},
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
// stub tree runs no phases. `emitUpdate` is the only thing that fires it;
|
|
156
|
-
// see its declaration for why that is a driver rather than a throw or an
|
|
157
|
-
// autonomous wiring.
|
|
158
|
-
onUpdate(uri: string, listener: (event: AstDocumentUpdatedEvent<TAst, TDiagnostic>) => void): Disposable {
|
|
159
|
-
const listeners = updateListeners.get(uri) ?? new Set<(event: AstDocumentUpdatedEvent<TAst, TDiagnostic>) => void>();
|
|
160
|
-
listeners.add(listener);
|
|
161
|
-
updateListeners.set(uri, listeners);
|
|
162
|
-
return Disposable.create(() => {
|
|
163
|
-
listeners.delete(listener);
|
|
164
|
-
if (listeners.size === 0) {
|
|
165
|
-
updateListeners.delete(uri);
|
|
166
|
-
}
|
|
167
|
-
});
|
|
168
|
-
},
|
|
169
|
-
emitUpdate(uri: string, event: AstDocumentUpdatedEvent<TAst, TDiagnostic>): number {
|
|
170
|
-
// Snapshot before iterating: a listener that disposes itself on first
|
|
171
|
-
// delivery would otherwise mutate the set mid-iteration.
|
|
172
|
-
const listeners = [...(updateListeners.get(uri) ?? [])];
|
|
173
|
-
for (const listener of listeners) {
|
|
174
|
-
listener(event);
|
|
175
|
-
}
|
|
176
|
-
return listeners.length;
|
|
177
|
-
},
|
|
178
|
-
updateSubscriptions(uri?: string): number {
|
|
179
|
-
if (uri !== undefined) {
|
|
180
|
-
return updateListeners.get(uri)?.size ?? 0;
|
|
181
|
-
}
|
|
182
|
-
let total = 0;
|
|
183
|
-
for (const listeners of updateListeners.values()) {
|
|
184
|
-
total += listeners.size;
|
|
185
|
-
}
|
|
186
|
-
return total;
|
|
110
|
+
delete(): Promise<void> {
|
|
111
|
+
return notSupported('delete');
|
|
187
112
|
},
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
return;
|
|
192
|
-
}
|
|
193
|
-
listener({
|
|
194
|
-
document: { uri, version: textDocuments.version(uri), root: undefined as unknown as TAst, diagnostics: [] as TDiagnostic[] },
|
|
195
|
-
sourceClientId: event.clientId
|
|
196
|
-
});
|
|
197
|
-
});
|
|
113
|
+
// The stub deletes nothing, so no delete is ever under way.
|
|
114
|
+
isDeleting(): boolean {
|
|
115
|
+
return false;
|
|
198
116
|
},
|
|
199
|
-
|
|
200
|
-
return
|
|
201
|
-
if (event.clientId === clientId && event.document.uri === uri) {
|
|
202
|
-
listener();
|
|
203
|
-
}
|
|
204
|
-
});
|
|
117
|
+
attributeDeletion(): string {
|
|
118
|
+
return UNKNOWN_CLIENT_ID;
|
|
205
119
|
},
|
|
206
120
|
getAuthor(): string {
|
|
207
121
|
return notSupported('getAuthor');
|
|
208
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
|
+
},
|
|
209
131
|
// Canonicalizing document gateway. The stub has no canonicalizer, so it looks
|
|
210
132
|
// the document up in the seeded `StubLangiumDocuments` by its given URI (tests
|
|
211
133
|
// that need real symlink canonicalization wire the real AstDocumentManager).
|
|
212
134
|
getDocument(uri: string): LangiumDocument | undefined {
|
|
213
135
|
return documents?.getDocument(UriUtils.toUri(uri));
|
|
214
136
|
},
|
|
215
|
-
|
|
216
|
-
|
|
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);
|
|
217
141
|
}
|
|
218
142
|
};
|
|
219
143
|
}
|
|
@@ -13,10 +13,18 @@ import {
|
|
|
13
13
|
type DocumentPhaseListener,
|
|
14
14
|
type DocumentState,
|
|
15
15
|
type DocumentUpdateListener,
|
|
16
|
+
isOperationCancelled,
|
|
16
17
|
type LangiumDocument,
|
|
17
|
-
type URI
|
|
18
|
+
type URI,
|
|
19
|
+
type WorkspaceLock
|
|
18
20
|
} from '@hydranium/langium';
|
|
19
21
|
import { type CancellationToken, Disposable } from 'vscode-languageserver';
|
|
22
|
+
import {
|
|
23
|
+
type BuildEndedEvent,
|
|
24
|
+
type BuildEndedListener,
|
|
25
|
+
type DocumentPhaseDeliveredListener,
|
|
26
|
+
HydraniumDocumentBuilder
|
|
27
|
+
} from '../langium/document-builder/document-builder.js';
|
|
20
28
|
|
|
21
29
|
/** Recorded call to a stubbed {@link DocumentBuilder} method. */
|
|
22
30
|
export interface RecordedBuilderCall<TArgs extends unknown[]> {
|
|
@@ -46,8 +54,7 @@ export interface StubWaitUntilGate {
|
|
|
46
54
|
|
|
47
55
|
/**
|
|
48
56
|
* Stub for Langium's {@link DocumentBuilder}. Implements the slice production
|
|
49
|
-
* code reads
|
|
50
|
-
* `onDocumentPhase` / `onUpdate`) plus test-only helpers:
|
|
57
|
+
* code reads on the framework's test paths, plus test-only helpers:
|
|
51
58
|
*
|
|
52
59
|
* - {@link firePhase} — synchronously dispatch the registered phase
|
|
53
60
|
* listener(s) for a document, simulating a build completing.
|
|
@@ -65,16 +72,29 @@ export interface StubWaitUntilGate {
|
|
|
65
72
|
* Picks the methods the framework reads from {@link DocumentBuilder} on
|
|
66
73
|
* the slot path — the compiler enforces those signatures stay aligned.
|
|
67
74
|
* `update`, `onDocumentPhase`, `onUpdate`, and `waitUntil` carry stubbed
|
|
68
|
-
* implementations
|
|
69
|
-
*
|
|
70
|
-
*
|
|
75
|
+
* implementations, and `scheduleUpdate` calls `update` in one lock write per
|
|
76
|
+
* call (see {@link makeStubDocumentBuilder}); `build`, `onBuildPhase`, and
|
|
77
|
+
* `resetToState` are implemented as loud-failing `notSupported` throwers
|
|
78
|
+
* so production code that goes through the cast at the bind site (i.e. accesses methods the
|
|
71
79
|
* stub claims but doesn't meaningfully implement) fails with a clear
|
|
72
80
|
* message instead of "undefined is not a function".
|
|
73
81
|
*/
|
|
74
|
-
export interface StubDocumentBuilder
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
82
|
+
export interface StubDocumentBuilder
|
|
83
|
+
extends
|
|
84
|
+
Pick<DocumentBuilder, 'update' | 'onDocumentPhase' | 'onUpdate' | 'build' | 'onBuildPhase' | 'resetToState' | 'updateBuildOptions'>,
|
|
85
|
+
Pick<
|
|
86
|
+
HydraniumDocumentBuilder,
|
|
87
|
+
| 'onDocumentPhaseDelivered'
|
|
88
|
+
| 'scheduleUpdate'
|
|
89
|
+
| 'finalBuildState'
|
|
90
|
+
| 'onBuildEnded'
|
|
91
|
+
| 'isInsideBuildUpdate'
|
|
92
|
+
| 'overlapsRunningBuild'
|
|
93
|
+
| 'shouldRelink'
|
|
94
|
+
| 'activeBuild'
|
|
95
|
+
| 'markNextReason'
|
|
96
|
+
| 'shouldValidateDocument'
|
|
97
|
+
> {
|
|
78
98
|
/**
|
|
79
99
|
* Single-overload stub of {@link DocumentBuilder.waitUntil}. Real has
|
|
80
100
|
* two overloads (`(state, cancelToken?): Promise<void>` and
|
|
@@ -88,9 +108,10 @@ export interface StubDocumentBuilder extends Pick<
|
|
|
88
108
|
readonly waitUntilCalls: ReadonlyArray<RecordedBuilderCall<[DocumentState, URI | undefined]>>;
|
|
89
109
|
/**
|
|
90
110
|
* Synchronously fire the phase listener(s) registered for `state` with
|
|
91
|
-
* `document
|
|
92
|
-
*
|
|
93
|
-
*
|
|
111
|
+
* `document`, then, unless a listener was cancelled, the
|
|
112
|
+
* `onDocumentPhaseDelivered` listeners. `cancelToken` defaults to a
|
|
113
|
+
* non-cancelled token; pass a cancelled token to simulate a build preempted
|
|
114
|
+
* by a concurrent write lock.
|
|
94
115
|
*/
|
|
95
116
|
firePhase(state: DocumentState, document: LangiumDocument, cancelToken?: CancellationToken): void;
|
|
96
117
|
/** Synchronously fire every registered `onUpdate` listener. */
|
|
@@ -103,6 +124,13 @@ export interface StubDocumentBuilder extends Pick<
|
|
|
103
124
|
* looking wired.
|
|
104
125
|
*/
|
|
105
126
|
fireBuildPhase(state: DocumentState, built: LangiumDocument[], cancelToken?: CancellationToken): void;
|
|
127
|
+
/**
|
|
128
|
+
* Synchronously fire every {@link HydraniumDocumentBuilder.onBuildEnded}
|
|
129
|
+
* listener with `event`. As in the real builder, one that throws does not
|
|
130
|
+
* stop the others; the real builder logs the error, and this stub, having
|
|
131
|
+
* no logger, rethrows the first one once all have run.
|
|
132
|
+
*/
|
|
133
|
+
fireBuildEnded(event: BuildEndedEvent): void;
|
|
106
134
|
/**
|
|
107
135
|
* Hold the next {@link waitUntil} call. The returned handle releases it;
|
|
108
136
|
* the call's return value resolves on the next tick after `resolve` runs.
|
|
@@ -137,11 +165,18 @@ function reraise(result: unknown): void {
|
|
|
137
165
|
* want to observe rebuilt state should `set` the new root on the document
|
|
138
166
|
* registry and then call `firePhase` to trigger the framework's post-build
|
|
139
167
|
* read path.
|
|
168
|
+
*
|
|
169
|
+
* `workspaceLock` is the lock `scheduleUpdate` writes under, without the real
|
|
170
|
+
* builder's sharing: pass the services tree's own, so a caller's lock ordering
|
|
171
|
+
* and reentrancy behave as against the real builder. Without one,
|
|
172
|
+
* `scheduleUpdate` records the update unlocked.
|
|
140
173
|
*/
|
|
141
|
-
export function makeStubDocumentBuilder(): StubDocumentBuilder {
|
|
174
|
+
export function makeStubDocumentBuilder(workspaceLock?: WorkspaceLock): StubDocumentBuilder {
|
|
142
175
|
const phaseListeners = new Map<DocumentState, DocumentPhaseListener[]>();
|
|
176
|
+
const deliveredListeners = new Map<DocumentState, DocumentPhaseDeliveredListener[]>();
|
|
143
177
|
const buildPhaseListeners = new Map<DocumentState, DocumentBuildListener[]>();
|
|
144
178
|
const onUpdateListeners: DocumentUpdateListener[] = [];
|
|
179
|
+
const buildEndedListeners: BuildEndedListener[] = [];
|
|
145
180
|
const gates: Array<{ take(release: () => void): void }> = [];
|
|
146
181
|
const updateCalls: RecordedBuilderCall<[URI[], URI[]]>[] = [];
|
|
147
182
|
const waitUntilCalls: RecordedBuilderCall<[DocumentState, URI | undefined]>[] = [];
|
|
@@ -150,6 +185,21 @@ export function makeStubDocumentBuilder(): StubDocumentBuilder {
|
|
|
150
185
|
throw new Error(`StubDocumentBuilder.${method} is not implemented; wire a real DocumentBuilder if your test needs it.`);
|
|
151
186
|
};
|
|
152
187
|
const stub: StubDocumentBuilder = {
|
|
188
|
+
// Langium's own default, so a session write waits for `Validated` here
|
|
189
|
+
// as it does against the real builder.
|
|
190
|
+
updateBuildOptions: { validation: { categories: ['built-in', 'fast'] } },
|
|
191
|
+
// The real rule, read off this stub's options, so the two cannot drift.
|
|
192
|
+
finalBuildState: () => HydraniumDocumentBuilder.prototype.finalBuildState.call(stub),
|
|
193
|
+
// Langium's default for an update, read off this stub's options rather
|
|
194
|
+
// than each document's own build options, as the real builder does.
|
|
195
|
+
shouldValidateDocument: () => Boolean(stub.updateBuildOptions.validation),
|
|
196
|
+
// The stub never runs a build of its own.
|
|
197
|
+
isInsideBuildUpdate: () => false,
|
|
198
|
+
overlapsRunningBuild: () => false,
|
|
199
|
+
// It builds no document, so a change relinks none.
|
|
200
|
+
shouldRelink: () => false,
|
|
201
|
+
activeBuild: undefined,
|
|
202
|
+
markNextReason: () => undefined,
|
|
153
203
|
get updateCalls() {
|
|
154
204
|
return updateCalls;
|
|
155
205
|
},
|
|
@@ -159,6 +209,9 @@ export function makeStubDocumentBuilder(): StubDocumentBuilder {
|
|
|
159
209
|
async update(changed: URI[], deleted: URI[]) {
|
|
160
210
|
updateCalls.push({ args: [changed, deleted] });
|
|
161
211
|
},
|
|
212
|
+
scheduleUpdate(changed: URI[], deleted: URI[]) {
|
|
213
|
+
return workspaceLock ? workspaceLock.write(() => stub.update(changed, deleted)) : stub.update(changed, deleted);
|
|
214
|
+
},
|
|
162
215
|
async waitUntil(state: DocumentState, uri?: URI) {
|
|
163
216
|
waitUntilCalls.push({ args: [state, uri] });
|
|
164
217
|
const gate = gates.shift();
|
|
@@ -195,15 +248,73 @@ export function makeStubDocumentBuilder(): StubDocumentBuilder {
|
|
|
195
248
|
onCancellationRequested: () => Disposable.create(() => undefined)
|
|
196
249
|
} as CancellationToken);
|
|
197
250
|
const listeners = phaseListeners.get(state) ?? [];
|
|
251
|
+
const delivered = deliveredListeners.get(state) ?? [];
|
|
252
|
+
// Taken before the listeners, as the real builder does: one of them
|
|
253
|
+
// may stand in for a write that moves the version on. Read only when
|
|
254
|
+
// someone is told, since many fakes carry no text document.
|
|
255
|
+
const version = delivered.length > 0 ? document.textDocument.version : 0;
|
|
256
|
+
// As the real builder: a listener reached on a cancelled token, or
|
|
257
|
+
// throwing OperationCancelled, counts as cancelled and withholds the
|
|
258
|
+
// delivered listeners.
|
|
259
|
+
let cancelledListeners = 0;
|
|
198
260
|
for (const listener of listeners) {
|
|
199
|
-
|
|
261
|
+
if (token.isCancellationRequested) {
|
|
262
|
+
cancelledListeners++;
|
|
263
|
+
continue;
|
|
264
|
+
}
|
|
265
|
+
try {
|
|
266
|
+
reraise(listener(document, token));
|
|
267
|
+
} catch (err: unknown) {
|
|
268
|
+
if (!isOperationCancelled(err)) {
|
|
269
|
+
throw err;
|
|
270
|
+
}
|
|
271
|
+
cancelledListeners++;
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
if (cancelledListeners === 0) {
|
|
275
|
+
for (const listener of delivered) {
|
|
276
|
+
listener(document, version);
|
|
277
|
+
}
|
|
200
278
|
}
|
|
201
279
|
},
|
|
280
|
+
onDocumentPhaseDelivered(state: DocumentState, listener: DocumentPhaseDeliveredListener) {
|
|
281
|
+
const list = deliveredListeners.get(state) ?? [];
|
|
282
|
+
list.push(listener);
|
|
283
|
+
deliveredListeners.set(state, list);
|
|
284
|
+
return Disposable.create(() => {
|
|
285
|
+
const idx = list.indexOf(listener);
|
|
286
|
+
if (idx >= 0) {
|
|
287
|
+
list.splice(idx, 1);
|
|
288
|
+
}
|
|
289
|
+
});
|
|
290
|
+
},
|
|
202
291
|
fireOnUpdate(changed: URI[], deleted: URI[]) {
|
|
203
292
|
for (const listener of onUpdateListeners.slice()) {
|
|
204
293
|
reraise(listener(changed, deleted));
|
|
205
294
|
}
|
|
206
295
|
},
|
|
296
|
+
onBuildEnded(listener: BuildEndedListener) {
|
|
297
|
+
buildEndedListeners.push(listener);
|
|
298
|
+
return Disposable.create(() => {
|
|
299
|
+
const idx = buildEndedListeners.indexOf(listener);
|
|
300
|
+
if (idx >= 0) {
|
|
301
|
+
buildEndedListeners.splice(idx, 1);
|
|
302
|
+
}
|
|
303
|
+
});
|
|
304
|
+
},
|
|
305
|
+
fireBuildEnded(event: BuildEndedEvent) {
|
|
306
|
+
const failures: unknown[] = [];
|
|
307
|
+
for (const listener of buildEndedListeners.slice()) {
|
|
308
|
+
try {
|
|
309
|
+
listener(event);
|
|
310
|
+
} catch (error: unknown) {
|
|
311
|
+
failures.push(error);
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
if (failures.length > 0) {
|
|
315
|
+
throw failures[0];
|
|
316
|
+
}
|
|
317
|
+
},
|
|
207
318
|
onBuildPhase(state: DocumentState, listener: DocumentBuildListener) {
|
|
208
319
|
const list = buildPhaseListeners.get(state) ?? [];
|
|
209
320
|
list.push(listener);
|
|
@@ -261,7 +372,9 @@ export function makeStubDocumentBuilder(): StubDocumentBuilder {
|
|
|
261
372
|
},
|
|
262
373
|
reset() {
|
|
263
374
|
phaseListeners.clear();
|
|
375
|
+
deliveredListeners.clear();
|
|
264
376
|
onUpdateListeners.length = 0;
|
|
377
|
+
buildEndedListeners.length = 0;
|
|
265
378
|
gates.length = 0;
|
|
266
379
|
updateCalls.length = 0;
|
|
267
380
|
waitUntilCalls.length = 0;
|