@gtkx/codegen 1.0.0-rc.4 → 1.1.0

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 (523) hide show
  1. package/README.md +5 -5
  2. package/dist/analysis/descriptor-render.d.ts +13 -9
  3. package/dist/analysis/descriptor-render.d.ts.map +1 -1
  4. package/dist/analysis/descriptor-render.js +80 -50
  5. package/dist/analysis/descriptor-render.js.map +1 -1
  6. package/dist/analysis/descriptor.d.ts +16 -7
  7. package/dist/analysis/descriptor.d.ts.map +1 -1
  8. package/dist/analysis/descriptor.js +15 -3
  9. package/dist/analysis/descriptor.js.map +1 -1
  10. package/dist/analysis/inheritance.d.ts +4 -3
  11. package/dist/analysis/inheritance.d.ts.map +1 -1
  12. package/dist/analysis/inheritance.js +103 -58
  13. package/dist/analysis/inheritance.js.map +1 -1
  14. package/dist/analysis/interface-conflicts.d.ts +23 -0
  15. package/dist/analysis/interface-conflicts.d.ts.map +1 -0
  16. package/dist/analysis/interface-conflicts.js +144 -0
  17. package/dist/analysis/interface-conflicts.js.map +1 -0
  18. package/dist/analysis/nul-terminated-bytes.d.ts +5 -0
  19. package/dist/analysis/nul-terminated-bytes.d.ts.map +1 -0
  20. package/dist/analysis/nul-terminated-bytes.js +18 -0
  21. package/dist/analysis/nul-terminated-bytes.js.map +1 -0
  22. package/dist/analysis/param-capability.d.ts +5 -0
  23. package/dist/analysis/param-capability.d.ts.map +1 -0
  24. package/dist/analysis/param-capability.js +129 -0
  25. package/dist/analysis/param-capability.js.map +1 -0
  26. package/dist/analysis/param-structure.d.ts +11 -4
  27. package/dist/analysis/param-structure.d.ts.map +1 -1
  28. package/dist/analysis/param-structure.js +42 -16
  29. package/dist/analysis/param-structure.js.map +1 -1
  30. package/dist/analysis/ts-type.d.ts.map +1 -1
  31. package/dist/analysis/ts-type.js +10 -17
  32. package/dist/analysis/ts-type.js.map +1 -1
  33. package/dist/analysis/type-key.d.ts +5 -0
  34. package/dist/analysis/type-key.d.ts.map +1 -0
  35. package/dist/analysis/type-key.js +9 -0
  36. package/dist/analysis/type-key.js.map +1 -0
  37. package/dist/analysis/type-shape.d.ts +8 -0
  38. package/dist/analysis/type-shape.d.ts.map +1 -0
  39. package/dist/analysis/type-shape.js +12 -0
  40. package/dist/analysis/type-shape.js.map +1 -0
  41. package/dist/compile.d.ts +12 -3
  42. package/dist/compile.d.ts.map +1 -1
  43. package/dist/compile.js +73 -24
  44. package/dist/compile.js.map +1 -1
  45. package/dist/docs/api-reference.d.ts +2 -2
  46. package/dist/docs/api-reference.d.ts.map +1 -1
  47. package/dist/docs/api-reference.js +17 -23
  48. package/dist/docs/api-reference.js.map +1 -1
  49. package/dist/docs/element-page.d.ts +4 -4
  50. package/dist/docs/element-page.d.ts.map +1 -1
  51. package/dist/docs/element-page.js +36 -22
  52. package/dist/docs/element-page.js.map +1 -1
  53. package/dist/docs/handwritten-props.d.ts +9 -0
  54. package/dist/docs/handwritten-props.d.ts.map +1 -0
  55. package/dist/docs/handwritten-props.js +149 -0
  56. package/dist/docs/handwritten-props.js.map +1 -0
  57. package/dist/docs/pipeline.d.ts.map +1 -1
  58. package/dist/docs/pipeline.js +87 -20
  59. package/dist/docs/pipeline.js.map +1 -1
  60. package/dist/docs/render.d.ts +26 -5
  61. package/dist/docs/render.d.ts.map +1 -1
  62. package/dist/docs/render.js +88 -25
  63. package/dist/docs/render.js.map +1 -1
  64. package/dist/docs/symbol-page.d.ts +17 -0
  65. package/dist/docs/symbol-page.d.ts.map +1 -1
  66. package/dist/docs/symbol-page.js +132 -44
  67. package/dist/docs/symbol-page.js.map +1 -1
  68. package/dist/fingerprint.d.ts +12 -1
  69. package/dist/fingerprint.d.ts.map +1 -1
  70. package/dist/fingerprint.js +44 -28
  71. package/dist/fingerprint.js.map +1 -1
  72. package/dist/gi.d.ts.map +1 -1
  73. package/dist/gi.js +1 -0
  74. package/dist/gi.js.map +1 -1
  75. package/dist/gir/ancestry.d.ts +8 -2
  76. package/dist/gir/ancestry.d.ts.map +1 -1
  77. package/dist/gir/ancestry.js +19 -1
  78. package/dist/gir/ancestry.js.map +1 -1
  79. package/dist/gir/annotations.d.ts +21 -0
  80. package/dist/gir/annotations.d.ts.map +1 -0
  81. package/dist/gir/annotations.js +15 -0
  82. package/dist/gir/annotations.js.map +1 -0
  83. package/dist/gir/callback.d.ts +1 -0
  84. package/dist/gir/callback.d.ts.map +1 -1
  85. package/dist/gir/callback.js +1 -0
  86. package/dist/gir/callback.js.map +1 -1
  87. package/dist/gir/class.d.ts +32 -1
  88. package/dist/gir/class.d.ts.map +1 -1
  89. package/dist/gir/class.js +8 -3
  90. package/dist/gir/class.js.map +1 -1
  91. package/dist/gir/cursor-overrides.d.ts +8 -0
  92. package/dist/gir/cursor-overrides.d.ts.map +1 -0
  93. package/dist/gir/cursor-overrides.js +6 -0
  94. package/dist/gir/cursor-overrides.js.map +1 -0
  95. package/dist/gir/emittable.d.ts +7 -0
  96. package/dist/gir/emittable.d.ts.map +1 -0
  97. package/dist/gir/emittable.js +3 -0
  98. package/dist/gir/emittable.js.map +1 -0
  99. package/dist/gir/enum.d.ts +21 -1
  100. package/dist/gir/enum.d.ts.map +1 -1
  101. package/dist/gir/enum.js +9 -9
  102. package/dist/gir/enum.js.map +1 -1
  103. package/dist/gir/field.d.ts +19 -3
  104. package/dist/gir/field.d.ts.map +1 -1
  105. package/dist/gir/field.js +7 -8
  106. package/dist/gir/field.js.map +1 -1
  107. package/dist/gir/function.d.ts +15 -0
  108. package/dist/gir/function.d.ts.map +1 -1
  109. package/dist/gir/function.js +28 -2
  110. package/dist/gir/function.js.map +1 -1
  111. package/dist/gir/libraries.d.ts +1 -3
  112. package/dist/gir/libraries.d.ts.map +1 -1
  113. package/dist/gir/libraries.js +0 -1
  114. package/dist/gir/libraries.js.map +1 -1
  115. package/dist/gir/library.d.ts +36 -0
  116. package/dist/gir/library.d.ts.map +1 -1
  117. package/dist/gir/library.js +35 -1
  118. package/dist/gir/library.js.map +1 -1
  119. package/dist/gir/namespace.d.ts +43 -1
  120. package/dist/gir/namespace.d.ts.map +1 -1
  121. package/dist/gir/namespace.js +8 -7
  122. package/dist/gir/namespace.js.map +1 -1
  123. package/dist/gir/parameter.d.ts +52 -1
  124. package/dist/gir/parameter.d.ts.map +1 -1
  125. package/dist/gir/parameter.js +8 -3
  126. package/dist/gir/parameter.js.map +1 -1
  127. package/dist/gir/parse.d.ts +3 -1
  128. package/dist/gir/parse.d.ts.map +1 -1
  129. package/dist/gir/parse.js +9 -9
  130. package/dist/gir/parse.js.map +1 -1
  131. package/dist/gir/primitives.d.ts +1 -0
  132. package/dist/gir/primitives.d.ts.map +1 -1
  133. package/dist/gir/primitives.js.map +1 -1
  134. package/dist/gir/property.d.ts +16 -0
  135. package/dist/gir/property.d.ts.map +1 -1
  136. package/dist/gir/property.js +3 -3
  137. package/dist/gir/property.js.map +1 -1
  138. package/dist/gir/record.d.ts +22 -0
  139. package/dist/gir/record.d.ts.map +1 -1
  140. package/dist/gir/record.js +3 -2
  141. package/dist/gir/record.js.map +1 -1
  142. package/dist/gir/size.d.ts +5 -4
  143. package/dist/gir/size.d.ts.map +1 -1
  144. package/dist/gir/size.js.map +1 -1
  145. package/dist/gir/type-id.d.ts +35 -0
  146. package/dist/gir/type-id.d.ts.map +1 -1
  147. package/dist/gir/type-id.js +1 -0
  148. package/dist/gir/type-id.js.map +1 -1
  149. package/dist/gir/type-ref.d.ts.map +1 -1
  150. package/dist/gir/type-ref.js +1 -0
  151. package/dist/gir/type-ref.js.map +1 -1
  152. package/dist/gir/type.d.ts +20 -0
  153. package/dist/gir/type.d.ts.map +1 -1
  154. package/dist/gir/type.js.map +1 -1
  155. package/dist/guards.d.ts +16 -0
  156. package/dist/guards.d.ts.map +1 -0
  157. package/dist/guards.js +11 -0
  158. package/dist/guards.js.map +1 -0
  159. package/dist/internal.d.ts +2 -0
  160. package/dist/internal.d.ts.map +1 -1
  161. package/dist/internal.js +2 -0
  162. package/dist/internal.js.map +1 -1
  163. package/dist/json.d.ts +3 -0
  164. package/dist/json.d.ts.map +1 -0
  165. package/dist/json.js +11 -0
  166. package/dist/json.js.map +1 -0
  167. package/dist/khronos/args.d.ts +7 -6
  168. package/dist/khronos/args.d.ts.map +1 -1
  169. package/dist/khronos/args.js +28 -6
  170. package/dist/khronos/args.js.map +1 -1
  171. package/dist/khronos/doc-context.d.ts +29 -0
  172. package/dist/khronos/doc-context.d.ts.map +1 -0
  173. package/dist/khronos/doc-context.js +29 -0
  174. package/dist/khronos/doc-context.js.map +1 -0
  175. package/dist/khronos/extensions.d.ts +13 -0
  176. package/dist/khronos/extensions.d.ts.map +1 -0
  177. package/dist/khronos/extensions.js +49 -0
  178. package/dist/khronos/extensions.js.map +1 -0
  179. package/dist/khronos/jsdoc.d.ts +17 -11
  180. package/dist/khronos/jsdoc.d.ts.map +1 -1
  181. package/dist/khronos/jsdoc.js +104 -46
  182. package/dist/khronos/jsdoc.js.map +1 -1
  183. package/dist/khronos/model.d.ts +42 -3
  184. package/dist/khronos/model.d.ts.map +1 -1
  185. package/dist/khronos/model.js +218 -63
  186. package/dist/khronos/model.js.map +1 -1
  187. package/dist/khronos/modules.d.ts +9 -6
  188. package/dist/khronos/modules.d.ts.map +1 -1
  189. package/dist/khronos/modules.js +112 -27
  190. package/dist/khronos/modules.js.map +1 -1
  191. package/dist/khronos/notes.d.ts +19 -0
  192. package/dist/khronos/notes.d.ts.map +1 -0
  193. package/dist/khronos/notes.js +35 -0
  194. package/dist/khronos/notes.js.map +1 -0
  195. package/dist/khronos/param-pair.d.ts +1 -1
  196. package/dist/khronos/param-pair.d.ts.map +1 -1
  197. package/dist/khronos/param-pair.js.map +1 -1
  198. package/dist/khronos/parse.d.ts.map +1 -1
  199. package/dist/khronos/parse.js +3 -4
  200. package/dist/khronos/parse.js.map +1 -1
  201. package/dist/khronos/pipeline.d.ts +4 -2
  202. package/dist/khronos/pipeline.d.ts.map +1 -1
  203. package/dist/khronos/pipeline.js +58 -27
  204. package/dist/khronos/pipeline.js.map +1 -1
  205. package/dist/khronos/plan.d.ts +3 -9
  206. package/dist/khronos/plan.d.ts.map +1 -1
  207. package/dist/khronos/plan.js +3 -3
  208. package/dist/khronos/plan.js.map +1 -1
  209. package/dist/khronos/render.d.ts +8 -6
  210. package/dist/khronos/render.d.ts.map +1 -1
  211. package/dist/khronos/render.js +35 -26
  212. package/dist/khronos/render.js.map +1 -1
  213. package/dist/khronos/select.d.ts +21 -4
  214. package/dist/khronos/select.d.ts.map +1 -1
  215. package/dist/khronos/select.js +47 -34
  216. package/dist/khronos/select.js.map +1 -1
  217. package/dist/react/element-config.d.ts +2 -2
  218. package/dist/react/element-config.d.ts.map +1 -1
  219. package/dist/react/element-config.js.map +1 -1
  220. package/dist/runner.d.ts +6 -8
  221. package/dist/runner.d.ts.map +1 -1
  222. package/dist/runner.js +16 -0
  223. package/dist/runner.js.map +1 -1
  224. package/dist/staging.d.ts +5 -0
  225. package/dist/staging.d.ts.map +1 -0
  226. package/dist/staging.js +57 -0
  227. package/dist/staging.js.map +1 -0
  228. package/dist/store/compile-store.d.ts +1 -1
  229. package/dist/store/compile-store.d.ts.map +1 -1
  230. package/dist/store/compile-store.js +4 -2
  231. package/dist/store/compile-store.js.map +1 -1
  232. package/dist/store/gi/callable-doc.d.ts +11 -0
  233. package/dist/store/gi/callable-doc.d.ts.map +1 -0
  234. package/dist/store/gi/callable-doc.js +62 -0
  235. package/dist/store/gi/callable-doc.js.map +1 -0
  236. package/dist/store/gi/callables.d.ts +9 -2
  237. package/dist/store/gi/callables.d.ts.map +1 -1
  238. package/dist/store/gi/callables.js +35 -40
  239. package/dist/store/gi/callables.js.map +1 -1
  240. package/dist/store/gi/callback.d.ts.map +1 -1
  241. package/dist/store/gi/callback.js +10 -6
  242. package/dist/store/gi/callback.js.map +1 -1
  243. package/dist/store/gi/class.d.ts.map +1 -1
  244. package/dist/store/gi/class.js +63 -40
  245. package/dist/store/gi/class.js.map +1 -1
  246. package/dist/store/gi/closure-invocation.d.ts +4 -0
  247. package/dist/store/gi/closure-invocation.d.ts.map +1 -0
  248. package/dist/store/gi/closure-invocation.js +22 -0
  249. package/dist/store/gi/closure-invocation.js.map +1 -0
  250. package/dist/store/gi/companion.d.ts.map +1 -1
  251. package/dist/store/gi/companion.js +6 -6
  252. package/dist/store/gi/companion.js.map +1 -1
  253. package/dist/store/gi/constant.d.ts.map +1 -1
  254. package/dist/store/gi/constant.js +12 -3
  255. package/dist/store/gi/constant.js.map +1 -1
  256. package/dist/store/gi/constructor-props.d.ts.map +1 -1
  257. package/dist/store/gi/constructor-props.js +18 -20
  258. package/dist/store/gi/constructor-props.js.map +1 -1
  259. package/dist/store/gi/doc-spec.d.ts +14 -0
  260. package/dist/store/gi/doc-spec.d.ts.map +1 -0
  261. package/dist/store/gi/doc-spec.js +23 -0
  262. package/dist/store/gi/doc-spec.js.map +1 -0
  263. package/dist/store/gi/enum.d.ts.map +1 -1
  264. package/dist/store/gi/enum.js +52 -19
  265. package/dist/store/gi/enum.js.map +1 -1
  266. package/dist/store/gi/function.d.ts +1 -3
  267. package/dist/store/gi/function.d.ts.map +1 -1
  268. package/dist/store/gi/function.js +50 -29
  269. package/dist/store/gi/function.js.map +1 -1
  270. package/dist/store/gi/gtype-binding.d.ts.map +1 -1
  271. package/dist/store/gi/gtype-binding.js +4 -1
  272. package/dist/store/gi/gtype-binding.js.map +1 -1
  273. package/dist/store/gi/interface.d.ts.map +1 -1
  274. package/dist/store/gi/interface.js +155 -26
  275. package/dist/store/gi/interface.js.map +1 -1
  276. package/dist/store/gi/item-comparators.d.ts.map +1 -1
  277. package/dist/store/gi/item-comparators.js +3 -5
  278. package/dist/store/gi/item-comparators.js.map +1 -1
  279. package/dist/store/gi/method.d.ts +11 -2
  280. package/dist/store/gi/method.d.ts.map +1 -1
  281. package/dist/store/gi/method.js +80 -45
  282. package/dist/store/gi/method.js.map +1 -1
  283. package/dist/store/gi/param-marshal.d.ts +6 -2
  284. package/dist/store/gi/param-marshal.d.ts.map +1 -1
  285. package/dist/store/gi/param-marshal.js +54 -5
  286. package/dist/store/gi/param-marshal.js.map +1 -1
  287. package/dist/store/gi/pipeline.d.ts.map +1 -1
  288. package/dist/store/gi/pipeline.js +23 -11
  289. package/dist/store/gi/pipeline.js.map +1 -1
  290. package/dist/store/gi/properties.d.ts +2 -1
  291. package/dist/store/gi/properties.d.ts.map +1 -1
  292. package/dist/store/gi/properties.js +7 -4
  293. package/dist/store/gi/properties.js.map +1 -1
  294. package/dist/store/gi/property-accessor.d.ts +12 -5
  295. package/dist/store/gi/property-accessor.d.ts.map +1 -1
  296. package/dist/store/gi/property-accessor.js +98 -46
  297. package/dist/store/gi/property-accessor.js.map +1 -1
  298. package/dist/store/gi/record-constructor.d.ts +8 -1
  299. package/dist/store/gi/record-constructor.d.ts.map +1 -1
  300. package/dist/store/gi/record-constructor.js +34 -11
  301. package/dist/store/gi/record-constructor.js.map +1 -1
  302. package/dist/store/gi/record-field-accessor.d.ts +3 -1
  303. package/dist/store/gi/record-field-accessor.d.ts.map +1 -1
  304. package/dist/store/gi/record-field-accessor.js +8 -3
  305. package/dist/store/gi/record-field-accessor.js.map +1 -1
  306. package/dist/store/gi/record-layout.d.ts +6 -1
  307. package/dist/store/gi/record-layout.d.ts.map +1 -1
  308. package/dist/store/gi/record-layout.js +9 -2
  309. package/dist/store/gi/record-layout.js.map +1 -1
  310. package/dist/store/gi/record.d.ts.map +1 -1
  311. package/dist/store/gi/record.js +21 -9
  312. package/dist/store/gi/record.js.map +1 -1
  313. package/dist/store/gi/registration.d.ts +1 -1
  314. package/dist/store/gi/registration.js +4 -4
  315. package/dist/store/gi/registration.js.map +1 -1
  316. package/dist/store/gi/runtime-override.d.ts +2 -1
  317. package/dist/store/gi/runtime-override.d.ts.map +1 -1
  318. package/dist/store/gi/runtime-override.js +8 -5
  319. package/dist/store/gi/runtime-override.js.map +1 -1
  320. package/dist/store/gi/signal.d.ts +2 -1
  321. package/dist/store/gi/signal.d.ts.map +1 -1
  322. package/dist/store/gi/signal.js +42 -37
  323. package/dist/store/gi/signal.js.map +1 -1
  324. package/dist/store/gi/value-marshalable.d.ts +1 -2
  325. package/dist/store/gi/value-marshalable.d.ts.map +1 -1
  326. package/dist/store/gi/value-marshalable.js +3 -2
  327. package/dist/store/gi/value-marshalable.js.map +1 -1
  328. package/dist/store/gi/vtable.d.ts +19 -1
  329. package/dist/store/gi/vtable.d.ts.map +1 -1
  330. package/dist/store/gi/vtable.js +257 -51
  331. package/dist/store/gi/vtable.js.map +1 -1
  332. package/dist/store/gi-store.d.ts +1 -0
  333. package/dist/store/gi-store.d.ts.map +1 -1
  334. package/dist/store/gi-store.js +15 -20
  335. package/dist/store/gi-store.js.map +1 -1
  336. package/dist/store/jsx/element-components.d.ts +1 -1
  337. package/dist/store/jsx/element-components.d.ts.map +1 -1
  338. package/dist/store/jsx/element-components.js +6 -4
  339. package/dist/store/jsx/element-components.js.map +1 -1
  340. package/dist/store/jsx/element-prop-imports.d.ts +1 -3
  341. package/dist/store/jsx/element-prop-imports.d.ts.map +1 -1
  342. package/dist/store/jsx/element-prop-imports.js.map +1 -1
  343. package/dist/store/jsx/element-prop-types.d.ts +3 -0
  344. package/dist/store/jsx/element-prop-types.d.ts.map +1 -1
  345. package/dist/store/jsx/element-prop-types.js +7 -1
  346. package/dist/store/jsx/element-prop-types.js.map +1 -1
  347. package/dist/store/jsx/generated-elements.d.ts +2 -1
  348. package/dist/store/jsx/generated-elements.d.ts.map +1 -1
  349. package/dist/store/jsx/generated-elements.js +13 -7
  350. package/dist/store/jsx/generated-elements.js.map +1 -1
  351. package/dist/store/jsx/intrinsic-elements.d.ts +4 -0
  352. package/dist/store/jsx/intrinsic-elements.d.ts.map +1 -1
  353. package/dist/store/jsx/intrinsic-elements.js.map +1 -1
  354. package/dist/store/jsx/jsx.d.ts.map +1 -1
  355. package/dist/store/jsx/jsx.js +10 -9
  356. package/dist/store/jsx/jsx.js.map +1 -1
  357. package/dist/store/jsx/metadata.d.ts.map +1 -1
  358. package/dist/store/jsx/metadata.js +5 -3
  359. package/dist/store/jsx/metadata.js.map +1 -1
  360. package/dist/store/jsx/pipeline.d.ts +1 -1
  361. package/dist/store/jsx/pipeline.d.ts.map +1 -1
  362. package/dist/store/jsx/pipeline.js.map +1 -1
  363. package/dist/store/jsx/props.d.ts +1 -7
  364. package/dist/store/jsx/props.d.ts.map +1 -1
  365. package/dist/store/jsx/props.js +14 -6
  366. package/dist/store/jsx/props.js.map +1 -1
  367. package/dist/store/jsx-store.d.ts.map +1 -1
  368. package/dist/store/jsx-store.js +3 -3
  369. package/dist/store/jsx-store.js.map +1 -1
  370. package/dist/store/resolve-store.d.ts +14 -3
  371. package/dist/store/resolve-store.d.ts.map +1 -1
  372. package/dist/store/resolve-store.js +98 -15
  373. package/dist/store/resolve-store.js.map +1 -1
  374. package/dist/store/store-fs.d.ts +9 -6
  375. package/dist/store/store-fs.d.ts.map +1 -1
  376. package/dist/store/store-fs.js +59 -25
  377. package/dist/store/store-fs.js.map +1 -1
  378. package/dist/store/store-links.d.ts +3 -0
  379. package/dist/store/store-links.d.ts.map +1 -0
  380. package/dist/store/store-links.js +39 -0
  381. package/dist/store/store-links.js.map +1 -0
  382. package/dist/writer/comparison-context.d.ts +4 -0
  383. package/dist/writer/comparison-context.d.ts.map +1 -0
  384. package/dist/writer/comparison-context.js +13 -0
  385. package/dist/writer/comparison-context.js.map +1 -0
  386. package/dist/writer/context.d.ts +3 -2
  387. package/dist/writer/context.d.ts.map +1 -1
  388. package/dist/writer/context.js +11 -3
  389. package/dist/writer/context.js.map +1 -1
  390. package/dist/writer/doc-tags.d.ts +21 -0
  391. package/dist/writer/doc-tags.d.ts.map +1 -0
  392. package/dist/writer/doc-tags.js +38 -0
  393. package/dist/writer/doc-tags.js.map +1 -0
  394. package/dist/writer/doc.d.ts +3 -1
  395. package/dist/writer/doc.d.ts.map +1 -1
  396. package/dist/writer/doc.js +19 -6
  397. package/dist/writer/doc.js.map +1 -1
  398. package/dist/writer/gtk-doc.d.ts +1 -1
  399. package/dist/writer/gtk-doc.d.ts.map +1 -1
  400. package/dist/writer/gtk-doc.js +64 -15
  401. package/dist/writer/gtk-doc.js.map +1 -1
  402. package/dist/writer/module.d.ts +17 -3
  403. package/dist/writer/module.d.ts.map +1 -1
  404. package/dist/writer/module.js +72 -3
  405. package/dist/writer/module.js.map +1 -1
  406. package/dist/xml.d.ts +7 -1
  407. package/dist/xml.d.ts.map +1 -1
  408. package/dist/xml.js +43 -1
  409. package/dist/xml.js.map +1 -1
  410. package/overrides/gdk/rgba.ts.ejs +26 -0
  411. package/overrides/gobject/object.ts.ejs +48 -3
  412. package/overrides/gobject/value.ts.ejs +7 -0
  413. package/overrides/graphene/structs.ts.ejs +55 -0
  414. package/package.json +15 -4
  415. package/src/analysis/descriptor-render.ts +130 -66
  416. package/src/analysis/descriptor.ts +35 -11
  417. package/src/analysis/inheritance.ts +166 -75
  418. package/src/analysis/interface-conflicts.ts +237 -0
  419. package/src/analysis/nul-terminated-bytes.ts +31 -0
  420. package/src/analysis/param-capability.ts +169 -0
  421. package/src/analysis/param-structure.ts +85 -25
  422. package/src/analysis/ts-type.ts +13 -17
  423. package/src/analysis/type-key.ts +14 -0
  424. package/src/analysis/type-shape.ts +24 -0
  425. package/src/compile.ts +110 -26
  426. package/src/docs/api-reference.ts +46 -34
  427. package/src/docs/element-page.ts +58 -49
  428. package/src/docs/handwritten-props.ts +230 -0
  429. package/src/docs/pipeline.ts +131 -21
  430. package/src/docs/render.ts +153 -35
  431. package/src/docs/symbol-page.ts +230 -80
  432. package/src/fingerprint.ts +86 -32
  433. package/src/gi.ts +1 -0
  434. package/src/gir/ancestry.ts +31 -1
  435. package/src/gir/annotations.ts +37 -0
  436. package/src/gir/callback.ts +2 -0
  437. package/src/gir/class.ts +42 -4
  438. package/src/gir/cursor-overrides.ts +12 -0
  439. package/src/gir/emittable.ts +8 -0
  440. package/src/gir/enum.ts +30 -10
  441. package/src/gir/field.ts +24 -9
  442. package/src/gir/function.ts +60 -9
  443. package/src/gir/libraries.ts +11 -3
  444. package/src/gir/library.ts +52 -3
  445. package/src/gir/namespace.ts +49 -7
  446. package/src/gir/parameter.ts +62 -3
  447. package/src/gir/parse.ts +13 -9
  448. package/src/gir/primitives.ts +1 -0
  449. package/src/gir/property.ts +18 -3
  450. package/src/gir/record.ts +24 -2
  451. package/src/gir/size.ts +8 -3
  452. package/src/gir/type-id.ts +49 -3
  453. package/src/gir/type-ref.ts +1 -0
  454. package/src/gir/type.ts +50 -6
  455. package/src/guards.ts +23 -0
  456. package/src/internal.ts +2 -0
  457. package/src/json.ts +11 -0
  458. package/src/khronos/args.ts +36 -13
  459. package/src/khronos/doc-context.ts +62 -0
  460. package/src/khronos/extensions.ts +85 -0
  461. package/src/khronos/jsdoc.ts +152 -56
  462. package/src/khronos/model.ts +314 -69
  463. package/src/khronos/modules.ts +150 -40
  464. package/src/khronos/notes.ts +74 -0
  465. package/src/khronos/param-pair.ts +1 -1
  466. package/src/khronos/parse.ts +3 -4
  467. package/src/khronos/pipeline.ts +95 -42
  468. package/src/khronos/plan.ts +4 -6
  469. package/src/khronos/render.ts +62 -50
  470. package/src/khronos/select.ts +91 -50
  471. package/src/react/element-config.ts +2 -2
  472. package/src/runner.ts +20 -9
  473. package/src/staging.ts +69 -0
  474. package/src/store/compile-store.ts +7 -5
  475. package/src/store/gi/callable-doc.ts +102 -0
  476. package/src/store/gi/callables.ts +58 -44
  477. package/src/store/gi/callback.ts +10 -9
  478. package/src/store/gi/class.ts +83 -49
  479. package/src/store/gi/closure-invocation.ts +26 -0
  480. package/src/store/gi/companion.ts +7 -6
  481. package/src/store/gi/constant.ts +14 -5
  482. package/src/store/gi/constructor-props.ts +19 -23
  483. package/src/store/gi/doc-spec.ts +38 -0
  484. package/src/store/gi/enum.ts +75 -26
  485. package/src/store/gi/function.ts +72 -44
  486. package/src/store/gi/gtype-binding.ts +7 -2
  487. package/src/store/gi/interface.ts +244 -37
  488. package/src/store/gi/item-comparators.ts +3 -5
  489. package/src/store/gi/method.ts +124 -69
  490. package/src/store/gi/param-marshal.ts +91 -6
  491. package/src/store/gi/pipeline.ts +28 -13
  492. package/src/store/gi/properties.ts +10 -5
  493. package/src/store/gi/property-accessor.ts +163 -75
  494. package/src/store/gi/record-constructor.ts +56 -19
  495. package/src/store/gi/record-field-accessor.ts +13 -4
  496. package/src/store/gi/record-layout.ts +12 -2
  497. package/src/store/gi/record.ts +24 -10
  498. package/src/store/gi/registration.ts +5 -5
  499. package/src/store/gi/runtime-override.ts +13 -6
  500. package/src/store/gi/signal.ts +54 -57
  501. package/src/store/gi/value-marshalable.ts +4 -2
  502. package/src/store/gi/vtable.ts +439 -61
  503. package/src/store/gi-store.ts +26 -31
  504. package/src/store/jsx/element-components.ts +8 -5
  505. package/src/store/jsx/element-prop-imports.ts +1 -3
  506. package/src/store/jsx/element-prop-types.ts +10 -1
  507. package/src/store/jsx/generated-elements.ts +17 -8
  508. package/src/store/jsx/intrinsic-elements.ts +4 -0
  509. package/src/store/jsx/jsx.ts +11 -9
  510. package/src/store/jsx/metadata.ts +6 -3
  511. package/src/store/jsx/pipeline.ts +1 -1
  512. package/src/store/jsx/props.ts +20 -7
  513. package/src/store/jsx-store.ts +3 -3
  514. package/src/store/resolve-store.ts +133 -18
  515. package/src/store/store-fs.ts +87 -34
  516. package/src/store/store-links.ts +49 -0
  517. package/src/writer/comparison-context.ts +18 -0
  518. package/src/writer/context.ts +14 -4
  519. package/src/writer/doc-tags.ts +70 -0
  520. package/src/writer/doc.ts +29 -6
  521. package/src/writer/gtk-doc.ts +82 -15
  522. package/src/writer/module.ts +114 -4
  523. package/src/xml.ts +61 -1
@@ -1,3 +1,4 @@
1
+ import { sortStrings } from "@gtkx/utils";
1
2
  import { collectText, nodeAttr, nodeChildren, nodeTag, type OrderedNode, parseRegistryFile } from "./parse.js";
2
3
 
3
4
  type GlParam = {
@@ -6,12 +7,25 @@ type GlParam = {
6
7
  group?: string;
7
8
  len?: string;
8
9
  objectClass?: string;
10
+ kinds: string[];
11
+ };
12
+
13
+ type GlGlx = {
14
+ type: string;
15
+ opcode: string;
16
+ comment?: string;
9
17
  };
10
18
 
11
19
  type GlCommand = {
12
20
  name: string;
13
21
  returnCType: string;
14
22
  returnGroup?: string;
23
+ returnObjectClass?: string;
24
+ returnKinds: string[];
25
+ comment?: string;
26
+ aliasTarget?: string;
27
+ vecEquiv?: string;
28
+ glx?: GlGlx;
15
29
  params: GlParam[];
16
30
  };
17
31
 
@@ -19,10 +33,27 @@ type GlEnum = {
19
33
  name: string;
20
34
  value: string;
21
35
  groups: string[];
36
+ comment?: string;
37
+ alias?: string;
38
+ api?: string;
39
+ valueType?: string;
40
+ vendor?: string;
41
+ blockComment?: string;
42
+ isBitmask: boolean;
43
+ };
44
+
45
+ type GlEnumBlock = {
46
+ group?: string;
47
+ vendor?: string;
48
+ comment?: string;
49
+ isBitmask: boolean;
22
50
  };
23
51
 
24
52
  type GlInterfaceBlock = {
53
+ kind: "require" | "remove";
54
+ api?: string;
25
55
  profile?: string;
56
+ comment?: string;
26
57
  commands: string[];
27
58
  enums: string[];
28
59
  };
@@ -31,21 +62,63 @@ type GlFeature = {
31
62
  api: string;
32
63
  name: string;
33
64
  number: number;
34
- requires: GlInterfaceBlock[];
35
- removes: GlInterfaceBlock[];
65
+ blocks: GlInterfaceBlock[];
66
+ };
67
+
68
+ type GlExtension = {
69
+ name: string;
70
+ supported: string[];
71
+ comment?: string;
72
+ blocks: GlInterfaceBlock[];
73
+ };
74
+
75
+ type GlType = {
76
+ name: string;
77
+ declaration: string;
78
+ requires?: string;
79
+ comment?: string;
36
80
  };
37
81
 
38
82
  type GlRegistry = {
83
+ comment?: string;
84
+ types: Map<string, GlType>;
85
+ kinds: Map<string, string>;
39
86
  commands: Map<string, GlCommand>;
40
87
  enums: GlEnum[];
41
88
  features: GlFeature[];
89
+ extensions: GlExtension[];
90
+ aliasTargets: Map<string, string[]>;
91
+ bitmaskGroups: Set<string>;
42
92
  };
43
93
 
94
+ type CommandExtras = {
95
+ params: GlParam[];
96
+ aliasTarget: string | undefined;
97
+ vecEquiv: string | undefined;
98
+ glx: GlGlx | undefined;
99
+ };
100
+
101
+ type SectionHandler = (section: OrderedNode, registry: GlRegistry) => void;
102
+
44
103
  const NAME_TAG = "name";
45
104
  const SKIP_IN_C_TYPE: Set<string> = new Set([NAME_TAG, "comment"]);
105
+ const EMPTY_SKIP: Set<string> = new Set();
106
+
107
+ const definedEntry = <K extends string, V>(key: K, value: V | undefined): Partial<Record<K, V>> =>
108
+ value === undefined ? {} : ({ [key]: value } as Partial<Record<K, V>>);
46
109
 
47
110
  const normalizeWhitespace = (text: string): string => text.replaceAll(/\s+/g, " ").trim();
48
111
 
112
+ const normalizeBlockText = (text: string): string =>
113
+ text
114
+ .split("\n")
115
+ .map((line) => line.trim())
116
+ .join("\n")
117
+ .trim();
118
+
119
+ const splitAttr = (value: string | undefined, separator: string): string[] =>
120
+ value === undefined ? [] : value.split(separator).map((part) => part.trim());
121
+
49
122
  const childNamed = (node: OrderedNode, tag: string): OrderedNode | undefined => {
50
123
  for (const child of nodeChildren(node)) {
51
124
  if (nodeTag(child) === tag) {
@@ -63,25 +136,51 @@ const elementName = (node: OrderedNode): string => {
63
136
  return "";
64
137
  }
65
138
 
66
- return normalizeWhitespace(collectText(nameChild, new Set()));
139
+ return normalizeWhitespace(collectText(nameChild, EMPTY_SKIP));
67
140
  };
68
141
 
69
- const parseParam = (node: OrderedNode): GlParam => {
70
- const param: GlParam = {
71
- name: elementName(node),
72
- cType: normalizeWhitespace(collectText(node, SKIP_IN_C_TYPE)),
73
- };
142
+ const parseParam = (node: OrderedNode): GlParam => ({
143
+ name: elementName(node),
144
+ cType: normalizeWhitespace(collectText(node, SKIP_IN_C_TYPE)),
145
+ kinds: splitAttr(nodeAttr(node, "kind"), ","),
146
+ ...definedEntry("group", nodeAttr(node, "group")),
147
+ ...definedEntry("len", nodeAttr(node, "len")),
148
+ ...definedEntry("objectClass", nodeAttr(node, "class")),
149
+ });
74
150
 
75
- const group = nodeAttr(node, "group");
76
- const len = nodeAttr(node, "len");
77
- const objectClass = nodeAttr(node, "class");
151
+ const parseGlx = (node: OrderedNode): GlGlx | undefined => {
152
+ const type = nodeAttr(node, "type");
153
+ const opcode = nodeAttr(node, "opcode");
78
154
 
79
- return {
80
- ...param,
81
- ...((group !== undefined) && { group }),
82
- ...((len !== undefined) && { len }),
83
- ...((objectClass !== undefined) && { objectClass }),
84
- };
155
+ if (type === undefined || opcode === undefined || nodeAttr(node, NAME_TAG) !== undefined) {
156
+ return undefined;
157
+ }
158
+
159
+ return { type, opcode, ...definedEntry("comment", nodeAttr(node, "comment")) };
160
+ };
161
+
162
+ const collectCommandChild = (child: OrderedNode, into: CommandExtras): void => {
163
+ switch (nodeTag(child)) {
164
+ case "param": {
165
+ into.params.push(parseParam(child));
166
+ break;
167
+ }
168
+ case "alias": {
169
+ into.aliasTarget = nodeAttr(child, NAME_TAG);
170
+ break;
171
+ }
172
+ case "vecequiv": {
173
+ into.vecEquiv = nodeAttr(child, NAME_TAG);
174
+ break;
175
+ }
176
+ case "glx": {
177
+ into.glx ??= parseGlx(child);
178
+ break;
179
+ }
180
+ default: {
181
+ break;
182
+ }
183
+ }
85
184
  };
86
185
 
87
186
  const parseCommand = (node: OrderedNode): GlCommand | undefined => {
@@ -91,57 +190,73 @@ const parseCommand = (node: OrderedNode): GlCommand | undefined => {
91
190
  return undefined;
92
191
  }
93
192
 
94
- const params: GlParam[] = [];
193
+ const extras: CommandExtras = { params: [], aliasTarget: undefined, vecEquiv: undefined, glx: undefined };
95
194
 
96
195
  for (const child of nodeChildren(node)) {
97
- if (nodeTag(child) === "param") {
98
- params.push(parseParam(child));
99
- }
196
+ collectCommandChild(child, extras);
100
197
  }
101
198
 
102
- const returnGroup = nodeAttr(proto, "group");
103
-
104
199
  return {
105
200
  name: elementName(proto),
106
201
  returnCType: normalizeWhitespace(collectText(proto, SKIP_IN_C_TYPE)),
107
- ...((returnGroup !== undefined) && { returnGroup }),
108
- params,
202
+ returnKinds: splitAttr(nodeAttr(proto, "kind"), ","),
203
+ ...definedEntry("returnGroup", nodeAttr(proto, "group")),
204
+ ...definedEntry("returnObjectClass", nodeAttr(proto, "class")),
205
+ ...definedEntry("comment", nodeAttr(node, "comment")),
206
+ ...definedEntry("aliasTarget", extras.aliasTarget),
207
+ ...definedEntry("vecEquiv", extras.vecEquiv),
208
+ ...definedEntry("glx", extras.glx),
209
+ params: extras.params,
109
210
  };
110
211
  };
111
212
 
112
- const parseEnum = (child: OrderedNode): GlEnum | undefined => {
113
- if (nodeTag(child) !== "enum") {
114
- return undefined;
115
- }
116
-
117
- const name = nodeAttr(child, "name");
213
+ const parseEnum = (child: OrderedNode, block: GlEnumBlock): GlEnum | undefined => {
214
+ const name = nodeAttr(child, NAME_TAG);
118
215
  const value = nodeAttr(child, "value");
119
216
 
120
- if (name === undefined || value === undefined) {
217
+ if (name === undefined || value === undefined || nodeTag(child) !== "enum") {
121
218
  return undefined;
122
219
  }
123
220
 
124
- const group = nodeAttr(child, "group");
125
-
126
221
  return {
127
222
  name,
128
223
  value,
129
- groups: group === undefined ? [] : group.split(",").map((part) => part.trim()),
224
+ groups: splitAttr(nodeAttr(child, "group") ?? block.group, ","),
225
+ isBitmask: block.isBitmask,
226
+ ...definedEntry("comment", nodeAttr(child, "comment")),
227
+ ...definedEntry("alias", nodeAttr(child, "alias")),
228
+ ...definedEntry("api", nodeAttr(child, "api")),
229
+ ...definedEntry("valueType", nodeAttr(child, "type")),
230
+ ...definedEntry("vendor", block.vendor),
231
+ ...definedEntry("blockComment", block.comment),
130
232
  };
131
233
  };
132
234
 
133
- const parseEnums = (node: OrderedNode, into: GlEnum[]): void => {
235
+ const enumBlockFor = (node: OrderedNode): GlEnumBlock => ({
236
+ isBitmask: nodeAttr(node, "type") === "bitmask",
237
+ ...definedEntry("group", nodeAttr(node, "group")),
238
+ ...definedEntry("vendor", nodeAttr(node, "vendor")),
239
+ ...definedEntry("comment", nodeAttr(node, "comment")),
240
+ });
241
+
242
+ const parseEnums = (node: OrderedNode, registry: GlRegistry): void => {
243
+ const block = enumBlockFor(node);
244
+
245
+ if (block.isBitmask && block.group !== undefined) {
246
+ registry.bitmaskGroups.add(block.group);
247
+ }
248
+
134
249
  for (const child of nodeChildren(node)) {
135
- const parsed = parseEnum(child);
250
+ const parsed = parseEnum(child, block);
136
251
 
137
252
  if (parsed !== undefined) {
138
- into.push(parsed);
253
+ registry.enums.push(parsed);
139
254
  }
140
255
  }
141
256
  };
142
257
 
143
258
  const collectInterfaceMember = (child: OrderedNode, commands: string[], enums: string[]): void => {
144
- const name = nodeAttr(child, "name");
259
+ const name = nodeAttr(child, NAME_TAG);
145
260
 
146
261
  if (name === undefined) {
147
262
  return;
@@ -156,7 +271,7 @@ const collectInterfaceMember = (child: OrderedNode, commands: string[], enums: s
156
271
  }
157
272
  };
158
273
 
159
- const parseInterfaceBlock = (node: OrderedNode): GlInterfaceBlock => {
274
+ const parseInterfaceBlock = (node: OrderedNode, kind: GlInterfaceBlock["kind"]): GlInterfaceBlock => {
160
275
  const commands: string[] = [];
161
276
  const enums: string[] = [];
162
277
 
@@ -164,42 +279,80 @@ const parseInterfaceBlock = (node: OrderedNode): GlInterfaceBlock => {
164
279
  collectInterfaceMember(child, commands, enums);
165
280
  }
166
281
 
167
- const profile = nodeAttr(node, "profile");
168
-
169
282
  return {
170
- ...((profile !== undefined) && { profile }),
283
+ kind,
284
+ ...definedEntry("api", nodeAttr(node, "api")),
285
+ ...definedEntry("profile", nodeAttr(node, "profile")),
286
+ ...definedEntry("comment", nodeAttr(node, "comment")),
171
287
  commands,
172
288
  enums,
173
289
  };
174
290
  };
175
291
 
176
- const collectFeatureBlock = (child: OrderedNode, requires: GlInterfaceBlock[], removes: GlInterfaceBlock[]): void => {
177
- const tag = nodeTag(child);
292
+ const collectInterfaceBlocks = (node: OrderedNode): GlInterfaceBlock[] => {
293
+ const blocks: GlInterfaceBlock[] = [];
178
294
 
179
- if (tag === "require") {
180
- requires.push(parseInterfaceBlock(child));
181
- } else if (tag === "remove") {
182
- removes.push(parseInterfaceBlock(child));
295
+ for (const child of nodeChildren(node)) {
296
+ const tag = nodeTag(child);
297
+
298
+ if (tag === "require" || tag === "remove") {
299
+ blocks.push(parseInterfaceBlock(child, tag));
300
+ }
183
301
  }
302
+
303
+ return blocks;
184
304
  };
185
305
 
186
306
  const parseFeature = (node: OrderedNode): GlFeature | undefined => {
187
307
  const api = nodeAttr(node, "api");
188
- const name = nodeAttr(node, "name");
308
+ const name = nodeAttr(node, NAME_TAG);
189
309
  const number = nodeAttr(node, "number");
190
310
 
191
311
  if (api === undefined || name === undefined || number === undefined) {
192
312
  return undefined;
193
313
  }
194
314
 
195
- const requires: GlInterfaceBlock[] = [];
196
- const removes: GlInterfaceBlock[] = [];
315
+ return { api, name, number: Number(number), blocks: collectInterfaceBlocks(node) };
316
+ };
197
317
 
198
- for (const child of nodeChildren(node)) {
199
- collectFeatureBlock(child, requires, removes);
318
+ const parseExtension = (node: OrderedNode): GlExtension | undefined => {
319
+ const name = nodeAttr(node, NAME_TAG);
320
+
321
+ if (name === undefined || nodeTag(node) !== "extension") {
322
+ return undefined;
323
+ }
324
+
325
+ return {
326
+ name,
327
+ supported: splitAttr(nodeAttr(node, "supported"), "|"),
328
+ ...definedEntry("comment", nodeAttr(node, "comment")),
329
+ blocks: collectInterfaceBlocks(node),
330
+ };
331
+ };
332
+
333
+ const typeName = (node: OrderedNode): string => {
334
+ const fromChild = elementName(node);
335
+
336
+ if (fromChild.length > 0) {
337
+ return fromChild;
200
338
  }
201
339
 
202
- return { api, name, number: Number(number), requires, removes };
340
+ return nodeAttr(node, NAME_TAG) ?? "";
341
+ };
342
+
343
+ const parseType = (node: OrderedNode): GlType | undefined => {
344
+ const name = typeName(node);
345
+
346
+ if (name.length === 0 || nodeTag(node) !== "type") {
347
+ return undefined;
348
+ }
349
+
350
+ return {
351
+ name,
352
+ declaration: normalizeWhitespace(collectText(node, EMPTY_SKIP)),
353
+ ...definedEntry("requires", nodeAttr(node, "requires")),
354
+ ...definedEntry("comment", nodeAttr(node, "comment")),
355
+ };
203
356
  };
204
357
 
205
358
  const addCommand = (child: OrderedNode, into: Map<string, GlCommand>): void => {
@@ -214,31 +367,48 @@ const addCommand = (child: OrderedNode, into: Map<string, GlCommand>): void => {
214
367
  }
215
368
  };
216
369
 
217
- const parseCommandsSection = (section: OrderedNode, into: Map<string, GlCommand>): void => {
370
+ const parseCommandsSection = (section: OrderedNode, registry: GlRegistry): void => {
218
371
  for (const child of nodeChildren(section)) {
219
- addCommand(child, into);
372
+ addCommand(child, registry.commands);
220
373
  }
221
374
  };
222
375
 
223
- const parseSection = (section: OrderedNode, registry: GlRegistry): void => {
224
- const tag = nodeTag(section);
225
-
226
- if (tag === "commands") {
227
- parseCommandsSection(section, registry.commands);
376
+ const parseTypesSection = (section: OrderedNode, registry: GlRegistry): void => {
377
+ for (const child of nodeChildren(section)) {
378
+ const parsed = parseType(child);
228
379
 
229
- return;
380
+ if (parsed !== undefined) {
381
+ registry.types.set(parsed.name, parsed);
382
+ }
230
383
  }
384
+ };
231
385
 
232
- if (tag === "enums") {
233
- parseEnums(section, registry.enums);
386
+ const addKind = (child: OrderedNode, into: Map<string, string>): void => {
387
+ const name = nodeAttr(child, NAME_TAG);
388
+ const desc = nodeAttr(child, "desc");
234
389
 
235
- return;
390
+ if (name !== undefined && desc !== undefined && nodeTag(child) === "kind") {
391
+ into.set(name, desc);
236
392
  }
393
+ };
237
394
 
238
- if (tag !== "feature") {
239
- return;
395
+ const parseKindsSection = (section: OrderedNode, registry: GlRegistry): void => {
396
+ for (const child of nodeChildren(section)) {
397
+ addKind(child, registry.kinds);
240
398
  }
399
+ };
241
400
 
401
+ const parseExtensionsSection = (section: OrderedNode, registry: GlRegistry): void => {
402
+ for (const child of nodeChildren(section)) {
403
+ const parsed = parseExtension(child);
404
+
405
+ if (parsed !== undefined) {
406
+ registry.extensions.push(parsed);
407
+ }
408
+ }
409
+ };
410
+
411
+ const parseFeatureSection = (section: OrderedNode, registry: GlRegistry): void => {
242
412
  const feature = parseFeature(section);
243
413
 
244
414
  if (feature !== undefined) {
@@ -246,22 +416,97 @@ const parseSection = (section: OrderedNode, registry: GlRegistry): void => {
246
416
  }
247
417
  };
248
418
 
419
+ const parseCommentSection = (section: OrderedNode, registry: GlRegistry): void => {
420
+ registry.comment = normalizeBlockText(collectText(section, EMPTY_SKIP));
421
+ };
422
+
423
+ const sectionHandlerFor = (tag: string): SectionHandler | undefined => {
424
+ switch (tag) {
425
+ case "comment": {
426
+ return parseCommentSection;
427
+ }
428
+ case "commands": {
429
+ return parseCommandsSection;
430
+ }
431
+ case "enums": {
432
+ return parseEnums;
433
+ }
434
+ case "extensions": {
435
+ return parseExtensionsSection;
436
+ }
437
+ case "feature": {
438
+ return parseFeatureSection;
439
+ }
440
+ case "kinds": {
441
+ return parseKindsSection;
442
+ }
443
+ case "types": {
444
+ return parseTypesSection;
445
+ }
446
+ default: {
447
+ return undefined;
448
+ }
449
+ }
450
+ };
451
+
452
+ const parseSection = (section: OrderedNode, registry: GlRegistry): void => {
453
+ sectionHandlerFor(nodeTag(section))?.(section, registry);
454
+ };
455
+
456
+ const sortAliasNames = (pending: Map<string, string[]>): Map<string, string[]> => {
457
+ const sorted: Map<string, string[]> = new Map();
458
+
459
+ for (const target of sortStrings(pending.keys())) {
460
+ sorted.set(target, sortStrings(pending.get(target) ?? []));
461
+ }
462
+
463
+ return sorted;
464
+ };
465
+
466
+ const buildAliasTargets = (commands: Map<string, GlCommand>): Map<string, string[]> => {
467
+ const pending: Map<string, string[]> = new Map();
468
+
469
+ for (const command of commands.values()) {
470
+ const target = command.aliasTarget;
471
+
472
+ if (target !== undefined) {
473
+ pending.set(target, [...(pending.get(target) ?? []), command.name]);
474
+ }
475
+ }
476
+
477
+ return sortAliasNames(pending);
478
+ };
479
+
249
480
  const loadGlRegistry = (path: string): GlRegistry => {
250
- const registry: GlRegistry = { commands: new Map<string, GlCommand>(), enums: [], features: [] };
481
+ const registry: GlRegistry = {
482
+ types: new Map<string, GlType>(),
483
+ kinds: new Map<string, string>(),
484
+ commands: new Map<string, GlCommand>(),
485
+ enums: [],
486
+ features: [],
487
+ extensions: [],
488
+ aliasTargets: new Map<string, string[]>(),
489
+ bitmaskGroups: new Set<string>(),
490
+ };
251
491
 
252
492
  for (const section of parseRegistryFile(path)) {
253
493
  parseSection(section, registry);
254
494
  }
255
495
 
496
+ registry.aliasTargets = buildAliasTargets(registry.commands);
497
+
256
498
  return registry;
257
499
  };
258
500
 
259
501
  export {
260
502
  loadGlRegistry,
261
503
  type GlParam,
504
+ type GlGlx,
262
505
  type GlCommand,
263
506
  type GlEnum,
264
507
  type GlInterfaceBlock,
265
508
  type GlFeature,
509
+ type GlExtension,
510
+ type GlType,
266
511
  type GlRegistry,
267
512
  };