@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,7 +1,16 @@
1
+ import { sortStrings } from "@gtkx/utils";
1
2
  import { collectText, nodeAttr, nodeChildren, nodeTag, parseRegistryFile } from "./parse.js";
2
3
  const NAME_TAG = "name";
3
4
  const SKIP_IN_C_TYPE = new Set([NAME_TAG, "comment"]);
5
+ const EMPTY_SKIP = new Set();
6
+ const definedEntry = (key, value) => value === undefined ? {} : { [key]: value };
4
7
  const normalizeWhitespace = (text) => text.replaceAll(/\s+/g, " ").trim();
8
+ const normalizeBlockText = (text) => text
9
+ .split("\n")
10
+ .map((line) => line.trim())
11
+ .join("\n")
12
+ .trim();
13
+ const splitAttr = (value, separator) => value === undefined ? [] : value.split(separator).map((part) => part.trim());
5
14
  const childNamed = (node, tag) => {
6
15
  for (const child of nodeChildren(node)) {
7
16
  if (nodeTag(child) === tag) {
@@ -15,68 +24,108 @@ const elementName = (node) => {
15
24
  if (nameChild === undefined) {
16
25
  return "";
17
26
  }
18
- return normalizeWhitespace(collectText(nameChild, new Set()));
27
+ return normalizeWhitespace(collectText(nameChild, EMPTY_SKIP));
19
28
  };
20
- const parseParam = (node) => {
21
- const param = {
22
- name: elementName(node),
23
- cType: normalizeWhitespace(collectText(node, SKIP_IN_C_TYPE)),
24
- };
25
- const group = nodeAttr(node, "group");
26
- const len = nodeAttr(node, "len");
27
- const objectClass = nodeAttr(node, "class");
28
- return {
29
- ...param,
30
- ...((group !== undefined) && { group }),
31
- ...((len !== undefined) && { len }),
32
- ...((objectClass !== undefined) && { objectClass }),
33
- };
29
+ const parseParam = (node) => ({
30
+ name: elementName(node),
31
+ cType: normalizeWhitespace(collectText(node, SKIP_IN_C_TYPE)),
32
+ kinds: splitAttr(nodeAttr(node, "kind"), ","),
33
+ ...definedEntry("group", nodeAttr(node, "group")),
34
+ ...definedEntry("len", nodeAttr(node, "len")),
35
+ ...definedEntry("objectClass", nodeAttr(node, "class")),
36
+ });
37
+ const parseGlx = (node) => {
38
+ const type = nodeAttr(node, "type");
39
+ const opcode = nodeAttr(node, "opcode");
40
+ if (type === undefined || opcode === undefined || nodeAttr(node, NAME_TAG) !== undefined) {
41
+ return undefined;
42
+ }
43
+ return { type, opcode, ...definedEntry("comment", nodeAttr(node, "comment")) };
44
+ };
45
+ const collectCommandChild = (child, into) => {
46
+ switch (nodeTag(child)) {
47
+ case "param": {
48
+ into.params.push(parseParam(child));
49
+ break;
50
+ }
51
+ case "alias": {
52
+ into.aliasTarget = nodeAttr(child, NAME_TAG);
53
+ break;
54
+ }
55
+ case "vecequiv": {
56
+ into.vecEquiv = nodeAttr(child, NAME_TAG);
57
+ break;
58
+ }
59
+ case "glx": {
60
+ into.glx ??= parseGlx(child);
61
+ break;
62
+ }
63
+ default: {
64
+ break;
65
+ }
66
+ }
34
67
  };
35
68
  const parseCommand = (node) => {
36
69
  const proto = childNamed(node, "proto");
37
70
  if (proto === undefined) {
38
71
  return undefined;
39
72
  }
40
- const params = [];
73
+ const extras = { params: [], aliasTarget: undefined, vecEquiv: undefined, glx: undefined };
41
74
  for (const child of nodeChildren(node)) {
42
- if (nodeTag(child) === "param") {
43
- params.push(parseParam(child));
44
- }
75
+ collectCommandChild(child, extras);
45
76
  }
46
- const returnGroup = nodeAttr(proto, "group");
47
77
  return {
48
78
  name: elementName(proto),
49
79
  returnCType: normalizeWhitespace(collectText(proto, SKIP_IN_C_TYPE)),
50
- ...((returnGroup !== undefined) && { returnGroup }),
51
- params,
80
+ returnKinds: splitAttr(nodeAttr(proto, "kind"), ","),
81
+ ...definedEntry("returnGroup", nodeAttr(proto, "group")),
82
+ ...definedEntry("returnObjectClass", nodeAttr(proto, "class")),
83
+ ...definedEntry("comment", nodeAttr(node, "comment")),
84
+ ...definedEntry("aliasTarget", extras.aliasTarget),
85
+ ...definedEntry("vecEquiv", extras.vecEquiv),
86
+ ...definedEntry("glx", extras.glx),
87
+ params: extras.params,
52
88
  };
53
89
  };
54
- const parseEnum = (child) => {
55
- if (nodeTag(child) !== "enum") {
56
- return undefined;
57
- }
58
- const name = nodeAttr(child, "name");
90
+ const parseEnum = (child, block) => {
91
+ const name = nodeAttr(child, NAME_TAG);
59
92
  const value = nodeAttr(child, "value");
60
- if (name === undefined || value === undefined) {
93
+ if (name === undefined || value === undefined || nodeTag(child) !== "enum") {
61
94
  return undefined;
62
95
  }
63
- const group = nodeAttr(child, "group");
64
96
  return {
65
97
  name,
66
98
  value,
67
- groups: group === undefined ? [] : group.split(",").map((part) => part.trim()),
99
+ groups: splitAttr(nodeAttr(child, "group") ?? block.group, ","),
100
+ isBitmask: block.isBitmask,
101
+ ...definedEntry("comment", nodeAttr(child, "comment")),
102
+ ...definedEntry("alias", nodeAttr(child, "alias")),
103
+ ...definedEntry("api", nodeAttr(child, "api")),
104
+ ...definedEntry("valueType", nodeAttr(child, "type")),
105
+ ...definedEntry("vendor", block.vendor),
106
+ ...definedEntry("blockComment", block.comment),
68
107
  };
69
108
  };
70
- const parseEnums = (node, into) => {
109
+ const enumBlockFor = (node) => ({
110
+ isBitmask: nodeAttr(node, "type") === "bitmask",
111
+ ...definedEntry("group", nodeAttr(node, "group")),
112
+ ...definedEntry("vendor", nodeAttr(node, "vendor")),
113
+ ...definedEntry("comment", nodeAttr(node, "comment")),
114
+ });
115
+ const parseEnums = (node, registry) => {
116
+ const block = enumBlockFor(node);
117
+ if (block.isBitmask && block.group !== undefined) {
118
+ registry.bitmaskGroups.add(block.group);
119
+ }
71
120
  for (const child of nodeChildren(node)) {
72
- const parsed = parseEnum(child);
121
+ const parsed = parseEnum(child, block);
73
122
  if (parsed !== undefined) {
74
- into.push(parsed);
123
+ registry.enums.push(parsed);
75
124
  }
76
125
  }
77
126
  };
78
127
  const collectInterfaceMember = (child, commands, enums) => {
79
- const name = nodeAttr(child, "name");
128
+ const name = nodeAttr(child, NAME_TAG);
80
129
  if (name === undefined) {
81
130
  return;
82
131
  }
@@ -88,41 +137,70 @@ const collectInterfaceMember = (child, commands, enums) => {
88
137
  enums.push(name);
89
138
  }
90
139
  };
91
- const parseInterfaceBlock = (node) => {
140
+ const parseInterfaceBlock = (node, kind) => {
92
141
  const commands = [];
93
142
  const enums = [];
94
143
  for (const child of nodeChildren(node)) {
95
144
  collectInterfaceMember(child, commands, enums);
96
145
  }
97
- const profile = nodeAttr(node, "profile");
98
146
  return {
99
- ...((profile !== undefined) && { profile }),
147
+ kind,
148
+ ...definedEntry("api", nodeAttr(node, "api")),
149
+ ...definedEntry("profile", nodeAttr(node, "profile")),
150
+ ...definedEntry("comment", nodeAttr(node, "comment")),
100
151
  commands,
101
152
  enums,
102
153
  };
103
154
  };
104
- const collectFeatureBlock = (child, requires, removes) => {
105
- const tag = nodeTag(child);
106
- if (tag === "require") {
107
- requires.push(parseInterfaceBlock(child));
108
- }
109
- else if (tag === "remove") {
110
- removes.push(parseInterfaceBlock(child));
155
+ const collectInterfaceBlocks = (node) => {
156
+ const blocks = [];
157
+ for (const child of nodeChildren(node)) {
158
+ const tag = nodeTag(child);
159
+ if (tag === "require" || tag === "remove") {
160
+ blocks.push(parseInterfaceBlock(child, tag));
161
+ }
111
162
  }
163
+ return blocks;
112
164
  };
113
165
  const parseFeature = (node) => {
114
166
  const api = nodeAttr(node, "api");
115
- const name = nodeAttr(node, "name");
167
+ const name = nodeAttr(node, NAME_TAG);
116
168
  const number = nodeAttr(node, "number");
117
169
  if (api === undefined || name === undefined || number === undefined) {
118
170
  return undefined;
119
171
  }
120
- const requires = [];
121
- const removes = [];
122
- for (const child of nodeChildren(node)) {
123
- collectFeatureBlock(child, requires, removes);
172
+ return { api, name, number: Number(number), blocks: collectInterfaceBlocks(node) };
173
+ };
174
+ const parseExtension = (node) => {
175
+ const name = nodeAttr(node, NAME_TAG);
176
+ if (name === undefined || nodeTag(node) !== "extension") {
177
+ return undefined;
124
178
  }
125
- return { api, name, number: Number(number), requires, removes };
179
+ return {
180
+ name,
181
+ supported: splitAttr(nodeAttr(node, "supported"), "|"),
182
+ ...definedEntry("comment", nodeAttr(node, "comment")),
183
+ blocks: collectInterfaceBlocks(node),
184
+ };
185
+ };
186
+ const typeName = (node) => {
187
+ const fromChild = elementName(node);
188
+ if (fromChild.length > 0) {
189
+ return fromChild;
190
+ }
191
+ return nodeAttr(node, NAME_TAG) ?? "";
192
+ };
193
+ const parseType = (node) => {
194
+ const name = typeName(node);
195
+ if (name.length === 0 || nodeTag(node) !== "type") {
196
+ return undefined;
197
+ }
198
+ return {
199
+ name,
200
+ declaration: normalizeWhitespace(collectText(node, EMPTY_SKIP)),
201
+ ...definedEntry("requires", nodeAttr(node, "requires")),
202
+ ...definedEntry("comment", nodeAttr(node, "comment")),
203
+ };
126
204
  };
127
205
  const addCommand = (child, into) => {
128
206
  if (nodeTag(child) !== "command") {
@@ -133,34 +211,111 @@ const addCommand = (child, into) => {
133
211
  into.set(command.name, command);
134
212
  }
135
213
  };
136
- const parseCommandsSection = (section, into) => {
214
+ const parseCommandsSection = (section, registry) => {
137
215
  for (const child of nodeChildren(section)) {
138
- addCommand(child, into);
216
+ addCommand(child, registry.commands);
139
217
  }
140
218
  };
141
- const parseSection = (section, registry) => {
142
- const tag = nodeTag(section);
143
- if (tag === "commands") {
144
- parseCommandsSection(section, registry.commands);
145
- return;
219
+ const parseTypesSection = (section, registry) => {
220
+ for (const child of nodeChildren(section)) {
221
+ const parsed = parseType(child);
222
+ if (parsed !== undefined) {
223
+ registry.types.set(parsed.name, parsed);
224
+ }
146
225
  }
147
- if (tag === "enums") {
148
- parseEnums(section, registry.enums);
149
- return;
226
+ };
227
+ const addKind = (child, into) => {
228
+ const name = nodeAttr(child, NAME_TAG);
229
+ const desc = nodeAttr(child, "desc");
230
+ if (name !== undefined && desc !== undefined && nodeTag(child) === "kind") {
231
+ into.set(name, desc);
150
232
  }
151
- if (tag !== "feature") {
152
- return;
233
+ };
234
+ const parseKindsSection = (section, registry) => {
235
+ for (const child of nodeChildren(section)) {
236
+ addKind(child, registry.kinds);
153
237
  }
238
+ };
239
+ const parseExtensionsSection = (section, registry) => {
240
+ for (const child of nodeChildren(section)) {
241
+ const parsed = parseExtension(child);
242
+ if (parsed !== undefined) {
243
+ registry.extensions.push(parsed);
244
+ }
245
+ }
246
+ };
247
+ const parseFeatureSection = (section, registry) => {
154
248
  const feature = parseFeature(section);
155
249
  if (feature !== undefined) {
156
250
  registry.features.push(feature);
157
251
  }
158
252
  };
253
+ const parseCommentSection = (section, registry) => {
254
+ registry.comment = normalizeBlockText(collectText(section, EMPTY_SKIP));
255
+ };
256
+ const sectionHandlerFor = (tag) => {
257
+ switch (tag) {
258
+ case "comment": {
259
+ return parseCommentSection;
260
+ }
261
+ case "commands": {
262
+ return parseCommandsSection;
263
+ }
264
+ case "enums": {
265
+ return parseEnums;
266
+ }
267
+ case "extensions": {
268
+ return parseExtensionsSection;
269
+ }
270
+ case "feature": {
271
+ return parseFeatureSection;
272
+ }
273
+ case "kinds": {
274
+ return parseKindsSection;
275
+ }
276
+ case "types": {
277
+ return parseTypesSection;
278
+ }
279
+ default: {
280
+ return undefined;
281
+ }
282
+ }
283
+ };
284
+ const parseSection = (section, registry) => {
285
+ sectionHandlerFor(nodeTag(section))?.(section, registry);
286
+ };
287
+ const sortAliasNames = (pending) => {
288
+ const sorted = new Map();
289
+ for (const target of sortStrings(pending.keys())) {
290
+ sorted.set(target, sortStrings(pending.get(target) ?? []));
291
+ }
292
+ return sorted;
293
+ };
294
+ const buildAliasTargets = (commands) => {
295
+ const pending = new Map();
296
+ for (const command of commands.values()) {
297
+ const target = command.aliasTarget;
298
+ if (target !== undefined) {
299
+ pending.set(target, [...(pending.get(target) ?? []), command.name]);
300
+ }
301
+ }
302
+ return sortAliasNames(pending);
303
+ };
159
304
  const loadGlRegistry = (path) => {
160
- const registry = { commands: new Map(), enums: [], features: [] };
305
+ const registry = {
306
+ types: new Map(),
307
+ kinds: new Map(),
308
+ commands: new Map(),
309
+ enums: [],
310
+ features: [],
311
+ extensions: [],
312
+ aliasTargets: new Map(),
313
+ bitmaskGroups: new Set(),
314
+ };
161
315
  for (const section of parseRegistryFile(path)) {
162
316
  parseSection(section, registry);
163
317
  }
318
+ registry.aliasTargets = buildAliasTargets(registry.commands);
164
319
  return registry;
165
320
  };
166
321
  export { loadGlRegistry, };
@@ -1 +1 @@
1
- {"version":3,"file":"model.js","sourceRoot":"","sources":["../../src/khronos/model.ts"],"names":[],"mappings":"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","sourcesContent":["import { collectText, nodeAttr, nodeChildren, nodeTag, type OrderedNode, parseRegistryFile } from \"./parse.js\";\n\ntype GlParam = {\n name: string;\n cType: string;\n group?: string;\n len?: string;\n objectClass?: string;\n};\n\ntype GlCommand = {\n name: string;\n returnCType: string;\n returnGroup?: string;\n params: GlParam[];\n};\n\ntype GlEnum = {\n name: string;\n value: string;\n groups: string[];\n};\n\ntype GlInterfaceBlock = {\n profile?: string;\n commands: string[];\n enums: string[];\n};\n\ntype GlFeature = {\n api: string;\n name: string;\n number: number;\n requires: GlInterfaceBlock[];\n removes: GlInterfaceBlock[];\n};\n\ntype GlRegistry = {\n commands: Map<string, GlCommand>;\n enums: GlEnum[];\n features: GlFeature[];\n};\n\nconst NAME_TAG = \"name\";\nconst SKIP_IN_C_TYPE: Set<string> = new Set([NAME_TAG, \"comment\"]);\n\nconst normalizeWhitespace = (text: string): string => text.replaceAll(/\\s+/g, \" \").trim();\n\nconst childNamed = (node: OrderedNode, tag: string): OrderedNode | undefined => {\n for (const child of nodeChildren(node)) {\n if (nodeTag(child) === tag) {\n return child;\n }\n }\n\n return undefined;\n};\n\nconst elementName = (node: OrderedNode): string => {\n const nameChild = childNamed(node, NAME_TAG);\n\n if (nameChild === undefined) {\n return \"\";\n }\n\n return normalizeWhitespace(collectText(nameChild, new Set()));\n};\n\nconst parseParam = (node: OrderedNode): GlParam => {\n const param: GlParam = {\n name: elementName(node),\n cType: normalizeWhitespace(collectText(node, SKIP_IN_C_TYPE)),\n };\n\n const group = nodeAttr(node, \"group\");\n const len = nodeAttr(node, \"len\");\n const objectClass = nodeAttr(node, \"class\");\n\n return {\n ...param,\n ...((group !== undefined) && { group }),\n ...((len !== undefined) && { len }),\n ...((objectClass !== undefined) && { objectClass }),\n };\n};\n\nconst parseCommand = (node: OrderedNode): GlCommand | undefined => {\n const proto = childNamed(node, \"proto\");\n\n if (proto === undefined) {\n return undefined;\n }\n\n const params: GlParam[] = [];\n\n for (const child of nodeChildren(node)) {\n if (nodeTag(child) === \"param\") {\n params.push(parseParam(child));\n }\n }\n\n const returnGroup = nodeAttr(proto, \"group\");\n\n return {\n name: elementName(proto),\n returnCType: normalizeWhitespace(collectText(proto, SKIP_IN_C_TYPE)),\n ...((returnGroup !== undefined) && { returnGroup }),\n params,\n };\n};\n\nconst parseEnum = (child: OrderedNode): GlEnum | undefined => {\n if (nodeTag(child) !== \"enum\") {\n return undefined;\n }\n\n const name = nodeAttr(child, \"name\");\n const value = nodeAttr(child, \"value\");\n\n if (name === undefined || value === undefined) {\n return undefined;\n }\n\n const group = nodeAttr(child, \"group\");\n\n return {\n name,\n value,\n groups: group === undefined ? [] : group.split(\",\").map((part) => part.trim()),\n };\n};\n\nconst parseEnums = (node: OrderedNode, into: GlEnum[]): void => {\n for (const child of nodeChildren(node)) {\n const parsed = parseEnum(child);\n\n if (parsed !== undefined) {\n into.push(parsed);\n }\n }\n};\n\nconst collectInterfaceMember = (child: OrderedNode, commands: string[], enums: string[]): void => {\n const name = nodeAttr(child, \"name\");\n\n if (name === undefined) {\n return;\n }\n\n const tag = nodeTag(child);\n\n if (tag === \"command\") {\n commands.push(name);\n } else if (tag === \"enum\") {\n enums.push(name);\n }\n};\n\nconst parseInterfaceBlock = (node: OrderedNode): GlInterfaceBlock => {\n const commands: string[] = [];\n const enums: string[] = [];\n\n for (const child of nodeChildren(node)) {\n collectInterfaceMember(child, commands, enums);\n }\n\n const profile = nodeAttr(node, \"profile\");\n\n return {\n ...((profile !== undefined) && { profile }),\n commands,\n enums,\n };\n};\n\nconst collectFeatureBlock = (child: OrderedNode, requires: GlInterfaceBlock[], removes: GlInterfaceBlock[]): void => {\n const tag = nodeTag(child);\n\n if (tag === \"require\") {\n requires.push(parseInterfaceBlock(child));\n } else if (tag === \"remove\") {\n removes.push(parseInterfaceBlock(child));\n }\n};\n\nconst parseFeature = (node: OrderedNode): GlFeature | undefined => {\n const api = nodeAttr(node, \"api\");\n const name = nodeAttr(node, \"name\");\n const number = nodeAttr(node, \"number\");\n\n if (api === undefined || name === undefined || number === undefined) {\n return undefined;\n }\n\n const requires: GlInterfaceBlock[] = [];\n const removes: GlInterfaceBlock[] = [];\n\n for (const child of nodeChildren(node)) {\n collectFeatureBlock(child, requires, removes);\n }\n\n return { api, name, number: Number(number), requires, removes };\n};\n\nconst addCommand = (child: OrderedNode, into: Map<string, GlCommand>): void => {\n if (nodeTag(child) !== \"command\") {\n return;\n }\n\n const command = parseCommand(child);\n\n if (command !== undefined && command.name.length > 0) {\n into.set(command.name, command);\n }\n};\n\nconst parseCommandsSection = (section: OrderedNode, into: Map<string, GlCommand>): void => {\n for (const child of nodeChildren(section)) {\n addCommand(child, into);\n }\n};\n\nconst parseSection = (section: OrderedNode, registry: GlRegistry): void => {\n const tag = nodeTag(section);\n\n if (tag === \"commands\") {\n parseCommandsSection(section, registry.commands);\n\n return;\n }\n\n if (tag === \"enums\") {\n parseEnums(section, registry.enums);\n\n return;\n }\n\n if (tag !== \"feature\") {\n return;\n }\n\n const feature = parseFeature(section);\n\n if (feature !== undefined) {\n registry.features.push(feature);\n }\n};\n\nconst loadGlRegistry = (path: string): GlRegistry => {\n const registry: GlRegistry = { commands: new Map<string, GlCommand>(), enums: [], features: [] };\n\n for (const section of parseRegistryFile(path)) {\n parseSection(section, registry);\n }\n\n return registry;\n};\n\nexport {\n loadGlRegistry,\n type GlParam,\n type GlCommand,\n type GlEnum,\n type GlInterfaceBlock,\n type GlFeature,\n type GlRegistry,\n};\n"]}
1
+ {"version":3,"file":"model.js","sourceRoot":"","sources":["../../src/khronos/model.ts"],"names":[],"mappings":"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","sourcesContent":["import { sortStrings } from \"@gtkx/utils\";\nimport { collectText, nodeAttr, nodeChildren, nodeTag, type OrderedNode, parseRegistryFile } from \"./parse.js\";\n\ntype GlParam = {\n name: string;\n cType: string;\n group?: string;\n len?: string;\n objectClass?: string;\n kinds: string[];\n};\n\ntype GlGlx = {\n type: string;\n opcode: string;\n comment?: string;\n};\n\ntype GlCommand = {\n name: string;\n returnCType: string;\n returnGroup?: string;\n returnObjectClass?: string;\n returnKinds: string[];\n comment?: string;\n aliasTarget?: string;\n vecEquiv?: string;\n glx?: GlGlx;\n params: GlParam[];\n};\n\ntype GlEnum = {\n name: string;\n value: string;\n groups: string[];\n comment?: string;\n alias?: string;\n api?: string;\n valueType?: string;\n vendor?: string;\n blockComment?: string;\n isBitmask: boolean;\n};\n\ntype GlEnumBlock = {\n group?: string;\n vendor?: string;\n comment?: string;\n isBitmask: boolean;\n};\n\ntype GlInterfaceBlock = {\n kind: \"require\" | \"remove\";\n api?: string;\n profile?: string;\n comment?: string;\n commands: string[];\n enums: string[];\n};\n\ntype GlFeature = {\n api: string;\n name: string;\n number: number;\n blocks: GlInterfaceBlock[];\n};\n\ntype GlExtension = {\n name: string;\n supported: string[];\n comment?: string;\n blocks: GlInterfaceBlock[];\n};\n\ntype GlType = {\n name: string;\n declaration: string;\n requires?: string;\n comment?: string;\n};\n\ntype GlRegistry = {\n comment?: string;\n types: Map<string, GlType>;\n kinds: Map<string, string>;\n commands: Map<string, GlCommand>;\n enums: GlEnum[];\n features: GlFeature[];\n extensions: GlExtension[];\n aliasTargets: Map<string, string[]>;\n bitmaskGroups: Set<string>;\n};\n\ntype CommandExtras = {\n params: GlParam[];\n aliasTarget: string | undefined;\n vecEquiv: string | undefined;\n glx: GlGlx | undefined;\n};\n\ntype SectionHandler = (section: OrderedNode, registry: GlRegistry) => void;\n\nconst NAME_TAG = \"name\";\nconst SKIP_IN_C_TYPE: Set<string> = new Set([NAME_TAG, \"comment\"]);\nconst EMPTY_SKIP: Set<string> = new Set();\n\nconst definedEntry = <K extends string, V>(key: K, value: V | undefined): Partial<Record<K, V>> =>\n value === undefined ? {} : ({ [key]: value } as Partial<Record<K, V>>);\n\nconst normalizeWhitespace = (text: string): string => text.replaceAll(/\\s+/g, \" \").trim();\n\nconst normalizeBlockText = (text: string): string =>\n text\n .split(\"\\n\")\n .map((line) => line.trim())\n .join(\"\\n\")\n .trim();\n\nconst splitAttr = (value: string | undefined, separator: string): string[] =>\n value === undefined ? [] : value.split(separator).map((part) => part.trim());\n\nconst childNamed = (node: OrderedNode, tag: string): OrderedNode | undefined => {\n for (const child of nodeChildren(node)) {\n if (nodeTag(child) === tag) {\n return child;\n }\n }\n\n return undefined;\n};\n\nconst elementName = (node: OrderedNode): string => {\n const nameChild = childNamed(node, NAME_TAG);\n\n if (nameChild === undefined) {\n return \"\";\n }\n\n return normalizeWhitespace(collectText(nameChild, EMPTY_SKIP));\n};\n\nconst parseParam = (node: OrderedNode): GlParam => ({\n name: elementName(node),\n cType: normalizeWhitespace(collectText(node, SKIP_IN_C_TYPE)),\n kinds: splitAttr(nodeAttr(node, \"kind\"), \",\"),\n ...definedEntry(\"group\", nodeAttr(node, \"group\")),\n ...definedEntry(\"len\", nodeAttr(node, \"len\")),\n ...definedEntry(\"objectClass\", nodeAttr(node, \"class\")),\n});\n\nconst parseGlx = (node: OrderedNode): GlGlx | undefined => {\n const type = nodeAttr(node, \"type\");\n const opcode = nodeAttr(node, \"opcode\");\n\n if (type === undefined || opcode === undefined || nodeAttr(node, NAME_TAG) !== undefined) {\n return undefined;\n }\n\n return { type, opcode, ...definedEntry(\"comment\", nodeAttr(node, \"comment\")) };\n};\n\nconst collectCommandChild = (child: OrderedNode, into: CommandExtras): void => {\n switch (nodeTag(child)) {\n case \"param\": {\n into.params.push(parseParam(child));\n break;\n }\n case \"alias\": {\n into.aliasTarget = nodeAttr(child, NAME_TAG);\n break;\n }\n case \"vecequiv\": {\n into.vecEquiv = nodeAttr(child, NAME_TAG);\n break;\n }\n case \"glx\": {\n into.glx ??= parseGlx(child);\n break;\n }\n default: {\n break;\n }\n }\n};\n\nconst parseCommand = (node: OrderedNode): GlCommand | undefined => {\n const proto = childNamed(node, \"proto\");\n\n if (proto === undefined) {\n return undefined;\n }\n\n const extras: CommandExtras = { params: [], aliasTarget: undefined, vecEquiv: undefined, glx: undefined };\n\n for (const child of nodeChildren(node)) {\n collectCommandChild(child, extras);\n }\n\n return {\n name: elementName(proto),\n returnCType: normalizeWhitespace(collectText(proto, SKIP_IN_C_TYPE)),\n returnKinds: splitAttr(nodeAttr(proto, \"kind\"), \",\"),\n ...definedEntry(\"returnGroup\", nodeAttr(proto, \"group\")),\n ...definedEntry(\"returnObjectClass\", nodeAttr(proto, \"class\")),\n ...definedEntry(\"comment\", nodeAttr(node, \"comment\")),\n ...definedEntry(\"aliasTarget\", extras.aliasTarget),\n ...definedEntry(\"vecEquiv\", extras.vecEquiv),\n ...definedEntry(\"glx\", extras.glx),\n params: extras.params,\n };\n};\n\nconst parseEnum = (child: OrderedNode, block: GlEnumBlock): GlEnum | undefined => {\n const name = nodeAttr(child, NAME_TAG);\n const value = nodeAttr(child, \"value\");\n\n if (name === undefined || value === undefined || nodeTag(child) !== \"enum\") {\n return undefined;\n }\n\n return {\n name,\n value,\n groups: splitAttr(nodeAttr(child, \"group\") ?? block.group, \",\"),\n isBitmask: block.isBitmask,\n ...definedEntry(\"comment\", nodeAttr(child, \"comment\")),\n ...definedEntry(\"alias\", nodeAttr(child, \"alias\")),\n ...definedEntry(\"api\", nodeAttr(child, \"api\")),\n ...definedEntry(\"valueType\", nodeAttr(child, \"type\")),\n ...definedEntry(\"vendor\", block.vendor),\n ...definedEntry(\"blockComment\", block.comment),\n };\n};\n\nconst enumBlockFor = (node: OrderedNode): GlEnumBlock => ({\n isBitmask: nodeAttr(node, \"type\") === \"bitmask\",\n ...definedEntry(\"group\", nodeAttr(node, \"group\")),\n ...definedEntry(\"vendor\", nodeAttr(node, \"vendor\")),\n ...definedEntry(\"comment\", nodeAttr(node, \"comment\")),\n});\n\nconst parseEnums = (node: OrderedNode, registry: GlRegistry): void => {\n const block = enumBlockFor(node);\n\n if (block.isBitmask && block.group !== undefined) {\n registry.bitmaskGroups.add(block.group);\n }\n\n for (const child of nodeChildren(node)) {\n const parsed = parseEnum(child, block);\n\n if (parsed !== undefined) {\n registry.enums.push(parsed);\n }\n }\n};\n\nconst collectInterfaceMember = (child: OrderedNode, commands: string[], enums: string[]): void => {\n const name = nodeAttr(child, NAME_TAG);\n\n if (name === undefined) {\n return;\n }\n\n const tag = nodeTag(child);\n\n if (tag === \"command\") {\n commands.push(name);\n } else if (tag === \"enum\") {\n enums.push(name);\n }\n};\n\nconst parseInterfaceBlock = (node: OrderedNode, kind: GlInterfaceBlock[\"kind\"]): GlInterfaceBlock => {\n const commands: string[] = [];\n const enums: string[] = [];\n\n for (const child of nodeChildren(node)) {\n collectInterfaceMember(child, commands, enums);\n }\n\n return {\n kind,\n ...definedEntry(\"api\", nodeAttr(node, \"api\")),\n ...definedEntry(\"profile\", nodeAttr(node, \"profile\")),\n ...definedEntry(\"comment\", nodeAttr(node, \"comment\")),\n commands,\n enums,\n };\n};\n\nconst collectInterfaceBlocks = (node: OrderedNode): GlInterfaceBlock[] => {\n const blocks: GlInterfaceBlock[] = [];\n\n for (const child of nodeChildren(node)) {\n const tag = nodeTag(child);\n\n if (tag === \"require\" || tag === \"remove\") {\n blocks.push(parseInterfaceBlock(child, tag));\n }\n }\n\n return blocks;\n};\n\nconst parseFeature = (node: OrderedNode): GlFeature | undefined => {\n const api = nodeAttr(node, \"api\");\n const name = nodeAttr(node, NAME_TAG);\n const number = nodeAttr(node, \"number\");\n\n if (api === undefined || name === undefined || number === undefined) {\n return undefined;\n }\n\n return { api, name, number: Number(number), blocks: collectInterfaceBlocks(node) };\n};\n\nconst parseExtension = (node: OrderedNode): GlExtension | undefined => {\n const name = nodeAttr(node, NAME_TAG);\n\n if (name === undefined || nodeTag(node) !== \"extension\") {\n return undefined;\n }\n\n return {\n name,\n supported: splitAttr(nodeAttr(node, \"supported\"), \"|\"),\n ...definedEntry(\"comment\", nodeAttr(node, \"comment\")),\n blocks: collectInterfaceBlocks(node),\n };\n};\n\nconst typeName = (node: OrderedNode): string => {\n const fromChild = elementName(node);\n\n if (fromChild.length > 0) {\n return fromChild;\n }\n\n return nodeAttr(node, NAME_TAG) ?? \"\";\n};\n\nconst parseType = (node: OrderedNode): GlType | undefined => {\n const name = typeName(node);\n\n if (name.length === 0 || nodeTag(node) !== \"type\") {\n return undefined;\n }\n\n return {\n name,\n declaration: normalizeWhitespace(collectText(node, EMPTY_SKIP)),\n ...definedEntry(\"requires\", nodeAttr(node, \"requires\")),\n ...definedEntry(\"comment\", nodeAttr(node, \"comment\")),\n };\n};\n\nconst addCommand = (child: OrderedNode, into: Map<string, GlCommand>): void => {\n if (nodeTag(child) !== \"command\") {\n return;\n }\n\n const command = parseCommand(child);\n\n if (command !== undefined && command.name.length > 0) {\n into.set(command.name, command);\n }\n};\n\nconst parseCommandsSection = (section: OrderedNode, registry: GlRegistry): void => {\n for (const child of nodeChildren(section)) {\n addCommand(child, registry.commands);\n }\n};\n\nconst parseTypesSection = (section: OrderedNode, registry: GlRegistry): void => {\n for (const child of nodeChildren(section)) {\n const parsed = parseType(child);\n\n if (parsed !== undefined) {\n registry.types.set(parsed.name, parsed);\n }\n }\n};\n\nconst addKind = (child: OrderedNode, into: Map<string, string>): void => {\n const name = nodeAttr(child, NAME_TAG);\n const desc = nodeAttr(child, \"desc\");\n\n if (name !== undefined && desc !== undefined && nodeTag(child) === \"kind\") {\n into.set(name, desc);\n }\n};\n\nconst parseKindsSection = (section: OrderedNode, registry: GlRegistry): void => {\n for (const child of nodeChildren(section)) {\n addKind(child, registry.kinds);\n }\n};\n\nconst parseExtensionsSection = (section: OrderedNode, registry: GlRegistry): void => {\n for (const child of nodeChildren(section)) {\n const parsed = parseExtension(child);\n\n if (parsed !== undefined) {\n registry.extensions.push(parsed);\n }\n }\n};\n\nconst parseFeatureSection = (section: OrderedNode, registry: GlRegistry): void => {\n const feature = parseFeature(section);\n\n if (feature !== undefined) {\n registry.features.push(feature);\n }\n};\n\nconst parseCommentSection = (section: OrderedNode, registry: GlRegistry): void => {\n registry.comment = normalizeBlockText(collectText(section, EMPTY_SKIP));\n};\n\nconst sectionHandlerFor = (tag: string): SectionHandler | undefined => {\n switch (tag) {\n case \"comment\": {\n return parseCommentSection;\n }\n case \"commands\": {\n return parseCommandsSection;\n }\n case \"enums\": {\n return parseEnums;\n }\n case \"extensions\": {\n return parseExtensionsSection;\n }\n case \"feature\": {\n return parseFeatureSection;\n }\n case \"kinds\": {\n return parseKindsSection;\n }\n case \"types\": {\n return parseTypesSection;\n }\n default: {\n return undefined;\n }\n }\n};\n\nconst parseSection = (section: OrderedNode, registry: GlRegistry): void => {\n sectionHandlerFor(nodeTag(section))?.(section, registry);\n};\n\nconst sortAliasNames = (pending: Map<string, string[]>): Map<string, string[]> => {\n const sorted: Map<string, string[]> = new Map();\n\n for (const target of sortStrings(pending.keys())) {\n sorted.set(target, sortStrings(pending.get(target) ?? []));\n }\n\n return sorted;\n};\n\nconst buildAliasTargets = (commands: Map<string, GlCommand>): Map<string, string[]> => {\n const pending: Map<string, string[]> = new Map();\n\n for (const command of commands.values()) {\n const target = command.aliasTarget;\n\n if (target !== undefined) {\n pending.set(target, [...(pending.get(target) ?? []), command.name]);\n }\n }\n\n return sortAliasNames(pending);\n};\n\nconst loadGlRegistry = (path: string): GlRegistry => {\n const registry: GlRegistry = {\n types: new Map<string, GlType>(),\n kinds: new Map<string, string>(),\n commands: new Map<string, GlCommand>(),\n enums: [],\n features: [],\n extensions: [],\n aliasTargets: new Map<string, string[]>(),\n bitmaskGroups: new Set<string>(),\n };\n\n for (const section of parseRegistryFile(path)) {\n parseSection(section, registry);\n }\n\n registry.aliasTargets = buildAliasTargets(registry.commands);\n\n return registry;\n};\n\nexport {\n loadGlRegistry,\n type GlParam,\n type GlGlx,\n type GlCommand,\n type GlEnum,\n type GlInterfaceBlock,\n type GlFeature,\n type GlExtension,\n type GlType,\n type GlRegistry,\n};\n"]}
@@ -1,12 +1,15 @@
1
+ import type { GlDocContext } from "./doc-context.js";
1
2
  import type { GlEnum } from "./model.js";
2
3
  import type { RenderedCommand } from "./render.js";
3
- declare const renderEnumsModule: (tokens: {
4
+ import type { GlSymbolProvenance } from "./select.js";
5
+ type EnumRow = {
4
6
  token: GlEnum;
5
7
  exportName: string;
6
8
  literal: string;
7
- feature: string;
8
- }[]) => string;
9
- declare const renderTypesModule: (groupAliases: Map<string, string>) => string;
10
- declare const renderCommandsModule: (rendered: RenderedCommand[], singulars: RenderedCommand[], usedTypes: Set<string>) => string;
11
- export { renderEnumsModule, renderTypesModule, renderCommandsModule };
9
+ provenance: GlSymbolProvenance;
10
+ };
11
+ declare const renderEnumsModule: (tokens: EnumRow[], docs: GlDocContext) => string;
12
+ declare const renderTypesModule: (groupAliases: Map<string, string>, docs: GlDocContext) => string;
13
+ declare const renderCommandsModule: (rendered: RenderedCommand[], singulars: RenderedCommand[], usedTypes: Set<string>, docs: GlDocContext) => string;
14
+ export { renderEnumsModule, renderTypesModule, renderCommandsModule, type EnumRow };
12
15
  //# sourceMappingURL=modules.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"modules.d.ts","sourceRoot":"","sources":["../../src/khronos/modules.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAcnD,QAAA,MAAM,iBAAiB,GACnB,QAAQ;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,EAAE,KAClF,MAaF,CAAC;AAEF,QAAA,MAAM,iBAAiB,GAAI,cAAc,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,KAAG,MAsC9D,CAAC;AA0BF,QAAA,MAAM,oBAAoB,GACtB,UAAU,eAAe,EAAE,EAC3B,WAAW,eAAe,EAAE,EAC5B,WAAW,GAAG,CAAC,MAAM,CAAC,KACvB,MAWF,CAAC;AAEF,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,CAAC"}
1
+ {"version":3,"file":"modules.d.ts","sourceRoot":"","sources":["../../src/khronos/modules.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,KAAK,EAAE,MAAM,EAAU,MAAM,YAAY,CAAC;AACjD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAKtD,KAAK,OAAO,GAAG;IACX,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,kBAAkB,CAAC;CAClC,CAAC;AA4DF,QAAA,MAAM,iBAAiB,GAAI,QAAQ,OAAO,EAAE,EAAE,MAAM,YAAY,KAAG,MAWlE,CAAC;AA0EF,QAAA,MAAM,iBAAiB,GAAI,cAAc,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,YAAY,KAAG,MAqBlF,CAAC;AA0BF,QAAA,MAAM,oBAAoB,GACtB,UAAU,eAAe,EAAE,EAC3B,WAAW,eAAe,EAAE,EAC5B,WAAW,GAAG,CAAC,MAAM,CAAC,EACtB,MAAM,YAAY,KACnB,MAWF,CAAC;AAEF,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,KAAK,OAAO,EAAE,CAAC"}