@hydranium/core 1.0.0-next.32 → 1.0.0-next.320
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 +886 -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 +4 -0
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +7 -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 +83 -44
- 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 +283 -41
- package/lib/langium/document-builder/document-builder.d.ts.map +1 -1
- package/lib/langium/document-builder/document-builder.js +448 -78
- 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 +455 -290
- package/lib/langium/model-service/model-service.d.ts.map +1 -1
- package/lib/langium/model-service/model-service.js +571 -458
- package/lib/langium/model-service/model-service.js.map +1 -1
- package/lib/langium/module.d.ts +141 -40
- package/lib/langium/module.d.ts.map +1 -1
- package/lib/langium/module.js +52 -40
- 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.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 +13 -7
- 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 +86 -37
- package/lib/langium/transfer/transfer-encoder.d.ts.map +1 -1
- package/lib/langium/transfer/transfer-encoder.js +36 -25
- 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 +216 -10
- package/lib/langium/validation/document-validator.d.ts.map +1 -1
- package/lib/langium/validation/document-validator.js +353 -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 +113 -21
- package/lib/langium/workspace/hydranium-workspace-manager.d.ts.map +1 -1
- package/lib/langium/workspace/hydranium-workspace-manager.js +197 -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 +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/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/server-locale.d.ts +29 -5
- package/lib/locale/server-locale.d.ts.map +1 -1
- package/lib/locale/server-locale.js +12 -2
- 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/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 +11 -6
- package/lib/messages/carriers.d.ts.map +1 -1
- package/lib/messages/carriers.js +14 -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 +32 -7
- package/lib/messages/renderer.d.ts.map +1 -1
- package/lib/messages/renderer.js +7 -1
- 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 +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 +4 -4
- package/lib/testing/make-noop-shared-services.d.ts.map +1 -1
- package/lib/testing/make-noop-shared-services.js +4 -4
- package/lib/testing/make-noop-shared-services.js.map +1 -1
- package/lib/testing/make-test-services.d.ts +51 -20
- package/lib/testing/make-test-services.d.ts.map +1 -1
- package/lib/testing/make-test-services.js +29 -13
- 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 +39 -58
- 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 +1011 -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 +7 -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 +87 -51
- 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 +553 -78
- 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 +878 -486
- package/src/langium/module.ts +195 -72
- package/src/langium/naming/name-provider.ts +34 -8
- 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 +16 -7
- package/src/langium/single-langium-copy.ts +42 -0
- package/src/langium/transfer/transfer-encoder.ts +104 -47
- 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 +411 -12
- 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 +224 -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 +96 -4
- 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/server-locale.ts +31 -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/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 +15 -7
- package/src/messages/index.ts +11 -2
- package/src/messages/renderer.ts +34 -6
- 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 +6 -6
- package/src/testing/make-test-services.ts +93 -41
- 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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"profile-digest.js","sourceRoot":"","sources":["../../src/node/profile-digest.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF;;;;;;;GAOG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAE7C,MAAM,CAAC,MAAM,oBAAoB,GAAG,EAAE,CAAC;AAiCvC,SAAS,QAAQ,CAAC,GAAW;IAC1B,IAAI,CAAC,GAAG,EAAE,CAAC;QACR,OAAO,QAAQ,CAAC;IACnB,CAAC;IACD,OAAO,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,IAAI,GAAG,CAAC;AAC1C,CAAC;AAED,SAAS,QAAQ,CAAC,KAAsB;IACrC,OAAO,GAAG,KAAK,CAAC,YAAY,IAAI,aAAa,KAAK,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,UAAU,GAAG,CAAC;AAChG,CAAC;AAED,kGAAkG;AAClG,SAAS,YAAY,CAAC,MAAc,EAAE,MAA2B,EAAE,IAAY,EAAE,MAAiC;IAC/G,MAAM,KAAK,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC;IAC1E,MAAM,IAAI,GAAG,CAAC,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IAC9E,MAAM,KAAK,GAAG,CAAC,GAAG,MAAM,UAAU,IAAI,CAAC,MAAM,OAAO,MAAM,CAAC,IAAI,eAAe,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IACxG,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC;QAC/B,MAAM,OAAO,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACtD,KAAK,CAAC,IAAI,CAAC,KAAK,MAAM,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;IAC7F,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AAClC,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAmB,EAAE,
|
|
1
|
+
{"version":3,"file":"profile-digest.js","sourceRoot":"","sources":["../../src/node/profile-digest.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
*
|
|
7
7
|
* SPDX-License-Identifier: MIT
|
|
8
8
|
********************************************************************************/
|
|
9
|
-
import { PROFILING_SCHEMA_VERSION, type LatencyCollector, type ProfilingArtifact, type ProfilingArtifactKind, type ProfilingEnvironment, type ProfilingManifest } from '@hydranium/protocol';
|
|
9
|
+
import { PROFILING_SCHEMA_VERSION, type LogThreshold, type LatencyCollector, type ProfilingArtifact, type ProfilingArtifactKind, type ProfilingEnvironment, type ProfilingManifest } from '@hydranium/protocol';
|
|
10
10
|
import { type ProfileCaptureOptions, type ProfileReport } from './profile-capture.js';
|
|
11
11
|
export { PROFILING_SCHEMA_VERSION };
|
|
12
12
|
export type { ProfilingArtifact, ProfilingEnvironment, ProfilingManifest };
|
|
@@ -27,10 +27,18 @@ export interface ProfilingRunOptions {
|
|
|
27
27
|
/**
|
|
28
28
|
* Optional latency collector. When present, {@link ProfilingRun.finish} writes
|
|
29
29
|
* its report to `server-latency.json` and records a `server-latency` manifest artefact. A
|
|
30
|
-
* head feeds it via the RPC binding / `
|
|
31
|
-
*
|
|
30
|
+
* head feeds it via the RPC binding / `lspLatencyOptions`; a pure headless
|
|
31
|
+
* build with no request traffic leaves it empty.
|
|
32
32
|
*/
|
|
33
33
|
latency?: LatencyCollector;
|
|
34
|
+
/**
|
|
35
|
+
* Threshold `server.log` is written at. Defaults to `HYDRANIUM_LOG_FILE_LEVEL`,
|
|
36
|
+
* then `HYDRANIUM_LOG_LEVEL`, then `'info'`, read at {@link ProfilingRun.start}
|
|
37
|
+
* and held for the run, so a log-level setting arriving mid-run leaves the log
|
|
38
|
+
* alone. Above `'info'` the framework's own debug profile sessions run inside
|
|
39
|
+
* the captured windows and show up in the profiles.
|
|
40
|
+
*/
|
|
41
|
+
logFileLevel?: LogThreshold;
|
|
34
42
|
}
|
|
35
43
|
/**
|
|
36
44
|
* A profiling session: create it, run one or more named windows through it, then
|
|
@@ -50,6 +58,8 @@ export declare class ProfilingRun {
|
|
|
50
58
|
protected finished: boolean;
|
|
51
59
|
/** The `HYDRANIUM_LOG_FILE` value seen before this run pointed it at the session (restored on {@link finish}). */
|
|
52
60
|
protected readonly previousLogFileEnv?: string;
|
|
61
|
+
/** The `HYDRANIUM_LOG_FILE_LEVEL` value seen before this run set it (restored on {@link finish}). */
|
|
62
|
+
protected readonly previousLogFileLevelEnv?: string;
|
|
53
63
|
/** Absolute path of the session's teed server log. */
|
|
54
64
|
readonly serverLogPath: string;
|
|
55
65
|
protected constructor(options: ProfilingRunOptions, directory: string, sessionId: string);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"profiling-run.d.ts","sourceRoot":"","sources":["../../src/node/profiling-run.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAYlF,OAAO,
|
|
1
|
+
{"version":3,"file":"profiling-run.d.ts","sourceRoot":"","sources":["../../src/node/profiling-run.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
* given a collector, the latency report; browser-origin collectors append their
|
|
16
16
|
* own manifest entries the same way, from the Playwright side.
|
|
17
17
|
*/
|
|
18
|
-
import { DEFAULT_LOG_FILE_ENV, PROFILING_SCHEMA_VERSION } from '@hydranium/protocol';
|
|
18
|
+
import { DEFAULT_LOG_FILE_ENV, DEFAULT_LOG_FILE_LEVEL_ENV, DEFAULT_LOG_LEVEL_ENV, parseLogLevel, PROFILING_SCHEMA_VERSION } from '@hydranium/protocol';
|
|
19
19
|
import * as fs from 'node:fs';
|
|
20
20
|
import * as os from 'node:os';
|
|
21
21
|
import * as path from 'node:path';
|
|
@@ -25,6 +25,14 @@ import { digestAllocationProfile, digestCpuProfile } from './profile-digest.js';
|
|
|
25
25
|
// assembler can share the shape without a Node-only dependency chain;
|
|
26
26
|
// re-export it here so `@hydranium/core/node` consumers keep one import site.
|
|
27
27
|
export { PROFILING_SCHEMA_VERSION };
|
|
28
|
+
function restoreEnv(name, value) {
|
|
29
|
+
if (value === undefined) {
|
|
30
|
+
delete process.env[name];
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
process.env[name] = value;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
28
36
|
/** A cgroup memory controller signals we are inside a container/pod. */
|
|
29
37
|
function detectContainer() {
|
|
30
38
|
return fs.existsSync('/sys/fs/cgroup/memory.current') || fs.existsSync('/sys/fs/cgroup/memory/memory.usage_in_bytes');
|
|
@@ -44,6 +52,8 @@ export class ProfilingRun {
|
|
|
44
52
|
finished = false;
|
|
45
53
|
/** The `HYDRANIUM_LOG_FILE` value seen before this run pointed it at the session (restored on {@link finish}). */
|
|
46
54
|
previousLogFileEnv;
|
|
55
|
+
/** The `HYDRANIUM_LOG_FILE_LEVEL` value seen before this run set it (restored on {@link finish}). */
|
|
56
|
+
previousLogFileLevelEnv;
|
|
47
57
|
/** Absolute path of the session's teed server log. */
|
|
48
58
|
serverLogPath;
|
|
49
59
|
constructor(options, directory, sessionId) {
|
|
@@ -57,10 +67,13 @@ export class ProfilingRun {
|
|
|
57
67
|
// `HYDRANIUM_LOG_FILE` env, which every `@hydranium/core` copy reads when
|
|
58
68
|
// its logger is CONSTRUCTED — so `ProfilingRun.start` must run before the
|
|
59
69
|
// head's services are created (as `measureModelMemory` does). This is the
|
|
60
|
-
// only mechanism that crosses
|
|
70
|
+
// only mechanism that crosses an adopter's separate core copy; a
|
|
61
71
|
// process-local `setLogFilePath` would only reach this module's own copy.
|
|
62
72
|
this.previousLogFileEnv = process.env[DEFAULT_LOG_FILE_ENV];
|
|
63
73
|
process.env[DEFAULT_LOG_FILE_ENV] = this.serverLogPath;
|
|
74
|
+
this.previousLogFileLevelEnv = process.env[DEFAULT_LOG_FILE_LEVEL_ENV];
|
|
75
|
+
process.env[DEFAULT_LOG_FILE_LEVEL_ENV] =
|
|
76
|
+
options.logFileLevel ?? parseLogLevel(this.previousLogFileLevelEnv) ?? parseLogLevel(process.env[DEFAULT_LOG_LEVEL_ENV]) ?? 'info';
|
|
64
77
|
}
|
|
65
78
|
static async start(options = {}) {
|
|
66
79
|
const sessionId = options.sessionId ?? `profiling-${new Date().toISOString().replace(/[:.]/g, '-')}`;
|
|
@@ -124,12 +137,8 @@ export class ProfilingRun {
|
|
|
124
137
|
this.finished = true;
|
|
125
138
|
// Restore the prior log-file env, then record the log as an artefact only
|
|
126
139
|
// if the run actually produced one.
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
}
|
|
130
|
-
else {
|
|
131
|
-
process.env[DEFAULT_LOG_FILE_ENV] = this.previousLogFileEnv;
|
|
132
|
-
}
|
|
140
|
+
restoreEnv(DEFAULT_LOG_FILE_ENV, this.previousLogFileEnv);
|
|
141
|
+
restoreEnv(DEFAULT_LOG_FILE_LEVEL_ENV, this.previousLogFileLevelEnv);
|
|
133
142
|
if (fs.existsSync(this.serverLogPath)) {
|
|
134
143
|
this.artifacts.push({ kind: 'server-log', path: 'server.log' });
|
|
135
144
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"profiling-run.js","sourceRoot":"","sources":["../../src/node/profiling-run.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF;;;;;;;;GAQG;AAEH,OAAO,EACJ,oBAAoB,EACpB,wBAAwB,
|
|
1
|
+
{"version":3,"file":"profiling-run.js","sourceRoot":"","sources":["../../src/node/profiling-run.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/********************************************************************************
|
|
2
|
+
* Copyright (c) 2026 CrossBreeze, EclipseSource and others.
|
|
3
|
+
*
|
|
4
|
+
* This program and the accompanying materials are made available under the
|
|
5
|
+
* terms of the MIT License which is available in the project root.
|
|
6
|
+
*
|
|
7
|
+
* SPDX-License-Identifier: MIT
|
|
8
|
+
********************************************************************************/
|
|
9
|
+
import { type Clock } from '@hydranium/protocol';
|
|
10
|
+
/**
|
|
11
|
+
* Errnos Windows raises when a replacing `rename` meets a handle already on the
|
|
12
|
+
* destination open. POSIX renames are unaffected by open handles, so these
|
|
13
|
+
* cannot fire there and the retry below costs nothing.
|
|
14
|
+
*/
|
|
15
|
+
export declare const RENAME_CONTENTION_CODES: Set<string>;
|
|
16
|
+
/**
|
|
17
|
+
* How long a replacing rename may keep retrying before it gives up.
|
|
18
|
+
*
|
|
19
|
+
* BOUNDED, not open-ended: a genuine permission fault raises the same errno as
|
|
20
|
+
* contention and is distinguishable from it only by never clearing, so an
|
|
21
|
+
* unbounded wait would convert a hard error into a hang.
|
|
22
|
+
*
|
|
23
|
+
* The figure is a judgement, not a measurement, and the honest bound on it is
|
|
24
|
+
* that the previous 2s was observed EXHAUSTED on a loaded Windows CI runner
|
|
25
|
+
* while no upper bound has been established. What would settle it is recording
|
|
26
|
+
* how long a real contended rename takes to clear. graceful-fs tolerates 60s
|
|
27
|
+
* for Windows rename contention, but that is weaker support than it looks: it
|
|
28
|
+
* retries only where the destination has GONE, which is the opposite of
|
|
29
|
+
* replacing one a reader holds open.
|
|
30
|
+
*/
|
|
31
|
+
export declare const RENAME_BUDGET_MS = 10000;
|
|
32
|
+
/**
|
|
33
|
+
* How long a miss is waited out on Windows before it counts as an absence,
|
|
34
|
+
* since a replacing rename there can hide the name from a reader for a while.
|
|
35
|
+
* Bounded: a real deletion differs only by never ending, so it pays the whole
|
|
36
|
+
* budget. The figure is a judgement, not an established bound.
|
|
37
|
+
*/
|
|
38
|
+
export declare const RENAME_GAP_BUDGET_MS = 2000;
|
|
39
|
+
/** Seams for the test, which cannot make a real rename fail on demand. */
|
|
40
|
+
export interface RenameOverOpenReadersOptions {
|
|
41
|
+
readonly rename?: (from: string, to: string) => Promise<void>;
|
|
42
|
+
readonly budgetMs?: number;
|
|
43
|
+
readonly clock?: Clock;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* `rename` the staged content over `destination`, retrying while Windows
|
|
47
|
+
* reports the destination as held open.
|
|
48
|
+
*
|
|
49
|
+
* The staging file exists so a reader never sees a half-written file, and on
|
|
50
|
+
* Windows the very presence of that reader is what makes the replacing rename
|
|
51
|
+
* fail — so the indivisible write breaks under exactly the contention it was
|
|
52
|
+
* built for, and it breaks intermittently, which is worse than never working.
|
|
53
|
+
* A reader's handle is released in milliseconds, so waiting turns a spurious
|
|
54
|
+
* failure into a slightly later success.
|
|
55
|
+
*
|
|
56
|
+
* Exhausting the budget rethrows the last failure, leaving the caller's cleanup
|
|
57
|
+
* and error contract unchanged. An errno OUTSIDE the contention set is rethrown
|
|
58
|
+
* without waiting at all: retrying a fault that will not clear only delays it.
|
|
59
|
+
*/
|
|
60
|
+
export declare function renameOverOpenReaders(staging: string, destination: string, options?: RenameOverOpenReadersOptions): Promise<void>;
|
|
61
|
+
//# sourceMappingURL=rename-over-open-readers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rename-over-open-readers.d.ts","sourceRoot":"","sources":["../../src/node/rename-over-open-readers.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF,OAAO,EAAE,KAAK,KAAK,EAAe,MAAM,qBAAqB,CAAC;AAG9D;;;;GAIG;AACH,eAAO,MAAM,uBAAuB,aAAwC,CAAC;AAE7E;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,gBAAgB,QAAS,CAAC;AAEvC;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,OAAQ,CAAC;AAE1C,0EAA0E;AAC1E,MAAM,WAAW,4BAA4B;IAC1C,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9D,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC;CACzB;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,qBAAqB,CACxC,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,4BAAiC,GAC1C,OAAO,CAAC,IAAI,CAAC,CAuBf"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/********************************************************************************
|
|
2
|
+
* Copyright (c) 2026 CrossBreeze, EclipseSource and others.
|
|
3
|
+
*
|
|
4
|
+
* This program and the accompanying materials are made available under the
|
|
5
|
+
* terms of the MIT License which is available in the project root.
|
|
6
|
+
*
|
|
7
|
+
* SPDX-License-Identifier: MIT
|
|
8
|
+
********************************************************************************/
|
|
9
|
+
import { SystemClock } from '@hydranium/protocol';
|
|
10
|
+
import * as fsp from 'node:fs/promises';
|
|
11
|
+
/**
|
|
12
|
+
* Errnos Windows raises when a replacing `rename` meets a handle already on the
|
|
13
|
+
* destination open. POSIX renames are unaffected by open handles, so these
|
|
14
|
+
* cannot fire there and the retry below costs nothing.
|
|
15
|
+
*/
|
|
16
|
+
export const RENAME_CONTENTION_CODES = new Set(['EPERM', 'EACCES', 'EBUSY']);
|
|
17
|
+
/**
|
|
18
|
+
* How long a replacing rename may keep retrying before it gives up.
|
|
19
|
+
*
|
|
20
|
+
* BOUNDED, not open-ended: a genuine permission fault raises the same errno as
|
|
21
|
+
* contention and is distinguishable from it only by never clearing, so an
|
|
22
|
+
* unbounded wait would convert a hard error into a hang.
|
|
23
|
+
*
|
|
24
|
+
* The figure is a judgement, not a measurement, and the honest bound on it is
|
|
25
|
+
* that the previous 2s was observed EXHAUSTED on a loaded Windows CI runner
|
|
26
|
+
* while no upper bound has been established. What would settle it is recording
|
|
27
|
+
* how long a real contended rename takes to clear. graceful-fs tolerates 60s
|
|
28
|
+
* for Windows rename contention, but that is weaker support than it looks: it
|
|
29
|
+
* retries only where the destination has GONE, which is the opposite of
|
|
30
|
+
* replacing one a reader holds open.
|
|
31
|
+
*/
|
|
32
|
+
export const RENAME_BUDGET_MS = 10_000;
|
|
33
|
+
/**
|
|
34
|
+
* How long a miss is waited out on Windows before it counts as an absence,
|
|
35
|
+
* since a replacing rename there can hide the name from a reader for a while.
|
|
36
|
+
* Bounded: a real deletion differs only by never ending, so it pays the whole
|
|
37
|
+
* budget. The figure is a judgement, not an established bound.
|
|
38
|
+
*/
|
|
39
|
+
export const RENAME_GAP_BUDGET_MS = 2_000;
|
|
40
|
+
/**
|
|
41
|
+
* `rename` the staged content over `destination`, retrying while Windows
|
|
42
|
+
* reports the destination as held open.
|
|
43
|
+
*
|
|
44
|
+
* The staging file exists so a reader never sees a half-written file, and on
|
|
45
|
+
* Windows the very presence of that reader is what makes the replacing rename
|
|
46
|
+
* fail — so the indivisible write breaks under exactly the contention it was
|
|
47
|
+
* built for, and it breaks intermittently, which is worse than never working.
|
|
48
|
+
* A reader's handle is released in milliseconds, so waiting turns a spurious
|
|
49
|
+
* failure into a slightly later success.
|
|
50
|
+
*
|
|
51
|
+
* Exhausting the budget rethrows the last failure, leaving the caller's cleanup
|
|
52
|
+
* and error contract unchanged. An errno OUTSIDE the contention set is rethrown
|
|
53
|
+
* without waiting at all: retrying a fault that will not clear only delays it.
|
|
54
|
+
*/
|
|
55
|
+
export async function renameOverOpenReaders(staging, destination, options = {}) {
|
|
56
|
+
const rename = options.rename ?? fsp.rename;
|
|
57
|
+
const clock = options.clock ?? new SystemClock();
|
|
58
|
+
const budgetMs = options.budgetMs ?? RENAME_BUDGET_MS;
|
|
59
|
+
// A stopwatch, not two `now()` readings: a wall-clock jump would end the
|
|
60
|
+
// budget early or stretch it.
|
|
61
|
+
const waited = clock.stopwatch();
|
|
62
|
+
for (let attempt = 0;; attempt++) {
|
|
63
|
+
try {
|
|
64
|
+
await rename(staging, destination);
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
catch (err) {
|
|
68
|
+
const code = err instanceof Error && 'code' in err ? String(err.code) : undefined;
|
|
69
|
+
if (code === undefined || !RENAME_CONTENTION_CODES.has(code) || waited.elapsedMs >= budgetMs) {
|
|
70
|
+
throw err;
|
|
71
|
+
}
|
|
72
|
+
// Backs off to keep a long contention window from spinning, capped so
|
|
73
|
+
// a late attempt still lands promptly once the handle is released.
|
|
74
|
+
// Not `clock.setTimer`: it unrefs its timer, so a process with only
|
|
75
|
+
// this write pending could exit mid-backoff.
|
|
76
|
+
await new Promise(resolve => setTimeout(resolve, Math.min(2 ** attempt, 50)));
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=rename-over-open-readers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rename-over-open-readers.js","sourceRoot":"","sources":["../../src/node/rename-over-open-readers.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF,OAAO,EAAc,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,KAAK,GAAG,MAAM,kBAAkB,CAAC;AAExC;;;;GAIG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,IAAI,GAAG,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;AAE7E;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,MAAM,CAAC;AAEvC;;;;;GAKG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,KAAK,CAAC;AAS1C;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACxC,OAAe,EACf,WAAmB,EACnB,OAAO,GAAiC,EAAE;IAE1C,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC;IAC5C,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,IAAI,WAAW,EAAE,CAAC;IACjD,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,gBAAgB,CAAC;IACtD,yEAAyE;IACzE,8BAA8B;IAC9B,MAAM,MAAM,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC;IACjC,KAAK,IAAI,OAAO,GAAG,CAAC,GAAI,OAAO,EAAE,EAAE,CAAC;QACjC,IAAI,CAAC;YACF,MAAM,MAAM,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;YACnC,OAAO;QACV,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACrB,MAAM,IAAI,GAAG,GAAG,YAAY,KAAK,IAAI,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,MAAM,CAAE,GAA6B,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YAC7G,IAAI,IAAI,KAAK,SAAS,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,SAAS,IAAI,QAAQ,EAAE,CAAC;gBAC5F,MAAM,GAAG,CAAC;YACb,CAAC;YACD,sEAAsE;YACtE,mEAAmE;YACnE,oEAAoE;YACpE,6CAA6C;YAC7C,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;QACjF,CAAC;IACJ,CAAC;AACJ,CAAC"}
|
|
@@ -31,7 +31,7 @@ export function startServerDiagnostics(shared, options) {
|
|
|
31
31
|
productName,
|
|
32
32
|
version,
|
|
33
33
|
phaseDetailThresholdMs,
|
|
34
|
-
...nodeLogPreambleSections(phaseDetailThresholdMs)
|
|
34
|
+
...nodeLogPreambleSections(phaseDetailThresholdMs, options)
|
|
35
35
|
});
|
|
36
36
|
if (options.logInitialMemory ?? true) {
|
|
37
37
|
shared.Tracer.for('Process').memory('Initial Memory');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server-diagnostics.js","sourceRoot":"","sources":["../../src/node/server-diagnostics.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF,OAAO,EAA2B,WAAW,EAAE,MAAM,wCAAwC,CAAC;AAE9F,OAAO,EAAgC,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAC9F,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAA6B,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAiBpF;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,sBAAsB,CAAC,MAAmC,EAAE,OAAiC;IAC1G,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,sBAAsB,EAAE,GAAG,OAAO,CAAC,QAAQ,CAAC;IAC1E,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE;QACzC,WAAW;QACX,OAAO;QACP,sBAAsB;QACtB,GAAG,uBAAuB,CAAC,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"server-diagnostics.js","sourceRoot":"","sources":["../../src/node/server-diagnostics.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF,OAAO,EAA2B,WAAW,EAAE,MAAM,wCAAwC,CAAC;AAE9F,OAAO,EAAgC,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAC9F,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAA6B,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAiBpF;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,sBAAsB,CAAC,MAAmC,EAAE,OAAiC;IAC1G,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,sBAAsB,EAAE,GAAG,OAAO,CAAC,QAAQ,CAAC;IAC1E,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE;QACzC,WAAW;QACX,OAAO;QACP,sBAAsB;QACtB,GAAG,uBAAuB,CAAC,sBAAsB,EAAE,OAAO,CAAC;KAC7D,CAAC,CAAC;IACH,IAAI,OAAO,CAAC,gBAAgB,IAAI,IAAI,EAAE,CAAC;QACpC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;IACzD,CAAC;IACD,MAAM,aAAa,GAAG,qBAAqB,CAAC,MAAM,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;IACvE,MAAM,UAAU,GAAG,kBAAkB,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IAC9D,OAAO,GAAG,EAAE;QACT,aAAa,EAAE,CAAC;QAChB,UAAU,EAAE,CAAC;IAChB,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
*
|
|
7
7
|
* SPDX-License-Identifier: MIT
|
|
8
8
|
********************************************************************************/
|
|
9
|
-
import { Format } from '@hydranium/protocol';
|
|
9
|
+
import { Format, SystemClock } from '@hydranium/protocol';
|
|
10
10
|
import { DocumentState } from '@hydranium/langium';
|
|
11
11
|
import { isCstShed } from '../langium/residency/cst-residency-service.js';
|
|
12
12
|
import { performance } from 'node:perf_hooks';
|
|
@@ -23,7 +23,7 @@ export const DEFAULT_OPEN_DOCUMENTS_LIST_CAP = 25;
|
|
|
23
23
|
* requested via `options` ({@link ServerStateSnapshotOptions}).
|
|
24
24
|
*/
|
|
25
25
|
export function formatServerState(documents, label, options) {
|
|
26
|
-
const
|
|
26
|
+
const sinceSample = new SystemClock().stopwatch();
|
|
27
27
|
const mem = process.memoryUsage();
|
|
28
28
|
const heap = v8.getHeapStatistics();
|
|
29
29
|
const cpu = process.cpuUsage();
|
|
@@ -41,7 +41,7 @@ export function formatServerState(documents, label, options) {
|
|
|
41
41
|
lines.push(` v8 malloced ${Format.bytes(heap.malloced_memory)}, peak ${Format.bytes(heap.peak_malloced_memory)}, ` +
|
|
42
42
|
`native contexts ${heap.number_of_native_contexts}, detached contexts ${heap.number_of_detached_contexts}`);
|
|
43
43
|
if (lastSample) {
|
|
44
|
-
const wallMs =
|
|
44
|
+
const wallMs = lastSample.sinceSample.elapsedMs;
|
|
45
45
|
const userMs = (cpu.user - lastSample.cpu.user) / 1000;
|
|
46
46
|
const systemMs = (cpu.system - lastSample.cpu.system) / 1000;
|
|
47
47
|
const cpuPct = wallMs > 0 ? Math.round(((userMs + systemMs) / wallMs) * 100) : 0;
|
|
@@ -86,7 +86,7 @@ export function formatServerState(documents, label, options) {
|
|
|
86
86
|
lines.push(` … and ${openDocuments.length - listCap} more`);
|
|
87
87
|
}
|
|
88
88
|
}
|
|
89
|
-
lastSample = {
|
|
89
|
+
lastSample = { sinceSample, cpu, elu };
|
|
90
90
|
return lines.join('\n');
|
|
91
91
|
}
|
|
92
92
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server-state-snapshot.js","sourceRoot":"","sources":["../../src/node/server-state-snapshot.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"server-state-snapshot.js","sourceRoot":"","sources":["../../src/node/server-state-snapshot.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,13 +6,27 @@
|
|
|
6
6
|
*
|
|
7
7
|
* SPDX-License-Identifier: MIT
|
|
8
8
|
********************************************************************************/
|
|
9
|
-
import type
|
|
9
|
+
import { type Disposable, type Logger } from '@hydranium/protocol';
|
|
10
10
|
import type { MessageConnection } from 'vscode-jsonrpc';
|
|
11
11
|
import type { IntegratedServer } from '../launcher/integrated-server.js';
|
|
12
|
+
import type { ServerSharedServicesMinimal } from '../langium/shared-services.js';
|
|
13
|
+
import { type WorkspaceFolderInput } from '../langium/workspace/initialize-workspace.js';
|
|
12
14
|
/**
|
|
13
15
|
* Construction-time options for {@link startSocketServer}.
|
|
14
16
|
*/
|
|
15
17
|
export interface SocketServerOptions {
|
|
18
|
+
/**
|
|
19
|
+
* Shared services tree the head serves from. Without an LSP head the
|
|
20
|
+
* launcher brings its workspace up before listening, so a client never
|
|
21
|
+
* reaches a workspace that is not up.
|
|
22
|
+
*/
|
|
23
|
+
readonly shared: ServerSharedServicesMinimal;
|
|
24
|
+
/**
|
|
25
|
+
* Workspace root(s) to initialize — a filesystem path or a `URI`. Required
|
|
26
|
+
* when no LSP head is composed, refused beside one: see
|
|
27
|
+
* {@link initializeWorkspaceWithoutLsp}.
|
|
28
|
+
*/
|
|
29
|
+
readonly workspace?: WorkspaceFolderInput | ReadonlyArray<WorkspaceFolderInput>;
|
|
16
30
|
/**
|
|
17
31
|
* Port to bind. Default `0` — OS-assigned ephemeral. Resolve the
|
|
18
32
|
* actual port off {@link StartedSocketServer.port} once `started`
|
|
@@ -20,9 +34,25 @@ export interface SocketServerOptions {
|
|
|
20
34
|
*/
|
|
21
35
|
readonly port?: number;
|
|
22
36
|
/**
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
37
|
+
* Interface to bind. Default `'127.0.0.1'` (LOCAL ONLY) — a head whose
|
|
38
|
+
* port is OS-assigned and announced over the LSP connection is
|
|
39
|
+
* reachable only by a client on the same machine anyway, so a wider
|
|
40
|
+
* binding exposes a port nothing off-box can address. Matches
|
|
41
|
+
* `startGlspServer`'s default, so the two socket heads agree.
|
|
42
|
+
*
|
|
43
|
+
* Pass `'::'` for every interface: that is the dual-stack any-address,
|
|
44
|
+
* so both IPv4 and IPv6 clients connect. `'0.0.0.0'` is NOT the same —
|
|
45
|
+
* it takes IPv4 only and refuses `::1`.
|
|
46
|
+
*
|
|
47
|
+
* An address no local interface holds fails the bind, so `started`
|
|
48
|
+
* rejects with `EADDRNOTAVAIL` rather than falling back to a wider one.
|
|
49
|
+
*/
|
|
50
|
+
readonly host?: string;
|
|
51
|
+
/**
|
|
52
|
+
* Optional logger for lifecycle lines and each connection's protocol
|
|
53
|
+
* faults. If omitted, the launcher runs silently — the adopter is expected
|
|
54
|
+
* to surface lifecycle events through their own logging in
|
|
55
|
+
* {@link OnClientConnection} if needed.
|
|
26
56
|
*/
|
|
27
57
|
readonly logger?: Logger;
|
|
28
58
|
/** Tag included in lifecycle log lines. Default `"SocketServer"`. */
|
|
@@ -49,10 +79,12 @@ export type OnClientConnection = (connection: MessageConnection) => Disposable;
|
|
|
49
79
|
/**
|
|
50
80
|
* Live socket server handle returned by {@link startSocketServer}.
|
|
51
81
|
*
|
|
52
|
-
* - {@link IntegratedServer.started} resolves once
|
|
53
|
-
* AND `port` is
|
|
82
|
+
* - {@link IntegratedServer.started} resolves once the workspace is up,
|
|
83
|
+
* where the launcher brings it up, AND `listen` resolves AND `port` is
|
|
84
|
+
* populated. It rejects, and nothing listens, when the bring-up fails.
|
|
54
85
|
* - {@link IntegratedServer.stopped} resolves when the underlying
|
|
55
|
-
* `net.Server` emits `close
|
|
86
|
+
* `net.Server` emits `close`, or once a failed bring-up has rejected
|
|
87
|
+
* `started`.
|
|
56
88
|
* - {@link port} is undefined until `started` resolves.
|
|
57
89
|
* - {@link close} triggers shutdown: disposes all active client
|
|
58
90
|
* connections and closes the underlying `net.Server`.
|
|
@@ -74,6 +106,10 @@ export interface StartedSocketServer extends IntegratedServer {
|
|
|
74
106
|
* close / server shutdown. Adopters keep per-client instance creation
|
|
75
107
|
* (their server objects) but don't re-implement the tracking machinery.
|
|
76
108
|
*
|
|
109
|
+
* **Without an LSP head the launcher brings the workspace up, then
|
|
110
|
+
* listens**, as `startStdioServer` does: a request served before the
|
|
111
|
+
* bring-up starts keeps its cross-file references unresolved for good.
|
|
112
|
+
*
|
|
77
113
|
* The port is only known once {@link StartedSocketServer.started} has
|
|
78
114
|
* resolved, so announcing it — via {@link publishPortOnLspConnection} —
|
|
79
115
|
* belongs after that await, not beside the call.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"socket-launcher.d.ts","sourceRoot":"","sources":["../../src/node/socket-launcher.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;
|
|
1
|
+
{"version":3,"file":"socket-launcher.d.ts","sourceRoot":"","sources":["../../src/node/socket-launcher.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAGlF,OAAO,EAAmD,KAAK,UAAU,EAAE,KAAK,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAEpH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACzE,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AACjF,OAAO,EAAiC,KAAK,oBAAoB,EAAE,MAAM,8CAA8C,CAAC;AAExH;;GAEG;AACH,MAAM,WAAW,mBAAmB;IACjC;;;;OAIG;IACH,QAAQ,CAAC,MAAM,EAAE,2BAA2B,CAAC;IAC7C;;;;OAIG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,oBAAoB,GAAG,aAAa,CAAC,oBAAoB,CAAC,CAAC;IAChF;;;;OAIG;IACH,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB;;;;;;;;;;;;;OAaG;IACH,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB;;;;;OAKG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,qEAAqE;IACrE,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,MAAM,kBAAkB,GAAG,CAAC,UAAU,EAAE,iBAAiB,KAAK,UAAU,CAAC;AAE/E;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,mBAAoB,SAAQ,gBAAgB;IAC1D,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,KAAK,IAAI,IAAI,CAAC;CAChB;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,kBAAkB,GAAG,mBAAmB,CAuH3H;AAED;;;;;GAKG;AACH,MAAM,WAAW,iBAAiB;IAC/B,SAAS,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,MAAM,EAAE,OAAO,EAAE,KAAK,OAAO,GAAG,UAAU,CAAC;CACtG;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,0BAA0B,CAAC,aAAa,EAAE,iBAAiB,GAAG,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,UAAU,CAKlI"}
|
|
@@ -6,9 +6,10 @@
|
|
|
6
6
|
*
|
|
7
7
|
* SPDX-License-Identifier: MIT
|
|
8
8
|
********************************************************************************/
|
|
9
|
-
import { Deferred } from '@hydranium/langium';
|
|
10
9
|
import * as net from 'node:net';
|
|
10
|
+
import { Deferred, describeError, describeErrorWithStack } from '@hydranium/protocol';
|
|
11
11
|
import { createMessageConnection, SocketMessageReader, SocketMessageWriter } from 'vscode-jsonrpc/node';
|
|
12
|
+
import { initializeWorkspaceWithoutLsp } from '../langium/workspace/initialize-workspace.js';
|
|
12
13
|
/**
|
|
13
14
|
* Start a socket-based protocol head. Wraps `net.createServer` with the
|
|
14
15
|
* boilerplate adopters used to write per-head: address resolution,
|
|
@@ -22,12 +23,17 @@ import { createMessageConnection, SocketMessageReader, SocketMessageWriter } fro
|
|
|
22
23
|
* close / server shutdown. Adopters keep per-client instance creation
|
|
23
24
|
* (their server objects) but don't re-implement the tracking machinery.
|
|
24
25
|
*
|
|
26
|
+
* **Without an LSP head the launcher brings the workspace up, then
|
|
27
|
+
* listens**, as `startStdioServer` does: a request served before the
|
|
28
|
+
* bring-up starts keeps its cross-file references unresolved for good.
|
|
29
|
+
*
|
|
25
30
|
* The port is only known once {@link StartedSocketServer.started} has
|
|
26
31
|
* resolved, so announcing it — via {@link publishPortOnLspConnection} —
|
|
27
32
|
* belongs after that await, not beside the call.
|
|
28
33
|
*/
|
|
29
34
|
export function startSocketServer(options, onClientConnection) {
|
|
30
35
|
const port = options.port ?? 0;
|
|
36
|
+
const host = options.host ?? '127.0.0.1';
|
|
31
37
|
const logger = options.logger;
|
|
32
38
|
const tag = options.logTag ?? 'SocketServer';
|
|
33
39
|
const started = new Deferred();
|
|
@@ -38,7 +44,7 @@ export function startSocketServer(options, onClientConnection) {
|
|
|
38
44
|
// (so shutdown drains both at once).
|
|
39
45
|
const activeConnections = [];
|
|
40
46
|
const netServer = net.createServer(socket => {
|
|
41
|
-
const connection = createMessageConnection(new SocketMessageReader(socket), new SocketMessageWriter(socket));
|
|
47
|
+
const connection = createMessageConnection(new SocketMessageReader(socket), new SocketMessageWriter(socket), logger?.with(tag));
|
|
42
48
|
const adopterDisposable = onClientConnection(connection);
|
|
43
49
|
const entry = { connection, adopterDisposable };
|
|
44
50
|
activeConnections.push(entry);
|
|
@@ -54,7 +60,7 @@ export function startSocketServer(options, onClientConnection) {
|
|
|
54
60
|
adopterDisposable.dispose();
|
|
55
61
|
}
|
|
56
62
|
catch (err) {
|
|
57
|
-
logger?.warn(`[${tag}] Adopter disposable threw on cleanup: ${err
|
|
63
|
+
logger?.warn(`[${tag}] Adopter disposable threw on cleanup: ${describeErrorWithStack(err)}`);
|
|
58
64
|
}
|
|
59
65
|
connection.dispose();
|
|
60
66
|
const idx = activeConnections.indexOf(entry);
|
|
@@ -66,7 +72,35 @@ export function startSocketServer(options, onClientConnection) {
|
|
|
66
72
|
connection.onClose(() => dispose());
|
|
67
73
|
connection.listen();
|
|
68
74
|
});
|
|
69
|
-
|
|
75
|
+
// The workspace manager logs a failed initialization itself; a refused
|
|
76
|
+
// `workspace` throws before `initializing` is set.
|
|
77
|
+
let initializing = false;
|
|
78
|
+
let closed = false;
|
|
79
|
+
const begin = async () => {
|
|
80
|
+
const initialization = initializeWorkspaceWithoutLsp(options.shared, options.workspace);
|
|
81
|
+
initializing = true;
|
|
82
|
+
await initialization;
|
|
83
|
+
initializing = false;
|
|
84
|
+
// A `close` during the bring-up has resolved `stopped` already.
|
|
85
|
+
if (closed) {
|
|
86
|
+
started.reject(new Error(`${tag} was closed before it listened`));
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
netServer.listen(port, host);
|
|
90
|
+
};
|
|
91
|
+
begin().catch((err) => {
|
|
92
|
+
if (initializing) {
|
|
93
|
+
logger?.debug(`[${tag}] Startup failed: the workspace did not initialize. ${describeError(err)}`);
|
|
94
|
+
}
|
|
95
|
+
else {
|
|
96
|
+
logger?.error(`[${tag}] Startup failed: ${describeErrorWithStack(err)}`);
|
|
97
|
+
}
|
|
98
|
+
started.reject(err);
|
|
99
|
+
stopped.resolve();
|
|
100
|
+
});
|
|
101
|
+
// `started` is always observed internally, as `startStdioServer`'s is, so a
|
|
102
|
+
// caller that closes early and ignores it cannot crash the process.
|
|
103
|
+
void started.promise.catch(() => undefined);
|
|
70
104
|
netServer.on('listening', () => {
|
|
71
105
|
const addressInfo = netServer.address();
|
|
72
106
|
if (!addressInfo) {
|
|
@@ -82,11 +116,11 @@ export function startSocketServer(options, onClientConnection) {
|
|
|
82
116
|
return;
|
|
83
117
|
}
|
|
84
118
|
handle.port = addressInfo.port;
|
|
85
|
-
logger?.info(`[${tag}] Ready to accept new client requests on port: ${addressInfo.port}`);
|
|
119
|
+
logger?.info(`[${tag}] Ready to accept new client requests on ${addressInfo.address} port: ${addressInfo.port}`);
|
|
86
120
|
started.resolve();
|
|
87
121
|
});
|
|
88
122
|
netServer.on('error', err => {
|
|
89
|
-
logger?.error(`[${tag}] Error: ${err
|
|
123
|
+
logger?.error(`[${tag}] Error: ${describeErrorWithStack(err)}`);
|
|
90
124
|
started.reject(err);
|
|
91
125
|
});
|
|
92
126
|
netServer.on('close', () => {
|
|
@@ -97,7 +131,7 @@ export function startSocketServer(options, onClientConnection) {
|
|
|
97
131
|
entry.adopterDisposable.dispose();
|
|
98
132
|
}
|
|
99
133
|
catch (err) {
|
|
100
|
-
logger?.warn(`[${tag}] Adopter disposable threw on shutdown: ${err
|
|
134
|
+
logger?.warn(`[${tag}] Adopter disposable threw on shutdown: ${describeErrorWithStack(err)}`);
|
|
101
135
|
}
|
|
102
136
|
entry.connection.dispose();
|
|
103
137
|
}
|
|
@@ -111,6 +145,7 @@ export function startSocketServer(options, onClientConnection) {
|
|
|
111
145
|
started: started.promise,
|
|
112
146
|
stopped: stopped.promise,
|
|
113
147
|
close() {
|
|
148
|
+
closed = true;
|
|
114
149
|
netServer.close();
|
|
115
150
|
}
|
|
116
151
|
};
|