@hydranium/core 1.0.0-next.10

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 (868) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +100 -0
  3. package/lib/documents/ast-document-manager.d.ts +243 -0
  4. package/lib/documents/ast-document-manager.d.ts.map +1 -0
  5. package/lib/documents/ast-document-manager.js +302 -0
  6. package/lib/documents/ast-document-manager.js.map +1 -0
  7. package/lib/documents/client-ids.d.ts +30 -0
  8. package/lib/documents/client-ids.d.ts.map +1 -0
  9. package/lib/documents/client-ids.js +30 -0
  10. package/lib/documents/client-ids.js.map +1 -0
  11. package/lib/documents/hydranium-text-documents.d.ts +490 -0
  12. package/lib/documents/hydranium-text-documents.d.ts.map +1 -0
  13. package/lib/documents/hydranium-text-documents.js +893 -0
  14. package/lib/documents/hydranium-text-documents.js.map +1 -0
  15. package/lib/documents/index.d.ts +14 -0
  16. package/lib/documents/index.d.ts.map +1 -0
  17. package/lib/documents/index.js +14 -0
  18. package/lib/documents/index.js.map +1 -0
  19. package/lib/documents/language-client-text-shadow.d.ts +101 -0
  20. package/lib/documents/language-client-text-shadow.d.ts.map +1 -0
  21. package/lib/documents/language-client-text-shadow.js +156 -0
  22. package/lib/documents/language-client-text-shadow.js.map +1 -0
  23. package/lib/documents/self-save-registry.d.ts +55 -0
  24. package/lib/documents/self-save-registry.d.ts.map +1 -0
  25. package/lib/documents/self-save-registry.js +68 -0
  26. package/lib/documents/self-save-registry.js.map +1 -0
  27. package/lib/index.d.ts +38 -0
  28. package/lib/index.d.ts.map +1 -0
  29. package/lib/index.js +39 -0
  30. package/lib/index.js.map +1 -0
  31. package/lib/langium/ast-extension/ast-extension-contribution.d.ts +33 -0
  32. package/lib/langium/ast-extension/ast-extension-contribution.d.ts.map +1 -0
  33. package/lib/langium/ast-extension/ast-extension-contribution.js +10 -0
  34. package/lib/langium/ast-extension/ast-extension-contribution.js.map +1 -0
  35. package/lib/langium/ast-extension/ast-extension-service.d.ts +212 -0
  36. package/lib/langium/ast-extension/ast-extension-service.d.ts.map +1 -0
  37. package/lib/langium/ast-extension/ast-extension-service.js +181 -0
  38. package/lib/langium/ast-extension/ast-extension-service.js.map +1 -0
  39. package/lib/langium/ast-extension/ast-node-builder.d.ts +90 -0
  40. package/lib/langium/ast-extension/ast-node-builder.d.ts.map +1 -0
  41. package/lib/langium/ast-extension/ast-node-builder.js +61 -0
  42. package/lib/langium/ast-extension/ast-node-builder.js.map +1 -0
  43. package/lib/langium/ast-extension/index.d.ts +12 -0
  44. package/lib/langium/ast-extension/index.d.ts.map +1 -0
  45. package/lib/langium/ast-extension/index.js +12 -0
  46. package/lib/langium/ast-extension/index.js.map +1 -0
  47. package/lib/langium/bootstrap.d.ts +224 -0
  48. package/lib/langium/bootstrap.d.ts.map +1 -0
  49. package/lib/langium/bootstrap.js +512 -0
  50. package/lib/langium/bootstrap.js.map +1 -0
  51. package/lib/langium/build-phase-pass/build-phase-pass-service.d.ts +77 -0
  52. package/lib/langium/build-phase-pass/build-phase-pass-service.d.ts.map +1 -0
  53. package/lib/langium/build-phase-pass/build-phase-pass-service.js +102 -0
  54. package/lib/langium/build-phase-pass/build-phase-pass-service.js.map +1 -0
  55. package/lib/langium/build-phase-pass/build-phase-pass.d.ts +106 -0
  56. package/lib/langium/build-phase-pass/build-phase-pass.d.ts.map +1 -0
  57. package/lib/langium/build-phase-pass/build-phase-pass.js +43 -0
  58. package/lib/langium/build-phase-pass/build-phase-pass.js.map +1 -0
  59. package/lib/langium/build-phase-pass/index.d.ts +11 -0
  60. package/lib/langium/build-phase-pass/index.d.ts.map +1 -0
  61. package/lib/langium/build-phase-pass/index.js +11 -0
  62. package/lib/langium/build-phase-pass/index.js.map +1 -0
  63. package/lib/langium/config/index.d.ts +10 -0
  64. package/lib/langium/config/index.d.ts.map +1 -0
  65. package/lib/langium/config/index.js +10 -0
  66. package/lib/langium/config/index.js.map +1 -0
  67. package/lib/langium/config/settings.d.ts +173 -0
  68. package/lib/langium/config/settings.d.ts.map +1 -0
  69. package/lib/langium/config/settings.js +196 -0
  70. package/lib/langium/config/settings.js.map +1 -0
  71. package/lib/langium/diagnostics/hydranium-langium-profiler.d.ts +109 -0
  72. package/lib/langium/diagnostics/hydranium-langium-profiler.d.ts.map +1 -0
  73. package/lib/langium/diagnostics/hydranium-langium-profiler.js +153 -0
  74. package/lib/langium/diagnostics/hydranium-langium-profiler.js.map +1 -0
  75. package/lib/langium/diagnostics/index.d.ts +14 -0
  76. package/lib/langium/diagnostics/index.d.ts.map +1 -0
  77. package/lib/langium/diagnostics/index.js +19 -0
  78. package/lib/langium/diagnostics/index.js.map +1 -0
  79. package/lib/langium/diagnostics/log-file-token.d.ts +16 -0
  80. package/lib/langium/diagnostics/log-file-token.d.ts.map +1 -0
  81. package/lib/langium/diagnostics/log-file-token.js +25 -0
  82. package/lib/langium/diagnostics/log-file-token.js.map +1 -0
  83. package/lib/langium/diagnostics/log-preamble.d.ts +42 -0
  84. package/lib/langium/diagnostics/log-preamble.d.ts.map +1 -0
  85. package/lib/langium/diagnostics/log-preamble.js +57 -0
  86. package/lib/langium/diagnostics/log-preamble.js.map +1 -0
  87. package/lib/langium/diagnostics/logger.d.ts +104 -0
  88. package/lib/langium/diagnostics/logger.d.ts.map +1 -0
  89. package/lib/langium/diagnostics/logger.js +178 -0
  90. package/lib/langium/diagnostics/logger.js.map +1 -0
  91. package/lib/langium/diagnostics/lsp-logger.d.ts +76 -0
  92. package/lib/langium/diagnostics/lsp-logger.d.ts.map +1 -0
  93. package/lib/langium/diagnostics/lsp-logger.js +223 -0
  94. package/lib/langium/diagnostics/lsp-logger.js.map +1 -0
  95. package/lib/langium/diagnostics/server-tracer.d.ts +27 -0
  96. package/lib/langium/diagnostics/server-tracer.d.ts.map +1 -0
  97. package/lib/langium/diagnostics/server-tracer.js +66 -0
  98. package/lib/langium/diagnostics/server-tracer.js.map +1 -0
  99. package/lib/langium/document-builder/build-pipeline-integration.d.ts +88 -0
  100. package/lib/langium/document-builder/build-pipeline-integration.d.ts.map +1 -0
  101. package/lib/langium/document-builder/build-pipeline-integration.js +151 -0
  102. package/lib/langium/document-builder/build-pipeline-integration.js.map +1 -0
  103. package/lib/langium/document-builder/document-builder.d.ts +405 -0
  104. package/lib/langium/document-builder/document-builder.d.ts.map +1 -0
  105. package/lib/langium/document-builder/document-builder.js +729 -0
  106. package/lib/langium/document-builder/document-builder.js.map +1 -0
  107. package/lib/langium/document-builder/index.d.ts +12 -0
  108. package/lib/langium/document-builder/index.d.ts.map +1 -0
  109. package/lib/langium/document-builder/index.js +12 -0
  110. package/lib/langium/document-builder/index.js.map +1 -0
  111. package/lib/langium/document-builder/labeled-phase-listener.d.ts +21 -0
  112. package/lib/langium/document-builder/labeled-phase-listener.d.ts.map +1 -0
  113. package/lib/langium/document-builder/labeled-phase-listener.js +15 -0
  114. package/lib/langium/document-builder/labeled-phase-listener.js.map +1 -0
  115. package/lib/langium/documentation/comment-provider.d.ts +31 -0
  116. package/lib/langium/documentation/comment-provider.d.ts.map +1 -0
  117. package/lib/langium/documentation/comment-provider.js +36 -0
  118. package/lib/langium/documentation/comment-provider.js.map +1 -0
  119. package/lib/langium/documentation/index.d.ts +10 -0
  120. package/lib/langium/documentation/index.d.ts.map +1 -0
  121. package/lib/langium/documentation/index.js +10 -0
  122. package/lib/langium/documentation/index.js.map +1 -0
  123. package/lib/langium/integration-services.d.ts +200 -0
  124. package/lib/langium/integration-services.d.ts.map +1 -0
  125. package/lib/langium/integration-services.js +65 -0
  126. package/lib/langium/integration-services.js.map +1 -0
  127. package/lib/langium/integrity/index.d.ts +12 -0
  128. package/lib/langium/integrity/index.d.ts.map +1 -0
  129. package/lib/langium/integrity/index.js +12 -0
  130. package/lib/langium/integrity/index.js.map +1 -0
  131. package/lib/langium/integrity/integrity-contribution.d.ts +42 -0
  132. package/lib/langium/integrity/integrity-contribution.d.ts.map +1 -0
  133. package/lib/langium/integrity/integrity-contribution.js +10 -0
  134. package/lib/langium/integrity/integrity-contribution.js.map +1 -0
  135. package/lib/langium/integrity/integrity-rule.d.ts +82 -0
  136. package/lib/langium/integrity/integrity-rule.d.ts.map +1 -0
  137. package/lib/langium/integrity/integrity-rule.js +52 -0
  138. package/lib/langium/integrity/integrity-rule.js.map +1 -0
  139. package/lib/langium/integrity/integrity-service.d.ts +221 -0
  140. package/lib/langium/integrity/integrity-service.d.ts.map +1 -0
  141. package/lib/langium/integrity/integrity-service.js +328 -0
  142. package/lib/langium/integrity/integrity-service.js.map +1 -0
  143. package/lib/langium/keys/default-element-key-provider.d.ts +19 -0
  144. package/lib/langium/keys/default-element-key-provider.d.ts.map +1 -0
  145. package/lib/langium/keys/default-element-key-provider.js +18 -0
  146. package/lib/langium/keys/default-element-key-provider.js.map +1 -0
  147. package/lib/langium/keys/element-key-provider.d.ts +106 -0
  148. package/lib/langium/keys/element-key-provider.d.ts.map +1 -0
  149. package/lib/langium/keys/element-key-provider.js +25 -0
  150. package/lib/langium/keys/element-key-provider.js.map +1 -0
  151. package/lib/langium/keys/index.d.ts +13 -0
  152. package/lib/langium/keys/index.d.ts.map +1 -0
  153. package/lib/langium/keys/index.js +13 -0
  154. package/lib/langium/keys/index.js.map +1 -0
  155. package/lib/langium/keys/name-based-key-provider.d.ts +99 -0
  156. package/lib/langium/keys/name-based-key-provider.d.ts.map +1 -0
  157. package/lib/langium/keys/name-based-key-provider.js +134 -0
  158. package/lib/langium/keys/name-based-key-provider.js.map +1 -0
  159. package/lib/langium/keys/positional-key-provider.d.ts +41 -0
  160. package/lib/langium/keys/positional-key-provider.d.ts.map +1 -0
  161. package/lib/langium/keys/positional-key-provider.js +48 -0
  162. package/lib/langium/keys/positional-key-provider.js.map +1 -0
  163. package/lib/langium/labeling/index.d.ts +10 -0
  164. package/lib/langium/labeling/index.d.ts.map +1 -0
  165. package/lib/langium/labeling/index.js +10 -0
  166. package/lib/langium/labeling/index.js.map +1 -0
  167. package/lib/langium/labeling/label-provider.d.ts +79 -0
  168. package/lib/langium/labeling/label-provider.d.ts.map +1 -0
  169. package/lib/langium/labeling/label-provider.js +44 -0
  170. package/lib/langium/labeling/label-provider.js.map +1 -0
  171. package/lib/langium/language-module.d.ts +281 -0
  172. package/lib/langium/language-module.d.ts.map +1 -0
  173. package/lib/langium/language-module.js +103 -0
  174. package/lib/langium/language-module.js.map +1 -0
  175. package/lib/langium/language-types.d.ts +85 -0
  176. package/lib/langium/language-types.d.ts.map +1 -0
  177. package/lib/langium/language-types.js +173 -0
  178. package/lib/langium/language-types.js.map +1 -0
  179. package/lib/langium/model-service/index.d.ts +10 -0
  180. package/lib/langium/model-service/index.d.ts.map +1 -0
  181. package/lib/langium/model-service/index.js +10 -0
  182. package/lib/langium/model-service/index.js.map +1 -0
  183. package/lib/langium/model-service/model-service.d.ts +598 -0
  184. package/lib/langium/model-service/model-service.d.ts.map +1 -0
  185. package/lib/langium/model-service/model-service.js +889 -0
  186. package/lib/langium/model-service/model-service.js.map +1 -0
  187. package/lib/langium/module.d.ts +308 -0
  188. package/lib/langium/module.d.ts.map +1 -0
  189. package/lib/langium/module.js +165 -0
  190. package/lib/langium/module.js.map +1 -0
  191. package/lib/langium/naming/index.d.ts +11 -0
  192. package/lib/langium/naming/index.d.ts.map +1 -0
  193. package/lib/langium/naming/index.js +11 -0
  194. package/lib/langium/naming/index.js.map +1 -0
  195. package/lib/langium/naming/name-provider.d.ts +360 -0
  196. package/lib/langium/naming/name-provider.d.ts.map +1 -0
  197. package/lib/langium/naming/name-provider.js +240 -0
  198. package/lib/langium/naming/name-provider.js.map +1 -0
  199. package/lib/langium/naming/name-separator-validation.d.ts +47 -0
  200. package/lib/langium/naming/name-separator-validation.d.ts.map +1 -0
  201. package/lib/langium/naming/name-separator-validation.js +61 -0
  202. package/lib/langium/naming/name-separator-validation.js.map +1 -0
  203. package/lib/langium/project/abstract-project-manager.d.ts +242 -0
  204. package/lib/langium/project/abstract-project-manager.d.ts.map +1 -0
  205. package/lib/langium/project/abstract-project-manager.js +545 -0
  206. package/lib/langium/project/abstract-project-manager.js.map +1 -0
  207. package/lib/langium/project/index.d.ts +13 -0
  208. package/lib/langium/project/index.d.ts.map +1 -0
  209. package/lib/langium/project/index.js +13 -0
  210. package/lib/langium/project/index.js.map +1 -0
  211. package/lib/langium/project/project-change-event.d.ts +64 -0
  212. package/lib/langium/project/project-change-event.d.ts.map +1 -0
  213. package/lib/langium/project/project-change-event.js +10 -0
  214. package/lib/langium/project/project-change-event.js.map +1 -0
  215. package/lib/langium/project/project-manager.d.ts +196 -0
  216. package/lib/langium/project/project-manager.d.ts.map +1 -0
  217. package/lib/langium/project/project-manager.js +10 -0
  218. package/lib/langium/project/project-manager.js.map +1 -0
  219. package/lib/langium/project/single-project-manager.d.ts +69 -0
  220. package/lib/langium/project/single-project-manager.d.ts.map +1 -0
  221. package/lib/langium/project/single-project-manager.js +104 -0
  222. package/lib/langium/project/single-project-manager.js.map +1 -0
  223. package/lib/langium/residency/cst-residency-service.d.ts +214 -0
  224. package/lib/langium/residency/cst-residency-service.d.ts.map +1 -0
  225. package/lib/langium/residency/cst-residency-service.js +349 -0
  226. package/lib/langium/residency/cst-residency-service.js.map +1 -0
  227. package/lib/langium/residency/index.d.ts +10 -0
  228. package/lib/langium/residency/index.d.ts.map +1 -0
  229. package/lib/langium/residency/index.js +10 -0
  230. package/lib/langium/residency/index.js.map +1 -0
  231. package/lib/langium/scope/ast-node-description-provider.d.ts +122 -0
  232. package/lib/langium/scope/ast-node-description-provider.d.ts.map +1 -0
  233. package/lib/langium/scope/ast-node-description-provider.js +115 -0
  234. package/lib/langium/scope/ast-node-description-provider.js.map +1 -0
  235. package/lib/langium/scope/hydranium-scope-computation.d.ts +163 -0
  236. package/lib/langium/scope/hydranium-scope-computation.d.ts.map +1 -0
  237. package/lib/langium/scope/hydranium-scope-computation.js +220 -0
  238. package/lib/langium/scope/hydranium-scope-computation.js.map +1 -0
  239. package/lib/langium/scope/hydranium-scope-provider.d.ts +411 -0
  240. package/lib/langium/scope/hydranium-scope-provider.d.ts.map +1 -0
  241. package/lib/langium/scope/hydranium-scope-provider.js +543 -0
  242. package/lib/langium/scope/hydranium-scope-provider.js.map +1 -0
  243. package/lib/langium/scope/index.d.ts +18 -0
  244. package/lib/langium/scope/index.d.ts.map +1 -0
  245. package/lib/langium/scope/index.js +18 -0
  246. package/lib/langium/scope/index.js.map +1 -0
  247. package/lib/langium/scope/reference-builder.d.ts +125 -0
  248. package/lib/langium/scope/reference-builder.d.ts.map +1 -0
  249. package/lib/langium/scope/reference-builder.js +115 -0
  250. package/lib/langium/scope/reference-builder.js.map +1 -0
  251. package/lib/langium/scope/reference-candidate-provider.d.ts +228 -0
  252. package/lib/langium/scope/reference-candidate-provider.d.ts.map +1 -0
  253. package/lib/langium/scope/reference-candidate-provider.js +185 -0
  254. package/lib/langium/scope/reference-candidate-provider.js.map +1 -0
  255. package/lib/langium/scope/scope-extension-contribution.d.ts +32 -0
  256. package/lib/langium/scope/scope-extension-contribution.d.ts.map +1 -0
  257. package/lib/langium/scope/scope-extension-contribution.js +10 -0
  258. package/lib/langium/scope/scope-extension-contribution.js.map +1 -0
  259. package/lib/langium/scope/scope-extension-service.d.ts +149 -0
  260. package/lib/langium/scope/scope-extension-service.d.ts.map +1 -0
  261. package/lib/langium/scope/scope-extension-service.js +94 -0
  262. package/lib/langium/scope/scope-extension-service.js.map +1 -0
  263. package/lib/langium/scope/scoped-ast-node-description.d.ts +160 -0
  264. package/lib/langium/scope/scoped-ast-node-description.d.ts.map +1 -0
  265. package/lib/langium/scope/scoped-ast-node-description.js +98 -0
  266. package/lib/langium/scope/scoped-ast-node-description.js.map +1 -0
  267. package/lib/langium/scope/tier-specificity.d.ts +47 -0
  268. package/lib/langium/scope/tier-specificity.d.ts.map +1 -0
  269. package/lib/langium/scope/tier-specificity.js +83 -0
  270. package/lib/langium/scope/tier-specificity.js.map +1 -0
  271. package/lib/langium/serialization/abstract-serializer.d.ts +316 -0
  272. package/lib/langium/serialization/abstract-serializer.d.ts.map +1 -0
  273. package/lib/langium/serialization/abstract-serializer.js +351 -0
  274. package/lib/langium/serialization/abstract-serializer.js.map +1 -0
  275. package/lib/langium/serialization/index.d.ts +14 -0
  276. package/lib/langium/serialization/index.d.ts.map +1 -0
  277. package/lib/langium/serialization/index.js +14 -0
  278. package/lib/langium/serialization/index.js.map +1 -0
  279. package/lib/langium/serialization/json-serializer.d.ts +106 -0
  280. package/lib/langium/serialization/json-serializer.d.ts.map +1 -0
  281. package/lib/langium/serialization/json-serializer.js +198 -0
  282. package/lib/langium/serialization/json-serializer.js.map +1 -0
  283. package/lib/langium/serialization/serialization-util.d.ts +29 -0
  284. package/lib/langium/serialization/serialization-util.d.ts.map +1 -0
  285. package/lib/langium/serialization/serialization-util.js +37 -0
  286. package/lib/langium/serialization/serialization-util.js.map +1 -0
  287. package/lib/langium/serialization/serializer.d.ts +66 -0
  288. package/lib/langium/serialization/serializer.d.ts.map +1 -0
  289. package/lib/langium/serialization/serializer.js +10 -0
  290. package/lib/langium/serialization/serializer.js.map +1 -0
  291. package/lib/langium/serialization/yaml-serializer.d.ts +166 -0
  292. package/lib/langium/serialization/yaml-serializer.d.ts.map +1 -0
  293. package/lib/langium/serialization/yaml-serializer.js +228 -0
  294. package/lib/langium/serialization/yaml-serializer.js.map +1 -0
  295. package/lib/langium/service-registry.d.ts +220 -0
  296. package/lib/langium/service-registry.d.ts.map +1 -0
  297. package/lib/langium/service-registry.js +258 -0
  298. package/lib/langium/service-registry.js.map +1 -0
  299. package/lib/langium/shared-services.d.ts +98 -0
  300. package/lib/langium/shared-services.d.ts.map +1 -0
  301. package/lib/langium/shared-services.js +30 -0
  302. package/lib/langium/shared-services.js.map +1 -0
  303. package/lib/langium/transfer/index.d.ts +10 -0
  304. package/lib/langium/transfer/index.d.ts.map +1 -0
  305. package/lib/langium/transfer/index.js +10 -0
  306. package/lib/langium/transfer/index.js.map +1 -0
  307. package/lib/langium/transfer/transfer-encoder.d.ts +294 -0
  308. package/lib/langium/transfer/transfer-encoder.d.ts.map +1 -0
  309. package/lib/langium/transfer/transfer-encoder.js +328 -0
  310. package/lib/langium/transfer/transfer-encoder.js.map +1 -0
  311. package/lib/langium/update-rewrite/index.d.ts +14 -0
  312. package/lib/langium/update-rewrite/index.d.ts.map +1 -0
  313. package/lib/langium/update-rewrite/index.js +14 -0
  314. package/lib/langium/update-rewrite/index.js.map +1 -0
  315. package/lib/langium/update-rewrite/normalize-empty-strings.d.ts +52 -0
  316. package/lib/langium/update-rewrite/normalize-empty-strings.d.ts.map +1 -0
  317. package/lib/langium/update-rewrite/normalize-empty-strings.js +83 -0
  318. package/lib/langium/update-rewrite/normalize-empty-strings.js.map +1 -0
  319. package/lib/langium/update-rewrite/semantic-root-rewrite.d.ts +37 -0
  320. package/lib/langium/update-rewrite/semantic-root-rewrite.d.ts.map +1 -0
  321. package/lib/langium/update-rewrite/semantic-root-rewrite.js +51 -0
  322. package/lib/langium/update-rewrite/semantic-root-rewrite.js.map +1 -0
  323. package/lib/langium/update-rewrite/update-rewrite-contribution.d.ts +42 -0
  324. package/lib/langium/update-rewrite/update-rewrite-contribution.d.ts.map +1 -0
  325. package/lib/langium/update-rewrite/update-rewrite-contribution.js +10 -0
  326. package/lib/langium/update-rewrite/update-rewrite-contribution.js.map +1 -0
  327. package/lib/langium/update-rewrite/update-rewrite-service.d.ts +89 -0
  328. package/lib/langium/update-rewrite/update-rewrite-service.d.ts.map +1 -0
  329. package/lib/langium/update-rewrite/update-rewrite-service.js +75 -0
  330. package/lib/langium/update-rewrite/update-rewrite-service.js.map +1 -0
  331. package/lib/langium/update-rewrite/update-rewrite.d.ts +59 -0
  332. package/lib/langium/update-rewrite/update-rewrite.d.ts.map +1 -0
  333. package/lib/langium/update-rewrite/update-rewrite.js +10 -0
  334. package/lib/langium/update-rewrite/update-rewrite.js.map +1 -0
  335. package/lib/langium/validation/document-validator.d.ts +106 -0
  336. package/lib/langium/validation/document-validator.d.ts.map +1 -0
  337. package/lib/langium/validation/document-validator.js +118 -0
  338. package/lib/langium/validation/document-validator.js.map +1 -0
  339. package/lib/langium/validation/index.d.ts +12 -0
  340. package/lib/langium/validation/index.d.ts.map +1 -0
  341. package/lib/langium/validation/index.js +12 -0
  342. package/lib/langium/validation/index.js.map +1 -0
  343. package/lib/langium/validation/validation-contribution-collector.d.ts +34 -0
  344. package/lib/langium/validation/validation-contribution-collector.d.ts.map +1 -0
  345. package/lib/langium/validation/validation-contribution-collector.js +51 -0
  346. package/lib/langium/validation/validation-contribution-collector.js.map +1 -0
  347. package/lib/langium/validation/validation-contribution.d.ts +36 -0
  348. package/lib/langium/validation/validation-contribution.d.ts.map +1 -0
  349. package/lib/langium/validation/validation-contribution.js +10 -0
  350. package/lib/langium/validation/validation-contribution.js.map +1 -0
  351. package/lib/langium/workspace/additional-document-contribution.d.ts +68 -0
  352. package/lib/langium/workspace/additional-document-contribution.d.ts.map +1 -0
  353. package/lib/langium/workspace/additional-document-contribution.js +23 -0
  354. package/lib/langium/workspace/additional-document-contribution.js.map +1 -0
  355. package/lib/langium/workspace/document-uri-policy.d.ts +151 -0
  356. package/lib/langium/workspace/document-uri-policy.d.ts.map +1 -0
  357. package/lib/langium/workspace/document-uri-policy.js +121 -0
  358. package/lib/langium/workspace/document-uri-policy.js.map +1 -0
  359. package/lib/langium/workspace/file-system-provider.d.ts +30 -0
  360. package/lib/langium/workspace/file-system-provider.d.ts.map +1 -0
  361. package/lib/langium/workspace/file-system-provider.js +41 -0
  362. package/lib/langium/workspace/file-system-provider.js.map +1 -0
  363. package/lib/langium/workspace/hydranium-langium-document-factory.d.ts +45 -0
  364. package/lib/langium/workspace/hydranium-langium-document-factory.d.ts.map +1 -0
  365. package/lib/langium/workspace/hydranium-langium-document-factory.js +64 -0
  366. package/lib/langium/workspace/hydranium-langium-document-factory.js.map +1 -0
  367. package/lib/langium/workspace/hydranium-workspace-lock.d.ts +31 -0
  368. package/lib/langium/workspace/hydranium-workspace-lock.d.ts.map +1 -0
  369. package/lib/langium/workspace/hydranium-workspace-lock.js +33 -0
  370. package/lib/langium/workspace/hydranium-workspace-lock.js.map +1 -0
  371. package/lib/langium/workspace/hydranium-workspace-manager.d.ts +232 -0
  372. package/lib/langium/workspace/hydranium-workspace-manager.d.ts.map +1 -0
  373. package/lib/langium/workspace/hydranium-workspace-manager.js +368 -0
  374. package/lib/langium/workspace/hydranium-workspace-manager.js.map +1 -0
  375. package/lib/langium/workspace/in-memory-file-system-provider.d.ts +127 -0
  376. package/lib/langium/workspace/in-memory-file-system-provider.d.ts.map +1 -0
  377. package/lib/langium/workspace/in-memory-file-system-provider.js +195 -0
  378. package/lib/langium/workspace/in-memory-file-system-provider.js.map +1 -0
  379. package/lib/langium/workspace/index-manager.d.ts +142 -0
  380. package/lib/langium/workspace/index-manager.d.ts.map +1 -0
  381. package/lib/langium/workspace/index-manager.js +245 -0
  382. package/lib/langium/workspace/index-manager.js.map +1 -0
  383. package/lib/langium/workspace/index.d.ts +23 -0
  384. package/lib/langium/workspace/index.d.ts.map +1 -0
  385. package/lib/langium/workspace/index.js +23 -0
  386. package/lib/langium/workspace/index.js.map +1 -0
  387. package/lib/langium/workspace/initialize-workspace.d.ts +63 -0
  388. package/lib/langium/workspace/initialize-workspace.d.ts.map +1 -0
  389. package/lib/langium/workspace/initialize-workspace.js +88 -0
  390. package/lib/langium/workspace/initialize-workspace.js.map +1 -0
  391. package/lib/langium/workspace/langium-documents.d.ts +47 -0
  392. package/lib/langium/workspace/langium-documents.d.ts.map +1 -0
  393. package/lib/langium/workspace/langium-documents.js +85 -0
  394. package/lib/langium/workspace/langium-documents.js.map +1 -0
  395. package/lib/langium/workspace/persistent-file-system-provider.d.ts +207 -0
  396. package/lib/langium/workspace/persistent-file-system-provider.d.ts.map +1 -0
  397. package/lib/langium/workspace/persistent-file-system-provider.js +208 -0
  398. package/lib/langium/workspace/persistent-file-system-provider.js.map +1 -0
  399. package/lib/langium/workspace/synthetic.d.ts +38 -0
  400. package/lib/langium/workspace/synthetic.d.ts.map +1 -0
  401. package/lib/langium/workspace/synthetic.js +58 -0
  402. package/lib/langium/workspace/synthetic.js.map +1 -0
  403. package/lib/langium/workspace/virtual-document.d.ts +78 -0
  404. package/lib/langium/workspace/virtual-document.d.ts.map +1 -0
  405. package/lib/langium/workspace/virtual-document.js +89 -0
  406. package/lib/langium/workspace/virtual-document.js.map +1 -0
  407. package/lib/langium/workspace/write-lock-scope.d.ts +69 -0
  408. package/lib/langium/workspace/write-lock-scope.d.ts.map +1 -0
  409. package/lib/langium/workspace/write-lock-scope.js +54 -0
  410. package/lib/langium/workspace/write-lock-scope.js.map +1 -0
  411. package/lib/launcher/index.d.ts +10 -0
  412. package/lib/launcher/index.d.ts.map +1 -0
  413. package/lib/launcher/index.js +12 -0
  414. package/lib/launcher/index.js.map +1 -0
  415. package/lib/launcher/integrated-server.d.ts +28 -0
  416. package/lib/launcher/integrated-server.d.ts.map +1 -0
  417. package/lib/launcher/integrated-server.js +10 -0
  418. package/lib/launcher/integrated-server.js.map +1 -0
  419. package/lib/lsp/completion/hydranium-completion-provider.d.ts +89 -0
  420. package/lib/lsp/completion/hydranium-completion-provider.d.ts.map +1 -0
  421. package/lib/lsp/completion/hydranium-completion-provider.js +123 -0
  422. package/lib/lsp/completion/hydranium-completion-provider.js.map +1 -0
  423. package/lib/lsp/hydranium-document-update-handler.d.ts +204 -0
  424. package/lib/lsp/hydranium-document-update-handler.d.ts.map +1 -0
  425. package/lib/lsp/hydranium-document-update-handler.js +288 -0
  426. package/lib/lsp/hydranium-document-update-handler.js.map +1 -0
  427. package/lib/lsp/index.d.ts +23 -0
  428. package/lib/lsp/index.d.ts.map +1 -0
  429. package/lib/lsp/index.js +23 -0
  430. package/lib/lsp/index.js.map +1 -0
  431. package/lib/lsp/instrument-connection.d.ts +36 -0
  432. package/lib/lsp/instrument-connection.d.ts.map +1 -0
  433. package/lib/lsp/instrument-connection.js +62 -0
  434. package/lib/lsp/instrument-connection.js.map +1 -0
  435. package/lib/lsp/language-module.d.ts +53 -0
  436. package/lib/lsp/language-module.d.ts.map +1 -0
  437. package/lib/lsp/language-module.js +28 -0
  438. package/lib/lsp/language-module.js.map +1 -0
  439. package/lib/lsp/semantic-token-provider.d.ts +131 -0
  440. package/lib/lsp/semantic-token-provider.d.ts.map +1 -0
  441. package/lib/lsp/semantic-token-provider.js +148 -0
  442. package/lib/lsp/semantic-token-provider.js.map +1 -0
  443. package/lib/lsp/shared-module.d.ts +76 -0
  444. package/lib/lsp/shared-module.d.ts.map +1 -0
  445. package/lib/lsp/shared-module.js +33 -0
  446. package/lib/lsp/shared-module.js.map +1 -0
  447. package/lib/lsp/start-language-server.d.ts +43 -0
  448. package/lib/lsp/start-language-server.d.ts.map +1 -0
  449. package/lib/lsp/start-language-server.js +60 -0
  450. package/lib/lsp/start-language-server.js.map +1 -0
  451. package/lib/node/ast-ground-truth.d.ts +57 -0
  452. package/lib/node/ast-ground-truth.d.ts.map +1 -0
  453. package/lib/node/ast-ground-truth.js +46 -0
  454. package/lib/node/ast-ground-truth.js.map +1 -0
  455. package/lib/node/event-loop-monitor.d.ts +40 -0
  456. package/lib/node/event-loop-monitor.d.ts.map +1 -0
  457. package/lib/node/event-loop-monitor.js +62 -0
  458. package/lib/node/event-loop-monitor.js.map +1 -0
  459. package/lib/node/index.d.ts +29 -0
  460. package/lib/node/index.d.ts.map +1 -0
  461. package/lib/node/index.js +50 -0
  462. package/lib/node/index.js.map +1 -0
  463. package/lib/node/latency-from-env.d.ts +32 -0
  464. package/lib/node/latency-from-env.d.ts.map +1 -0
  465. package/lib/node/latency-from-env.js +36 -0
  466. package/lib/node/latency-from-env.js.map +1 -0
  467. package/lib/node/lint-grammar.d.ts +87 -0
  468. package/lib/node/lint-grammar.d.ts.map +1 -0
  469. package/lib/node/lint-grammar.js +124 -0
  470. package/lib/node/lint-grammar.js.map +1 -0
  471. package/lib/node/log-file-sink.d.ts +22 -0
  472. package/lib/node/log-file-sink.d.ts.map +1 -0
  473. package/lib/node/log-file-sink.js +43 -0
  474. package/lib/node/log-file-sink.js.map +1 -0
  475. package/lib/node/log-preamble-node.d.ts +28 -0
  476. package/lib/node/log-preamble-node.d.ts.map +1 -0
  477. package/lib/node/log-preamble-node.js +55 -0
  478. package/lib/node/log-preamble-node.js.map +1 -0
  479. package/lib/node/measure-memory.d.ts +86 -0
  480. package/lib/node/measure-memory.d.ts.map +1 -0
  481. package/lib/node/measure-memory.js +128 -0
  482. package/lib/node/measure-memory.js.map +1 -0
  483. package/lib/node/memory-monitor.d.ts +42 -0
  484. package/lib/node/memory-monitor.d.ts.map +1 -0
  485. package/lib/node/memory-monitor.js +83 -0
  486. package/lib/node/memory-monitor.js.map +1 -0
  487. package/lib/node/node-file-system-provider.d.ts +112 -0
  488. package/lib/node/node-file-system-provider.d.ts.map +1 -0
  489. package/lib/node/node-file-system-provider.js +230 -0
  490. package/lib/node/node-file-system-provider.js.map +1 -0
  491. package/lib/node/process-memory.d.ts +66 -0
  492. package/lib/node/process-memory.d.ts.map +1 -0
  493. package/lib/node/process-memory.js +252 -0
  494. package/lib/node/process-memory.js.map +1 -0
  495. package/lib/node/profile-capture.d.ts +118 -0
  496. package/lib/node/profile-capture.d.ts.map +1 -0
  497. package/lib/node/profile-capture.js +315 -0
  498. package/lib/node/profile-capture.js.map +1 -0
  499. package/lib/node/profile-digest.d.ts +49 -0
  500. package/lib/node/profile-digest.d.ts.map +1 -0
  501. package/lib/node/profile-digest.js +74 -0
  502. package/lib/node/profile-digest.js.map +1 -0
  503. package/lib/node/profiling-run.d.ts +80 -0
  504. package/lib/node/profiling-run.d.ts.map +1 -0
  505. package/lib/node/profiling-run.js +183 -0
  506. package/lib/node/profiling-run.js.map +1 -0
  507. package/lib/node/reflect-grammar.d.ts +109 -0
  508. package/lib/node/reflect-grammar.d.ts.map +1 -0
  509. package/lib/node/reflect-grammar.js +96 -0
  510. package/lib/node/reflect-grammar.js.map +1 -0
  511. package/lib/node/server-diagnostics.d.ts +43 -0
  512. package/lib/node/server-diagnostics.d.ts.map +1 -0
  513. package/lib/node/server-diagnostics.js +46 -0
  514. package/lib/node/server-diagnostics.js.map +1 -0
  515. package/lib/node/server-state-snapshot.d.ts +48 -0
  516. package/lib/node/server-state-snapshot.d.ts.map +1 -0
  517. package/lib/node/server-state-snapshot.js +139 -0
  518. package/lib/node/server-state-snapshot.js.map +1 -0
  519. package/lib/node/socket-launcher.d.ts +106 -0
  520. package/lib/node/socket-launcher.d.ts.map +1 -0
  521. package/lib/node/socket-launcher.js +138 -0
  522. package/lib/node/socket-launcher.js.map +1 -0
  523. package/lib/node/stdio-launcher.d.ts +88 -0
  524. package/lib/node/stdio-launcher.d.ts.map +1 -0
  525. package/lib/node/stdio-launcher.js +83 -0
  526. package/lib/node/stdio-launcher.js.map +1 -0
  527. package/lib/node/validate-workspace.d.ts +80 -0
  528. package/lib/node/validate-workspace.d.ts.map +1 -0
  529. package/lib/node/validate-workspace.js +72 -0
  530. package/lib/node/validate-workspace.js.map +1 -0
  531. package/lib/node/write-lock-scope-node.d.ts +27 -0
  532. package/lib/node/write-lock-scope-node.d.ts.map +1 -0
  533. package/lib/node/write-lock-scope-node.js +38 -0
  534. package/lib/node/write-lock-scope-node.js.map +1 -0
  535. package/lib/testing/ast-snapshot.d.ts +38 -0
  536. package/lib/testing/ast-snapshot.d.ts.map +1 -0
  537. package/lib/testing/ast-snapshot.js +78 -0
  538. package/lib/testing/ast-snapshot.js.map +1 -0
  539. package/lib/testing/document-uri-policy-conformance.d.ts +65 -0
  540. package/lib/testing/document-uri-policy-conformance.d.ts.map +1 -0
  541. package/lib/testing/document-uri-policy-conformance.js +69 -0
  542. package/lib/testing/document-uri-policy-conformance.js.map +1 -0
  543. package/lib/testing/fake-description.d.ts +35 -0
  544. package/lib/testing/fake-description.d.ts.map +1 -0
  545. package/lib/testing/fake-description.js +38 -0
  546. package/lib/testing/fake-description.js.map +1 -0
  547. package/lib/testing/fake-document.d.ts +71 -0
  548. package/lib/testing/fake-document.d.ts.map +1 -0
  549. package/lib/testing/fake-document.js +85 -0
  550. package/lib/testing/fake-document.js.map +1 -0
  551. package/lib/testing/fake-reflection.d.ts +29 -0
  552. package/lib/testing/fake-reflection.d.ts.map +1 -0
  553. package/lib/testing/fake-reflection.js +30 -0
  554. package/lib/testing/fake-reflection.js.map +1 -0
  555. package/lib/testing/index.d.ts +44 -0
  556. package/lib/testing/index.d.ts.map +1 -0
  557. package/lib/testing/index.js +44 -0
  558. package/lib/testing/index.js.map +1 -0
  559. package/lib/testing/langium-test-helpers.d.ts +26 -0
  560. package/lib/testing/langium-test-helpers.d.ts.map +1 -0
  561. package/lib/testing/langium-test-helpers.js +26 -0
  562. package/lib/testing/langium-test-helpers.js.map +1 -0
  563. package/lib/testing/make-noop-language-services.d.ts +39 -0
  564. package/lib/testing/make-noop-language-services.d.ts.map +1 -0
  565. package/lib/testing/make-noop-language-services.js +30 -0
  566. package/lib/testing/make-noop-language-services.js.map +1 -0
  567. package/lib/testing/make-noop-shared-services.d.ts +61 -0
  568. package/lib/testing/make-noop-shared-services.d.ts.map +1 -0
  569. package/lib/testing/make-noop-shared-services.js +49 -0
  570. package/lib/testing/make-noop-shared-services.js.map +1 -0
  571. package/lib/testing/make-test-services.d.ts +217 -0
  572. package/lib/testing/make-test-services.d.ts.map +1 -0
  573. package/lib/testing/make-test-services.js +128 -0
  574. package/lib/testing/make-test-services.js.map +1 -0
  575. package/lib/testing/make-test-tracer.d.ts +67 -0
  576. package/lib/testing/make-test-tracer.d.ts.map +1 -0
  577. package/lib/testing/make-test-tracer.js +68 -0
  578. package/lib/testing/make-test-tracer.js.map +1 -0
  579. package/lib/testing/node/generated-workspace.d.ts +95 -0
  580. package/lib/testing/node/generated-workspace.d.ts.map +1 -0
  581. package/lib/testing/node/generated-workspace.js +134 -0
  582. package/lib/testing/node/generated-workspace.js.map +1 -0
  583. package/lib/testing/node/golden-corpus.d.ts +50 -0
  584. package/lib/testing/node/golden-corpus.d.ts.map +1 -0
  585. package/lib/testing/node/golden-corpus.js +80 -0
  586. package/lib/testing/node/golden-corpus.js.map +1 -0
  587. package/lib/testing/node/index.d.ts +28 -0
  588. package/lib/testing/node/index.d.ts.map +1 -0
  589. package/lib/testing/node/index.js +28 -0
  590. package/lib/testing/node/index.js.map +1 -0
  591. package/lib/testing/node/lsp-harness.d.ts +139 -0
  592. package/lib/testing/node/lsp-harness.d.ts.map +1 -0
  593. package/lib/testing/node/lsp-harness.js +119 -0
  594. package/lib/testing/node/lsp-harness.js.map +1 -0
  595. package/lib/testing/node/lsp-server-connection.d.ts +232 -0
  596. package/lib/testing/node/lsp-server-connection.d.ts.map +1 -0
  597. package/lib/testing/node/lsp-server-connection.js +304 -0
  598. package/lib/testing/node/lsp-server-connection.js.map +1 -0
  599. package/lib/testing/node/scratch-workspace.d.ts +60 -0
  600. package/lib/testing/node/scratch-workspace.d.ts.map +1 -0
  601. package/lib/testing/node/scratch-workspace.js +87 -0
  602. package/lib/testing/node/scratch-workspace.js.map +1 -0
  603. package/lib/testing/node/spawned-server.d.ts +170 -0
  604. package/lib/testing/node/spawned-server.d.ts.map +1 -0
  605. package/lib/testing/node/spawned-server.js +265 -0
  606. package/lib/testing/node/spawned-server.js.map +1 -0
  607. package/lib/testing/parse-semantic-root.d.ts +83 -0
  608. package/lib/testing/parse-semantic-root.d.ts.map +1 -0
  609. package/lib/testing/parse-semantic-root.js +119 -0
  610. package/lib/testing/parse-semantic-root.js.map +1 -0
  611. package/lib/testing/playwright/browser-capture-bridge.d.ts +80 -0
  612. package/lib/testing/playwright/browser-capture-bridge.d.ts.map +1 -0
  613. package/lib/testing/playwright/browser-capture-bridge.js +161 -0
  614. package/lib/testing/playwright/browser-capture-bridge.js.map +1 -0
  615. package/lib/testing/playwright/e2e-profiling.d.ts +132 -0
  616. package/lib/testing/playwright/e2e-profiling.d.ts.map +1 -0
  617. package/lib/testing/playwright/e2e-profiling.js +270 -0
  618. package/lib/testing/playwright/e2e-profiling.js.map +1 -0
  619. package/lib/testing/playwright/index.d.ts +13 -0
  620. package/lib/testing/playwright/index.d.ts.map +1 -0
  621. package/lib/testing/playwright/index.js +16 -0
  622. package/lib/testing/playwright/index.js.map +1 -0
  623. package/lib/testing/playwright/server-log-capture.d.ts +230 -0
  624. package/lib/testing/playwright/server-log-capture.d.ts.map +1 -0
  625. package/lib/testing/playwright/server-log-capture.js +336 -0
  626. package/lib/testing/playwright/server-log-capture.js.map +1 -0
  627. package/lib/testing/playwright/server-log-fixture.d.ts +36 -0
  628. package/lib/testing/playwright/server-log-fixture.d.ts.map +1 -0
  629. package/lib/testing/playwright/server-log-fixture.js +38 -0
  630. package/lib/testing/playwright/server-log-fixture.js.map +1 -0
  631. package/lib/testing/playwright/server-log-rename-reporter.d.ts +22 -0
  632. package/lib/testing/playwright/server-log-rename-reporter.d.ts.map +1 -0
  633. package/lib/testing/playwright/server-log-rename-reporter.js +26 -0
  634. package/lib/testing/playwright/server-log-rename-reporter.js.map +1 -0
  635. package/lib/testing/run-update-pipeline.d.ts +99 -0
  636. package/lib/testing/run-update-pipeline.d.ts.map +1 -0
  637. package/lib/testing/run-update-pipeline.js +24 -0
  638. package/lib/testing/run-update-pipeline.js.map +1 -0
  639. package/lib/testing/stub-ast-document-manager.d.ts +82 -0
  640. package/lib/testing/stub-ast-document-manager.d.ts.map +1 -0
  641. package/lib/testing/stub-ast-document-manager.js +125 -0
  642. package/lib/testing/stub-ast-document-manager.js.map +1 -0
  643. package/lib/testing/stub-document-builder.d.ts +99 -0
  644. package/lib/testing/stub-document-builder.d.ts.map +1 -0
  645. package/lib/testing/stub-document-builder.js +142 -0
  646. package/lib/testing/stub-document-builder.js.map +1 -0
  647. package/lib/testing/stub-hydranium-text-documents.d.ts +125 -0
  648. package/lib/testing/stub-hydranium-text-documents.d.ts.map +1 -0
  649. package/lib/testing/stub-hydranium-text-documents.js +164 -0
  650. package/lib/testing/stub-hydranium-text-documents.js.map +1 -0
  651. package/lib/testing/stub-index-manager.d.ts +40 -0
  652. package/lib/testing/stub-index-manager.d.ts.map +1 -0
  653. package/lib/testing/stub-index-manager.js +38 -0
  654. package/lib/testing/stub-index-manager.js.map +1 -0
  655. package/lib/testing/stub-langium-documents.d.ts +53 -0
  656. package/lib/testing/stub-langium-documents.d.ts.map +1 -0
  657. package/lib/testing/stub-langium-documents.js +62 -0
  658. package/lib/testing/stub-langium-documents.js.map +1 -0
  659. package/lib/testing/stub-model-service.d.ts +31 -0
  660. package/lib/testing/stub-model-service.d.ts.map +1 -0
  661. package/lib/testing/stub-model-service.js +45 -0
  662. package/lib/testing/stub-model-service.js.map +1 -0
  663. package/lib/testing/stub-project-manager.d.ts +43 -0
  664. package/lib/testing/stub-project-manager.d.ts.map +1 -0
  665. package/lib/testing/stub-project-manager.js +125 -0
  666. package/lib/testing/stub-project-manager.js.map +1 -0
  667. package/lib/testing/stub-self-save-registry.d.ts +31 -0
  668. package/lib/testing/stub-self-save-registry.d.ts.map +1 -0
  669. package/lib/testing/stub-self-save-registry.js +23 -0
  670. package/lib/testing/stub-self-save-registry.js.map +1 -0
  671. package/lib/testing/stub-service-registry.d.ts +95 -0
  672. package/lib/testing/stub-service-registry.d.ts.map +1 -0
  673. package/lib/testing/stub-service-registry.js +108 -0
  674. package/lib/testing/stub-service-registry.js.map +1 -0
  675. package/lib/testing/stub-writable-file-system.d.ts +42 -0
  676. package/lib/testing/stub-writable-file-system.d.ts.map +1 -0
  677. package/lib/testing/stub-writable-file-system.js +26 -0
  678. package/lib/testing/stub-writable-file-system.js.map +1 -0
  679. package/lib/util/connection-liveness.d.ts +25 -0
  680. package/lib/util/connection-liveness.d.ts.map +1 -0
  681. package/lib/util/connection-liveness.js +46 -0
  682. package/lib/util/connection-liveness.js.map +1 -0
  683. package/lib/util/environment.d.ts +53 -0
  684. package/lib/util/environment.d.ts.map +1 -0
  685. package/lib/util/environment.js +78 -0
  686. package/lib/util/environment.js.map +1 -0
  687. package/lib/util/index.d.ts +13 -0
  688. package/lib/util/index.d.ts.map +1 -0
  689. package/lib/util/index.js +18 -0
  690. package/lib/util/index.js.map +1 -0
  691. package/lib/util/registry.d.ts +88 -0
  692. package/lib/util/registry.d.ts.map +1 -0
  693. package/lib/util/registry.js +105 -0
  694. package/lib/util/registry.js.map +1 -0
  695. package/package.json +134 -0
  696. package/src/documents/ast-document-manager.ts +455 -0
  697. package/src/documents/client-ids.ts +33 -0
  698. package/src/documents/hydranium-text-documents.ts +1142 -0
  699. package/src/documents/index.ts +14 -0
  700. package/src/documents/language-client-text-shadow.ts +175 -0
  701. package/src/documents/self-save-registry.ts +81 -0
  702. package/src/index.ts +39 -0
  703. package/src/langium/ast-extension/ast-extension-contribution.ts +35 -0
  704. package/src/langium/ast-extension/ast-extension-service.ts +311 -0
  705. package/src/langium/ast-extension/ast-node-builder.ts +125 -0
  706. package/src/langium/ast-extension/index.ts +12 -0
  707. package/src/langium/bootstrap.ts +600 -0
  708. package/src/langium/build-phase-pass/build-phase-pass-service.ts +141 -0
  709. package/src/langium/build-phase-pass/build-phase-pass.ts +123 -0
  710. package/src/langium/build-phase-pass/index.ts +11 -0
  711. package/src/langium/config/index.ts +10 -0
  712. package/src/langium/config/settings.ts +353 -0
  713. package/src/langium/diagnostics/hydranium-langium-profiler.ts +187 -0
  714. package/src/langium/diagnostics/index.ts +19 -0
  715. package/src/langium/diagnostics/log-file-token.ts +26 -0
  716. package/src/langium/diagnostics/log-preamble.ts +87 -0
  717. package/src/langium/diagnostics/logger.ts +246 -0
  718. package/src/langium/diagnostics/lsp-logger.ts +277 -0
  719. package/src/langium/diagnostics/server-tracer.ts +73 -0
  720. package/src/langium/document-builder/build-pipeline-integration.ts +193 -0
  721. package/src/langium/document-builder/document-builder.ts +839 -0
  722. package/src/langium/document-builder/index.ts +12 -0
  723. package/src/langium/document-builder/labeled-phase-listener.ts +26 -0
  724. package/src/langium/documentation/comment-provider.ts +37 -0
  725. package/src/langium/documentation/index.ts +10 -0
  726. package/src/langium/integration-services.ts +281 -0
  727. package/src/langium/integrity/index.ts +12 -0
  728. package/src/langium/integrity/integrity-contribution.ts +44 -0
  729. package/src/langium/integrity/integrity-rule.ts +100 -0
  730. package/src/langium/integrity/integrity-service.ts +423 -0
  731. package/src/langium/keys/default-element-key-provider.ts +20 -0
  732. package/src/langium/keys/element-key-provider.ts +114 -0
  733. package/src/langium/keys/index.ts +13 -0
  734. package/src/langium/keys/name-based-key-provider.ts +146 -0
  735. package/src/langium/keys/positional-key-provider.ts +57 -0
  736. package/src/langium/labeling/index.ts +10 -0
  737. package/src/langium/labeling/label-provider.ts +110 -0
  738. package/src/langium/language-module.ts +367 -0
  739. package/src/langium/language-types.ts +214 -0
  740. package/src/langium/model-service/index.ts +10 -0
  741. package/src/langium/model-service/model-service.ts +1051 -0
  742. package/src/langium/module.ts +446 -0
  743. package/src/langium/naming/index.ts +11 -0
  744. package/src/langium/naming/name-provider.ts +533 -0
  745. package/src/langium/naming/name-separator-validation.ts +73 -0
  746. package/src/langium/project/abstract-project-manager.ts +630 -0
  747. package/src/langium/project/index.ts +13 -0
  748. package/src/langium/project/project-change-event.ts +66 -0
  749. package/src/langium/project/project-manager.ts +221 -0
  750. package/src/langium/project/single-project-manager.ts +126 -0
  751. package/src/langium/residency/cst-residency-service.ts +412 -0
  752. package/src/langium/residency/index.ts +10 -0
  753. package/src/langium/scope/ast-node-description-provider.ts +141 -0
  754. package/src/langium/scope/hydranium-scope-computation.ts +246 -0
  755. package/src/langium/scope/hydranium-scope-provider.ts +659 -0
  756. package/src/langium/scope/index.ts +18 -0
  757. package/src/langium/scope/reference-builder.ts +194 -0
  758. package/src/langium/scope/reference-candidate-provider.ts +314 -0
  759. package/src/langium/scope/scope-extension-contribution.ts +34 -0
  760. package/src/langium/scope/scope-extension-service.ts +207 -0
  761. package/src/langium/scope/scoped-ast-node-description.ts +174 -0
  762. package/src/langium/scope/tier-specificity.ts +89 -0
  763. package/src/langium/serialization/abstract-serializer.ts +474 -0
  764. package/src/langium/serialization/index.ts +14 -0
  765. package/src/langium/serialization/json-serializer.ts +264 -0
  766. package/src/langium/serialization/serialization-util.ts +40 -0
  767. package/src/langium/serialization/serializer.ts +68 -0
  768. package/src/langium/serialization/yaml-serializer.ts +348 -0
  769. package/src/langium/service-registry.ts +323 -0
  770. package/src/langium/shared-services.ts +107 -0
  771. package/src/langium/transfer/index.ts +10 -0
  772. package/src/langium/transfer/transfer-encoder.ts +434 -0
  773. package/src/langium/update-rewrite/index.ts +14 -0
  774. package/src/langium/update-rewrite/normalize-empty-strings.ts +86 -0
  775. package/src/langium/update-rewrite/semantic-root-rewrite.ts +57 -0
  776. package/src/langium/update-rewrite/update-rewrite-contribution.ts +44 -0
  777. package/src/langium/update-rewrite/update-rewrite-service.ts +129 -0
  778. package/src/langium/update-rewrite/update-rewrite.ts +60 -0
  779. package/src/langium/validation/document-validator.ts +188 -0
  780. package/src/langium/validation/index.ts +12 -0
  781. package/src/langium/validation/validation-contribution-collector.ts +61 -0
  782. package/src/langium/validation/validation-contribution.ts +38 -0
  783. package/src/langium/workspace/additional-document-contribution.ts +80 -0
  784. package/src/langium/workspace/document-uri-policy.ts +187 -0
  785. package/src/langium/workspace/file-system-provider.ts +52 -0
  786. package/src/langium/workspace/hydranium-langium-document-factory.ts +78 -0
  787. package/src/langium/workspace/hydranium-workspace-lock.ts +35 -0
  788. package/src/langium/workspace/hydranium-workspace-manager.ts +412 -0
  789. package/src/langium/workspace/in-memory-file-system-provider.ts +241 -0
  790. package/src/langium/workspace/index-manager.ts +266 -0
  791. package/src/langium/workspace/index.ts +23 -0
  792. package/src/langium/workspace/initialize-workspace.ts +102 -0
  793. package/src/langium/workspace/langium-documents.ts +94 -0
  794. package/src/langium/workspace/persistent-file-system-provider.ts +287 -0
  795. package/src/langium/workspace/synthetic.ts +63 -0
  796. package/src/langium/workspace/virtual-document.ts +94 -0
  797. package/src/langium/workspace/write-lock-scope.ts +88 -0
  798. package/src/launcher/index.ts +12 -0
  799. package/src/launcher/integrated-server.ts +28 -0
  800. package/src/lsp/completion/hydranium-completion-provider.ts +132 -0
  801. package/src/lsp/hydranium-document-update-handler.ts +345 -0
  802. package/src/lsp/index.ts +24 -0
  803. package/src/lsp/instrument-connection.ts +66 -0
  804. package/src/lsp/language-module.ts +64 -0
  805. package/src/lsp/semantic-token-provider.ts +215 -0
  806. package/src/lsp/shared-module.ts +88 -0
  807. package/src/lsp/start-language-server.ts +68 -0
  808. package/src/node/ast-ground-truth.ts +76 -0
  809. package/src/node/event-loop-monitor.ts +89 -0
  810. package/src/node/index.ts +53 -0
  811. package/src/node/latency-from-env.ts +39 -0
  812. package/src/node/lint-grammar.ts +189 -0
  813. package/src/node/log-file-sink.ts +43 -0
  814. package/src/node/log-preamble-node.ts +63 -0
  815. package/src/node/measure-memory.ts +196 -0
  816. package/src/node/memory-monitor.ts +103 -0
  817. package/src/node/node-file-system-provider.ts +252 -0
  818. package/src/node/process-memory.ts +299 -0
  819. package/src/node/profile-capture.ts +377 -0
  820. package/src/node/profile-digest.ts +112 -0
  821. package/src/node/profiling-run.ts +236 -0
  822. package/src/node/reflect-grammar.ts +182 -0
  823. package/src/node/server-diagnostics.ts +63 -0
  824. package/src/node/server-state-snapshot.ts +192 -0
  825. package/src/node/socket-launcher.ts +210 -0
  826. package/src/node/stdio-launcher.ts +150 -0
  827. package/src/node/validate-workspace.ts +133 -0
  828. package/src/node/write-lock-scope-node.ts +41 -0
  829. package/src/testing/ast-snapshot.ts +88 -0
  830. package/src/testing/document-uri-policy-conformance.ts +104 -0
  831. package/src/testing/fake-description.ts +52 -0
  832. package/src/testing/fake-document.ts +120 -0
  833. package/src/testing/fake-reflection.ts +39 -0
  834. package/src/testing/index.ts +45 -0
  835. package/src/testing/langium-test-helpers.ts +26 -0
  836. package/src/testing/make-noop-language-services.ts +47 -0
  837. package/src/testing/make-noop-shared-services.ts +78 -0
  838. package/src/testing/make-test-services.ts +356 -0
  839. package/src/testing/make-test-tracer.ts +92 -0
  840. package/src/testing/node/generated-workspace.ts +222 -0
  841. package/src/testing/node/golden-corpus.ts +114 -0
  842. package/src/testing/node/index.ts +29 -0
  843. package/src/testing/node/lsp-harness.ts +230 -0
  844. package/src/testing/node/lsp-server-connection.ts +575 -0
  845. package/src/testing/node/scratch-workspace.ts +137 -0
  846. package/src/testing/node/spawned-server.ts +447 -0
  847. package/src/testing/parse-semantic-root.ts +150 -0
  848. package/src/testing/playwright/browser-capture-bridge.ts +258 -0
  849. package/src/testing/playwright/e2e-profiling.ts +362 -0
  850. package/src/testing/playwright/index.ts +16 -0
  851. package/src/testing/playwright/server-log-capture.ts +433 -0
  852. package/src/testing/playwright/server-log-fixture.ts +57 -0
  853. package/src/testing/playwright/server-log-rename-reporter.ts +29 -0
  854. package/src/testing/run-update-pipeline.ts +113 -0
  855. package/src/testing/stub-ast-document-manager.ts +224 -0
  856. package/src/testing/stub-document-builder.ts +242 -0
  857. package/src/testing/stub-hydranium-text-documents.ts +270 -0
  858. package/src/testing/stub-index-manager.ts +79 -0
  859. package/src/testing/stub-langium-documents.ts +104 -0
  860. package/src/testing/stub-model-service.ts +72 -0
  861. package/src/testing/stub-project-manager.ts +161 -0
  862. package/src/testing/stub-self-save-registry.ts +43 -0
  863. package/src/testing/stub-service-registry.ts +192 -0
  864. package/src/testing/stub-writable-file-system.ts +58 -0
  865. package/src/util/connection-liveness.ts +47 -0
  866. package/src/util/environment.ts +88 -0
  867. package/src/util/index.ts +18 -0
  868. package/src/util/registry.ts +129 -0
@@ -0,0 +1,356 @@
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 {
11
+ type Clock,
12
+ DefaultTracer,
13
+ type Logger,
14
+ NoopLogger,
15
+ type Project,
16
+ SystemClock,
17
+ type Tracer,
18
+ type TransferDiagnostic,
19
+ type TransferElement
20
+ } from '@hydranium/protocol';
21
+ import type { Harness } from '@hydranium/protocol/testing';
22
+ import { type AstNode, type AstNodeDescription, type WorkspaceLock } from '@hydranium/langium';
23
+ import type { ModelService, ModelServiceOptions } from '../langium/model-service/model-service.js';
24
+ import type { ServerSharedServices } from '../langium/module.js';
25
+ import { TransferEncoder } from '../langium/transfer/transfer-encoder.js';
26
+ import { DefaultDocumentUriPolicy, type DocumentUriPolicy } from '../langium/workspace/document-uri-policy.js';
27
+ import { HydraniumWorkspaceLock } from '../langium/workspace/hydranium-workspace-lock.js';
28
+ import type { FakeDocumentOptions } from './fake-document.js';
29
+ import { makeStubDocumentBuilder, type StubDocumentBuilder } from './stub-document-builder.js';
30
+ import { makeStubIndexManager, type StubIndexManager } from './stub-index-manager.js';
31
+ import { makeStubLangiumDocuments, type StubLangiumDocuments } from './stub-langium-documents.js';
32
+ import { makeStubModelService } from './stub-model-service.js';
33
+ import { makeStubAstDocumentManager, type StubAstDocumentManager } from './stub-ast-document-manager.js';
34
+ import { makeStubProjectManager, type StubProjectManager } from './stub-project-manager.js';
35
+ import { makeStubSelfSaveRegistry, type StubSelfSaveRegistry } from './stub-self-save-registry.js';
36
+ import { makeStubHydraniumTextDocuments, type StubHydraniumTextDocuments } from './stub-hydranium-text-documents.js';
37
+ import { makeStubServiceRegistry, type StubLanguageDescriptor, type StubServiceRegistry } from './stub-service-registry.js';
38
+ import { makeStubWritableFileSystem, type StubWritableFileSystem } from './stub-writable-file-system.js';
39
+
40
+ /**
41
+ * Honest shape of the `services` tree assembled by {@link makeTestServices}.
42
+ * Captures exactly the slots the bundle binds — narrower than the full
43
+ * {@link ServerSharedServices} that production code consumes, with no
44
+ * placeholder for slots that don't appear in the literal (`AstNodeLocator`,
45
+ * `WorkspaceManager`, etc.). The boundary cast from this type
46
+ * to `ServerSharedServices` in {@link makeTestServices} is therefore the
47
+ * single named place where the "stub stands in for the full service tree"
48
+ * assertion happens.
49
+ */
50
+ export interface TestSharedServices<
51
+ TAst extends AstNode = AstNode,
52
+ TDiagnostic extends TransferDiagnostic = TransferDiagnostic,
53
+ TTransfer extends TransferElement = TransferElement,
54
+ TProject extends Project = Project
55
+ > {
56
+ readonly Clock: Clock;
57
+ readonly Logger: Logger;
58
+ readonly Tracer: Tracer;
59
+ /**
60
+ * Present only when {@link MakeTestServicesOptions.languages} was passed.
61
+ * Omitted otherwise so a bundle without declared languages keeps failing
62
+ * loudly on the slot rather than answering from an empty registry — see
63
+ * the option's doc for why that default is deliberate.
64
+ */
65
+ readonly ServiceRegistry?: StubServiceRegistry;
66
+ readonly workspace: {
67
+ LangiumDocuments: StubLangiumDocuments<TAst, TDiagnostic>;
68
+ DocumentBuilder: StubDocumentBuilder;
69
+ TextDocuments: StubHydraniumTextDocuments;
70
+ AstDocumentManager: StubAstDocumentManager<TAst, TDiagnostic>;
71
+ FileSystemProvider: StubWritableFileSystem;
72
+ SelfSaveRegistry: StubSelfSaveRegistry;
73
+ ProjectManager: StubProjectManager<TProject>;
74
+ DocumentUriPolicy: DocumentUriPolicy;
75
+ /**
76
+ * Present only when {@link MakeTestServicesOptions.seedIndex} was passed.
77
+ * Omitted otherwise for the same reason as `ServiceRegistry` — see that
78
+ * option's doc.
79
+ */
80
+ IndexManager?: StubIndexManager;
81
+ /**
82
+ * The REAL `HydraniumWorkspaceLock`, not a stub — it is a few lines of
83
+ * promise queueing with no I/O, and `ModelService`'s build path serialises
84
+ * through it, so a no-op stub would hide exactly the interleaving the lock
85
+ * exists to prevent. The framework subclass rather than Langium's default
86
+ * because it also marks the write scope that `ModelService`'s reentrancy
87
+ * guard reads; binding the default here would make the guard untestable
88
+ * through this tree and let a reentrant write pass unnoticed.
89
+ */
90
+ WorkspaceLock: WorkspaceLock;
91
+ };
92
+ readonly model: {
93
+ TransferEncoder: TransferEncoder<unknown, TDiagnostic>;
94
+ ModelService: ModelService<TAst, TDiagnostic, TTransfer>;
95
+ };
96
+ }
97
+
98
+ /** Optional configuration for {@link makeTestServices}. */
99
+ export interface MakeTestServicesOptions<
100
+ TAst extends AstNode = AstNode,
101
+ TDiagnostic extends TransferDiagnostic = TransferDiagnostic,
102
+ TTransfer extends TransferElement = TransferElement,
103
+ TProject extends Project = Project
104
+ > {
105
+ /**
106
+ * Serialiser used by the bundled `StubModelService`. The stub tree
107
+ * routes no per-language `Serializer` (the stub languages bind no-op slots),
108
+ * so the framework's own serialize path is unavailable here — supply this
109
+ * whenever a test asserts on the produced text.
110
+ *
111
+ * Default: `JSON.stringify(root)` — deterministic and grammar-free, suitable
112
+ * for tests that don't assert on the produced text.
113
+ */
114
+ serialize?: (uri: string, root: TTransfer) => string;
115
+ /**
116
+ * Languages to register on a {@link StubServiceRegistry} bound on the
117
+ * `ServiceRegistry` slot. This is how a test gets multi-language routing:
118
+ * production code under test then resolves per-URI through Langium's real
119
+ * lookup ladder instead of a per-file hand-rolled registry object.
120
+ *
121
+ * **Default: no `ServiceRegistry` slot at all.** Binding an empty registry
122
+ * by default would silently change behaviour for the tests that rely on the
123
+ * slot being absent — `ModelService.updateRewriteService` optional-chains it
124
+ * precisely for those bundles — so a registry appears only when a test asks
125
+ * for one.
126
+ */
127
+ languages?: readonly StubLanguageDescriptor[];
128
+ /**
129
+ * Documents to declare open with a client-supplied `languageId`, as
130
+ * `{ [uri]: languageId }`. Forwarded to {@link makeStubServiceRegistry};
131
+ * only meaningful alongside {@link languages}.
132
+ */
133
+ openLanguageIds?: Readonly<Record<string, string>>;
134
+ /**
135
+ * Clock bound on the `Clock` shared slot. Pass `makeFakeClock()` to drive
136
+ * time-gated logic deterministically; defaults to a real {@link SystemClock}.
137
+ */
138
+ clock?: Clock;
139
+ /**
140
+ * Logger bound on the `Logger` slot AND wrapped by the `Tracer` slot, so a
141
+ * capturing logger sees both plain log lines and tracer-emitted timing/warn
142
+ * lines. Defaults to a {@link NoopLogger}.
143
+ */
144
+ logger?: Logger;
145
+ /** Initial documents to seed the {@link StubLangiumDocuments} with. */
146
+ seedDocuments?: ReadonlyArray<{
147
+ uri: string;
148
+ root: TAst;
149
+ options?: FakeDocumentOptions<TAst, TDiagnostic>;
150
+ }>;
151
+ /** Initial projects to seed the {@link StubProjectManager} with. */
152
+ seedProjects?: readonly TProject[];
153
+ /**
154
+ * Global-index entries to seed a {@link StubIndexManager} with, bound on the
155
+ * `IndexManager` slot. This is how a test reaches the global scope —
156
+ * `DefaultScopeProvider` reads that slot — so a scope assertion can
157
+ * distinguish "closed" from "falls through to the index".
158
+ *
159
+ * **Default: no `IndexManager` slot at all**, matching {@link languages}.
160
+ * Binding an empty stub by default would answer every global-index read with
161
+ * an empty result instead of failing on the unbound slot, which is the
162
+ * silent-`undefined` failure the boundary cast below is annotated for; a
163
+ * suite that never asks for an index would then pass for a new reason.
164
+ */
165
+ seedIndex?: readonly AstNodeDescription[];
166
+ /**
167
+ * Policy bound on the `DocumentUriPolicy` slot. Defaults to
168
+ * {@link DefaultDocumentUriPolicy} (syntactic normalize). Pass a stub that
169
+ * resolves chosen URIs to a shared canonical form to exercise the
170
+ * symlink-divergence bridges without touching the filesystem.
171
+ */
172
+ documentUriPolicy?: DocumentUriPolicy;
173
+ /**
174
+ * Override the {@link ModelService} factory. Use for tests that want a
175
+ * custom subclass with `normalize` / lifecycle hooks; the default builds
176
+ * a `StubModelService` from `options.serialize`.
177
+ */
178
+ modelService?: (services: ServerSharedServices<TProject>) => ModelService<TAst, TDiagnostic, TTransfer>;
179
+ /**
180
+ * Framework {@link ModelServiceOptions} for the DEFAULT stub service, so a
181
+ * test can reach an option-gated path (`serializeBuilds`, the slow-warn
182
+ * threshold) without supplying a whole {@link modelService} factory. Ignored
183
+ * when `modelService` is given — that factory owns its own construction.
184
+ */
185
+ modelServiceOptions?: ModelServiceOptions;
186
+ /**
187
+ * Override the {@link TransferEncoder} factory. Default: framework
188
+ * {@link TransferEncoder} with no overrides.
189
+ */
190
+ transferEncoder?: (services: ServerSharedServices<TProject>) => TransferEncoder<unknown, TDiagnostic>;
191
+ }
192
+
193
+ /**
194
+ * Bundle returned by {@link makeTestServices}. Exposes the assembled
195
+ * {@link ServerSharedServices} tree plus every stub the bundle composed,
196
+ * so tests can introspect or mutate the underlying state without re-wiring
197
+ * the tree. Each stub member is named after the slot it is bound on.
198
+ *
199
+ * This is the core harness and satisfies the uniform {@link Harness}
200
+ * contract — `services` is the **subject** (the assembled service tree the
201
+ * production code under test runs against), the individual `*` stubs are the
202
+ * **seam** (the doubles tests introspect / mutate), and `dispose()` is the
203
+ * uniform teardown hook (a no-op: the stubs hold only in-memory state,
204
+ * released with the bundle when it goes out of scope).
205
+ */
206
+ export interface TestServicesBundle<
207
+ TAst extends AstNode = AstNode,
208
+ TDiagnostic extends TransferDiagnostic = TransferDiagnostic,
209
+ TTransfer extends TransferElement = TransferElement,
210
+ TProject extends Project = Project
211
+ > extends Harness {
212
+ readonly services: ServerSharedServices<TProject>;
213
+ readonly documents: StubLangiumDocuments<TAst, TDiagnostic>;
214
+ readonly textDocuments: StubHydraniumTextDocuments;
215
+ readonly astDocumentManager: StubAstDocumentManager<TAst, TDiagnostic>;
216
+ readonly documentBuilder: StubDocumentBuilder;
217
+ readonly fileSystem: StubWritableFileSystem;
218
+ readonly selfSaveRegistry: StubSelfSaveRegistry;
219
+ readonly projectManager: StubProjectManager<TProject>;
220
+ readonly documentUriPolicy: DocumentUriPolicy;
221
+ /**
222
+ * The registry bound on the `ServiceRegistry` slot, or `undefined` when no
223
+ * {@link MakeTestServicesOptions.languages} were declared.
224
+ */
225
+ readonly serviceRegistry: StubServiceRegistry | undefined;
226
+ /**
227
+ * The stub bound on the `IndexManager` slot, or `undefined` when no
228
+ * {@link MakeTestServicesOptions.seedIndex} was passed.
229
+ */
230
+ readonly indexManager: StubIndexManager | undefined;
231
+ readonly modelService: ModelService<TAst, TDiagnostic, TTransfer>;
232
+ readonly transferEncoder: TransferEncoder<unknown, TDiagnostic>;
233
+ readonly logger: Logger;
234
+ /** The clock bound on the `Clock` slot — a `makeFakeClock()` if one was passed. */
235
+ readonly clock: Clock;
236
+ }
237
+
238
+ /**
239
+ * Build a {@link ServerSharedServices} tree backed by the framework's
240
+ * testing stubs. The returned bundle exposes both the tree and the
241
+ * individual stubs so tests can introspect.
242
+ *
243
+ * **Scope.** Langium-layer stubs only — no GLSP-shaped fixtures. Tests for
244
+ * code that runs against real Langium services (grammar parsing, scope
245
+ * computation, etc.) should keep using `bootstrapLangium(...)` rather than
246
+ * this bundle.
247
+ */
248
+ export function makeTestServices<
249
+ TAst extends AstNode = AstNode,
250
+ TDiagnostic extends TransferDiagnostic = TransferDiagnostic,
251
+ TTransfer extends TransferElement = TransferElement,
252
+ TProject extends Project = Project
253
+ >(
254
+ options: MakeTestServicesOptions<TAst, TDiagnostic, TTransfer, TProject> = {}
255
+ ): TestServicesBundle<TAst, TDiagnostic, TTransfer, TProject> {
256
+ const documents = makeStubLangiumDocuments<TAst, TDiagnostic>(options.seedDocuments);
257
+ const textDocuments = makeStubHydraniumTextDocuments();
258
+ const documentBuilder = makeStubDocumentBuilder();
259
+ const selfSaveRegistry = makeStubSelfSaveRegistry();
260
+ const fileSystem = makeStubWritableFileSystem(selfSaveRegistry);
261
+ const projectManager = makeStubProjectManager<TProject>(options.seedProjects);
262
+ const astDocumentManager = makeStubAstDocumentManager<TAst, TDiagnostic>(textDocuments, fileSystem, documents);
263
+ const logger = options.logger ?? new NoopLogger();
264
+ const clock = options.clock ?? new SystemClock();
265
+ const tracer = new DefaultTracer(logger, clock);
266
+ const documentUriPolicy = options.documentUriPolicy ?? new DefaultDocumentUriPolicy();
267
+ const serviceRegistry = options.languages
268
+ ? makeStubServiceRegistry(options.languages, { openLanguageIds: options.openLanguageIds })
269
+ : undefined;
270
+ const indexManager = options.seedIndex ? makeStubIndexManager(options.seedIndex) : undefined;
271
+
272
+ // Build the literal at its honest narrow type (TestSharedServices) so
273
+ // signature drift on any of these slots produces a compile error here, then
274
+ // cast at the boundary to ServerSharedServices so production consumers that
275
+ // expect the full service tree can accept it. The cast is `as unknown as`
276
+ // because TestSharedServices is structurally narrower (no AstNodeLocator,
277
+ // IndexManager, WorkspaceManager, …); production code that reads one of
278
+ // those slots off the bundle fails at runtime.
279
+ //
280
+ // **So adding a new service READ to a production path means adding the slot
281
+ // here too.** Nothing enforces it: the cast below erases the difference, so
282
+ // the omission surfaces as a runtime `undefined` inside whichever package
283
+ // happens to drive that path — typically several layers from the change, and
284
+ // in a package that did not touch the edit. Prefer the REAL service when it
285
+ // is dependency-free (as `HydraniumWorkspaceLock` is) — a no-op stub of a
286
+ // synchronisation primitive hides the very interleaving it exists to prevent.
287
+ //
288
+ // `model.TransferEncoder` / `model.ModelService` are populated below
289
+ // (after the factories run); the literal uses unsafe casts to
290
+ // partially-built objects to satisfy TestSharedServices, then patches
291
+ // them in.
292
+ const services: TestSharedServices<TAst, TDiagnostic, TTransfer, TProject> = {
293
+ Clock: clock,
294
+ Logger: logger,
295
+ Tracer: tracer,
296
+ // Spread rather than assigned so the slot is genuinely ABSENT (not
297
+ // present-and-undefined) when no languages were declared — `'ServiceRegistry'
298
+ // in services` is what an optional-chaining production path effectively asks.
299
+ ...(serviceRegistry ? { ServiceRegistry: serviceRegistry } : {}),
300
+ workspace: {
301
+ LangiumDocuments: documents,
302
+ DocumentBuilder: documentBuilder,
303
+ TextDocuments: textDocuments,
304
+ AstDocumentManager: astDocumentManager,
305
+ FileSystemProvider: fileSystem,
306
+ SelfSaveRegistry: selfSaveRegistry,
307
+ ProjectManager: projectManager,
308
+ DocumentUriPolicy: documentUriPolicy,
309
+ // Spread for the same reason as `ServiceRegistry` above — the slot must
310
+ // be genuinely ABSENT, not present-and-undefined, when no index was seeded.
311
+ ...(indexManager ? { IndexManager: indexManager } : {}),
312
+ WorkspaceLock: new HydraniumWorkspaceLock()
313
+ },
314
+ model: {} as TestSharedServices<TAst, TDiagnostic, TTransfer, TProject>['model']
315
+ };
316
+ const sharedServices = services as unknown as ServerSharedServices<TProject>;
317
+
318
+ const serialize = options.serialize ?? ((_uri: string, root: TTransfer) => JSON.stringify(root));
319
+ const transferEncoder = options.transferEncoder
320
+ ? options.transferEncoder(sharedServices)
321
+ : new TransferEncoder<unknown, TDiagnostic>(sharedServices);
322
+ const modelService = options.modelService
323
+ ? options.modelService(sharedServices)
324
+ : makeStubModelService<TAst, TDiagnostic, TTransfer>(sharedServices, serialize, options.modelServiceOptions);
325
+
326
+ const mutableModel = services.model as {
327
+ TransferEncoder: TransferEncoder<unknown, TDiagnostic>;
328
+ ModelService: ModelService<TAst, TDiagnostic, TTransfer>;
329
+ };
330
+ mutableModel.TransferEncoder = transferEncoder;
331
+ mutableModel.ModelService = modelService;
332
+
333
+ return {
334
+ services: sharedServices,
335
+ documents,
336
+ textDocuments,
337
+ astDocumentManager,
338
+ documentBuilder,
339
+ fileSystem,
340
+ selfSaveRegistry,
341
+ projectManager,
342
+ documentUriPolicy,
343
+ serviceRegistry,
344
+ indexManager,
345
+ modelService,
346
+ transferEncoder,
347
+ logger,
348
+ clock,
349
+ dispose: () => {
350
+ // No-op: the bundled stubs hold only in-memory state (maps, arrays),
351
+ // released with the bundle when it goes out of scope. The hook exists
352
+ // to satisfy the uniform Harness contract so teardown is always
353
+ // `harness.dispose()` regardless of which harness.
354
+ }
355
+ };
356
+ }
@@ -0,0 +1,92 @@
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 Clock, DefaultTracer, type Logger, type LogLevel, NoopLogger, SystemClock, type Tracer } from '@hydranium/protocol';
11
+
12
+ /**
13
+ * No-op {@link Tracer} for tests — discards all output with real fluent
14
+ * behaviour. Use to fill the `Tracer` slot of a hand-rolled fake services tree
15
+ * when the test doesn't assert on emitted output. Equivalent to
16
+ * `new DefaultTracer()` (which already defaults to a {@link NoopLogger} +
17
+ * {@link SystemClock}); the named helper reads better at call sites and gives a
18
+ * single place to evolve the test tracer.
19
+ */
20
+ export function makeNoopTracer(): Tracer {
21
+ return new DefaultTracer();
22
+ }
23
+
24
+ /**
25
+ * No-op {@link Logger} for tests — discards all output with real fluent
26
+ * behaviour (`for`/`sub`/`with` derive no-op children; `withUri`
27
+ * short-circuits to the same instance). Use to fill
28
+ * a `Logger` slot, or to satisfy a service/function that takes a bare `Logger`,
29
+ * when the test doesn't assert on emitted output. Equivalent to
30
+ * `new NoopLogger()`; the named helper is the bare-logger sibling of
31
+ * {@link makeNoopTracer} and gives a single place to evolve the test logger.
32
+ * Prefer this over hand-rolling a `{ for, sub, with, trace } as unknown as
33
+ * Logger` stub — those omit methods and drift from the real surface.
34
+ */
35
+ export function makeNoopLogger(): Logger {
36
+ return new NoopLogger();
37
+ }
38
+
39
+ /** A captured emission: log level + rendered message. */
40
+ export interface CapturedLine {
41
+ readonly level: LogLevel;
42
+ readonly message: string;
43
+ }
44
+
45
+ /** A {@link Logger} whose emitted lines are captured for assertions. */
46
+ export interface CapturingLogger {
47
+ readonly logger: Logger;
48
+ /** Every line emitted through the logger (and its derived children), in order. */
49
+ readonly lines: CapturedLine[];
50
+ }
51
+
52
+ /**
53
+ * Capturing {@link Logger} for tests that assert on emitted output. Backed by a
54
+ * complete {@link NoopLogger} subclass — so every emit method and `for`/`sub`/
55
+ * `with`/`withUri` derivation works fluently — that records each emitted line
56
+ * into {@link CapturingLogger.lines}. Derived child loggers share the same sink.
57
+ * Emission is still threshold-gated, so set the level (`Logger.setLevel(...)`)
58
+ * to the tier under test — `'trace'` captures everything. Prefer this over
59
+ * hand-rolling a capturing `{ info, warn, ... } as unknown as Logger` stub.
60
+ */
61
+ export function makeCapturingLogger(): CapturingLogger {
62
+ const lines: CapturedLine[] = [];
63
+ class Capturing extends NoopLogger {
64
+ protected override emit(level: LogLevel, _label: string, message: string): void {
65
+ lines.push({ level, message });
66
+ }
67
+ protected override derive(component: string): this {
68
+ return new Capturing(component) as this;
69
+ }
70
+ }
71
+ return { logger: new Capturing(), lines };
72
+ }
73
+
74
+ /** A {@link Tracer} whose emitted lines are captured for assertions. */
75
+ export interface CapturingTracer {
76
+ readonly tracer: Tracer;
77
+ /** Every line emitted through the tracer (and its derived children), in order. */
78
+ readonly lines: CapturedLine[];
79
+ }
80
+
81
+ /**
82
+ * Capturing {@link Tracer} for tests that assert on emitted output. Wraps a
83
+ * {@link makeCapturingLogger} in a {@link DefaultTracer} so timing/profiling
84
+ * lines are captured alongside plain log lines. Emission is threshold-gated, so
85
+ * set the level (`Logger.setLevel(...)`) to the tier under test. Pass a
86
+ * {@link Clock} to share the test's fake-time axis; defaults to
87
+ * {@link SystemClock}.
88
+ */
89
+ export function makeCapturingTracer(clock: Clock = new SystemClock()): CapturingTracer {
90
+ const { logger, lines } = makeCapturingLogger();
91
+ return { tracer: new DefaultTracer(logger, clock), lines };
92
+ }
@@ -0,0 +1,222 @@
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
+ /**
11
+ * Scaffolding for a generated on-disk corpus: the seeded PRNG, the
12
+ * overwrite permit, the newline normalisation and the per-extension tally.
13
+ * The caller supplies only the content.
14
+ *
15
+ * # Why the corpus is generated rather than committed
16
+ *
17
+ * A volume fixture is what a profiling run, a `watch` claim and any
18
+ * incremental-rebuild claim measure against, and it is several hundred files.
19
+ * Committing a deterministic generator and gitignoring its output keeps the
20
+ * artefact reproducible by any contributor at a fixed seed without the
21
+ * repository carrying the files.
22
+ *
23
+ * # Determinism is the whole contract, and it is fragile
24
+ *
25
+ * A performance figure is only readable beside another figure taken over the
26
+ * same input, so "same parameters, same bytes" is not a nicety. Three things
27
+ * break it and all three are handled here rather than left to each generator:
28
+ * `Math.random` (hence {@link GeneratedWorkspaceWriter.random}, a seeded
29
+ * mulberry32), a timestamp anywhere in the output (hence nothing written here
30
+ * records one), and platform line endings (hence
31
+ * {@link GeneratedWorkspaceWriter.write} normalising to LF).
32
+ *
33
+ * The draw order is the caller's responsibility, and it is the one that catches
34
+ * people out: the PRNG is a single stream, so a generator that reorders its
35
+ * emission — or draws conditionally on something it did not draw before —
36
+ * produces a different corpus at the same seed.
37
+ *
38
+ * # Size is a parameter because the signal is a CURVE
39
+ *
40
+ * An O(n²) regression in discovery, indexing, scope or linking is invisible in
41
+ * a single measurement: it shows up as the large/small ratio outrunning the
42
+ * file-count ratio. That is why this is a callable module rather than only a
43
+ * script — a bench runs it in-process at two sizes instead of shelling out —
44
+ * and why a generator built on it should take its sizes as options rather than
45
+ * fixing one N.
46
+ *
47
+ * # The marker is a permit, not a label
48
+ *
49
+ * Generating wipes the target directory, the caller names that directory, and
50
+ * the default is typically inside the repository. So the wipe needs
51
+ * authorisation: an absent directory, an empty one, or one already carrying the
52
+ * marker file. Anything else throws rather than deleting a tree this generator
53
+ * did not write.
54
+ */
55
+
56
+ import { existsSync, mkdirSync, readdirSync, rmSync, writeFileSync } from 'node:fs';
57
+ import * as path from 'node:path';
58
+
59
+ /** Default name of the file that records — and authorises — a generated corpus. */
60
+ export const GENERATED_WORKSPACE_MARKER = '.hydranium-generated-workspace';
61
+
62
+ /** The write surface {@link makeGeneratedWorkspace} hands to {@link GeneratedWorkspaceOptions.emit}. */
63
+ export interface GeneratedWorkspaceWriter {
64
+ /** Absolute, resolved path of the corpus root. Already created and empty. */
65
+ readonly root: string;
66
+ /**
67
+ * Next value of the seeded stream, in `[0, 1)`.
68
+ *
69
+ * One stream for the whole corpus, drawn in emission order — so this is
70
+ * reproducible only as long as the emission order is. Prefer drawing
71
+ * unconditionally over drawing inside a branch.
72
+ */
73
+ random(): number;
74
+ /** An integer in `[minimum, maximum]`, both inclusive, off the same stream. */
75
+ randomInt(minimum: number, maximum: number): number;
76
+ /**
77
+ * Write `content` at `relativePath` under {@link root}, creating parent
78
+ * directories, and count it in the summary's tally. Returns the absolute
79
+ * path.
80
+ *
81
+ * Line endings are normalised to LF, without which the corpus is not
82
+ * byte-identical across platforms and the determinism contract holds only on
83
+ * one OS.
84
+ */
85
+ write(relativePath: string, content: string): string;
86
+ /** Create a directory under {@link root} and return its absolute path. */
87
+ directory(relativePath: string): string;
88
+ }
89
+
90
+ /** Inputs to {@link makeGeneratedWorkspace}. */
91
+ export interface GeneratedWorkspaceOptions {
92
+ /** Directory to write into. Created if absent; wiped if the marker permits it. */
93
+ readonly root: string;
94
+ /**
95
+ * Identifies the generator in the marker file, so a corpus found on disk
96
+ * says what produced it. Free-form; a package-qualified name reads best.
97
+ */
98
+ readonly generator: string;
99
+ /**
100
+ * Recorded in the marker alongside the seed — the sizes the corpus was
101
+ * generated at, which is what makes a measurement taken over it
102
+ * interpretable later.
103
+ */
104
+ readonly parameters?: Readonly<Record<string, number | string | boolean>>;
105
+ /** Seed for the content stream. Defaults to `0`; the same seed reproduces the corpus byte for byte. */
106
+ readonly seed?: number;
107
+ /** Marker file name. Defaults to {@link GENERATED_WORKSPACE_MARKER}. */
108
+ readonly marker?: string;
109
+ /** Emit the content. Called once, after the root is prepared and the marker written. */
110
+ emit(writer: GeneratedWorkspaceWriter): void;
111
+ }
112
+
113
+ /** What {@link makeGeneratedWorkspace} wrote. */
114
+ export interface GeneratedWorkspaceSummary {
115
+ /** Absolute, resolved corpus root. */
116
+ readonly root: string;
117
+ /** Seed actually used, after the default. */
118
+ readonly seed: number;
119
+ /** Marker file name actually used, relative to {@link root}. */
120
+ readonly marker: string;
121
+ /**
122
+ * How many files `emit` wrote, keyed by extension WITH the leading dot
123
+ * (`'.domain'`). The marker is not counted; everything `emit` wrote is,
124
+ * including any README, so a caller wanting a model-file subtotal adds up
125
+ * the extensions it considers model files.
126
+ *
127
+ * A tally is worth returning rather than leaving to the caller because it is
128
+ * the cheap assertion that catches the expensive defect: a generator whose
129
+ * nested loops skip a file still reports the size it was asked for, and the
130
+ * corpus is then quietly smaller than the number a measurement is filed
131
+ * under. Read it against a count taken off the filesystem, not instead of
132
+ * one — this counts the calls, so it cannot see a failed write.
133
+ */
134
+ readonly files: Readonly<Record<string, number>>;
135
+ /** Total files `emit` wrote, the marker excluded. */
136
+ readonly total: number;
137
+ }
138
+
139
+ /**
140
+ * A deterministic 32-bit PRNG (mulberry32). Deliberately not `Math.random`: a
141
+ * corpus that varies per run cannot carry a comparable measurement.
142
+ */
143
+ function makeRandom(seed: number): () => number {
144
+ let state = seed >>> 0;
145
+ return () => {
146
+ state = (state + 0x6d2b79f5) >>> 0;
147
+ let mixed = state;
148
+ mixed = Math.imul(mixed ^ (mixed >>> 15), mixed | 1);
149
+ mixed ^= mixed + Math.imul(mixed ^ (mixed >>> 7), mixed | 61);
150
+ return ((mixed ^ (mixed >>> 14)) >>> 0) / 4294967296;
151
+ };
152
+ }
153
+
154
+ /**
155
+ * Prepare `root` for a fresh corpus, or throw naming the marker that would
156
+ * have authorised the wipe.
157
+ */
158
+ function prepareRoot(root: string, marker: string): void {
159
+ if (existsSync(root)) {
160
+ const entries = readdirSync(root);
161
+ if (entries.length > 0 && !entries.includes(marker)) {
162
+ throw new Error(
163
+ `Refusing to overwrite ${root}: it is not empty and carries no ${marker} marker. ` +
164
+ 'Point the output at a fresh directory, or delete this one yourself.'
165
+ );
166
+ }
167
+ rmSync(root, { recursive: true, force: true });
168
+ }
169
+ mkdirSync(root, { recursive: true });
170
+ }
171
+
172
+ /**
173
+ * Generate a corpus under `options.root` and return what was written.
174
+ *
175
+ * The marker is written BEFORE `emit` runs, so an emission that throws
176
+ * half-way leaves a directory the next run is still permitted to wipe. Writing
177
+ * it afterwards would strand a partial corpus that has to be deleted by hand,
178
+ * and it buys nothing: the marker only ever lands in a directory this function
179
+ * has just created or been authorised to clear.
180
+ */
181
+ export function makeGeneratedWorkspace(options: GeneratedWorkspaceOptions): GeneratedWorkspaceSummary {
182
+ const root = path.resolve(options.root);
183
+ const marker = options.marker ?? GENERATED_WORKSPACE_MARKER;
184
+ const seed = options.seed ?? 0;
185
+ if (!Number.isInteger(seed)) {
186
+ throw new Error(`seed must be an integer, got ${String(seed)}`);
187
+ }
188
+ prepareRoot(root, marker);
189
+
190
+ const random = makeRandom(seed);
191
+ const files: Record<string, number> = {};
192
+ let total = 0;
193
+ const writeFile = (target: string, content: string): void => {
194
+ mkdirSync(path.dirname(target), { recursive: true });
195
+ writeFileSync(target, content.replace(/\r\n/g, '\n'), 'utf8');
196
+ };
197
+
198
+ // Nothing here records a timestamp, which is the other half of the
199
+ // byte-reproducibility property the seeded stream gives.
200
+ writeFile(path.join(root, marker), `${JSON.stringify({ generator: options.generator, seed, ...options.parameters }, undefined, 2)}\n`);
201
+
202
+ options.emit({
203
+ root,
204
+ random,
205
+ randomInt: (minimum, maximum) => minimum + Math.floor(random() * (maximum - minimum + 1)),
206
+ write(relativePath, content) {
207
+ const target = path.join(root, relativePath);
208
+ writeFile(target, content);
209
+ const extension = path.extname(relativePath);
210
+ files[extension] = (files[extension] ?? 0) + 1;
211
+ total += 1;
212
+ return target;
213
+ },
214
+ directory(relativePath) {
215
+ const target = path.join(root, relativePath);
216
+ mkdirSync(target, { recursive: true });
217
+ return target;
218
+ }
219
+ });
220
+
221
+ return { root, seed, marker, files, total };
222
+ }