@hydranium/core 1.0.0-next.38 → 1.0.0-next.380

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 (805) hide show
  1. package/README.md +78 -82
  2. package/lib/browser/host-heads-in-worker.d.ts +77 -0
  3. package/lib/browser/host-heads-in-worker.d.ts.map +1 -0
  4. package/lib/browser/host-heads-in-worker.js +169 -0
  5. package/lib/browser/host-heads-in-worker.js.map +1 -0
  6. package/lib/browser/index.d.ts +12 -0
  7. package/lib/browser/index.d.ts.map +1 -0
  8. package/lib/browser/index.js +17 -0
  9. package/lib/browser/index.js.map +1 -0
  10. package/lib/browser/indexeddb-file-system-store.d.ts +82 -0
  11. package/lib/browser/indexeddb-file-system-store.d.ts.map +1 -0
  12. package/lib/browser/indexeddb-file-system-store.js +181 -0
  13. package/lib/browser/indexeddb-file-system-store.js.map +1 -0
  14. package/lib/browser/start-language-server-in-worker.d.ts +32 -0
  15. package/lib/browser/start-language-server-in-worker.d.ts.map +1 -0
  16. package/lib/browser/start-language-server-in-worker.js +40 -0
  17. package/lib/browser/start-language-server-in-worker.js.map +1 -0
  18. package/lib/documents/ast-document-manager.d.ts +254 -140
  19. package/lib/documents/ast-document-manager.d.ts.map +1 -1
  20. package/lib/documents/ast-document-manager.js +311 -127
  21. package/lib/documents/ast-document-manager.js.map +1 -1
  22. package/lib/documents/client-ids.d.ts +5 -19
  23. package/lib/documents/client-ids.d.ts.map +1 -1
  24. package/lib/documents/client-ids.js +5 -19
  25. package/lib/documents/client-ids.js.map +1 -1
  26. package/lib/documents/client-session-errors.d.ts +15 -0
  27. package/lib/documents/client-session-errors.d.ts.map +1 -0
  28. package/lib/documents/client-session-errors.js +15 -0
  29. package/lib/documents/client-session-errors.js.map +1 -0
  30. package/lib/documents/client-session-registry.d.ts +146 -0
  31. package/lib/documents/client-session-registry.d.ts.map +1 -0
  32. package/lib/documents/client-session-registry.js +207 -0
  33. package/lib/documents/client-session-registry.js.map +1 -0
  34. package/lib/documents/dirty-state-tracker.d.ts +101 -0
  35. package/lib/documents/dirty-state-tracker.d.ts.map +1 -0
  36. package/lib/documents/dirty-state-tracker.js +85 -0
  37. package/lib/documents/dirty-state-tracker.js.map +1 -0
  38. package/lib/documents/document-release-handler.d.ts +204 -0
  39. package/lib/documents/document-release-handler.d.ts.map +1 -0
  40. package/lib/documents/document-release-handler.js +317 -0
  41. package/lib/documents/document-release-handler.js.map +1 -0
  42. package/lib/documents/document-release-scheduler.d.ts +67 -0
  43. package/lib/documents/document-release-scheduler.d.ts.map +1 -0
  44. package/lib/documents/document-release-scheduler.js +80 -0
  45. package/lib/documents/document-release-scheduler.js.map +1 -0
  46. package/lib/documents/file-system-task-queue.d.ts +52 -0
  47. package/lib/documents/file-system-task-queue.d.ts.map +1 -0
  48. package/lib/documents/file-system-task-queue.js +37 -0
  49. package/lib/documents/file-system-task-queue.js.map +1 -0
  50. package/lib/documents/hydranium-text-documents.d.ts +445 -282
  51. package/lib/documents/hydranium-text-documents.d.ts.map +1 -1
  52. package/lib/documents/hydranium-text-documents.js +903 -504
  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 +145 -0
  71. package/lib/documents/version-sync-service.d.ts.map +1 -0
  72. package/lib/documents/version-sync-service.js +177 -0
  73. package/lib/documents/version-sync-service.js.map +1 -0
  74. package/lib/index.d.ts +3 -0
  75. package/lib/index.d.ts.map +1 -1
  76. package/lib/index.js +3 -0
  77. package/lib/index.js.map +1 -1
  78. package/lib/langium/ast-extension/ast-extension-service.d.ts +42 -31
  79. package/lib/langium/ast-extension/ast-extension-service.d.ts.map +1 -1
  80. package/lib/langium/ast-extension/ast-extension-service.js +45 -19
  81. package/lib/langium/ast-extension/ast-extension-service.js.map +1 -1
  82. package/lib/langium/ast-extension/ast-node-builder.d.ts +12 -7
  83. package/lib/langium/ast-extension/ast-node-builder.d.ts.map +1 -1
  84. package/lib/langium/ast-extension/ast-node-builder.js +25 -9
  85. package/lib/langium/ast-extension/ast-node-builder.js.map +1 -1
  86. package/lib/langium/bootstrap.d.ts +49 -36
  87. package/lib/langium/bootstrap.d.ts.map +1 -1
  88. package/lib/langium/bootstrap.js +75 -36
  89. package/lib/langium/bootstrap.js.map +1 -1
  90. package/lib/langium/build-phase-pass/build-phase-pass-service.d.ts +9 -9
  91. package/lib/langium/build-phase-pass/build-phase-pass-service.d.ts.map +1 -1
  92. package/lib/langium/build-phase-pass/build-phase-pass-service.js +25 -16
  93. package/lib/langium/build-phase-pass/build-phase-pass-service.js.map +1 -1
  94. package/lib/langium/build-phase-pass/build-phase-pass.d.ts +20 -8
  95. package/lib/langium/build-phase-pass/build-phase-pass.d.ts.map +1 -1
  96. package/lib/langium/build-phase-pass/build-phase-pass.js +20 -0
  97. package/lib/langium/build-phase-pass/build-phase-pass.js.map +1 -1
  98. package/lib/langium/composite-ast-reflection.d.ts +46 -0
  99. package/lib/langium/composite-ast-reflection.d.ts.map +1 -0
  100. package/lib/langium/composite-ast-reflection.js +97 -0
  101. package/lib/langium/composite-ast-reflection.js.map +1 -0
  102. package/lib/langium/config/configuration-provider.d.ts +81 -0
  103. package/lib/langium/config/configuration-provider.d.ts.map +1 -0
  104. package/lib/langium/config/configuration-provider.js +112 -0
  105. package/lib/langium/config/configuration-provider.js.map +1 -0
  106. package/lib/langium/config/index.d.ts +1 -0
  107. package/lib/langium/config/index.d.ts.map +1 -1
  108. package/lib/langium/config/index.js +1 -0
  109. package/lib/langium/config/index.js.map +1 -1
  110. package/lib/langium/config/settings.js.map +1 -1
  111. package/lib/langium/diagnostics/console-tee.d.ts +27 -0
  112. package/lib/langium/diagnostics/console-tee.d.ts.map +1 -0
  113. package/lib/langium/diagnostics/console-tee.js +141 -0
  114. package/lib/langium/diagnostics/console-tee.js.map +1 -0
  115. package/lib/langium/diagnostics/hydranium-langium-profiler.d.ts +9 -20
  116. package/lib/langium/diagnostics/hydranium-langium-profiler.d.ts.map +1 -1
  117. package/lib/langium/diagnostics/hydranium-langium-profiler.js +15 -24
  118. package/lib/langium/diagnostics/hydranium-langium-profiler.js.map +1 -1
  119. package/lib/langium/diagnostics/log-preamble.js +1 -1
  120. package/lib/langium/diagnostics/log-preamble.js.map +1 -1
  121. package/lib/langium/diagnostics/logger.d.ts +25 -6
  122. package/lib/langium/diagnostics/logger.d.ts.map +1 -1
  123. package/lib/langium/diagnostics/logger.js +49 -17
  124. package/lib/langium/diagnostics/logger.js.map +1 -1
  125. package/lib/langium/diagnostics/lsp-logger.d.ts +25 -0
  126. package/lib/langium/diagnostics/lsp-logger.d.ts.map +1 -1
  127. package/lib/langium/diagnostics/lsp-logger.js +81 -46
  128. package/lib/langium/diagnostics/lsp-logger.js.map +1 -1
  129. package/lib/langium/diagnostics/server-tracer.d.ts.map +1 -1
  130. package/lib/langium/diagnostics/server-tracer.js.map +1 -1
  131. package/lib/langium/document-builder/build-pipeline-integration.d.ts +21 -1
  132. package/lib/langium/document-builder/build-pipeline-integration.d.ts.map +1 -1
  133. package/lib/langium/document-builder/build-pipeline-integration.js +43 -30
  134. package/lib/langium/document-builder/build-pipeline-integration.js.map +1 -1
  135. package/lib/langium/document-builder/build-session.d.ts +6 -5
  136. package/lib/langium/document-builder/build-session.d.ts.map +1 -1
  137. package/lib/langium/document-builder/build-session.js +5 -5
  138. package/lib/langium/document-builder/build-session.js.map +1 -1
  139. package/lib/langium/document-builder/document-builder.d.ts +355 -39
  140. package/lib/langium/document-builder/document-builder.d.ts.map +1 -1
  141. package/lib/langium/document-builder/document-builder.js +578 -102
  142. package/lib/langium/document-builder/document-builder.js.map +1 -1
  143. package/lib/langium/documentation/comment-provider.d.ts.map +1 -1
  144. package/lib/langium/documentation/comment-provider.js.map +1 -1
  145. package/lib/langium/integration-services.d.ts +39 -23
  146. package/lib/langium/integration-services.d.ts.map +1 -1
  147. package/lib/langium/integration-services.js +7 -4
  148. package/lib/langium/integration-services.js.map +1 -1
  149. package/lib/langium/integrity/integrity-rule.d.ts +22 -8
  150. package/lib/langium/integrity/integrity-rule.d.ts.map +1 -1
  151. package/lib/langium/integrity/integrity-rule.js.map +1 -1
  152. package/lib/langium/integrity/integrity-service.d.ts +104 -27
  153. package/lib/langium/integrity/integrity-service.d.ts.map +1 -1
  154. package/lib/langium/integrity/integrity-service.js +319 -65
  155. package/lib/langium/integrity/integrity-service.js.map +1 -1
  156. package/lib/langium/keys/containment.d.ts +3 -2
  157. package/lib/langium/keys/containment.d.ts.map +1 -1
  158. package/lib/langium/keys/containment.js.map +1 -1
  159. package/lib/langium/keys/name-based-key-provider.d.ts +17 -10
  160. package/lib/langium/keys/name-based-key-provider.d.ts.map +1 -1
  161. package/lib/langium/keys/name-based-key-provider.js +24 -12
  162. package/lib/langium/keys/name-based-key-provider.js.map +1 -1
  163. package/lib/langium/keys/positional-key-provider.d.ts.map +1 -1
  164. package/lib/langium/keys/positional-key-provider.js.map +1 -1
  165. package/lib/langium/labeling/label-provider.d.ts.map +1 -1
  166. package/lib/langium/labeling/label-provider.js.map +1 -1
  167. package/lib/langium/language-module.d.ts +30 -5
  168. package/lib/langium/language-module.d.ts.map +1 -1
  169. package/lib/langium/language-module.js +21 -5
  170. package/lib/langium/language-module.js.map +1 -1
  171. package/lib/langium/model-service/client-session.d.ts +405 -0
  172. package/lib/langium/model-service/client-session.d.ts.map +1 -0
  173. package/lib/langium/model-service/client-session.js +479 -0
  174. package/lib/langium/model-service/client-session.js.map +1 -0
  175. package/lib/langium/model-service/index.d.ts +2 -0
  176. package/lib/langium/model-service/index.d.ts.map +1 -1
  177. package/lib/langium/model-service/index.js +2 -0
  178. package/lib/langium/model-service/index.js.map +1 -1
  179. package/lib/langium/model-service/model-events.d.ts +68 -0
  180. package/lib/langium/model-service/model-events.d.ts.map +1 -0
  181. package/lib/langium/model-service/model-events.js +10 -0
  182. package/lib/langium/model-service/model-events.js.map +1 -0
  183. package/lib/langium/model-service/model-service.d.ts +441 -323
  184. package/lib/langium/model-service/model-service.d.ts.map +1 -1
  185. package/lib/langium/model-service/model-service.js +602 -397
  186. package/lib/langium/model-service/model-service.js.map +1 -1
  187. package/lib/langium/module.d.ts +96 -37
  188. package/lib/langium/module.d.ts.map +1 -1
  189. package/lib/langium/module.js +39 -27
  190. package/lib/langium/module.js.map +1 -1
  191. package/lib/langium/naming/name-provider.d.ts +32 -7
  192. package/lib/langium/naming/name-provider.d.ts.map +1 -1
  193. package/lib/langium/naming/name-provider.js +10 -4
  194. package/lib/langium/naming/name-provider.js.map +1 -1
  195. package/lib/langium/naming/name-separator-validation.d.ts.map +1 -1
  196. package/lib/langium/project/abstract-project-manager.d.ts +184 -13
  197. package/lib/langium/project/abstract-project-manager.d.ts.map +1 -1
  198. package/lib/langium/project/abstract-project-manager.js +336 -16
  199. package/lib/langium/project/abstract-project-manager.js.map +1 -1
  200. package/lib/langium/project/project-change-event.d.ts +22 -3
  201. package/lib/langium/project/project-change-event.d.ts.map +1 -1
  202. package/lib/langium/project/project-manager.d.ts +28 -2
  203. package/lib/langium/project/project-manager.d.ts.map +1 -1
  204. package/lib/langium/project/single-project-manager.d.ts +7 -1
  205. package/lib/langium/project/single-project-manager.d.ts.map +1 -1
  206. package/lib/langium/project/single-project-manager.js +12 -0
  207. package/lib/langium/project/single-project-manager.js.map +1 -1
  208. package/lib/langium/residency/cst-residency-service.d.ts +81 -44
  209. package/lib/langium/residency/cst-residency-service.d.ts.map +1 -1
  210. package/lib/langium/residency/cst-residency-service.js +142 -46
  211. package/lib/langium/residency/cst-residency-service.js.map +1 -1
  212. package/lib/langium/scope/ast-node-description-provider.d.ts +46 -10
  213. package/lib/langium/scope/ast-node-description-provider.d.ts.map +1 -1
  214. package/lib/langium/scope/ast-node-description-provider.js +88 -15
  215. package/lib/langium/scope/ast-node-description-provider.js.map +1 -1
  216. package/lib/langium/scope/built-local-symbols.d.ts +12 -0
  217. package/lib/langium/scope/built-local-symbols.d.ts.map +1 -0
  218. package/lib/langium/scope/built-local-symbols.js +11 -0
  219. package/lib/langium/scope/built-local-symbols.js.map +1 -0
  220. package/lib/langium/scope/fallback-scope.d.ts +27 -0
  221. package/lib/langium/scope/fallback-scope.d.ts.map +1 -0
  222. package/lib/langium/scope/fallback-scope.js +35 -0
  223. package/lib/langium/scope/fallback-scope.js.map +1 -0
  224. package/lib/langium/scope/hydranium-scope-computation.d.ts +21 -18
  225. package/lib/langium/scope/hydranium-scope-computation.d.ts.map +1 -1
  226. package/lib/langium/scope/hydranium-scope-computation.js +38 -39
  227. package/lib/langium/scope/hydranium-scope-computation.js.map +1 -1
  228. package/lib/langium/scope/hydranium-scope-provider.d.ts +122 -32
  229. package/lib/langium/scope/hydranium-scope-provider.d.ts.map +1 -1
  230. package/lib/langium/scope/hydranium-scope-provider.js +217 -39
  231. package/lib/langium/scope/hydranium-scope-provider.js.map +1 -1
  232. package/lib/langium/scope/index.d.ts +1 -0
  233. package/lib/langium/scope/index.d.ts.map +1 -1
  234. package/lib/langium/scope/index.js +1 -0
  235. package/lib/langium/scope/index.js.map +1 -1
  236. package/lib/langium/scope/reference-builder.d.ts.map +1 -1
  237. package/lib/langium/scope/reference-builder.js.map +1 -1
  238. package/lib/langium/scope/reference-candidate-provider.d.ts +6 -5
  239. package/lib/langium/scope/reference-candidate-provider.d.ts.map +1 -1
  240. package/lib/langium/scope/reference-candidate-provider.js +3 -2
  241. package/lib/langium/scope/reference-candidate-provider.js.map +1 -1
  242. package/lib/langium/scope/scope-extension-service.d.ts +69 -37
  243. package/lib/langium/scope/scope-extension-service.d.ts.map +1 -1
  244. package/lib/langium/scope/scope-extension-service.js +102 -29
  245. package/lib/langium/scope/scope-extension-service.js.map +1 -1
  246. package/lib/langium/scope/scoped-ast-node-description.d.ts +1 -3
  247. package/lib/langium/scope/scoped-ast-node-description.d.ts.map +1 -1
  248. package/lib/langium/scope/scoped-ast-node-description.js +1 -3
  249. package/lib/langium/scope/scoped-ast-node-description.js.map +1 -1
  250. package/lib/langium/serialization/abstract-serializer.d.ts +38 -27
  251. package/lib/langium/serialization/abstract-serializer.d.ts.map +1 -1
  252. package/lib/langium/serialization/abstract-serializer.js +54 -30
  253. package/lib/langium/serialization/abstract-serializer.js.map +1 -1
  254. package/lib/langium/serialization/json-serializer.d.ts +8 -1
  255. package/lib/langium/serialization/json-serializer.d.ts.map +1 -1
  256. package/lib/langium/serialization/json-serializer.js +13 -3
  257. package/lib/langium/serialization/json-serializer.js.map +1 -1
  258. package/lib/langium/serialization/serializer.d.ts +1 -1
  259. package/lib/langium/serialization/yaml-serializer.d.ts +12 -0
  260. package/lib/langium/serialization/yaml-serializer.d.ts.map +1 -1
  261. package/lib/langium/serialization/yaml-serializer.js +24 -4
  262. package/lib/langium/serialization/yaml-serializer.js.map +1 -1
  263. package/lib/langium/service-registry.d.ts +29 -1
  264. package/lib/langium/service-registry.d.ts.map +1 -1
  265. package/lib/langium/service-registry.js +37 -0
  266. package/lib/langium/service-registry.js.map +1 -1
  267. package/lib/langium/shared-services.d.ts +10 -4
  268. package/lib/langium/shared-services.d.ts.map +1 -1
  269. package/lib/langium/shared-services.js.map +1 -1
  270. package/lib/langium/single-langium-copy.d.ts +22 -0
  271. package/lib/langium/single-langium-copy.d.ts.map +1 -0
  272. package/lib/langium/single-langium-copy.js +36 -0
  273. package/lib/langium/single-langium-copy.js.map +1 -0
  274. package/lib/langium/transfer/transfer-encoder.d.ts +60 -39
  275. package/lib/langium/transfer/transfer-encoder.d.ts.map +1 -1
  276. package/lib/langium/transfer/transfer-encoder.js +35 -24
  277. package/lib/langium/transfer/transfer-encoder.js.map +1 -1
  278. package/lib/langium/trivia/comment-preserver.d.ts +543 -0
  279. package/lib/langium/trivia/comment-preserver.d.ts.map +1 -0
  280. package/lib/langium/trivia/comment-preserver.js +1165 -0
  281. package/lib/langium/trivia/comment-preserver.js.map +1 -0
  282. package/lib/langium/trivia/document-ending-preserver.d.ts +51 -0
  283. package/lib/langium/trivia/document-ending-preserver.d.ts.map +1 -0
  284. package/lib/langium/trivia/document-ending-preserver.js +62 -0
  285. package/lib/langium/trivia/document-ending-preserver.js.map +1 -0
  286. package/lib/langium/trivia/index.d.ts +14 -0
  287. package/lib/langium/trivia/index.d.ts.map +1 -0
  288. package/lib/langium/trivia/index.js +14 -0
  289. package/lib/langium/trivia/index.js.map +1 -0
  290. package/lib/langium/trivia/trivia-contribution.d.ts +37 -0
  291. package/lib/langium/trivia/trivia-contribution.d.ts.map +1 -0
  292. package/lib/langium/trivia/trivia-contribution.js +10 -0
  293. package/lib/langium/trivia/trivia-contribution.js.map +1 -0
  294. package/lib/langium/trivia/trivia-preserver.d.ts +52 -0
  295. package/lib/langium/trivia/trivia-preserver.d.ts.map +1 -0
  296. package/lib/langium/trivia/trivia-preserver.js +10 -0
  297. package/lib/langium/trivia/trivia-preserver.js.map +1 -0
  298. package/lib/langium/trivia/trivia-service.d.ts +70 -0
  299. package/lib/langium/trivia/trivia-service.d.ts.map +1 -0
  300. package/lib/langium/trivia/trivia-service.js +56 -0
  301. package/lib/langium/trivia/trivia-service.js.map +1 -0
  302. package/lib/langium/update-rewrite/normalize-empty-strings.d.ts.map +1 -1
  303. package/lib/langium/update-rewrite/update-rewrite-service.d.ts +1 -1
  304. package/lib/langium/update-rewrite/update-rewrite-service.d.ts.map +1 -1
  305. package/lib/langium/update-rewrite/update-rewrite-service.js.map +1 -1
  306. package/lib/langium/update-rewrite/update-rewrite.d.ts +1 -1
  307. package/lib/langium/validation/document-validator.d.ts +168 -23
  308. package/lib/langium/validation/document-validator.d.ts.map +1 -1
  309. package/lib/langium/validation/document-validator.js +264 -26
  310. package/lib/langium/validation/document-validator.js.map +1 -1
  311. package/lib/langium/validation/validation-contribution-collector.d.ts +9 -1
  312. package/lib/langium/validation/validation-contribution-collector.d.ts.map +1 -1
  313. package/lib/langium/validation/validation-contribution-collector.js +1 -1
  314. package/lib/langium/validation/validation-contribution-collector.js.map +1 -1
  315. package/lib/langium/workspace/ast-node-locator.d.ts +24 -0
  316. package/lib/langium/workspace/ast-node-locator.d.ts.map +1 -0
  317. package/lib/langium/workspace/ast-node-locator.js +32 -0
  318. package/lib/langium/workspace/ast-node-locator.js.map +1 -0
  319. package/lib/langium/workspace/document-uri-policy.d.ts +24 -15
  320. package/lib/langium/workspace/document-uri-policy.d.ts.map +1 -1
  321. package/lib/langium/workspace/document-uri-policy.js +22 -13
  322. package/lib/langium/workspace/document-uri-policy.js.map +1 -1
  323. package/lib/langium/workspace/file-not-found.d.ts +23 -0
  324. package/lib/langium/workspace/file-not-found.d.ts.map +1 -0
  325. package/lib/langium/workspace/file-not-found.js +31 -0
  326. package/lib/langium/workspace/file-not-found.js.map +1 -0
  327. package/lib/langium/workspace/file-system-provider.d.ts +167 -8
  328. package/lib/langium/workspace/file-system-provider.d.ts.map +1 -1
  329. package/lib/langium/workspace/file-system-provider.js +115 -13
  330. package/lib/langium/workspace/file-system-provider.js.map +1 -1
  331. package/lib/langium/workspace/hydranium-langium-document-factory.d.ts +35 -1
  332. package/lib/langium/workspace/hydranium-langium-document-factory.d.ts.map +1 -1
  333. package/lib/langium/workspace/hydranium-langium-document-factory.js +77 -0
  334. package/lib/langium/workspace/hydranium-langium-document-factory.js.map +1 -1
  335. package/lib/langium/workspace/hydranium-workspace-lock.d.ts +43 -1
  336. package/lib/langium/workspace/hydranium-workspace-lock.d.ts.map +1 -1
  337. package/lib/langium/workspace/hydranium-workspace-lock.js +58 -1
  338. package/lib/langium/workspace/hydranium-workspace-lock.js.map +1 -1
  339. package/lib/langium/workspace/hydranium-workspace-manager.d.ts +105 -21
  340. package/lib/langium/workspace/hydranium-workspace-manager.d.ts.map +1 -1
  341. package/lib/langium/workspace/hydranium-workspace-manager.js +186 -31
  342. package/lib/langium/workspace/hydranium-workspace-manager.js.map +1 -1
  343. package/lib/langium/workspace/in-memory-file-system-provider.d.ts +26 -9
  344. package/lib/langium/workspace/in-memory-file-system-provider.d.ts.map +1 -1
  345. package/lib/langium/workspace/in-memory-file-system-provider.js +45 -22
  346. package/lib/langium/workspace/in-memory-file-system-provider.js.map +1 -1
  347. package/lib/langium/workspace/index-manager.d.ts.map +1 -1
  348. package/lib/langium/workspace/index-manager.js.map +1 -1
  349. package/lib/langium/workspace/index.d.ts +3 -0
  350. package/lib/langium/workspace/index.d.ts.map +1 -1
  351. package/lib/langium/workspace/index.js +3 -0
  352. package/lib/langium/workspace/index.js.map +1 -1
  353. package/lib/langium/workspace/initialize-workspace.d.ts +40 -3
  354. package/lib/langium/workspace/initialize-workspace.d.ts.map +1 -1
  355. package/lib/langium/workspace/initialize-workspace.js +68 -3
  356. package/lib/langium/workspace/initialize-workspace.js.map +1 -1
  357. package/lib/langium/workspace/langium-documents.d.ts +7 -0
  358. package/lib/langium/workspace/langium-documents.d.ts.map +1 -1
  359. package/lib/langium/workspace/langium-documents.js +18 -1
  360. package/lib/langium/workspace/langium-documents.js.map +1 -1
  361. package/lib/langium/workspace/persistent-file-system-provider.d.ts +16 -10
  362. package/lib/langium/workspace/persistent-file-system-provider.d.ts.map +1 -1
  363. package/lib/langium/workspace/persistent-file-system-provider.js +25 -13
  364. package/lib/langium/workspace/persistent-file-system-provider.js.map +1 -1
  365. package/lib/{documents → langium/workspace}/self-save-registry.d.ts +7 -9
  366. package/lib/langium/workspace/self-save-registry.d.ts.map +1 -0
  367. package/lib/{documents → langium/workspace}/self-save-registry.js +9 -11
  368. package/lib/langium/workspace/self-save-registry.js.map +1 -0
  369. package/lib/langium/workspace/syntax-errors.d.ts +23 -0
  370. package/lib/langium/workspace/syntax-errors.d.ts.map +1 -0
  371. package/lib/langium/workspace/syntax-errors.js +29 -0
  372. package/lib/langium/workspace/syntax-errors.js.map +1 -0
  373. package/lib/langium/workspace/virtual-document.d.ts +55 -21
  374. package/lib/langium/workspace/virtual-document.d.ts.map +1 -1
  375. package/lib/langium/workspace/virtual-document.js +87 -24
  376. package/lib/langium/workspace/virtual-document.js.map +1 -1
  377. package/lib/langium/workspace/write-lock-scope.d.ts +22 -10
  378. package/lib/langium/workspace/write-lock-scope.d.ts.map +1 -1
  379. package/lib/langium/workspace/write-lock-scope.js +15 -5
  380. package/lib/langium/workspace/write-lock-scope.js.map +1 -1
  381. package/lib/launcher/integrated-server.d.ts +3 -1
  382. package/lib/launcher/integrated-server.d.ts.map +1 -1
  383. package/lib/locale/server-locale.d.ts +6 -6
  384. package/lib/locale/server-locale.d.ts.map +1 -1
  385. package/lib/locale/server-locale.js.map +1 -1
  386. package/lib/lsp/completion/hydranium-completion-provider.d.ts +44 -2
  387. package/lib/lsp/completion/hydranium-completion-provider.d.ts.map +1 -1
  388. package/lib/lsp/completion/hydranium-completion-provider.js +68 -0
  389. package/lib/lsp/completion/hydranium-completion-provider.js.map +1 -1
  390. package/lib/lsp/connection-features.d.ts +23 -0
  391. package/lib/lsp/connection-features.d.ts.map +1 -0
  392. package/lib/lsp/connection-features.js +60 -0
  393. package/lib/lsp/connection-features.js.map +1 -0
  394. package/lib/lsp/diagnostics-connection.d.ts +27 -0
  395. package/lib/lsp/diagnostics-connection.d.ts.map +1 -0
  396. package/lib/lsp/diagnostics-connection.js +53 -0
  397. package/lib/lsp/diagnostics-connection.js.map +1 -0
  398. package/lib/lsp/edit-requests-guard.d.ts +31 -0
  399. package/lib/lsp/edit-requests-guard.d.ts.map +1 -0
  400. package/lib/lsp/edit-requests-guard.js +125 -0
  401. package/lib/lsp/edit-requests-guard.js.map +1 -0
  402. package/lib/lsp/hydranium-document-update-handler.d.ts +126 -82
  403. package/lib/lsp/hydranium-document-update-handler.d.ts.map +1 -1
  404. package/lib/lsp/hydranium-document-update-handler.js +234 -101
  405. package/lib/lsp/hydranium-document-update-handler.js.map +1 -1
  406. package/lib/lsp/index.d.ts +6 -2
  407. package/lib/lsp/index.d.ts.map +1 -1
  408. package/lib/lsp/index.js +6 -2
  409. package/lib/lsp/index.js.map +1 -1
  410. package/lib/lsp/lsp-latency.d.ts +39 -0
  411. package/lib/lsp/lsp-latency.d.ts.map +1 -0
  412. package/lib/lsp/lsp-latency.js +58 -0
  413. package/lib/lsp/lsp-latency.js.map +1 -0
  414. package/lib/lsp/save-text-document.d.ts +31 -0
  415. package/lib/lsp/save-text-document.d.ts.map +1 -0
  416. package/lib/lsp/save-text-document.js +52 -0
  417. package/lib/lsp/save-text-document.js.map +1 -0
  418. package/lib/lsp/semantic-token-provider.d.ts +58 -2
  419. package/lib/lsp/semantic-token-provider.d.ts.map +1 -1
  420. package/lib/lsp/semantic-token-provider.js +98 -9
  421. package/lib/lsp/semantic-token-provider.js.map +1 -1
  422. package/lib/lsp/shared-module.d.ts +4 -8
  423. package/lib/lsp/shared-module.d.ts.map +1 -1
  424. package/lib/lsp/shared-module.js.map +1 -1
  425. package/lib/lsp/start-language-server.d.ts +12 -7
  426. package/lib/lsp/start-language-server.d.ts.map +1 -1
  427. package/lib/lsp/start-language-server.js +21 -7
  428. package/lib/lsp/start-language-server.js.map +1 -1
  429. package/lib/messages/carriers.d.ts +4 -6
  430. package/lib/messages/carriers.d.ts.map +1 -1
  431. package/lib/messages/carriers.js +4 -6
  432. package/lib/messages/carriers.js.map +1 -1
  433. package/lib/messages/index.d.ts +2 -2
  434. package/lib/messages/index.d.ts.map +1 -1
  435. package/lib/messages/index.js +2 -2
  436. package/lib/messages/index.js.map +1 -1
  437. package/lib/messages/renderer.d.ts +10 -4
  438. package/lib/messages/renderer.d.ts.map +1 -1
  439. package/lib/messages/renderer.js +6 -0
  440. package/lib/messages/renderer.js.map +1 -1
  441. package/lib/node/event-loop-monitor.d.ts.map +1 -1
  442. package/lib/node/event-loop-monitor.js +2 -1
  443. package/lib/node/event-loop-monitor.js.map +1 -1
  444. package/lib/node/heap-ceiling.d.ts +61 -0
  445. package/lib/node/heap-ceiling.d.ts.map +1 -0
  446. package/lib/node/heap-ceiling.js +72 -0
  447. package/lib/node/heap-ceiling.js.map +1 -0
  448. package/lib/node/index.d.ts +1 -1
  449. package/lib/node/index.d.ts.map +1 -1
  450. package/lib/node/index.js +5 -1
  451. package/lib/node/index.js.map +1 -1
  452. package/lib/node/latency-from-env.d.ts +1 -1
  453. package/lib/node/latency-from-env.js +1 -1
  454. package/lib/node/lint-grammar.js.map +1 -1
  455. package/lib/node/log-file-sink.d.ts +3 -2
  456. package/lib/node/log-file-sink.d.ts.map +1 -1
  457. package/lib/node/log-file-sink.js +6 -2
  458. package/lib/node/log-file-sink.js.map +1 -1
  459. package/lib/node/log-preamble-node.d.ts +5 -3
  460. package/lib/node/log-preamble-node.d.ts.map +1 -1
  461. package/lib/node/log-preamble-node.js +13 -10
  462. package/lib/node/log-preamble-node.js.map +1 -1
  463. package/lib/node/measure-memory.d.ts.map +1 -1
  464. package/lib/node/measure-memory.js +5 -4
  465. package/lib/node/measure-memory.js.map +1 -1
  466. package/lib/node/memory-monitor.d.ts +2 -2
  467. package/lib/node/memory-monitor.d.ts.map +1 -1
  468. package/lib/node/memory-monitor.js +9 -10
  469. package/lib/node/memory-monitor.js.map +1 -1
  470. package/lib/node/node-file-system-provider.d.ts +67 -9
  471. package/lib/node/node-file-system-provider.d.ts.map +1 -1
  472. package/lib/node/node-file-system-provider.js +198 -53
  473. package/lib/node/node-file-system-provider.js.map +1 -1
  474. package/lib/node/profile-capture.d.ts +12 -4
  475. package/lib/node/profile-capture.d.ts.map +1 -1
  476. package/lib/node/profile-capture.js +8 -6
  477. package/lib/node/profile-capture.js.map +1 -1
  478. package/lib/node/profile-digest.js.map +1 -1
  479. package/lib/node/profiling-run.d.ts +13 -3
  480. package/lib/node/profiling-run.d.ts.map +1 -1
  481. package/lib/node/profiling-run.js +17 -8
  482. package/lib/node/profiling-run.js.map +1 -1
  483. package/lib/node/rename-over-open-readers.d.ts +61 -0
  484. package/lib/node/rename-over-open-readers.d.ts.map +1 -0
  485. package/lib/node/rename-over-open-readers.js +80 -0
  486. package/lib/node/rename-over-open-readers.js.map +1 -0
  487. package/lib/node/server-diagnostics.js +1 -1
  488. package/lib/node/server-diagnostics.js.map +1 -1
  489. package/lib/node/server-state-snapshot.d.ts +1 -2
  490. package/lib/node/server-state-snapshot.d.ts.map +1 -1
  491. package/lib/node/server-state-snapshot.js +4 -4
  492. package/lib/node/server-state-snapshot.js.map +1 -1
  493. package/lib/node/socket-launcher.d.ts +43 -7
  494. package/lib/node/socket-launcher.d.ts.map +1 -1
  495. package/lib/node/socket-launcher.js +42 -7
  496. package/lib/node/socket-launcher.js.map +1 -1
  497. package/lib/node/startup-cpu-profile.d.ts +29 -0
  498. package/lib/node/startup-cpu-profile.d.ts.map +1 -0
  499. package/lib/node/startup-cpu-profile.js +91 -0
  500. package/lib/node/startup-cpu-profile.js.map +1 -0
  501. package/lib/node/stdio-launcher.d.ts +13 -13
  502. package/lib/node/stdio-launcher.d.ts.map +1 -1
  503. package/lib/node/stdio-launcher.js +21 -11
  504. package/lib/node/stdio-launcher.js.map +1 -1
  505. package/lib/node/validate-workspace.d.ts +1 -1
  506. package/lib/node/validate-workspace.d.ts.map +1 -1
  507. package/lib/node/validate-workspace.js +5 -1
  508. package/lib/node/validate-workspace.js.map +1 -1
  509. package/lib/testing/document-uri-policy-conformance.js +1 -1
  510. package/lib/testing/document-uri-policy-conformance.js.map +1 -1
  511. package/lib/testing/fake-description.js.map +1 -1
  512. package/lib/testing/fake-document.d.ts +2 -1
  513. package/lib/testing/fake-document.d.ts.map +1 -1
  514. package/lib/testing/fake-document.js.map +1 -1
  515. package/lib/testing/index.d.ts +1 -1
  516. package/lib/testing/index.d.ts.map +1 -1
  517. package/lib/testing/index.js +2 -1
  518. package/lib/testing/index.js.map +1 -1
  519. package/lib/testing/langium-test-helpers.d.ts.map +1 -1
  520. package/lib/testing/langium-test-helpers.js +1 -0
  521. package/lib/testing/langium-test-helpers.js.map +1 -1
  522. package/lib/testing/make-noop-language-services.js.map +1 -1
  523. package/lib/testing/make-noop-shared-services.js.map +1 -1
  524. package/lib/testing/make-test-services.d.ts +45 -14
  525. package/lib/testing/make-test-services.d.ts.map +1 -1
  526. package/lib/testing/make-test-services.js +23 -7
  527. package/lib/testing/make-test-services.js.map +1 -1
  528. package/lib/testing/make-test-tracer.d.ts +12 -0
  529. package/lib/testing/make-test-tracer.d.ts.map +1 -1
  530. package/lib/testing/make-test-tracer.js +13 -0
  531. package/lib/testing/make-test-tracer.js.map +1 -1
  532. package/lib/testing/node/applied-edit-capture.d.ts +29 -0
  533. package/lib/testing/node/applied-edit-capture.d.ts.map +1 -0
  534. package/lib/testing/node/applied-edit-capture.js +117 -0
  535. package/lib/testing/node/applied-edit-capture.js.map +1 -0
  536. package/lib/testing/node/golden-corpus.js.map +1 -1
  537. package/lib/testing/node/index.d.ts +1 -0
  538. package/lib/testing/node/index.d.ts.map +1 -1
  539. package/lib/testing/node/index.js +1 -0
  540. package/lib/testing/node/index.js.map +1 -1
  541. package/lib/testing/node/lsp-harness.d.ts.map +1 -1
  542. package/lib/testing/node/lsp-harness.js +2 -0
  543. package/lib/testing/node/lsp-harness.js.map +1 -1
  544. package/lib/testing/node/lsp-server-connection.d.ts +21 -6
  545. package/lib/testing/node/lsp-server-connection.d.ts.map +1 -1
  546. package/lib/testing/node/lsp-server-connection.js +49 -106
  547. package/lib/testing/node/lsp-server-connection.js.map +1 -1
  548. package/lib/testing/node/scratch-workspace.d.ts.map +1 -1
  549. package/lib/testing/node/scratch-workspace.js +10 -5
  550. package/lib/testing/node/scratch-workspace.js.map +1 -1
  551. package/lib/testing/node/spawned-server.d.ts +30 -1
  552. package/lib/testing/node/spawned-server.d.ts.map +1 -1
  553. package/lib/testing/node/spawned-server.js +39 -2
  554. package/lib/testing/node/spawned-server.js.map +1 -1
  555. package/lib/testing/node/unhandled-rejections.d.ts +20 -0
  556. package/lib/testing/node/unhandled-rejections.d.ts.map +1 -0
  557. package/lib/testing/node/unhandled-rejections.js +32 -0
  558. package/lib/testing/node/unhandled-rejections.js.map +1 -0
  559. package/lib/testing/playwright/browser-capture-bridge.js.map +1 -1
  560. package/lib/testing/playwright/e2e-profiling.js.map +1 -1
  561. package/lib/testing/playwright/flaky-network-proxy.d.ts +76 -0
  562. package/lib/testing/playwright/flaky-network-proxy.d.ts.map +1 -0
  563. package/lib/testing/playwright/flaky-network-proxy.js +164 -0
  564. package/lib/testing/playwright/flaky-network-proxy.js.map +1 -0
  565. package/lib/testing/playwright/index.d.ts +1 -0
  566. package/lib/testing/playwright/index.d.ts.map +1 -1
  567. package/lib/testing/playwright/index.js +1 -0
  568. package/lib/testing/playwright/index.js.map +1 -1
  569. package/lib/testing/playwright/server-log-capture.d.ts +46 -16
  570. package/lib/testing/playwright/server-log-capture.d.ts.map +1 -1
  571. package/lib/testing/playwright/server-log-capture.js +111 -40
  572. package/lib/testing/playwright/server-log-capture.js.map +1 -1
  573. package/lib/testing/playwright/server-log-fixture.d.ts +16 -0
  574. package/lib/testing/playwright/server-log-fixture.d.ts.map +1 -1
  575. package/lib/testing/playwright/server-log-fixture.js +25 -6
  576. package/lib/testing/playwright/server-log-fixture.js.map +1 -1
  577. package/lib/testing/playwright/server-log-region.d.ts +15 -0
  578. package/lib/testing/playwright/server-log-region.d.ts.map +1 -0
  579. package/lib/testing/playwright/server-log-region.js +30 -0
  580. package/lib/testing/playwright/server-log-region.js.map +1 -0
  581. package/lib/testing/playwright/server-log-rename-reporter.d.ts.map +1 -1
  582. package/lib/testing/playwright/server-log-rename-reporter.js +4 -3
  583. package/lib/testing/playwright/server-log-rename-reporter.js.map +1 -1
  584. package/lib/testing/run-update-pipeline.d.ts +8 -5
  585. package/lib/testing/run-update-pipeline.d.ts.map +1 -1
  586. package/lib/testing/run-update-pipeline.js.map +1 -1
  587. package/lib/testing/stub-ast-document-manager.d.ts +11 -51
  588. package/lib/testing/stub-ast-document-manager.d.ts.map +1 -1
  589. package/lib/testing/stub-ast-document-manager.js +31 -59
  590. package/lib/testing/stub-ast-document-manager.js.map +1 -1
  591. package/lib/testing/stub-document-builder.d.ts +33 -11
  592. package/lib/testing/stub-document-builder.d.ts.map +1 -1
  593. package/lib/testing/stub-document-builder.js +110 -5
  594. package/lib/testing/stub-document-builder.js.map +1 -1
  595. package/lib/testing/stub-hydranium-text-documents.d.ts +33 -10
  596. package/lib/testing/stub-hydranium-text-documents.d.ts.map +1 -1
  597. package/lib/testing/stub-hydranium-text-documents.js +132 -16
  598. package/lib/testing/stub-hydranium-text-documents.js.map +1 -1
  599. package/lib/testing/stub-index-manager.js.map +1 -1
  600. package/lib/testing/stub-langium-documents.d.ts +3 -2
  601. package/lib/testing/stub-langium-documents.d.ts.map +1 -1
  602. package/lib/testing/stub-langium-documents.js.map +1 -1
  603. package/lib/testing/stub-model-service.d.ts +8 -7
  604. package/lib/testing/stub-model-service.d.ts.map +1 -1
  605. package/lib/testing/stub-model-service.js +4 -4
  606. package/lib/testing/stub-model-service.js.map +1 -1
  607. package/lib/testing/stub-project-manager.d.ts.map +1 -1
  608. package/lib/testing/stub-project-manager.js +10 -0
  609. package/lib/testing/stub-project-manager.js.map +1 -1
  610. package/lib/testing/stub-self-save-registry.d.ts +1 -1
  611. package/lib/testing/stub-self-save-registry.d.ts.map +1 -1
  612. package/lib/testing/stub-service-registry.d.ts +1 -1
  613. package/lib/testing/stub-service-registry.js.map +1 -1
  614. package/lib/testing/stub-writable-file-system.d.ts +1 -1
  615. package/lib/testing/stub-writable-file-system.d.ts.map +1 -1
  616. package/lib/testing/stub-writable-file-system.js +2 -1
  617. package/lib/testing/stub-writable-file-system.js.map +1 -1
  618. package/lib/util/connection-liveness.d.ts +22 -6
  619. package/lib/util/connection-liveness.d.ts.map +1 -1
  620. package/lib/util/connection-liveness.js +75 -15
  621. package/lib/util/connection-liveness.js.map +1 -1
  622. package/lib/util/environment.d.ts +7 -0
  623. package/lib/util/environment.d.ts.map +1 -1
  624. package/lib/util/environment.js +15 -1
  625. package/lib/util/environment.js.map +1 -1
  626. package/lib/util/registry.d.ts.map +1 -1
  627. package/package.json +41 -60
  628. package/src/browser/host-heads-in-worker.ts +218 -0
  629. package/src/browser/index.ts +17 -0
  630. package/src/browser/indexeddb-file-system-store.ts +192 -0
  631. package/src/browser/start-language-server-in-worker.ts +56 -0
  632. package/src/documents/ast-document-manager.ts +477 -249
  633. package/src/documents/client-ids.ts +5 -22
  634. package/src/documents/client-session-errors.ts +26 -0
  635. package/src/documents/client-session-registry.ts +262 -0
  636. package/src/documents/dirty-state-tracker.ts +167 -0
  637. package/src/documents/document-release-handler.ts +404 -0
  638. package/src/documents/document-release-scheduler.ts +121 -0
  639. package/src/documents/file-system-task-queue.ts +74 -0
  640. package/src/documents/hydranium-text-documents.ts +1029 -616
  641. package/src/documents/index.ts +10 -2
  642. package/src/documents/language-client-shadow.ts +501 -0
  643. package/src/documents/model-ledger.ts +66 -0
  644. package/src/documents/text-ledger.ts +112 -0
  645. package/src/documents/version-sync-service.ts +289 -0
  646. package/src/index.ts +3 -0
  647. package/src/langium/ast-extension/ast-extension-service.ts +77 -41
  648. package/src/langium/ast-extension/ast-node-builder.ts +35 -13
  649. package/src/langium/bootstrap.ts +79 -43
  650. package/src/langium/build-phase-pass/build-phase-pass-service.ts +29 -19
  651. package/src/langium/build-phase-pass/build-phase-pass.ts +37 -8
  652. package/src/langium/composite-ast-reflection.ts +112 -0
  653. package/src/langium/config/configuration-provider.ts +119 -0
  654. package/src/langium/config/index.ts +1 -0
  655. package/src/langium/diagnostics/console-tee.ts +150 -0
  656. package/src/langium/diagnostics/hydranium-langium-profiler.ts +15 -39
  657. package/src/langium/diagnostics/log-preamble.ts +1 -1
  658. package/src/langium/diagnostics/logger.ts +51 -17
  659. package/src/langium/diagnostics/lsp-logger.ts +83 -45
  660. package/src/langium/document-builder/build-pipeline-integration.ts +57 -32
  661. package/src/langium/document-builder/build-session.ts +4 -3
  662. package/src/langium/document-builder/document-builder.ts +709 -105
  663. package/src/langium/integration-services.ts +58 -27
  664. package/src/langium/integrity/integrity-rule.ts +22 -8
  665. package/src/langium/integrity/integrity-service.ts +348 -71
  666. package/src/langium/keys/containment.ts +3 -2
  667. package/src/langium/keys/name-based-key-provider.ts +24 -12
  668. package/src/langium/language-module.ts +52 -9
  669. package/src/langium/model-service/client-session.ts +769 -0
  670. package/src/langium/model-service/index.ts +2 -0
  671. package/src/langium/model-service/model-events.ts +82 -0
  672. package/src/langium/model-service/model-service.ts +885 -522
  673. package/src/langium/module.ts +139 -63
  674. package/src/langium/naming/name-provider.ts +34 -8
  675. package/src/langium/project/abstract-project-manager.ts +409 -20
  676. package/src/langium/project/project-change-event.ts +25 -3
  677. package/src/langium/project/project-manager.ts +31 -2
  678. package/src/langium/project/single-project-manager.ts +16 -1
  679. package/src/langium/residency/cst-residency-service.ts +197 -73
  680. package/src/langium/scope/ast-node-description-provider.ts +111 -16
  681. package/src/langium/scope/built-local-symbols.ts +13 -0
  682. package/src/langium/scope/fallback-scope.ts +38 -0
  683. package/src/langium/scope/hydranium-scope-computation.ts +45 -44
  684. package/src/langium/scope/hydranium-scope-provider.ts +245 -41
  685. package/src/langium/scope/index.ts +1 -0
  686. package/src/langium/scope/reference-candidate-provider.ts +6 -5
  687. package/src/langium/scope/scope-extension-service.ts +148 -56
  688. package/src/langium/scope/scoped-ast-node-description.ts +1 -3
  689. package/src/langium/serialization/abstract-serializer.ts +57 -41
  690. package/src/langium/serialization/json-serializer.ts +14 -3
  691. package/src/langium/serialization/serializer.ts +1 -1
  692. package/src/langium/serialization/yaml-serializer.ts +26 -4
  693. package/src/langium/service-registry.ts +41 -2
  694. package/src/langium/shared-services.ts +13 -4
  695. package/src/langium/single-langium-copy.ts +42 -0
  696. package/src/langium/transfer/transfer-encoder.ts +76 -50
  697. package/src/langium/trivia/comment-preserver.ts +1410 -0
  698. package/src/langium/trivia/document-ending-preserver.ts +71 -0
  699. package/src/langium/trivia/index.ts +14 -0
  700. package/src/langium/trivia/trivia-contribution.ts +39 -0
  701. package/src/langium/trivia/trivia-preserver.ts +56 -0
  702. package/src/langium/trivia/trivia-service.ts +99 -0
  703. package/src/langium/update-rewrite/update-rewrite-service.ts +1 -1
  704. package/src/langium/update-rewrite/update-rewrite.ts +1 -1
  705. package/src/langium/validation/document-validator.ts +312 -31
  706. package/src/langium/validation/validation-contribution-collector.ts +10 -1
  707. package/src/langium/workspace/ast-node-locator.ts +33 -0
  708. package/src/langium/workspace/document-uri-policy.ts +32 -18
  709. package/src/langium/workspace/file-not-found.ts +35 -0
  710. package/src/langium/workspace/file-system-provider.ts +258 -16
  711. package/src/langium/workspace/hydranium-langium-document-factory.ts +107 -0
  712. package/src/langium/workspace/hydranium-workspace-lock.ts +86 -2
  713. package/src/langium/workspace/hydranium-workspace-manager.ts +214 -35
  714. package/src/langium/workspace/in-memory-file-system-provider.ts +54 -23
  715. package/src/langium/workspace/index.ts +3 -0
  716. package/src/langium/workspace/initialize-workspace.ts +96 -4
  717. package/src/langium/workspace/langium-documents.ts +19 -1
  718. package/src/langium/workspace/persistent-file-system-provider.ts +27 -15
  719. package/src/{documents → langium/workspace}/self-save-registry.ts +12 -14
  720. package/src/langium/workspace/syntax-errors.ts +34 -0
  721. package/src/langium/workspace/virtual-document.ts +106 -25
  722. package/src/langium/workspace/write-lock-scope.ts +27 -12
  723. package/src/launcher/integrated-server.ts +3 -1
  724. package/src/locale/server-locale.ts +6 -6
  725. package/src/lsp/completion/hydranium-completion-provider.ts +82 -2
  726. package/src/lsp/connection-features.ts +67 -0
  727. package/src/lsp/diagnostics-connection.ts +56 -0
  728. package/src/lsp/edit-requests-guard.ts +152 -0
  729. package/src/lsp/hydranium-document-update-handler.ts +284 -110
  730. package/src/lsp/index.ts +6 -2
  731. package/src/lsp/lsp-latency.ts +62 -0
  732. package/src/lsp/save-text-document.ts +63 -0
  733. package/src/lsp/semantic-token-provider.ts +146 -8
  734. package/src/lsp/shared-module.ts +4 -8
  735. package/src/lsp/start-language-server.ts +21 -7
  736. package/src/messages/carriers.ts +4 -6
  737. package/src/messages/index.ts +11 -2
  738. package/src/messages/renderer.ts +11 -3
  739. package/src/node/event-loop-monitor.ts +2 -1
  740. package/src/node/heap-ceiling.ts +108 -0
  741. package/src/node/index.ts +5 -1
  742. package/src/node/latency-from-env.ts +1 -1
  743. package/src/node/log-file-sink.ts +6 -2
  744. package/src/node/log-preamble-node.ts +20 -10
  745. package/src/node/measure-memory.ts +5 -4
  746. package/src/node/memory-monitor.ts +10 -10
  747. package/src/node/node-file-system-provider.ts +214 -57
  748. package/src/node/profile-capture.ts +16 -15
  749. package/src/node/profiling-run.ts +30 -8
  750. package/src/node/rename-over-open-readers.ts +94 -0
  751. package/src/node/server-diagnostics.ts +1 -1
  752. package/src/node/server-state-snapshot.ts +6 -7
  753. package/src/node/socket-launcher.ts +78 -14
  754. package/src/node/startup-cpu-profile.ts +94 -0
  755. package/src/node/stdio-launcher.ts +29 -19
  756. package/src/node/validate-workspace.ts +8 -2
  757. package/src/testing/document-uri-policy-conformance.ts +1 -1
  758. package/src/testing/fake-document.ts +2 -1
  759. package/src/testing/index.ts +2 -1
  760. package/src/testing/langium-test-helpers.ts +1 -0
  761. package/src/testing/make-test-services.ts +83 -31
  762. package/src/testing/make-test-tracer.ts +26 -0
  763. package/src/testing/node/applied-edit-capture.ts +141 -0
  764. package/src/testing/node/index.ts +1 -0
  765. package/src/testing/node/lsp-harness.ts +2 -0
  766. package/src/testing/node/lsp-server-connection.ts +83 -119
  767. package/src/testing/node/scratch-workspace.ts +10 -5
  768. package/src/testing/node/spawned-server.ts +57 -3
  769. package/src/testing/node/unhandled-rejections.ts +31 -0
  770. package/src/testing/parse-semantic-root.ts +1 -1
  771. package/src/testing/playwright/flaky-network-proxy.ts +240 -0
  772. package/src/testing/playwright/index.ts +1 -0
  773. package/src/testing/playwright/server-log-capture.ts +137 -47
  774. package/src/testing/playwright/server-log-fixture.ts +46 -6
  775. package/src/testing/playwright/server-log-region.ts +32 -0
  776. package/src/testing/playwright/server-log-rename-reporter.ts +4 -3
  777. package/src/testing/run-update-pipeline.ts +8 -5
  778. package/src/testing/stub-ast-document-manager.ts +47 -123
  779. package/src/testing/stub-document-builder.ts +155 -18
  780. package/src/testing/stub-hydranium-text-documents.ts +184 -27
  781. package/src/testing/stub-langium-documents.ts +3 -2
  782. package/src/testing/stub-model-service.ts +9 -8
  783. package/src/testing/stub-project-manager.ts +10 -0
  784. package/src/testing/stub-self-save-registry.ts +1 -1
  785. package/src/testing/stub-service-registry.ts +1 -1
  786. package/src/testing/stub-writable-file-system.ts +3 -2
  787. package/src/util/connection-liveness.ts +81 -15
  788. package/src/util/environment.ts +24 -2
  789. package/lib/documents/language-client-text-shadow.d.ts +0 -124
  790. package/lib/documents/language-client-text-shadow.d.ts.map +0 -1
  791. package/lib/documents/language-client-text-shadow.js +0 -190
  792. package/lib/documents/language-client-text-shadow.js.map +0 -1
  793. package/lib/documents/self-save-registry.d.ts.map +0 -1
  794. package/lib/documents/self-save-registry.js.map +0 -1
  795. package/lib/lsp/instrument-connection.d.ts +0 -36
  796. package/lib/lsp/instrument-connection.d.ts.map +0 -1
  797. package/lib/lsp/instrument-connection.js +0 -62
  798. package/lib/lsp/instrument-connection.js.map +0 -1
  799. package/lib/node/process-memory.d.ts +0 -66
  800. package/lib/node/process-memory.d.ts.map +0 -1
  801. package/lib/node/process-memory.js +0 -252
  802. package/lib/node/process-memory.js.map +0 -1
  803. package/src/documents/language-client-text-shadow.ts +0 -211
  804. package/src/lsp/instrument-connection.ts +0 -66
  805. package/src/node/process-memory.ts +0 -299
@@ -1 +1 @@
1
- {"version":3,"file":"persistent-file-system-provider.d.ts","sourceRoot":"","sources":["../../../src/langium/workspace/persistent-file-system-provider.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF,OAAO,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAC;AACzC,OAAO,EAAE,KAAK,0BAA0B,EAAE,MAAM,yCAAyC,CAAC;AAC1F,OAAO,EAAuB,KAAK,2BAA2B,EAAE,MAAM,uBAAuB,CAAC;AAC9F,OAAO,EAAE,KAAK,cAAc,EAAE,0BAA0B,EAAE,KAAK,yBAAyB,EAAE,MAAM,qCAAqC,CAAC;AAEtI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,MAAM,WAAW,eAAe;IAC7B;;;OAGG;IACH,IAAI,IAAI,OAAO,CAAC,cAAc,CAAC,CAAC;IAChC;;;;;;;OAOG;IACH,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACpD,kEAAkE;IAClE,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACtC;AAYD,yFAAyF;AACzF,MAAM,WAAW,2BAA4B,SAAQ,yBAAyB;IAC3E,6EAA6E;IAC7E,KAAK,EAAE,eAAe,CAAC;IACvB;;;;;;;OAOG;IACH,QAAQ,CAAC,EAAE,cAAc,CAAC;CAC5B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmDG;AACH,qBAAa,4BAA6B,SAAQ,0BAA0B;IACzE,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,eAAe,CAAC;IAC1C;;;OAGG;IACH,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IACtC;;;;;;;OAOG;IACH,SAAS,CAAC,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;gBAExC,QAAQ,EAAE,2BAA2B,EAAE,OAAO,EAAE,2BAA2B;IAuBvF;;;;;;OAMG;IACM,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAKjD;;;;;;;;;;OAUG;IACY,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKzD,UAAU,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI;IAKnC,uDAAuD;IACvD,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG;IAIrC,4FAA4F;cAC5E,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIjE;;;;OAIG;cACa,MAAM,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IAS/C;;;;;;;OAOG;IACH,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM;IAWpC,SAAS,CAAC,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI;CAGjF;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,oBAAoB,CAAC,OAAO,EAAE,2BAA2B,GAAG,OAAO,CAAC;IACvF,kBAAkB,EAAE,CAAC,QAAQ,EAAE,OAAO,KAAK,0BAA0B,CAAC;CACxE,CAAC,CAKD"}
1
+ {"version":3,"file":"persistent-file-system-provider.d.ts","sourceRoot":"","sources":["../../../src/langium/workspace/persistent-file-system-provider.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF,OAAO,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAC;AAEzC,OAAO,EAAE,KAAK,0BAA0B,EAAE,MAAM,2BAA2B,CAAC;AAC5E,OAAO,EAAuB,KAAK,2BAA2B,EAAE,MAAM,uBAAuB,CAAC;AAC9F,OAAO,EAAE,KAAK,cAAc,EAAE,0BAA0B,EAAE,KAAK,yBAAyB,EAAE,MAAM,qCAAqC,CAAC;AAEtI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,MAAM,WAAW,eAAe;IAC7B;;;OAGG;IACH,IAAI,IAAI,OAAO,CAAC,cAAc,CAAC,CAAC;IAChC;;;;;;;OAOG;IACH,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACpD,kEAAkE;IAClE,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACtC;AAYD,yFAAyF;AACzF,MAAM,WAAW,2BAA4B,SAAQ,yBAAyB;IAC3E,6EAA6E;IAC7E,KAAK,EAAE,eAAe,CAAC;IACvB;;;;;;;OAOG;IACH,QAAQ,CAAC,EAAE,cAAc,CAAC;CAC5B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4CG;AACH,qBAAa,4BAA6B,SAAQ,0BAA0B;IACzE,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,eAAe,CAAC;IAC1C;;;OAGG;IACH,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IACtC;;;;;;;OAOG;IACH,SAAS,CAAC,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACpD;;;;;;OAMG;IACH,QAAQ,CAAC,aAAa,EAAE,SAAS,MAAM,EAAE,CAAC;IAE1C,YAAY,QAAQ,EAAE,2BAA2B,EAAE,OAAO,EAAE,2BAA2B,EAwBtF;IAED;;;;;;OAMG;IACM,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAGhD;IAED;;;;;;;;;;OAUG;IACY,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAGjE;IAED;;;;OAIG;IACY,UAAU,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAKjD;IAED,uDAAuD;IACvD,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG,CAE1B;IAED,4FAA4F;IAC5F,UAAgB,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAEhE;IAED;;;;OAIG;IACH,UAAgB,MAAM,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAO9C;IAED;;;;;;;OAOG;IACH,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,CASnC;IAED,SAAS,CAAC,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,CAE9E;CACH;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,oBAAoB,CAAC,OAAO,EAAE,2BAA2B,GAAG,OAAO,CAAC;IACvF,kBAAkB,EAAE,CAAC,QAAQ,EAAE,OAAO,KAAK,0BAA0B,CAAC;CACxE,CAAC,CAKD"}
@@ -7,6 +7,7 @@
7
7
  * SPDX-License-Identifier: MIT
8
8
  ********************************************************************************/
9
9
  import { URI } from '@hydranium/langium';
10
+ import { describeErrorWithStack } from '@hydranium/protocol';
10
11
  import { serverSharedFactory } from '../shared-services.js';
11
12
  import { InMemoryFileSystemProvider } from './in-memory-file-system-provider.js';
12
13
  /**
@@ -55,13 +56,6 @@ const TOMBSTONE = '\u0000hydranium:deleted\u0000';
55
56
  * restored as deleted, which is why the marker is NUL-wrapped and text a grammar
56
57
  * can parse is not.
57
58
  *
58
- * # A registered virtual document still wins
59
- *
60
- * `readFileSync` consults the virtual-document seam before the map, so a stdlib
61
- * contributed in code keeps answering for its URI whether or not the store holds
62
- * one. The store cannot shadow it, which is what keeps a rebuild that re-reads
63
- * that URI from losing the stdlib.
64
- *
65
59
  * # What it deliberately does not answer
66
60
  *
67
61
  * The store is scoped to the ORIGIN, not to the page: two pages on the same
@@ -86,11 +80,20 @@ export class PersistentFileSystemProvider extends InMemoryFileSystemProvider {
86
80
  * of marking it — a deletion that quietly undoes itself on the next load.
87
81
  */
88
82
  seededPaths;
83
+ /**
84
+ * The store keys restored as CONTENT, in the store's order.
85
+ *
86
+ * A deletion marker is not listed: the store holds a key for a deleted seeded
87
+ * file, so a host counting stored keys would report that deletion as a
88
+ * restored file, and only this class can tell the two apart.
89
+ */
90
+ restoredPaths;
89
91
  constructor(services, options) {
90
92
  super(services, options);
91
93
  this.store = options.store;
92
94
  this.storeRoot = options.rootUri === undefined ? undefined : `${this.fileKey(options.rootUri)}/`;
93
95
  this.seededPaths = new Set(Object.keys(options.seed ?? {}).map(path => this.storeKey(this.storeUri(path))));
96
+ const restoredPaths = [];
94
97
  for (const [path, content] of Object.entries(options.restored ?? {})) {
95
98
  // `super.*`, so restoring does not mirror straight back into the store
96
99
  // it just came from — a write-back on every start, and one that would
@@ -102,12 +105,14 @@ export class PersistentFileSystemProvider extends InMemoryFileSystemProvider {
102
105
  // insertion order of a merged record.
103
106
  const uri = this.storeUri(path);
104
107
  if (content === TOMBSTONE) {
105
- super.deleteFile(uri);
108
+ this.files.delete(this.fileKey(uri));
106
109
  }
107
110
  else {
108
111
  super.setFile(uri, content);
112
+ restoredPaths.push(path);
109
113
  }
110
114
  }
115
+ this.restoredPaths = restoredPaths;
111
116
  }
112
117
  /**
113
118
  * The sync twin, mirrored without waiting.
@@ -135,9 +140,16 @@ export class PersistentFileSystemProvider extends InMemoryFileSystemProvider {
135
140
  super.setFile(uri, content);
136
141
  await this.persist(uri, content);
137
142
  }
138
- deleteFile(uri) {
139
- super.deleteFile(uri);
140
- this.forget(uri).catch((error) => this.reportStoreFailure('forget', uri, error));
143
+ /**
144
+ * Mirror the deletion into the store and REJECT if it refuses, as
145
+ * {@link writeFile} does. The store goes first, so one that refuses leaves
146
+ * the file it still holds; a directory is refused before the store is asked.
147
+ */
148
+ async deleteFile(uri) {
149
+ if (!this.hasChildren(this.fileKey(uri))) {
150
+ await this.forget(uri);
151
+ }
152
+ await super.deleteFile(uri);
141
153
  }
142
154
  /** The absolute URI a store-space `path` addresses. */
143
155
  storeUri(path) {
@@ -175,12 +187,12 @@ export class PersistentFileSystemProvider extends InMemoryFileSystemProvider {
175
187
  return key;
176
188
  }
177
189
  if (!key.startsWith(this.storeRoot)) {
178
- throw new Error(`Cannot persist ${uri.toString()}: outside the store root ${this.storeRoot}`);
190
+ throw new Error(`${uri.toString()} is outside the store root ${this.storeRoot}`);
179
191
  }
180
192
  return key.slice(this.storeRoot.length);
181
193
  }
182
194
  reportStoreFailure(operation, uri, error) {
183
- this.tracer.error(`Failed to ${operation} ${uri.toString()}: ${error instanceof Error ? error.message : String(error)}`);
195
+ this.tracer.error(`Failed to ${operation} ${uri.toString()}: ${describeErrorWithStack(error)}`);
184
196
  }
185
197
  }
186
198
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"persistent-file-system-provider.js","sourceRoot":"","sources":["../../../src/langium/workspace/persistent-file-system-provider.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"persistent-file-system-provider.js","sourceRoot":"","sources":["../../../src/langium/workspace/persistent-file-system-provider.ts"],"names":[],"mappings":"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"}
@@ -6,8 +6,8 @@
6
6
  *
7
7
  * SPDX-License-Identifier: MIT
8
8
  ********************************************************************************/
9
- import { type Clock } from '@hydranium/protocol';
10
- import { type ServerSharedServicesMinimal } from '../langium/shared-services.js';
9
+ import { type Clock, type Stopwatch } from '@hydranium/protocol';
10
+ import { type ServerSharedServicesMinimal } from '../shared-services.js';
11
11
  export interface SelfSaveRegistryOptions {
12
12
  /** How long a self-save entry stays eligible to match a watcher event. Default {@link DEFAULT_TTL_MS}. */
13
13
  ttlMs?: number;
@@ -41,14 +41,12 @@ export interface SelfSaveRegistry {
41
41
  export declare class DefaultSelfSaveRegistry implements SelfSaveRegistry {
42
42
  protected readonly entries: Map<string, {
43
43
  mtimeMs: number;
44
- registeredAt: number;
44
+ sinceRegistered: Stopwatch;
45
45
  }>;
46
46
  /**
47
- * Read time through the shared {@link Clock} rather than `Date.now()`: the
48
- * TTL gates whether an incoming watcher event still counts as a self-save
49
- * echo, so tests advance a fake clock to exercise expiry without a real
50
- * wait. Wall-clock `now()` is correct here — entries are compared against a
51
- * file's `mtime`.
47
+ * Ages entries on a {@link Clock} stopwatch: the TTL is how long ago the
48
+ * write happened, which a wall-clock step would otherwise shorten or
49
+ * stretch. The `mtime` match compares the stored value only.
52
50
  */
53
51
  protected readonly clock: Clock;
54
52
  protected readonly ttlMs: number;
@@ -81,6 +79,6 @@ export declare class DefaultSelfSaveRegistry implements SelfSaveRegistry {
81
79
  */
82
80
  protected evictExpired(): void;
83
81
  /** Strictly greater, so an entry aged exactly to the TTL is still eligible. */
84
- protected isExpired(registeredAt: number): boolean;
82
+ protected isExpired(sinceRegistered: Stopwatch): boolean;
85
83
  }
86
84
  //# sourceMappingURL=self-save-registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"self-save-registry.d.ts","sourceRoot":"","sources":["../../../src/langium/workspace/self-save-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF,OAAO,EAAE,KAAK,KAAK,EAAE,KAAK,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAEjE,OAAO,EAAE,KAAK,2BAA2B,EAAE,MAAM,uBAAuB,CAAC;AAKzE,MAAM,WAAW,uBAAuB;IACrC,0GAA0G;IAC1G,KAAK,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;GAIG;AACH,MAAM,WAAW,gBAAgB;IAC9B;;;;;OAKG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAEhD;;;;;;OAMG;IACH,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;CACzD;AAED;;;GAGG;AACH,qBAAa,uBAAwB,YAAW,gBAAgB;IAC7D,SAAS,CAAC,QAAQ,CAAC,OAAO;iBAA8B,MAAM;yBAAmB,SAAS;OAAM;IAChG;;;;OAIG;IACH,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IAChC,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAEjC,YAAY,QAAQ,EAAE,IAAI,CAAC,2BAA2B,EAAE,OAAO,CAAC,EAAE,OAAO,GAAE,uBAA4B,EAGtG;IAED;;;;;;;;;;;;OAYG;IACH,SAAS,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAEpC;IAED,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAG9C;IAED,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAOrD;IAED;;;;;;;;;OASG;IACH,SAAS,CAAC,YAAY,IAAI,IAAI,CAM7B;IAED,+EAA+E;IAC/E,SAAS,CAAC,SAAS,CAAC,eAAe,EAAE,SAAS,GAAG,OAAO,CAEvD;CACH"}
@@ -6,7 +6,7 @@
6
6
  *
7
7
  * SPDX-License-Identifier: MIT
8
8
  ********************************************************************************/
9
- import { isCaseInsensitiveFileSystem } from '../util/environment.js';
9
+ import { isCaseInsensitiveFileSystem } from '../../util/environment.js';
10
10
  /** Default eligibility window for a self-save entry. */
11
11
  const DEFAULT_TTL_MS = 30_000;
12
12
  /**
@@ -16,11 +16,9 @@ const DEFAULT_TTL_MS = 30_000;
16
16
  export class DefaultSelfSaveRegistry {
17
17
  entries = new Map();
18
18
  /**
19
- * Read time through the shared {@link Clock} rather than `Date.now()`: the
20
- * TTL gates whether an incoming watcher event still counts as a self-save
21
- * echo, so tests advance a fake clock to exercise expiry without a real
22
- * wait. Wall-clock `now()` is correct here — entries are compared against a
23
- * file's `mtime`.
19
+ * Ages entries on a {@link Clock} stopwatch: the TTL is how long ago the
20
+ * write happened, which a wall-clock step would otherwise shorten or
21
+ * stretch. The `mtime` match compares the stored value only.
24
22
  */
25
23
  clock;
26
24
  ttlMs;
@@ -46,11 +44,11 @@ export class DefaultSelfSaveRegistry {
46
44
  }
47
45
  register(fsPath, mtimeMs) {
48
46
  this.evictExpired();
49
- this.entries.set(this.key(fsPath), { mtimeMs, registeredAt: this.clock.now() });
47
+ this.entries.set(this.key(fsPath), { mtimeMs, sinceRegistered: this.clock.stopwatch() });
50
48
  }
51
49
  isRegistered(fsPath, mtimeMs) {
52
50
  const entry = this.entries.get(this.key(fsPath));
53
- if (!entry || this.isExpired(entry.registeredAt)) {
51
+ if (!entry || this.isExpired(entry.sinceRegistered)) {
54
52
  return false;
55
53
  }
56
54
  // Accept mtime equality (some filesystems have 1-second precision).
@@ -68,14 +66,14 @@ export class DefaultSelfSaveRegistry {
68
66
  */
69
67
  evictExpired() {
70
68
  for (const [key, entry] of this.entries) {
71
- if (this.isExpired(entry.registeredAt)) {
69
+ if (this.isExpired(entry.sinceRegistered)) {
72
70
  this.entries.delete(key);
73
71
  }
74
72
  }
75
73
  }
76
74
  /** Strictly greater, so an entry aged exactly to the TTL is still eligible. */
77
- isExpired(registeredAt) {
78
- return this.clock.now() - registeredAt > this.ttlMs;
75
+ isExpired(sinceRegistered) {
76
+ return sinceRegistered.elapsedMs > this.ttlMs;
79
77
  }
80
78
  }
81
79
  //# sourceMappingURL=self-save-registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"self-save-registry.js","sourceRoot":"","sources":["../../../src/langium/workspace/self-save-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAGlF,OAAO,EAAE,2BAA2B,EAAE,MAAM,2BAA2B,CAAC;AAGxE,wDAAwD;AACxD,MAAM,cAAc,GAAG,MAAM,CAAC;AA+B9B;;;GAGG;AACH,MAAM,OAAO,uBAAuB;IACd,OAAO,GAAG,IAAI,GAAG,EAA2D,CAAC;IAChG;;;;OAIG;IACgB,KAAK,CAAQ;IACb,KAAK,CAAS;IAEjC,YAAY,QAAoD,EAAE,OAAO,GAA4B,EAAE;QACpG,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC;QAC5B,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,cAAc,CAAC;IAChD,CAAC;IAED;;;;;;;;;;;;OAYG;IACO,GAAG,CAAC,MAAc;QACzB,OAAO,2BAA2B,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;IACxE,CAAC;IAED,QAAQ,CAAC,MAAc,EAAE,OAAe;QACrC,IAAI,CAAC,YAAY,EAAE,CAAC;QACpB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,OAAO,EAAE,eAAe,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;IAC5F,CAAC;IAED,YAAY,CAAC,MAAc,EAAE,OAAe;QACzC,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;QACjD,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,eAAe,CAAC,EAAE,CAAC;YACnD,OAAO,KAAK,CAAC;QAChB,CAAC;QACD,oEAAoE;QACpE,OAAO,KAAK,CAAC,OAAO,KAAK,OAAO,CAAC;IACpC,CAAC;IAED;;;;;;;;;OASG;IACO,YAAY;QACnB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACvC,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,eAAe,CAAC,EAAE,CAAC;gBACzC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC5B,CAAC;QACJ,CAAC;IACJ,CAAC;IAED,+EAA+E;IACrE,SAAS,CAAC,eAA0B;QAC3C,OAAO,eAAe,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC;IACjD,CAAC;CACH"}
@@ -0,0 +1,23 @@
1
+ /********************************************************************************
2
+ * Copyright (c) 2026 EclipseSource and others.
3
+ *
4
+ * This program and the accompanying materials are made available under the
5
+ * terms of the MIT License which is available in the project root.
6
+ *
7
+ * SPDX-License-Identifier: MIT
8
+ ********************************************************************************/
9
+ import { type LangiumDocument, type ParseResult } from '@hydranium/langium';
10
+ /**
11
+ * Whether `parseResult` has a lexer error, a parser error or an error a token
12
+ * builder reported. The AST of such a parse lacks what the parser skipped, so
13
+ * text serialized from it deletes that. A client reads the same from
14
+ * diagnostics with `TransferDiagnostic.hasSyntaxErrors`, which can miss some.
15
+ */
16
+ export declare function hasSyntaxErrors(parseResult: ParseResult): boolean;
17
+ /**
18
+ * Whether the parse of `document` lacks some of its text: it has syntax
19
+ * errors and the text is not blank. A model serialized from its AST deletes
20
+ * that text, so a write of one is refused. Blank text has nothing to lose.
21
+ */
22
+ export declare function hasSkippedText(document: LangiumDocument): boolean;
23
+ //# sourceMappingURL=syntax-errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"syntax-errors.d.ts","sourceRoot":"","sources":["../../../src/langium/workspace/syntax-errors.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF,OAAO,EAAE,KAAK,eAAe,EAAE,KAAK,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAE5E;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,WAAW,EAAE,WAAW,GAAG,OAAO,CAOjE;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,eAAe,GAAG,OAAO,CAEjE"}
@@ -0,0 +1,29 @@
1
+ /********************************************************************************
2
+ * Copyright (c) 2026 EclipseSource and others.
3
+ *
4
+ * This program and the accompanying materials are made available under the
5
+ * terms of the MIT License which is available in the project root.
6
+ *
7
+ * SPDX-License-Identifier: MIT
8
+ ********************************************************************************/
9
+ /**
10
+ * Whether `parseResult` has a lexer error, a parser error or an error a token
11
+ * builder reported. The AST of such a parse lacks what the parser skipped, so
12
+ * text serialized from it deletes that. A client reads the same from
13
+ * diagnostics with `TransferDiagnostic.hasSyntaxErrors`, which can miss some.
14
+ */
15
+ export function hasSyntaxErrors(parseResult) {
16
+ const lexing = parseResult.lexerReport?.diagnostics ?? [];
17
+ return (parseResult.parserErrors.length > 0 ||
18
+ parseResult.lexerErrors.length > 0 ||
19
+ lexing.some(diagnostic => (diagnostic.severity ?? 'error') === 'error'));
20
+ }
21
+ /**
22
+ * Whether the parse of `document` lacks some of its text: it has syntax
23
+ * errors and the text is not blank. A model serialized from its AST deletes
24
+ * that text, so a write of one is refused. Blank text has nothing to lose.
25
+ */
26
+ export function hasSkippedText(document) {
27
+ return hasSyntaxErrors(document.parseResult) && document.textDocument.getText().trim() !== '';
28
+ }
29
+ //# sourceMappingURL=syntax-errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"syntax-errors.js","sourceRoot":"","sources":["../../../src/langium/workspace/syntax-errors.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAIlF;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,WAAwB;IACrD,MAAM,MAAM,GAAG,WAAW,CAAC,WAAW,EAAE,WAAW,IAAI,EAAE,CAAC;IAC1D,OAAO,CACJ,WAAW,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC;QACnC,WAAW,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC;QAClC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,UAAU,CAAC,QAAQ,IAAI,OAAO,CAAC,KAAK,OAAO,CAAC,CACzE,CAAC;AACL,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,QAAyB;IACrD,OAAO,eAAe,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,QAAQ,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC;AACjG,CAAC"}
@@ -6,14 +6,17 @@
6
6
  *
7
7
  * SPDX-License-Identifier: MIT
8
8
  ********************************************************************************/
9
- import { URI } from '@hydranium/langium';
9
+ import { type FileSystemNode, URI } from '@hydranium/langium';
10
+ import { type Tracer } from '@hydranium/protocol';
11
+ import { type WritableFileSystemProvider } from './file-system-provider.js';
12
+ import { type LogNameOptions } from '../diagnostics/logger.js';
10
13
  import { type ServerSharedServicesMinimal } from '../shared-services.js';
11
14
  /**
12
15
  * URI scheme for virtual documents — LangiumDocuments that have no backing
13
16
  * file on disk (a language's stdlib, library types, built-in definitions,
14
17
  * mirrors, generated views). Chosen so it cannot collide with on-disk `file:`
15
- * URIs, and so the framework's FileSystemProvider can recognise and serve them
16
- * on re-read (see {@link serveVirtualDocument}).
18
+ * URIs, and so the framework can serve them on re-read through its own
19
+ * provider for the scheme (see {@link VirtualFileSystemProvider}).
17
20
  */
18
21
  export declare const VIRTUAL_SCHEME = "virtual";
19
22
  /**
@@ -37,12 +40,12 @@ export declare const VIRTUAL_SCHEME = "virtual";
37
40
  * `virtual:<contributor>`, which has no extension and so matches no registered
38
41
  * language — a trap. Every per-language service is resolved per URI, and a
39
42
  * virtual document is never open in `TextDocuments`, so the declared-languageId
40
- * lookup rung cannot serve it either: the document is indexed but inert,
41
- * contributing nothing to the scopes it was written to populate, with no error
42
- * anywhere. Pass the extension as the last segment,
43
- * `virtualUri(contributor, 'name.<ext>')`. `HydraniumWorkspaceManager` warns
44
- * when a seeded additional document fails to route, which is where this
45
- * usually surfaces.
43
+ * lookup rung cannot serve it either, and the startup build fails. A
44
+ * `fromString` document throws while parsing; a `fromModel` or
45
+ * `fromStringInLanguage` document is built, and throws as it is added to the
46
+ * workspace, after `HydraniumWorkspaceManager` warns that it matches no
47
+ * language. Pass the extension as the last segment,
48
+ * `virtualUri(contributor, 'name.<ext>')`.
46
49
  *
47
50
  * # Relationship to the `$synthetic` node marker
48
51
  *
@@ -61,18 +64,49 @@ export declare function virtualUri(contributor: string, ...segments: string[]):
61
64
  /** True iff `uri` uses the {@link VIRTUAL_SCHEME} scheme produced by {@link virtualUri}. */
62
65
  export declare function isVirtualUri(uri: URI | string): boolean;
63
66
  /**
64
- * Serve the text of a registered virtual document, or `undefined` when `uri`
65
- * is not virtual or no document is registered for it (so a FileSystemProvider
66
- * delegates to its real backing).
67
+ * The file system provider for the {@link VIRTUAL_SCHEME} scheme, registered by
68
+ * the framework in the shared `fileSystemProviders` group so every host serves
69
+ * `virtual:` whatever provider it binds for its own files.
67
70
  *
68
- * The framework's FileSystemProvider defaults call this at the top of
69
- * `readFile` / `readFileSync` so a virtual document survives a re-read:
70
- * `DocumentBuilder.update` / `LangiumDocumentFactory.update` re-read a changed
71
- * URI from the FileSystemProvider, and nothing on disk backs a virtual URI. The
72
- * text comes from the registered document — the original source for a
73
- * `fromString` document, or the serialized form retained by the framework's
74
- * `fromModel` (which fills in the text Langium leaves empty). No serializer is
75
- * consulted here; the text is already on the document.
71
+ * A virtual document has no backing outside the index, and a re-read still has
72
+ * to find it: `DocumentBuilder.update` and `LangiumDocumentFactory.update`
73
+ * re-read a changed URI from the provider, and the last close rebuilds a
74
+ * released document the provider says `exists`. So the text comes from the
75
+ * document `LangiumDocuments` holds — the original source for a `fromString`
76
+ * document, or the serialized form the framework's `fromModel` retains. An
77
+ * edited one answers with its edited text.
78
+ *
79
+ * **Every read method agrees.** Serving only the text methods would leave one
80
+ * provider answering "here is the content" and "nothing is there" about one
81
+ * URI, so a caller could not probe before reading. A registered document is
82
+ * always a FILE with no children: a workspace walk handed a directory would try
83
+ * to enumerate children it has none of.
84
+ *
85
+ * Read-only: a write or delete is refused, since nothing backs the scheme.
76
86
  */
77
- export declare function serveVirtualDocument(services: ServerSharedServicesMinimal, uri: URI): string | undefined;
87
+ export declare class VirtualFileSystemProvider implements WritableFileSystemProvider {
88
+ protected readonly services: ServerSharedServicesMinimal;
89
+ protected readonly tracer: Tracer;
90
+ constructor(services: ServerSharedServicesMinimal, options?: LogNameOptions);
91
+ writeFile(uri: URI, _content: string): Promise<void>;
92
+ deleteFile(uri: URI): Promise<void>;
93
+ readFile(uri: URI): Promise<string>;
94
+ readFileSync(uri: URI): string;
95
+ readBinary(uri: URI): Promise<Uint8Array>;
96
+ readBinarySync(uri: URI): Uint8Array;
97
+ stat(uri: URI): Promise<FileSystemNode>;
98
+ statSync(uri: URI): FileSystemNode;
99
+ exists(uri: URI): Promise<boolean>;
100
+ existsSync(uri: URI): boolean;
101
+ readDirectory(_uri: URI): Promise<FileSystemNode[]>;
102
+ readDirectorySync(_uri: URI): FileSystemNode[];
103
+ /**
104
+ * Text of the document registered at `uri`, if there is one.
105
+ *
106
+ * `LangiumDocuments` is resolved per call, not in the constructor: it reaches
107
+ * this provider back through the document factory, so resolving it eagerly
108
+ * is a construction cycle.
109
+ */
110
+ protected text(uri: URI): string | undefined;
111
+ }
78
112
  //# sourceMappingURL=virtual-document.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"virtual-document.d.ts","sourceRoot":"","sources":["../../../src/langium/workspace/virtual-document.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF,OAAO,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAC;AACzC,OAAO,EAAE,KAAK,2BAA2B,EAAE,MAAM,uBAAuB,CAAC;AAEzE;;;;;;GAMG;AACH,eAAO,MAAM,cAAc,YAAY,CAAC;AAExC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AACH,wBAAgB,UAAU,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,QAAQ,EAAE,MAAM,EAAE,GAAG,GAAG,CAG1E;AAED,4FAA4F;AAC5F,wBAAgB,YAAY,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,GAAG,OAAO,CAGvD;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,2BAA2B,EAAE,GAAG,EAAE,GAAG,GAAG,MAAM,GAAG,SAAS,CAMxG"}
1
+ {"version":3,"file":"virtual-document.d.ts","sourceRoot":"","sources":["../../../src/langium/workspace/virtual-document.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF,OAAO,EAAE,KAAK,cAAc,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,KAAK,0BAA0B,EAAE,MAAM,2BAA2B,CAAC;AAC5E,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,KAAK,2BAA2B,EAAE,MAAM,uBAAuB,CAAC;AAIzE;;;;;;GAMG;AACH,eAAO,MAAM,cAAc,YAAY,CAAC;AAExC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AACH,wBAAgB,UAAU,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,QAAQ,EAAE,MAAM,EAAE,GAAG,GAAG,CAG1E;AAED,4FAA4F;AAC5F,wBAAgB,YAAY,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,GAAG,OAAO,CAGvD;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,qBAAa,yBAA0B,YAAW,0BAA0B;IAItE,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,2BAA2B;IAH3D,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAElC,YACsB,QAAQ,EAAE,2BAA2B,EACxD,OAAO,GAAE,cAAmB,EAG9B;IAEK,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAEzD;IAEK,UAAU,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAExC;IAEK,QAAQ,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,CAExC;IAED,YAAY,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,CAM7B;IAEK,UAAU,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,UAAU,CAAC,CAE9C;IAED,cAAc,CAAC,GAAG,EAAE,GAAG,GAAG,UAAU,CAEnC;IAEK,IAAI,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,cAAc,CAAC,CAE5C;IAED,QAAQ,CAAC,GAAG,EAAE,GAAG,GAAG,cAAc,CAKjC;IAEK,MAAM,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,CAEvC;IAED,UAAU,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAE5B;IAEK,aAAa,CAAC,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAExD;IAED,iBAAiB,CAAC,IAAI,EAAE,GAAG,GAAG,cAAc,EAAE,CAE7C;IAED;;;;;;OAMG;IACH,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,GAAG,SAAS,CAE3C;CACH"}
@@ -7,12 +7,14 @@
7
7
  * SPDX-License-Identifier: MIT
8
8
  ********************************************************************************/
9
9
  import { URI } from '@hydranium/langium';
10
+ import { NO_SUCH_FILE, NO_SUCH_PATH, UNSUPPORTED_DELETE, UNSUPPORTED_WRITE } from './in-memory-file-system-provider.js';
11
+ import { notFound } from './file-not-found.js';
10
12
  /**
11
13
  * URI scheme for virtual documents — LangiumDocuments that have no backing
12
14
  * file on disk (a language's stdlib, library types, built-in definitions,
13
15
  * mirrors, generated views). Chosen so it cannot collide with on-disk `file:`
14
- * URIs, and so the framework's FileSystemProvider can recognise and serve them
15
- * on re-read (see {@link serveVirtualDocument}).
16
+ * URIs, and so the framework can serve them on re-read through its own
17
+ * provider for the scheme (see {@link VirtualFileSystemProvider}).
16
18
  */
17
19
  export const VIRTUAL_SCHEME = 'virtual';
18
20
  /**
@@ -36,12 +38,12 @@ export const VIRTUAL_SCHEME = 'virtual';
36
38
  * `virtual:<contributor>`, which has no extension and so matches no registered
37
39
  * language — a trap. Every per-language service is resolved per URI, and a
38
40
  * virtual document is never open in `TextDocuments`, so the declared-languageId
39
- * lookup rung cannot serve it either: the document is indexed but inert,
40
- * contributing nothing to the scopes it was written to populate, with no error
41
- * anywhere. Pass the extension as the last segment,
42
- * `virtualUri(contributor, 'name.<ext>')`. `HydraniumWorkspaceManager` warns
43
- * when a seeded additional document fails to route, which is where this
44
- * usually surfaces.
41
+ * lookup rung cannot serve it either, and the startup build fails. A
42
+ * `fromString` document throws while parsing; a `fromModel` or
43
+ * `fromStringInLanguage` document is built, and throws as it is added to the
44
+ * workspace, after `HydraniumWorkspaceManager` warns that it matches no
45
+ * language. Pass the extension as the last segment,
46
+ * `virtualUri(contributor, 'name.<ext>')`.
45
47
  *
46
48
  * # Relationship to the `$synthetic` node marker
47
49
  *
@@ -66,24 +68,85 @@ export function isVirtualUri(uri) {
66
68
  return scheme === VIRTUAL_SCHEME;
67
69
  }
68
70
  /**
69
- * Serve the text of a registered virtual document, or `undefined` when `uri`
70
- * is not virtual or no document is registered for it (so a FileSystemProvider
71
- * delegates to its real backing).
71
+ * The file system provider for the {@link VIRTUAL_SCHEME} scheme, registered by
72
+ * the framework in the shared `fileSystemProviders` group so every host serves
73
+ * `virtual:` whatever provider it binds for its own files.
72
74
  *
73
- * The framework's FileSystemProvider defaults call this at the top of
74
- * `readFile` / `readFileSync` so a virtual document survives a re-read:
75
- * `DocumentBuilder.update` / `LangiumDocumentFactory.update` re-read a changed
76
- * URI from the FileSystemProvider, and nothing on disk backs a virtual URI. The
77
- * text comes from the registered document — the original source for a
78
- * `fromString` document, or the serialized form retained by the framework's
79
- * `fromModel` (which fills in the text Langium leaves empty). No serializer is
80
- * consulted here; the text is already on the document.
75
+ * A virtual document has no backing outside the index, and a re-read still has
76
+ * to find it: `DocumentBuilder.update` and `LangiumDocumentFactory.update`
77
+ * re-read a changed URI from the provider, and the last close rebuilds a
78
+ * released document the provider says `exists`. So the text comes from the
79
+ * document `LangiumDocuments` holds — the original source for a `fromString`
80
+ * document, or the serialized form the framework's `fromModel` retains. An
81
+ * edited one answers with its edited text.
82
+ *
83
+ * **Every read method agrees.** Serving only the text methods would leave one
84
+ * provider answering "here is the content" and "nothing is there" about one
85
+ * URI, so a caller could not probe before reading. A registered document is
86
+ * always a FILE with no children: a workspace walk handed a directory would try
87
+ * to enumerate children it has none of.
88
+ *
89
+ * Read-only: a write or delete is refused, since nothing backs the scheme.
81
90
  */
82
- export function serveVirtualDocument(services, uri) {
83
- if (!isVirtualUri(uri)) {
84
- return undefined;
91
+ export class VirtualFileSystemProvider {
92
+ services;
93
+ tracer;
94
+ constructor(services, options = {}) {
95
+ this.services = services;
96
+ this.tracer = services.Tracer.for(options.logName ?? this.constructor.name).trace('instantiated');
97
+ }
98
+ async writeFile(uri, _content) {
99
+ throw new Error(UNSUPPORTED_WRITE.format({ uri: uri.toString() }));
100
+ }
101
+ async deleteFile(uri) {
102
+ throw new Error(UNSUPPORTED_DELETE.format({ uri: uri.toString() }));
103
+ }
104
+ async readFile(uri) {
105
+ return this.readFileSync(uri);
106
+ }
107
+ readFileSync(uri) {
108
+ const text = this.text(uri);
109
+ if (text === undefined) {
110
+ throw notFound(NO_SUCH_FILE.format({ uri: uri.toString() }), uri);
111
+ }
112
+ return text;
113
+ }
114
+ async readBinary(uri) {
115
+ return this.readBinarySync(uri);
116
+ }
117
+ readBinarySync(uri) {
118
+ return new TextEncoder().encode(this.readFileSync(uri));
119
+ }
120
+ async stat(uri) {
121
+ return this.statSync(uri);
122
+ }
123
+ statSync(uri) {
124
+ if (this.text(uri) === undefined) {
125
+ throw notFound(NO_SUCH_PATH.format({ uri: uri.toString() }), uri);
126
+ }
127
+ return { isFile: true, isDirectory: false, uri };
128
+ }
129
+ async exists(uri) {
130
+ return this.existsSync(uri);
131
+ }
132
+ existsSync(uri) {
133
+ return this.text(uri) !== undefined;
134
+ }
135
+ async readDirectory(_uri) {
136
+ return [];
137
+ }
138
+ readDirectorySync(_uri) {
139
+ return [];
140
+ }
141
+ /**
142
+ * Text of the document registered at `uri`, if there is one.
143
+ *
144
+ * `LangiumDocuments` is resolved per call, not in the constructor: it reaches
145
+ * this provider back through the document factory, so resolving it eagerly
146
+ * is a construction cycle.
147
+ */
148
+ text(uri) {
149
+ return this.services.workspace.LangiumDocuments.getDocument(uri)?.textDocument.getText();
85
150
  }
86
- const document = services.workspace.LangiumDocuments.getDocument(uri);
87
- return document ? document.textDocument.getText() : undefined;
88
151
  }
89
152
  //# sourceMappingURL=virtual-document.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"virtual-document.js","sourceRoot":"","sources":["../../../src/langium/workspace/virtual-document.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF,OAAO,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAC;AAGzC;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,SAAS,CAAC;AAExC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AACH,MAAM,UAAU,UAAU,CAAC,WAAmB,EAAE,GAAG,QAAkB;IAClE,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACjE,OAAO,GAAG,CAAC,KAAK,CAAC,GAAG,cAAc,IAAI,WAAW,GAAG,IAAI,EAAE,CAAC,CAAC;AAC/D,CAAC;AAED,4FAA4F;AAC5F,MAAM,UAAU,YAAY,CAAC,GAAiB;IAC3C,MAAM,MAAM,GAAG,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC;IAC5E,OAAO,MAAM,KAAK,cAAc,CAAC;AACpC,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,oBAAoB,CAAC,QAAqC,EAAE,GAAQ;IACjF,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC;QACtB,OAAO,SAAS,CAAC;IACpB,CAAC;IACD,MAAM,QAAQ,GAAG,QAAQ,CAAC,SAAS,CAAC,gBAAgB,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IACtE,OAAO,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;AACjE,CAAC"}
1
+ {"version":3,"file":"virtual-document.js","sourceRoot":"","sources":["../../../src/langium/workspace/virtual-document.ts"],"names":[],"mappings":"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"}
@@ -21,13 +21,17 @@
21
21
  * Answering it needs async-context propagation, which has no browser-neutral
22
22
  * implementation: Node's `AsyncLocalStorage` is a `node:async_hooks` import (so
23
23
  * it cannot appear on the portable `.` entry, which `check:neutral` gates), and
24
- * TC39's `AsyncContext` is unshipped. Hence the same seam shape the log file-tee
25
- * uses: this module declares the contract and defaults to inert, and
26
- * `@hydranium/core/node` installs a real implementation at entry load. A browser
27
- * bundle therefore gets NO detection rather than a broken approximation, which
28
- * is the right degradation — the reentrant shape is a server-side build concern,
29
- * and a false negative costs the pre-existing stall while a false positive would
30
- * reject a legitimate write.
24
+ * TC39's `AsyncContext` is unshipped. Userland polyfills lose the context at a
25
+ * native `await` unless every awaited path, Langium's included, is transpiled.
26
+ * Hence the same seam shape the log file-tee uses: this module declares the
27
+ * contract and defaults to inert, and `@hydranium/core/node` installs a real
28
+ * implementation at entry load. A browser bundle therefore gets NO detection
29
+ * rather than a broken approximation, which is the right degradation — the
30
+ * reentrant shape is a server-side build concern, and a false negative costs
31
+ * the stall, which `HydraniumWorkspaceLock` reports once the stalled write
32
+ * outlives its cancellation, while a false positive would reject a legitimate
33
+ * write. Detection without a tracker is tracked in
34
+ * https://github.com/eclipse-emfcloud/hydranium/issues/245.
31
35
  */
32
36
  export interface WriteLockScope {
33
37
  /** Run `fn` marked as executing inside a write-lock holder. */
@@ -51,16 +55,24 @@ export declare function runInWriteLockScope<T>(fn: () => T): T;
51
55
  * gaining spurious rejections.
52
56
  */
53
57
  export declare function isInsideWriteLock(): boolean;
58
+ /**
59
+ * Whether a write-lock scope tracker is installed, which is what makes a
60
+ * `false` from {@link isInsideWriteLock} mean "outside" rather than "unknown".
61
+ */
62
+ export declare function isWriteLockScopeInstalled(): boolean;
54
63
  /**
55
64
  * Thrown when the model facade is reached from inside a workspace write-lock
56
65
  * holder — typically an integrity rule or build-phase pass writing through
57
- * `ModelService.update` / `save` / `rebuild` during a build.
66
+ * a session's `update` / `save` / `delete` or `ModelService.rebuild` during a
67
+ * build.
58
68
  *
59
69
  * Named rather than a bare `Error` because the remedy is specific and worth
60
70
  * pointing at: either move the write out of the build (integrity rules that
61
71
  * persist repairs should write through `FileSystemProvider.writeFile`, which
62
- * takes no lock), or set `ModelServiceOptions.serializeBuilds: false` to accept
63
- * unserialised builds in exchange for the reentrancy.
72
+ * takes no lock), or set `ModelServiceOptions.allowReentrantBuilds: true`,
73
+ * which keeps the facade's build from cancelling the holder but not its wait
74
+ * from stalling on a document that needs a re-queue. A delete is refused on
75
+ * either value.
64
76
  */
65
77
  export declare class ReentrantWriteLockError extends Error {
66
78
  readonly uri: string;
@@ -1 +1 @@
1
- {"version":3,"file":"write-lock-scope.d.ts","sourceRoot":"","sources":["../../../src/langium/workspace/write-lock-scope.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,WAAW,cAAc;IAC5B,+DAA+D;IAC/D,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;IACvB,gEAAgE;IAChE,QAAQ,IAAI,OAAO,CAAC;CACtB;AAID,qFAAqF;AACrF,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,cAAc,GAAG,SAAS,GAAG,IAAI,CAEzE;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,CAErD;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAE3C;AAED;;;;;;;;;;GAUG;AACH,qBAAa,uBAAwB,SAAQ,KAAK;IACnC,QAAQ,CAAC,GAAG,EAAE,MAAM;gBAAX,GAAG,EAAE,MAAM;CASlC"}
1
+ {"version":3,"file":"write-lock-scope.d.ts","sourceRoot":"","sources":["../../../src/langium/workspace/write-lock-scope.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,MAAM,WAAW,cAAc;IAC5B,+DAA+D;IAC/D,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;IACvB,gEAAgE;IAChE,QAAQ,IAAI,OAAO,CAAC;CACtB;AAID,qFAAqF;AACrF,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,cAAc,GAAG,SAAS,GAAG,IAAI,CAEzE;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,CAErD;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAE3C;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,IAAI,OAAO,CAEnD;AAED;;;;;;;;;;;;;GAaG;AACH,qBAAa,uBAAwB,SAAQ,KAAK;IACnC,QAAQ,CAAC,GAAG,EAAE,MAAM;IAAhC,YAAqB,GAAG,EAAE,MAAM,EAQ/B;CACH"}