@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,316 @@
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
+ import { type MaybePromise, type Tracer, type TransferElement } from '@hydranium/protocol';
10
+ import { type AstNode, type AstReflection } from '@hydranium/langium';
11
+ import { type LogNameOptions } from '../diagnostics/logger.js';
12
+ import { type HydraniumLanguageServices } from '../language-module.js';
13
+ import { type Serializer } from './serializer.js';
14
+ /**
15
+ * Format-agnostic options shared by all {@link AbstractSerializer} implementations.
16
+ *
17
+ * Each field captures a piece of language-specific knowledge the algorithm
18
+ * cannot derive from grammar reflection alone. Format-specific subclasses
19
+ * (YAML, JSON, …) extend this with their own style settings.
20
+ *
21
+ * `propertyOrder` is the load-bearing one: Langium's generated AST uses
22
+ * interface-property order which doesn't match grammar-declaration order due
23
+ * to inheritance, so consumers ship an explicit per-type order map.
24
+ *
25
+ * `reflection` is intentionally NOT on this options shape — the serializer
26
+ * reads it from `services.shared.AstReflection` so adopters bind one
27
+ * source of truth at the DI graph rather than passing the reflection
28
+ * object explicitly. Keeping it off `AbstractSerializerOptions` matches the
29
+ * wider `(services, options)` constructor convention.
30
+ */
31
+ export interface AbstractSerializerOptions extends LogNameOptions {
32
+ /**
33
+ * Per-AST-type ordered list of property names, matching the grammar's
34
+ * declaration order. Optional — when no entry exists for a given type,
35
+ * the walker falls back to {@link Object.keys}(node), which yields the
36
+ * AST node's own key order (in practice Langium's parser populates
37
+ * properties in grammar-source order, so the fallback is usually
38
+ * correct). Adopters who care about deterministic per-type ordering
39
+ * — e.g. when augmenting the AST with extra fields the grammar didn't
40
+ * place — supply the map; adopters without that concern omit it.
41
+ */
42
+ readonly propertyOrder?: ReadonlyMap<string, readonly string[]>;
43
+ /**
44
+ * AST types that exist to wrap a single cross-reference. Maps the
45
+ * type name to the property holding the reference. The serializer emits
46
+ * just the reference id, dropping the wrapper noise. Defaults to an empty
47
+ * map — grammars without single-reference wrapper types omit this.
48
+ *
49
+ * A type may stay in this map even when it declares further optional
50
+ * properties: the collapse only applies while every other property is
51
+ * empty (see {@link AbstractSerializer.getReferenceWrapperProperty}), so
52
+ * a wrapper that grows an optional property keeps its collapsed form for
53
+ * existing documents and switches to a regular property block as soon as
54
+ * the extra property carries a value.
55
+ */
56
+ readonly referenceWrapperTypes?: ReadonlyMap<string, string>;
57
+ /**
58
+ * Whether {@link AbstractSerializer.serializeAst} trims trailing whitespace
59
+ * from the final output (leading whitespace is always trimmed). Defaults to
60
+ * `true` — the conventional "no trailing blank lines" document shape. Set to
61
+ * `false` for grammars whose values may legitimately END the document with
62
+ * blank lines that must survive a round-trip — e.g. a multi-line block-scalar
63
+ * property (see `YamlSerializerOptions.blockScalarProperties`),
64
+ * where a trailing-trim would silently eat user-typed blank lines.
65
+ */
66
+ readonly trimTrailingWhitespace?: boolean;
67
+ }
68
+ /**
69
+ * Abstract base for hand-written grammar-aware AST → text serializers.
70
+ *
71
+ * Langium ships no serializer ([discussion 683]; [discussion 863]) so
72
+ * consumers roll their own. This class is the shared algorithm — a
73
+ * property-by-property walk in grammar-declared order, dispatching each value
74
+ * through type-aware paths (references, id properties, inline types,
75
+ * reference-wrapper types, nested AST nodes, arrays, primitives).
76
+ *
77
+ * The same algorithm handles two value shapes uniformly:
78
+ * - **AST mode** — direct Langium AST nodes with `Reference` objects.
79
+ * - **Transfer-model mode** — structurally equivalent objects where references
80
+ * are plain string ids.
81
+ *
82
+ * Both shapes round-trip through {@link serializeReferenceText}, so consumers
83
+ * don't need a separate serializer per mode — and that holds for a subclass
84
+ * that replaces the generic walk with hand-written per-`$type` emitters, not
85
+ * only for one that inherits it. Such an emitter calls
86
+ * {@link serializeReferenceText} directly, so it is the single method that has
87
+ * to understand both shapes; see its contract for why gating on
88
+ * {@link isReferenceProperty} inside {@link serializePropertyValue} is what
89
+ * makes that safe.
90
+ *
91
+ * Format-specific subclasses (`YamlSerializer`,
92
+ * `JsonSerializer`) implement the abstract
93
+ * methods to lay out the actual output text: how a node's properties are
94
+ * composed into an object representation, how arrays are bracketed, and how
95
+ * indentation is rendered.
96
+ *
97
+ * **Extension points** (override in a subclass):
98
+ * - {@link serializeReferenceText} — extract the textual form of a
99
+ * cross-reference; defaults to the value's `$refText`.
100
+ * - {@link formatReferenceValue} — format a cross-reference value for emission;
101
+ * defaults to `JSON.stringify`.
102
+ * - {@link serializeCustomValue} — type-specific serialization for values
103
+ * that don't fit the generic paths. Runs after all reference detection, so
104
+ * references never reach this hook. Returns `undefined` to fall through to
105
+ * the default handling.
106
+ *
107
+ * [discussion 683]: https://github.com/langium/langium/discussions/683
108
+ * [discussion 863]: https://github.com/langium/langium/discussions/863
109
+ */
110
+ export declare abstract class AbstractSerializer<TAst extends AstNode = AstNode, TTransfer extends TransferElement = TransferElement> implements Serializer<TAst, TTransfer> {
111
+ protected readonly services: HydraniumLanguageServices;
112
+ protected readonly options: AbstractSerializerOptions;
113
+ protected readonly reflection: AstReflection;
114
+ protected readonly tracer: Tracer;
115
+ constructor(services: HydraniumLanguageServices, options?: AbstractSerializerOptions);
116
+ /**
117
+ * Entry point for AST-shape inputs. Typically the grammar root, but any
118
+ * AST node works — the walker is recursive and shape-agnostic.
119
+ *
120
+ * Preserves the sync fast path: when every subclass override and every
121
+ * adopter hook is sync, the return is a bare `string` (no Promise
122
+ * allocation, no microtask). The async branch fires only if at least one
123
+ * recursive `serializeNode` call resolved to a Promise.
124
+ */
125
+ serializeAst(model: TAst): MaybePromise<string>;
126
+ /**
127
+ * Trim the final serialized output. Leading whitespace is always removed;
128
+ * trailing whitespace is removed unless {@link AbstractSerializerOptions.trimTrailingWhitespace}
129
+ * is `false` (which preserves document-ending blank lines, e.g. inside a block scalar).
130
+ */
131
+ protected trimSerialized(text: string | undefined): string;
132
+ /**
133
+ * Entry point for transfer-model-shape inputs (cross-references as plain
134
+ * string ids rather than `Reference` objects).
135
+ * Typically the transfer root, but any transfer element works.
136
+ *
137
+ * Default delegates back to {@link serializeAst} because the property
138
+ * walker is shape-agnostic — both shapes traverse the same
139
+ * {@link serializePropertyValue} dispatch and resolve references through
140
+ * the same {@link serializeReferenceText} read.
141
+ * Adopters who need shape-specific formatting override this method
142
+ * independently.
143
+ *
144
+ * The `as unknown as TAst` cast is honest: `TAst` and `TTransfer` are
145
+ * independent narrowings of two different `AstNode`-rooted hierarchies, so
146
+ * TS rightly refuses a direct narrowing. The walker reads only `$type` and
147
+ * property values, so the runtime read does not depend on the assignment
148
+ * being type-correct.
149
+ */
150
+ serializeTransfer(model: TTransfer): MaybePromise<string>;
151
+ /**
152
+ * Format-specific layout of an AST or transfer-model node's properties.
153
+ * Subclasses iterate {@link getOrderedPropertyNames}, call
154
+ * {@link serializePropertyValue} per property, and compose the results
155
+ * into the format's object representation.
156
+ *
157
+ * Returns {@link MaybePromise} so subclasses may transparently await
158
+ * async adopter hooks; the per-property loop in each subclass gates with
159
+ * {@link isPromiseLike} so sync hooks skip the microtask per
160
+ * iteration.
161
+ *
162
+ * @param isArrayElement when `true`, the caller is producing an array
163
+ * element — formats may use this to suppress leading indentation
164
+ * (YAML's `- ` prefix handles alignment).
165
+ */
166
+ protected abstract serializeNode(node: AstNode | Record<string, unknown>, indentationLevel: number, isArrayElement?: boolean): MaybePromise<string>;
167
+ /** Format-specific layout of an array of non-reference values. */
168
+ protected abstract serializeArray(items: unknown[], nodeType: string, key: string, indentationLevel: number): MaybePromise<string>;
169
+ /** Format-specific layout of an array of reference values (Langium References or plain strings). */
170
+ protected abstract serializeReferenceArray(items: unknown[], indentationLevel: number): MaybePromise<string>;
171
+ /**
172
+ * Serialize a single property value. Dispatch order (first match wins):
173
+ *
174
+ * 1. `$`-prefixed keys are skipped (Langium internals — `$type`, `$container`, …).
175
+ * 2. Reference-typed property (per grammar reflection): an array via
176
+ * {@link serializeReferenceArray}, otherwise a single reference via
177
+ * {@link serializeReferenceText} — which resolves an AST-mode Langium
178
+ * `Reference` and a transfer-mode plain string id alike.
179
+ * 3. Reference-wrapper AST node — emitted as the wrapped reference id
180
+ * (only while the node's other properties are empty, see
181
+ * {@link getReferenceWrapperProperty}).
182
+ * 4. {@link serializeCustomValue} hook — type-specific consumer overrides.
183
+ * 5. Nested AST node — recurse into {@link serializeNode}.
184
+ * 6. Array — element-by-element via {@link serializeArray}.
185
+ * 7. Anything else — {@link formatPrimitive}.
186
+ *
187
+ * Reference detection (steps 2-3) runs before {@link serializeCustomValue}
188
+ * so that references in either shape always route through
189
+ * {@link formatReferenceValue}; the custom hook never has to defend against
190
+ * them.
191
+ *
192
+ * **Reflection is consulted before the value is inspected**, and that order
193
+ * is load-bearing: it is what lets {@link serializeReferenceText} accept a
194
+ * bare transfer-mode id without a primitive string property such as `name`
195
+ * being mistaken for a cross-reference. Inspecting the value first would
196
+ * force the two shapes down two different code paths — and a hand-written
197
+ * emitter, which has no `(nodeType, key)` pair to offer, could then only
198
+ * reach the AST-mode one.
199
+ *
200
+ * Returns {@link MaybePromise} but does not `await` internally: each
201
+ * dispatch branch either returns a sync value directly or returns the
202
+ * recursive call's result verbatim. Callers (the subclass loops) gate
203
+ * with {@link isPromiseLike} so sync values bypass the
204
+ * microtask per iteration.
205
+ *
206
+ * @param isArrayElement when `true`, nested nodes do not indent their first
207
+ * property (the array element prefix handles alignment).
208
+ */
209
+ protected serializePropertyValue(nodeType: string, key: string, value: unknown, indentationLevel: number, isArrayElement?: boolean): MaybePromise<string | undefined>;
210
+ /**
211
+ * Render a cross-reference to the text the grammar accepts, in **either**
212
+ * serialization shape:
213
+ *
214
+ * - **AST mode** — a Langium `Reference`, or any `{ $refText }` object.
215
+ * Langium's `isReference` additionally requires a resolved `ref`, but the
216
+ * emitted text is the same `$refText` either way, so the single
217
+ * {@link isRefTextObject} check covers both. Reading `$refText` rather
218
+ * than the resolved target is deliberate: an unresolvable reference then
219
+ * round-trips as the text the user typed instead of being dropped.
220
+ * - **Transfer mode** — a plain string id, which the framework
221
+ * `TransferEncoder` emits for every cross-reference.
222
+ *
223
+ * Returns `undefined` only when the value is neither.
224
+ *
225
+ * **Call this only on values that ARE cross-references.** A bare string is
226
+ * indistinguishable from a primitive string value, so this method trusts
227
+ * its caller. The generic walker earns that trust by gating on
228
+ * {@link isReferenceProperty} (see {@link serializePropertyValue}); a
229
+ * hand-written per-`$type` emitter earns it by construction, because the
230
+ * author calls this on a property they know the grammar declares a
231
+ * reference. That is what makes ONE method correct for both the walker and
232
+ * a custom concrete syntax.
233
+ *
234
+ * Override to apply an adopter-specific reference-text convention — e.g.
235
+ * deriving text from the resolved target via the language's `NameProvider`
236
+ * when `$refText` is empty. The default deliberately does not reach for the
237
+ * `NameProvider`: a real Langium `Reference` always carries a `$refText`
238
+ * string, so no fallback can fire on the common path.
239
+ *
240
+ * Distinct from `ReferenceBuilder.getReferenceName`, which *mints* the name
241
+ * for a NEW reference from a source↔target relationship. This one *renders*
242
+ * a reference that already exists.
243
+ */
244
+ protected serializeReferenceText(value: unknown): string | undefined;
245
+ /**
246
+ * Whether a property should be skipped because it carries no meaningful
247
+ * value: `undefined`, `null`, an empty array, a default value per grammar
248
+ * reflection, or a blank string. Subclasses may override to widen or
249
+ * narrow the skip policy.
250
+ */
251
+ protected shouldSkipProperty(nodeType: string, prop: string, value: unknown): boolean;
252
+ /**
253
+ * Resolve the property that collapses a reference-wrapper node
254
+ * ({@link AbstractSerializerOptions.referenceWrapperTypes}) to its bare
255
+ * reference id, or `undefined` when the node carries additional non-empty
256
+ * GRAMMAR-DECLARED properties and must serialize as a regular nested node
257
+ * instead — an unconditional collapse would silently drop those values.
258
+ *
259
+ * The scan reads the declared property names from grammar reflection, NOT
260
+ * the node's own keys: transfer-model objects may carry synthesized
261
+ * companion fields (display labels, derived projections) that never
262
+ * persist, and counting those as "more" would break the collapse for
263
+ * every wrapper that crosses the wire in an enriched projection.
264
+ *
265
+ * Emptiness is judged by {@link shouldSkipProperty} plus one
266
+ * reference-specific rule: a reference object with a blank `$refText` is
267
+ * an unset reference and counts as empty. The rule lives here rather than
268
+ * in {@link shouldSkipProperty} so regular property emission is unchanged.
269
+ *
270
+ * Works on both value shapes — Langium AST nodes and transfer-model
271
+ * objects (plain string reference ids).
272
+ */
273
+ protected getReferenceWrapperProperty(node: AstNode): string | undefined;
274
+ /**
275
+ * Per-type ordered property names. Resolves the configured
276
+ * {@link AbstractSerializerOptions.propertyOrder} entry for `type`; falls back
277
+ * to the node's own JS-key order ({@link Object.keys}) when no entry
278
+ * exists. The walker filters `$`-prefixed keys downstream in
279
+ * {@link serializePropertyValue}, so passing every own key here is safe.
280
+ */
281
+ protected getOrderedPropertyNames(node: AstNode | Record<string, unknown>, type: string): readonly string[];
282
+ /**
283
+ * Format a cross-reference value for emission. Defaults to `JSON.stringify`.
284
+ * Override to apply language-specific reference quoting — e.g. an
285
+ * id-reference formatter that mirrors the grammar's id convention.
286
+ *
287
+ * Returns {@link MaybePromise} so adopters with async formatting needs
288
+ * (remote schema lookup, external canonical-id resolution) can return a
289
+ * `Promise<string>`. Sync overrides remain valid.
290
+ */
291
+ protected formatReferenceValue(value: string): MaybePromise<string>;
292
+ /**
293
+ * Format a primitive value (string, number, boolean) for emission. Defaults
294
+ * to `JSON.stringify`, which quotes strings, formats numbers/booleans, and
295
+ * is valid both as a YAML scalar and a JSON value.
296
+ *
297
+ * Returns {@link MaybePromise} so adopters with async formatting needs
298
+ * (e.g. delegating to `prettier.format` for a specific value class) can
299
+ * return a `Promise<string>`.
300
+ */
301
+ protected formatPrimitive(value: unknown): MaybePromise<string>;
302
+ /**
303
+ * Hook for type-specific serialization that doesn't fit the generic
304
+ * dispatch table. Runs after all reference detection (steps 2-4 of
305
+ * {@link serializePropertyValue}) and before the nested-AST-node recurse,
306
+ * so references never reach this hook and the override may key purely on
307
+ * `(nodeType, key, value)`. Return `undefined` to fall through to the
308
+ * default handling. Default: returns `undefined` for everything.
309
+ *
310
+ * The in-repo override is
311
+ * `YamlSerializer`'s, which emits
312
+ * grammar-declared unquoted terminals as bare strings.
313
+ */
314
+ protected serializeCustomValue(_nodeType: string, _key: string, _value: unknown, _indentationLevel: number): MaybePromise<string | undefined>;
315
+ }
316
+ //# sourceMappingURL=abstract-serializer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"abstract-serializer.d.ts","sourceRoot":"","sources":["../../../src/langium/serialization/abstract-serializer.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF,OAAO,EAAiB,KAAK,YAAY,EAAE,KAAK,MAAM,EAAE,KAAK,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC1G,OAAO,EAAE,KAAK,OAAO,EAAE,KAAK,aAAa,EAAkC,MAAM,oBAAoB,CAAC;AACtG,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,KAAK,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AACvE,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAYlD;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,WAAW,yBAA0B,SAAQ,cAAc;IAC9D;;;;;;;;;OASG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAAC;IAChE;;;;;;;;;;;;OAYG;IACH,QAAQ,CAAC,qBAAqB,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7D;;;;;;;;OAQG;IACH,QAAQ,CAAC,sBAAsB,CAAC,EAAE,OAAO,CAAC;CAC5C;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AACH,8BAAsB,kBAAkB,CACrC,IAAI,SAAS,OAAO,GAAG,OAAO,EAC9B,SAAS,SAAS,eAAe,GAAG,eAAe,CACpD,YAAW,UAAU,CAAC,IAAI,EAAE,SAAS,CAAC;IAKlC,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,yBAAyB;IACtD,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,yBAAyB;IALxD,SAAS,CAAC,QAAQ,CAAC,UAAU,EAAE,aAAa,CAAC;IAC7C,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;gBAGZ,QAAQ,EAAE,yBAAyB,EACnC,OAAO,GAAE,yBAA8B;IAM7D;;;;;;;;OAQG;IACH,YAAY,CAAC,KAAK,EAAE,IAAI,GAAG,YAAY,CAAC,MAAM,CAAC;IAQ/C;;;;OAIG;IACH,SAAS,CAAC,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM;IAO1D;;;;;;;;;;;;;;;;;OAiBG;IACH,iBAAiB,CAAC,KAAK,EAAE,SAAS,GAAG,YAAY,CAAC,MAAM,CAAC;IAIzD;;;;;;;;;;;;;;OAcG;IACH,SAAS,CAAC,QAAQ,CAAC,aAAa,CAC7B,IAAI,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACvC,gBAAgB,EAAE,MAAM,EACxB,cAAc,CAAC,EAAE,OAAO,GACxB,YAAY,CAAC,MAAM,CAAC;IAEvB,kEAAkE;IAClE,SAAS,CAAC,QAAQ,CAAC,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC;IAElI,oGAAoG;IACpG,SAAS,CAAC,QAAQ,CAAC,uBAAuB,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,gBAAgB,EAAE,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC;IAE5G;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAqCG;IACH,SAAS,CAAC,sBAAsB,CAC7B,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,OAAO,EACd,gBAAgB,EAAE,MAAM,EACxB,cAAc,UAAQ,GACtB,YAAY,CAAC,MAAM,GAAG,SAAS,CAAC;IAqDnC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAiCG;IACH,SAAS,CAAC,sBAAsB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS;IAOpE;;;;;OAKG;IACH,SAAS,CAAC,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO;IAgBrF;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,SAAS,CAAC,2BAA2B,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS;IAoBxE;;;;;;OAMG;IACH,SAAS,CAAC,uBAAuB,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE;IAI3G;;;;;;;;OAQG;IACH,SAAS,CAAC,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC;IAInE;;;;;;;;OAQG;IACH,SAAS,CAAC,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,YAAY,CAAC,MAAM,CAAC;IAI/D;;;;;;;;;;;OAWG;IACH,SAAS,CAAC,oBAAoB,CAC3B,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,OAAO,EACf,iBAAiB,EAAE,MAAM,GACzB,YAAY,CAAC,MAAM,GAAG,SAAS,CAAC;CAGrC"}
@@ -0,0 +1,351 @@
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
+ import { isPromiseLike } from '@hydranium/protocol';
10
+ import { isAstNode } from '@hydranium/langium';
11
+ import { isDefaultValue, isReferenceProperty } from './serialization-util.js';
12
+ function isRefTextObject(value) {
13
+ return typeof value === 'object' && value !== null && '$refText' in value && typeof value.$refText === 'string';
14
+ }
15
+ /**
16
+ * Abstract base for hand-written grammar-aware AST → text serializers.
17
+ *
18
+ * Langium ships no serializer ([discussion 683]; [discussion 863]) so
19
+ * consumers roll their own. This class is the shared algorithm — a
20
+ * property-by-property walk in grammar-declared order, dispatching each value
21
+ * through type-aware paths (references, id properties, inline types,
22
+ * reference-wrapper types, nested AST nodes, arrays, primitives).
23
+ *
24
+ * The same algorithm handles two value shapes uniformly:
25
+ * - **AST mode** — direct Langium AST nodes with `Reference` objects.
26
+ * - **Transfer-model mode** — structurally equivalent objects where references
27
+ * are plain string ids.
28
+ *
29
+ * Both shapes round-trip through {@link serializeReferenceText}, so consumers
30
+ * don't need a separate serializer per mode — and that holds for a subclass
31
+ * that replaces the generic walk with hand-written per-`$type` emitters, not
32
+ * only for one that inherits it. Such an emitter calls
33
+ * {@link serializeReferenceText} directly, so it is the single method that has
34
+ * to understand both shapes; see its contract for why gating on
35
+ * {@link isReferenceProperty} inside {@link serializePropertyValue} is what
36
+ * makes that safe.
37
+ *
38
+ * Format-specific subclasses (`YamlSerializer`,
39
+ * `JsonSerializer`) implement the abstract
40
+ * methods to lay out the actual output text: how a node's properties are
41
+ * composed into an object representation, how arrays are bracketed, and how
42
+ * indentation is rendered.
43
+ *
44
+ * **Extension points** (override in a subclass):
45
+ * - {@link serializeReferenceText} — extract the textual form of a
46
+ * cross-reference; defaults to the value's `$refText`.
47
+ * - {@link formatReferenceValue} — format a cross-reference value for emission;
48
+ * defaults to `JSON.stringify`.
49
+ * - {@link serializeCustomValue} — type-specific serialization for values
50
+ * that don't fit the generic paths. Runs after all reference detection, so
51
+ * references never reach this hook. Returns `undefined` to fall through to
52
+ * the default handling.
53
+ *
54
+ * [discussion 683]: https://github.com/langium/langium/discussions/683
55
+ * [discussion 863]: https://github.com/langium/langium/discussions/863
56
+ */
57
+ export class AbstractSerializer {
58
+ services;
59
+ options;
60
+ reflection;
61
+ tracer;
62
+ constructor(services, options = {}) {
63
+ this.services = services;
64
+ this.options = options;
65
+ this.reflection = services.shared.AstReflection;
66
+ this.tracer = services.shared.Tracer.for(options.logName ?? this.constructor.name).trace('instantiated');
67
+ }
68
+ /**
69
+ * Entry point for AST-shape inputs. Typically the grammar root, but any
70
+ * AST node works — the walker is recursive and shape-agnostic.
71
+ *
72
+ * Preserves the sync fast path: when every subclass override and every
73
+ * adopter hook is sync, the return is a bare `string` (no Promise
74
+ * allocation, no microtask). The async branch fires only if at least one
75
+ * recursive `serializeNode` call resolved to a Promise.
76
+ */
77
+ serializeAst(model) {
78
+ const result = this.serializeNode(model, 0);
79
+ if (isPromiseLike(result)) {
80
+ return result.then(text => this.trimSerialized(text));
81
+ }
82
+ return this.trimSerialized(result);
83
+ }
84
+ /**
85
+ * Trim the final serialized output. Leading whitespace is always removed;
86
+ * trailing whitespace is removed unless {@link AbstractSerializerOptions.trimTrailingWhitespace}
87
+ * is `false` (which preserves document-ending blank lines, e.g. inside a block scalar).
88
+ */
89
+ trimSerialized(text) {
90
+ if (text === undefined) {
91
+ return '';
92
+ }
93
+ return this.options.trimTrailingWhitespace === false ? text.trimStart() : text.trim();
94
+ }
95
+ /**
96
+ * Entry point for transfer-model-shape inputs (cross-references as plain
97
+ * string ids rather than `Reference` objects).
98
+ * Typically the transfer root, but any transfer element works.
99
+ *
100
+ * Default delegates back to {@link serializeAst} because the property
101
+ * walker is shape-agnostic — both shapes traverse the same
102
+ * {@link serializePropertyValue} dispatch and resolve references through
103
+ * the same {@link serializeReferenceText} read.
104
+ * Adopters who need shape-specific formatting override this method
105
+ * independently.
106
+ *
107
+ * The `as unknown as TAst` cast is honest: `TAst` and `TTransfer` are
108
+ * independent narrowings of two different `AstNode`-rooted hierarchies, so
109
+ * TS rightly refuses a direct narrowing. The walker reads only `$type` and
110
+ * property values, so the runtime read does not depend on the assignment
111
+ * being type-correct.
112
+ */
113
+ serializeTransfer(model) {
114
+ return this.serializeAst(model);
115
+ }
116
+ /**
117
+ * Serialize a single property value. Dispatch order (first match wins):
118
+ *
119
+ * 1. `$`-prefixed keys are skipped (Langium internals — `$type`, `$container`, …).
120
+ * 2. Reference-typed property (per grammar reflection): an array via
121
+ * {@link serializeReferenceArray}, otherwise a single reference via
122
+ * {@link serializeReferenceText} — which resolves an AST-mode Langium
123
+ * `Reference` and a transfer-mode plain string id alike.
124
+ * 3. Reference-wrapper AST node — emitted as the wrapped reference id
125
+ * (only while the node's other properties are empty, see
126
+ * {@link getReferenceWrapperProperty}).
127
+ * 4. {@link serializeCustomValue} hook — type-specific consumer overrides.
128
+ * 5. Nested AST node — recurse into {@link serializeNode}.
129
+ * 6. Array — element-by-element via {@link serializeArray}.
130
+ * 7. Anything else — {@link formatPrimitive}.
131
+ *
132
+ * Reference detection (steps 2-3) runs before {@link serializeCustomValue}
133
+ * so that references in either shape always route through
134
+ * {@link formatReferenceValue}; the custom hook never has to defend against
135
+ * them.
136
+ *
137
+ * **Reflection is consulted before the value is inspected**, and that order
138
+ * is load-bearing: it is what lets {@link serializeReferenceText} accept a
139
+ * bare transfer-mode id without a primitive string property such as `name`
140
+ * being mistaken for a cross-reference. Inspecting the value first would
141
+ * force the two shapes down two different code paths — and a hand-written
142
+ * emitter, which has no `(nodeType, key)` pair to offer, could then only
143
+ * reach the AST-mode one.
144
+ *
145
+ * Returns {@link MaybePromise} but does not `await` internally: each
146
+ * dispatch branch either returns a sync value directly or returns the
147
+ * recursive call's result verbatim. Callers (the subclass loops) gate
148
+ * with {@link isPromiseLike} so sync values bypass the
149
+ * microtask per iteration.
150
+ *
151
+ * @param isArrayElement when `true`, nested nodes do not indent their first
152
+ * property (the array element prefix handles alignment).
153
+ */
154
+ serializePropertyValue(nodeType, key, value, indentationLevel, isArrayElement = false) {
155
+ if (key.startsWith('$')) {
156
+ return undefined;
157
+ }
158
+ // Reference-typed properties (per grammar reflection), in EITHER shape: an
159
+ // array of references, or a single reference resolved by
160
+ // `serializeReferenceText`. Gating on reflection first is what lets that
161
+ // method accept a bare transfer-mode id — it only ever sees values the
162
+ // grammar declares a cross-reference, so a plain string property such as
163
+ // `name` can never be mistaken for one.
164
+ if (isReferenceProperty(this.reflection, nodeType, key)) {
165
+ if (Array.isArray(value)) {
166
+ return this.serializeReferenceArray(value, indentationLevel);
167
+ }
168
+ const reference = this.serializeReferenceText(value);
169
+ if (reference !== undefined) {
170
+ return this.formatReferenceValue(reference);
171
+ }
172
+ }
173
+ // Reference wrapper types: a node that exists to wrap a reference, collapsed to the
174
+ // bare reference id while its other properties are empty.
175
+ if (isAstNode(value)) {
176
+ const refProperty = this.getReferenceWrapperProperty(value);
177
+ if (refProperty) {
178
+ const propertyReference = this.serializeReferenceText(value[refProperty]);
179
+ if (propertyReference !== undefined) {
180
+ return this.formatReferenceValue(propertyReference);
181
+ }
182
+ }
183
+ }
184
+ // Custom hook: type-specific consumer overrides (runs after reference detection).
185
+ const custom = this.serializeCustomValue(nodeType, key, value, indentationLevel);
186
+ if (custom !== undefined) {
187
+ return custom;
188
+ }
189
+ // Nested AST node: recurse.
190
+ if (isAstNode(value)) {
191
+ return this.serializeNode(value, indentationLevel, isArrayElement);
192
+ }
193
+ // Arrays of non-reference values.
194
+ if (Array.isArray(value)) {
195
+ return this.serializeArray(value, nodeType, key, indentationLevel);
196
+ }
197
+ // Primitive values.
198
+ return this.formatPrimitive(value);
199
+ }
200
+ /**
201
+ * Render a cross-reference to the text the grammar accepts, in **either**
202
+ * serialization shape:
203
+ *
204
+ * - **AST mode** — a Langium `Reference`, or any `{ $refText }` object.
205
+ * Langium's `isReference` additionally requires a resolved `ref`, but the
206
+ * emitted text is the same `$refText` either way, so the single
207
+ * {@link isRefTextObject} check covers both. Reading `$refText` rather
208
+ * than the resolved target is deliberate: an unresolvable reference then
209
+ * round-trips as the text the user typed instead of being dropped.
210
+ * - **Transfer mode** — a plain string id, which the framework
211
+ * `TransferEncoder` emits for every cross-reference.
212
+ *
213
+ * Returns `undefined` only when the value is neither.
214
+ *
215
+ * **Call this only on values that ARE cross-references.** A bare string is
216
+ * indistinguishable from a primitive string value, so this method trusts
217
+ * its caller. The generic walker earns that trust by gating on
218
+ * {@link isReferenceProperty} (see {@link serializePropertyValue}); a
219
+ * hand-written per-`$type` emitter earns it by construction, because the
220
+ * author calls this on a property they know the grammar declares a
221
+ * reference. That is what makes ONE method correct for both the walker and
222
+ * a custom concrete syntax.
223
+ *
224
+ * Override to apply an adopter-specific reference-text convention — e.g.
225
+ * deriving text from the resolved target via the language's `NameProvider`
226
+ * when `$refText` is empty. The default deliberately does not reach for the
227
+ * `NameProvider`: a real Langium `Reference` always carries a `$refText`
228
+ * string, so no fallback can fire on the common path.
229
+ *
230
+ * Distinct from `ReferenceBuilder.getReferenceName`, which *mints* the name
231
+ * for a NEW reference from a source↔target relationship. This one *renders*
232
+ * a reference that already exists.
233
+ */
234
+ serializeReferenceText(value) {
235
+ if (isRefTextObject(value)) {
236
+ return value.$refText;
237
+ }
238
+ return typeof value === 'string' ? value : undefined;
239
+ }
240
+ /**
241
+ * Whether a property should be skipped because it carries no meaningful
242
+ * value: `undefined`, `null`, an empty array, a default value per grammar
243
+ * reflection, or a blank string. Subclasses may override to widen or
244
+ * narrow the skip policy.
245
+ */
246
+ shouldSkipProperty(nodeType, prop, value) {
247
+ if (value === undefined || value === null) {
248
+ return true;
249
+ }
250
+ if (Array.isArray(value) && value.length === 0) {
251
+ return true;
252
+ }
253
+ if (isDefaultValue(this.reflection, nodeType, prop, value)) {
254
+ return true;
255
+ }
256
+ if (typeof value === 'string' && value.trim() === '') {
257
+ return true;
258
+ }
259
+ return false;
260
+ }
261
+ /**
262
+ * Resolve the property that collapses a reference-wrapper node
263
+ * ({@link AbstractSerializerOptions.referenceWrapperTypes}) to its bare
264
+ * reference id, or `undefined` when the node carries additional non-empty
265
+ * GRAMMAR-DECLARED properties and must serialize as a regular nested node
266
+ * instead — an unconditional collapse would silently drop those values.
267
+ *
268
+ * The scan reads the declared property names from grammar reflection, NOT
269
+ * the node's own keys: transfer-model objects may carry synthesized
270
+ * companion fields (display labels, derived projections) that never
271
+ * persist, and counting those as "more" would break the collapse for
272
+ * every wrapper that crosses the wire in an enriched projection.
273
+ *
274
+ * Emptiness is judged by {@link shouldSkipProperty} plus one
275
+ * reference-specific rule: a reference object with a blank `$refText` is
276
+ * an unset reference and counts as empty. The rule lives here rather than
277
+ * in {@link shouldSkipProperty} so regular property emission is unchanged.
278
+ *
279
+ * Works on both value shapes — Langium AST nodes and transfer-model
280
+ * objects (plain string reference ids).
281
+ */
282
+ getReferenceWrapperProperty(node) {
283
+ const referenceProperty = this.options.referenceWrapperTypes?.get(node.$type);
284
+ if (!referenceProperty) {
285
+ return undefined;
286
+ }
287
+ const generic = node;
288
+ const declaredProperties = Object.keys(this.reflection.getTypeMetaData(node.$type).properties);
289
+ const carriesMore = declaredProperties.some(property => {
290
+ if (property === referenceProperty) {
291
+ return false;
292
+ }
293
+ const propertyValue = generic[property];
294
+ if (isRefTextObject(propertyValue) && propertyValue.$refText.trim() === '') {
295
+ return false;
296
+ }
297
+ return !this.shouldSkipProperty(node.$type, property, propertyValue);
298
+ });
299
+ return carriesMore ? undefined : referenceProperty;
300
+ }
301
+ /**
302
+ * Per-type ordered property names. Resolves the configured
303
+ * {@link AbstractSerializerOptions.propertyOrder} entry for `type`; falls back
304
+ * to the node's own JS-key order ({@link Object.keys}) when no entry
305
+ * exists. The walker filters `$`-prefixed keys downstream in
306
+ * {@link serializePropertyValue}, so passing every own key here is safe.
307
+ */
308
+ getOrderedPropertyNames(node, type) {
309
+ return this.options.propertyOrder?.get(type) ?? Object.keys(node);
310
+ }
311
+ /**
312
+ * Format a cross-reference value for emission. Defaults to `JSON.stringify`.
313
+ * Override to apply language-specific reference quoting — e.g. an
314
+ * id-reference formatter that mirrors the grammar's id convention.
315
+ *
316
+ * Returns {@link MaybePromise} so adopters with async formatting needs
317
+ * (remote schema lookup, external canonical-id resolution) can return a
318
+ * `Promise<string>`. Sync overrides remain valid.
319
+ */
320
+ formatReferenceValue(value) {
321
+ return JSON.stringify(value);
322
+ }
323
+ /**
324
+ * Format a primitive value (string, number, boolean) for emission. Defaults
325
+ * to `JSON.stringify`, which quotes strings, formats numbers/booleans, and
326
+ * is valid both as a YAML scalar and a JSON value.
327
+ *
328
+ * Returns {@link MaybePromise} so adopters with async formatting needs
329
+ * (e.g. delegating to `prettier.format` for a specific value class) can
330
+ * return a `Promise<string>`.
331
+ */
332
+ formatPrimitive(value) {
333
+ return JSON.stringify(value);
334
+ }
335
+ /**
336
+ * Hook for type-specific serialization that doesn't fit the generic
337
+ * dispatch table. Runs after all reference detection (steps 2-4 of
338
+ * {@link serializePropertyValue}) and before the nested-AST-node recurse,
339
+ * so references never reach this hook and the override may key purely on
340
+ * `(nodeType, key, value)`. Return `undefined` to fall through to the
341
+ * default handling. Default: returns `undefined` for everything.
342
+ *
343
+ * The in-repo override is
344
+ * `YamlSerializer`'s, which emits
345
+ * grammar-declared unquoted terminals as bare strings.
346
+ */
347
+ serializeCustomValue(_nodeType, _key, _value, _indentationLevel) {
348
+ return undefined;
349
+ }
350
+ }
351
+ //# sourceMappingURL=abstract-serializer.js.map