@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
@@ -7,8 +7,10 @@
7
7
  * SPDX-License-Identifier: MIT
8
8
  ********************************************************************************/
9
9
  import { isPromiseLike, Logger } from '@hydranium/protocol';
10
- import { AstUtils, DocumentState, interruptAndCheck, UriUtils } from '@hydranium/langium';
10
+ import { AstUtils, DocumentState, interruptAndCheck, isOperationCancelled, UriUtils } from '@hydranium/langium';
11
+ import { CancellationToken } from 'vscode-languageserver';
11
12
  import { Registry } from '../../util/registry.js';
13
+ import { isVirtualUri } from '../workspace/virtual-document.js';
12
14
  import { IntegrityPhase } from './integrity-rule.js';
13
15
  export var IntegrityService;
14
16
  (function (IntegrityService) {
@@ -23,6 +25,11 @@ export var IntegrityService;
23
25
  * at `DocumentState.Validated` and delivered separately via `publishDiagnostics`
24
26
  * or the `onModelUpdated` event.
25
27
  *
28
+ * The AST is what this guarantees, not the text. For a closed document whose
29
+ * repair was STAGED rather than written (`'editor'` sync mode),
30
+ * `textDocument` still mirrors disk — read the repair off the AST, or from
31
+ * the staged content the next open consumes.
32
+ *
26
33
  * Invariant: integrity rules only register at Parsed or Linked, so the build
27
34
  * is guaranteed post-integrity once it advances past `onBuildPhase(Linked)`
28
35
  * into `IndexedReferences`. {@link IntegrityService.register} enforces this at
@@ -31,6 +38,13 @@ export var IntegrityService;
31
38
  */
32
39
  IntegrityService.SettledState = DocumentState.IndexedReferences;
33
40
  })(IntegrityService || (IntegrityService = {}));
41
+ /**
42
+ * The shared services of each server that has logged its first silent
43
+ * write-back. Every language of a server holds the same shared services, so
44
+ * keying on them makes {@link DefaultIntegrityService.noteSilentWrite} report once
45
+ * per server rather than once per language.
46
+ */
47
+ const silentWriteReported = new WeakSet();
34
48
  /**
35
49
  * Default {@link IntegrityService} implementation. Enforces rules,
36
50
  * resyncs document text after mutations, and propagates corrections.
@@ -55,13 +69,14 @@ export class DefaultIntegrityService {
55
69
  /** One logger per rule, created at registration and dropped on unregister. */
56
70
  ruleLoggers = new Map();
57
71
  /**
58
- * Rules bucketed by the phase they target, preserving the registry's
59
- * priority order within each bucket. Rebuilt lazily on the first
60
- * `enforceIntegrity` call after a registry mutation — staleness is detected
61
- * via reference identity of the registry's cached array (see
62
- * {@link Registry.all}). Filtering the rule list per call would instead
63
- * allocate one transient array per document per phase, which a workspace
64
- * whose documents all settle at the same phase pays on every build.
72
+ * Rules bucketed by the phase they target, then by each `$type` from
73
+ * {@link nodeTypesFor}, preserving the registry's priority order within
74
+ * each bucket. Rebuilt lazily on the first `enforceIntegrity` call after a
75
+ * registry mutation — staleness is detected via reference identity of the
76
+ * registry's cached array (see {@link Registry.all}). Filtering the rule
77
+ * list per call would instead allocate one transient array per document per
78
+ * phase, which a workspace whose documents all settle at the same phase pays
79
+ * on every build.
65
80
  */
66
81
  phaseBuckets = new Map();
67
82
  phaseBucketsFor;
@@ -72,9 +87,7 @@ export class DefaultIntegrityService {
72
87
  tracer;
73
88
  /**
74
89
  * The framework document builder, used to re-parse + re-link a document in place after a
75
- * Linked-phase correction (see {@link resyncDocument}). The framework binds
76
- * `shared.workspace.DocumentBuilder` to {@link HydraniumDocumentBuilder}; the narrowing
77
- * cast surfaces its single-document phase runner.
90
+ * Linked-phase correction (see {@link resyncDocument}).
78
91
  */
79
92
  documentBuilder;
80
93
  constructor(services, options = {}) {
@@ -109,7 +122,7 @@ export class DefaultIntegrityService {
109
122
  * rule set to completion against a doomed build.
110
123
  */
111
124
  async enforceBatch(documents, phase, cancelToken) {
112
- const phaseStart = performance.now();
125
+ const sincePhaseStart = this.services.shared.Clock.stopwatch();
113
126
  let mutatedCount = 0;
114
127
  // Per-rule self-time profiling is opt-in: only spin up a session when the
115
128
  // debug threshold is active, so the production `info` path allocates
@@ -119,14 +132,19 @@ export class DefaultIntegrityService {
119
132
  const changed = await this.enforceIntegrity(document, phase, cancelToken, session);
120
133
  if (changed) {
121
134
  mutatedCount++;
122
- await this.resyncDocument(document, cancelToken);
135
+ // Not cancellable: see `resyncDocument`.
136
+ await this.resyncDocument(document, CancellationToken.None);
123
137
  }
124
138
  await interruptAndCheck(cancelToken);
125
139
  }
126
- const totalMs = Math.round(performance.now() - phaseStart);
127
- if (totalMs >= 25 || mutatedCount > 0) {
140
+ const totalMs = Math.round(sincePhaseStart.elapsedMs);
141
+ // A repair is the operator's to know of; the timing alone is diagnosis.
142
+ if (mutatedCount > 0) {
128
143
  this.tracer.info(`enforce ${DocumentState[phase]}: docs=${documents.length}, mutated=${mutatedCount} [${totalMs}ms]`);
129
144
  }
145
+ else if (totalMs >= 25) {
146
+ this.tracer.debug(`enforce ${DocumentState[phase]}: docs=${documents.length}, mutated=${mutatedCount} [${totalMs}ms]`);
147
+ }
130
148
  // One line per rule (count + self-% + self-ms), sorted by cost — only when profiling.
131
149
  session?.report('debug');
132
150
  }
@@ -141,6 +159,12 @@ export class DefaultIntegrityService {
141
159
  'Allowed phases are Parsed and Linked.');
142
160
  }
143
161
  const disposable = this.rules.register(rule);
162
+ // No parsed node carries a type the reflection does not know, so such a
163
+ // rule never runs. A warning, not a throw: a test reflection may omit the type.
164
+ if (!this.services.shared.AstReflection.getAllTypes().includes(rule.nodeType)) {
165
+ this.tracer.warn(`Integrity rule '${this.formatRule(rule)}' is keyed on node type '${rule.nodeType}', ` +
166
+ 'which the AST reflection does not know, so no parsed node matches it.');
167
+ }
144
168
  this.ruleLoggers.set(rule.id, this.tracer.sub(IntegrityPhase.toString(rule.phase)).sub(rule.label ?? rule.id));
145
169
  return {
146
170
  dispose: () => {
@@ -175,37 +199,45 @@ export class DefaultIntegrityService {
175
199
  * full rule sweep) — coarser than per (node × rule) to avoid a microtask
176
200
  * per inner iteration, finer than per-document so a long-running rule set
177
201
  * on a large file can still interrupt mid-stream. Throws
178
- * `OperationCancelled` when the token is cancelled; Langium's build
179
- * pipeline absorbs the throw at the lock-holder.
202
+ * `OperationCancelled` when the token is cancelled before any rule mutated
203
+ * the AST; Langium's build pipeline absorbs the throw at the lock-holder.
204
+ * After a mutation it stops the sweep and returns `true` instead, so the
205
+ * caller can resync what was mutated before the cancellation unwinds.
180
206
  */
181
207
  async enforceIntegrity(document, phase, cancelToken, session) {
182
208
  if (cancelToken?.isCancellationRequested) {
183
209
  return false;
184
210
  }
185
211
  let changed = false;
186
- const rulesForPhase = this.getPhaseBucket(phase);
187
- if (rulesForPhase.length === 0) {
212
+ const rulesByType = this.getPhaseBucket(phase);
213
+ if (rulesByType.size === 0) {
188
214
  return false;
189
215
  }
190
216
  const relativeUri = this.services.shared.workspace.WorkspaceManager.wsRelativePath(document.uri);
191
217
  for (const node of AstUtils.streamAst(document.parseResult.value)) {
192
- for (const rule of rulesForPhase) {
193
- if (node.$type === rule.nodeType) {
194
- const ruleLogger = this.ruleLoggers.get(rule.id).with(relativeUri);
195
- // Scope per rule so the session aggregates self-time by rule id across all
196
- // nodes; off the profiling path `session` is undefined and we call directly.
197
- const enforced = session
198
- ? session.scope(rule.id, () => rule.enforce(node, document, ruleLogger))
199
- : rule.enforce(node, document, ruleLogger);
200
- const mutated = isPromiseLike(enforced) ? await enforced : enforced;
201
- if (mutated) {
202
- ruleLogger.trace(`[${relativeUri}] Mutated ${this.formatNode(node)}`);
203
- }
204
- changed = mutated || changed;
218
+ for (const rule of rulesByType.get(node.$type) ?? NO_RULES) {
219
+ const ruleLogger = this.ruleLoggers.get(rule.id).with(relativeUri);
220
+ // Scope per rule so the session aggregates self-time by rule id across all
221
+ // nodes; off the profiling path `session` is undefined and we call directly.
222
+ const enforced = session
223
+ ? session.scope(rule.id, () => rule.enforce(node, document, ruleLogger))
224
+ : rule.enforce(node, document, ruleLogger);
225
+ const mutated = isPromiseLike(enforced) ? await enforced : enforced;
226
+ if (mutated) {
227
+ ruleLogger.trace(`[${relativeUri}] Mutated ${this.formatNode(node)}`);
205
228
  }
229
+ changed = mutated || changed;
206
230
  }
207
231
  if (cancelToken !== undefined) {
208
- await interruptAndCheck(cancelToken);
232
+ try {
233
+ await interruptAndCheck(cancelToken);
234
+ }
235
+ catch (err) {
236
+ if (changed && isOperationCancelled(err)) {
237
+ return true;
238
+ }
239
+ throw err;
240
+ }
209
241
  }
210
242
  }
211
243
  return changed;
@@ -214,30 +246,111 @@ export class DefaultIntegrityService {
214
246
  * Re-serialise the document text after AST mutations, propagate corrections,
215
247
  * and re-parse at Parsed phase (safe because linking hasn't occurred yet).
216
248
  *
217
- * `cancelToken` is checked at entry so a preempted build skips the
218
- * serialise / disk-write atomic; the steps inside resync are not further
219
- * subdivided because each is a single fast operation that does not yield
220
- * a natural interruption point.
249
+ * Runs to the end whatever `cancelToken` says: the AST is already mutated,
250
+ * and skipping the resync leaves it against unchanged text that the next
251
+ * build does not re-parse. `cancelToken` reaches only the re-parse.
221
252
  */
222
253
  async resyncDocument(document, cancelToken) {
223
- if (cancelToken?.isCancellationRequested) {
224
- return;
225
- }
226
254
  const root = document.parseResult.value;
227
- const newText = await this.services.serializer.Serializer.serializeAst(root);
255
+ // Extracted while `document` still holds the text being replaced — the
256
+ // resync that follows overwrites it with `newText`. Absent on a test
257
+ // stub that binds no trivia group; `createServerLanguageModule` always
258
+ // provides it, and an empty registry is already the no-op.
259
+ const trivia = this.services.trivia?.TriviaService;
260
+ const extracted = trivia?.extract(document);
261
+ const serialized = await this.services.serializer.Serializer.serializeAst(root);
262
+ const newText = extracted === undefined ? serialized : trivia.apply(serialized, extracted, UriUtils.toUri(document.textDocument.uri));
228
263
  const oldText = document.textDocument.getText();
229
264
  if (oldText === newText) {
230
265
  return;
231
266
  }
232
- // Keep the same version so HydraniumTextDocuments doesn't reject subsequent client edits.
233
- // Use manager.update so the `instanceof FullTextDocument` gate in the bare
234
- // `TextDocument.update` doesn't trip on adopter-custom text-document types.
235
- const textDocument = this.textDocuments.update(document.textDocument, [{ text: newText }], document.textDocument.version);
236
- await this.syncCorrections(textDocument);
267
+ const version = document.textDocument.version;
268
+ // Commit into the store's own document when the URI is open there, rather
269
+ // than into whichever text-document object this build is holding. The two
270
+ // are the same on the LSP path and are NOT when the document was built for
271
+ // an already-open URI through `fromString`: repairing only the build's copy
272
+ // leaves the store — the server's authority on what an open document says —
273
+ // on the unrepaired text, and the reconciling re-parse then redefines
274
+ // `textDocument` onto the store's object and discards the repair with it.
275
+ //
276
+ // Compared against the CST's own text, not against `document.textDocument`.
277
+ // That object IS the store's on the LSP path, so asking it whether the
278
+ // store still agrees compares the store with itself and can only ever say
279
+ // yes — the guard would be vacuous exactly where an editor race can happen.
280
+ // The CST's `fullText` is the text that actually produced this AST, which
281
+ // is the only thing a repair derived from it is valid against. A document
282
+ // with no CST (built from a model rather than parsed) has no better answer
283
+ // than the text it is carrying.
284
+ const parsedFrom = document.parseResult.value.$cstNode?.root.fullText ?? oldText;
285
+ const commit = this.textDocuments.commitRepair(document.textDocument.uri, parsedFrom, newText);
286
+ if (commit.status === 'stale') {
287
+ // An edit landed after the parse this repair came from, so the repair
288
+ // describes text the store has already replaced. Abandon it rather than
289
+ // hand it to `syncCorrections`: an override that persists from there
290
+ // would write a correction over the edit that superseded it. That edit
291
+ // drives a build of its own, which re-runs these rules against what the
292
+ // document actually says.
293
+ //
294
+ // Abandoning the WRITE is only half of it. The build carries on to its
295
+ // settled phase with whatever AST is registered, and every settled
296
+ // consumer reads that AST rather than the store — so leaving the rule's
297
+ // mutation in place would answer questions about this document from a
298
+ // parse of text nobody has. Reconciling discards it by re-reading the
299
+ // store, which is what the document now has to agree with.
300
+ await this.reconcileDocument(document, cancelToken);
301
+ return;
302
+ }
303
+ // A committed repair is a new version; a document no client has open keeps
304
+ // its number here, and the re-versioning below moves it once the build
305
+ // has reconciled. Through the store's `update`, so the `instanceof
306
+ // FullTextDocument` gate in the bare `TextDocument.update` does not trip
307
+ // on adopter-custom text-document types.
308
+ const textDocument = commit.status === 'committed' ? commit.document : this.textDocuments.update(document.textDocument, [{ text: newText }], version);
309
+ await this.syncCorrections(textDocument, parsedFrom);
310
+ await this.reconcileDocument(document, cancelToken);
311
+ // Re-version against the REPAIRED text, after either branch. The repair is
312
+ // a content change the store has not seen: whatever reconciliation ran
313
+ // during the re-parse saw the text on disk, which in `'editor'` sync mode
314
+ // is the PRE-repair text. Leave the sequence describing that and the next
315
+ // open hashes the repair, finds a mismatch and steps the version again, so
316
+ // every base version taken from this build is stale before it is used.
317
+ // An open document keeps the store's own version, which is not this
318
+ // method's to move.
319
+ //
320
+ // Deliberately NOT gated on cancellation, unlike the entry to this method:
321
+ // `syncCorrections` has already written or staged the repair by now, so a
322
+ // preempted build that skipped this would leave the sequence describing
323
+ // text that is no longer there.
324
+ if (!this.textDocuments.isOpen(document.textDocument.uri)) {
325
+ // The root describes the repair too; left at the re-parse's number, a
326
+ // syncing read waits for a build nothing requests. The CST is still
327
+ // the unrepaired text, so the repair is reported as the parsed text.
328
+ this.services.shared.workspace.VersionSyncService.modelProduced(document, { text: newText });
329
+ }
330
+ }
331
+ /**
332
+ * Bring `document` back into agreement with the text it is supposed to
333
+ * describe, after a rule has mutated its AST.
334
+ *
335
+ * Used for a correction that was applied and for one that was abandoned,
336
+ * because the document is left inconsistent either way: applied, the text
337
+ * moved under the CST; abandoned, the AST carries a mutation the text never
338
+ * had. Both are the same question — re-read and re-derive — and the phase is
339
+ * what decides how far that has to go.
340
+ */
341
+ async reconcileDocument(document, cancelToken) {
237
342
  if (document.state <= DocumentState.Parsed) {
238
343
  // Parsed-phase correction: re-parse only. The build pipeline still runs
239
344
  // IndexedContent → ComputedScopes → Linked → … on the fresh AST afterwards,
240
345
  // so the document reconciles naturally with no extra work here.
346
+ //
347
+ // Except for a closed document whose repair did not reach disk — `'editor'`
348
+ // sync mode stages it instead of writing it — where the re-parse is SKIPPED:
349
+ // Langium's factory gates the parse on the CST's `fullText`, which still
350
+ // equals the disk text the same call re-reads and redefines `textDocument`
351
+ // over. So `document.textDocument` is NOT post-integrity for such a
352
+ // document — it mirrors disk, and the AST is the only place the repair is
353
+ // legible, until an open consumes the staging.
241
354
  await this.documentBuilder.reparse(document, cancelToken);
242
355
  }
243
356
  else {
@@ -257,31 +370,138 @@ export class DefaultIntegrityService {
257
370
  * already in the synced store (in-place in {@link resyncDocument}); this
258
371
  * method routes the out-of-band part by document registration:
259
372
  *
260
- * - **Open in the language client** → nothing to push here. The AST mutation
261
- * rode the current build, so `ModelService.syncToLanguageClient` (the
262
- * persistent integrity-settled listener) mirrors the corrected text to the
263
- * client by *content* (shadow diff) — no authorship rewrite, no second
264
- * rebuild.
373
+ * - **Open in the language client** → nothing to push here. The AST
374
+ * mutation rode the current build, so
375
+ * `DefaultModelService.syncToLanguageClient` (the persistent
376
+ * integrity-settled listener) mirrors it to the client by
377
+ * *content* (shadow diff), and the editor shows it as an unsaved change.
378
+ * - **Held only through the data or GLSP head**, or waiting out the release
379
+ * grace after its last client's connection was lost → the store is the
380
+ * authority, and those heads read the correction from the settled build.
381
+ * In silent mode it is also written to disk when the text it was computed
382
+ * from is what disk holds, since the repair is then the only difference;
383
+ * otherwise it waits for the next save. Editor mode always waits, and the
384
+ * repair leaves the document dirty until a save.
265
385
  * - **Closed, silent mode** → write to disk directly (disk is authoritative).
266
- * - **Closed, editor mode** → stage so the next open picks it up via applyEdit.
386
+ * - **Closed, editor mode** → stage, so the next open takes the correction
387
+ * over the disk text.
388
+ *
389
+ * A held URI is not closed. Writing it as one persists the holder's unsaved
390
+ * edits with the repair, and staging it leaves text no open reads, because
391
+ * only a first open consumes the stage.
392
+ *
393
+ * `parsedFrom` is the text the repaired AST was parsed from. Without it a
394
+ * held URI's repair is left to the next save.
267
395
  */
268
- async syncCorrections(document) {
269
- // Open files: delivery is the ModelService settled listener's job (by
270
- // content, via the shadow) — nothing to do here. Only the open/closed
271
- // question is asked, so no reverse address resolution is needed: a file
272
- // open under a symlinked path still answers `true`.
396
+ async syncCorrections(document, parsedFrom) {
397
+ // Only the open/closed question is asked, so no reverse address
398
+ // resolution is needed: a file open under a symlinked path still answers
399
+ // `true`.
273
400
  if (this.textDocuments.isOpenInLanguageClient(document.uri)) {
274
401
  return;
275
402
  }
403
+ // A virtual document has no disk backing, so neither persisting nor
404
+ // staging applies: there is no file to write and no editor that could open
405
+ // one. `URI.fsPath` yields a path for any scheme, so handing this to the
406
+ // provider would address `<cwd>/<contributor>/<name>` — an unrelated
407
+ // location a disk-backed provider refuses outright, turning a repair that
408
+ // was never persistable into a build failure. The correction is already on
409
+ // the AST and in the text store, which is the whole of where a virtual
410
+ // document lives, so there is nothing further to propagate.
411
+ if (isVirtualUri(document.uri)) {
412
+ this.tracer.with(document.uri).debug('Virtual document: correction kept in memory, nothing to persist');
413
+ return;
414
+ }
415
+ // A document waiting out the release grace still holds its lost client's
416
+ // unsaved text, so writing it as a closed file would persist that text.
417
+ if (this.textDocuments.isOpenInAnyClient(document.uri) || this.textDocuments.isReleaseDeferred(document.uri)) {
418
+ if (this.syncMode === 'silent' && parsedFrom !== undefined) {
419
+ await this.persistIfDiskMatches(document, parsedFrom);
420
+ }
421
+ return;
422
+ }
276
423
  // Closed files, silent mode: write to disk directly.
277
424
  if (this.syncMode === 'silent') {
425
+ const repaired = document.getText();
278
426
  // Async write so the integrity pass does not block the event loop on a slow filesystem.
279
- await this.fileSystemProvider.writeFile(UriUtils.toUri(document.uri), document.getText());
427
+ // In the file's task queue, behind any save already queued: written
428
+ // beside one, the older repair can land last and stay on disk.
429
+ await this.services.shared.workspace.FileSystemTaskQueue.enqueue(document.uri, () => this.fileSystemProvider.writeFile(UriUtils.toUri(document.uri), repaired));
430
+ this.noteSilentWrite(document.uri);
280
431
  return;
281
432
  }
282
- // Closed files, editor mode: stage content so the next open picks it up via applyEdit.
433
+ // Closed files, editor mode: stage content for the next open.
283
434
  this.textDocuments.stagePendingContent(document.uri, document.getText());
284
435
  }
436
+ /**
437
+ * Write the repair in `document` to disk when disk still holds `parsedFrom`,
438
+ * the text the repair was computed from — so the write carries the repair
439
+ * and nothing a holder could still discard.
440
+ *
441
+ * The read, the compare and the write run as one task in the file's task
442
+ * queue, so no save of the file lands between them. The store is compared
443
+ * again once the read returns, and the write is skipped if it no longer
444
+ * holds the repair: an edit does not wait for the queue, and writing the
445
+ * older repair then puts text on disk that no participant holds. The
446
+ * skipped repair loses nothing: the edit drives a build of its own, and a
447
+ * save writes the store's text. A file that cannot be read is left alone
448
+ * too: there is no evidence it matches. So is a file an editor opened in the
449
+ * meantime: the editor receives the repair as an unsaved change, and writing
450
+ * it would change the file under the editor.
451
+ */
452
+ async persistIfDiskMatches(document, parsedFrom) {
453
+ const uri = UriUtils.toUri(document.uri);
454
+ const repaired = document.getText();
455
+ await this.services.shared.workspace.FileSystemTaskQueue.enqueue(document.uri, async () => {
456
+ let onDisk;
457
+ try {
458
+ onDisk = await this.fileSystemProvider.readFile(uri);
459
+ }
460
+ catch (error) {
461
+ this.tracer.with(document.uri).debug(`Held document unreadable on disk, repair left to the next save: ${String(error)}`);
462
+ return;
463
+ }
464
+ // The file itself, not the store's disk baseline: the baseline moves
465
+ // only when the server hears of a change, so it can still hold the
466
+ // parsed text after another process rewrote the file and before the
467
+ // watcher reports it, and this write would then replace that change.
468
+ if (onDisk !== parsedFrom) {
469
+ return;
470
+ }
471
+ if (this.textDocuments.get(document.uri)?.getText() !== repaired) {
472
+ this.tracer.with(document.uri).debug('Held document changed while disk was read, repair left to that change');
473
+ return;
474
+ }
475
+ if (this.textDocuments.isOpenInLanguageClient(document.uri)) {
476
+ this.tracer.with(document.uri).debug('Editor attached while disk was read, repair left to its save');
477
+ return;
478
+ }
479
+ await this.fileSystemProvider.writeFile(uri, repaired);
480
+ this.textDocuments.setDiskBaseline(document.uri, repaired);
481
+ this.noteSilentWrite(document.uri);
482
+ });
483
+ }
484
+ /**
485
+ * Hand the first repair written to disk in `'silent'` sync mode to
486
+ * {@link reportSilentWrite}. Once per server, whichever language writes,
487
+ * rather than per file: a workspace-wide repair pass would otherwise log a
488
+ * line per document.
489
+ */
490
+ noteSilentWrite(uri) {
491
+ if (silentWriteReported.has(this.services.shared)) {
492
+ return;
493
+ }
494
+ silentWriteReported.add(this.services.shared);
495
+ this.reportSilentWrite(uri);
496
+ }
497
+ /**
498
+ * Log a server's first silent write-back, so an adopter learns that
499
+ * integrity rules edit their files and which setting controls it.
500
+ */
501
+ reportSilentWrite(uri) {
502
+ this.tracer.info(`Wrote an integrity repair to ${uri}. The integrity service's syncMode option is 'silent', ` +
503
+ "which writes repairs to disk; 'editor' leaves disk alone. Later repairs are written without this line.");
504
+ }
285
505
  /**
286
506
  * Format a rule's name for inclusion in user-facing diagnostic strings
287
507
  * (error messages thrown during registration). Defaults to
@@ -305,6 +525,17 @@ export class DefaultIntegrityService {
305
525
  const label = fromName ?? fromId;
306
526
  return label ? `${node.$type}('${label}')` : node.$type;
307
527
  }
528
+ /**
529
+ * The `$type`s `rule` runs on. Defaults to its `nodeType` and every subtype,
530
+ * as Langium's validation registry does: no node carries an abstract or union
531
+ * type as its `$type`, so an exact match never runs a rule keyed on one.
532
+ * Read only when the phase buckets rebuild after a registration change, so an
533
+ * override must not depend on anything else.
534
+ */
535
+ nodeTypesFor(rule) {
536
+ // A type the reflection does not know still matches itself.
537
+ return [rule.nodeType, ...this.services.shared.AstReflection.getAllSubTypes(rule.nodeType)];
538
+ }
308
539
  getPhaseBucket(phase) {
309
540
  const current = this.rules.all();
310
541
  if (this.phaseBucketsFor !== current) {
@@ -312,10 +543,18 @@ export class DefaultIntegrityService {
312
543
  for (const rule of current) {
313
544
  let bucket = next.get(rule.phase);
314
545
  if (!bucket) {
315
- bucket = [];
546
+ bucket = new Map();
316
547
  next.set(rule.phase, bucket);
317
548
  }
318
- bucket.push(rule);
549
+ // Deduplicated, or a rule runs twice on a node of its own type.
550
+ for (const nodeType of new Set(this.nodeTypesFor(rule))) {
551
+ let rules = bucket.get(nodeType);
552
+ if (!rules) {
553
+ rules = [];
554
+ bucket.set(nodeType, rules);
555
+ }
556
+ rules.push(rule);
557
+ }
319
558
  }
320
559
  this.phaseBuckets = next;
321
560
  this.phaseBucketsFor = current;
@@ -323,6 +562,7 @@ export class DefaultIntegrityService {
323
562
  return this.phaseBuckets.get(phase) ?? EMPTY_PHASE_BUCKET;
324
563
  }
325
564
  }
326
- /** Shared empty result so `getPhaseBucket` doesn't allocate per call on the cold path. */
327
- const EMPTY_PHASE_BUCKET = Object.freeze([]);
565
+ // Shared empty results so neither the cold path nor a node no rule matches allocates.
566
+ const EMPTY_PHASE_BUCKET = new Map();
567
+ const NO_RULES = Object.freeze([]);
328
568
  //# sourceMappingURL=integrity-service.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"integrity-service.js","sourceRoot":"","sources":["../../../src/langium/integrity/integrity-service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"integrity-service.js","sourceRoot":"","sources":["../../../src/langium/integrity/integrity-service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,64 @@
1
+ /********************************************************************************
2
+ * Copyright (c) 2026 CrossBreeze, EclipseSource and others.
3
+ *
4
+ * This program and the accompanying materials are made available under the
5
+ * terms of the MIT License which is available in the project root.
6
+ *
7
+ * SPDX-License-Identifier: MIT
8
+ ********************************************************************************/
9
+ /**
10
+ * Containment-array maintenance for callers that build or delete AST nodes
11
+ * programmatically — a GLSP operation handler being the usual one.
12
+ *
13
+ * **These live beside the key provider because the constraint is the key
14
+ * provider's.** `NameBasedKeyProvider` keys a node the `NameProvider` gives no
15
+ * name from its position, as `` `${$containerProperty}@${$containerIndex}` ``,
16
+ * so a node appended with a bare `array.push` carries neither and
17
+ * `getElementKey` answers `undefined` — the element has no key at all, and the
18
+ * GLSP index cannot address it. Deleting from the middle of such a list must
19
+ * renumber the survivors, or an id derived later in the same command names the
20
+ * wrong node. Shipping the constraint's statement without the code that
21
+ * discharges it leaves every adopter in that position re-deriving thirty lines
22
+ * from prose, and both failures are silent.
23
+ *
24
+ * The population is narrower than "anyone creating elements from a diagram": it
25
+ * takes a grammar with UNNAMED element types, programmatic creation or deletion
26
+ * of them, and this key provider. A grammar whose diagram elements are all
27
+ * named never reaches it, and the two ways out are named on the provider —
28
+ * give the type a name, or bind a provider whose fallback is content-derived.
29
+ *
30
+ * **Free functions, and deliberately not a step on the AST builder.** Building a
31
+ * node detached and appending it later is legitimate, so a containment step
32
+ * cannot be mandatory; and an optional fluent step could not check the index
33
+ * against the array unless it were handed the array, at which point it is these
34
+ * signatures with more ceremony. `AstNodeInit` already accepts the three fields
35
+ * for a caller who has them, which is the case these cover: it is the INDEX that
36
+ * cannot be known without reading the array.
37
+ */
38
+ import type { AstNode } from '@hydranium/langium';
39
+ /**
40
+ * Append `child` to `children`, stamping the Langium containment plumbing
41
+ * (`$container`, `$containerProperty`, `$containerIndex`) so a positional key
42
+ * can address it.
43
+ *
44
+ * `property` and `children` are separate parameters rather than one property
45
+ * name the function dereferences: the array is what the index is derived from,
46
+ * so taking it directly is what makes the two agree by construction instead of
47
+ * by a lookup that a typo could point elsewhere.
48
+ *
49
+ * @returns `child`, so a caller can append and use it in one expression.
50
+ */
51
+ export declare function appendChild<TChild extends AstNode>(container: AstNode, property: string, children: TChild[], child: TChild): TChild;
52
+ /**
53
+ * Remove every entry of `children` that is in `toRemove`, then renumber the
54
+ * survivors' `$containerIndex`.
55
+ *
56
+ * Mutates `children` in place rather than returning a new array, because the
57
+ * caller's array IS the AST's containment list — replacing the reference would
58
+ * leave the parent pointing at the old one.
59
+ *
60
+ * @returns how many entries were removed, so a caller can tell a no-op delete
61
+ * from one that changed the model without comparing lengths itself.
62
+ */
63
+ export declare function removeChildren<TChild extends AstNode>(children: TChild[], toRemove: ReadonlySet<TChild>): number;
64
+ //# sourceMappingURL=containment.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"containment.d.ts","sourceRoot":"","sources":["../../../src/langium/keys/containment.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAGlD;;;;;;;;;;;GAWG;AACH,wBAAgB,WAAW,CAAC,MAAM,SAAS,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAOnI;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,cAAc,CAAC,MAAM,SAAS,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,MAAM,CAYhH"}