@hydranium/core 1.0.0-next.18 → 1.0.0-next.181

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 (572) hide show
  1. package/README.md +5 -1
  2. package/lib/documents/ast-document-manager.d.ts +190 -30
  3. package/lib/documents/ast-document-manager.d.ts.map +1 -1
  4. package/lib/documents/ast-document-manager.js +236 -40
  5. package/lib/documents/ast-document-manager.js.map +1 -1
  6. package/lib/documents/client-ids.d.ts +5 -19
  7. package/lib/documents/client-ids.d.ts.map +1 -1
  8. package/lib/documents/client-ids.js +5 -19
  9. package/lib/documents/client-ids.js.map +1 -1
  10. package/lib/documents/client-session-errors.d.ts +15 -0
  11. package/lib/documents/client-session-errors.d.ts.map +1 -0
  12. package/lib/documents/client-session-errors.js +15 -0
  13. package/lib/documents/client-session-errors.js.map +1 -0
  14. package/lib/documents/client-session-registry.d.ts +138 -0
  15. package/lib/documents/client-session-registry.d.ts.map +1 -0
  16. package/lib/documents/client-session-registry.js +187 -0
  17. package/lib/documents/client-session-registry.js.map +1 -0
  18. package/lib/documents/file-system-task-queue.d.ts +49 -0
  19. package/lib/documents/file-system-task-queue.d.ts.map +1 -0
  20. package/lib/documents/file-system-task-queue.js +34 -0
  21. package/lib/documents/file-system-task-queue.js.map +1 -0
  22. package/lib/documents/hydranium-text-documents.d.ts +447 -82
  23. package/lib/documents/hydranium-text-documents.d.ts.map +1 -1
  24. package/lib/documents/hydranium-text-documents.js +780 -160
  25. package/lib/documents/hydranium-text-documents.js.map +1 -1
  26. package/lib/documents/index.d.ts +3 -0
  27. package/lib/documents/index.d.ts.map +1 -1
  28. package/lib/documents/index.js +3 -0
  29. package/lib/documents/index.js.map +1 -1
  30. package/lib/documents/language-client-text-shadow.d.ts +41 -9
  31. package/lib/documents/language-client-text-shadow.d.ts.map +1 -1
  32. package/lib/documents/language-client-text-shadow.js +56 -11
  33. package/lib/documents/language-client-text-shadow.js.map +1 -1
  34. package/lib/documents/self-save-registry.d.ts +37 -6
  35. package/lib/documents/self-save-registry.d.ts.map +1 -1
  36. package/lib/documents/self-save-registry.js +28 -15
  37. package/lib/documents/self-save-registry.js.map +1 -1
  38. package/lib/index.d.ts +3 -0
  39. package/lib/index.d.ts.map +1 -1
  40. package/lib/index.js +6 -0
  41. package/lib/index.js.map +1 -1
  42. package/lib/langium/ast-extension/ast-extension-service.d.ts.map +1 -1
  43. package/lib/langium/ast-extension/ast-extension-service.js.map +1 -1
  44. package/lib/langium/ast-extension/ast-node-builder.d.ts +32 -9
  45. package/lib/langium/ast-extension/ast-node-builder.d.ts.map +1 -1
  46. package/lib/langium/ast-extension/ast-node-builder.js +60 -22
  47. package/lib/langium/ast-extension/ast-node-builder.js.map +1 -1
  48. package/lib/langium/bootstrap.d.ts.map +1 -1
  49. package/lib/langium/bootstrap.js +16 -9
  50. package/lib/langium/bootstrap.js.map +1 -1
  51. package/lib/langium/build-phase-pass/build-phase-pass-service.d.ts.map +1 -1
  52. package/lib/langium/build-phase-pass/build-phase-pass-service.js.map +1 -1
  53. package/lib/langium/config/configuration-provider.d.ts +81 -0
  54. package/lib/langium/config/configuration-provider.d.ts.map +1 -0
  55. package/lib/langium/config/configuration-provider.js +112 -0
  56. package/lib/langium/config/configuration-provider.js.map +1 -0
  57. package/lib/langium/config/index.d.ts +1 -0
  58. package/lib/langium/config/index.d.ts.map +1 -1
  59. package/lib/langium/config/index.js +1 -0
  60. package/lib/langium/config/index.js.map +1 -1
  61. package/lib/langium/config/settings.js.map +1 -1
  62. package/lib/langium/diagnostics/hydranium-langium-profiler.d.ts.map +1 -1
  63. package/lib/langium/diagnostics/hydranium-langium-profiler.js.map +1 -1
  64. package/lib/langium/diagnostics/lsp-logger.d.ts +17 -0
  65. package/lib/langium/diagnostics/lsp-logger.d.ts.map +1 -1
  66. package/lib/langium/diagnostics/lsp-logger.js +40 -6
  67. package/lib/langium/diagnostics/lsp-logger.js.map +1 -1
  68. package/lib/langium/diagnostics/server-tracer.d.ts.map +1 -1
  69. package/lib/langium/diagnostics/server-tracer.js.map +1 -1
  70. package/lib/langium/document-builder/build-pipeline-integration.d.ts +21 -1
  71. package/lib/langium/document-builder/build-pipeline-integration.d.ts.map +1 -1
  72. package/lib/langium/document-builder/build-pipeline-integration.js +32 -5
  73. package/lib/langium/document-builder/build-pipeline-integration.js.map +1 -1
  74. package/lib/langium/document-builder/build-session.d.ts +93 -0
  75. package/lib/langium/document-builder/build-session.d.ts.map +1 -0
  76. package/lib/langium/document-builder/build-session.js +72 -0
  77. package/lib/langium/document-builder/build-session.js.map +1 -0
  78. package/lib/langium/document-builder/document-builder.d.ts +368 -21
  79. package/lib/langium/document-builder/document-builder.d.ts.map +1 -1
  80. package/lib/langium/document-builder/document-builder.js +641 -47
  81. package/lib/langium/document-builder/document-builder.js.map +1 -1
  82. package/lib/langium/document-builder/index.d.ts +1 -0
  83. package/lib/langium/document-builder/index.d.ts.map +1 -1
  84. package/lib/langium/document-builder/index.js +1 -0
  85. package/lib/langium/document-builder/index.js.map +1 -1
  86. package/lib/langium/documentation/comment-provider.d.ts.map +1 -1
  87. package/lib/langium/documentation/comment-provider.js.map +1 -1
  88. package/lib/langium/integration-services.d.ts +45 -1
  89. package/lib/langium/integration-services.d.ts.map +1 -1
  90. package/lib/langium/integration-services.js +10 -5
  91. package/lib/langium/integration-services.js.map +1 -1
  92. package/lib/langium/integrity/integrity-rule.d.ts +13 -5
  93. package/lib/langium/integrity/integrity-rule.d.ts.map +1 -1
  94. package/lib/langium/integrity/integrity-rule.js.map +1 -1
  95. package/lib/langium/integrity/integrity-service.d.ts +58 -13
  96. package/lib/langium/integrity/integrity-service.d.ts.map +1 -1
  97. package/lib/langium/integrity/integrity-service.js +213 -29
  98. package/lib/langium/integrity/integrity-service.js.map +1 -1
  99. package/lib/langium/keys/containment.d.ts +64 -0
  100. package/lib/langium/keys/containment.d.ts.map +1 -0
  101. package/lib/langium/keys/containment.js +53 -0
  102. package/lib/langium/keys/containment.js.map +1 -0
  103. package/lib/langium/keys/index.d.ts +1 -0
  104. package/lib/langium/keys/index.d.ts.map +1 -1
  105. package/lib/langium/keys/index.js +1 -0
  106. package/lib/langium/keys/index.js.map +1 -1
  107. package/lib/langium/keys/name-based-key-provider.d.ts +4 -0
  108. package/lib/langium/keys/name-based-key-provider.d.ts.map +1 -1
  109. package/lib/langium/keys/name-based-key-provider.js +4 -0
  110. package/lib/langium/keys/name-based-key-provider.js.map +1 -1
  111. package/lib/langium/keys/positional-key-provider.d.ts.map +1 -1
  112. package/lib/langium/keys/positional-key-provider.js.map +1 -1
  113. package/lib/langium/labeling/label-provider.d.ts.map +1 -1
  114. package/lib/langium/labeling/label-provider.js.map +1 -1
  115. package/lib/langium/language-module.d.ts +27 -2
  116. package/lib/langium/language-module.d.ts.map +1 -1
  117. package/lib/langium/language-module.js +16 -2
  118. package/lib/langium/language-module.js.map +1 -1
  119. package/lib/langium/model-service/client-session.d.ts +307 -0
  120. package/lib/langium/model-service/client-session.d.ts.map +1 -0
  121. package/lib/langium/model-service/client-session.js +395 -0
  122. package/lib/langium/model-service/client-session.js.map +1 -0
  123. package/lib/langium/model-service/index.d.ts +1 -0
  124. package/lib/langium/model-service/index.d.ts.map +1 -1
  125. package/lib/langium/model-service/index.js +1 -0
  126. package/lib/langium/model-service/index.js.map +1 -1
  127. package/lib/langium/model-service/model-service.d.ts +276 -226
  128. package/lib/langium/model-service/model-service.d.ts.map +1 -1
  129. package/lib/langium/model-service/model-service.js +251 -375
  130. package/lib/langium/model-service/model-service.js.map +1 -1
  131. package/lib/langium/module.d.ts +144 -35
  132. package/lib/langium/module.d.ts.map +1 -1
  133. package/lib/langium/module.js +46 -35
  134. package/lib/langium/module.js.map +1 -1
  135. package/lib/langium/naming/name-provider.d.ts +25 -4
  136. package/lib/langium/naming/name-provider.d.ts.map +1 -1
  137. package/lib/langium/naming/name-provider.js +2 -1
  138. package/lib/langium/naming/name-provider.js.map +1 -1
  139. package/lib/langium/naming/name-separator-validation.d.ts +23 -0
  140. package/lib/langium/naming/name-separator-validation.d.ts.map +1 -1
  141. package/lib/langium/naming/name-separator-validation.js +30 -1
  142. package/lib/langium/naming/name-separator-validation.js.map +1 -1
  143. package/lib/langium/project/abstract-project-manager.d.ts.map +1 -1
  144. package/lib/langium/project/abstract-project-manager.js +9 -2
  145. package/lib/langium/project/abstract-project-manager.js.map +1 -1
  146. package/lib/langium/project/project-change-event.d.ts +2 -2
  147. package/lib/langium/project/single-project-manager.d.ts.map +1 -1
  148. package/lib/langium/project/single-project-manager.js.map +1 -1
  149. package/lib/langium/residency/cst-residency-service.d.ts +31 -11
  150. package/lib/langium/residency/cst-residency-service.d.ts.map +1 -1
  151. package/lib/langium/residency/cst-residency-service.js +13 -56
  152. package/lib/langium/residency/cst-residency-service.js.map +1 -1
  153. package/lib/langium/scope/ast-node-description-provider.d.ts.map +1 -1
  154. package/lib/langium/scope/ast-node-description-provider.js.map +1 -1
  155. package/lib/langium/scope/hydranium-scope-computation.d.ts.map +1 -1
  156. package/lib/langium/scope/hydranium-scope-computation.js.map +1 -1
  157. package/lib/langium/scope/hydranium-scope-provider.d.ts +48 -13
  158. package/lib/langium/scope/hydranium-scope-provider.d.ts.map +1 -1
  159. package/lib/langium/scope/hydranium-scope-provider.js +56 -20
  160. package/lib/langium/scope/hydranium-scope-provider.js.map +1 -1
  161. package/lib/langium/scope/reference-builder.d.ts.map +1 -1
  162. package/lib/langium/scope/reference-builder.js.map +1 -1
  163. package/lib/langium/scope/reference-candidate-provider.d.ts.map +1 -1
  164. package/lib/langium/scope/reference-candidate-provider.js.map +1 -1
  165. package/lib/langium/scope/scope-extension-service.d.ts.map +1 -1
  166. package/lib/langium/scope/scope-extension-service.js.map +1 -1
  167. package/lib/langium/serialization/abstract-serializer.d.ts +11 -20
  168. package/lib/langium/serialization/abstract-serializer.d.ts.map +1 -1
  169. package/lib/langium/serialization/abstract-serializer.js +12 -21
  170. package/lib/langium/serialization/abstract-serializer.js.map +1 -1
  171. package/lib/langium/serialization/json-serializer.d.ts +1 -1
  172. package/lib/langium/serialization/json-serializer.d.ts.map +1 -1
  173. package/lib/langium/serialization/json-serializer.js.map +1 -1
  174. package/lib/langium/serialization/yaml-serializer.d.ts.map +1 -1
  175. package/lib/langium/serialization/yaml-serializer.js.map +1 -1
  176. package/lib/langium/service-registry.d.ts +15 -1
  177. package/lib/langium/service-registry.d.ts.map +1 -1
  178. package/lib/langium/service-registry.js +16 -0
  179. package/lib/langium/service-registry.js.map +1 -1
  180. package/lib/langium/shared-services.d.ts +15 -2
  181. package/lib/langium/shared-services.d.ts.map +1 -1
  182. package/lib/langium/shared-services.js.map +1 -1
  183. package/lib/langium/transfer/transfer-encoder.d.ts +60 -17
  184. package/lib/langium/transfer/transfer-encoder.d.ts.map +1 -1
  185. package/lib/langium/transfer/transfer-encoder.js +38 -16
  186. package/lib/langium/transfer/transfer-encoder.js.map +1 -1
  187. package/lib/langium/trivia/comment-preserver.d.ts +423 -0
  188. package/lib/langium/trivia/comment-preserver.d.ts.map +1 -0
  189. package/lib/langium/trivia/comment-preserver.js +906 -0
  190. package/lib/langium/trivia/comment-preserver.js.map +1 -0
  191. package/lib/langium/trivia/document-ending-preserver.d.ts +43 -0
  192. package/lib/langium/trivia/document-ending-preserver.d.ts.map +1 -0
  193. package/lib/langium/trivia/document-ending-preserver.js +48 -0
  194. package/lib/langium/trivia/document-ending-preserver.js.map +1 -0
  195. package/lib/langium/trivia/index.d.ts +14 -0
  196. package/lib/langium/trivia/index.d.ts.map +1 -0
  197. package/lib/langium/trivia/index.js +14 -0
  198. package/lib/langium/trivia/index.js.map +1 -0
  199. package/lib/langium/trivia/trivia-contribution.d.ts +37 -0
  200. package/lib/langium/trivia/trivia-contribution.d.ts.map +1 -0
  201. package/lib/langium/trivia/trivia-contribution.js +10 -0
  202. package/lib/langium/trivia/trivia-contribution.js.map +1 -0
  203. package/lib/langium/trivia/trivia-preserver.d.ts +50 -0
  204. package/lib/langium/trivia/trivia-preserver.d.ts.map +1 -0
  205. package/lib/langium/trivia/trivia-preserver.js +10 -0
  206. package/lib/langium/trivia/trivia-preserver.js.map +1 -0
  207. package/lib/langium/trivia/trivia-service.d.ts +70 -0
  208. package/lib/langium/trivia/trivia-service.d.ts.map +1 -0
  209. package/lib/langium/trivia/trivia-service.js +56 -0
  210. package/lib/langium/trivia/trivia-service.js.map +1 -0
  211. package/lib/langium/update-rewrite/normalize-empty-strings.d.ts.map +1 -1
  212. package/lib/langium/update-rewrite/update-rewrite-service.d.ts.map +1 -1
  213. package/lib/langium/update-rewrite/update-rewrite-service.js.map +1 -1
  214. package/lib/langium/update-rewrite/update-rewrite.d.ts +1 -1
  215. package/lib/langium/validation/document-validator.d.ts +294 -10
  216. package/lib/langium/validation/document-validator.d.ts.map +1 -1
  217. package/lib/langium/validation/document-validator.js +448 -5
  218. package/lib/langium/validation/document-validator.js.map +1 -1
  219. package/lib/langium/validation/validation-contribution-collector.d.ts.map +1 -1
  220. package/lib/langium/validation/validation-contribution-collector.js.map +1 -1
  221. package/lib/langium/workspace/document-uri-policy.d.ts +17 -12
  222. package/lib/langium/workspace/document-uri-policy.d.ts.map +1 -1
  223. package/lib/langium/workspace/document-uri-policy.js +10 -9
  224. package/lib/langium/workspace/document-uri-policy.js.map +1 -1
  225. package/lib/langium/workspace/file-not-found.d.ts +17 -0
  226. package/lib/langium/workspace/file-not-found.d.ts.map +1 -0
  227. package/lib/langium/workspace/file-not-found.js +20 -0
  228. package/lib/langium/workspace/file-not-found.js.map +1 -0
  229. package/lib/langium/workspace/file-system-provider.d.ts +84 -8
  230. package/lib/langium/workspace/file-system-provider.d.ts.map +1 -1
  231. package/lib/langium/workspace/file-system-provider.js +93 -14
  232. package/lib/langium/workspace/file-system-provider.js.map +1 -1
  233. package/lib/langium/workspace/hydranium-langium-document-factory.d.ts +25 -0
  234. package/lib/langium/workspace/hydranium-langium-document-factory.d.ts.map +1 -1
  235. package/lib/langium/workspace/hydranium-langium-document-factory.js +25 -0
  236. package/lib/langium/workspace/hydranium-langium-document-factory.js.map +1 -1
  237. package/lib/langium/workspace/hydranium-workspace-lock.d.ts +43 -1
  238. package/lib/langium/workspace/hydranium-workspace-lock.d.ts.map +1 -1
  239. package/lib/langium/workspace/hydranium-workspace-lock.js +58 -1
  240. package/lib/langium/workspace/hydranium-workspace-lock.js.map +1 -1
  241. package/lib/langium/workspace/hydranium-workspace-manager.d.ts +81 -8
  242. package/lib/langium/workspace/hydranium-workspace-manager.d.ts.map +1 -1
  243. package/lib/langium/workspace/hydranium-workspace-manager.js +128 -10
  244. package/lib/langium/workspace/hydranium-workspace-manager.js.map +1 -1
  245. package/lib/langium/workspace/in-memory-file-system-provider.d.ts +25 -2
  246. package/lib/langium/workspace/in-memory-file-system-provider.d.ts.map +1 -1
  247. package/lib/langium/workspace/in-memory-file-system-provider.js +41 -15
  248. package/lib/langium/workspace/in-memory-file-system-provider.js.map +1 -1
  249. package/lib/langium/workspace/index-manager.d.ts.map +1 -1
  250. package/lib/langium/workspace/index-manager.js.map +1 -1
  251. package/lib/langium/workspace/initialize-workspace.d.ts +31 -2
  252. package/lib/langium/workspace/initialize-workspace.d.ts.map +1 -1
  253. package/lib/langium/workspace/initialize-workspace.js +13 -5
  254. package/lib/langium/workspace/initialize-workspace.js.map +1 -1
  255. package/lib/langium/workspace/langium-documents.d.ts +79 -17
  256. package/lib/langium/workspace/langium-documents.d.ts.map +1 -1
  257. package/lib/langium/workspace/langium-documents.js +91 -29
  258. package/lib/langium/workspace/langium-documents.js.map +1 -1
  259. package/lib/langium/workspace/persistent-file-system-provider.d.ts +0 -7
  260. package/lib/langium/workspace/persistent-file-system-provider.d.ts.map +1 -1
  261. package/lib/langium/workspace/persistent-file-system-provider.js +0 -7
  262. package/lib/langium/workspace/persistent-file-system-provider.js.map +1 -1
  263. package/lib/langium/workspace/virtual-document.d.ts +48 -15
  264. package/lib/langium/workspace/virtual-document.d.ts.map +1 -1
  265. package/lib/langium/workspace/virtual-document.js +78 -18
  266. package/lib/langium/workspace/virtual-document.js.map +1 -1
  267. package/lib/langium/workspace/write-lock-scope.d.ts +20 -10
  268. package/lib/langium/workspace/write-lock-scope.d.ts.map +1 -1
  269. package/lib/langium/workspace/write-lock-scope.js +12 -4
  270. package/lib/langium/workspace/write-lock-scope.js.map +1 -1
  271. package/lib/locale/index.d.ts +10 -0
  272. package/lib/locale/index.d.ts.map +1 -0
  273. package/lib/locale/index.js +10 -0
  274. package/lib/locale/index.js.map +1 -0
  275. package/lib/locale/server-locale.d.ts +73 -0
  276. package/lib/locale/server-locale.d.ts.map +1 -0
  277. package/lib/locale/server-locale.js +61 -0
  278. package/lib/locale/server-locale.js.map +1 -0
  279. package/lib/lsp/completion/hydranium-completion-provider.d.ts +44 -2
  280. package/lib/lsp/completion/hydranium-completion-provider.d.ts.map +1 -1
  281. package/lib/lsp/completion/hydranium-completion-provider.js +68 -0
  282. package/lib/lsp/completion/hydranium-completion-provider.js.map +1 -1
  283. package/lib/lsp/connection-features.d.ts +23 -0
  284. package/lib/lsp/connection-features.d.ts.map +1 -0
  285. package/lib/lsp/connection-features.js +60 -0
  286. package/lib/lsp/connection-features.js.map +1 -0
  287. package/lib/lsp/diagnostics-connection.d.ts +27 -0
  288. package/lib/lsp/diagnostics-connection.d.ts.map +1 -0
  289. package/lib/lsp/diagnostics-connection.js +53 -0
  290. package/lib/lsp/diagnostics-connection.js.map +1 -0
  291. package/lib/lsp/hydranium-document-update-handler.d.ts +90 -79
  292. package/lib/lsp/hydranium-document-update-handler.d.ts.map +1 -1
  293. package/lib/lsp/hydranium-document-update-handler.js +152 -99
  294. package/lib/lsp/hydranium-document-update-handler.js.map +1 -1
  295. package/lib/lsp/index.d.ts +3 -1
  296. package/lib/lsp/index.d.ts.map +1 -1
  297. package/lib/lsp/index.js +3 -1
  298. package/lib/lsp/index.js.map +1 -1
  299. package/lib/lsp/lsp-latency.d.ts +39 -0
  300. package/lib/lsp/lsp-latency.d.ts.map +1 -0
  301. package/lib/lsp/lsp-latency.js +58 -0
  302. package/lib/lsp/lsp-latency.js.map +1 -0
  303. package/lib/lsp/semantic-token-provider.d.ts +34 -1
  304. package/lib/lsp/semantic-token-provider.d.ts.map +1 -1
  305. package/lib/lsp/semantic-token-provider.js +55 -8
  306. package/lib/lsp/semantic-token-provider.js.map +1 -1
  307. package/lib/lsp/shared-module.d.ts +4 -8
  308. package/lib/lsp/shared-module.d.ts.map +1 -1
  309. package/lib/lsp/shared-module.js.map +1 -1
  310. package/lib/lsp/start-language-server.d.ts +8 -7
  311. package/lib/lsp/start-language-server.d.ts.map +1 -1
  312. package/lib/lsp/start-language-server.js +13 -7
  313. package/lib/lsp/start-language-server.js.map +1 -1
  314. package/lib/messages/carriers.d.ts +54 -0
  315. package/lib/messages/carriers.d.ts.map +1 -0
  316. package/lib/messages/carriers.js +62 -0
  317. package/lib/messages/carriers.js.map +1 -0
  318. package/lib/messages/index.d.ts +25 -0
  319. package/lib/messages/index.d.ts.map +1 -0
  320. package/lib/messages/index.js +25 -0
  321. package/lib/messages/index.js.map +1 -0
  322. package/lib/messages/renderer.d.ts +142 -0
  323. package/lib/messages/renderer.d.ts.map +1 -0
  324. package/lib/messages/renderer.js +165 -0
  325. package/lib/messages/renderer.js.map +1 -0
  326. package/lib/node/event-loop-monitor.js.map +1 -1
  327. package/lib/node/heap-ceiling.d.ts +61 -0
  328. package/lib/node/heap-ceiling.d.ts.map +1 -0
  329. package/lib/node/heap-ceiling.js +72 -0
  330. package/lib/node/heap-ceiling.js.map +1 -0
  331. package/lib/node/index.d.ts +1 -0
  332. package/lib/node/index.d.ts.map +1 -1
  333. package/lib/node/index.js +1 -0
  334. package/lib/node/index.js.map +1 -1
  335. package/lib/node/latency-from-env.d.ts +1 -1
  336. package/lib/node/latency-from-env.js +1 -1
  337. package/lib/node/lint-grammar.js.map +1 -1
  338. package/lib/node/measure-memory.d.ts.map +1 -1
  339. package/lib/node/measure-memory.js +1 -0
  340. package/lib/node/measure-memory.js.map +1 -1
  341. package/lib/node/memory-monitor.js.map +1 -1
  342. package/lib/node/node-file-system-provider.d.ts +39 -4
  343. package/lib/node/node-file-system-provider.d.ts.map +1 -1
  344. package/lib/node/node-file-system-provider.js +109 -49
  345. package/lib/node/node-file-system-provider.js.map +1 -1
  346. package/lib/node/process-memory.js.map +1 -1
  347. package/lib/node/profile-capture.d.ts +8 -2
  348. package/lib/node/profile-capture.d.ts.map +1 -1
  349. package/lib/node/profile-capture.js.map +1 -1
  350. package/lib/node/profile-digest.js.map +1 -1
  351. package/lib/node/profiling-run.d.ts +2 -2
  352. package/lib/node/profiling-run.d.ts.map +1 -1
  353. package/lib/node/profiling-run.js +1 -1
  354. package/lib/node/profiling-run.js.map +1 -1
  355. package/lib/node/rename-over-open-readers.d.ts +52 -0
  356. package/lib/node/rename-over-open-readers.d.ts.map +1 -0
  357. package/lib/node/rename-over-open-readers.js +66 -0
  358. package/lib/node/rename-over-open-readers.js.map +1 -0
  359. package/lib/node/socket-launcher.d.ts +16 -1
  360. package/lib/node/socket-launcher.d.ts.map +1 -1
  361. package/lib/node/socket-launcher.js +4 -3
  362. package/lib/node/socket-launcher.js.map +1 -1
  363. package/lib/node/stdio-launcher.d.ts +1 -1
  364. package/lib/node/stdio-launcher.d.ts.map +1 -1
  365. package/lib/node/stdio-launcher.js +1 -1
  366. package/lib/node/stdio-launcher.js.map +1 -1
  367. package/lib/testing/document-uri-policy-conformance.js.map +1 -1
  368. package/lib/testing/fake-description.js.map +1 -1
  369. package/lib/testing/fake-document.d.ts +16 -4
  370. package/lib/testing/fake-document.d.ts.map +1 -1
  371. package/lib/testing/fake-document.js +18 -3
  372. package/lib/testing/fake-document.js.map +1 -1
  373. package/lib/testing/index.d.ts.map +1 -1
  374. package/lib/testing/index.js +1 -0
  375. package/lib/testing/index.js.map +1 -1
  376. package/lib/testing/langium-test-helpers.d.ts.map +1 -1
  377. package/lib/testing/langium-test-helpers.js +1 -0
  378. package/lib/testing/langium-test-helpers.js.map +1 -1
  379. package/lib/testing/make-noop-language-services.js.map +1 -1
  380. package/lib/testing/make-noop-shared-services.d.ts +14 -0
  381. package/lib/testing/make-noop-shared-services.d.ts.map +1 -1
  382. package/lib/testing/make-noop-shared-services.js +28 -2
  383. package/lib/testing/make-noop-shared-services.js.map +1 -1
  384. package/lib/testing/make-test-services.d.ts +62 -14
  385. package/lib/testing/make-test-services.d.ts.map +1 -1
  386. package/lib/testing/make-test-services.js +30 -9
  387. package/lib/testing/make-test-services.js.map +1 -1
  388. package/lib/testing/make-test-tracer.js.map +1 -1
  389. package/lib/testing/node/golden-corpus.js.map +1 -1
  390. package/lib/testing/node/index.d.ts +1 -0
  391. package/lib/testing/node/index.d.ts.map +1 -1
  392. package/lib/testing/node/index.js +1 -0
  393. package/lib/testing/node/index.js.map +1 -1
  394. package/lib/testing/node/lsp-harness.d.ts.map +1 -1
  395. package/lib/testing/node/lsp-harness.js +2 -0
  396. package/lib/testing/node/lsp-harness.js.map +1 -1
  397. package/lib/testing/node/lsp-server-connection.d.ts +11 -3
  398. package/lib/testing/node/lsp-server-connection.d.ts.map +1 -1
  399. package/lib/testing/node/lsp-server-connection.js +42 -9
  400. package/lib/testing/node/lsp-server-connection.js.map +1 -1
  401. package/lib/testing/node/scratch-workspace.d.ts.map +1 -1
  402. package/lib/testing/node/scratch-workspace.js +10 -5
  403. package/lib/testing/node/scratch-workspace.js.map +1 -1
  404. package/lib/testing/node/spawned-server.d.ts +14 -0
  405. package/lib/testing/node/spawned-server.d.ts.map +1 -1
  406. package/lib/testing/node/spawned-server.js +33 -1
  407. package/lib/testing/node/spawned-server.js.map +1 -1
  408. package/lib/testing/node/unhandled-rejections.d.ts +20 -0
  409. package/lib/testing/node/unhandled-rejections.d.ts.map +1 -0
  410. package/lib/testing/node/unhandled-rejections.js +32 -0
  411. package/lib/testing/node/unhandled-rejections.js.map +1 -0
  412. package/lib/testing/playwright/browser-capture-bridge.js.map +1 -1
  413. package/lib/testing/playwright/e2e-profiling.js.map +1 -1
  414. package/lib/testing/playwright/flaky-network-proxy.d.ts +76 -0
  415. package/lib/testing/playwright/flaky-network-proxy.d.ts.map +1 -0
  416. package/lib/testing/playwright/flaky-network-proxy.js +164 -0
  417. package/lib/testing/playwright/flaky-network-proxy.js.map +1 -0
  418. package/lib/testing/playwright/index.d.ts +1 -0
  419. package/lib/testing/playwright/index.d.ts.map +1 -1
  420. package/lib/testing/playwright/index.js +1 -0
  421. package/lib/testing/playwright/index.js.map +1 -1
  422. package/lib/testing/playwright/server-log-capture.d.ts +14 -4
  423. package/lib/testing/playwright/server-log-capture.d.ts.map +1 -1
  424. package/lib/testing/playwright/server-log-capture.js +21 -4
  425. package/lib/testing/playwright/server-log-capture.js.map +1 -1
  426. package/lib/testing/playwright/server-log-rename-reporter.d.ts.map +1 -1
  427. package/lib/testing/playwright/server-log-rename-reporter.js +10 -1
  428. package/lib/testing/playwright/server-log-rename-reporter.js.map +1 -1
  429. package/lib/testing/run-update-pipeline.d.ts +4 -4
  430. package/lib/testing/run-update-pipeline.d.ts.map +1 -1
  431. package/lib/testing/stub-ast-document-manager.d.ts +10 -9
  432. package/lib/testing/stub-ast-document-manager.d.ts.map +1 -1
  433. package/lib/testing/stub-ast-document-manager.js +17 -9
  434. package/lib/testing/stub-ast-document-manager.js.map +1 -1
  435. package/lib/testing/stub-document-builder.d.ts +26 -11
  436. package/lib/testing/stub-document-builder.d.ts.map +1 -1
  437. package/lib/testing/stub-document-builder.js +57 -4
  438. package/lib/testing/stub-document-builder.js.map +1 -1
  439. package/lib/testing/stub-hydranium-text-documents.d.ts +22 -7
  440. package/lib/testing/stub-hydranium-text-documents.d.ts.map +1 -1
  441. package/lib/testing/stub-hydranium-text-documents.js +92 -15
  442. package/lib/testing/stub-hydranium-text-documents.js.map +1 -1
  443. package/lib/testing/stub-index-manager.js.map +1 -1
  444. package/lib/testing/stub-langium-documents.d.ts +3 -2
  445. package/lib/testing/stub-langium-documents.d.ts.map +1 -1
  446. package/lib/testing/stub-langium-documents.js.map +1 -1
  447. package/lib/testing/stub-model-service.d.ts +7 -6
  448. package/lib/testing/stub-model-service.d.ts.map +1 -1
  449. package/lib/testing/stub-model-service.js +4 -4
  450. package/lib/testing/stub-model-service.js.map +1 -1
  451. package/lib/testing/stub-project-manager.js.map +1 -1
  452. package/lib/testing/stub-service-registry.js.map +1 -1
  453. package/lib/util/connection-liveness.d.ts +7 -6
  454. package/lib/util/connection-liveness.d.ts.map +1 -1
  455. package/lib/util/connection-liveness.js +35 -14
  456. package/lib/util/connection-liveness.js.map +1 -1
  457. package/lib/util/environment.d.ts.map +1 -1
  458. package/lib/util/environment.js.map +1 -1
  459. package/lib/util/registry.d.ts.map +1 -1
  460. package/package.json +35 -26
  461. package/src/documents/ast-document-manager.ts +349 -65
  462. package/src/documents/client-ids.ts +5 -22
  463. package/src/documents/client-session-errors.ts +24 -0
  464. package/src/documents/client-session-registry.ts +240 -0
  465. package/src/documents/file-system-task-queue.ts +68 -0
  466. package/src/documents/hydranium-text-documents.ts +973 -202
  467. package/src/documents/index.ts +3 -0
  468. package/src/documents/language-client-text-shadow.ts +59 -11
  469. package/src/documents/self-save-registry.ts +52 -13
  470. package/src/index.ts +6 -0
  471. package/src/langium/ast-extension/ast-node-builder.ts +66 -22
  472. package/src/langium/bootstrap.ts +16 -9
  473. package/src/langium/config/configuration-provider.ts +119 -0
  474. package/src/langium/config/index.ts +1 -0
  475. package/src/langium/diagnostics/lsp-logger.ts +41 -6
  476. package/src/langium/document-builder/build-pipeline-integration.ts +50 -5
  477. package/src/langium/document-builder/build-session.ts +87 -0
  478. package/src/langium/document-builder/document-builder.ts +724 -46
  479. package/src/langium/document-builder/index.ts +1 -0
  480. package/src/langium/integration-services.ts +67 -6
  481. package/src/langium/integrity/integrity-rule.ts +13 -5
  482. package/src/langium/integrity/integrity-service.ts +229 -30
  483. package/src/langium/keys/containment.ts +87 -0
  484. package/src/langium/keys/index.ts +1 -0
  485. package/src/langium/keys/name-based-key-provider.ts +4 -0
  486. package/src/langium/language-module.ts +42 -4
  487. package/src/langium/model-service/client-session.ts +606 -0
  488. package/src/langium/model-service/index.ts +1 -0
  489. package/src/langium/model-service/model-service.ts +418 -399
  490. package/src/langium/module.ts +193 -64
  491. package/src/langium/naming/name-provider.ts +27 -5
  492. package/src/langium/naming/name-separator-validation.ts +34 -5
  493. package/src/langium/project/abstract-project-manager.ts +9 -1
  494. package/src/langium/project/project-change-event.ts +2 -2
  495. package/src/langium/residency/cst-residency-service.ts +36 -14
  496. package/src/langium/scope/hydranium-scope-provider.ts +60 -22
  497. package/src/langium/serialization/abstract-serializer.ts +13 -32
  498. package/src/langium/service-registry.ts +19 -2
  499. package/src/langium/shared-services.ts +19 -2
  500. package/src/langium/transfer/transfer-encoder.ts +85 -24
  501. package/src/langium/trivia/comment-preserver.ts +1100 -0
  502. package/src/langium/trivia/document-ending-preserver.ts +55 -0
  503. package/src/langium/trivia/index.ts +14 -0
  504. package/src/langium/trivia/trivia-contribution.ts +39 -0
  505. package/src/langium/trivia/trivia-preserver.ts +54 -0
  506. package/src/langium/trivia/trivia-service.ts +99 -0
  507. package/src/langium/update-rewrite/update-rewrite.ts +1 -1
  508. package/src/langium/validation/document-validator.ts +537 -11
  509. package/src/langium/workspace/document-uri-policy.ts +17 -12
  510. package/src/langium/workspace/file-not-found.ts +23 -0
  511. package/src/langium/workspace/file-system-provider.ts +153 -16
  512. package/src/langium/workspace/hydranium-langium-document-factory.ts +34 -0
  513. package/src/langium/workspace/hydranium-workspace-lock.ts +86 -2
  514. package/src/langium/workspace/hydranium-workspace-manager.ts +153 -13
  515. package/src/langium/workspace/in-memory-file-system-provider.ts +47 -16
  516. package/src/langium/workspace/initialize-workspace.ts +43 -5
  517. package/src/langium/workspace/langium-documents.ts +113 -33
  518. package/src/langium/workspace/persistent-file-system-provider.ts +0 -7
  519. package/src/langium/workspace/virtual-document.ts +96 -19
  520. package/src/langium/workspace/write-lock-scope.ts +24 -11
  521. package/src/locale/index.ts +10 -0
  522. package/src/locale/server-locale.ts +86 -0
  523. package/src/lsp/completion/hydranium-completion-provider.ts +82 -2
  524. package/src/lsp/connection-features.ts +67 -0
  525. package/src/lsp/diagnostics-connection.ts +56 -0
  526. package/src/lsp/hydranium-document-update-handler.ts +182 -106
  527. package/src/lsp/index.ts +3 -1
  528. package/src/lsp/lsp-latency.ts +62 -0
  529. package/src/lsp/semantic-token-provider.ts +74 -7
  530. package/src/lsp/shared-module.ts +4 -8
  531. package/src/lsp/start-language-server.ts +13 -7
  532. package/src/messages/carriers.ts +78 -0
  533. package/src/messages/index.ts +36 -0
  534. package/src/messages/renderer.ts +212 -0
  535. package/src/node/heap-ceiling.ts +108 -0
  536. package/src/node/index.ts +1 -0
  537. package/src/node/latency-from-env.ts +1 -1
  538. package/src/node/measure-memory.ts +1 -0
  539. package/src/node/node-file-system-provider.ts +122 -51
  540. package/src/node/profile-capture.ts +8 -2
  541. package/src/node/profiling-run.ts +3 -3
  542. package/src/node/rename-over-open-readers.ts +78 -0
  543. package/src/node/socket-launcher.ts +19 -4
  544. package/src/node/stdio-launcher.ts +1 -2
  545. package/src/testing/fake-document.ts +24 -5
  546. package/src/testing/index.ts +1 -0
  547. package/src/testing/langium-test-helpers.ts +1 -0
  548. package/src/testing/make-noop-shared-services.ts +50 -2
  549. package/src/testing/make-test-services.ts +106 -30
  550. package/src/testing/node/index.ts +1 -0
  551. package/src/testing/node/lsp-harness.ts +2 -0
  552. package/src/testing/node/lsp-server-connection.ts +61 -11
  553. package/src/testing/node/scratch-workspace.ts +10 -5
  554. package/src/testing/node/spawned-server.ts +35 -1
  555. package/src/testing/node/unhandled-rejections.ts +31 -0
  556. package/src/testing/playwright/flaky-network-proxy.ts +240 -0
  557. package/src/testing/playwright/index.ts +1 -0
  558. package/src/testing/playwright/server-log-capture.ts +24 -5
  559. package/src/testing/playwright/server-log-rename-reporter.ts +12 -1
  560. package/src/testing/run-update-pipeline.ts +4 -4
  561. package/src/testing/stub-ast-document-manager.ts +28 -21
  562. package/src/testing/stub-document-builder.ts +83 -17
  563. package/src/testing/stub-hydranium-text-documents.ts +127 -22
  564. package/src/testing/stub-langium-documents.ts +3 -2
  565. package/src/testing/stub-model-service.ts +9 -8
  566. package/src/util/connection-liveness.ts +37 -14
  567. package/src/util/environment.ts +9 -1
  568. package/lib/lsp/instrument-connection.d.ts +0 -36
  569. package/lib/lsp/instrument-connection.d.ts.map +0 -1
  570. package/lib/lsp/instrument-connection.js +0 -62
  571. package/lib/lsp/instrument-connection.js.map +0 -1
  572. package/src/lsp/instrument-connection.ts +0 -66
@@ -31,13 +31,24 @@ const AST_EXTENSION_PHASES: readonly DocumentState[] = [
31
31
  ];
32
32
 
33
33
  /**
34
- * Build phases at which the `BuildPhasePassService` is driven. Same useful
35
- * set as {@link AST_EXTENSION_PHASES}: a pass registered at any other state
36
- * never fires (the listener is not wired), mirroring the AST-extension contract.
34
+ * Build phases at which the `BuildPhasePassService` is driven. A pass
35
+ * registered at any other state never fires (the listener is not wired), and
37
36
  * `runPasses` no-ops at a phase with no registered pass, so wiring the full set
38
37
  * unconditionally costs only an empty-bucket check per phase.
38
+ *
39
+ * `IndexedContent` belongs here and NOT in {@link AST_EXTENSION_PHASES}, so the
40
+ * two cannot be collapsed. Per document it carries nothing `Parsed` does; per
41
+ * BATCH it is the only phase meaning the global index is whole again, which
42
+ * batch work keyed on a complete index has nowhere else to run.
39
43
  */
40
- const BUILD_PHASE_PASS_STATES: readonly DocumentState[] = AST_EXTENSION_PHASES;
44
+ const BUILD_PHASE_PASS_STATES: readonly DocumentState[] = [
45
+ DocumentState.Parsed,
46
+ DocumentState.IndexedContent,
47
+ DocumentState.ComputedScopes,
48
+ DocumentState.Linked,
49
+ DocumentState.IndexedReferences,
50
+ DocumentState.Validated
51
+ ];
41
52
 
42
53
  /**
43
54
  * Default priority of the framework integrity passes. Integrity mutates / cleans
@@ -65,6 +76,19 @@ export interface BuildPipelineIntegrationOptions {
65
76
  readonly integrityPriority?: number;
66
77
  }
67
78
 
79
+ /**
80
+ * The build-pipeline slot. Empty because nothing calls this service — it wires
81
+ * itself in its constructor and every seam it offers is `protected`.
82
+ *
83
+ * Typing the slot by the class instead would stop an adopter's subclass
84
+ * satisfying it, since a class carries its `protected` members into the check
85
+ * and they compare by declaration rather than by shape. The cost of the empty
86
+ * shape is that any non-null value satisfies it, so a mis-bound slot compiles
87
+ * and the framework's phase listeners are then never attached.
88
+ */
89
+ // eslint-disable-next-line @typescript-eslint/no-empty-object-type -- the slot has no public member to name
90
+ export interface BuildPipelineIntegration {}
91
+
68
92
  /**
69
93
  * Wires the framework's build-time features (integrity rules, AST
70
94
  * enrichment) into Langium's document-build pipeline. The single shared
@@ -90,7 +114,7 @@ export interface BuildPipelineIntegrationOptions {
90
114
  * Eagerly constructed (via `DEFAULT_EAGER_SERVICES`) so the listeners are
91
115
  * attached before the first build cycle.
92
116
  */
93
- export class BuildPipelineIntegration {
117
+ export class DefaultBuildPipelineIntegration implements BuildPipelineIntegration {
94
118
  constructor(
95
119
  protected readonly services: ServerSharedServices,
96
120
  options: BuildPipelineIntegrationOptions = {}
@@ -128,6 +152,14 @@ export class BuildPipelineIntegration {
128
152
  );
129
153
  }
130
154
 
155
+ // Per DOCUMENT as well: `reparseAndRelink` re-indexes one document from
156
+ // inside the `Linked` phase and fires no build-phase notification, so a
157
+ // batch-level listener cannot see the AST it replaced.
158
+ builder.onDocumentPhase(
159
+ DocumentState.IndexedContent,
160
+ labelPhaseListener(() => this.clearScopeCaches(), 'BuildPipeline.clearScopeCaches')
161
+ );
162
+
131
163
  // AST enrichment stays per-document (onDocumentPhase) and node-granular —
132
164
  // unchanged by the build-phase-pass registry, which is batch-granular. The
133
165
  // listener calls the `extendAst` seam directly (the document-phase analog of
@@ -174,6 +206,19 @@ export class BuildPipelineIntegration {
174
206
  }
175
207
  }
176
208
 
209
+ /**
210
+ * Drop the cached scopes of every REGISTERED language, not of those owning a
211
+ * document in the batch. The index a scope is built from is
212
+ * workspace-global, so narrowing to the batch with
213
+ * {@link groupDocumentsByLanguage}, the way {@link callIntegrity} does,
214
+ * leaves a cross-grammar reference resolving against a mid-rebuild scope.
215
+ */
216
+ protected clearScopeCaches(): void {
217
+ for (const languageServices of this.services.ServiceRegistry.all) {
218
+ languageServices.references.ScopeProvider.clearScopeCaches();
219
+ }
220
+ }
221
+
177
222
  /** Run AST enrichment for a single document at `phase` via its language service. */
178
223
  protected extendAst(document: LangiumDocument, phase: DocumentState, cancelToken: CancellationToken): void {
179
224
  this.services.ServiceRegistry.getServices(document.uri).ast.AstExtensionService.extendDocument(document, phase, cancelToken);
@@ -0,0 +1,87 @@
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
+ import { type URI } from '@hydranium/langium';
11
+
12
+ /** What a build is about, handed to `HydraniumDocumentBuilder.createBuildSession`. */
13
+ export interface BuildSessionContext {
14
+ /**
15
+ * Which entry point opened the build: `'build'` is the workspace-wide pass
16
+ * (initialization), `'update'` an incremental rebuild. A subclass deriving
17
+ * cascade state skips the work for `'build'`, where every document is in the
18
+ * set already and `shouldRelink` is never consulted.
19
+ */
20
+ readonly kind: 'build' | 'update';
21
+ /** Formatted description of what caused the build — a URI, a count summary. */
22
+ readonly trigger: string;
23
+ /** True when {@link trigger} already states the document count. */
24
+ readonly triggerCountsDocs: boolean;
25
+ /** URIs the build was asked to rebuild, already flattened and canonicalized. */
26
+ readonly changed: readonly URI[];
27
+ /** URIs the build was asked to delete, already expanded by `collectDeletedURIs`. Empty for a `build` call. */
28
+ readonly deleted: readonly URI[];
29
+ }
30
+
31
+ /**
32
+ * One rebuild, treated as a correlated unit.
33
+ *
34
+ * Everything a build phase needs to know about the build it belongs to — what
35
+ * triggered it, when it started, whether it was cancelled, and the log lines it
36
+ * has produced so far. A `HydraniumDocumentBuilder` opens one per `update` /
37
+ * `build` call and holds it for the duration, so a per-phase hook can reach
38
+ * build-wide facts that no per-line formatting hook could.
39
+ *
40
+ * **Identity is the object, not {@link traceId}.** `Tracer.time` short-circuits
41
+ * when its log level is suppressed and never calls `captureId`, so `traceId` is
42
+ * `undefined` on every build in a production configuration that logs above
43
+ * `debug`. A teardown guard keyed on the id would then compare `undefined`
44
+ * against `undefined` and let a preempted build clear its successor's state.
45
+ * Reference equality against `HydraniumDocumentBuilder.activeSession` holds in
46
+ * both configurations, which is why nothing here is keyed on the id.
47
+ *
48
+ * Adopters carrying build-scoped state of their own subclass this and return it
49
+ * from `HydraniumDocumentBuilder.createBuildSession`, narrowing with an
50
+ * `instanceof` where they read it back. That buys them the framework's
51
+ * preemption-correct teardown rather than a second copy of it.
52
+ */
53
+ export class BuildSession {
54
+ /**
55
+ * `Tracer.time` correlation id, so a phase line and the build line share a
56
+ * `#N`. `undefined` until the timer starts, and permanently `undefined` when
57
+ * the timing line is suppressed.
58
+ */
59
+ traceId?: number;
60
+ /** Set when the build ended in `OperationCancelled`, so the successor can tag itself "cancels #N". */
61
+ cancelled = false;
62
+ /** Phase-reached lines produced so far; the first one measures from {@link startMs} rather than from the previous phase. */
63
+ phasesLogged = 0;
64
+ /** Lines held back by {@link detailThresholdMs}; flushed or dropped when the build ends. */
65
+ readonly bufferedLines: string[] = [];
66
+
67
+ constructor(
68
+ /** Millisecond timestamp the build started at, on the same clock as `performance.now()`. */
69
+ readonly startMs: number,
70
+ /** What caused this build — a formatted URI, a count summary, or an adopter label. */
71
+ readonly trigger: string,
72
+ /** True when {@link trigger} already states the document count, so a phase line must not repeat it. */
73
+ readonly triggerCountsDocs: boolean,
74
+ /**
75
+ * Build duration at or above which the buffered lines are emitted; `0`
76
+ * disables buffering entirely. Captured per session so the flush decision
77
+ * uses the same value the buffering decision did, even if the underlying
78
+ * observable changed mid-build.
79
+ */
80
+ readonly detailThresholdMs: number
81
+ ) {}
82
+
83
+ /** True while lines are being held rather than emitted as they are produced. */
84
+ get buffers(): boolean {
85
+ return this.detailThresholdMs > 0;
86
+ }
87
+ }