@hydranium/core 1.0.0-next.32 → 1.0.0-next.321

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 (782) 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 +256 -124
  19. package/lib/documents/ast-document-manager.d.ts.map +1 -1
  20. package/lib/documents/ast-document-manager.js +293 -132
  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 +436 -282
  51. package/lib/documents/hydranium-text-documents.d.ts.map +1 -1
  52. package/lib/documents/hydranium-text-documents.js +886 -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 +4 -0
  75. package/lib/index.d.ts.map +1 -1
  76. package/lib/index.js +7 -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 +83 -44
  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 +142 -0
  114. package/lib/langium/diagnostics/console-tee.js.map +1 -0
  115. package/lib/langium/diagnostics/format-log-arg.d.ts +18 -0
  116. package/lib/langium/diagnostics/format-log-arg.d.ts.map +1 -0
  117. package/lib/langium/diagnostics/format-log-arg.js +36 -0
  118. package/lib/langium/diagnostics/format-log-arg.js.map +1 -0
  119. package/lib/langium/diagnostics/hydranium-langium-profiler.d.ts +9 -20
  120. package/lib/langium/diagnostics/hydranium-langium-profiler.d.ts.map +1 -1
  121. package/lib/langium/diagnostics/hydranium-langium-profiler.js +15 -24
  122. package/lib/langium/diagnostics/hydranium-langium-profiler.js.map +1 -1
  123. package/lib/langium/diagnostics/log-preamble.js +1 -1
  124. package/lib/langium/diagnostics/log-preamble.js.map +1 -1
  125. package/lib/langium/diagnostics/logger.d.ts +25 -6
  126. package/lib/langium/diagnostics/logger.d.ts.map +1 -1
  127. package/lib/langium/diagnostics/logger.js +49 -17
  128. package/lib/langium/diagnostics/logger.js.map +1 -1
  129. package/lib/langium/diagnostics/lsp-logger.d.ts +17 -0
  130. package/lib/langium/diagnostics/lsp-logger.d.ts.map +1 -1
  131. package/lib/langium/diagnostics/lsp-logger.js +68 -45
  132. package/lib/langium/diagnostics/lsp-logger.js.map +1 -1
  133. package/lib/langium/diagnostics/server-tracer.d.ts.map +1 -1
  134. package/lib/langium/diagnostics/server-tracer.js.map +1 -1
  135. package/lib/langium/document-builder/build-pipeline-integration.d.ts +21 -1
  136. package/lib/langium/document-builder/build-pipeline-integration.d.ts.map +1 -1
  137. package/lib/langium/document-builder/build-pipeline-integration.js +28 -30
  138. package/lib/langium/document-builder/build-pipeline-integration.js.map +1 -1
  139. package/lib/langium/document-builder/build-session.d.ts +6 -5
  140. package/lib/langium/document-builder/build-session.d.ts.map +1 -1
  141. package/lib/langium/document-builder/build-session.js +5 -5
  142. package/lib/langium/document-builder/build-session.js.map +1 -1
  143. package/lib/langium/document-builder/document-builder.d.ts +283 -41
  144. package/lib/langium/document-builder/document-builder.d.ts.map +1 -1
  145. package/lib/langium/document-builder/document-builder.js +448 -78
  146. package/lib/langium/document-builder/document-builder.js.map +1 -1
  147. package/lib/langium/documentation/comment-provider.d.ts.map +1 -1
  148. package/lib/langium/documentation/comment-provider.js.map +1 -1
  149. package/lib/langium/integration-services.d.ts +40 -24
  150. package/lib/langium/integration-services.d.ts.map +1 -1
  151. package/lib/langium/integration-services.js +7 -4
  152. package/lib/langium/integration-services.js.map +1 -1
  153. package/lib/langium/integrity/integrity-rule.d.ts +17 -8
  154. package/lib/langium/integrity/integrity-rule.d.ts.map +1 -1
  155. package/lib/langium/integrity/integrity-rule.js.map +1 -1
  156. package/lib/langium/integrity/integrity-service.d.ts +95 -27
  157. package/lib/langium/integrity/integrity-service.d.ts.map +1 -1
  158. package/lib/langium/integrity/integrity-service.js +303 -63
  159. package/lib/langium/integrity/integrity-service.js.map +1 -1
  160. package/lib/langium/keys/containment.d.ts +64 -0
  161. package/lib/langium/keys/containment.d.ts.map +1 -0
  162. package/lib/langium/keys/containment.js +53 -0
  163. package/lib/langium/keys/containment.js.map +1 -0
  164. package/lib/langium/keys/index.d.ts +1 -0
  165. package/lib/langium/keys/index.d.ts.map +1 -1
  166. package/lib/langium/keys/index.js +1 -0
  167. package/lib/langium/keys/index.js.map +1 -1
  168. package/lib/langium/keys/name-based-key-provider.d.ts +4 -0
  169. package/lib/langium/keys/name-based-key-provider.d.ts.map +1 -1
  170. package/lib/langium/keys/name-based-key-provider.js +4 -0
  171. package/lib/langium/keys/name-based-key-provider.js.map +1 -1
  172. package/lib/langium/keys/positional-key-provider.d.ts.map +1 -1
  173. package/lib/langium/keys/positional-key-provider.js.map +1 -1
  174. package/lib/langium/labeling/label-provider.d.ts.map +1 -1
  175. package/lib/langium/labeling/label-provider.js.map +1 -1
  176. package/lib/langium/language-module.d.ts +30 -5
  177. package/lib/langium/language-module.d.ts.map +1 -1
  178. package/lib/langium/language-module.js +18 -4
  179. package/lib/langium/language-module.js.map +1 -1
  180. package/lib/langium/model-service/client-session.d.ts +383 -0
  181. package/lib/langium/model-service/client-session.d.ts.map +1 -0
  182. package/lib/langium/model-service/client-session.js +455 -0
  183. package/lib/langium/model-service/client-session.js.map +1 -0
  184. package/lib/langium/model-service/index.d.ts +2 -0
  185. package/lib/langium/model-service/index.d.ts.map +1 -1
  186. package/lib/langium/model-service/index.js +2 -0
  187. package/lib/langium/model-service/index.js.map +1 -1
  188. package/lib/langium/model-service/model-events.d.ts +66 -0
  189. package/lib/langium/model-service/model-events.d.ts.map +1 -0
  190. package/lib/langium/model-service/model-events.js +10 -0
  191. package/lib/langium/model-service/model-events.js.map +1 -0
  192. package/lib/langium/model-service/model-service.d.ts +455 -290
  193. package/lib/langium/model-service/model-service.d.ts.map +1 -1
  194. package/lib/langium/model-service/model-service.js +571 -458
  195. package/lib/langium/model-service/model-service.js.map +1 -1
  196. package/lib/langium/module.d.ts +141 -40
  197. package/lib/langium/module.d.ts.map +1 -1
  198. package/lib/langium/module.js +52 -40
  199. package/lib/langium/module.js.map +1 -1
  200. package/lib/langium/naming/name-provider.d.ts +32 -7
  201. package/lib/langium/naming/name-provider.d.ts.map +1 -1
  202. package/lib/langium/naming/name-provider.js +10 -4
  203. package/lib/langium/naming/name-provider.js.map +1 -1
  204. package/lib/langium/naming/name-separator-validation.d.ts.map +1 -1
  205. package/lib/langium/project/abstract-project-manager.d.ts.map +1 -1
  206. package/lib/langium/project/abstract-project-manager.js +13 -6
  207. package/lib/langium/project/abstract-project-manager.js.map +1 -1
  208. package/lib/langium/project/project-change-event.d.ts +2 -2
  209. package/lib/langium/project/single-project-manager.d.ts.map +1 -1
  210. package/lib/langium/project/single-project-manager.js.map +1 -1
  211. package/lib/langium/residency/cst-residency-service.d.ts +38 -14
  212. package/lib/langium/residency/cst-residency-service.d.ts.map +1 -1
  213. package/lib/langium/residency/cst-residency-service.js +24 -58
  214. package/lib/langium/residency/cst-residency-service.js.map +1 -1
  215. package/lib/langium/scope/ast-node-description-provider.d.ts.map +1 -1
  216. package/lib/langium/scope/ast-node-description-provider.js.map +1 -1
  217. package/lib/langium/scope/fallback-scope.d.ts +27 -0
  218. package/lib/langium/scope/fallback-scope.d.ts.map +1 -0
  219. package/lib/langium/scope/fallback-scope.js +35 -0
  220. package/lib/langium/scope/fallback-scope.js.map +1 -0
  221. package/lib/langium/scope/hydranium-scope-computation.d.ts +21 -18
  222. package/lib/langium/scope/hydranium-scope-computation.d.ts.map +1 -1
  223. package/lib/langium/scope/hydranium-scope-computation.js +38 -39
  224. package/lib/langium/scope/hydranium-scope-computation.js.map +1 -1
  225. package/lib/langium/scope/hydranium-scope-provider.d.ts +29 -11
  226. package/lib/langium/scope/hydranium-scope-provider.d.ts.map +1 -1
  227. package/lib/langium/scope/hydranium-scope-provider.js +37 -15
  228. package/lib/langium/scope/hydranium-scope-provider.js.map +1 -1
  229. package/lib/langium/scope/index.d.ts +1 -0
  230. package/lib/langium/scope/index.d.ts.map +1 -1
  231. package/lib/langium/scope/index.js +1 -0
  232. package/lib/langium/scope/index.js.map +1 -1
  233. package/lib/langium/scope/reference-builder.d.ts.map +1 -1
  234. package/lib/langium/scope/reference-builder.js.map +1 -1
  235. package/lib/langium/scope/reference-candidate-provider.d.ts +6 -5
  236. package/lib/langium/scope/reference-candidate-provider.d.ts.map +1 -1
  237. package/lib/langium/scope/reference-candidate-provider.js +3 -2
  238. package/lib/langium/scope/reference-candidate-provider.js.map +1 -1
  239. package/lib/langium/scope/scope-extension-service.d.ts +41 -37
  240. package/lib/langium/scope/scope-extension-service.d.ts.map +1 -1
  241. package/lib/langium/scope/scope-extension-service.js +57 -29
  242. package/lib/langium/scope/scope-extension-service.js.map +1 -1
  243. package/lib/langium/scope/scoped-ast-node-description.d.ts +1 -3
  244. package/lib/langium/scope/scoped-ast-node-description.d.ts.map +1 -1
  245. package/lib/langium/scope/scoped-ast-node-description.js +1 -3
  246. package/lib/langium/scope/scoped-ast-node-description.js.map +1 -1
  247. package/lib/langium/serialization/abstract-serializer.d.ts +38 -27
  248. package/lib/langium/serialization/abstract-serializer.d.ts.map +1 -1
  249. package/lib/langium/serialization/abstract-serializer.js +54 -30
  250. package/lib/langium/serialization/abstract-serializer.js.map +1 -1
  251. package/lib/langium/serialization/json-serializer.d.ts +8 -1
  252. package/lib/langium/serialization/json-serializer.d.ts.map +1 -1
  253. package/lib/langium/serialization/json-serializer.js +13 -3
  254. package/lib/langium/serialization/json-serializer.js.map +1 -1
  255. package/lib/langium/serialization/serializer.d.ts +1 -1
  256. package/lib/langium/serialization/yaml-serializer.d.ts +4 -0
  257. package/lib/langium/serialization/yaml-serializer.d.ts.map +1 -1
  258. package/lib/langium/serialization/yaml-serializer.js +4 -0
  259. package/lib/langium/serialization/yaml-serializer.js.map +1 -1
  260. package/lib/langium/service-registry.d.ts +29 -1
  261. package/lib/langium/service-registry.d.ts.map +1 -1
  262. package/lib/langium/service-registry.js +37 -0
  263. package/lib/langium/service-registry.js.map +1 -1
  264. package/lib/langium/shared-services.d.ts +13 -7
  265. package/lib/langium/shared-services.d.ts.map +1 -1
  266. package/lib/langium/shared-services.js.map +1 -1
  267. package/lib/langium/single-langium-copy.d.ts +22 -0
  268. package/lib/langium/single-langium-copy.d.ts.map +1 -0
  269. package/lib/langium/single-langium-copy.js +36 -0
  270. package/lib/langium/single-langium-copy.js.map +1 -0
  271. package/lib/langium/transfer/transfer-encoder.d.ts +86 -37
  272. package/lib/langium/transfer/transfer-encoder.d.ts.map +1 -1
  273. package/lib/langium/transfer/transfer-encoder.js +36 -25
  274. package/lib/langium/transfer/transfer-encoder.js.map +1 -1
  275. package/lib/langium/trivia/comment-preserver.d.ts +423 -0
  276. package/lib/langium/trivia/comment-preserver.d.ts.map +1 -0
  277. package/lib/langium/trivia/comment-preserver.js +906 -0
  278. package/lib/langium/trivia/comment-preserver.js.map +1 -0
  279. package/lib/langium/trivia/document-ending-preserver.d.ts +51 -0
  280. package/lib/langium/trivia/document-ending-preserver.d.ts.map +1 -0
  281. package/lib/langium/trivia/document-ending-preserver.js +62 -0
  282. package/lib/langium/trivia/document-ending-preserver.js.map +1 -0
  283. package/lib/langium/trivia/index.d.ts +14 -0
  284. package/lib/langium/trivia/index.d.ts.map +1 -0
  285. package/lib/langium/trivia/index.js +14 -0
  286. package/lib/langium/trivia/index.js.map +1 -0
  287. package/lib/langium/trivia/trivia-contribution.d.ts +37 -0
  288. package/lib/langium/trivia/trivia-contribution.d.ts.map +1 -0
  289. package/lib/langium/trivia/trivia-contribution.js +10 -0
  290. package/lib/langium/trivia/trivia-contribution.js.map +1 -0
  291. package/lib/langium/trivia/trivia-preserver.d.ts +52 -0
  292. package/lib/langium/trivia/trivia-preserver.d.ts.map +1 -0
  293. package/lib/langium/trivia/trivia-preserver.js +10 -0
  294. package/lib/langium/trivia/trivia-preserver.js.map +1 -0
  295. package/lib/langium/trivia/trivia-service.d.ts +70 -0
  296. package/lib/langium/trivia/trivia-service.d.ts.map +1 -0
  297. package/lib/langium/trivia/trivia-service.js +56 -0
  298. package/lib/langium/trivia/trivia-service.js.map +1 -0
  299. package/lib/langium/update-rewrite/normalize-empty-strings.d.ts.map +1 -1
  300. package/lib/langium/update-rewrite/update-rewrite-service.d.ts +1 -1
  301. package/lib/langium/update-rewrite/update-rewrite-service.d.ts.map +1 -1
  302. package/lib/langium/update-rewrite/update-rewrite-service.js.map +1 -1
  303. package/lib/langium/update-rewrite/update-rewrite.d.ts +1 -1
  304. package/lib/langium/validation/document-validator.d.ts +216 -10
  305. package/lib/langium/validation/document-validator.d.ts.map +1 -1
  306. package/lib/langium/validation/document-validator.js +353 -8
  307. package/lib/langium/validation/document-validator.js.map +1 -1
  308. package/lib/langium/validation/validation-contribution-collector.d.ts +9 -1
  309. package/lib/langium/validation/validation-contribution-collector.d.ts.map +1 -1
  310. package/lib/langium/validation/validation-contribution-collector.js +1 -1
  311. package/lib/langium/validation/validation-contribution-collector.js.map +1 -1
  312. package/lib/langium/workspace/document-uri-policy.d.ts +24 -15
  313. package/lib/langium/workspace/document-uri-policy.d.ts.map +1 -1
  314. package/lib/langium/workspace/document-uri-policy.js +22 -13
  315. package/lib/langium/workspace/document-uri-policy.js.map +1 -1
  316. package/lib/langium/workspace/file-not-found.d.ts +23 -0
  317. package/lib/langium/workspace/file-not-found.d.ts.map +1 -0
  318. package/lib/langium/workspace/file-not-found.js +31 -0
  319. package/lib/langium/workspace/file-not-found.js.map +1 -0
  320. package/lib/langium/workspace/file-system-provider.d.ts +167 -8
  321. package/lib/langium/workspace/file-system-provider.d.ts.map +1 -1
  322. package/lib/langium/workspace/file-system-provider.js +115 -13
  323. package/lib/langium/workspace/file-system-provider.js.map +1 -1
  324. package/lib/langium/workspace/hydranium-langium-document-factory.d.ts +31 -1
  325. package/lib/langium/workspace/hydranium-langium-document-factory.d.ts.map +1 -1
  326. package/lib/langium/workspace/hydranium-langium-document-factory.js +54 -0
  327. package/lib/langium/workspace/hydranium-langium-document-factory.js.map +1 -1
  328. package/lib/langium/workspace/hydranium-workspace-lock.d.ts +43 -1
  329. package/lib/langium/workspace/hydranium-workspace-lock.d.ts.map +1 -1
  330. package/lib/langium/workspace/hydranium-workspace-lock.js +58 -1
  331. package/lib/langium/workspace/hydranium-workspace-lock.js.map +1 -1
  332. package/lib/langium/workspace/hydranium-workspace-manager.d.ts +113 -21
  333. package/lib/langium/workspace/hydranium-workspace-manager.d.ts.map +1 -1
  334. package/lib/langium/workspace/hydranium-workspace-manager.js +197 -31
  335. package/lib/langium/workspace/hydranium-workspace-manager.js.map +1 -1
  336. package/lib/langium/workspace/in-memory-file-system-provider.d.ts +26 -9
  337. package/lib/langium/workspace/in-memory-file-system-provider.d.ts.map +1 -1
  338. package/lib/langium/workspace/in-memory-file-system-provider.js +45 -22
  339. package/lib/langium/workspace/in-memory-file-system-provider.js.map +1 -1
  340. package/lib/langium/workspace/index-manager.d.ts.map +1 -1
  341. package/lib/langium/workspace/index-manager.js.map +1 -1
  342. package/lib/langium/workspace/index.d.ts +1 -0
  343. package/lib/langium/workspace/index.d.ts.map +1 -1
  344. package/lib/langium/workspace/index.js +1 -0
  345. package/lib/langium/workspace/index.js.map +1 -1
  346. package/lib/langium/workspace/initialize-workspace.d.ts +40 -3
  347. package/lib/langium/workspace/initialize-workspace.d.ts.map +1 -1
  348. package/lib/langium/workspace/initialize-workspace.js +68 -3
  349. package/lib/langium/workspace/initialize-workspace.js.map +1 -1
  350. package/lib/langium/workspace/langium-documents.d.ts +7 -0
  351. package/lib/langium/workspace/langium-documents.d.ts.map +1 -1
  352. package/lib/langium/workspace/langium-documents.js +18 -1
  353. package/lib/langium/workspace/langium-documents.js.map +1 -1
  354. package/lib/langium/workspace/persistent-file-system-provider.d.ts +16 -10
  355. package/lib/langium/workspace/persistent-file-system-provider.d.ts.map +1 -1
  356. package/lib/langium/workspace/persistent-file-system-provider.js +25 -13
  357. package/lib/langium/workspace/persistent-file-system-provider.js.map +1 -1
  358. package/lib/langium/workspace/self-save-registry.d.ts +84 -0
  359. package/lib/langium/workspace/self-save-registry.d.ts.map +1 -0
  360. package/lib/{documents → langium/workspace}/self-save-registry.js +33 -22
  361. package/lib/langium/workspace/self-save-registry.js.map +1 -0
  362. package/lib/langium/workspace/virtual-document.d.ts +55 -21
  363. package/lib/langium/workspace/virtual-document.d.ts.map +1 -1
  364. package/lib/langium/workspace/virtual-document.js +87 -24
  365. package/lib/langium/workspace/virtual-document.js.map +1 -1
  366. package/lib/langium/workspace/write-lock-scope.d.ts +22 -10
  367. package/lib/langium/workspace/write-lock-scope.d.ts.map +1 -1
  368. package/lib/langium/workspace/write-lock-scope.js +15 -5
  369. package/lib/langium/workspace/write-lock-scope.js.map +1 -1
  370. package/lib/launcher/integrated-server.d.ts +3 -1
  371. package/lib/launcher/integrated-server.d.ts.map +1 -1
  372. package/lib/locale/server-locale.d.ts +29 -5
  373. package/lib/locale/server-locale.d.ts.map +1 -1
  374. package/lib/locale/server-locale.js +12 -2
  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/hydranium-document-update-handler.d.ts +126 -82
  389. package/lib/lsp/hydranium-document-update-handler.d.ts.map +1 -1
  390. package/lib/lsp/hydranium-document-update-handler.js +235 -102
  391. package/lib/lsp/hydranium-document-update-handler.js.map +1 -1
  392. package/lib/lsp/index.d.ts +4 -1
  393. package/lib/lsp/index.d.ts.map +1 -1
  394. package/lib/lsp/index.js +4 -1
  395. package/lib/lsp/index.js.map +1 -1
  396. package/lib/lsp/lsp-latency.d.ts +39 -0
  397. package/lib/lsp/lsp-latency.d.ts.map +1 -0
  398. package/lib/lsp/lsp-latency.js +58 -0
  399. package/lib/lsp/lsp-latency.js.map +1 -0
  400. package/lib/lsp/save-text-document.d.ts +31 -0
  401. package/lib/lsp/save-text-document.d.ts.map +1 -0
  402. package/lib/lsp/save-text-document.js +52 -0
  403. package/lib/lsp/save-text-document.js.map +1 -0
  404. package/lib/lsp/semantic-token-provider.d.ts +34 -1
  405. package/lib/lsp/semantic-token-provider.d.ts.map +1 -1
  406. package/lib/lsp/semantic-token-provider.js +55 -8
  407. package/lib/lsp/semantic-token-provider.js.map +1 -1
  408. package/lib/lsp/shared-module.d.ts +4 -8
  409. package/lib/lsp/shared-module.d.ts.map +1 -1
  410. package/lib/lsp/shared-module.js.map +1 -1
  411. package/lib/lsp/start-language-server.d.ts +11 -7
  412. package/lib/lsp/start-language-server.d.ts.map +1 -1
  413. package/lib/lsp/start-language-server.js +18 -7
  414. package/lib/lsp/start-language-server.js.map +1 -1
  415. package/lib/messages/carriers.d.ts +11 -6
  416. package/lib/messages/carriers.d.ts.map +1 -1
  417. package/lib/messages/carriers.js +14 -6
  418. package/lib/messages/carriers.js.map +1 -1
  419. package/lib/messages/index.d.ts +2 -2
  420. package/lib/messages/index.d.ts.map +1 -1
  421. package/lib/messages/index.js +2 -2
  422. package/lib/messages/index.js.map +1 -1
  423. package/lib/messages/renderer.d.ts +32 -7
  424. package/lib/messages/renderer.d.ts.map +1 -1
  425. package/lib/messages/renderer.js +7 -1
  426. package/lib/messages/renderer.js.map +1 -1
  427. package/lib/node/event-loop-monitor.d.ts.map +1 -1
  428. package/lib/node/event-loop-monitor.js +2 -1
  429. package/lib/node/event-loop-monitor.js.map +1 -1
  430. package/lib/node/heap-ceiling.d.ts +61 -0
  431. package/lib/node/heap-ceiling.d.ts.map +1 -0
  432. package/lib/node/heap-ceiling.js +72 -0
  433. package/lib/node/heap-ceiling.js.map +1 -0
  434. package/lib/node/index.d.ts +1 -1
  435. package/lib/node/index.d.ts.map +1 -1
  436. package/lib/node/index.js +5 -1
  437. package/lib/node/index.js.map +1 -1
  438. package/lib/node/latency-from-env.d.ts +1 -1
  439. package/lib/node/latency-from-env.js +1 -1
  440. package/lib/node/lint-grammar.js.map +1 -1
  441. package/lib/node/log-file-sink.d.ts +3 -2
  442. package/lib/node/log-file-sink.d.ts.map +1 -1
  443. package/lib/node/log-file-sink.js +6 -2
  444. package/lib/node/log-file-sink.js.map +1 -1
  445. package/lib/node/log-preamble-node.d.ts +5 -3
  446. package/lib/node/log-preamble-node.d.ts.map +1 -1
  447. package/lib/node/log-preamble-node.js +13 -10
  448. package/lib/node/log-preamble-node.js.map +1 -1
  449. package/lib/node/measure-memory.d.ts.map +1 -1
  450. package/lib/node/measure-memory.js +5 -4
  451. package/lib/node/measure-memory.js.map +1 -1
  452. package/lib/node/memory-monitor.d.ts +2 -2
  453. package/lib/node/memory-monitor.d.ts.map +1 -1
  454. package/lib/node/memory-monitor.js +9 -10
  455. package/lib/node/memory-monitor.js.map +1 -1
  456. package/lib/node/node-file-system-provider.d.ts +67 -9
  457. package/lib/node/node-file-system-provider.d.ts.map +1 -1
  458. package/lib/node/node-file-system-provider.js +198 -53
  459. package/lib/node/node-file-system-provider.js.map +1 -1
  460. package/lib/node/profile-capture.d.ts +12 -4
  461. package/lib/node/profile-capture.d.ts.map +1 -1
  462. package/lib/node/profile-capture.js +8 -6
  463. package/lib/node/profile-capture.js.map +1 -1
  464. package/lib/node/profile-digest.js.map +1 -1
  465. package/lib/node/profiling-run.d.ts +13 -3
  466. package/lib/node/profiling-run.d.ts.map +1 -1
  467. package/lib/node/profiling-run.js +17 -8
  468. package/lib/node/profiling-run.js.map +1 -1
  469. package/lib/node/rename-over-open-readers.d.ts +61 -0
  470. package/lib/node/rename-over-open-readers.d.ts.map +1 -0
  471. package/lib/node/rename-over-open-readers.js +80 -0
  472. package/lib/node/rename-over-open-readers.js.map +1 -0
  473. package/lib/node/server-diagnostics.js +1 -1
  474. package/lib/node/server-diagnostics.js.map +1 -1
  475. package/lib/node/server-state-snapshot.js +4 -4
  476. package/lib/node/server-state-snapshot.js.map +1 -1
  477. package/lib/node/socket-launcher.d.ts +43 -7
  478. package/lib/node/socket-launcher.d.ts.map +1 -1
  479. package/lib/node/socket-launcher.js +42 -7
  480. package/lib/node/socket-launcher.js.map +1 -1
  481. package/lib/node/startup-cpu-profile.d.ts +29 -0
  482. package/lib/node/startup-cpu-profile.d.ts.map +1 -0
  483. package/lib/node/startup-cpu-profile.js +91 -0
  484. package/lib/node/startup-cpu-profile.js.map +1 -0
  485. package/lib/node/stdio-launcher.d.ts +13 -13
  486. package/lib/node/stdio-launcher.d.ts.map +1 -1
  487. package/lib/node/stdio-launcher.js +21 -11
  488. package/lib/node/stdio-launcher.js.map +1 -1
  489. package/lib/testing/document-uri-policy-conformance.js +1 -1
  490. package/lib/testing/document-uri-policy-conformance.js.map +1 -1
  491. package/lib/testing/fake-description.js.map +1 -1
  492. package/lib/testing/fake-document.d.ts +2 -1
  493. package/lib/testing/fake-document.d.ts.map +1 -1
  494. package/lib/testing/fake-document.js.map +1 -1
  495. package/lib/testing/index.d.ts +1 -1
  496. package/lib/testing/index.d.ts.map +1 -1
  497. package/lib/testing/index.js +2 -1
  498. package/lib/testing/index.js.map +1 -1
  499. package/lib/testing/langium-test-helpers.d.ts.map +1 -1
  500. package/lib/testing/langium-test-helpers.js +1 -0
  501. package/lib/testing/langium-test-helpers.js.map +1 -1
  502. package/lib/testing/make-noop-language-services.js.map +1 -1
  503. package/lib/testing/make-noop-shared-services.d.ts +4 -4
  504. package/lib/testing/make-noop-shared-services.d.ts.map +1 -1
  505. package/lib/testing/make-noop-shared-services.js +4 -4
  506. package/lib/testing/make-noop-shared-services.js.map +1 -1
  507. package/lib/testing/make-test-services.d.ts +51 -20
  508. package/lib/testing/make-test-services.d.ts.map +1 -1
  509. package/lib/testing/make-test-services.js +29 -13
  510. package/lib/testing/make-test-services.js.map +1 -1
  511. package/lib/testing/make-test-tracer.d.ts +12 -0
  512. package/lib/testing/make-test-tracer.d.ts.map +1 -1
  513. package/lib/testing/make-test-tracer.js +13 -0
  514. package/lib/testing/make-test-tracer.js.map +1 -1
  515. package/lib/testing/node/applied-edit-capture.d.ts +29 -0
  516. package/lib/testing/node/applied-edit-capture.d.ts.map +1 -0
  517. package/lib/testing/node/applied-edit-capture.js +117 -0
  518. package/lib/testing/node/applied-edit-capture.js.map +1 -0
  519. package/lib/testing/node/golden-corpus.js.map +1 -1
  520. package/lib/testing/node/index.d.ts +1 -0
  521. package/lib/testing/node/index.d.ts.map +1 -1
  522. package/lib/testing/node/index.js +1 -0
  523. package/lib/testing/node/index.js.map +1 -1
  524. package/lib/testing/node/lsp-harness.d.ts.map +1 -1
  525. package/lib/testing/node/lsp-harness.js +2 -0
  526. package/lib/testing/node/lsp-harness.js.map +1 -1
  527. package/lib/testing/node/lsp-server-connection.d.ts +21 -6
  528. package/lib/testing/node/lsp-server-connection.d.ts.map +1 -1
  529. package/lib/testing/node/lsp-server-connection.js +49 -106
  530. package/lib/testing/node/lsp-server-connection.js.map +1 -1
  531. package/lib/testing/node/scratch-workspace.d.ts.map +1 -1
  532. package/lib/testing/node/scratch-workspace.js +10 -5
  533. package/lib/testing/node/scratch-workspace.js.map +1 -1
  534. package/lib/testing/node/spawned-server.d.ts +30 -1
  535. package/lib/testing/node/spawned-server.d.ts.map +1 -1
  536. package/lib/testing/node/spawned-server.js +39 -2
  537. package/lib/testing/node/spawned-server.js.map +1 -1
  538. package/lib/testing/node/unhandled-rejections.d.ts +20 -0
  539. package/lib/testing/node/unhandled-rejections.d.ts.map +1 -0
  540. package/lib/testing/node/unhandled-rejections.js +32 -0
  541. package/lib/testing/node/unhandled-rejections.js.map +1 -0
  542. package/lib/testing/playwright/browser-capture-bridge.js.map +1 -1
  543. package/lib/testing/playwright/e2e-profiling.js.map +1 -1
  544. package/lib/testing/playwright/flaky-network-proxy.d.ts +76 -0
  545. package/lib/testing/playwright/flaky-network-proxy.d.ts.map +1 -0
  546. package/lib/testing/playwright/flaky-network-proxy.js +164 -0
  547. package/lib/testing/playwright/flaky-network-proxy.js.map +1 -0
  548. package/lib/testing/playwright/index.d.ts +1 -0
  549. package/lib/testing/playwright/index.d.ts.map +1 -1
  550. package/lib/testing/playwright/index.js +1 -0
  551. package/lib/testing/playwright/index.js.map +1 -1
  552. package/lib/testing/playwright/server-log-capture.d.ts +46 -16
  553. package/lib/testing/playwright/server-log-capture.d.ts.map +1 -1
  554. package/lib/testing/playwright/server-log-capture.js +111 -40
  555. package/lib/testing/playwright/server-log-capture.js.map +1 -1
  556. package/lib/testing/playwright/server-log-fixture.d.ts +16 -0
  557. package/lib/testing/playwright/server-log-fixture.d.ts.map +1 -1
  558. package/lib/testing/playwright/server-log-fixture.js +25 -6
  559. package/lib/testing/playwright/server-log-fixture.js.map +1 -1
  560. package/lib/testing/playwright/server-log-region.d.ts +15 -0
  561. package/lib/testing/playwright/server-log-region.d.ts.map +1 -0
  562. package/lib/testing/playwright/server-log-region.js +30 -0
  563. package/lib/testing/playwright/server-log-region.js.map +1 -0
  564. package/lib/testing/playwright/server-log-rename-reporter.d.ts.map +1 -1
  565. package/lib/testing/playwright/server-log-rename-reporter.js +4 -3
  566. package/lib/testing/playwright/server-log-rename-reporter.js.map +1 -1
  567. package/lib/testing/run-update-pipeline.d.ts +8 -5
  568. package/lib/testing/run-update-pipeline.d.ts.map +1 -1
  569. package/lib/testing/run-update-pipeline.js.map +1 -1
  570. package/lib/testing/stub-ast-document-manager.d.ts +11 -52
  571. package/lib/testing/stub-ast-document-manager.d.ts.map +1 -1
  572. package/lib/testing/stub-ast-document-manager.js +31 -62
  573. package/lib/testing/stub-ast-document-manager.js.map +1 -1
  574. package/lib/testing/stub-document-builder.d.ts +33 -11
  575. package/lib/testing/stub-document-builder.d.ts.map +1 -1
  576. package/lib/testing/stub-document-builder.js +103 -5
  577. package/lib/testing/stub-document-builder.js.map +1 -1
  578. package/lib/testing/stub-hydranium-text-documents.d.ts +33 -10
  579. package/lib/testing/stub-hydranium-text-documents.d.ts.map +1 -1
  580. package/lib/testing/stub-hydranium-text-documents.js +132 -16
  581. package/lib/testing/stub-hydranium-text-documents.js.map +1 -1
  582. package/lib/testing/stub-index-manager.js.map +1 -1
  583. package/lib/testing/stub-langium-documents.d.ts +3 -2
  584. package/lib/testing/stub-langium-documents.d.ts.map +1 -1
  585. package/lib/testing/stub-langium-documents.js.map +1 -1
  586. package/lib/testing/stub-model-service.d.ts +9 -8
  587. package/lib/testing/stub-model-service.d.ts.map +1 -1
  588. package/lib/testing/stub-model-service.js +6 -6
  589. package/lib/testing/stub-model-service.js.map +1 -1
  590. package/lib/testing/stub-project-manager.js.map +1 -1
  591. package/lib/testing/stub-self-save-registry.d.ts +1 -1
  592. package/lib/testing/stub-self-save-registry.d.ts.map +1 -1
  593. package/lib/testing/stub-service-registry.d.ts +1 -1
  594. package/lib/testing/stub-service-registry.js.map +1 -1
  595. package/lib/testing/stub-writable-file-system.d.ts +1 -1
  596. package/lib/testing/stub-writable-file-system.d.ts.map +1 -1
  597. package/lib/testing/stub-writable-file-system.js +2 -1
  598. package/lib/testing/stub-writable-file-system.js.map +1 -1
  599. package/lib/util/connection-liveness.d.ts +22 -6
  600. package/lib/util/connection-liveness.d.ts.map +1 -1
  601. package/lib/util/connection-liveness.js +74 -15
  602. package/lib/util/connection-liveness.js.map +1 -1
  603. package/lib/util/environment.d.ts +7 -0
  604. package/lib/util/environment.d.ts.map +1 -1
  605. package/lib/util/environment.js +15 -1
  606. package/lib/util/environment.js.map +1 -1
  607. package/lib/util/registry.d.ts.map +1 -1
  608. package/package.json +39 -58
  609. package/src/browser/host-heads-in-worker.ts +218 -0
  610. package/src/browser/index.ts +17 -0
  611. package/src/browser/indexeddb-file-system-store.ts +192 -0
  612. package/src/browser/start-language-server-in-worker.ts +56 -0
  613. package/src/documents/ast-document-manager.ts +467 -233
  614. package/src/documents/client-ids.ts +5 -22
  615. package/src/documents/client-session-errors.ts +24 -0
  616. package/src/documents/client-session-registry.ts +262 -0
  617. package/src/documents/dirty-state-tracker.ts +167 -0
  618. package/src/documents/document-release-handler.ts +404 -0
  619. package/src/documents/document-release-scheduler.ts +121 -0
  620. package/src/documents/file-system-task-queue.ts +74 -0
  621. package/src/documents/hydranium-text-documents.ts +1011 -595
  622. package/src/documents/index.ts +10 -2
  623. package/src/documents/language-client-shadow.ts +501 -0
  624. package/src/documents/model-ledger.ts +66 -0
  625. package/src/documents/text-ledger.ts +112 -0
  626. package/src/documents/version-sync-service.ts +275 -0
  627. package/src/index.ts +7 -0
  628. package/src/langium/ast-extension/ast-extension-service.ts +77 -41
  629. package/src/langium/ast-extension/ast-node-builder.ts +35 -13
  630. package/src/langium/bootstrap.ts +87 -51
  631. package/src/langium/build-phase-pass/build-phase-pass-service.ts +29 -19
  632. package/src/langium/build-phase-pass/build-phase-pass.ts +37 -8
  633. package/src/langium/composite-ast-reflection.ts +112 -0
  634. package/src/langium/config/configuration-provider.ts +119 -0
  635. package/src/langium/config/index.ts +1 -0
  636. package/src/langium/diagnostics/console-tee.ts +151 -0
  637. package/src/langium/diagnostics/format-log-arg.ts +36 -0
  638. package/src/langium/diagnostics/hydranium-langium-profiler.ts +15 -39
  639. package/src/langium/diagnostics/log-preamble.ts +1 -1
  640. package/src/langium/diagnostics/logger.ts +51 -17
  641. package/src/langium/diagnostics/lsp-logger.ts +70 -44
  642. package/src/langium/document-builder/build-pipeline-integration.ts +46 -32
  643. package/src/langium/document-builder/build-session.ts +4 -3
  644. package/src/langium/document-builder/document-builder.ts +553 -78
  645. package/src/langium/integration-services.ts +59 -28
  646. package/src/langium/integrity/integrity-rule.ts +17 -8
  647. package/src/langium/integrity/integrity-service.ts +332 -69
  648. package/src/langium/keys/containment.ts +87 -0
  649. package/src/langium/keys/index.ts +1 -0
  650. package/src/langium/keys/name-based-key-provider.ts +4 -0
  651. package/src/langium/language-module.ts +49 -8
  652. package/src/langium/model-service/client-session.ts +718 -0
  653. package/src/langium/model-service/index.ts +2 -0
  654. package/src/langium/model-service/model-events.ts +80 -0
  655. package/src/langium/model-service/model-service.ts +878 -486
  656. package/src/langium/module.ts +195 -72
  657. package/src/langium/naming/name-provider.ts +34 -8
  658. package/src/langium/project/abstract-project-manager.ts +13 -5
  659. package/src/langium/project/project-change-event.ts +2 -2
  660. package/src/langium/residency/cst-residency-service.ts +54 -19
  661. package/src/langium/scope/fallback-scope.ts +38 -0
  662. package/src/langium/scope/hydranium-scope-computation.ts +45 -44
  663. package/src/langium/scope/hydranium-scope-provider.ts +49 -16
  664. package/src/langium/scope/index.ts +1 -0
  665. package/src/langium/scope/reference-candidate-provider.ts +6 -5
  666. package/src/langium/scope/scope-extension-service.ts +74 -59
  667. package/src/langium/scope/scoped-ast-node-description.ts +1 -3
  668. package/src/langium/serialization/abstract-serializer.ts +57 -41
  669. package/src/langium/serialization/json-serializer.ts +14 -3
  670. package/src/langium/serialization/serializer.ts +1 -1
  671. package/src/langium/serialization/yaml-serializer.ts +4 -0
  672. package/src/langium/service-registry.ts +41 -2
  673. package/src/langium/shared-services.ts +16 -7
  674. package/src/langium/single-langium-copy.ts +42 -0
  675. package/src/langium/transfer/transfer-encoder.ts +104 -47
  676. package/src/langium/trivia/comment-preserver.ts +1100 -0
  677. package/src/langium/trivia/document-ending-preserver.ts +71 -0
  678. package/src/langium/trivia/index.ts +14 -0
  679. package/src/langium/trivia/trivia-contribution.ts +39 -0
  680. package/src/langium/trivia/trivia-preserver.ts +56 -0
  681. package/src/langium/trivia/trivia-service.ts +99 -0
  682. package/src/langium/update-rewrite/update-rewrite-service.ts +1 -1
  683. package/src/langium/update-rewrite/update-rewrite.ts +1 -1
  684. package/src/langium/validation/document-validator.ts +411 -12
  685. package/src/langium/validation/validation-contribution-collector.ts +10 -1
  686. package/src/langium/workspace/document-uri-policy.ts +32 -18
  687. package/src/langium/workspace/file-not-found.ts +35 -0
  688. package/src/langium/workspace/file-system-provider.ts +258 -16
  689. package/src/langium/workspace/hydranium-langium-document-factory.ts +83 -0
  690. package/src/langium/workspace/hydranium-workspace-lock.ts +86 -2
  691. package/src/langium/workspace/hydranium-workspace-manager.ts +224 -35
  692. package/src/langium/workspace/in-memory-file-system-provider.ts +54 -23
  693. package/src/langium/workspace/index.ts +1 -0
  694. package/src/langium/workspace/initialize-workspace.ts +96 -4
  695. package/src/langium/workspace/langium-documents.ts +19 -1
  696. package/src/langium/workspace/persistent-file-system-provider.ts +27 -15
  697. package/src/langium/workspace/self-save-registry.ts +118 -0
  698. package/src/langium/workspace/virtual-document.ts +106 -25
  699. package/src/langium/workspace/write-lock-scope.ts +27 -12
  700. package/src/launcher/integrated-server.ts +3 -1
  701. package/src/locale/server-locale.ts +31 -6
  702. package/src/lsp/completion/hydranium-completion-provider.ts +82 -2
  703. package/src/lsp/connection-features.ts +67 -0
  704. package/src/lsp/diagnostics-connection.ts +56 -0
  705. package/src/lsp/hydranium-document-update-handler.ts +285 -111
  706. package/src/lsp/index.ts +4 -1
  707. package/src/lsp/lsp-latency.ts +62 -0
  708. package/src/lsp/save-text-document.ts +63 -0
  709. package/src/lsp/semantic-token-provider.ts +74 -7
  710. package/src/lsp/shared-module.ts +4 -8
  711. package/src/lsp/start-language-server.ts +18 -7
  712. package/src/messages/carriers.ts +15 -7
  713. package/src/messages/index.ts +11 -2
  714. package/src/messages/renderer.ts +34 -6
  715. package/src/node/event-loop-monitor.ts +2 -1
  716. package/src/node/heap-ceiling.ts +108 -0
  717. package/src/node/index.ts +5 -1
  718. package/src/node/latency-from-env.ts +1 -1
  719. package/src/node/log-file-sink.ts +6 -2
  720. package/src/node/log-preamble-node.ts +20 -10
  721. package/src/node/measure-memory.ts +5 -4
  722. package/src/node/memory-monitor.ts +10 -10
  723. package/src/node/node-file-system-provider.ts +214 -57
  724. package/src/node/profile-capture.ts +16 -15
  725. package/src/node/profiling-run.ts +30 -8
  726. package/src/node/rename-over-open-readers.ts +94 -0
  727. package/src/node/server-diagnostics.ts +1 -1
  728. package/src/node/server-state-snapshot.ts +5 -5
  729. package/src/node/socket-launcher.ts +78 -14
  730. package/src/node/startup-cpu-profile.ts +94 -0
  731. package/src/node/stdio-launcher.ts +29 -19
  732. package/src/testing/document-uri-policy-conformance.ts +1 -1
  733. package/src/testing/fake-document.ts +2 -1
  734. package/src/testing/index.ts +2 -1
  735. package/src/testing/langium-test-helpers.ts +1 -0
  736. package/src/testing/make-noop-shared-services.ts +6 -6
  737. package/src/testing/make-test-services.ts +93 -41
  738. package/src/testing/make-test-tracer.ts +26 -0
  739. package/src/testing/node/applied-edit-capture.ts +141 -0
  740. package/src/testing/node/index.ts +1 -0
  741. package/src/testing/node/lsp-harness.ts +2 -0
  742. package/src/testing/node/lsp-server-connection.ts +83 -119
  743. package/src/testing/node/scratch-workspace.ts +10 -5
  744. package/src/testing/node/spawned-server.ts +57 -3
  745. package/src/testing/node/unhandled-rejections.ts +31 -0
  746. package/src/testing/parse-semantic-root.ts +1 -1
  747. package/src/testing/playwright/flaky-network-proxy.ts +240 -0
  748. package/src/testing/playwright/index.ts +1 -0
  749. package/src/testing/playwright/server-log-capture.ts +137 -47
  750. package/src/testing/playwright/server-log-fixture.ts +46 -6
  751. package/src/testing/playwright/server-log-region.ts +32 -0
  752. package/src/testing/playwright/server-log-rename-reporter.ts +4 -3
  753. package/src/testing/run-update-pipeline.ts +8 -5
  754. package/src/testing/stub-ast-document-manager.ts +47 -128
  755. package/src/testing/stub-document-builder.ts +133 -18
  756. package/src/testing/stub-hydranium-text-documents.ts +184 -27
  757. package/src/testing/stub-langium-documents.ts +3 -2
  758. package/src/testing/stub-model-service.ts +11 -10
  759. package/src/testing/stub-self-save-registry.ts +1 -1
  760. package/src/testing/stub-service-registry.ts +1 -1
  761. package/src/testing/stub-writable-file-system.ts +3 -2
  762. package/src/util/connection-liveness.ts +80 -15
  763. package/src/util/environment.ts +24 -2
  764. package/lib/documents/language-client-text-shadow.d.ts +0 -101
  765. package/lib/documents/language-client-text-shadow.d.ts.map +0 -1
  766. package/lib/documents/language-client-text-shadow.js +0 -156
  767. package/lib/documents/language-client-text-shadow.js.map +0 -1
  768. package/lib/documents/self-save-registry.d.ts +0 -55
  769. package/lib/documents/self-save-registry.d.ts.map +0 -1
  770. package/lib/documents/self-save-registry.js.map +0 -1
  771. package/lib/lsp/instrument-connection.d.ts +0 -36
  772. package/lib/lsp/instrument-connection.d.ts.map +0 -1
  773. package/lib/lsp/instrument-connection.js +0 -62
  774. package/lib/lsp/instrument-connection.js.map +0 -1
  775. package/lib/node/process-memory.d.ts +0 -66
  776. package/lib/node/process-memory.d.ts.map +0 -1
  777. package/lib/node/process-memory.js +0 -252
  778. package/lib/node/process-memory.js.map +0 -1
  779. package/src/documents/language-client-text-shadow.ts +0 -175
  780. package/src/documents/self-save-registry.ts +0 -81
  781. package/src/lsp/instrument-connection.ts +0 -66
  782. package/src/node/process-memory.ts +0 -299
@@ -0,0 +1,31 @@
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
+ import { type Connection, type Disposable, type Features } from 'vscode-languageserver';
10
+ import type { ServerSharedServices } from '../langium/module.js';
11
+ /**
12
+ * Advertise {@link SaveTextDocumentRequest} in the `initialize` answer, as
13
+ * `experimental[SaveTextDocumentRequest.method]`, LSP's place for a server
14
+ * feature it does not define. Supply it where the connection is created, with
15
+ * {@link listenToSaveTextDocument} on that connection: only a host whose files
16
+ * the server holds answers the request, and a client takes the entry as the
17
+ * promise that it does.
18
+ */
19
+ export declare function withSaveTextDocumentCapability<T extends Features>(features: T): T;
20
+ /**
21
+ * Answer {@link SaveTextDocumentRequest} on `connection`: persist the store's
22
+ * text once `TextDocuments.assertLanguageClientHolds` finds the editor's
23
+ * buffer holds it. The gate and the manager's taking of the text are one
24
+ * synchronous step, so no change can land between them.
25
+ *
26
+ * A refusal crosses the wire as the data head's do, its message rendered by
27
+ * `MessageRenderer` and rebuilt on the connection's copy of `vscode-jsonrpc`,
28
+ * which keeps the code only of its own copy's errors.
29
+ */
30
+ export declare function listenToSaveTextDocument(connection: Connection, shared: ServerSharedServices): Disposable;
31
+ //# sourceMappingURL=save-text-document.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"save-text-document.d.ts","sourceRoot":"","sources":["../../src/lsp/save-text-document.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAGlF,OAAO,EAEJ,KAAK,UAAU,EACf,KAAK,UAAU,EACf,KAAK,QAAQ,EAIf,MAAM,uBAAuB,CAAC;AAE/B,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAEjE;;;;;;;GAOG;AACH,wBAAgB,8BAA8B,CAAC,CAAC,SAAS,QAAQ,EAAE,QAAQ,EAAE,CAAC,GAAG,CAAC,CASjF;AAED;;;;;;;;;GASG;AACH,wBAAgB,wBAAwB,CAAC,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,oBAAoB,GAAG,UAAU,CAWzG"}
@@ -0,0 +1,52 @@
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
+ import { isResponseError, SaveTextDocumentRequest } from '@hydranium/protocol';
10
+ import { combineWorkspaceFeatures, ResponseError } from 'vscode-languageserver';
11
+ import { LANGUAGE_CLIENT_ID } from '../documents/client-ids.js';
12
+ /**
13
+ * Advertise {@link SaveTextDocumentRequest} in the `initialize` answer, as
14
+ * `experimental[SaveTextDocumentRequest.method]`, LSP's place for a server
15
+ * feature it does not define. Supply it where the connection is created, with
16
+ * {@link listenToSaveTextDocument} on that connection: only a host whose files
17
+ * the server holds answers the request, and a client takes the entry as the
18
+ * promise that it does.
19
+ */
20
+ export function withSaveTextDocumentCapability(features) {
21
+ const advertise = Base => class extends Base {
22
+ fillServerCapabilities(capabilities) {
23
+ super.fillServerCapabilities(capabilities);
24
+ capabilities.experimental = { ...capabilities.experimental, [SaveTextDocumentRequest.method]: true };
25
+ }
26
+ };
27
+ return { ...features, workspace: features.workspace ? combineWorkspaceFeatures(features.workspace, advertise) : advertise };
28
+ }
29
+ /**
30
+ * Answer {@link SaveTextDocumentRequest} on `connection`: persist the store's
31
+ * text once `TextDocuments.assertLanguageClientHolds` finds the editor's
32
+ * buffer holds it. The gate and the manager's taking of the text are one
33
+ * synchronous step, so no change can land between them.
34
+ *
35
+ * A refusal crosses the wire as the data head's do, its message rendered by
36
+ * `MessageRenderer` and rebuilt on the connection's copy of `vscode-jsonrpc`,
37
+ * which keeps the code only of its own copy's errors.
38
+ */
39
+ export function listenToSaveTextDocument(connection, shared) {
40
+ return connection.onRequest(SaveTextDocumentRequest.method, async (params) => {
41
+ const { uri, version } = params.textDocument;
42
+ try {
43
+ shared.workspace.TextDocuments.assertLanguageClientHolds(uri, version);
44
+ await shared.workspace.AstDocumentManager.save(uri, LANGUAGE_CLIENT_ID);
45
+ }
46
+ catch (error) {
47
+ throw isResponseError(error) ? new ResponseError(error.code, shared.MessageRenderer.renderError(error), error.data) : error;
48
+ }
49
+ return null;
50
+ });
51
+ }
52
+ //# sourceMappingURL=save-text-document.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"save-text-document.js","sourceRoot":"","sources":["../../src/lsp/save-text-document.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF,OAAO,EAAE,eAAe,EAA+B,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAC5G,OAAO,EACJ,wBAAwB,EAIxB,aAAa,EAGf,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAGhE;;;;;;;GAOG;AACH,MAAM,UAAU,8BAA8B,CAAqB,QAAW;IAC3E,MAAM,SAAS,GAA6B,IAAI,CAAC,EAAE,CAChD,KAAM,SAAQ,IAAI;QACN,sBAAsB,CAAC,YAAgC;YAC7D,KAAK,CAAC,sBAAsB,CAAC,YAAY,CAAC,CAAC;YAC3C,YAAY,CAAC,YAAY,GAAG,EAAE,GAAG,YAAY,CAAC,YAAY,EAAE,CAAC,uBAAuB,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC;QACxG,CAAC;KACH,CAAC;IACL,OAAO,EAAE,GAAG,QAAQ,EAAE,SAAS,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,wBAAwB,CAAC,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;AAC/H,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,wBAAwB,CAAC,UAAsB,EAAE,MAA4B;IAC1F,OAAO,UAAU,CAAC,SAAS,CAAC,uBAAuB,CAAC,MAAM,EAAE,KAAK,EAAE,MAA8B,EAAE,EAAE;QAClG,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC,YAAY,CAAC;QAC7C,IAAI,CAAC;YACF,MAAM,CAAC,SAAS,CAAC,aAAa,CAAC,yBAAyB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;YACvE,MAAM,MAAM,CAAC,SAAS,CAAC,kBAAkB,CAAC,IAAI,CAAC,GAAG,EAAE,kBAAkB,CAAC,CAAC;QAC3E,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACvB,MAAM,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,aAAa,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,eAAe,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QAC/H,CAAC;QACD,OAAO,IAAI,CAAC;IACf,CAAC,CAAC,CAAC;AACN,CAAC"}
@@ -6,7 +6,7 @@
6
6
  *
7
7
  * SPDX-License-Identifier: MIT
8
8
  ********************************************************************************/
9
- import { type AstNode, type AstReflection, type LangiumDocument, type ReferenceInfo } from '@hydranium/langium';
9
+ import { type AstNode, type AstReflection, type LangiumDocument, type LeafCstNode, type ReferenceInfo } from '@hydranium/langium';
10
10
  import { AbstractSemanticTokenProvider, type SemanticTokenAcceptor } from '@hydranium/langium/lsp';
11
11
  import { type CancellationToken } from 'vscode-languageserver';
12
12
  import { type NameProvider } from '../langium/naming/name-provider.js';
@@ -37,6 +37,22 @@ export interface HydraniumSemanticTokenProviderOptions {
37
37
  * render in the editor's default foreground.
38
38
  */
39
39
  readonly highlightKeywords?: boolean;
40
+ /**
41
+ * Also emit a `comment` token for every comment leaf of the CST.
42
+ *
43
+ * OFF by default for the same reason as {@link highlightKeywords}, and the
44
+ * loss is larger: a TextMate grammar distinguishes `comment.line` from
45
+ * `comment.block` and scopes the delimiters separately, where a semantic
46
+ * token carries one flat `comment` that overrides all of them. It exists
47
+ * for the host that ships no client-side grammar, where a comment otherwise
48
+ * renders in the editor's default foreground.
49
+ *
50
+ * What counts as a comment is every hidden terminal the lexer retains,
51
+ * which is every hidden terminal whose pattern is not whitespace. A grammar
52
+ * whose hidden non-whitespace terminal means something other than a comment
53
+ * is miscoloured, and this option is the place to say no.
54
+ */
55
+ readonly highlightComments?: boolean;
40
56
  }
41
57
  /**
42
58
  * Semantic-token provider that derives highlighting from ONE adopter-supplied
@@ -102,6 +118,23 @@ export declare abstract class AbstractHydraniumSemanticTokenProvider extends Abs
102
118
  * drops anything outside `currentRange` on its own.
103
119
  */
104
120
  protected computeHighlighting(document: LangiumDocument, acceptor: SemanticTokenAcceptor, cancelToken: CancellationToken): Promise<void>;
121
+ /**
122
+ * Emit a comment as ONE TOKEN PER LINE, never as one multi-line range.
123
+ *
124
+ * A block comment is the first token this provider emits that can span
125
+ * lines, and the upstream encoder mishandles that for a client which does
126
+ * not advertise `multilineTokenSupport` — the split path computes the first
127
+ * line's length as `nextLineOffset - range.start.character - 1`, subtracting
128
+ * a COLUMN from a document OFFSET, so the length is right only for a token
129
+ * starting on line 0 and overruns its line everywhere else. No client in
130
+ * this repository advertises that capability, so the broken path is the one
131
+ * taken. Splitting here means every range handed over starts and ends on one
132
+ * line and the arithmetic is never reached.
133
+ *
134
+ * Lines come from the leaf's own text rather than from the document, so
135
+ * nothing has to re-derive where the comment ends.
136
+ */
137
+ protected acceptComment(cst: LeafCstNode, acceptor: SemanticTokenAcceptor): void;
105
138
  protected highlightElement(node: AstNode, acceptor: SemanticTokenAcceptor): void | undefined | 'prune';
106
139
  /** Colour the node's own name, at whichever property the NameProvider reads it from. */
107
140
  protected highlightDeclaration(node: AstNode, acceptor: SemanticTokenAcceptor): void;
@@ -1 +1 @@
1
- {"version":3,"file":"semantic-token-provider.d.ts","sourceRoot":"","sources":["../../src/lsp/semantic-token-provider.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF,OAAO,EACJ,KAAK,OAAO,EACZ,KAAK,aAAa,EAKlB,KAAK,eAAe,EACpB,KAAK,aAAa,EACpB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,6BAA6B,EAAE,KAAK,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AACnG,OAAO,EAAE,KAAK,iBAAiB,EAA8C,MAAM,uBAAuB,CAAC;AAC3G,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,oCAAoC,CAAC;AACvE,OAAO,EAAE,KAAK,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAE5E;;;;;GAKG;AACH,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;CAAE,CAAC;AAU1G,6EAA6E;AAC7E,MAAM,WAAW,qCAAqC;IACnD;;;;;;;;;;;;OAYG;IACH,QAAQ,CAAC,iBAAiB,CAAC,EAAE,OAAO,CAAC;CACvC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,8BAAsB,sCAAuC,SAAQ,6BAA6B;IAC/F,SAAS,CAAC,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAC;IAC9C,SAAS,CAAC,QAAQ,CAAC,UAAU,EAAE,aAAa,CAAC;IAC7C,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,qCAAqC,CAAC;IAElE;;;;OAIG;IACH,SAAS,CAAC,QAAQ,CAAC,mBAAmB,EAAE,MAAM,GAAG,SAAS,CAAsC;gBAEpF,QAAQ,EAAE,sBAAsB,EAAE,OAAO,GAAE,qCAA0C;IAOjG;;;;;;;;;;;;;;;OAeG;cACsB,mBAAmB,CACzC,QAAQ,EAAE,eAAe,EACzB,QAAQ,EAAE,qBAAqB,EAC/B,WAAW,EAAE,iBAAiB,GAC9B,OAAO,CAAC,IAAI,CAAC;cAsBG,gBAAgB,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,qBAAqB,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO;IAM/G,wFAAwF;IACxF,SAAS,CAAC,oBAAoB,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,qBAAqB,GAAG,IAAI;IAYpF,kFAAkF;IAClF,SAAS,CAAC,mBAAmB,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,qBAAqB,GAAG,IAAI;IAUnF;;;;;;;;;;;;OAYG;IACH,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS;IAE5E,0FAA0F;IAC1F,SAAS,CAAC,kBAAkB,CAAC,IAAI,EAAE,OAAO,GAAG,iBAAiB,GAAG,SAAS;IAI1E,4GAA4G;IAC5G,SAAS,CAAC,gBAAgB,CAAC,IAAI,EAAE,aAAa,GAAG,iBAAiB,GAAG,SAAS;IAI9E,uFAAuF;IACvF,SAAS,CAAC,eAAe,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS;CAG9D"}
1
+ {"version":3,"file":"semantic-token-provider.d.ts","sourceRoot":"","sources":["../../src/lsp/semantic-token-provider.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF,OAAO,EACJ,KAAK,OAAO,EACZ,KAAK,aAAa,EAMlB,KAAK,eAAe,EACpB,KAAK,WAAW,EAChB,KAAK,aAAa,EACpB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,6BAA6B,EAAE,KAAK,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AACnG,OAAO,EAAE,KAAK,iBAAiB,EAA8C,MAAM,uBAAuB,CAAC;AAC3G,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,oCAAoC,CAAC;AACvE,OAAO,EAAE,KAAK,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAE5E;;;;;GAKG;AACH,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;CAAE,CAAC;AAU1G,6EAA6E;AAC7E,MAAM,WAAW,qCAAqC;IACnD;;;;;;;;;;;;OAYG;IACH,QAAQ,CAAC,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAErC;;;;;;;;;;;;;;OAcG;IACH,QAAQ,CAAC,iBAAiB,CAAC,EAAE,OAAO,CAAC;CACvC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,8BAAsB,sCAAuC,SAAQ,6BAA6B;IAC/F,SAAS,CAAC,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAC;IAC9C,SAAS,CAAC,QAAQ,CAAC,UAAU,EAAE,aAAa,CAAC;IAC7C,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,qCAAqC,CAAC;IAElE;;;;OAIG;IACH,SAAS,CAAC,QAAQ,CAAC,mBAAmB,EAAE,MAAM,GAAG,SAAS,CAAsC;IAEhG,YAAY,QAAQ,EAAE,sBAAsB,EAAE,OAAO,GAAE,qCAA0C,EAKhG;IAED;;;;;;;;;;;;;;;OAeG;IACH,UAAyB,mBAAmB,CACzC,QAAQ,EAAE,eAAe,EACzB,QAAQ,EAAE,qBAAqB,EAC/B,WAAW,EAAE,iBAAiB,GAC9B,OAAO,CAAC,IAAI,CAAC,CAkCf;IAED;;;;;;;;;;;;;;;OAeG;IACH,SAAS,CAAC,aAAa,CAAC,GAAG,EAAE,WAAW,EAAE,QAAQ,EAAE,qBAAqB,GAAG,IAAI,CAgB/E;IAED,UAAmB,gBAAgB,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,qBAAqB,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAI9G;IAED,wFAAwF;IACxF,SAAS,CAAC,oBAAoB,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,qBAAqB,GAAG,IAAI,CAUnF;IAED,kFAAkF;IAClF,SAAS,CAAC,mBAAmB,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,qBAAqB,GAAG,IAAI,CAQlF;IAED;;;;;;;;;;;;OAYG;IACH,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS,CAAC;IAE7E,0FAA0F;IAC1F,SAAS,CAAC,kBAAkB,CAAC,IAAI,EAAE,OAAO,GAAG,iBAAiB,GAAG,SAAS,CAEzE;IAED,4GAA4G;IAC5G,SAAS,CAAC,gBAAgB,CAAC,IAAI,EAAE,aAAa,GAAG,iBAAiB,GAAG,SAAS,CAE7E;IAED,uFAAuF;IACvF,SAAS,CAAC,eAAe,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAE3D;CACH"}
@@ -6,7 +6,7 @@
6
6
  *
7
7
  * SPDX-License-Identifier: MIT
8
8
  ********************************************************************************/
9
- import { AstUtils, CstUtils, GrammarAST, interruptAndCheck } from '@hydranium/langium';
9
+ import { AstUtils, CstUtils, GrammarAST, interruptAndCheck, isLeafCstNode } from '@hydranium/langium';
10
10
  import { AbstractSemanticTokenProvider } from '@hydranium/langium/lsp';
11
11
  import { SemanticTokenModifiers, SemanticTokenTypes } from 'vscode-languageserver';
12
12
  /** Normalise both {@link SemanticTokenKind} forms to the acceptor's shape. */
@@ -86,7 +86,9 @@ export class AbstractHydraniumSemanticTokenProvider extends AbstractSemanticToke
86
86
  */
87
87
  async computeHighlighting(document, acceptor, cancelToken) {
88
88
  await super.computeHighlighting(document, acceptor, cancelToken);
89
- if (this.options.highlightKeywords !== true) {
89
+ const keywords = this.options.highlightKeywords === true;
90
+ const comments = this.options.highlightComments === true;
91
+ if (!keywords && !comments) {
90
92
  return;
91
93
  }
92
94
  const root = document.parseResult.value.$cstNode;
@@ -95,14 +97,59 @@ export class AbstractHydraniumSemanticTokenProvider extends AbstractSemanticToke
95
97
  }
96
98
  for (const cst of CstUtils.streamCst(root)) {
97
99
  await interruptAndCheck(cancelToken);
98
- // The grammar source is the whole filter. A keyword is always a leaf,
99
- // and the hidden leaves a comment or a run of whitespace contributes
100
- // are sourced from a terminal rule rather than a `Keyword` — so
101
- // neither a composite-node check nor a hidden-token check adds
102
- // anything here.
103
- if (GrammarAST.isKeyword(cst.grammarSource)) {
100
+ // A keyword is always a leaf with a `Keyword` grammar source, so that
101
+ // check alone separates it from everything else in the walk.
102
+ if (keywords && GrammarAST.isKeyword(cst.grammarSource)) {
104
103
  acceptor({ cst, type: SemanticTokenTypes.keyword });
105
104
  }
105
+ // A comment leaf cannot be recognised the same way — the CST builder
106
+ // adds hidden nodes from the token alone, so `grammarSource` is
107
+ // undefined, which is also why the keyword filter never matches one.
108
+ //
109
+ // `hidden` alone IS the comment test, and nothing narrower is needed:
110
+ // the token builder groups a hidden terminal as `Lexer.SKIPPED` when
111
+ // its pattern matches whitespace and as `hidden` otherwise, so the
112
+ // lexer discards whitespace before a CST node is ever built and every
113
+ // hidden leaf that survives is a comment. Classifying the terminal
114
+ // again here would be a second guard for the same property, which no
115
+ // test could then distinguish. An adopter whose token builder RETAINS
116
+ // whitespace breaks that equivalence and would colour its gaps.
117
+ if (comments && isLeafCstNode(cst) && cst.hidden) {
118
+ this.acceptComment(cst, acceptor);
119
+ }
120
+ }
121
+ }
122
+ /**
123
+ * Emit a comment as ONE TOKEN PER LINE, never as one multi-line range.
124
+ *
125
+ * A block comment is the first token this provider emits that can span
126
+ * lines, and the upstream encoder mishandles that for a client which does
127
+ * not advertise `multilineTokenSupport` — the split path computes the first
128
+ * line's length as `nextLineOffset - range.start.character - 1`, subtracting
129
+ * a COLUMN from a document OFFSET, so the length is right only for a token
130
+ * starting on line 0 and overruns its line everywhere else. No client in
131
+ * this repository advertises that capability, so the broken path is the one
132
+ * taken. Splitting here means every range handed over starts and ends on one
133
+ * line and the arithmetic is never reached.
134
+ *
135
+ * Lines come from the leaf's own text rather than from the document, so
136
+ * nothing has to re-derive where the comment ends.
137
+ */
138
+ acceptComment(cst, acceptor) {
139
+ const lines = cst.text.split('\n');
140
+ for (let index = 0; index < lines.length; index++) {
141
+ // A `\r\n` document leaves the carriage return on the line's end;
142
+ // colouring it would extend the token past the visible text.
143
+ const length = lines[index].replace(/\r$/, '').length;
144
+ const character = index === 0 ? cst.range.start.character : 0;
145
+ if (length === 0) {
146
+ continue;
147
+ }
148
+ const line = cst.range.start.line + index;
149
+ acceptor({
150
+ range: { start: { line, character }, end: { line, character: character + length } },
151
+ type: SemanticTokenTypes.comment
152
+ });
106
153
  }
107
154
  }
108
155
  highlightElement(node, acceptor) {
@@ -1 +1 @@
1
- {"version":3,"file":"semantic-token-provider.js","sourceRoot":"","sources":["../../src/lsp/semantic-token-provider.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"semantic-token-provider.js","sourceRoot":"","sources":["../../src/lsp/semantic-token-provider.ts"],"names":[],"mappings":"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"}
@@ -26,14 +26,10 @@ import { HydraniumDocumentUpdateHandler } from './hydranium-document-update-hand
26
26
  * (an output channel, a structured logger) override the slot after this
27
27
  * module.
28
28
  *
29
- * - {@link HydraniumDocumentUpdateHandler} wraps `didChangeWatchedFiles` to
30
- * suppress echo events for the server's own writes via the shared
31
- * `SelfSaveRegistry` slot, debounces `didChangeContent`, stamps build
32
- * reasons through `markNextReason`, and dispatches a rebuild when the last
33
- * client closes a document.
34
- * Adopters with their own update-handler subclass should extend
35
- * `HydraniumDocumentUpdateHandler` (not Langium's
36
- * `DefaultDocumentUpdateHandler`) to preserve those behaviours.
29
+ * - {@link HydraniumDocumentUpdateHandler} carries the framework's handling of
30
+ * the LSP document events. Adopters with their own update-handler subclass
31
+ * should extend it (not Langium's `DefaultDocumentUpdateHandler`) to keep
32
+ * that handling.
37
33
  *
38
34
  * **Why this is a shared slot and not a per-language one.** Langium declares
39
35
  * `DocumentUpdateHandler` in `LangiumSharedLSPServices` — there is exactly one
@@ -1 +1 @@
1
- {"version":3,"file":"shared-module.d.ts","sourceRoot":"","sources":["../../src/lsp/shared-module.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,KAAK,4BAA4B,EAAE,MAAM,wBAAwB,CAAC;AAC3E,OAAO,EAAE,SAAS,EAAE,MAAM,sCAAsC,CAAC;AACjE,OAAO,EAAE,KAAK,mBAAmB,EAAE,KAAK,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC3F,OAAO,EAAE,8BAA8B,EAAE,MAAM,wCAAwC,CAAC;AAExF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,MAAM,WAAW,4BAA4B;IAC3B,MAAM,EAAE,SAAS,CAAC;IACjC,GAAG,EAAE;QACa,qBAAqB,EAAE,8BAA8B,CAAC;KACvE,CAAC;CACJ;AAED;;;;;;GAMG;AACH,MAAM,MAAM,uBAAuB,GAAG,oBAAoB,GAAG,4BAA4B,CAAC;AAE1F;;;;;;;;;;;;;GAaG;AACH,wBAAgB,2BAA2B,CACxC,QAAQ,EAAE,mBAAmB,GAC7B,MAAM,CAAC,uBAAuB,EAAE,4BAA4B,GAAG,4BAA4B,CAAC,CAO9F"}
1
+ {"version":3,"file":"shared-module.d.ts","sourceRoot":"","sources":["../../src/lsp/shared-module.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,KAAK,4BAA4B,EAAE,MAAM,wBAAwB,CAAC;AAC3E,OAAO,EAAE,SAAS,EAAE,MAAM,sCAAsC,CAAC;AACjE,OAAO,EAAE,KAAK,mBAAmB,EAAE,KAAK,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC3F,OAAO,EAAE,8BAA8B,EAAE,MAAM,wCAAwC,CAAC;AAExF;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,MAAM,WAAW,4BAA4B;IAC3B,MAAM,EAAE,SAAS,CAAC;IACjC,GAAG,EAAE;QACa,qBAAqB,EAAE,8BAA8B,CAAC;KACvE,CAAC;CACJ;AAED;;;;;;GAMG;AACH,MAAM,MAAM,uBAAuB,GAAG,oBAAoB,GAAG,4BAA4B,CAAC;AAE1F;;;;;;;;;;;;;GAaG;AACH,wBAAgB,2BAA2B,CACxC,QAAQ,EAAE,mBAAmB,GAC7B,MAAM,CAAC,uBAAuB,EAAE,4BAA4B,GAAG,4BAA4B,CAAC,CAO9F"}
@@ -1 +1 @@
1
- {"version":3,"file":"shared-module.js","sourceRoot":"","sources":["../../src/lsp/shared-module.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAIlF,OAAO,EAAE,SAAS,EAAE,MAAM,sCAAsC,CAAC;AAEjE,OAAO,EAAE,8BAA8B,EAAE,MAAM,wCAAwC,CAAC;AAmDxF;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,2BAA2B,CACxC,QAA6B;IAE7B,OAAO;QACJ,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC;QAC3C,GAAG,EAAE;YACF,qBAAqB,EAAE,QAAQ,CAAC,EAAE,CAAC,IAAI,8BAA8B,CAAC,QAAQ,CAAC;SACjF;KACH,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"shared-module.js","sourceRoot":"","sources":["../../src/lsp/shared-module.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAIlF,OAAO,EAAE,SAAS,EAAE,MAAM,sCAAsC,CAAC;AAEjE,OAAO,EAAE,8BAA8B,EAAE,MAAM,wCAAwC,CAAC;AA+CxF;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,2BAA2B,CACxC,QAA6B;IAE7B,OAAO;QACJ,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC;QAC3C,GAAG,EAAE;YACF,qBAAqB,EAAE,QAAQ,CAAC,EAAE,CAAC,IAAI,8BAA8B,CAAC,QAAQ,CAAC;SACjF;KACH,CAAC;AACL,CAAC"}
@@ -14,10 +14,9 @@ import { type LangiumSharedServices, type ServiceRequirements } from '@hydranium
14
14
  * SHARED slot, so the head binds it in `createLspServerSharedModule` — a
15
15
  * separate module from `createLspServerLanguageModule`. An adopter who adds
16
16
  * only the language module gets a server that boots, links and serves
17
- * completion, and quietly runs Langium's `DefaultDocumentUpdateHandler`: echo
18
- * suppression for the server's own writes, the `didChangeContent` debounce,
19
- * `markNextReason` stamping and the last-client-close rebuild are all absent,
20
- * with nothing in the log to say so.
17
+ * completion, and quietly runs Langium's `DefaultDocumentUpdateHandler`: every
18
+ * behaviour `HydraniumDocumentUpdateHandler` adds, the editor save gate
19
+ * included, is absent, with nothing in the log to say so.
21
20
  *
22
21
  * The type system does not catch it. `createIntegrationServices` returns
23
22
  * `inject(...) as unknown as TShared`, so widening `TShared` with
@@ -35,9 +34,14 @@ import { type LangiumSharedServices, type ServiceRequirements } from '@hydranium
35
34
  export declare function assertLspHeadComposed(services: LangiumSharedServices): void;
36
35
  /**
37
36
  * The framework's LSP server entry point: {@link assertLspHeadComposed}, then
38
- * Langium's `startLanguageServer` unchanged. Signature-compatible with
39
- * Langium's, so it is a drop-in for adopters importing from
40
- * `@hydranium/core/lsp`.
37
+ * {@link guardDiagnosticsConnection} on the tree's connection, then the
38
+ * console's wrapping for the log file, then Langium's `startLanguageServer`.
39
+ * Signature-compatible with Langium's, so it is a drop-in for adopters
40
+ * importing from `@hydranium/core/lsp`. Calling Langium's directly skips the
41
+ * composition check, the guard without which a publish racing teardown fails
42
+ * the build that validated the document, and the wrapping, which a stdio
43
+ * connection discards where a logger was built before it (see
44
+ * `installConsoleTee`).
41
45
  */
42
46
  export declare function startLanguageServer(services: LangiumSharedServices, serviceRequirements?: Partial<ServiceRequirements>): void;
43
47
  //# sourceMappingURL=start-language-server.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"start-language-server.d.ts","sourceRoot":"","sources":["../../src/lsp/start-language-server.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF,OAAO,EAEJ,KAAK,qBAAqB,EAC1B,KAAK,mBAAmB,EAC1B,MAAM,wBAAwB,CAAC;AAGhC;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,qBAAqB,GAAG,IAAI,CAe3E;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,qBAAqB,EAAE,mBAAmB,GAAE,OAAO,CAAC,mBAAmB,CAAM,GAAG,IAAI,CAGjI"}
1
+ {"version":3,"file":"start-language-server.d.ts","sourceRoot":"","sources":["../../src/lsp/start-language-server.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF,OAAO,EAEJ,KAAK,qBAAqB,EAC1B,KAAK,mBAAmB,EAC1B,MAAM,wBAAwB,CAAC;AAKhC;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,qBAAqB,GAAG,IAAI,CAe3E;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,qBAAqB,EAAE,mBAAmB,GAAE,OAAO,CAAC,mBAAmB,CAAM,GAAG,IAAI,CAQjI"}
@@ -8,6 +8,8 @@
8
8
  ********************************************************************************/
9
9
  import { startLanguageServer as startLangiumLanguageServer } from '@hydranium/langium/lsp';
10
10
  import { HydraniumDocumentUpdateHandler } from './hydranium-document-update-handler.js';
11
+ import { guardDiagnosticsConnection } from './diagnostics-connection.js';
12
+ import { installConsoleTee } from '../langium/diagnostics/console-tee.js';
11
13
  /**
12
14
  * Fail the LSP head's start when its shared module was never composed.
13
15
  *
@@ -15,10 +17,9 @@ import { HydraniumDocumentUpdateHandler } from './hydranium-document-update-hand
15
17
  * SHARED slot, so the head binds it in `createLspServerSharedModule` — a
16
18
  * separate module from `createLspServerLanguageModule`. An adopter who adds
17
19
  * only the language module gets a server that boots, links and serves
18
- * completion, and quietly runs Langium's `DefaultDocumentUpdateHandler`: echo
19
- * suppression for the server's own writes, the `didChangeContent` debounce,
20
- * `markNextReason` stamping and the last-client-close rebuild are all absent,
21
- * with nothing in the log to say so.
20
+ * completion, and quietly runs Langium's `DefaultDocumentUpdateHandler`: every
21
+ * behaviour `HydraniumDocumentUpdateHandler` adds, the editor save gate
22
+ * included, is absent, with nothing in the log to say so.
22
23
  *
23
24
  * The type system does not catch it. `createIntegrationServices` returns
24
25
  * `inject(...) as unknown as TShared`, so widening `TShared` with
@@ -49,12 +50,22 @@ export function assertLspHeadComposed(services) {
49
50
  }
50
51
  /**
51
52
  * The framework's LSP server entry point: {@link assertLspHeadComposed}, then
52
- * Langium's `startLanguageServer` unchanged. Signature-compatible with
53
- * Langium's, so it is a drop-in for adopters importing from
54
- * `@hydranium/core/lsp`.
53
+ * {@link guardDiagnosticsConnection} on the tree's connection, then the
54
+ * console's wrapping for the log file, then Langium's `startLanguageServer`.
55
+ * Signature-compatible with Langium's, so it is a drop-in for adopters
56
+ * importing from `@hydranium/core/lsp`. Calling Langium's directly skips the
57
+ * composition check, the guard without which a publish racing teardown fails
58
+ * the build that validated the document, and the wrapping, which a stdio
59
+ * connection discards where a logger was built before it (see
60
+ * `installConsoleTee`).
55
61
  */
56
62
  export function startLanguageServer(services, serviceRequirements = {}) {
57
63
  assertLspHeadComposed(services);
64
+ const connection = services.lsp.Connection;
65
+ if (connection) {
66
+ guardDiagnosticsConnection(connection);
67
+ }
68
+ installConsoleTee();
58
69
  startLangiumLanguageServer(services, serviceRequirements);
59
70
  }
60
71
  //# sourceMappingURL=start-language-server.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"start-language-server.js","sourceRoot":"","sources":["../../src/lsp/start-language-server.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF,OAAO,EACJ,mBAAmB,IAAI,0BAA0B,EAGnD,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,8BAA8B,EAAE,MAAM,wCAAwC,CAAC;AAExF;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,UAAU,qBAAqB,CAAC,QAA+B;IAClE,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,UAAU,EAAE,CAAC;QAC7B,OAAO;IACV,CAAC;IACD,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,qBAAqB,CAAC;IACnD,IAAI,CAAC,CAAC,OAAO,YAAY,8BAA8B,CAAC,EAAE,CAAC;QACxD,MAAM,IAAI,KAAK,CACZ,oGAAoG;YACjG,IAAI,OAAO,EAAE,WAAW,EAAE,IAAI,IAAI,SAAS,uEAAuE;YAClH,kHAAkH;YAClH,kGAAkG;YAClG,4GAA4G;YAC5G,4CAA4C,CACjD,CAAC;IACL,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CAAC,QAA+B,EAAE,sBAAoD,EAAE;IACxH,qBAAqB,CAAC,QAAQ,CAAC,CAAC;IAChC,0BAA0B,CAAC,QAAQ,EAAE,mBAAmB,CAAC,CAAC;AAC7D,CAAC"}
1
+ {"version":3,"file":"start-language-server.js","sourceRoot":"","sources":["../../src/lsp/start-language-server.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF,OAAO,EACJ,mBAAmB,IAAI,0BAA0B,EAGnD,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,8BAA8B,EAAE,MAAM,wCAAwC,CAAC;AACxF,OAAO,EAAE,0BAA0B,EAAE,MAAM,6BAA6B,CAAC;AACzE,OAAO,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AAE1E;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,UAAU,qBAAqB,CAAC,QAA+B;IAClE,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,UAAU,EAAE,CAAC;QAC7B,OAAO;IACV,CAAC;IACD,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,qBAAqB,CAAC;IACnD,IAAI,CAAC,CAAC,OAAO,YAAY,8BAA8B,CAAC,EAAE,CAAC;QACxD,MAAM,IAAI,KAAK,CACZ,oGAAoG;YACjG,IAAI,OAAO,EAAE,WAAW,EAAE,IAAI,IAAI,SAAS,uEAAuE;YAClH,kHAAkH;YAClH,kGAAkG;YAClG,4GAA4G;YAC5G,4CAA4C,CACjD,CAAC;IACL,CAAC;AACJ,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,mBAAmB,CAAC,QAA+B,EAAE,mBAAmB,GAAiC,EAAE;IACxH,qBAAqB,CAAC,QAAQ,CAAC,CAAC;IAChC,MAAM,UAAU,GAAG,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC;IAC3C,IAAI,UAAU,EAAE,CAAC;QACd,0BAA0B,CAAC,UAAU,CAAC,CAAC;IAC1C,CAAC;IACD,iBAAiB,EAAE,CAAC;IACpB,0BAA0B,CAAC,QAAQ,EAAE,mBAAmB,CAAC,CAAC;AAC7D,CAAC"}
@@ -20,11 +20,16 @@ import { Diagnostic } from 'vscode-languageserver-protocol';
20
20
  * be able to request a quick fix. The identity is merged OVER whatever they
21
21
  * pass, which makes the two conventions co-exist rather than compete.
22
22
  *
23
- * The identity lands in both `code` and `data.hydranium` on purpose. `code` is
24
- * what survives to the editor surface; Theia's converter drops `data` before the
25
- * squiggle, so a parameterised diagnostic falls back to the server's English
26
- * there while any adopter-owned surface can still render the parameterised form
27
- * from the marker store.
23
+ * `data` admits adopter-owned keys beside Langium's, which is why the index
24
+ * signature is there rather than a bare `Partial<DiagnosticData>`. Langium's
25
+ * shape is closed, and a diagnostic that carries a COMPANION payload for its own
26
+ * surface to read — the field a form must highlight, say — has nowhere else to
27
+ * put it: an encoder projecting that payload reads `diagnostic.data`, so the
28
+ * narrower type made the identity and the companion mutually exclusive.
29
+ *
30
+ * The identity lands in both `code` and `data.hydranium` on purpose: Theia's
31
+ * converter drops `data` before the squiggle, so `code` is what survives to the
32
+ * editor surface.
28
33
  *
29
34
  * `DiagnosticInfo` must be Langium's own type: a `Parameters<ValidationAcceptor>[2]`
30
35
  * shortcut compiles but loses the `property?: Properties<N>` relation. The `data`
@@ -32,7 +37,7 @@ import { Diagnostic } from 'vscode-languageserver-protocol';
32
37
  * declares `data?: unknown` and an `unknown` cannot be spread.
33
38
  */
34
39
  export declare function acceptMessage<S extends string, N extends AstNode, P extends Properties<N> = Properties<N>>(accept: ValidationAcceptor, severity: 'error' | 'warning' | 'info' | 'hint', message: MessageDefinition<S>, info: Omit<DiagnosticInfo<N, P>, 'code' | 'data'> & {
35
- data?: Partial<DiagnosticData>;
40
+ data?: Partial<DiagnosticData> & Record<string, unknown>;
36
41
  }, ...params: ParamsArg<S>): void;
37
42
  /**
38
43
  * Recover the identity from a published diagnostic, for a surface that
@@ -1 +1 @@
1
- {"version":3,"file":"carriers.d.ts","sourceRoot":"","sources":["../../src/messages/carriers.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF,OAAO,EAIJ,KAAK,iBAAiB,EACtB,KAAK,SAAS,EACd,KAAK,eAAe,EACtB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAClH,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAE5D;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,aAAa,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,OAAO,EAAE,CAAC,SAAS,UAAU,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,EACvG,MAAM,EAAE,kBAAkB,EAC1B,QAAQ,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,GAAG,MAAM,EAC/C,OAAO,EAAE,iBAAiB,CAAC,CAAC,CAAC,EAC7B,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,GAAG;IAAE,IAAI,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,CAAA;CAAE,EACtF,GAAG,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,GACvB,IAAI,CAGN;AAED;;;;;;;;GAQG;AACH,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,UAAU,GAAG,eAAe,GAAG,SAAS,CAK1F"}
1
+ {"version":3,"file":"carriers.d.ts","sourceRoot":"","sources":["../../src/messages/carriers.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF,OAAO,EAIJ,KAAK,iBAAiB,EACtB,KAAK,SAAS,EACd,KAAK,eAAe,EACtB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAClH,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAE5D;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,aAAa,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,OAAO,EAAE,CAAC,SAAS,UAAU,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,EACvG,MAAM,EAAE,kBAAkB,EAC1B,QAAQ,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,GAAG,MAAM,EAC/C,OAAO,EAAE,iBAAiB,CAAC,CAAC,CAAC,EAC7B,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,GAAG;IAAE,IAAI,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,EAChH,GAAG,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,GACvB,IAAI,CAMN;AAED;;;;;;;;GAQG;AACH,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,UAAU,GAAG,eAAe,GAAG,SAAS,CAK1F"}
@@ -19,11 +19,16 @@ import { Diagnostic } from 'vscode-languageserver-protocol';
19
19
  * be able to request a quick fix. The identity is merged OVER whatever they
20
20
  * pass, which makes the two conventions co-exist rather than compete.
21
21
  *
22
- * The identity lands in both `code` and `data.hydranium` on purpose. `code` is
23
- * what survives to the editor surface; Theia's converter drops `data` before the
24
- * squiggle, so a parameterised diagnostic falls back to the server's English
25
- * there while any adopter-owned surface can still render the parameterised form
26
- * from the marker store.
22
+ * `data` admits adopter-owned keys beside Langium's, which is why the index
23
+ * signature is there rather than a bare `Partial<DiagnosticData>`. Langium's
24
+ * shape is closed, and a diagnostic that carries a COMPANION payload for its own
25
+ * surface to read — the field a form must highlight, say — has nowhere else to
26
+ * put it: an encoder projecting that payload reads `diagnostic.data`, so the
27
+ * narrower type made the identity and the companion mutually exclusive.
28
+ *
29
+ * The identity lands in both `code` and `data.hydranium` on purpose: Theia's
30
+ * converter drops `data` before the squiggle, so `code` is what survives to the
31
+ * editor surface.
27
32
  *
28
33
  * `DiagnosticInfo` must be Langium's own type: a `Parameters<ValidationAcceptor>[2]`
29
34
  * shortcut compiles but loses the `property?: Properties<N>` relation. The `data`
@@ -31,7 +36,10 @@ import { Diagnostic } from 'vscode-languageserver-protocol';
31
36
  * declares `data?: unknown` and an `unknown` cannot be spread.
32
37
  */
33
38
  export function acceptMessage(accept, severity, message, info, ...params) {
34
- const data = { ...info.data, ...messageData(message, ...params) };
39
+ const data = {
40
+ ...info.data,
41
+ ...messageData(message, ...params)
42
+ };
35
43
  accept(severity, message.format(...params), { ...info, code: message.code, data });
36
44
  }
37
45
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"carriers.js","sourceRoot":"","sources":["../../src/messages/carriers.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF,OAAO,EACJ,kBAAkB,EAClB,WAAW,EAKb,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAE5D;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,UAAU,aAAa,CAC1B,MAA0B,EAC1B,QAA+C,EAC/C,OAA6B,EAC7B,IAAsF,EACtF,GAAG,MAAoB;IAEvB,MAAM,IAAI,GAAmD,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,GAAG,WAAW,CAAC,OAAO,EAAE,GAAG,MAAM,CAAC,EAAE,CAAC;IAClH,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,EAAE,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;AACtF,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,sBAAsB,CAAC,UAAsB;IAC1D,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACxC,OAAO,SAAS,CAAC;IACpB,CAAC;IACD,OAAO,EAAE,GAAG,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,UAAU,CAAC,gBAAgB,CAAC,UAAU,CAAC,EAAE,CAAC;AAC1F,CAAC"}
1
+ {"version":3,"file":"carriers.js","sourceRoot":"","sources":["../../src/messages/carriers.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF,OAAO,EACJ,kBAAkB,EAClB,WAAW,EAKb,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAE5D;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,MAAM,UAAU,aAAa,CAC1B,MAA0B,EAC1B,QAA+C,EAC/C,OAA6B,EAC7B,IAAgH,EAChH,GAAG,MAAoB;IAEvB,MAAM,IAAI,GAA6E;QACpF,GAAG,IAAI,CAAC,IAAI;QACZ,GAAG,WAAW,CAAC,OAAO,EAAE,GAAG,MAAM,CAAC;KACpC,CAAC;IACF,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,EAAE,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;AACtF,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,sBAAsB,CAAC,UAAsB;IAC1D,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACxC,OAAO,SAAS,CAAC;IACpB,CAAC;IACD,OAAO,EAAE,GAAG,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,UAAU,CAAC,gBAAgB,CAAC,UAAU,CAAC,EAAE,CAAC;AAC1F,CAAC"}
@@ -19,7 +19,7 @@ export * from './carriers.js';
19
19
  export * from './renderer.js';
20
20
  export { MODEL_UPDATE_EDIT } from '../langium/model-service/model-service.js';
21
21
  export { SEPARATOR_IN_NAME } from '../langium/naming/name-separator-validation.js';
22
- export { UNRESOLVED_REFERENCE } from '../langium/validation/document-validator.js';
22
+ export { INVALID_DEDENT, UNEXPECTED_CHARACTER, MISSING_ITERATION, NO_VIABLE_ALTERNATIVE, TRAILING_INPUT, UNEXPECTED_TOKEN, UNPOPPABLE_LEXER_MODE, UNRESOLVED_REFERENCE } from '../langium/validation/document-validator.js';
23
23
  export { NO_LOADABLE_CONTENT } from '../langium/workspace/langium-documents.js';
24
- export { NO_SUCH_FILE, NO_SUCH_PATH } from '../langium/workspace/in-memory-file-system-provider.js';
24
+ export { NO_SUCH_FILE, NO_SUCH_PATH, UNSUPPORTED_DELETE, UNSUPPORTED_WRITE } from '../langium/workspace/in-memory-file-system-provider.js';
25
25
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/messages/index.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF;;;;;;;;GAQG;AAEH,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAE9B,OAAO,EAAE,iBAAiB,EAAE,MAAM,2CAA2C,CAAC;AAC9E,OAAO,EAAE,iBAAiB,EAAE,MAAM,gDAAgD,CAAC;AACnF,OAAO,EAAE,oBAAoB,EAAE,MAAM,6CAA6C,CAAC;AACnF,OAAO,EAAE,mBAAmB,EAAE,MAAM,2CAA2C,CAAC;AAChF,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,wDAAwD,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/messages/index.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF;;;;;;;;GAQG;AAEH,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAE9B,OAAO,EAAE,iBAAiB,EAAE,MAAM,2CAA2C,CAAC;AAC9E,OAAO,EAAE,iBAAiB,EAAE,MAAM,gDAAgD,CAAC;AACnF,OAAO,EACJ,cAAc,EACd,oBAAoB,EACpB,iBAAiB,EACjB,qBAAqB,EACrB,cAAc,EACd,gBAAgB,EAChB,qBAAqB,EACrB,oBAAoB,EACtB,MAAM,6CAA6C,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,2CAA2C,CAAC;AAChF,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,wDAAwD,CAAC"}
@@ -19,7 +19,7 @@ export * from './carriers.js';
19
19
  export * from './renderer.js';
20
20
  export { MODEL_UPDATE_EDIT } from '../langium/model-service/model-service.js';
21
21
  export { SEPARATOR_IN_NAME } from '../langium/naming/name-separator-validation.js';
22
- export { UNRESOLVED_REFERENCE } from '../langium/validation/document-validator.js';
22
+ export { INVALID_DEDENT, UNEXPECTED_CHARACTER, MISSING_ITERATION, NO_VIABLE_ALTERNATIVE, TRAILING_INPUT, UNEXPECTED_TOKEN, UNPOPPABLE_LEXER_MODE, UNRESOLVED_REFERENCE } from '../langium/validation/document-validator.js';
23
23
  export { NO_LOADABLE_CONTENT } from '../langium/workspace/langium-documents.js';
24
- export { NO_SUCH_FILE, NO_SUCH_PATH } from '../langium/workspace/in-memory-file-system-provider.js';
24
+ export { NO_SUCH_FILE, NO_SUCH_PATH, UNSUPPORTED_DELETE, UNSUPPORTED_WRITE } from '../langium/workspace/in-memory-file-system-provider.js';
25
25
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/messages/index.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF;;;;;;;;GAQG;AAEH,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAE9B,OAAO,EAAE,iBAAiB,EAAE,MAAM,2CAA2C,CAAC;AAC9E,OAAO,EAAE,iBAAiB,EAAE,MAAM,gDAAgD,CAAC;AACnF,OAAO,EAAE,oBAAoB,EAAE,MAAM,6CAA6C,CAAC;AACnF,OAAO,EAAE,mBAAmB,EAAE,MAAM,2CAA2C,CAAC;AAChF,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,wDAAwD,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/messages/index.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF;;;;;;;;GAQG;AAEH,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAE9B,OAAO,EAAE,iBAAiB,EAAE,MAAM,2CAA2C,CAAC;AAC9E,OAAO,EAAE,iBAAiB,EAAE,MAAM,gDAAgD,CAAC;AACnF,OAAO,EACJ,cAAc,EACd,oBAAoB,EACpB,iBAAiB,EACjB,qBAAqB,EACrB,cAAc,EACd,gBAAgB,EAChB,qBAAqB,EACrB,oBAAoB,EACtB,MAAM,6CAA6C,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,2CAA2C,CAAC;AAChF,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,wDAAwD,CAAC"}
@@ -6,15 +6,34 @@
6
6
  *
7
7
  * SPDX-License-Identifier: MIT
8
8
  ********************************************************************************/
9
- import { type MessageDefinition, type ParamsArg, type ResolvedMessage, type Tracer } from '@hydranium/protocol';
9
+ import { type Locale, type MessageCatalogue, type MessageDefinition, type ParamsArg, type ResolvedMessage, type Tracer } from '@hydranium/protocol';
10
10
  import { SimpleCache } from '@hydranium/langium';
11
11
  import type { ResponseError } from 'vscode-jsonrpc';
12
12
  import { Diagnostic } from 'vscode-languageserver-protocol';
13
13
  import { type LogNameOptions } from '../langium/diagnostics/logger.js';
14
14
  import type { ServerSharedServicesMinimal } from '../langium/shared-services.js';
15
15
  import type { ServerLocale } from '../locale/server-locale.js';
16
- /** Construction options for {@link ServerMessageRenderer}. */
17
- export type ServerMessageRendererOptions = LogNameOptions;
16
+ /** Construction options for {@link DefaultMessageRenderer}. */
17
+ export type MessageRendererOptions = LogNameOptions;
18
+ /**
19
+ * The render contract the `MessageRenderer` slot holds, implemented by
20
+ * {@link DefaultMessageRenderer}.
21
+ *
22
+ * An interface rather than the class, so the slot is compared STRUCTURALLY. A
23
+ * class-typed slot carries its `protected` members into every assignability
24
+ * check and TypeScript compares those nominally — which makes the slot
25
+ * unsatisfiable by a subclass declared against a second physical copy of this
26
+ * package, which any duplicated install produces. It also
27
+ * lets an adopter REPLACE this declaration rather than intersect with it, so
28
+ * slot resolution does not depend on the order a services type is written in.
29
+ *
30
+ * Every method carries a no-throw contract; see the implementation.
31
+ */
32
+ export interface MessageRenderer {
33
+ renderDiagnostic(diagnostic: Diagnostic): string;
34
+ renderError(error: ResponseError<unknown>): string;
35
+ renderMessage<S extends string>(message: MessageDefinition<S>, ...params: ParamsArg<S>): string;
36
+ }
18
37
  /**
19
38
  * Renders every user-facing message the server sends, in the locale the server
20
39
  * was handed at init. The framework ships no catalogue, so its own behaviour is
@@ -28,7 +47,7 @@ export type ServerMessageRendererOptions = LogNameOptions;
28
47
  * single `render(text)` would force an adopter to match English prose, which
29
48
  * breaks on the first Langium reword.
30
49
  */
31
- export declare class ServerMessageRenderer {
50
+ export declare class DefaultMessageRenderer implements MessageRenderer {
32
51
  protected readonly tracer: Tracer;
33
52
  protected readonly serverLocale: ServerLocale;
34
53
  /**
@@ -43,8 +62,8 @@ export declare class ServerMessageRenderer {
43
62
  * locale arrives once per process. A subclass whose catalogue can change
44
63
  * clears it.
45
64
  */
46
- protected readonly catalogues: SimpleCache<string | undefined, Record<string, string> | undefined>;
47
- constructor(services: ServerSharedServicesMinimal, options?: ServerMessageRendererOptions);
65
+ protected readonly catalogues: SimpleCache<string | undefined, Readonly<Record<string, string>> | undefined>;
66
+ constructor(services: ServerSharedServicesMinimal, options?: MessageRendererOptions);
48
67
  /**
49
68
  * The sentence to publish for `diagnostic`, replacing its current `message`.
50
69
  * Sees lexer and parser errors too, which Langium pushes onto the document
@@ -88,11 +107,17 @@ export declare class ServerMessageRenderer {
88
107
  * corollary is that a catalogue mutated in place afterwards is not seen;
89
108
  * clear {@link catalogues} to invalidate.
90
109
  *
110
+ * **An override merges its entries over the inherited answer rather than
111
+ * replacing it.** Returning only its own map shadows every entry a base
112
+ * class supplies, and a shadowed entry renders the English — byte-identical
113
+ * to a code deliberately left untranslated, so neither the render path nor a
114
+ * catalogue audit can report it.
115
+ *
91
116
  * An adopter wanting Langium's own uncoded sentences instead matches
92
117
  * `Diagnostic.data.code` from an overridden {@link renderDiagnostic}, never
93
118
  * the sentence.
94
119
  */
95
- protected translationsFor(_locale: string | undefined): Record<string, string> | undefined;
120
+ protected translationsFor(_locale: Locale | undefined): MessageCatalogue | undefined;
96
121
  /**
97
122
  * Resolve one identity against the current locale's catalogue.
98
123
  *
@@ -1 +1 @@
1
- {"version":3,"file":"renderer.d.ts","sourceRoot":"","sources":["../../src/messages/renderer.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF,OAAO,EAKJ,KAAK,iBAAiB,EACtB,KAAK,SAAS,EACd,KAAK,eAAe,EACpB,KAAK,MAAM,EACb,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAC5D,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,kCAAkC,CAAC;AACvE,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AACjF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAG/D,8DAA8D;AAC9D,MAAM,MAAM,4BAA4B,GAAG,cAAc,CAAC;AAE1D;;;;;;;;;;;;GAYG;AACH,qBAAa,qBAAqB;IAC/B,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAClC,SAAS,CAAC,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAC;IAC9C;;;;;;;;;;;OAWG;IACH,SAAS,CAAC,QAAQ,CAAC,UAAU,sEAA6E;gBAE9F,QAAQ,EAAE,2BAA2B,EAAE,OAAO,GAAE,4BAAiC;IAK7F;;;;;;;;;;;OAWG;IACH,gBAAgB,CAAC,UAAU,EAAE,UAAU,GAAG,MAAM;IAUhD;;;;OAIG;IACH,WAAW,CAAC,KAAK,EAAE,aAAa,CAAC,OAAO,CAAC,GAAG,MAAM;IAUlD;;;;;;;;;;;;OAYG;IACH,aAAa,CAAC,CAAC,SAAS,MAAM,EAAE,OAAO,EAAE,iBAAiB,CAAC,CAAC,CAAC,EAAE,GAAG,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,MAAM;IAkB/F;;;;;;;;;;;;;OAaG;IACH,SAAS,CAAC,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS;IAI1F;;;;;;;;;;OAUG;IACH,SAAS,CAAC,MAAM,CAAC,OAAO,EAAE,eAAe,GAAG,MAAM;IAQlD;;;;OAIG;IACH,SAAS,CAAC,aAAa,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAI5D,qFAAqF;IACrF,SAAS,CAAC,mBAAmB,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM;CAGtE"}
1
+ {"version":3,"file":"renderer.d.ts","sourceRoot":"","sources":["../../src/messages/renderer.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF,OAAO,EAKJ,KAAK,MAAM,EACX,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,EACtB,KAAK,SAAS,EACd,KAAK,eAAe,EACpB,KAAK,MAAM,EACb,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAC5D,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,kCAAkC,CAAC;AACvE,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AACjF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAG/D,+DAA+D;AAC/D,MAAM,MAAM,sBAAsB,GAAG,cAAc,CAAC;AAEpD;;;;;;;;;;;;;GAaG;AACH,MAAM,WAAW,eAAe;IAC7B,gBAAgB,CAAC,UAAU,EAAE,UAAU,GAAG,MAAM,CAAC;IACjD,WAAW,CAAC,KAAK,EAAE,aAAa,CAAC,OAAO,CAAC,GAAG,MAAM,CAAC;IACnD,aAAa,CAAC,CAAC,SAAS,MAAM,EAAE,OAAO,EAAE,iBAAiB,CAAC,CAAC,CAAC,EAAE,GAAG,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC;CAClG;AAED;;;;;;;;;;;;GAYG;AACH,qBAAa,sBAAuB,YAAW,eAAe;IAC3D,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAClC,SAAS,CAAC,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAC;IAC9C;;;;;;;;;;;OAWG;IACH,SAAS,CAAC,QAAQ,CAAC,UAAU,gFAAuE;IAEpG,YAAY,QAAQ,EAAE,2BAA2B,EAAE,OAAO,GAAE,sBAA2B,EAGtF;IAED;;;;;;;;;;;OAWG;IACH,gBAAgB,CAAC,UAAU,EAAE,UAAU,GAAG,MAAM,CAQ/C;IAED;;;;OAIG;IACH,WAAW,CAAC,KAAK,EAAE,aAAa,CAAC,OAAO,CAAC,GAAG,MAAM,CAQjD;IAED;;;;;;;;;;;;OAYG;IACH,aAAa,CAAC,CAAC,SAAS,MAAM,EAAE,OAAO,EAAE,iBAAiB,CAAC,CAAC,CAAC,EAAE,GAAG,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,MAAM,CAgB9F;IAED;;;;;;;;;;;;;;;;;;;OAmBG;IACH,SAAS,CAAC,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,gBAAgB,GAAG,SAAS,CAEnF;IAED;;;;;;;;;;OAUG;IACH,SAAS,CAAC,MAAM,CAAC,OAAO,EAAE,eAAe,GAAG,MAAM,CAMjD;IAED;;;;OAIG;IACH,SAAS,CAAC,aAAa,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAE3D;IAED,qFAAqF;IACrF,SAAS,CAAC,mBAAmB,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAEnE;CACH"}