@hydranium/core 1.0.0-next.37 → 1.0.0-next.370

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.
Files changed (787) hide show
  1. package/README.md +78 -82
  2. package/lib/browser/host-heads-in-worker.d.ts +77 -0
  3. package/lib/browser/host-heads-in-worker.d.ts.map +1 -0
  4. package/lib/browser/host-heads-in-worker.js +169 -0
  5. package/lib/browser/host-heads-in-worker.js.map +1 -0
  6. package/lib/browser/index.d.ts +12 -0
  7. package/lib/browser/index.d.ts.map +1 -0
  8. package/lib/browser/index.js +17 -0
  9. package/lib/browser/index.js.map +1 -0
  10. package/lib/browser/indexeddb-file-system-store.d.ts +82 -0
  11. package/lib/browser/indexeddb-file-system-store.d.ts.map +1 -0
  12. package/lib/browser/indexeddb-file-system-store.js +181 -0
  13. package/lib/browser/indexeddb-file-system-store.js.map +1 -0
  14. package/lib/browser/start-language-server-in-worker.d.ts +32 -0
  15. package/lib/browser/start-language-server-in-worker.d.ts.map +1 -0
  16. package/lib/browser/start-language-server-in-worker.js +40 -0
  17. package/lib/browser/start-language-server-in-worker.js.map +1 -0
  18. package/lib/documents/ast-document-manager.d.ts +254 -140
  19. package/lib/documents/ast-document-manager.d.ts.map +1 -1
  20. package/lib/documents/ast-document-manager.js +311 -127
  21. package/lib/documents/ast-document-manager.js.map +1 -1
  22. package/lib/documents/client-ids.d.ts +5 -19
  23. package/lib/documents/client-ids.d.ts.map +1 -1
  24. package/lib/documents/client-ids.js +5 -19
  25. package/lib/documents/client-ids.js.map +1 -1
  26. package/lib/documents/client-session-errors.d.ts +15 -0
  27. package/lib/documents/client-session-errors.d.ts.map +1 -0
  28. package/lib/documents/client-session-errors.js +15 -0
  29. package/lib/documents/client-session-errors.js.map +1 -0
  30. package/lib/documents/client-session-registry.d.ts +146 -0
  31. package/lib/documents/client-session-registry.d.ts.map +1 -0
  32. package/lib/documents/client-session-registry.js +207 -0
  33. package/lib/documents/client-session-registry.js.map +1 -0
  34. package/lib/documents/dirty-state-tracker.d.ts +101 -0
  35. package/lib/documents/dirty-state-tracker.d.ts.map +1 -0
  36. package/lib/documents/dirty-state-tracker.js +85 -0
  37. package/lib/documents/dirty-state-tracker.js.map +1 -0
  38. package/lib/documents/document-release-handler.d.ts +204 -0
  39. package/lib/documents/document-release-handler.d.ts.map +1 -0
  40. package/lib/documents/document-release-handler.js +317 -0
  41. package/lib/documents/document-release-handler.js.map +1 -0
  42. package/lib/documents/document-release-scheduler.d.ts +67 -0
  43. package/lib/documents/document-release-scheduler.d.ts.map +1 -0
  44. package/lib/documents/document-release-scheduler.js +80 -0
  45. package/lib/documents/document-release-scheduler.js.map +1 -0
  46. package/lib/documents/file-system-task-queue.d.ts +52 -0
  47. package/lib/documents/file-system-task-queue.d.ts.map +1 -0
  48. package/lib/documents/file-system-task-queue.js +37 -0
  49. package/lib/documents/file-system-task-queue.js.map +1 -0
  50. package/lib/documents/hydranium-text-documents.d.ts +445 -282
  51. package/lib/documents/hydranium-text-documents.d.ts.map +1 -1
  52. package/lib/documents/hydranium-text-documents.js +903 -483
  53. package/lib/documents/hydranium-text-documents.js.map +1 -1
  54. package/lib/documents/index.d.ts +10 -2
  55. package/lib/documents/index.d.ts.map +1 -1
  56. package/lib/documents/index.js +10 -2
  57. package/lib/documents/index.js.map +1 -1
  58. package/lib/documents/language-client-shadow.d.ts +234 -0
  59. package/lib/documents/language-client-shadow.d.ts.map +1 -0
  60. package/lib/documents/language-client-shadow.js +306 -0
  61. package/lib/documents/language-client-shadow.js.map +1 -0
  62. package/lib/documents/model-ledger.d.ts +47 -0
  63. package/lib/documents/model-ledger.d.ts.map +1 -0
  64. package/lib/documents/model-ledger.js +30 -0
  65. package/lib/documents/model-ledger.js.map +1 -0
  66. package/lib/documents/text-ledger.d.ts +64 -0
  67. package/lib/documents/text-ledger.d.ts.map +1 -0
  68. package/lib/documents/text-ledger.js +63 -0
  69. package/lib/documents/text-ledger.js.map +1 -0
  70. package/lib/documents/version-sync-service.d.ts +138 -0
  71. package/lib/documents/version-sync-service.d.ts.map +1 -0
  72. package/lib/documents/version-sync-service.js +173 -0
  73. package/lib/documents/version-sync-service.js.map +1 -0
  74. package/lib/index.d.ts +3 -0
  75. package/lib/index.d.ts.map +1 -1
  76. package/lib/index.js +3 -0
  77. package/lib/index.js.map +1 -1
  78. package/lib/langium/ast-extension/ast-extension-service.d.ts +42 -31
  79. package/lib/langium/ast-extension/ast-extension-service.d.ts.map +1 -1
  80. package/lib/langium/ast-extension/ast-extension-service.js +45 -19
  81. package/lib/langium/ast-extension/ast-extension-service.js.map +1 -1
  82. package/lib/langium/ast-extension/ast-node-builder.d.ts +12 -7
  83. package/lib/langium/ast-extension/ast-node-builder.d.ts.map +1 -1
  84. package/lib/langium/ast-extension/ast-node-builder.js +25 -9
  85. package/lib/langium/ast-extension/ast-node-builder.js.map +1 -1
  86. package/lib/langium/bootstrap.d.ts +49 -36
  87. package/lib/langium/bootstrap.d.ts.map +1 -1
  88. package/lib/langium/bootstrap.js +75 -36
  89. package/lib/langium/bootstrap.js.map +1 -1
  90. package/lib/langium/build-phase-pass/build-phase-pass-service.d.ts +9 -9
  91. package/lib/langium/build-phase-pass/build-phase-pass-service.d.ts.map +1 -1
  92. package/lib/langium/build-phase-pass/build-phase-pass-service.js +25 -16
  93. package/lib/langium/build-phase-pass/build-phase-pass-service.js.map +1 -1
  94. package/lib/langium/build-phase-pass/build-phase-pass.d.ts +20 -8
  95. package/lib/langium/build-phase-pass/build-phase-pass.d.ts.map +1 -1
  96. package/lib/langium/build-phase-pass/build-phase-pass.js +20 -0
  97. package/lib/langium/build-phase-pass/build-phase-pass.js.map +1 -1
  98. package/lib/langium/composite-ast-reflection.d.ts +46 -0
  99. package/lib/langium/composite-ast-reflection.d.ts.map +1 -0
  100. package/lib/langium/composite-ast-reflection.js +97 -0
  101. package/lib/langium/composite-ast-reflection.js.map +1 -0
  102. package/lib/langium/config/configuration-provider.d.ts +81 -0
  103. package/lib/langium/config/configuration-provider.d.ts.map +1 -0
  104. package/lib/langium/config/configuration-provider.js +112 -0
  105. package/lib/langium/config/configuration-provider.js.map +1 -0
  106. package/lib/langium/config/index.d.ts +1 -0
  107. package/lib/langium/config/index.d.ts.map +1 -1
  108. package/lib/langium/config/index.js +1 -0
  109. package/lib/langium/config/index.js.map +1 -1
  110. package/lib/langium/config/settings.js.map +1 -1
  111. package/lib/langium/diagnostics/console-tee.d.ts +27 -0
  112. package/lib/langium/diagnostics/console-tee.d.ts.map +1 -0
  113. package/lib/langium/diagnostics/console-tee.js +141 -0
  114. package/lib/langium/diagnostics/console-tee.js.map +1 -0
  115. package/lib/langium/diagnostics/hydranium-langium-profiler.d.ts +9 -20
  116. package/lib/langium/diagnostics/hydranium-langium-profiler.d.ts.map +1 -1
  117. package/lib/langium/diagnostics/hydranium-langium-profiler.js +15 -24
  118. package/lib/langium/diagnostics/hydranium-langium-profiler.js.map +1 -1
  119. package/lib/langium/diagnostics/log-preamble.js +1 -1
  120. package/lib/langium/diagnostics/log-preamble.js.map +1 -1
  121. package/lib/langium/diagnostics/logger.d.ts +25 -6
  122. package/lib/langium/diagnostics/logger.d.ts.map +1 -1
  123. package/lib/langium/diagnostics/logger.js +49 -17
  124. package/lib/langium/diagnostics/logger.js.map +1 -1
  125. package/lib/langium/diagnostics/lsp-logger.d.ts +25 -0
  126. package/lib/langium/diagnostics/lsp-logger.d.ts.map +1 -1
  127. package/lib/langium/diagnostics/lsp-logger.js +81 -46
  128. package/lib/langium/diagnostics/lsp-logger.js.map +1 -1
  129. package/lib/langium/diagnostics/server-tracer.d.ts.map +1 -1
  130. package/lib/langium/diagnostics/server-tracer.js.map +1 -1
  131. package/lib/langium/document-builder/build-pipeline-integration.d.ts +21 -1
  132. package/lib/langium/document-builder/build-pipeline-integration.d.ts.map +1 -1
  133. package/lib/langium/document-builder/build-pipeline-integration.js +43 -30
  134. package/lib/langium/document-builder/build-pipeline-integration.js.map +1 -1
  135. package/lib/langium/document-builder/build-session.d.ts +6 -5
  136. package/lib/langium/document-builder/build-session.d.ts.map +1 -1
  137. package/lib/langium/document-builder/build-session.js +5 -5
  138. package/lib/langium/document-builder/build-session.js.map +1 -1
  139. package/lib/langium/document-builder/document-builder.d.ts +308 -39
  140. package/lib/langium/document-builder/document-builder.d.ts.map +1 -1
  141. package/lib/langium/document-builder/document-builder.js +490 -79
  142. package/lib/langium/document-builder/document-builder.js.map +1 -1
  143. package/lib/langium/documentation/comment-provider.d.ts.map +1 -1
  144. package/lib/langium/documentation/comment-provider.js.map +1 -1
  145. package/lib/langium/integration-services.d.ts +39 -23
  146. package/lib/langium/integration-services.d.ts.map +1 -1
  147. package/lib/langium/integration-services.js +7 -4
  148. package/lib/langium/integration-services.js.map +1 -1
  149. package/lib/langium/integrity/integrity-rule.d.ts +17 -8
  150. package/lib/langium/integrity/integrity-rule.d.ts.map +1 -1
  151. package/lib/langium/integrity/integrity-rule.js.map +1 -1
  152. package/lib/langium/integrity/integrity-service.d.ts +95 -27
  153. package/lib/langium/integrity/integrity-service.d.ts.map +1 -1
  154. package/lib/langium/integrity/integrity-service.js +303 -63
  155. package/lib/langium/integrity/integrity-service.js.map +1 -1
  156. package/lib/langium/keys/containment.d.ts +3 -2
  157. package/lib/langium/keys/containment.d.ts.map +1 -1
  158. package/lib/langium/keys/containment.js.map +1 -1
  159. package/lib/langium/keys/name-based-key-provider.d.ts +17 -10
  160. package/lib/langium/keys/name-based-key-provider.d.ts.map +1 -1
  161. package/lib/langium/keys/name-based-key-provider.js +24 -12
  162. package/lib/langium/keys/name-based-key-provider.js.map +1 -1
  163. package/lib/langium/keys/positional-key-provider.d.ts.map +1 -1
  164. package/lib/langium/keys/positional-key-provider.js.map +1 -1
  165. package/lib/langium/labeling/label-provider.d.ts.map +1 -1
  166. package/lib/langium/labeling/label-provider.js.map +1 -1
  167. package/lib/langium/language-module.d.ts +30 -5
  168. package/lib/langium/language-module.d.ts.map +1 -1
  169. package/lib/langium/language-module.js +21 -5
  170. package/lib/langium/language-module.js.map +1 -1
  171. package/lib/langium/model-service/client-session.d.ts +383 -0
  172. package/lib/langium/model-service/client-session.d.ts.map +1 -0
  173. package/lib/langium/model-service/client-session.js +455 -0
  174. package/lib/langium/model-service/client-session.js.map +1 -0
  175. package/lib/langium/model-service/index.d.ts +2 -0
  176. package/lib/langium/model-service/index.d.ts.map +1 -1
  177. package/lib/langium/model-service/index.js +2 -0
  178. package/lib/langium/model-service/index.js.map +1 -1
  179. package/lib/langium/model-service/model-events.d.ts +68 -0
  180. package/lib/langium/model-service/model-events.d.ts.map +1 -0
  181. package/lib/langium/model-service/model-events.js +10 -0
  182. package/lib/langium/model-service/model-events.js.map +1 -0
  183. package/lib/langium/model-service/model-service.d.ts +440 -323
  184. package/lib/langium/model-service/model-service.d.ts.map +1 -1
  185. package/lib/langium/model-service/model-service.js +601 -397
  186. package/lib/langium/model-service/model-service.js.map +1 -1
  187. package/lib/langium/module.d.ts +89 -30
  188. package/lib/langium/module.d.ts.map +1 -1
  189. package/lib/langium/module.js +39 -27
  190. package/lib/langium/module.js.map +1 -1
  191. package/lib/langium/naming/name-provider.d.ts +32 -7
  192. package/lib/langium/naming/name-provider.d.ts.map +1 -1
  193. package/lib/langium/naming/name-provider.js +10 -4
  194. package/lib/langium/naming/name-provider.js.map +1 -1
  195. package/lib/langium/naming/name-separator-validation.d.ts.map +1 -1
  196. package/lib/langium/project/abstract-project-manager.d.ts.map +1 -1
  197. package/lib/langium/project/abstract-project-manager.js +13 -6
  198. package/lib/langium/project/abstract-project-manager.js.map +1 -1
  199. package/lib/langium/project/project-change-event.d.ts +2 -2
  200. package/lib/langium/project/single-project-manager.d.ts.map +1 -1
  201. package/lib/langium/project/single-project-manager.js.map +1 -1
  202. package/lib/langium/residency/cst-residency-service.d.ts +15 -11
  203. package/lib/langium/residency/cst-residency-service.d.ts.map +1 -1
  204. package/lib/langium/residency/cst-residency-service.js +15 -3
  205. package/lib/langium/residency/cst-residency-service.js.map +1 -1
  206. package/lib/langium/scope/ast-node-description-provider.d.ts +46 -10
  207. package/lib/langium/scope/ast-node-description-provider.d.ts.map +1 -1
  208. package/lib/langium/scope/ast-node-description-provider.js +88 -15
  209. package/lib/langium/scope/ast-node-description-provider.js.map +1 -1
  210. package/lib/langium/scope/built-local-symbols.d.ts +12 -0
  211. package/lib/langium/scope/built-local-symbols.d.ts.map +1 -0
  212. package/lib/langium/scope/built-local-symbols.js +11 -0
  213. package/lib/langium/scope/built-local-symbols.js.map +1 -0
  214. package/lib/langium/scope/fallback-scope.d.ts +27 -0
  215. package/lib/langium/scope/fallback-scope.d.ts.map +1 -0
  216. package/lib/langium/scope/fallback-scope.js +35 -0
  217. package/lib/langium/scope/fallback-scope.js.map +1 -0
  218. package/lib/langium/scope/hydranium-scope-computation.d.ts +21 -18
  219. package/lib/langium/scope/hydranium-scope-computation.d.ts.map +1 -1
  220. package/lib/langium/scope/hydranium-scope-computation.js +38 -39
  221. package/lib/langium/scope/hydranium-scope-computation.js.map +1 -1
  222. package/lib/langium/scope/hydranium-scope-provider.d.ts +122 -32
  223. package/lib/langium/scope/hydranium-scope-provider.d.ts.map +1 -1
  224. package/lib/langium/scope/hydranium-scope-provider.js +217 -39
  225. package/lib/langium/scope/hydranium-scope-provider.js.map +1 -1
  226. package/lib/langium/scope/index.d.ts +1 -0
  227. package/lib/langium/scope/index.d.ts.map +1 -1
  228. package/lib/langium/scope/index.js +1 -0
  229. package/lib/langium/scope/index.js.map +1 -1
  230. package/lib/langium/scope/reference-builder.d.ts.map +1 -1
  231. package/lib/langium/scope/reference-builder.js.map +1 -1
  232. package/lib/langium/scope/reference-candidate-provider.d.ts +6 -5
  233. package/lib/langium/scope/reference-candidate-provider.d.ts.map +1 -1
  234. package/lib/langium/scope/reference-candidate-provider.js +3 -2
  235. package/lib/langium/scope/reference-candidate-provider.js.map +1 -1
  236. package/lib/langium/scope/scope-extension-service.d.ts +69 -37
  237. package/lib/langium/scope/scope-extension-service.d.ts.map +1 -1
  238. package/lib/langium/scope/scope-extension-service.js +102 -29
  239. package/lib/langium/scope/scope-extension-service.js.map +1 -1
  240. package/lib/langium/scope/scoped-ast-node-description.d.ts +1 -3
  241. package/lib/langium/scope/scoped-ast-node-description.d.ts.map +1 -1
  242. package/lib/langium/scope/scoped-ast-node-description.js +1 -3
  243. package/lib/langium/scope/scoped-ast-node-description.js.map +1 -1
  244. package/lib/langium/serialization/abstract-serializer.d.ts +38 -27
  245. package/lib/langium/serialization/abstract-serializer.d.ts.map +1 -1
  246. package/lib/langium/serialization/abstract-serializer.js +54 -30
  247. package/lib/langium/serialization/abstract-serializer.js.map +1 -1
  248. package/lib/langium/serialization/json-serializer.d.ts +8 -1
  249. package/lib/langium/serialization/json-serializer.d.ts.map +1 -1
  250. package/lib/langium/serialization/json-serializer.js +13 -3
  251. package/lib/langium/serialization/json-serializer.js.map +1 -1
  252. package/lib/langium/serialization/serializer.d.ts +1 -1
  253. package/lib/langium/serialization/yaml-serializer.d.ts +12 -0
  254. package/lib/langium/serialization/yaml-serializer.d.ts.map +1 -1
  255. package/lib/langium/serialization/yaml-serializer.js +24 -4
  256. package/lib/langium/serialization/yaml-serializer.js.map +1 -1
  257. package/lib/langium/service-registry.d.ts +29 -1
  258. package/lib/langium/service-registry.d.ts.map +1 -1
  259. package/lib/langium/service-registry.js +37 -0
  260. package/lib/langium/service-registry.js.map +1 -1
  261. package/lib/langium/shared-services.d.ts +10 -4
  262. package/lib/langium/shared-services.d.ts.map +1 -1
  263. package/lib/langium/shared-services.js.map +1 -1
  264. package/lib/langium/single-langium-copy.d.ts +22 -0
  265. package/lib/langium/single-langium-copy.d.ts.map +1 -0
  266. package/lib/langium/single-langium-copy.js +36 -0
  267. package/lib/langium/single-langium-copy.js.map +1 -0
  268. package/lib/langium/transfer/transfer-encoder.d.ts +60 -39
  269. package/lib/langium/transfer/transfer-encoder.d.ts.map +1 -1
  270. package/lib/langium/transfer/transfer-encoder.js +35 -24
  271. package/lib/langium/transfer/transfer-encoder.js.map +1 -1
  272. package/lib/langium/trivia/comment-preserver.d.ts +543 -0
  273. package/lib/langium/trivia/comment-preserver.d.ts.map +1 -0
  274. package/lib/langium/trivia/comment-preserver.js +1164 -0
  275. package/lib/langium/trivia/comment-preserver.js.map +1 -0
  276. package/lib/langium/trivia/document-ending-preserver.d.ts +51 -0
  277. package/lib/langium/trivia/document-ending-preserver.d.ts.map +1 -0
  278. package/lib/langium/trivia/document-ending-preserver.js +62 -0
  279. package/lib/langium/trivia/document-ending-preserver.js.map +1 -0
  280. package/lib/langium/trivia/index.d.ts +14 -0
  281. package/lib/langium/trivia/index.d.ts.map +1 -0
  282. package/lib/langium/trivia/index.js +14 -0
  283. package/lib/langium/trivia/index.js.map +1 -0
  284. package/lib/langium/trivia/trivia-contribution.d.ts +37 -0
  285. package/lib/langium/trivia/trivia-contribution.d.ts.map +1 -0
  286. package/lib/langium/trivia/trivia-contribution.js +10 -0
  287. package/lib/langium/trivia/trivia-contribution.js.map +1 -0
  288. package/lib/langium/trivia/trivia-preserver.d.ts +52 -0
  289. package/lib/langium/trivia/trivia-preserver.d.ts.map +1 -0
  290. package/lib/langium/trivia/trivia-preserver.js +10 -0
  291. package/lib/langium/trivia/trivia-preserver.js.map +1 -0
  292. package/lib/langium/trivia/trivia-service.d.ts +70 -0
  293. package/lib/langium/trivia/trivia-service.d.ts.map +1 -0
  294. package/lib/langium/trivia/trivia-service.js +56 -0
  295. package/lib/langium/trivia/trivia-service.js.map +1 -0
  296. package/lib/langium/update-rewrite/normalize-empty-strings.d.ts.map +1 -1
  297. package/lib/langium/update-rewrite/update-rewrite-service.d.ts +1 -1
  298. package/lib/langium/update-rewrite/update-rewrite-service.d.ts.map +1 -1
  299. package/lib/langium/update-rewrite/update-rewrite-service.js.map +1 -1
  300. package/lib/langium/update-rewrite/update-rewrite.d.ts +1 -1
  301. package/lib/langium/validation/document-validator.d.ts +168 -23
  302. package/lib/langium/validation/document-validator.d.ts.map +1 -1
  303. package/lib/langium/validation/document-validator.js +264 -26
  304. package/lib/langium/validation/document-validator.js.map +1 -1
  305. package/lib/langium/validation/validation-contribution-collector.d.ts +9 -1
  306. package/lib/langium/validation/validation-contribution-collector.d.ts.map +1 -1
  307. package/lib/langium/validation/validation-contribution-collector.js +1 -1
  308. package/lib/langium/validation/validation-contribution-collector.js.map +1 -1
  309. package/lib/langium/workspace/ast-node-locator.d.ts +24 -0
  310. package/lib/langium/workspace/ast-node-locator.d.ts.map +1 -0
  311. package/lib/langium/workspace/ast-node-locator.js +32 -0
  312. package/lib/langium/workspace/ast-node-locator.js.map +1 -0
  313. package/lib/langium/workspace/document-uri-policy.d.ts +24 -15
  314. package/lib/langium/workspace/document-uri-policy.d.ts.map +1 -1
  315. package/lib/langium/workspace/document-uri-policy.js +22 -13
  316. package/lib/langium/workspace/document-uri-policy.js.map +1 -1
  317. package/lib/langium/workspace/file-not-found.d.ts +23 -0
  318. package/lib/langium/workspace/file-not-found.d.ts.map +1 -0
  319. package/lib/langium/workspace/file-not-found.js +31 -0
  320. package/lib/langium/workspace/file-not-found.js.map +1 -0
  321. package/lib/langium/workspace/file-system-provider.d.ts +167 -8
  322. package/lib/langium/workspace/file-system-provider.d.ts.map +1 -1
  323. package/lib/langium/workspace/file-system-provider.js +115 -13
  324. package/lib/langium/workspace/file-system-provider.js.map +1 -1
  325. package/lib/langium/workspace/hydranium-langium-document-factory.d.ts +31 -1
  326. package/lib/langium/workspace/hydranium-langium-document-factory.d.ts.map +1 -1
  327. package/lib/langium/workspace/hydranium-langium-document-factory.js +54 -0
  328. package/lib/langium/workspace/hydranium-langium-document-factory.js.map +1 -1
  329. package/lib/langium/workspace/hydranium-workspace-lock.d.ts +43 -1
  330. package/lib/langium/workspace/hydranium-workspace-lock.d.ts.map +1 -1
  331. package/lib/langium/workspace/hydranium-workspace-lock.js +58 -1
  332. package/lib/langium/workspace/hydranium-workspace-lock.js.map +1 -1
  333. package/lib/langium/workspace/hydranium-workspace-manager.d.ts +103 -21
  334. package/lib/langium/workspace/hydranium-workspace-manager.d.ts.map +1 -1
  335. package/lib/langium/workspace/hydranium-workspace-manager.js +184 -31
  336. package/lib/langium/workspace/hydranium-workspace-manager.js.map +1 -1
  337. package/lib/langium/workspace/in-memory-file-system-provider.d.ts +26 -9
  338. package/lib/langium/workspace/in-memory-file-system-provider.d.ts.map +1 -1
  339. package/lib/langium/workspace/in-memory-file-system-provider.js +45 -22
  340. package/lib/langium/workspace/in-memory-file-system-provider.js.map +1 -1
  341. package/lib/langium/workspace/index-manager.d.ts.map +1 -1
  342. package/lib/langium/workspace/index-manager.js.map +1 -1
  343. package/lib/langium/workspace/index.d.ts +2 -0
  344. package/lib/langium/workspace/index.d.ts.map +1 -1
  345. package/lib/langium/workspace/index.js +2 -0
  346. package/lib/langium/workspace/index.js.map +1 -1
  347. package/lib/langium/workspace/initialize-workspace.d.ts +40 -3
  348. package/lib/langium/workspace/initialize-workspace.d.ts.map +1 -1
  349. package/lib/langium/workspace/initialize-workspace.js +68 -3
  350. package/lib/langium/workspace/initialize-workspace.js.map +1 -1
  351. package/lib/langium/workspace/langium-documents.d.ts +7 -0
  352. package/lib/langium/workspace/langium-documents.d.ts.map +1 -1
  353. package/lib/langium/workspace/langium-documents.js +18 -1
  354. package/lib/langium/workspace/langium-documents.js.map +1 -1
  355. package/lib/langium/workspace/persistent-file-system-provider.d.ts +16 -10
  356. package/lib/langium/workspace/persistent-file-system-provider.d.ts.map +1 -1
  357. package/lib/langium/workspace/persistent-file-system-provider.js +25 -13
  358. package/lib/langium/workspace/persistent-file-system-provider.js.map +1 -1
  359. package/lib/{documents → langium/workspace}/self-save-registry.d.ts +7 -9
  360. package/lib/langium/workspace/self-save-registry.d.ts.map +1 -0
  361. package/lib/{documents → langium/workspace}/self-save-registry.js +9 -11
  362. package/lib/langium/workspace/self-save-registry.js.map +1 -0
  363. package/lib/langium/workspace/virtual-document.d.ts +55 -21
  364. package/lib/langium/workspace/virtual-document.d.ts.map +1 -1
  365. package/lib/langium/workspace/virtual-document.js +87 -24
  366. package/lib/langium/workspace/virtual-document.js.map +1 -1
  367. package/lib/langium/workspace/write-lock-scope.d.ts +22 -10
  368. package/lib/langium/workspace/write-lock-scope.d.ts.map +1 -1
  369. package/lib/langium/workspace/write-lock-scope.js +15 -5
  370. package/lib/langium/workspace/write-lock-scope.js.map +1 -1
  371. package/lib/launcher/integrated-server.d.ts +3 -1
  372. package/lib/launcher/integrated-server.d.ts.map +1 -1
  373. package/lib/locale/server-locale.d.ts +6 -6
  374. package/lib/locale/server-locale.d.ts.map +1 -1
  375. package/lib/locale/server-locale.js.map +1 -1
  376. package/lib/lsp/completion/hydranium-completion-provider.d.ts +44 -2
  377. package/lib/lsp/completion/hydranium-completion-provider.d.ts.map +1 -1
  378. package/lib/lsp/completion/hydranium-completion-provider.js +68 -0
  379. package/lib/lsp/completion/hydranium-completion-provider.js.map +1 -1
  380. package/lib/lsp/connection-features.d.ts +23 -0
  381. package/lib/lsp/connection-features.d.ts.map +1 -0
  382. package/lib/lsp/connection-features.js +60 -0
  383. package/lib/lsp/connection-features.js.map +1 -0
  384. package/lib/lsp/diagnostics-connection.d.ts +27 -0
  385. package/lib/lsp/diagnostics-connection.d.ts.map +1 -0
  386. package/lib/lsp/diagnostics-connection.js +53 -0
  387. package/lib/lsp/diagnostics-connection.js.map +1 -0
  388. package/lib/lsp/edit-requests-guard.d.ts +31 -0
  389. package/lib/lsp/edit-requests-guard.d.ts.map +1 -0
  390. package/lib/lsp/edit-requests-guard.js +125 -0
  391. package/lib/lsp/edit-requests-guard.js.map +1 -0
  392. package/lib/lsp/hydranium-document-update-handler.d.ts +126 -82
  393. package/lib/lsp/hydranium-document-update-handler.d.ts.map +1 -1
  394. package/lib/lsp/hydranium-document-update-handler.js +234 -101
  395. package/lib/lsp/hydranium-document-update-handler.js.map +1 -1
  396. package/lib/lsp/index.d.ts +6 -2
  397. package/lib/lsp/index.d.ts.map +1 -1
  398. package/lib/lsp/index.js +6 -2
  399. package/lib/lsp/index.js.map +1 -1
  400. package/lib/lsp/lsp-latency.d.ts +39 -0
  401. package/lib/lsp/lsp-latency.d.ts.map +1 -0
  402. package/lib/lsp/lsp-latency.js +58 -0
  403. package/lib/lsp/lsp-latency.js.map +1 -0
  404. package/lib/lsp/save-text-document.d.ts +31 -0
  405. package/lib/lsp/save-text-document.d.ts.map +1 -0
  406. package/lib/lsp/save-text-document.js +52 -0
  407. package/lib/lsp/save-text-document.js.map +1 -0
  408. package/lib/lsp/semantic-token-provider.d.ts +58 -2
  409. package/lib/lsp/semantic-token-provider.d.ts.map +1 -1
  410. package/lib/lsp/semantic-token-provider.js +98 -9
  411. package/lib/lsp/semantic-token-provider.js.map +1 -1
  412. package/lib/lsp/shared-module.d.ts +4 -8
  413. package/lib/lsp/shared-module.d.ts.map +1 -1
  414. package/lib/lsp/shared-module.js.map +1 -1
  415. package/lib/lsp/start-language-server.d.ts +12 -7
  416. package/lib/lsp/start-language-server.d.ts.map +1 -1
  417. package/lib/lsp/start-language-server.js +21 -7
  418. package/lib/lsp/start-language-server.js.map +1 -1
  419. package/lib/messages/carriers.d.ts +4 -6
  420. package/lib/messages/carriers.d.ts.map +1 -1
  421. package/lib/messages/carriers.js +4 -6
  422. package/lib/messages/carriers.js.map +1 -1
  423. package/lib/messages/index.d.ts +2 -2
  424. package/lib/messages/index.d.ts.map +1 -1
  425. package/lib/messages/index.js +2 -2
  426. package/lib/messages/index.js.map +1 -1
  427. package/lib/messages/renderer.d.ts +10 -4
  428. package/lib/messages/renderer.d.ts.map +1 -1
  429. package/lib/messages/renderer.js +6 -0
  430. package/lib/messages/renderer.js.map +1 -1
  431. package/lib/node/event-loop-monitor.d.ts.map +1 -1
  432. package/lib/node/event-loop-monitor.js +2 -1
  433. package/lib/node/event-loop-monitor.js.map +1 -1
  434. package/lib/node/heap-ceiling.d.ts +61 -0
  435. package/lib/node/heap-ceiling.d.ts.map +1 -0
  436. package/lib/node/heap-ceiling.js +72 -0
  437. package/lib/node/heap-ceiling.js.map +1 -0
  438. package/lib/node/index.d.ts +1 -1
  439. package/lib/node/index.d.ts.map +1 -1
  440. package/lib/node/index.js +5 -1
  441. package/lib/node/index.js.map +1 -1
  442. package/lib/node/latency-from-env.d.ts +1 -1
  443. package/lib/node/latency-from-env.js +1 -1
  444. package/lib/node/lint-grammar.js.map +1 -1
  445. package/lib/node/log-file-sink.d.ts +3 -2
  446. package/lib/node/log-file-sink.d.ts.map +1 -1
  447. package/lib/node/log-file-sink.js +6 -2
  448. package/lib/node/log-file-sink.js.map +1 -1
  449. package/lib/node/log-preamble-node.d.ts +5 -3
  450. package/lib/node/log-preamble-node.d.ts.map +1 -1
  451. package/lib/node/log-preamble-node.js +13 -10
  452. package/lib/node/log-preamble-node.js.map +1 -1
  453. package/lib/node/measure-memory.d.ts.map +1 -1
  454. package/lib/node/measure-memory.js +5 -4
  455. package/lib/node/measure-memory.js.map +1 -1
  456. package/lib/node/memory-monitor.d.ts +2 -2
  457. package/lib/node/memory-monitor.d.ts.map +1 -1
  458. package/lib/node/memory-monitor.js +9 -10
  459. package/lib/node/memory-monitor.js.map +1 -1
  460. package/lib/node/node-file-system-provider.d.ts +67 -9
  461. package/lib/node/node-file-system-provider.d.ts.map +1 -1
  462. package/lib/node/node-file-system-provider.js +198 -53
  463. package/lib/node/node-file-system-provider.js.map +1 -1
  464. package/lib/node/profile-capture.d.ts +12 -4
  465. package/lib/node/profile-capture.d.ts.map +1 -1
  466. package/lib/node/profile-capture.js +8 -6
  467. package/lib/node/profile-capture.js.map +1 -1
  468. package/lib/node/profile-digest.js.map +1 -1
  469. package/lib/node/profiling-run.d.ts +13 -3
  470. package/lib/node/profiling-run.d.ts.map +1 -1
  471. package/lib/node/profiling-run.js +17 -8
  472. package/lib/node/profiling-run.js.map +1 -1
  473. package/lib/node/rename-over-open-readers.d.ts +61 -0
  474. package/lib/node/rename-over-open-readers.d.ts.map +1 -0
  475. package/lib/node/rename-over-open-readers.js +80 -0
  476. package/lib/node/rename-over-open-readers.js.map +1 -0
  477. package/lib/node/server-diagnostics.js +1 -1
  478. package/lib/node/server-diagnostics.js.map +1 -1
  479. package/lib/node/server-state-snapshot.js +4 -4
  480. package/lib/node/server-state-snapshot.js.map +1 -1
  481. package/lib/node/socket-launcher.d.ts +43 -7
  482. package/lib/node/socket-launcher.d.ts.map +1 -1
  483. package/lib/node/socket-launcher.js +42 -7
  484. package/lib/node/socket-launcher.js.map +1 -1
  485. package/lib/node/startup-cpu-profile.d.ts +29 -0
  486. package/lib/node/startup-cpu-profile.d.ts.map +1 -0
  487. package/lib/node/startup-cpu-profile.js +91 -0
  488. package/lib/node/startup-cpu-profile.js.map +1 -0
  489. package/lib/node/stdio-launcher.d.ts +13 -13
  490. package/lib/node/stdio-launcher.d.ts.map +1 -1
  491. package/lib/node/stdio-launcher.js +21 -11
  492. package/lib/node/stdio-launcher.js.map +1 -1
  493. package/lib/node/validate-workspace.d.ts +1 -1
  494. package/lib/node/validate-workspace.d.ts.map +1 -1
  495. package/lib/node/validate-workspace.js +5 -1
  496. package/lib/node/validate-workspace.js.map +1 -1
  497. package/lib/testing/document-uri-policy-conformance.js +1 -1
  498. package/lib/testing/document-uri-policy-conformance.js.map +1 -1
  499. package/lib/testing/fake-description.js.map +1 -1
  500. package/lib/testing/fake-document.d.ts +2 -1
  501. package/lib/testing/fake-document.d.ts.map +1 -1
  502. package/lib/testing/fake-document.js.map +1 -1
  503. package/lib/testing/index.d.ts +1 -1
  504. package/lib/testing/index.d.ts.map +1 -1
  505. package/lib/testing/index.js +2 -1
  506. package/lib/testing/index.js.map +1 -1
  507. package/lib/testing/langium-test-helpers.d.ts.map +1 -1
  508. package/lib/testing/langium-test-helpers.js +1 -0
  509. package/lib/testing/langium-test-helpers.js.map +1 -1
  510. package/lib/testing/make-noop-language-services.js.map +1 -1
  511. package/lib/testing/make-noop-shared-services.js.map +1 -1
  512. package/lib/testing/make-test-services.d.ts +45 -14
  513. package/lib/testing/make-test-services.d.ts.map +1 -1
  514. package/lib/testing/make-test-services.js +23 -7
  515. package/lib/testing/make-test-services.js.map +1 -1
  516. package/lib/testing/make-test-tracer.d.ts +12 -0
  517. package/lib/testing/make-test-tracer.d.ts.map +1 -1
  518. package/lib/testing/make-test-tracer.js +13 -0
  519. package/lib/testing/make-test-tracer.js.map +1 -1
  520. package/lib/testing/node/applied-edit-capture.d.ts +29 -0
  521. package/lib/testing/node/applied-edit-capture.d.ts.map +1 -0
  522. package/lib/testing/node/applied-edit-capture.js +117 -0
  523. package/lib/testing/node/applied-edit-capture.js.map +1 -0
  524. package/lib/testing/node/golden-corpus.js.map +1 -1
  525. package/lib/testing/node/index.d.ts +1 -0
  526. package/lib/testing/node/index.d.ts.map +1 -1
  527. package/lib/testing/node/index.js +1 -0
  528. package/lib/testing/node/index.js.map +1 -1
  529. package/lib/testing/node/lsp-harness.d.ts.map +1 -1
  530. package/lib/testing/node/lsp-harness.js +2 -0
  531. package/lib/testing/node/lsp-harness.js.map +1 -1
  532. package/lib/testing/node/lsp-server-connection.d.ts +21 -6
  533. package/lib/testing/node/lsp-server-connection.d.ts.map +1 -1
  534. package/lib/testing/node/lsp-server-connection.js +49 -106
  535. package/lib/testing/node/lsp-server-connection.js.map +1 -1
  536. package/lib/testing/node/scratch-workspace.d.ts.map +1 -1
  537. package/lib/testing/node/scratch-workspace.js +10 -5
  538. package/lib/testing/node/scratch-workspace.js.map +1 -1
  539. package/lib/testing/node/spawned-server.d.ts +30 -1
  540. package/lib/testing/node/spawned-server.d.ts.map +1 -1
  541. package/lib/testing/node/spawned-server.js +39 -2
  542. package/lib/testing/node/spawned-server.js.map +1 -1
  543. package/lib/testing/node/unhandled-rejections.d.ts +20 -0
  544. package/lib/testing/node/unhandled-rejections.d.ts.map +1 -0
  545. package/lib/testing/node/unhandled-rejections.js +32 -0
  546. package/lib/testing/node/unhandled-rejections.js.map +1 -0
  547. package/lib/testing/playwright/browser-capture-bridge.js.map +1 -1
  548. package/lib/testing/playwright/e2e-profiling.js.map +1 -1
  549. package/lib/testing/playwright/flaky-network-proxy.d.ts +76 -0
  550. package/lib/testing/playwright/flaky-network-proxy.d.ts.map +1 -0
  551. package/lib/testing/playwright/flaky-network-proxy.js +164 -0
  552. package/lib/testing/playwright/flaky-network-proxy.js.map +1 -0
  553. package/lib/testing/playwright/index.d.ts +1 -0
  554. package/lib/testing/playwright/index.d.ts.map +1 -1
  555. package/lib/testing/playwright/index.js +1 -0
  556. package/lib/testing/playwright/index.js.map +1 -1
  557. package/lib/testing/playwright/server-log-capture.d.ts +46 -16
  558. package/lib/testing/playwright/server-log-capture.d.ts.map +1 -1
  559. package/lib/testing/playwright/server-log-capture.js +111 -40
  560. package/lib/testing/playwright/server-log-capture.js.map +1 -1
  561. package/lib/testing/playwright/server-log-fixture.d.ts +16 -0
  562. package/lib/testing/playwright/server-log-fixture.d.ts.map +1 -1
  563. package/lib/testing/playwright/server-log-fixture.js +25 -6
  564. package/lib/testing/playwright/server-log-fixture.js.map +1 -1
  565. package/lib/testing/playwright/server-log-region.d.ts +15 -0
  566. package/lib/testing/playwright/server-log-region.d.ts.map +1 -0
  567. package/lib/testing/playwright/server-log-region.js +30 -0
  568. package/lib/testing/playwright/server-log-region.js.map +1 -0
  569. package/lib/testing/playwright/server-log-rename-reporter.d.ts.map +1 -1
  570. package/lib/testing/playwright/server-log-rename-reporter.js +4 -3
  571. package/lib/testing/playwright/server-log-rename-reporter.js.map +1 -1
  572. package/lib/testing/run-update-pipeline.d.ts +8 -5
  573. package/lib/testing/run-update-pipeline.d.ts.map +1 -1
  574. package/lib/testing/run-update-pipeline.js.map +1 -1
  575. package/lib/testing/stub-ast-document-manager.d.ts +11 -51
  576. package/lib/testing/stub-ast-document-manager.d.ts.map +1 -1
  577. package/lib/testing/stub-ast-document-manager.js +31 -59
  578. package/lib/testing/stub-ast-document-manager.js.map +1 -1
  579. package/lib/testing/stub-document-builder.d.ts +33 -11
  580. package/lib/testing/stub-document-builder.d.ts.map +1 -1
  581. package/lib/testing/stub-document-builder.js +103 -5
  582. package/lib/testing/stub-document-builder.js.map +1 -1
  583. package/lib/testing/stub-hydranium-text-documents.d.ts +33 -10
  584. package/lib/testing/stub-hydranium-text-documents.d.ts.map +1 -1
  585. package/lib/testing/stub-hydranium-text-documents.js +132 -16
  586. package/lib/testing/stub-hydranium-text-documents.js.map +1 -1
  587. package/lib/testing/stub-index-manager.js.map +1 -1
  588. package/lib/testing/stub-langium-documents.d.ts +3 -2
  589. package/lib/testing/stub-langium-documents.d.ts.map +1 -1
  590. package/lib/testing/stub-langium-documents.js.map +1 -1
  591. package/lib/testing/stub-model-service.d.ts +8 -7
  592. package/lib/testing/stub-model-service.d.ts.map +1 -1
  593. package/lib/testing/stub-model-service.js +4 -4
  594. package/lib/testing/stub-model-service.js.map +1 -1
  595. package/lib/testing/stub-project-manager.js.map +1 -1
  596. package/lib/testing/stub-self-save-registry.d.ts +1 -1
  597. package/lib/testing/stub-self-save-registry.d.ts.map +1 -1
  598. package/lib/testing/stub-service-registry.d.ts +1 -1
  599. package/lib/testing/stub-service-registry.js.map +1 -1
  600. package/lib/testing/stub-writable-file-system.d.ts +1 -1
  601. package/lib/testing/stub-writable-file-system.d.ts.map +1 -1
  602. package/lib/testing/stub-writable-file-system.js +2 -1
  603. package/lib/testing/stub-writable-file-system.js.map +1 -1
  604. package/lib/util/connection-liveness.d.ts +22 -6
  605. package/lib/util/connection-liveness.d.ts.map +1 -1
  606. package/lib/util/connection-liveness.js +75 -15
  607. package/lib/util/connection-liveness.js.map +1 -1
  608. package/lib/util/environment.d.ts +7 -0
  609. package/lib/util/environment.d.ts.map +1 -1
  610. package/lib/util/environment.js +15 -1
  611. package/lib/util/environment.js.map +1 -1
  612. package/lib/util/registry.d.ts.map +1 -1
  613. package/package.json +41 -60
  614. package/src/browser/host-heads-in-worker.ts +218 -0
  615. package/src/browser/index.ts +17 -0
  616. package/src/browser/indexeddb-file-system-store.ts +192 -0
  617. package/src/browser/start-language-server-in-worker.ts +56 -0
  618. package/src/documents/ast-document-manager.ts +477 -249
  619. package/src/documents/client-ids.ts +5 -22
  620. package/src/documents/client-session-errors.ts +24 -0
  621. package/src/documents/client-session-registry.ts +262 -0
  622. package/src/documents/dirty-state-tracker.ts +167 -0
  623. package/src/documents/document-release-handler.ts +404 -0
  624. package/src/documents/document-release-scheduler.ts +121 -0
  625. package/src/documents/file-system-task-queue.ts +74 -0
  626. package/src/documents/hydranium-text-documents.ts +1029 -595
  627. package/src/documents/index.ts +10 -2
  628. package/src/documents/language-client-shadow.ts +501 -0
  629. package/src/documents/model-ledger.ts +66 -0
  630. package/src/documents/text-ledger.ts +112 -0
  631. package/src/documents/version-sync-service.ts +275 -0
  632. package/src/index.ts +3 -0
  633. package/src/langium/ast-extension/ast-extension-service.ts +77 -41
  634. package/src/langium/ast-extension/ast-node-builder.ts +35 -13
  635. package/src/langium/bootstrap.ts +79 -43
  636. package/src/langium/build-phase-pass/build-phase-pass-service.ts +29 -19
  637. package/src/langium/build-phase-pass/build-phase-pass.ts +37 -8
  638. package/src/langium/composite-ast-reflection.ts +112 -0
  639. package/src/langium/config/configuration-provider.ts +119 -0
  640. package/src/langium/config/index.ts +1 -0
  641. package/src/langium/diagnostics/console-tee.ts +150 -0
  642. package/src/langium/diagnostics/hydranium-langium-profiler.ts +15 -39
  643. package/src/langium/diagnostics/log-preamble.ts +1 -1
  644. package/src/langium/diagnostics/logger.ts +51 -17
  645. package/src/langium/diagnostics/lsp-logger.ts +83 -45
  646. package/src/langium/document-builder/build-pipeline-integration.ts +57 -32
  647. package/src/langium/document-builder/build-session.ts +4 -3
  648. package/src/langium/document-builder/document-builder.ts +613 -77
  649. package/src/langium/integration-services.ts +58 -27
  650. package/src/langium/integrity/integrity-rule.ts +17 -8
  651. package/src/langium/integrity/integrity-service.ts +332 -69
  652. package/src/langium/keys/containment.ts +3 -2
  653. package/src/langium/keys/name-based-key-provider.ts +24 -12
  654. package/src/langium/language-module.ts +52 -9
  655. package/src/langium/model-service/client-session.ts +726 -0
  656. package/src/langium/model-service/index.ts +2 -0
  657. package/src/langium/model-service/model-events.ts +82 -0
  658. package/src/langium/model-service/model-service.ts +887 -522
  659. package/src/langium/module.ts +132 -56
  660. package/src/langium/naming/name-provider.ts +34 -8
  661. package/src/langium/project/abstract-project-manager.ts +13 -5
  662. package/src/langium/project/project-change-event.ts +2 -2
  663. package/src/langium/residency/cst-residency-service.ts +30 -14
  664. package/src/langium/scope/ast-node-description-provider.ts +111 -16
  665. package/src/langium/scope/built-local-symbols.ts +13 -0
  666. package/src/langium/scope/fallback-scope.ts +38 -0
  667. package/src/langium/scope/hydranium-scope-computation.ts +45 -44
  668. package/src/langium/scope/hydranium-scope-provider.ts +245 -41
  669. package/src/langium/scope/index.ts +1 -0
  670. package/src/langium/scope/reference-candidate-provider.ts +6 -5
  671. package/src/langium/scope/scope-extension-service.ts +148 -56
  672. package/src/langium/scope/scoped-ast-node-description.ts +1 -3
  673. package/src/langium/serialization/abstract-serializer.ts +57 -41
  674. package/src/langium/serialization/json-serializer.ts +14 -3
  675. package/src/langium/serialization/serializer.ts +1 -1
  676. package/src/langium/serialization/yaml-serializer.ts +26 -4
  677. package/src/langium/service-registry.ts +41 -2
  678. package/src/langium/shared-services.ts +13 -4
  679. package/src/langium/single-langium-copy.ts +42 -0
  680. package/src/langium/transfer/transfer-encoder.ts +76 -50
  681. package/src/langium/trivia/comment-preserver.ts +1409 -0
  682. package/src/langium/trivia/document-ending-preserver.ts +71 -0
  683. package/src/langium/trivia/index.ts +14 -0
  684. package/src/langium/trivia/trivia-contribution.ts +39 -0
  685. package/src/langium/trivia/trivia-preserver.ts +56 -0
  686. package/src/langium/trivia/trivia-service.ts +99 -0
  687. package/src/langium/update-rewrite/update-rewrite-service.ts +1 -1
  688. package/src/langium/update-rewrite/update-rewrite.ts +1 -1
  689. package/src/langium/validation/document-validator.ts +312 -31
  690. package/src/langium/validation/validation-contribution-collector.ts +10 -1
  691. package/src/langium/workspace/ast-node-locator.ts +33 -0
  692. package/src/langium/workspace/document-uri-policy.ts +32 -18
  693. package/src/langium/workspace/file-not-found.ts +35 -0
  694. package/src/langium/workspace/file-system-provider.ts +258 -16
  695. package/src/langium/workspace/hydranium-langium-document-factory.ts +83 -0
  696. package/src/langium/workspace/hydranium-workspace-lock.ts +86 -2
  697. package/src/langium/workspace/hydranium-workspace-manager.ts +212 -35
  698. package/src/langium/workspace/in-memory-file-system-provider.ts +54 -23
  699. package/src/langium/workspace/index.ts +2 -0
  700. package/src/langium/workspace/initialize-workspace.ts +96 -4
  701. package/src/langium/workspace/langium-documents.ts +19 -1
  702. package/src/langium/workspace/persistent-file-system-provider.ts +27 -15
  703. package/src/{documents → langium/workspace}/self-save-registry.ts +12 -14
  704. package/src/langium/workspace/virtual-document.ts +106 -25
  705. package/src/langium/workspace/write-lock-scope.ts +27 -12
  706. package/src/launcher/integrated-server.ts +3 -1
  707. package/src/locale/server-locale.ts +6 -6
  708. package/src/lsp/completion/hydranium-completion-provider.ts +82 -2
  709. package/src/lsp/connection-features.ts +67 -0
  710. package/src/lsp/diagnostics-connection.ts +56 -0
  711. package/src/lsp/edit-requests-guard.ts +152 -0
  712. package/src/lsp/hydranium-document-update-handler.ts +284 -110
  713. package/src/lsp/index.ts +6 -2
  714. package/src/lsp/lsp-latency.ts +62 -0
  715. package/src/lsp/save-text-document.ts +63 -0
  716. package/src/lsp/semantic-token-provider.ts +146 -8
  717. package/src/lsp/shared-module.ts +4 -8
  718. package/src/lsp/start-language-server.ts +21 -7
  719. package/src/messages/carriers.ts +4 -6
  720. package/src/messages/index.ts +11 -2
  721. package/src/messages/renderer.ts +11 -3
  722. package/src/node/event-loop-monitor.ts +2 -1
  723. package/src/node/heap-ceiling.ts +108 -0
  724. package/src/node/index.ts +5 -1
  725. package/src/node/latency-from-env.ts +1 -1
  726. package/src/node/log-file-sink.ts +6 -2
  727. package/src/node/log-preamble-node.ts +20 -10
  728. package/src/node/measure-memory.ts +5 -4
  729. package/src/node/memory-monitor.ts +10 -10
  730. package/src/node/node-file-system-provider.ts +214 -57
  731. package/src/node/profile-capture.ts +16 -15
  732. package/src/node/profiling-run.ts +30 -8
  733. package/src/node/rename-over-open-readers.ts +94 -0
  734. package/src/node/server-diagnostics.ts +1 -1
  735. package/src/node/server-state-snapshot.ts +5 -5
  736. package/src/node/socket-launcher.ts +78 -14
  737. package/src/node/startup-cpu-profile.ts +94 -0
  738. package/src/node/stdio-launcher.ts +29 -19
  739. package/src/node/validate-workspace.ts +8 -2
  740. package/src/testing/document-uri-policy-conformance.ts +1 -1
  741. package/src/testing/fake-document.ts +2 -1
  742. package/src/testing/index.ts +2 -1
  743. package/src/testing/langium-test-helpers.ts +1 -0
  744. package/src/testing/make-test-services.ts +83 -31
  745. package/src/testing/make-test-tracer.ts +26 -0
  746. package/src/testing/node/applied-edit-capture.ts +141 -0
  747. package/src/testing/node/index.ts +1 -0
  748. package/src/testing/node/lsp-harness.ts +2 -0
  749. package/src/testing/node/lsp-server-connection.ts +83 -119
  750. package/src/testing/node/scratch-workspace.ts +10 -5
  751. package/src/testing/node/spawned-server.ts +57 -3
  752. package/src/testing/node/unhandled-rejections.ts +31 -0
  753. package/src/testing/parse-semantic-root.ts +1 -1
  754. package/src/testing/playwright/flaky-network-proxy.ts +240 -0
  755. package/src/testing/playwright/index.ts +1 -0
  756. package/src/testing/playwright/server-log-capture.ts +137 -47
  757. package/src/testing/playwright/server-log-fixture.ts +46 -6
  758. package/src/testing/playwright/server-log-region.ts +32 -0
  759. package/src/testing/playwright/server-log-rename-reporter.ts +4 -3
  760. package/src/testing/run-update-pipeline.ts +8 -5
  761. package/src/testing/stub-ast-document-manager.ts +47 -123
  762. package/src/testing/stub-document-builder.ts +138 -18
  763. package/src/testing/stub-hydranium-text-documents.ts +184 -27
  764. package/src/testing/stub-langium-documents.ts +3 -2
  765. package/src/testing/stub-model-service.ts +9 -8
  766. package/src/testing/stub-self-save-registry.ts +1 -1
  767. package/src/testing/stub-service-registry.ts +1 -1
  768. package/src/testing/stub-writable-file-system.ts +3 -2
  769. package/src/util/connection-liveness.ts +81 -15
  770. package/src/util/environment.ts +24 -2
  771. package/lib/documents/language-client-text-shadow.d.ts +0 -101
  772. package/lib/documents/language-client-text-shadow.d.ts.map +0 -1
  773. package/lib/documents/language-client-text-shadow.js +0 -156
  774. package/lib/documents/language-client-text-shadow.js.map +0 -1
  775. package/lib/documents/self-save-registry.d.ts.map +0 -1
  776. package/lib/documents/self-save-registry.js.map +0 -1
  777. package/lib/lsp/instrument-connection.d.ts +0 -36
  778. package/lib/lsp/instrument-connection.d.ts.map +0 -1
  779. package/lib/lsp/instrument-connection.js +0 -62
  780. package/lib/lsp/instrument-connection.js.map +0 -1
  781. package/lib/node/process-memory.d.ts +0 -66
  782. package/lib/node/process-memory.d.ts.map +0 -1
  783. package/lib/node/process-memory.js +0 -252
  784. package/lib/node/process-memory.js.map +0 -1
  785. package/src/documents/language-client-text-shadow.ts +0 -175
  786. package/src/lsp/instrument-connection.ts +0 -66
  787. package/src/node/process-memory.ts +0 -299
@@ -7,7 +7,7 @@
7
7
  * SPDX-License-Identifier: MIT
8
8
  ********************************************************************************/
9
9
 
10
- import { Format } from '@hydranium/protocol';
10
+ import { Format, type Stopwatch, SystemClock } from '@hydranium/protocol';
11
11
  import { DocumentState, type LangiumDocuments } from '@hydranium/langium';
12
12
  import { isCstShed } from '../langium/residency/cst-residency-service.js';
13
13
  import { performance } from 'node:perf_hooks';
@@ -15,7 +15,7 @@ import * as v8 from 'node:v8';
15
15
 
16
16
  /** Cumulative samples kept across calls so each snapshot can report deltas. */
17
17
  interface DeltaState {
18
- atMs: number;
18
+ sinceSample: Stopwatch;
19
19
  cpu: NodeJS.CpuUsage;
20
20
  elu: { idle: number; active: number };
21
21
  }
@@ -62,7 +62,7 @@ export interface ServerStateSnapshotOptions {
62
62
  * requested via `options` ({@link ServerStateSnapshotOptions}).
63
63
  */
64
64
  export function formatServerState(documents?: LangiumDocuments, label?: string, options?: ServerStateSnapshotOptions): string {
65
- const now = performance.now();
65
+ const sinceSample = new SystemClock().stopwatch();
66
66
  const mem = process.memoryUsage();
67
67
  const heap = v8.getHeapStatistics();
68
68
  const cpu = process.cpuUsage();
@@ -87,7 +87,7 @@ export function formatServerState(documents?: LangiumDocuments, label?: string,
87
87
  `native contexts ${heap.number_of_native_contexts}, detached contexts ${heap.number_of_detached_contexts}`
88
88
  );
89
89
  if (lastSample) {
90
- const wallMs = now - lastSample.atMs;
90
+ const wallMs = lastSample.sinceSample.elapsedMs;
91
91
  const userMs = (cpu.user - lastSample.cpu.user) / 1000;
92
92
  const systemMs = (cpu.system - lastSample.cpu.system) / 1000;
93
93
  const cpuPct = wallMs > 0 ? Math.round(((userMs + systemMs) / wallMs) * 100) : 0;
@@ -138,7 +138,7 @@ export function formatServerState(documents?: LangiumDocuments, label?: string,
138
138
  }
139
139
  }
140
140
 
141
- lastSample = { atMs: now, cpu, elu };
141
+ lastSample = { sinceSample, cpu, elu };
142
142
  return lines.join('\n');
143
143
  }
144
144
 
@@ -7,17 +7,30 @@
7
7
  * SPDX-License-Identifier: MIT
8
8
  ********************************************************************************/
9
9
 
10
- import { Deferred } from '@hydranium/langium';
11
10
  import * as net from 'node:net';
12
- import type { Disposable, Logger } from '@hydranium/protocol';
11
+ import { Deferred, describeError, describeErrorWithStack, type Disposable, type Logger } from '@hydranium/protocol';
13
12
  import { createMessageConnection, SocketMessageReader, SocketMessageWriter } from 'vscode-jsonrpc/node';
14
13
  import type { MessageConnection } from 'vscode-jsonrpc';
15
14
  import type { IntegratedServer } from '../launcher/integrated-server.js';
15
+ import type { ServerSharedServicesMinimal } from '../langium/shared-services.js';
16
+ import { initializeWorkspaceWithoutLsp, type WorkspaceFolderInput } from '../langium/workspace/initialize-workspace.js';
16
17
 
17
18
  /**
18
19
  * Construction-time options for {@link startSocketServer}.
19
20
  */
20
21
  export interface SocketServerOptions {
22
+ /**
23
+ * Shared services tree the head serves from. Without an LSP head the
24
+ * launcher brings its workspace up before listening, so a client never
25
+ * reaches a workspace that is not up.
26
+ */
27
+ readonly shared: ServerSharedServicesMinimal;
28
+ /**
29
+ * Workspace root(s) to initialize — a filesystem path or a `URI`. Required
30
+ * when no LSP head is composed, refused beside one: see
31
+ * {@link initializeWorkspaceWithoutLsp}.
32
+ */
33
+ readonly workspace?: WorkspaceFolderInput | ReadonlyArray<WorkspaceFolderInput>;
21
34
  /**
22
35
  * Port to bind. Default `0` — OS-assigned ephemeral. Resolve the
23
36
  * actual port off {@link StartedSocketServer.port} once `started`
@@ -25,9 +38,25 @@ export interface SocketServerOptions {
25
38
  */
26
39
  readonly port?: number;
27
40
  /**
28
- * Optional logger. If omitted, the launcher runs silently — the
29
- * adopter is expected to surface lifecycle events through their own
30
- * logging in {@link OnClientConnection} if needed.
41
+ * Interface to bind. Default `'127.0.0.1'` (LOCAL ONLY) — a head whose
42
+ * port is OS-assigned and announced over the LSP connection is
43
+ * reachable only by a client on the same machine anyway, so a wider
44
+ * binding exposes a port nothing off-box can address. Matches
45
+ * `startGlspServer`'s default, so the two socket heads agree.
46
+ *
47
+ * Pass `'::'` for every interface: that is the dual-stack any-address,
48
+ * so both IPv4 and IPv6 clients connect. `'0.0.0.0'` is NOT the same —
49
+ * it takes IPv4 only and refuses `::1`.
50
+ *
51
+ * An address no local interface holds fails the bind, so `started`
52
+ * rejects with `EADDRNOTAVAIL` rather than falling back to a wider one.
53
+ */
54
+ readonly host?: string;
55
+ /**
56
+ * Optional logger for lifecycle lines and each connection's protocol
57
+ * faults. If omitted, the launcher runs silently — the adopter is expected
58
+ * to surface lifecycle events through their own logging in
59
+ * {@link OnClientConnection} if needed.
31
60
  */
32
61
  readonly logger?: Logger;
33
62
  /** Tag included in lifecycle log lines. Default `"SocketServer"`. */
@@ -56,10 +85,12 @@ export type OnClientConnection = (connection: MessageConnection) => Disposable;
56
85
  /**
57
86
  * Live socket server handle returned by {@link startSocketServer}.
58
87
  *
59
- * - {@link IntegratedServer.started} resolves once `listen` resolves
60
- * AND `port` is populated.
88
+ * - {@link IntegratedServer.started} resolves once the workspace is up,
89
+ * where the launcher brings it up, AND `listen` resolves AND `port` is
90
+ * populated. It rejects, and nothing listens, when the bring-up fails.
61
91
  * - {@link IntegratedServer.stopped} resolves when the underlying
62
- * `net.Server` emits `close`.
92
+ * `net.Server` emits `close`, or once a failed bring-up has rejected
93
+ * `started`.
63
94
  * - {@link port} is undefined until `started` resolves.
64
95
  * - {@link close} triggers shutdown: disposes all active client
65
96
  * connections and closes the underlying `net.Server`.
@@ -82,12 +113,17 @@ export interface StartedSocketServer extends IntegratedServer {
82
113
  * close / server shutdown. Adopters keep per-client instance creation
83
114
  * (their server objects) but don't re-implement the tracking machinery.
84
115
  *
116
+ * **Without an LSP head the launcher brings the workspace up, then
117
+ * listens**, as `startStdioServer` does: a request served before the
118
+ * bring-up starts keeps its cross-file references unresolved for good.
119
+ *
85
120
  * The port is only known once {@link StartedSocketServer.started} has
86
121
  * resolved, so announcing it — via {@link publishPortOnLspConnection} —
87
122
  * belongs after that await, not beside the call.
88
123
  */
89
124
  export function startSocketServer(options: SocketServerOptions, onClientConnection: OnClientConnection): StartedSocketServer {
90
125
  const port = options.port ?? 0;
126
+ const host = options.host ?? '127.0.0.1';
91
127
  const logger = options.logger;
92
128
  const tag = options.logTag ?? 'SocketServer';
93
129
  const started = new Deferred<void>();
@@ -100,7 +136,7 @@ export function startSocketServer(options: SocketServerOptions, onClientConnecti
100
136
  const activeConnections: Array<{ connection: MessageConnection; adopterDisposable: Disposable }> = [];
101
137
 
102
138
  const netServer = net.createServer(socket => {
103
- const connection = createMessageConnection(new SocketMessageReader(socket), new SocketMessageWriter(socket));
139
+ const connection = createMessageConnection(new SocketMessageReader(socket), new SocketMessageWriter(socket), logger?.with(tag));
104
140
  const adopterDisposable = onClientConnection(connection);
105
141
  const entry = { connection, adopterDisposable };
106
142
  activeConnections.push(entry);
@@ -115,7 +151,7 @@ export function startSocketServer(options: SocketServerOptions, onClientConnecti
115
151
  try {
116
152
  adopterDisposable.dispose();
117
153
  } catch (err) {
118
- logger?.warn(`[${tag}] Adopter disposable threw on cleanup: ${(err as Error)?.message ?? err}`);
154
+ logger?.warn(`[${tag}] Adopter disposable threw on cleanup: ${describeErrorWithStack(err)}`);
119
155
  }
120
156
  connection.dispose();
121
157
  const idx = activeConnections.indexOf(entry);
@@ -128,7 +164,34 @@ export function startSocketServer(options: SocketServerOptions, onClientConnecti
128
164
  connection.listen();
129
165
  });
130
166
 
131
- netServer.listen(port);
167
+ // The workspace manager logs a failed initialization itself; a refused
168
+ // `workspace` throws before `initializing` is set.
169
+ let initializing = false;
170
+ let closed = false;
171
+ const begin = async (): Promise<void> => {
172
+ const initialization = initializeWorkspaceWithoutLsp(options.shared, options.workspace);
173
+ initializing = true;
174
+ await initialization;
175
+ initializing = false;
176
+ // A `close` during the bring-up has resolved `stopped` already.
177
+ if (closed) {
178
+ started.reject(new Error(`${tag} was closed before it listened`));
179
+ return;
180
+ }
181
+ netServer.listen(port, host);
182
+ };
183
+ begin().catch((err: unknown) => {
184
+ if (initializing) {
185
+ logger?.debug(`[${tag}] Startup failed: the workspace did not initialize. ${describeError(err)}`);
186
+ } else {
187
+ logger?.error(`[${tag}] Startup failed: ${describeErrorWithStack(err)}`);
188
+ }
189
+ started.reject(err);
190
+ stopped.resolve();
191
+ });
192
+ // `started` is always observed internally, as `startStdioServer`'s is, so a
193
+ // caller that closes early and ignores it cannot crash the process.
194
+ void started.promise.catch(() => undefined);
132
195
  netServer.on('listening', () => {
133
196
  const addressInfo = netServer.address();
134
197
  if (!addressInfo) {
@@ -144,11 +207,11 @@ export function startSocketServer(options: SocketServerOptions, onClientConnecti
144
207
  return;
145
208
  }
146
209
  handle.port = addressInfo.port;
147
- logger?.info(`[${tag}] Ready to accept new client requests on port: ${addressInfo.port}`);
210
+ logger?.info(`[${tag}] Ready to accept new client requests on ${addressInfo.address} port: ${addressInfo.port}`);
148
211
  started.resolve();
149
212
  });
150
213
  netServer.on('error', err => {
151
- logger?.error(`[${tag}] Error: ${err.message}`);
214
+ logger?.error(`[${tag}] Error: ${describeErrorWithStack(err)}`);
152
215
  started.reject(err);
153
216
  });
154
217
  netServer.on('close', () => {
@@ -158,7 +221,7 @@ export function startSocketServer(options: SocketServerOptions, onClientConnecti
158
221
  try {
159
222
  entry.adopterDisposable.dispose();
160
223
  } catch (err) {
161
- logger?.warn(`[${tag}] Adopter disposable threw on shutdown: ${(err as Error)?.message ?? err}`);
224
+ logger?.warn(`[${tag}] Adopter disposable threw on shutdown: ${describeErrorWithStack(err)}`);
162
225
  }
163
226
  entry.connection.dispose();
164
227
  }
@@ -173,6 +236,7 @@ export function startSocketServer(options: SocketServerOptions, onClientConnecti
173
236
  started: started.promise,
174
237
  stopped: stopped.promise,
175
238
  close(): void {
239
+ closed = true;
176
240
  netServer.close();
177
241
  }
178
242
  };
@@ -0,0 +1,94 @@
1
+ /********************************************************************************
2
+ * Copyright (c) 2026 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
+
10
+ import { DEFAULT_CPU_PROFILE_FILE_ENV } from '@hydranium/protocol';
11
+ import { mkdirSync, writeFileSync } from 'node:fs';
12
+ import { Session } from 'node:inspector';
13
+ import { dirname } from 'node:path';
14
+ import { isMainThread } from 'node:worker_threads';
15
+ import { expandLogFilePlaceholders } from '../langium/diagnostics/logger.js';
16
+
17
+ /**
18
+ * Marks the profile started on `globalThis` rather than in this module, since
19
+ * a second installed copy of the package loads its own module and would start
20
+ * a second session writing a profile of its own.
21
+ */
22
+ const CPU_PROFILE_STARTED: unique symbol = Symbol.for('@hydranium/core#startupCpuProfileStarted');
23
+ const processGlobal = globalThis as typeof globalThis & { [CPU_PROFILE_STARTED]?: true };
24
+
25
+ /**
26
+ * Start profiling this process when {@link DEFAULT_CPU_PROFILE_FILE_ENV} is
27
+ * set, and write the profile once, on `exit` or on SIGTERM. Called when
28
+ * `@hydranium/core/node` loads, so every Node head is profiled from before its
29
+ * workspace load; a no-op on a second call, from any copy of the package, and
30
+ * in a `worker_threads` worker.
31
+ *
32
+ * `--cpu-prof` is no substitute: it writes only on a normal exit, and SIGTERM
33
+ * ends a process without one. The SIGTERM listener re-raises the signal when it
34
+ * is the only one, so the process still ends by it; another listener keeps
35
+ * control of the ending. Samples accumulate for the life of the process, so
36
+ * this is for test runs, not a production server.
37
+ *
38
+ * A head in a worker is not profiled: a worker's session would write the main
39
+ * thread's file, since threads share the pid, no signal reaches it, and its
40
+ * `exit` listeners run neither when it is terminated nor when the process ends.
41
+ *
42
+ * A `ProfileCapture` window runs beside it in its own inspector session.
43
+ */
44
+ export function startCpuProfileFromEnv(): void {
45
+ const template = process.env[DEFAULT_CPU_PROFILE_FILE_ENV];
46
+ if (!template || !isMainThread || processGlobal[CPU_PROFILE_STARTED]) {
47
+ return;
48
+ }
49
+ processGlobal[CPU_PROFILE_STARTED] = true;
50
+ const session = new Session();
51
+ session.connect();
52
+ session.post('Profiler.enable');
53
+ session.post('Profiler.start');
54
+ let written = false;
55
+ // Synchronous throughout: an in-process session answers `post` before it
56
+ // returns, and nothing asynchronous runs after `exit`. The session is
57
+ // disconnected from the answer, so nothing here depends on that order.
58
+ const write = (): void => {
59
+ if (written) {
60
+ return;
61
+ }
62
+ written = true;
63
+ const file = expandLogFilePlaceholders(template);
64
+ session.post('Profiler.stop', (error, result) => {
65
+ try {
66
+ if (error) {
67
+ throw error;
68
+ }
69
+ mkdirSync(dirname(file), { recursive: true });
70
+ writeFileSync(file, JSON.stringify(result.profile));
71
+ } catch (err: unknown) {
72
+ process.stderr.write(
73
+ `[hydranium] Could not write the CPU profile to ${file}: ${err instanceof Error ? err.message : String(err)}\n`
74
+ );
75
+ }
76
+ session.disconnect();
77
+ });
78
+ };
79
+ process.once('exit', write);
80
+ // Registered until the write is done, not `once`: a `once` listener is gone
81
+ // before it runs, and with no listener left the default action ends the
82
+ // process on a second SIGTERM, which a host ending its process tree sends
83
+ // while the write is still running. Prepended: a `once` listener ahead of
84
+ // this one has removed itself by the time this counts, which would re-raise
85
+ // into its unfinished shutdown.
86
+ const writeOnSigterm = (): void => {
87
+ write();
88
+ process.removeListener('SIGTERM', writeOnSigterm);
89
+ if (process.listenerCount('SIGTERM') === 0) {
90
+ process.kill(process.pid, 'SIGTERM');
91
+ }
92
+ };
93
+ process.prependListener('SIGTERM', writeOnSigterm);
94
+ }
@@ -7,13 +7,12 @@
7
7
  * SPDX-License-Identifier: MIT
8
8
  ********************************************************************************/
9
9
 
10
- import { Deferred } from '@hydranium/langium';
11
- import type { Disposable, Logger } from '@hydranium/protocol';
10
+ import { Deferred, type Disposable, type Logger, describeError, describeErrorWithStack } from '@hydranium/protocol';
12
11
  import type { MessageConnection } from 'vscode-jsonrpc';
13
12
  import { createMessageConnection, StreamMessageReader, StreamMessageWriter } from 'vscode-jsonrpc/node';
14
13
  import type { IntegratedServer } from '../launcher/integrated-server.js';
15
14
  import type { ServerSharedServicesMinimal } from '../langium/shared-services.js';
16
- import { initializeWorkspaceProgrammatically, type WorkspaceFolderInput } from '../langium/workspace/initialize-workspace.js';
15
+ import { initializeWorkspaceWithoutLsp, type WorkspaceFolderInput } from '../langium/workspace/initialize-workspace.js';
17
16
 
18
17
  /** Construction-time options for {@link startStdioServer}. */
19
18
  export interface StdioServerOptions {
@@ -24,16 +23,17 @@ export interface StdioServerOptions {
24
23
  */
25
24
  readonly shared: ServerSharedServicesMinimal;
26
25
  /**
27
- * Workspace root(s) to initialize — a filesystem path or a `URI`. Omit when
28
- * the caller has already initialized the workspace itself, in which case the
29
- * launcher only wires the transport.
26
+ * Workspace root(s) to initialize — a filesystem path or a `URI`. Required
27
+ * when no LSP head is composed, refused beside one: see
28
+ * {@link initializeWorkspaceWithoutLsp}.
30
29
  */
31
30
  readonly workspace?: WorkspaceFolderInput | ReadonlyArray<WorkspaceFolderInput>;
32
31
  /**
33
- * Optional logger for lifecycle lines. Omitted means silent — note that a
34
- * logger writing to **stdout** would corrupt this head's protocol stream, so
35
- * anything passed here must sink elsewhere. The framework's own `LspLogger`
36
- * writes to stderr when no LSP connection is bound, which is correct here.
32
+ * Optional logger for lifecycle lines and the connection's protocol
33
+ * faults. Omitted means silent — note that a logger writing to **stdout**
34
+ * would corrupt this head's protocol stream, so anything passed here must
35
+ * sink elsewhere. The framework's own `LspLogger` writes to stderr when no
36
+ * LSP connection is bound, which is correct here.
37
37
  */
38
38
  readonly logger?: Logger;
39
39
  /** Tag included in lifecycle log lines. Default `"StdioServer"`. */
@@ -66,11 +66,10 @@ export interface StartedStdioServer extends IntegratedServer {
66
66
 
67
67
  /**
68
68
  * Start a **stdio**-based protocol head — the transport `hydranium-cli` speaks,
69
- * since `query` / `save` / `projects` / `watch` all spawn a server command and
70
- * drive JSON-RPC over its stdin/stdout. The socket counterpart is
71
- * `startSocketServer`; the two differ more
72
- * than the transport swap suggests, and the differences are the reason this is
73
- * a launcher rather than four lines in each adopter's entry.
69
+ * since its data-server subcommands spawn a server command and drive JSON-RPC
70
+ * over its stdin/stdout. The socket counterpart is `startSocketServer`; the two
71
+ * differ more than the transport swap suggests, and the differences are the
72
+ * reason this is a launcher rather than four lines in each adopter's entry.
74
73
  *
75
74
  * **One client, not N.** A socket head accepts arbitrarily many connections and
76
75
  * tracks them; a stdio head has exactly one peer — the process that spawned it
@@ -101,7 +100,8 @@ export function startStdioServer(
101
100
 
102
101
  const connection = createMessageConnection(
103
102
  new StreamMessageReader(options.input ?? process.stdin),
104
- new StreamMessageWriter(options.output ?? process.stdout)
103
+ new StreamMessageWriter(options.output ?? process.stdout),
104
+ logger?.with(tag)
105
105
  );
106
106
  const adopterDisposable = onConnection(connection);
107
107
 
@@ -114,18 +114,24 @@ export function startStdioServer(
114
114
  try {
115
115
  adopterDisposable.dispose();
116
116
  } catch (err: unknown) {
117
- logger?.warn(`[${tag}] Adopter disposable threw on cleanup: ${err instanceof Error ? err.message : String(err)}`);
117
+ logger?.warn(`[${tag}] Adopter disposable threw on cleanup: ${describeErrorWithStack(err)}`);
118
118
  }
119
119
  connection.dispose();
120
120
  stopped.resolve();
121
121
  };
122
122
  connection.onClose(() => close());
123
123
 
124
+ // The workspace manager logs a failed initialization itself; a refused
125
+ // `workspace` throws before `initializing` is set.
126
+ let initializing = false;
124
127
  const begin = async (): Promise<void> => {
128
+ const initialization = initializeWorkspaceWithoutLsp(options.shared, options.workspace);
129
+ initializing = true;
125
130
  if (options.workspace !== undefined) {
126
131
  logger?.info(`[${tag}] Initializing workspace`);
127
- await initializeWorkspaceProgrammatically(options.shared, options.workspace);
128
132
  }
133
+ await initialization;
134
+ initializing = false;
129
135
  // Only now attach the reader — see the ordering note in the doc above.
130
136
  connection.listen();
131
137
  logger?.info(`[${tag}] Listening on stdio`);
@@ -137,7 +143,11 @@ export function startStdioServer(
137
143
  // A failed startup must not leave a half-live head: report it on
138
144
  // `started` and tear the connection down rather than listening over an
139
145
  // uninitialized workspace.
140
- logger?.error(`[${tag}] Startup failed: ${err instanceof Error ? err.message : String(err)}`);
146
+ if (initializing) {
147
+ logger?.debug(`[${tag}] Startup failed: the workspace did not initialize. ${describeError(err)}`);
148
+ } else {
149
+ logger?.error(`[${tag}] Startup failed: ${describeErrorWithStack(err)}`);
150
+ }
141
151
  started.reject(err);
142
152
  close();
143
153
  }
@@ -48,7 +48,7 @@ export interface ValidationCounts {
48
48
  export interface WorkspaceValidationResult {
49
49
  /** Number of `LangiumDocument`s in the built workspace. */
50
50
  documents: number;
51
- /** Every problem found, grouped contiguously by document, in the order the documents were given. */
51
+ /** Every problem found, grouped contiguously by document, in the order the documents were given, and by position within one. */
52
52
  findings: ValidationFinding[];
53
53
  /** Per-severity totals over {@link findings}. */
54
54
  counts: ValidationCounts;
@@ -94,7 +94,13 @@ export function collectValidationResult(
94
94
  const counts: ValidationCounts = { error: 0, warning: 0, info: 0, hint: 0 };
95
95
  for (const document of documents) {
96
96
  const relativeUri = wsRelativePath(document.uri);
97
- for (const diagnostic of (document.diagnostics ?? []) as Diagnostic[]) {
97
+ // Langium appends the lexer, parser, linker and validator diagnostics phase after phase,
98
+ // so a reader scanning a file top to bottom needs them sorted. The sort is stable, so
99
+ // diagnostics at one position keep the order their phases produced them in.
100
+ const diagnostics = [...((document.diagnostics ?? []) as Diagnostic[])].sort(
101
+ (a, b) => a.range.start.line - b.range.start.line || a.range.start.character - b.range.start.character
102
+ );
103
+ for (const diagnostic of diagnostics) {
98
104
  const severity = severityLabel(diagnostic.severity);
99
105
  counts[severity] += 1;
100
106
  findings.push({
@@ -96,7 +96,7 @@ export function documentUriPolicyConformance(
96
96
  // Computed here rather than tallied from the assertions above, so the
97
97
  // guard does not depend on the runner executing tests in declaration
98
98
  // order (a `--shuffle` run would otherwise read it as zero).
99
- it(`at least one sample URI is loadable (checked: ${sampleUris.join(', ')})`, () => {
99
+ it(`at least one sample URI is loadable among ${sampleUris.join(', ')}`, () => {
100
100
  const loadable = sampleUris.filter(uri => makePolicy().loadUri(uri) !== undefined);
101
101
  expect(loadable.length > 0).toBe(true);
102
102
  });
@@ -9,6 +9,7 @@
9
9
 
10
10
  import { DocumentState, type AstNode, type AstReflection, type LangiumDocument, UriUtils, type URI } from '@hydranium/langium';
11
11
  import { buildAstNode } from '../langium/ast-extension/ast-node-builder.js';
12
+ import { type AstDiagnostic } from '../langium/validation/document-validator.js';
12
13
 
13
14
  /**
14
15
  * Build a typed AST-node fixture for unit tests.
@@ -104,7 +105,7 @@ function stringifyFakeRoot(root: unknown): string {
104
105
  * staging. Override via `options.state` for tests that gate on earlier
105
106
  * phases.
106
107
  */
107
- export function makeFakeDocument<TAst extends AstNode = AstNode, TDiagnostic = unknown>(
108
+ export function makeFakeDocument<TAst extends AstNode = AstNode, TDiagnostic extends AstDiagnostic = AstDiagnostic>(
108
109
  uri: string | URI,
109
110
  root: TAst,
110
111
  options: FakeDocumentOptions<TAst, TDiagnostic> = {}
@@ -14,7 +14,7 @@
14
14
  * builders, the snapshot and URI-policy conformance primitives, the
15
15
  * structured-write pipeline driver, and a re-export of `langium/test`.
16
16
  *
17
- * Neutrality is gated (`scripts/check-neutral-bundles.mjs`). The test support
17
+ * Neutrality is gated (`scripts/check-neutral-bundles.mts`). The test support
18
18
  * that needs a real filesystem or a Node stream transport — the scratch
19
19
  * workspace, the golden corpus, the LSP transport and its harness — lives at
20
20
  * `@hydranium/core/testing/node`, on the same rule the package surface uses:
@@ -26,6 +26,7 @@ export * from './document-uri-policy-conformance.js';
26
26
  export * from './fake-description.js';
27
27
  export * from './fake-document.js';
28
28
  export * from './fake-reflection.js';
29
+ // oxlint-disable-next-line import/export -- misreads export * from an npm package: https://github.com/oxc-project/oxc/pull/26872
29
30
  export * from './langium-test-helpers.js';
30
31
  export * from './make-noop-language-services.js';
31
32
  export * from './make-noop-shared-services.js';
@@ -23,4 +23,5 @@
23
23
  * contracts stays Langium upstream, so a rename there surfaces here rather than
24
24
  * being absorbed by a hand-maintained list.
25
25
  */
26
+ // oxlint-disable-next-line import/export -- misreads export * from an npm package: https://github.com/oxc-project/oxc/pull/26872
26
27
  export * from '@hydranium/langium/test';