@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,50 +1,135 @@
1
1
  import { sortStrings, sortStringsBy } from "@gtkx/utils";
2
- import type { GlEnum } from "./model.js";
2
+ import type { GlDocContext } from "./doc-context.js";
3
+ import type { GlEnum, GlType } from "./model.js";
3
4
  import type { RenderedCommand } from "./render.js";
5
+ import type { GlSymbolProvenance } from "./select.js";
4
6
  import { ModuleBuilder } from "../writer/module.js";
7
+ import { asSentence, backtick, backtickList, provenanceLines } from "./notes.js";
5
8
  import { GL_SCALARS } from "./plan.js";
6
9
 
7
- const LIB_CONSTANT = "export const LIB = \"libGL.so.1\";";
10
+ type EnumRow = {
11
+ token: GlEnum;
12
+ exportName: string;
13
+ literal: string;
14
+ provenance: GlSymbolProvenance;
15
+ };
8
16
 
9
- const GENERATED_HEADER = `/**
10
- * GENERATED FILE: do not edit.
11
- */`;
17
+ const LIB_CONSTANT =
18
+ "/** The shared library the generated OpenGL bindings are loaded from. */\n" +
19
+ "export const LIB = \"libGL.so.1\";";
12
20
 
21
+ const SYNC_SUMMARY = "An opaque `GLsync` fence handle";
13
22
  const TS_PRIMITIVES: Set<string> = new Set(["boolean", "string", "void", "number"]);
14
23
 
15
- const quotedGroupList = (groups: string[]): string => groups.map((group) => `\`${group}\``).join(", ");
24
+ const attributionLine = (line: string): string => (line.length === 0 ? " *" : ` * ${line}`);
16
25
 
17
- const renderEnumsModule = (
18
- tokens: { token: GlEnum; exportName: string; literal: string; feature: string }[],
19
- ): string => {
20
- const builder = new ModuleBuilder();
26
+ const attributionLines = (registryComment: string | undefined): string[] =>
27
+ registryComment === undefined
28
+ ? []
29
+ : [" *", ...registryComment.split("\n").map((line) => attributionLine(line))];
30
+
31
+ const generatedHeader = (docs: GlDocContext): string =>
32
+ [
33
+ "/**",
34
+ " * GENERATED FILE: do not edit.",
35
+ " *",
36
+ " * Derived from the Khronos OpenGL registry (gl.xml).",
37
+ ...attributionLines(docs.registryComment),
38
+ " */",
39
+ ].join("\n");
21
40
 
22
- for (const { token, exportName, literal, feature } of tokens) {
23
- const groupNote = token.groups.length > 0 ? ` Groups: ${quotedGroupList(token.groups)}.` : "";
41
+ const groupsLine = (groups: string[]): string[] => (groups.length === 0 ? [] : [` * Groups: ${backtickList(groups)}.`]);
24
42
 
25
- builder.appendDeclaration(
26
- `/** \`${token.name}\`, provided by \`${feature}\`.${groupNote} */\n` +
27
- `export const ${exportName} = ${literal};`,
28
- );
43
+ const rangePhrase = (vendor: string | undefined): string =>
44
+ vendor === undefined ? "Registry enumerant block" : `Allocated from the ${backtick(vendor)} enumerant range`;
45
+
46
+ const rangeLine = ({ vendor, blockComment }: GlEnum): string[] => {
47
+ if (vendor === undefined && blockComment === undefined) {
48
+ return [];
29
49
  }
30
50
 
31
- return `${GENERATED_HEADER}\n\n${builder.toSource()}`;
51
+ const phrase = rangePhrase(vendor);
52
+ const text = blockComment === undefined ? phrase : `${phrase}: ${blockComment}`;
53
+
54
+ return [` * ${asSentence(text)}`];
32
55
  };
33
56
 
34
- const renderTypesModule = (groupAliases: Map<string, string>): string => {
57
+ const tokenNoteLines = (token: GlEnum): string[] => [
58
+ ...groupsLine(token.groups),
59
+ ...(token.comment === undefined ? [] : [` * Token note: ${asSentence(token.comment)}`]),
60
+ ...(token.alias === undefined ? [] : [` * Also known as ${backtick(token.alias)}.`]),
61
+ ...(token.valueType === undefined ? [] : [` * Tagged ${backtick(token.valueType)} in the registry.`]),
62
+ ...rangeLine(token),
63
+ ];
64
+
65
+ const enumJsDoc = ({ token, provenance }: EnumRow, docs: GlDocContext): string =>
66
+ [
67
+ "/**",
68
+ ` * ${backtick(token.name)}.`,
69
+ " *",
70
+ ...provenanceLines(provenance, docs.extensionEnums.get(token.name) ?? []),
71
+ ...tokenNoteLines(token),
72
+ " */",
73
+ ].join("\n");
74
+
75
+ const renderEnumsModule = (tokens: EnumRow[], docs: GlDocContext): string => {
35
76
  const builder = new ModuleBuilder();
36
- builder.imports.addNamed("@gtkx/native", "ExternalObject", true);
37
- builder.imports.addNamed("@gtkx/native", "Handle", true);
38
77
 
39
- builder.appendDeclaration(
40
- "/** An opaque `GLsync` fence handle. */\nexport type GLsync = ExternalObject<Handle>;",
41
- );
78
+ for (const row of tokens) {
79
+ builder.appendDeclaration({
80
+ name: row.exportName,
81
+ code: `${enumJsDoc(row, docs)}\nexport const ${row.exportName} = ${row.literal};`,
82
+ });
83
+ }
84
+
85
+ return `${generatedHeader(docs)}\n\n${builder.toSource()}`;
86
+ };
87
+
88
+ const scalarSentences = (alias: string, type: GlType): string[] => [
89
+ `The C ${backtick(alias)} scalar: ${backtick(type.declaration)}.`,
90
+ ...(type.requires === undefined ? [] : [`Requires the ${backtick(type.requires)} header.`]),
91
+ ...(type.comment === undefined ? [] : [`Registry note: ${asSentence(type.comment)}`]),
92
+ ];
93
+
94
+ const scalarJsDoc = (alias: string, docs: GlDocContext): string => {
95
+ const type = docs.types.get(alias);
96
+
97
+ if (type === undefined) {
98
+ return `/** The C ${backtick(alias)} scalar. */`;
99
+ }
100
+
101
+ return `/** ${scalarSentences(alias, type).join(" ")} */`;
102
+ };
103
+
104
+ const syncJsDoc = (docs: GlDocContext): string => {
105
+ const type = docs.types.get("GLsync");
106
+
107
+ if (type === undefined) {
108
+ return `/** ${SYNC_SUMMARY}. */`;
109
+ }
42
110
 
43
- builder.appendDeclaration(
44
- "/** An opaque native pointer handle (e.g. a `glMapBufferRange` mapping). */\n" +
45
- "export type GLpointer = ExternalObject<Handle>;",
46
- );
111
+ return `/** ${SYNC_SUMMARY}: ${backtick(type.declaration)}. */`;
112
+ };
47
113
 
114
+ const groupSummary = (group: string, isBitmask: boolean): string =>
115
+ isBitmask
116
+ ? `Registry enum group ${backtick(group)}, declared as a bitmask: members are combined with \`|\`.`
117
+ : `Registry enum group ${backtick(group)}.`;
118
+
119
+ const memberLines = (members: string[]): string[] =>
120
+ members.length === 0 ? [] : [" *", ` * Members: ${backtickList(members)}.`];
121
+
122
+ const groupAliasJsDoc = (group: string, base: string, docs: GlDocContext): string =>
123
+ [
124
+ "/**",
125
+ ` * ${groupSummary(group, docs.bitmaskGroups.has(group))}`,
126
+ " *",
127
+ ` * Open and documentation-only; any ${backtick(base)} value is accepted.`,
128
+ ...memberLines(docs.groupMembers.get(group) ?? []),
129
+ " */",
130
+ ].join("\n");
131
+
132
+ const appendScalarAliases = (builder: ModuleBuilder, docs: GlDocContext): void => {
48
133
  const seen: Set<string> = new Set();
49
134
 
50
135
  for (const scalar of GL_SCALARS.values()) {
@@ -54,21 +139,45 @@ const renderTypesModule = (groupAliases: Map<string, string>): string => {
54
139
 
55
140
  seen.add(scalar.tsAlias);
56
141
 
57
- builder.appendDeclaration(
58
- `/** The C \`${scalar.tsAlias}\` scalar. */\nexport type ${scalar.tsAlias} = number;`,
59
- );
142
+ builder.appendDeclaration({
143
+ name: scalar.tsAlias,
144
+ code: `${scalarJsDoc(scalar.tsAlias, docs)}\nexport type ${scalar.tsAlias} = number;`,
145
+ });
60
146
  }
147
+ };
61
148
 
62
- const sortedAliases = sortStringsBy(groupAliases.entries(), ([key]) => key);
149
+ const appendGroupAliases = (builder: ModuleBuilder, groupAliases: Map<string, string>, docs: GlDocContext): void => {
150
+ const sorted = sortStringsBy(groupAliases.entries(), ([key]) => key);
63
151
 
64
- for (const [group, base] of sortedAliases) {
65
- builder.appendDeclaration(
66
- `/** Registry enum group \`${group}\`; open and documentation-only, ` +
67
- `any \`${base}\` value is accepted. */\nexport type ${group} = ${base};`,
68
- );
152
+ for (const [group, base] of sorted) {
153
+ builder.appendDeclaration({
154
+ name: group,
155
+ code: `${groupAliasJsDoc(group, base, docs)}\nexport type ${group} = ${base};`,
156
+ });
69
157
  }
158
+ };
159
+
160
+ const renderTypesModule = (groupAliases: Map<string, string>, docs: GlDocContext): string => {
161
+ const builder = new ModuleBuilder();
162
+ builder.imports.addNamed("@gtkx/native", "ExternalObject", true);
163
+ builder.imports.addNamed("@gtkx/native", "Handle", true);
164
+
165
+ builder.appendDeclaration({
166
+ name: "GLsync",
167
+ code: `${syncJsDoc(docs)}\nexport type GLsync = ExternalObject<Handle>;`,
168
+ });
169
+
170
+ builder.appendDeclaration({
171
+ name: "GLpointer",
172
+ code:
173
+ "/** An opaque native pointer handle (e.g. a `glMapBufferRange` mapping). */\n" +
174
+ "export type GLpointer = ExternalObject<Handle>;",
175
+ });
176
+
177
+ appendScalarAliases(builder, docs);
178
+ appendGroupAliases(builder, groupAliases, docs);
70
179
 
71
- return `${GENERATED_HEADER}\n\n${builder.toSource()}`;
180
+ return `${generatedHeader(docs)}\n\n${builder.toSource()}`;
72
181
  };
73
182
 
74
183
  const appendTypeImports = (builder: ModuleBuilder, usedTypes: Set<string>): void => {
@@ -91,7 +200,7 @@ const appendCommandBindings = (builder: ModuleBuilder, commands: RenderedCommand
91
200
 
92
201
  const appendCommandDeclarations = (builder: ModuleBuilder, commands: RenderedCommand[]): void => {
93
202
  for (const command of commands) {
94
- builder.appendDeclaration(command.declaration);
203
+ builder.appendDeclaration({ name: command.exportName, code: command.declaration });
95
204
  }
96
205
  };
97
206
 
@@ -99,6 +208,7 @@ const renderCommandsModule = (
99
208
  rendered: RenderedCommand[],
100
209
  singulars: RenderedCommand[],
101
210
  usedTypes: Set<string>,
211
+ docs: GlDocContext,
102
212
  ): string => {
103
213
  const builder = new ModuleBuilder();
104
214
  builder.imports.addNamed("@gtkx/runtime", "t");
@@ -109,7 +219,7 @@ const renderCommandsModule = (
109
219
  appendCommandDeclarations(builder, rendered);
110
220
  appendCommandDeclarations(builder, singulars);
111
221
 
112
- return `${GENERATED_HEADER}\n\n${builder.toSource()}`;
222
+ return `${generatedHeader(docs)}\n\n${builder.toSource()}`;
113
223
  };
114
224
 
115
- export { renderEnumsModule, renderTypesModule, renderCommandsModule };
225
+ export { renderEnumsModule, renderTypesModule, renderCommandsModule, type EnumRow };
@@ -0,0 +1,74 @@
1
+ import { lowerFirst, toCamelIdentifier } from "@gtkx/utils";
2
+ import type { GlExtensionAttribution } from "./extensions.js";
3
+ import type { GlRemoval, GlSymbolProvenance } from "./select.js";
4
+
5
+ type MetadataNotesOptions = {
6
+ type: string;
7
+ group?: string;
8
+ len?: string;
9
+ objectClass?: string;
10
+ kinds: string[];
11
+ note?: string;
12
+ };
13
+
14
+ const commandExportName = (name: string): string =>
15
+ toCamelIdentifier(name.startsWith("gl") ? lowerFirst(name.slice(2)) : name);
16
+
17
+ const backtick = (text: string): string => `\`${text}\``;
18
+ const backtickList = (values: string[]): string => values.map((value) => backtick(value)).join(", ");
19
+ const asSentence = (text: string): string => (text.endsWith(".") ? text : `${text}.`);
20
+
21
+ const removalPhrase = (removal: GlRemoval): string =>
22
+ removal.comment === undefined
23
+ ? backtick(removal.feature)
24
+ : `${backtick(removal.feature)} (${removal.comment})`;
25
+
26
+ const removalLine = (provenance: GlSymbolProvenance): string => {
27
+ const phrases = provenance.removals.map((removal) => removalPhrase(removal)).join(", ");
28
+
29
+ return ` * Removed from the core profile by ${phrases}, then restored by ${backtick(provenance.feature)}.`;
30
+ };
31
+
32
+ const extensionLine = (extensions: GlExtensionAttribution[]): string => {
33
+ const names = backtickList(extensions.map((extension) => extension.name));
34
+
35
+ return ` * Also provided by the ${names} extension${extensions.length === 1 ? "" : "s"}.`;
36
+ };
37
+
38
+ const extensionNoteLines = (extensions: GlExtensionAttribution[]): string[] =>
39
+ extensions.flatMap((extension) =>
40
+ extension.notes.map((note) => ` * ${backtick(extension.name)} note: ${asSentence(note)}`));
41
+
42
+ const extensionLines = (extensions: GlExtensionAttribution[]): string[] =>
43
+ extensions.length === 0 ? [] : [extensionLine(extensions), ...extensionNoteLines(extensions)];
44
+
45
+ const provenanceLines = (provenance: GlSymbolProvenance, extensions: GlExtensionAttribution[]): string[] => [
46
+ ` * Provided by ${backtick(provenance.feature)}.`,
47
+ ...(provenance.removals.length > 0 ? [removalLine(provenance)] : []),
48
+ ...(provenance.requireComment === undefined ? [] : [` * Registry note: ${provenance.requireComment}`]),
49
+ ...extensionLines(extensions),
50
+ ];
51
+
52
+ const metadataNotes = ({ type, group, len, objectClass, kinds, note }: MetadataNotesOptions): string =>
53
+ [
54
+ backtick(type),
55
+ ...(group === undefined ? [] : [`group ${backtick(group)}`]),
56
+ ...(len === undefined ? [] : [`length ${backtick(len)}`]),
57
+ ...(objectClass === undefined ? [] : [`object class ${backtick(objectClass)}`]),
58
+ ...kinds.map((kind) => `kind ${backtick(kind)}`),
59
+ ...(note === undefined ? [] : [note]),
60
+ ].join(", ");
61
+
62
+ const kindDescriptions = (kinds: string[], table: Map<string, string>): string =>
63
+ kinds.flatMap((kind) => table.get(kind) ?? []).join(" ");
64
+
65
+ export {
66
+ asSentence,
67
+ backtick,
68
+ backtickList,
69
+ commandExportName,
70
+ kindDescriptions,
71
+ metadataNotes,
72
+ type MetadataNotesOptions,
73
+ provenanceLines,
74
+ };
@@ -6,7 +6,7 @@ type ParamPair = {
6
6
  param: GlParam | undefined;
7
7
  };
8
8
 
9
- const paramPairAt = (plan: CommandPlan & { ok: true }, index: number): ParamPair => ({
9
+ const paramPairAt = (plan: CommandPlan & { isOk: true }, index: number): ParamPair => ({
10
10
  paramPlan: plan.params[index],
11
11
  param: plan.command.params[index],
12
12
  });
@@ -1,10 +1,10 @@
1
- import { readFileSync } from "node:fs";
2
- import { createXmlParser } from "../xml.js";
1
+ import { createXmlParser, parseXmlFile } from "../xml.js";
3
2
 
4
3
  type OrderedNode = Record<string, unknown>;
5
4
 
6
5
  const ATTRIBUTES_KEY = ":@";
7
6
  const TEXT_KEY = "#text";
7
+ const REGISTRY_LABEL = "OpenGL registry";
8
8
 
9
9
  const PARSER = createXmlParser({
10
10
  trimValues: false,
@@ -12,8 +12,7 @@ const PARSER = createXmlParser({
12
12
  });
13
13
 
14
14
  const parseRegistryFile = (path: string): OrderedNode[] => {
15
- const xml = readFileSync(path, "utf8");
16
- const documentNodes = PARSER.parse(xml) as OrderedNode[];
15
+ const documentNodes = parseXmlFile({ parser: PARSER, label: REGISTRY_LABEL, path }) as OrderedNode[];
17
16
 
18
17
  for (const node of documentNodes) {
19
18
  if (nodeTag(node) === "registry") {
@@ -1,6 +1,8 @@
1
1
  import { sanitizeIdentifier, sortStrings, sortStringsBy } from "@gtkx/utils";
2
+ import { buildDocContext, type GlDocContext } from "./doc-context.js";
3
+ import { buildExtensionIndex } from "./extensions.js";
2
4
  import { type GlEnum, loadGlRegistry } from "./model.js";
3
- import { renderCommandsModule, renderEnumsModule, renderTypesModule } from "./modules.js";
5
+ import { type EnumRow, renderCommandsModule, renderEnumsModule, renderTypesModule } from "./modules.js";
4
6
  import { paramPairAt } from "./param-pair.js";
5
7
  import {
6
8
  type CommandPlan,
@@ -11,7 +13,7 @@ import {
11
13
  planCommand,
12
14
  } from "./plan.js";
13
15
  import { deriveDeleteSingular, deriveGenSingular, renderCommand, type RenderedCommand } from "./render.js";
14
- import { type GlSelection, resolveEnum, selectSubset } from "./select.js";
16
+ import { type GlSelection, type GlSubset, type GlSymbolProvenance, resolveEnum, selectSubset } from "./select.js";
15
17
 
16
18
  type GlExclusion = {
17
19
  command: string;
@@ -24,6 +26,8 @@ type GlGenerationReport = {
24
26
  emittedCommands: number;
25
27
  derivedSingulars: number;
26
28
  exclusions: GlExclusion[];
29
+ enumExclusions: string[];
30
+ coreRemovals: GlSubset["removed"];
27
31
  };
28
32
 
29
33
  type GlGenerationResult = {
@@ -31,26 +35,29 @@ type GlGenerationResult = {
31
35
  report: GlGenerationReport;
32
36
  };
33
37
 
34
- type GroupBearingParamPlan = Extract<ParamPlan, { kind: "scalar" | "array-in" | "ref-out" }>;
38
+ type GroupBearingParamPlan = Extract<ParamPlan, { kind: "scalar" | "array-in" | "ref-out" | "ref-array-out" }>;
35
39
 
36
40
  type GlGenerationOptions = {
37
41
  registryPath: string;
38
42
  overrideExports: Set<string>;
39
43
  };
40
44
 
41
- type OkPlan = CommandPlan & { ok: true };
45
+ type OkPlan = CommandPlan & { isOk: true };
42
46
 
43
47
  type PlannedSelection = {
44
48
  okPlans: OkPlan[];
45
- planFeatures: Map<string, string>;
49
+ planFeatures: Map<string, GlSymbolProvenance>;
46
50
  exclusions: GlExclusion[];
47
51
  };
48
52
 
49
- type EnumRow = {
50
- token: GlEnum;
51
- exportName: string;
52
- literal: string;
53
- feature: string;
53
+ type EnumSelection = {
54
+ rows: EnumRow[];
55
+ enumExclusions: string[];
56
+ };
57
+
58
+ type RenderedCommands = {
59
+ rendered: RenderedCommand[];
60
+ singulars: RenderedCommand[];
54
61
  };
55
62
 
56
63
  const BYTE_OFFSET_PARAMS: Set<string> = new Set([
@@ -103,7 +110,14 @@ const PLAN_POLICY: GlPlanPolicy = {
103
110
  };
104
111
 
105
112
  const MAX_SAFE = BigInt(Number.MAX_SAFE_INTEGER);
106
- const GROUP_BEARING_PARAM_KINDS: Set<ParamPlan["kind"]> = new Set(["scalar", "array-in", "ref-out"]);
113
+
114
+ const GROUP_BEARING_PARAM_KINDS: Set<ParamPlan["kind"]> = new Set([
115
+ "scalar",
116
+ "array-in",
117
+ "ref-out",
118
+ "ref-array-out",
119
+ ]);
120
+
107
121
  const GL_SELECTION: GlSelection = { api: "gl", version: 4.6, profile: "core" };
108
122
 
109
123
  const enumExportName = (name: string): string =>
@@ -204,7 +218,7 @@ const planSelectedCommand = (registry: ReturnType<typeof loadGlRegistry>, name:
204
218
 
205
219
  const plan = planCommand(command, PLAN_POLICY);
206
220
 
207
- if (!plan.ok) {
221
+ if (!plan.isOk) {
208
222
  return { command: name, reason: plan.reason };
209
223
  }
210
224
 
@@ -213,19 +227,19 @@ const planSelectedCommand = (registry: ReturnType<typeof loadGlRegistry>, name:
213
227
 
214
228
  const planSelectedCommands = (
215
229
  registry: ReturnType<typeof loadGlRegistry>,
216
- commandNames: Map<string, string>,
230
+ commandNames: Map<string, GlSymbolProvenance>,
217
231
  ): PlannedSelection => {
218
232
  const exclusions: GlExclusion[] = [];
219
233
  const okPlans: OkPlan[] = [];
220
- const planFeatures: Map<string, string> = new Map();
234
+ const planFeatures: Map<string, GlSymbolProvenance> = new Map();
221
235
  const sortedCommands = sortStringsBy(commandNames.entries(), ([key]) => key);
222
236
 
223
- for (const [name, feature] of sortedCommands) {
237
+ for (const [name, provenance] of sortedCommands) {
224
238
  const result = planSelectedCommand(registry, name);
225
239
 
226
- if ("ok" in result) {
240
+ if ("isOk" in result) {
227
241
  okPlans.push(result);
228
- planFeatures.set(name, feature);
242
+ planFeatures.set(name, provenance);
229
243
  } else {
230
244
  exclusions.push(result);
231
245
  }
@@ -234,22 +248,62 @@ const planSelectedCommands = (
234
248
  return { okPlans, planFeatures, exclusions };
235
249
  };
236
250
 
237
- const buildEnumRows = (registry: ReturnType<typeof loadGlRegistry>, enumNames: Map<string, string>): EnumRow[] => {
238
- const enumRows: EnumRow[] = [];
251
+ const buildEnumRows = (
252
+ registry: ReturnType<typeof loadGlRegistry>,
253
+ enumNames: Map<string, GlSymbolProvenance>,
254
+ selection: GlSelection,
255
+ ): EnumSelection => {
256
+ const rows: EnumRow[] = [];
257
+ const enumExclusions: string[] = [];
239
258
  const sortedEnums = sortStringsBy(enumNames.entries(), ([key]) => key);
240
259
 
241
- for (const [name, feature] of sortedEnums) {
242
- const token = resolveEnum(registry, name);
260
+ for (const [name, provenance] of sortedEnums) {
261
+ const token = resolveEnum(registry, name, selection.api);
243
262
  const literal = enumLiteral(token);
244
263
 
245
264
  if (literal === undefined) {
246
- continue;
265
+ enumExclusions.push(name);
266
+ } else {
267
+ rows.push({ token, exportName: enumExportName(name), literal, provenance });
247
268
  }
269
+ }
248
270
 
249
- enumRows.push({ token, exportName: enumExportName(name), literal, feature });
271
+ return { rows, enumExclusions };
272
+ };
273
+
274
+ const provenanceFor = (planFeatures: Map<string, GlSymbolProvenance>, name: string): GlSymbolProvenance => {
275
+ const found = planFeatures.get(name);
276
+
277
+ if (found === undefined) {
278
+ throw new Error(`Command ${name} was planned without a selection provenance`);
250
279
  }
251
280
 
252
- return enumRows;
281
+ return found;
282
+ };
283
+
284
+ const renderCommands = (
285
+ plans: OkPlan[],
286
+ planFeatures: Map<string, GlSymbolProvenance>,
287
+ usedTypes: Set<string>,
288
+ docs: GlDocContext,
289
+ ): RenderedCommands => {
290
+ const rendered: RenderedCommand[] = [];
291
+ const singulars: RenderedCommand[] = [];
292
+
293
+ for (const plan of plans) {
294
+ const provenance = provenanceFor(planFeatures, plan.command.name);
295
+ rendered.push(renderCommand(plan, provenance, usedTypes, docs));
296
+
297
+ const singular =
298
+ deriveGenSingular(plan, provenance, usedTypes, docs) ??
299
+ deriveDeleteSingular(plan, provenance, usedTypes, docs);
300
+
301
+ if (singular !== undefined) {
302
+ singulars.push(singular);
303
+ }
304
+ }
305
+
306
+ return { rendered, singulars };
253
307
  };
254
308
 
255
309
  const claimExportName = (exportNames: Map<string, string>, name: string, owner: string): void => {
@@ -299,27 +353,24 @@ const generateGlModules = (options: GlGenerationOptions): GlGenerationResult =>
299
353
  const registry = loadGlRegistry(options.registryPath);
300
354
  const subset = selectSubset(registry, selection);
301
355
  const { okPlans, planFeatures, exclusions } = planSelectedCommands(registry, subset.commands);
302
- const usedTypes: Set<string> = new Set();
303
- const rendered: RenderedCommand[] = [];
304
- const singulars: RenderedCommand[] = [];
356
+ const { rows, enumExclusions } = buildEnumRows(registry, subset.enums, selection);
357
+ const groupAliases = collectGroupAliases(okPlans);
305
358
 
306
- for (const plan of okPlans) {
307
- const feature = planFeatures.get(plan.command.name) ?? "unknown feature";
308
- rendered.push(renderCommand(plan, feature, usedTypes));
309
- const singular = deriveGenSingular(plan, feature, usedTypes) ?? deriveDeleteSingular(plan, feature, usedTypes);
310
-
311
- if (singular !== undefined) {
312
- singulars.push(singular);
313
- }
314
- }
359
+ const docs = buildDocContext({
360
+ registry,
361
+ extensions: buildExtensionIndex(registry, selection),
362
+ plans: okPlans,
363
+ enumRows: rows,
364
+ });
315
365
 
316
- const enumRows = buildEnumRows(registry, subset.enums);
317
- assertExportNamesDisjoint(rendered, singulars, enumRows, options.overrideExports);
366
+ const usedTypes: Set<string> = new Set();
367
+ const { rendered, singulars } = renderCommands(okPlans, planFeatures, usedTypes, docs);
368
+ assertExportNamesDisjoint(rendered, singulars, rows, options.overrideExports);
318
369
 
319
370
  const files: Map<string, string> = new Map([
320
- ["types.ts", renderTypesModule(collectGroupAliases(okPlans))],
321
- ["enums.ts", renderEnumsModule(enumRows)],
322
- ["commands.ts", renderCommandsModule(rendered, singulars, usedTypes)],
371
+ ["types.ts", renderTypesModule(groupAliases, docs)],
372
+ ["enums.ts", renderEnumsModule(rows, docs)],
373
+ ["commands.ts", renderCommandsModule(rendered, singulars, usedTypes, docs)],
323
374
  ]);
324
375
 
325
376
  return {
@@ -330,8 +381,10 @@ const generateGlModules = (options: GlGenerationOptions): GlGenerationResult =>
330
381
  emittedCommands: rendered.length,
331
382
  derivedSingulars: singulars.length,
332
383
  exclusions,
384
+ enumExclusions,
385
+ coreRemovals: subset.removed,
333
386
  },
334
387
  };
335
388
  };
336
389
 
337
- export { generateGlModules, type GlGenerationReport, type GlGenerationResult };
390
+ export { generateGlModules, type GlGenerationReport };
@@ -51,12 +51,12 @@ type GlPlanPolicy = {
51
51
 
52
52
  type CommandPlan =
53
53
  | {
54
- ok: true;
54
+ isOk: true;
55
55
  command: GlCommand;
56
56
  params: ParamPlan[];
57
57
  returnPlan: ReturnPlan;
58
58
  } |
59
- { ok: false; command: GlCommand; reason: GlExclusionReason };
59
+ { isOk: false; command: GlCommand; reason: GlExclusionReason };
60
60
 
61
61
  type ParamOutcome = { plan: ParamPlan } | { reason: GlExclusionReason };
62
62
 
@@ -317,21 +317,19 @@ const planCommand = (command: GlCommand, policy: GlPlanPolicy): CommandPlan => {
317
317
  const outcome = planParam(command, param, policy);
318
318
 
319
319
  if ("reason" in outcome) {
320
- return { ok: false, command, reason: outcome.reason };
320
+ return { isOk: false, command, reason: outcome.reason };
321
321
  }
322
322
 
323
323
  params.push(outcome.plan);
324
324
  }
325
325
 
326
- return { ok: true, command, params, returnPlan: planReturn(command) };
326
+ return { isOk: true, command, params, returnPlan: planReturn(command) };
327
327
  };
328
328
 
329
329
  export {
330
330
  GL_SCALARS,
331
- parseCType,
332
331
  planCommand,
333
332
  type GlScalar,
334
- type ParsedCType,
335
333
  type ParamPlan,
336
334
  type ReturnPlan,
337
335
  type GlExclusionReason,