@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,42 +1,127 @@
1
1
  import { sortStrings, sortStringsBy } from "@gtkx/utils";
2
2
  import { ModuleBuilder } from "../writer/module.js";
3
+ import { asSentence, backtick, backtickList, provenanceLines } from "./notes.js";
3
4
  import { GL_SCALARS } from "./plan.js";
4
- const LIB_CONSTANT = "export const LIB = \"libGL.so.1\";";
5
- const GENERATED_HEADER = `/**
6
- * GENERATED FILE: do not edit.
7
- */`;
5
+ const LIB_CONSTANT = "/** The shared library the generated OpenGL bindings are loaded from. */\n" +
6
+ "export const LIB = \"libGL.so.1\";";
7
+ const SYNC_SUMMARY = "An opaque `GLsync` fence handle";
8
8
  const TS_PRIMITIVES = new Set(["boolean", "string", "void", "number"]);
9
- const quotedGroupList = (groups) => groups.map((group) => `\`${group}\``).join(", ");
10
- const renderEnumsModule = (tokens) => {
11
- const builder = new ModuleBuilder();
12
- for (const { token, exportName, literal, feature } of tokens) {
13
- const groupNote = token.groups.length > 0 ? ` Groups: ${quotedGroupList(token.groups)}.` : "";
14
- builder.appendDeclaration(`/** \`${token.name}\`, provided by \`${feature}\`.${groupNote} */\n` +
15
- `export const ${exportName} = ${literal};`);
9
+ const attributionLine = (line) => (line.length === 0 ? " *" : ` * ${line}`);
10
+ const attributionLines = (registryComment) => registryComment === undefined
11
+ ? []
12
+ : [" *", ...registryComment.split("\n").map((line) => attributionLine(line))];
13
+ const generatedHeader = (docs) => [
14
+ "/**",
15
+ " * GENERATED FILE: do not edit.",
16
+ " *",
17
+ " * Derived from the Khronos OpenGL registry (gl.xml).",
18
+ ...attributionLines(docs.registryComment),
19
+ " */",
20
+ ].join("\n");
21
+ const groupsLine = (groups) => (groups.length === 0 ? [] : [` * Groups: ${backtickList(groups)}.`]);
22
+ const rangePhrase = (vendor) => vendor === undefined ? "Registry enumerant block" : `Allocated from the ${backtick(vendor)} enumerant range`;
23
+ const rangeLine = ({ vendor, blockComment }) => {
24
+ if (vendor === undefined && blockComment === undefined) {
25
+ return [];
16
26
  }
17
- return `${GENERATED_HEADER}\n\n${builder.toSource()}`;
27
+ const phrase = rangePhrase(vendor);
28
+ const text = blockComment === undefined ? phrase : `${phrase}: ${blockComment}`;
29
+ return [` * ${asSentence(text)}`];
18
30
  };
19
- const renderTypesModule = (groupAliases) => {
31
+ const tokenNoteLines = (token) => [
32
+ ...groupsLine(token.groups),
33
+ ...(token.comment === undefined ? [] : [` * Token note: ${asSentence(token.comment)}`]),
34
+ ...(token.alias === undefined ? [] : [` * Also known as ${backtick(token.alias)}.`]),
35
+ ...(token.valueType === undefined ? [] : [` * Tagged ${backtick(token.valueType)} in the registry.`]),
36
+ ...rangeLine(token),
37
+ ];
38
+ const enumJsDoc = ({ token, provenance }, docs) => [
39
+ "/**",
40
+ ` * ${backtick(token.name)}.`,
41
+ " *",
42
+ ...provenanceLines(provenance, docs.extensionEnums.get(token.name) ?? []),
43
+ ...tokenNoteLines(token),
44
+ " */",
45
+ ].join("\n");
46
+ const renderEnumsModule = (tokens, docs) => {
20
47
  const builder = new ModuleBuilder();
21
- builder.imports.addNamed("@gtkx/native", "ExternalObject", true);
22
- builder.imports.addNamed("@gtkx/native", "Handle", true);
23
- builder.appendDeclaration("/** An opaque `GLsync` fence handle. */\nexport type GLsync = ExternalObject<Handle>;");
24
- builder.appendDeclaration("/** An opaque native pointer handle (e.g. a `glMapBufferRange` mapping). */\n" +
25
- "export type GLpointer = ExternalObject<Handle>;");
48
+ for (const row of tokens) {
49
+ builder.appendDeclaration({
50
+ name: row.exportName,
51
+ code: `${enumJsDoc(row, docs)}\nexport const ${row.exportName} = ${row.literal};`,
52
+ });
53
+ }
54
+ return `${generatedHeader(docs)}\n\n${builder.toSource()}`;
55
+ };
56
+ const scalarSentences = (alias, type) => [
57
+ `The C ${backtick(alias)} scalar: ${backtick(type.declaration)}.`,
58
+ ...(type.requires === undefined ? [] : [`Requires the ${backtick(type.requires)} header.`]),
59
+ ...(type.comment === undefined ? [] : [`Registry note: ${asSentence(type.comment)}`]),
60
+ ];
61
+ const scalarJsDoc = (alias, docs) => {
62
+ const type = docs.types.get(alias);
63
+ if (type === undefined) {
64
+ return `/** The C ${backtick(alias)} scalar. */`;
65
+ }
66
+ return `/** ${scalarSentences(alias, type).join(" ")} */`;
67
+ };
68
+ const syncJsDoc = (docs) => {
69
+ const type = docs.types.get("GLsync");
70
+ if (type === undefined) {
71
+ return `/** ${SYNC_SUMMARY}. */`;
72
+ }
73
+ return `/** ${SYNC_SUMMARY}: ${backtick(type.declaration)}. */`;
74
+ };
75
+ const groupSummary = (group, isBitmask) => isBitmask
76
+ ? `Registry enum group ${backtick(group)}, declared as a bitmask: members are combined with \`|\`.`
77
+ : `Registry enum group ${backtick(group)}.`;
78
+ const memberLines = (members) => members.length === 0 ? [] : [" *", ` * Members: ${backtickList(members)}.`];
79
+ const groupAliasJsDoc = (group, base, docs) => [
80
+ "/**",
81
+ ` * ${groupSummary(group, docs.bitmaskGroups.has(group))}`,
82
+ " *",
83
+ ` * Open and documentation-only; any ${backtick(base)} value is accepted.`,
84
+ ...memberLines(docs.groupMembers.get(group) ?? []),
85
+ " */",
86
+ ].join("\n");
87
+ const appendScalarAliases = (builder, docs) => {
26
88
  const seen = new Set();
27
89
  for (const scalar of GL_SCALARS.values()) {
28
90
  if (seen.has(scalar.tsAlias)) {
29
91
  continue;
30
92
  }
31
93
  seen.add(scalar.tsAlias);
32
- builder.appendDeclaration(`/** The C \`${scalar.tsAlias}\` scalar. */\nexport type ${scalar.tsAlias} = number;`);
94
+ builder.appendDeclaration({
95
+ name: scalar.tsAlias,
96
+ code: `${scalarJsDoc(scalar.tsAlias, docs)}\nexport type ${scalar.tsAlias} = number;`,
97
+ });
33
98
  }
34
- const sortedAliases = sortStringsBy(groupAliases.entries(), ([key]) => key);
35
- for (const [group, base] of sortedAliases) {
36
- builder.appendDeclaration(`/** Registry enum group \`${group}\`; open and documentation-only, ` +
37
- `any \`${base}\` value is accepted. */\nexport type ${group} = ${base};`);
99
+ };
100
+ const appendGroupAliases = (builder, groupAliases, docs) => {
101
+ const sorted = sortStringsBy(groupAliases.entries(), ([key]) => key);
102
+ for (const [group, base] of sorted) {
103
+ builder.appendDeclaration({
104
+ name: group,
105
+ code: `${groupAliasJsDoc(group, base, docs)}\nexport type ${group} = ${base};`,
106
+ });
38
107
  }
39
- return `${GENERATED_HEADER}\n\n${builder.toSource()}`;
108
+ };
109
+ const renderTypesModule = (groupAliases, docs) => {
110
+ const builder = new ModuleBuilder();
111
+ builder.imports.addNamed("@gtkx/native", "ExternalObject", true);
112
+ builder.imports.addNamed("@gtkx/native", "Handle", true);
113
+ builder.appendDeclaration({
114
+ name: "GLsync",
115
+ code: `${syncJsDoc(docs)}\nexport type GLsync = ExternalObject<Handle>;`,
116
+ });
117
+ builder.appendDeclaration({
118
+ name: "GLpointer",
119
+ code: "/** An opaque native pointer handle (e.g. a `glMapBufferRange` mapping). */\n" +
120
+ "export type GLpointer = ExternalObject<Handle>;",
121
+ });
122
+ appendScalarAliases(builder, docs);
123
+ appendGroupAliases(builder, groupAliases, docs);
124
+ return `${generatedHeader(docs)}\n\n${builder.toSource()}`;
40
125
  };
41
126
  const appendTypeImports = (builder, usedTypes) => {
42
127
  for (const alias of sortStrings(usedTypes)) {
@@ -55,10 +140,10 @@ const appendCommandBindings = (builder, commands) => {
55
140
  };
56
141
  const appendCommandDeclarations = (builder, commands) => {
57
142
  for (const command of commands) {
58
- builder.appendDeclaration(command.declaration);
143
+ builder.appendDeclaration({ name: command.exportName, code: command.declaration });
59
144
  }
60
145
  };
61
- const renderCommandsModule = (rendered, singulars, usedTypes) => {
146
+ const renderCommandsModule = (rendered, singulars, usedTypes, docs) => {
62
147
  const builder = new ModuleBuilder();
63
148
  builder.imports.addNamed("@gtkx/runtime", "t");
64
149
  appendTypeImports(builder, usedTypes);
@@ -67,7 +152,7 @@ const renderCommandsModule = (rendered, singulars, usedTypes) => {
67
152
  appendCommandBindings(builder, singulars);
68
153
  appendCommandDeclarations(builder, rendered);
69
154
  appendCommandDeclarations(builder, singulars);
70
- return `${GENERATED_HEADER}\n\n${builder.toSource()}`;
155
+ return `${generatedHeader(docs)}\n\n${builder.toSource()}`;
71
156
  };
72
157
  export { renderEnumsModule, renderTypesModule, renderCommandsModule };
73
158
  //# sourceMappingURL=modules.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"modules.js","sourceRoot":"","sources":["../../src/khronos/modules.ts"],"names":[],"mappings":"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","sourcesContent":["import { sortStrings, sortStringsBy } from \"@gtkx/utils\";\nimport type { GlEnum } from \"./model.js\";\nimport type { RenderedCommand } from \"./render.js\";\nimport { ModuleBuilder } from \"../writer/module.js\";\nimport { GL_SCALARS } from \"./plan.js\";\n\nconst LIB_CONSTANT = \"export const LIB = \\\"libGL.so.1\\\";\";\n\nconst GENERATED_HEADER = `/**\n * GENERATED FILE: do not edit.\n */`;\n\nconst TS_PRIMITIVES: Set<string> = new Set([\"boolean\", \"string\", \"void\", \"number\"]);\n\nconst quotedGroupList = (groups: string[]): string => groups.map((group) => `\\`${group}\\``).join(\", \");\n\nconst renderEnumsModule = (\n tokens: { token: GlEnum; exportName: string; literal: string; feature: string }[],\n): string => {\n const builder = new ModuleBuilder();\n\n for (const { token, exportName, literal, feature } of tokens) {\n const groupNote = token.groups.length > 0 ? ` Groups: ${quotedGroupList(token.groups)}.` : \"\";\n\n builder.appendDeclaration(\n `/** \\`${token.name}\\`, provided by \\`${feature}\\`.${groupNote} */\\n` +\n `export const ${exportName} = ${literal};`,\n );\n }\n\n return `${GENERATED_HEADER}\\n\\n${builder.toSource()}`;\n};\n\nconst renderTypesModule = (groupAliases: Map<string, string>): string => {\n const builder = new ModuleBuilder();\n builder.imports.addNamed(\"@gtkx/native\", \"ExternalObject\", true);\n builder.imports.addNamed(\"@gtkx/native\", \"Handle\", true);\n\n builder.appendDeclaration(\n \"/** An opaque `GLsync` fence handle. */\\nexport type GLsync = ExternalObject<Handle>;\",\n );\n\n builder.appendDeclaration(\n \"/** An opaque native pointer handle (e.g. a `glMapBufferRange` mapping). */\\n\" +\n \"export type GLpointer = ExternalObject<Handle>;\",\n );\n\n const seen: Set<string> = new Set();\n\n for (const scalar of GL_SCALARS.values()) {\n if (seen.has(scalar.tsAlias)) {\n continue;\n }\n\n seen.add(scalar.tsAlias);\n\n builder.appendDeclaration(\n `/** The C \\`${scalar.tsAlias}\\` scalar. */\\nexport type ${scalar.tsAlias} = number;`,\n );\n }\n\n const sortedAliases = sortStringsBy(groupAliases.entries(), ([key]) => key);\n\n for (const [group, base] of sortedAliases) {\n builder.appendDeclaration(\n `/** Registry enum group \\`${group}\\`; open and documentation-only, ` +\n `any \\`${base}\\` value is accepted. */\\nexport type ${group} = ${base};`,\n );\n }\n\n return `${GENERATED_HEADER}\\n\\n${builder.toSource()}`;\n};\n\nconst appendTypeImports = (builder: ModuleBuilder, usedTypes: Set<string>): void => {\n for (const alias of sortStrings(usedTypes)) {\n if (TS_PRIMITIVES.has(alias)) {\n continue;\n }\n\n builder.imports.addNamed(\"./types.js\", alias, true);\n }\n};\n\nconst appendCommandBindings = (builder: ModuleBuilder, commands: RenderedCommand[]): void => {\n for (const command of commands) {\n if (command.binding !== undefined) {\n builder.appendBinding(command.binding, command.binding);\n }\n }\n};\n\nconst appendCommandDeclarations = (builder: ModuleBuilder, commands: RenderedCommand[]): void => {\n for (const command of commands) {\n builder.appendDeclaration(command.declaration);\n }\n};\n\nconst renderCommandsModule = (\n rendered: RenderedCommand[],\n singulars: RenderedCommand[],\n usedTypes: Set<string>,\n): string => {\n const builder = new ModuleBuilder();\n builder.imports.addNamed(\"@gtkx/runtime\", \"t\");\n appendTypeImports(builder, usedTypes);\n builder.appendBinding(LIB_CONSTANT);\n appendCommandBindings(builder, rendered);\n appendCommandBindings(builder, singulars);\n appendCommandDeclarations(builder, rendered);\n appendCommandDeclarations(builder, singulars);\n\n return `${GENERATED_HEADER}\\n\\n${builder.toSource()}`;\n};\n\nexport { renderEnumsModule, renderTypesModule, renderCommandsModule };\n"]}
1
+ {"version":3,"file":"modules.js","sourceRoot":"","sources":["../../src/khronos/modules.ts"],"names":[],"mappings":"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","sourcesContent":["import { sortStrings, sortStringsBy } from \"@gtkx/utils\";\nimport type { GlDocContext } from \"./doc-context.js\";\nimport type { GlEnum, GlType } from \"./model.js\";\nimport type { RenderedCommand } from \"./render.js\";\nimport type { GlSymbolProvenance } from \"./select.js\";\nimport { ModuleBuilder } from \"../writer/module.js\";\nimport { asSentence, backtick, backtickList, provenanceLines } from \"./notes.js\";\nimport { GL_SCALARS } from \"./plan.js\";\n\ntype EnumRow = {\n token: GlEnum;\n exportName: string;\n literal: string;\n provenance: GlSymbolProvenance;\n};\n\nconst LIB_CONSTANT =\n \"/** The shared library the generated OpenGL bindings are loaded from. */\\n\" +\n \"export const LIB = \\\"libGL.so.1\\\";\";\n\nconst SYNC_SUMMARY = \"An opaque `GLsync` fence handle\";\nconst TS_PRIMITIVES: Set<string> = new Set([\"boolean\", \"string\", \"void\", \"number\"]);\n\nconst attributionLine = (line: string): string => (line.length === 0 ? \" *\" : ` * ${line}`);\n\nconst attributionLines = (registryComment: string | undefined): string[] =>\n registryComment === undefined\n ? []\n : [\" *\", ...registryComment.split(\"\\n\").map((line) => attributionLine(line))];\n\nconst generatedHeader = (docs: GlDocContext): string =>\n [\n \"/**\",\n \" * GENERATED FILE: do not edit.\",\n \" *\",\n \" * Derived from the Khronos OpenGL registry (gl.xml).\",\n ...attributionLines(docs.registryComment),\n \" */\",\n ].join(\"\\n\");\n\nconst groupsLine = (groups: string[]): string[] => (groups.length === 0 ? [] : [` * Groups: ${backtickList(groups)}.`]);\n\nconst rangePhrase = (vendor: string | undefined): string =>\n vendor === undefined ? \"Registry enumerant block\" : `Allocated from the ${backtick(vendor)} enumerant range`;\n\nconst rangeLine = ({ vendor, blockComment }: GlEnum): string[] => {\n if (vendor === undefined && blockComment === undefined) {\n return [];\n }\n\n const phrase = rangePhrase(vendor);\n const text = blockComment === undefined ? phrase : `${phrase}: ${blockComment}`;\n\n return [` * ${asSentence(text)}`];\n};\n\nconst tokenNoteLines = (token: GlEnum): string[] => [\n ...groupsLine(token.groups),\n ...(token.comment === undefined ? [] : [` * Token note: ${asSentence(token.comment)}`]),\n ...(token.alias === undefined ? [] : [` * Also known as ${backtick(token.alias)}.`]),\n ...(token.valueType === undefined ? [] : [` * Tagged ${backtick(token.valueType)} in the registry.`]),\n ...rangeLine(token),\n];\n\nconst enumJsDoc = ({ token, provenance }: EnumRow, docs: GlDocContext): string =>\n [\n \"/**\",\n ` * ${backtick(token.name)}.`,\n \" *\",\n ...provenanceLines(provenance, docs.extensionEnums.get(token.name) ?? []),\n ...tokenNoteLines(token),\n \" */\",\n ].join(\"\\n\");\n\nconst renderEnumsModule = (tokens: EnumRow[], docs: GlDocContext): string => {\n const builder = new ModuleBuilder();\n\n for (const row of tokens) {\n builder.appendDeclaration({\n name: row.exportName,\n code: `${enumJsDoc(row, docs)}\\nexport const ${row.exportName} = ${row.literal};`,\n });\n }\n\n return `${generatedHeader(docs)}\\n\\n${builder.toSource()}`;\n};\n\nconst scalarSentences = (alias: string, type: GlType): string[] => [\n `The C ${backtick(alias)} scalar: ${backtick(type.declaration)}.`,\n ...(type.requires === undefined ? [] : [`Requires the ${backtick(type.requires)} header.`]),\n ...(type.comment === undefined ? [] : [`Registry note: ${asSentence(type.comment)}`]),\n];\n\nconst scalarJsDoc = (alias: string, docs: GlDocContext): string => {\n const type = docs.types.get(alias);\n\n if (type === undefined) {\n return `/** The C ${backtick(alias)} scalar. */`;\n }\n\n return `/** ${scalarSentences(alias, type).join(\" \")} */`;\n};\n\nconst syncJsDoc = (docs: GlDocContext): string => {\n const type = docs.types.get(\"GLsync\");\n\n if (type === undefined) {\n return `/** ${SYNC_SUMMARY}. */`;\n }\n\n return `/** ${SYNC_SUMMARY}: ${backtick(type.declaration)}. */`;\n};\n\nconst groupSummary = (group: string, isBitmask: boolean): string =>\n isBitmask\n ? `Registry enum group ${backtick(group)}, declared as a bitmask: members are combined with \\`|\\`.`\n : `Registry enum group ${backtick(group)}.`;\n\nconst memberLines = (members: string[]): string[] =>\n members.length === 0 ? [] : [\" *\", ` * Members: ${backtickList(members)}.`];\n\nconst groupAliasJsDoc = (group: string, base: string, docs: GlDocContext): string =>\n [\n \"/**\",\n ` * ${groupSummary(group, docs.bitmaskGroups.has(group))}`,\n \" *\",\n ` * Open and documentation-only; any ${backtick(base)} value is accepted.`,\n ...memberLines(docs.groupMembers.get(group) ?? []),\n \" */\",\n ].join(\"\\n\");\n\nconst appendScalarAliases = (builder: ModuleBuilder, docs: GlDocContext): void => {\n const seen: Set<string> = new Set();\n\n for (const scalar of GL_SCALARS.values()) {\n if (seen.has(scalar.tsAlias)) {\n continue;\n }\n\n seen.add(scalar.tsAlias);\n\n builder.appendDeclaration({\n name: scalar.tsAlias,\n code: `${scalarJsDoc(scalar.tsAlias, docs)}\\nexport type ${scalar.tsAlias} = number;`,\n });\n }\n};\n\nconst appendGroupAliases = (builder: ModuleBuilder, groupAliases: Map<string, string>, docs: GlDocContext): void => {\n const sorted = sortStringsBy(groupAliases.entries(), ([key]) => key);\n\n for (const [group, base] of sorted) {\n builder.appendDeclaration({\n name: group,\n code: `${groupAliasJsDoc(group, base, docs)}\\nexport type ${group} = ${base};`,\n });\n }\n};\n\nconst renderTypesModule = (groupAliases: Map<string, string>, docs: GlDocContext): string => {\n const builder = new ModuleBuilder();\n builder.imports.addNamed(\"@gtkx/native\", \"ExternalObject\", true);\n builder.imports.addNamed(\"@gtkx/native\", \"Handle\", true);\n\n builder.appendDeclaration({\n name: \"GLsync\",\n code: `${syncJsDoc(docs)}\\nexport type GLsync = ExternalObject<Handle>;`,\n });\n\n builder.appendDeclaration({\n name: \"GLpointer\",\n code:\n \"/** An opaque native pointer handle (e.g. a `glMapBufferRange` mapping). */\\n\" +\n \"export type GLpointer = ExternalObject<Handle>;\",\n });\n\n appendScalarAliases(builder, docs);\n appendGroupAliases(builder, groupAliases, docs);\n\n return `${generatedHeader(docs)}\\n\\n${builder.toSource()}`;\n};\n\nconst appendTypeImports = (builder: ModuleBuilder, usedTypes: Set<string>): void => {\n for (const alias of sortStrings(usedTypes)) {\n if (TS_PRIMITIVES.has(alias)) {\n continue;\n }\n\n builder.imports.addNamed(\"./types.js\", alias, true);\n }\n};\n\nconst appendCommandBindings = (builder: ModuleBuilder, commands: RenderedCommand[]): void => {\n for (const command of commands) {\n if (command.binding !== undefined) {\n builder.appendBinding(command.binding, command.binding);\n }\n }\n};\n\nconst appendCommandDeclarations = (builder: ModuleBuilder, commands: RenderedCommand[]): void => {\n for (const command of commands) {\n builder.appendDeclaration({ name: command.exportName, code: command.declaration });\n }\n};\n\nconst renderCommandsModule = (\n rendered: RenderedCommand[],\n singulars: RenderedCommand[],\n usedTypes: Set<string>,\n docs: GlDocContext,\n): string => {\n const builder = new ModuleBuilder();\n builder.imports.addNamed(\"@gtkx/runtime\", \"t\");\n appendTypeImports(builder, usedTypes);\n builder.appendBinding(LIB_CONSTANT);\n appendCommandBindings(builder, rendered);\n appendCommandBindings(builder, singulars);\n appendCommandDeclarations(builder, rendered);\n appendCommandDeclarations(builder, singulars);\n\n return `${generatedHeader(docs)}\\n\\n${builder.toSource()}`;\n};\n\nexport { renderEnumsModule, renderTypesModule, renderCommandsModule, type EnumRow };\n"]}
@@ -0,0 +1,19 @@
1
+ import type { GlExtensionAttribution } from "./extensions.js";
2
+ import type { GlSymbolProvenance } from "./select.js";
3
+ type MetadataNotesOptions = {
4
+ type: string;
5
+ group?: string;
6
+ len?: string;
7
+ objectClass?: string;
8
+ kinds: string[];
9
+ note?: string;
10
+ };
11
+ declare const commandExportName: (name: string) => string;
12
+ declare const backtick: (text: string) => string;
13
+ declare const backtickList: (values: string[]) => string;
14
+ declare const asSentence: (text: string) => string;
15
+ declare const provenanceLines: (provenance: GlSymbolProvenance, extensions: GlExtensionAttribution[]) => string[];
16
+ declare const metadataNotes: ({ type, group, len, objectClass, kinds, note }: MetadataNotesOptions) => string;
17
+ declare const kindDescriptions: (kinds: string[], table: Map<string, string>) => string;
18
+ export { asSentence, backtick, backtickList, commandExportName, kindDescriptions, metadataNotes, type MetadataNotesOptions, provenanceLines, };
19
+ //# sourceMappingURL=notes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notes.d.ts","sourceRoot":"","sources":["../../src/khronos/notes.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAC9D,OAAO,KAAK,EAAa,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEjE,KAAK,oBAAoB,GAAG;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,QAAA,MAAM,iBAAiB,GAAI,MAAM,MAAM,KAAG,MACqC,CAAC;AAEhF,QAAA,MAAM,QAAQ,GAAI,MAAM,MAAM,KAAG,MAAuB,CAAC;AACzD,QAAA,MAAM,YAAY,GAAI,QAAQ,MAAM,EAAE,KAAG,MAA2D,CAAC;AACrG,QAAA,MAAM,UAAU,GAAI,MAAM,MAAM,KAAG,MAAkD,CAAC;AA0BtF,QAAA,MAAM,eAAe,GAAI,YAAY,kBAAkB,EAAE,YAAY,sBAAsB,EAAE,KAAG,MAAM,EAKrG,CAAC;AAEF,QAAA,MAAM,aAAa,GAAI,gDAAgD,oBAAoB,KAAG,MAQ9E,CAAC;AAEjB,QAAA,MAAM,gBAAgB,GAAI,OAAO,MAAM,EAAE,EAAE,OAAO,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,KAAG,MACZ,CAAC;AAE7D,OAAO,EACH,UAAU,EACV,QAAQ,EACR,YAAY,EACZ,iBAAiB,EACjB,gBAAgB,EAChB,aAAa,EACb,KAAK,oBAAoB,EACzB,eAAe,GAClB,CAAC"}
@@ -0,0 +1,35 @@
1
+ import { lowerFirst, toCamelIdentifier } from "@gtkx/utils";
2
+ const commandExportName = (name) => toCamelIdentifier(name.startsWith("gl") ? lowerFirst(name.slice(2)) : name);
3
+ const backtick = (text) => `\`${text}\``;
4
+ const backtickList = (values) => values.map((value) => backtick(value)).join(", ");
5
+ const asSentence = (text) => (text.endsWith(".") ? text : `${text}.`);
6
+ const removalPhrase = (removal) => removal.comment === undefined
7
+ ? backtick(removal.feature)
8
+ : `${backtick(removal.feature)} (${removal.comment})`;
9
+ const removalLine = (provenance) => {
10
+ const phrases = provenance.removals.map((removal) => removalPhrase(removal)).join(", ");
11
+ return ` * Removed from the core profile by ${phrases}, then restored by ${backtick(provenance.feature)}.`;
12
+ };
13
+ const extensionLine = (extensions) => {
14
+ const names = backtickList(extensions.map((extension) => extension.name));
15
+ return ` * Also provided by the ${names} extension${extensions.length === 1 ? "" : "s"}.`;
16
+ };
17
+ const extensionNoteLines = (extensions) => extensions.flatMap((extension) => extension.notes.map((note) => ` * ${backtick(extension.name)} note: ${asSentence(note)}`));
18
+ const extensionLines = (extensions) => extensions.length === 0 ? [] : [extensionLine(extensions), ...extensionNoteLines(extensions)];
19
+ const provenanceLines = (provenance, extensions) => [
20
+ ` * Provided by ${backtick(provenance.feature)}.`,
21
+ ...(provenance.removals.length > 0 ? [removalLine(provenance)] : []),
22
+ ...(provenance.requireComment === undefined ? [] : [` * Registry note: ${provenance.requireComment}`]),
23
+ ...extensionLines(extensions),
24
+ ];
25
+ const metadataNotes = ({ type, group, len, objectClass, kinds, note }) => [
26
+ backtick(type),
27
+ ...(group === undefined ? [] : [`group ${backtick(group)}`]),
28
+ ...(len === undefined ? [] : [`length ${backtick(len)}`]),
29
+ ...(objectClass === undefined ? [] : [`object class ${backtick(objectClass)}`]),
30
+ ...kinds.map((kind) => `kind ${backtick(kind)}`),
31
+ ...(note === undefined ? [] : [note]),
32
+ ].join(", ");
33
+ const kindDescriptions = (kinds, table) => kinds.flatMap((kind) => table.get(kind) ?? []).join(" ");
34
+ export { asSentence, backtick, backtickList, commandExportName, kindDescriptions, metadataNotes, provenanceLines, };
35
+ //# sourceMappingURL=notes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notes.js","sourceRoot":"","sources":["../../src/khronos/notes.ts"],"names":[],"mappings":"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","sourcesContent":["import { lowerFirst, toCamelIdentifier } from \"@gtkx/utils\";\nimport type { GlExtensionAttribution } from \"./extensions.js\";\nimport type { GlRemoval, GlSymbolProvenance } from \"./select.js\";\n\ntype MetadataNotesOptions = {\n type: string;\n group?: string;\n len?: string;\n objectClass?: string;\n kinds: string[];\n note?: string;\n};\n\nconst commandExportName = (name: string): string =>\n toCamelIdentifier(name.startsWith(\"gl\") ? lowerFirst(name.slice(2)) : name);\n\nconst backtick = (text: string): string => `\\`${text}\\``;\nconst backtickList = (values: string[]): string => values.map((value) => backtick(value)).join(\", \");\nconst asSentence = (text: string): string => (text.endsWith(\".\") ? text : `${text}.`);\n\nconst removalPhrase = (removal: GlRemoval): string =>\n removal.comment === undefined\n ? backtick(removal.feature)\n : `${backtick(removal.feature)} (${removal.comment})`;\n\nconst removalLine = (provenance: GlSymbolProvenance): string => {\n const phrases = provenance.removals.map((removal) => removalPhrase(removal)).join(\", \");\n\n return ` * Removed from the core profile by ${phrases}, then restored by ${backtick(provenance.feature)}.`;\n};\n\nconst extensionLine = (extensions: GlExtensionAttribution[]): string => {\n const names = backtickList(extensions.map((extension) => extension.name));\n\n return ` * Also provided by the ${names} extension${extensions.length === 1 ? \"\" : \"s\"}.`;\n};\n\nconst extensionNoteLines = (extensions: GlExtensionAttribution[]): string[] =>\n extensions.flatMap((extension) =>\n extension.notes.map((note) => ` * ${backtick(extension.name)} note: ${asSentence(note)}`));\n\nconst extensionLines = (extensions: GlExtensionAttribution[]): string[] =>\n extensions.length === 0 ? [] : [extensionLine(extensions), ...extensionNoteLines(extensions)];\n\nconst provenanceLines = (provenance: GlSymbolProvenance, extensions: GlExtensionAttribution[]): string[] => [\n ` * Provided by ${backtick(provenance.feature)}.`,\n ...(provenance.removals.length > 0 ? [removalLine(provenance)] : []),\n ...(provenance.requireComment === undefined ? [] : [` * Registry note: ${provenance.requireComment}`]),\n ...extensionLines(extensions),\n];\n\nconst metadataNotes = ({ type, group, len, objectClass, kinds, note }: MetadataNotesOptions): string =>\n [\n backtick(type),\n ...(group === undefined ? [] : [`group ${backtick(group)}`]),\n ...(len === undefined ? [] : [`length ${backtick(len)}`]),\n ...(objectClass === undefined ? [] : [`object class ${backtick(objectClass)}`]),\n ...kinds.map((kind) => `kind ${backtick(kind)}`),\n ...(note === undefined ? [] : [note]),\n ].join(\", \");\n\nconst kindDescriptions = (kinds: string[], table: Map<string, string>): string =>\n kinds.flatMap((kind) => table.get(kind) ?? []).join(\" \");\n\nexport {\n asSentence,\n backtick,\n backtickList,\n commandExportName,\n kindDescriptions,\n metadataNotes,\n type MetadataNotesOptions,\n provenanceLines,\n};\n"]}
@@ -5,7 +5,7 @@ type ParamPair = {
5
5
  param: GlParam | undefined;
6
6
  };
7
7
  declare const paramPairAt: (plan: CommandPlan & {
8
- ok: true;
8
+ isOk: true;
9
9
  }, index: number) => ParamPair;
10
10
  export { paramPairAt };
11
11
  //# sourceMappingURL=param-pair.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"param-pair.d.ts","sourceRoot":"","sources":["../../src/khronos/param-pair.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAExD,KAAK,SAAS,GAAG;IACb,SAAS,EAAE,SAAS,GAAG,SAAS,CAAC;IACjC,KAAK,EAAE,OAAO,GAAG,SAAS,CAAC;CAC9B,CAAC;AAEF,QAAA,MAAM,WAAW,GAAI,MAAM,WAAW,GAAG;IAAE,EAAE,EAAE,IAAI,CAAA;CAAE,EAAE,OAAO,MAAM,KAAG,SAGrE,CAAC;AAEH,OAAO,EAAE,WAAW,EAAE,CAAC"}
1
+ {"version":3,"file":"param-pair.d.ts","sourceRoot":"","sources":["../../src/khronos/param-pair.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAExD,KAAK,SAAS,GAAG;IACb,SAAS,EAAE,SAAS,GAAG,SAAS,CAAC;IACjC,KAAK,EAAE,OAAO,GAAG,SAAS,CAAC;CAC9B,CAAC;AAEF,QAAA,MAAM,WAAW,GAAI,MAAM,WAAW,GAAG;IAAE,IAAI,EAAE,IAAI,CAAA;CAAE,EAAE,OAAO,MAAM,KAAG,SAGvE,CAAC;AAEH,OAAO,EAAE,WAAW,EAAE,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"param-pair.js","sourceRoot":"","sources":["../../src/khronos/param-pair.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,GAAG,CAAC,IAAgC,EAAE,KAAa,EAAa,EAAE,CAAC,CAAC;IACjF,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;IAC7B,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;CACpC,CAAC,CAAC;AAEH,OAAO,EAAE,WAAW,EAAE,CAAC","sourcesContent":["import type { GlParam } from \"./model.js\";\nimport type { CommandPlan, ParamPlan } from \"./plan.js\";\n\ntype ParamPair = {\n paramPlan: ParamPlan | undefined;\n param: GlParam | undefined;\n};\n\nconst paramPairAt = (plan: CommandPlan & { ok: true }, index: number): ParamPair => ({\n paramPlan: plan.params[index],\n param: plan.command.params[index],\n});\n\nexport { paramPairAt };\n"]}
1
+ {"version":3,"file":"param-pair.js","sourceRoot":"","sources":["../../src/khronos/param-pair.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,GAAG,CAAC,IAAkC,EAAE,KAAa,EAAa,EAAE,CAAC,CAAC;IACnF,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;IAC7B,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;CACpC,CAAC,CAAC;AAEH,OAAO,EAAE,WAAW,EAAE,CAAC","sourcesContent":["import type { GlParam } from \"./model.js\";\nimport type { CommandPlan, ParamPlan } from \"./plan.js\";\n\ntype ParamPair = {\n paramPlan: ParamPlan | undefined;\n param: GlParam | undefined;\n};\n\nconst paramPairAt = (plan: CommandPlan & { isOk: true }, index: number): ParamPair => ({\n paramPlan: plan.params[index],\n param: plan.command.params[index],\n});\n\nexport { paramPairAt };\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../../src/khronos/parse.ts"],"names":[],"mappings":"AAGA,KAAK,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAU3C,QAAA,MAAM,iBAAiB,GAAI,MAAM,MAAM,KAAG,WAAW,EAWpD,CAAC;AAEF,QAAA,MAAM,OAAO,GAAI,MAAM,WAAW,KAAG,MAQpC,CAAC;AAEF,QAAA,MAAM,YAAY,GAAI,MAAM,WAAW,KAAG,WAAW,EAUpD,CAAC;AAEF,QAAA,MAAM,QAAQ,GAAI,MAAM,WAAW,EAAE,MAAM,MAAM,KAAG,MAAM,GAAG,SAU5D,CAAC;AAQF,QAAA,MAAM,WAAW,GAAI,MAAM,WAAW,EAAE,UAAU,GAAG,CAAC,MAAM,CAAC,KAAG,MAiB/D,CAAC;AAEF,OAAO,EAAE,iBAAiB,EAAE,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,WAAW,EAAE,KAAK,WAAW,EAAE,CAAC"}
1
+ {"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../../src/khronos/parse.ts"],"names":[],"mappings":"AAEA,KAAK,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAW3C,QAAA,MAAM,iBAAiB,GAAI,MAAM,MAAM,KAAG,WAAW,EAUpD,CAAC;AAEF,QAAA,MAAM,OAAO,GAAI,MAAM,WAAW,KAAG,MAQpC,CAAC;AAEF,QAAA,MAAM,YAAY,GAAI,MAAM,WAAW,KAAG,WAAW,EAUpD,CAAC;AAEF,QAAA,MAAM,QAAQ,GAAI,MAAM,WAAW,EAAE,MAAM,MAAM,KAAG,MAAM,GAAG,SAU5D,CAAC;AAQF,QAAA,MAAM,WAAW,GAAI,MAAM,WAAW,EAAE,UAAU,GAAG,CAAC,MAAM,CAAC,KAAG,MAiB/D,CAAC;AAEF,OAAO,EAAE,iBAAiB,EAAE,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,WAAW,EAAE,KAAK,WAAW,EAAE,CAAC"}
@@ -1,14 +1,13 @@
1
- import { readFileSync } from "node:fs";
2
- import { createXmlParser } from "../xml.js";
1
+ import { createXmlParser, parseXmlFile } from "../xml.js";
3
2
  const ATTRIBUTES_KEY = ":@";
4
3
  const TEXT_KEY = "#text";
4
+ const REGISTRY_LABEL = "OpenGL registry";
5
5
  const PARSER = createXmlParser({
6
6
  trimValues: false,
7
7
  preserveOrder: true,
8
8
  });
9
9
  const parseRegistryFile = (path) => {
10
- const xml = readFileSync(path, "utf8");
11
- const documentNodes = PARSER.parse(xml);
10
+ const documentNodes = parseXmlFile({ parser: PARSER, label: REGISTRY_LABEL, path });
12
11
  for (const node of documentNodes) {
13
12
  if (nodeTag(node) === "registry") {
14
13
  return nodeChildren(node);
@@ -1 +1 @@
1
- {"version":3,"file":"parse.js","sourceRoot":"","sources":["../../src/khronos/parse.ts"],"names":[],"mappings":"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","sourcesContent":["import { readFileSync } from \"node:fs\";\nimport { createXmlParser } from \"../xml.js\";\n\ntype OrderedNode = Record<string, unknown>;\n\nconst ATTRIBUTES_KEY = \":@\";\nconst TEXT_KEY = \"#text\";\n\nconst PARSER = createXmlParser({\n trimValues: false,\n preserveOrder: true,\n});\n\nconst parseRegistryFile = (path: string): OrderedNode[] => {\n const xml = readFileSync(path, \"utf8\");\n const documentNodes = PARSER.parse(xml) as OrderedNode[];\n\n for (const node of documentNodes) {\n if (nodeTag(node) === \"registry\") {\n return nodeChildren(node);\n }\n }\n\n throw new Error(`No <registry> root element found in ${path}`);\n};\n\nconst nodeTag = (node: OrderedNode): string => {\n for (const key of Object.keys(node)) {\n if (key !== ATTRIBUTES_KEY && key !== TEXT_KEY) {\n return key;\n }\n }\n\n return TEXT_KEY;\n};\n\nconst nodeChildren = (node: OrderedNode): OrderedNode[] => {\n const tag = nodeTag(node);\n\n if (tag === TEXT_KEY) {\n return [];\n }\n\n const children = node[tag];\n\n return Array.isArray(children) ? (children as OrderedNode[]) : [];\n};\n\nconst nodeAttr = (node: OrderedNode, name: string): string | undefined => {\n const attributes = node[ATTRIBUTES_KEY];\n\n if (typeof attributes !== \"object\" || attributes === null) {\n return undefined;\n }\n\n const value = (attributes as Record<string, unknown>)[`@_${name}`];\n\n return typeof value === \"string\" ? value : undefined;\n};\n\nconst nodeText = (node: OrderedNode): string | undefined => {\n const value = node[TEXT_KEY];\n\n return typeof value === \"string\" ? value : undefined;\n};\n\nconst collectText = (node: OrderedNode, skipTags: Set<string>): string => {\n let text = \"\";\n\n for (const child of nodeChildren(node)) {\n const childText = nodeText(child);\n\n if (childText !== undefined) {\n text += childText;\n continue;\n }\n\n if (!skipTags.has(nodeTag(child))) {\n text += collectText(child, skipTags);\n }\n }\n\n return text;\n};\n\nexport { parseRegistryFile, nodeTag, nodeChildren, nodeAttr, collectText, type OrderedNode };\n"]}
1
+ {"version":3,"file":"parse.js","sourceRoot":"","sources":["../../src/khronos/parse.ts"],"names":[],"mappings":"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","sourcesContent":["import { createXmlParser, parseXmlFile } from \"../xml.js\";\n\ntype OrderedNode = Record<string, unknown>;\n\nconst ATTRIBUTES_KEY = \":@\";\nconst TEXT_KEY = \"#text\";\nconst REGISTRY_LABEL = \"OpenGL registry\";\n\nconst PARSER = createXmlParser({\n trimValues: false,\n preserveOrder: true,\n});\n\nconst parseRegistryFile = (path: string): OrderedNode[] => {\n const documentNodes = parseXmlFile({ parser: PARSER, label: REGISTRY_LABEL, path }) as OrderedNode[];\n\n for (const node of documentNodes) {\n if (nodeTag(node) === \"registry\") {\n return nodeChildren(node);\n }\n }\n\n throw new Error(`No <registry> root element found in ${path}`);\n};\n\nconst nodeTag = (node: OrderedNode): string => {\n for (const key of Object.keys(node)) {\n if (key !== ATTRIBUTES_KEY && key !== TEXT_KEY) {\n return key;\n }\n }\n\n return TEXT_KEY;\n};\n\nconst nodeChildren = (node: OrderedNode): OrderedNode[] => {\n const tag = nodeTag(node);\n\n if (tag === TEXT_KEY) {\n return [];\n }\n\n const children = node[tag];\n\n return Array.isArray(children) ? (children as OrderedNode[]) : [];\n};\n\nconst nodeAttr = (node: OrderedNode, name: string): string | undefined => {\n const attributes = node[ATTRIBUTES_KEY];\n\n if (typeof attributes !== \"object\" || attributes === null) {\n return undefined;\n }\n\n const value = (attributes as Record<string, unknown>)[`@_${name}`];\n\n return typeof value === \"string\" ? value : undefined;\n};\n\nconst nodeText = (node: OrderedNode): string | undefined => {\n const value = node[TEXT_KEY];\n\n return typeof value === \"string\" ? value : undefined;\n};\n\nconst collectText = (node: OrderedNode, skipTags: Set<string>): string => {\n let text = \"\";\n\n for (const child of nodeChildren(node)) {\n const childText = nodeText(child);\n\n if (childText !== undefined) {\n text += childText;\n continue;\n }\n\n if (!skipTags.has(nodeTag(child))) {\n text += collectText(child, skipTags);\n }\n }\n\n return text;\n};\n\nexport { parseRegistryFile, nodeTag, nodeChildren, nodeAttr, collectText, type OrderedNode };\n"]}
@@ -1,5 +1,5 @@
1
1
  import { type GlExclusionReason } from "./plan.js";
2
- import { type GlSelection } from "./select.js";
2
+ import { type GlSelection, type GlSubset } from "./select.js";
3
3
  type GlExclusion = {
4
4
  command: string;
5
5
  reason: GlExclusionReason;
@@ -10,6 +10,8 @@ type GlGenerationReport = {
10
10
  emittedCommands: number;
11
11
  derivedSingulars: number;
12
12
  exclusions: GlExclusion[];
13
+ enumExclusions: string[];
14
+ coreRemovals: GlSubset["removed"];
13
15
  };
14
16
  type GlGenerationResult = {
15
17
  files: Map<string, string>;
@@ -20,5 +22,5 @@ type GlGenerationOptions = {
20
22
  overrideExports: Set<string>;
21
23
  };
22
24
  declare const generateGlModules: (options: GlGenerationOptions) => GlGenerationResult;
23
- export { generateGlModules, type GlGenerationReport, type GlGenerationResult };
25
+ export { generateGlModules, type GlGenerationReport };
24
26
  //# sourceMappingURL=pipeline.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"pipeline.d.ts","sourceRoot":"","sources":["../../src/khronos/pipeline.ts"],"names":[],"mappings":"AAIA,OAAO,EAEH,KAAK,iBAAiB,EAKzB,MAAM,WAAW,CAAC;AAEnB,OAAO,EAAE,KAAK,WAAW,EAA6B,MAAM,aAAa,CAAC;AAE1E,KAAK,WAAW,GAAG;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,iBAAiB,CAAC;CAC7B,CAAC;AAEF,KAAK,kBAAkB,GAAG;IACtB,SAAS,EAAE,WAAW,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,WAAW,EAAE,CAAC;CAC7B,CAAC;AAEF,KAAK,kBAAkB,GAAG;IACtB,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC3B,MAAM,EAAE,kBAAkB,CAAC;CAC9B,CAAC;AAIF,KAAK,mBAAmB,GAAG;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CAChC,CAAC;AAkQF,QAAA,MAAM,iBAAiB,GAAI,SAAS,mBAAmB,KAAG,kBAsCzD,CAAC;AAEF,OAAO,EAAE,iBAAiB,EAAE,KAAK,kBAAkB,EAAE,KAAK,kBAAkB,EAAE,CAAC"}
1
+ {"version":3,"file":"pipeline.d.ts","sourceRoot":"","sources":["../../src/khronos/pipeline.ts"],"names":[],"mappings":"AAMA,OAAO,EAEH,KAAK,iBAAiB,EAKzB,MAAM,WAAW,CAAC;AAEnB,OAAO,EAAE,KAAK,WAAW,EAAE,KAAK,QAAQ,EAAsD,MAAM,aAAa,CAAC;AAElH,KAAK,WAAW,GAAG;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,iBAAiB,CAAC;CAC7B,CAAC;AAEF,KAAK,kBAAkB,GAAG;IACtB,SAAS,EAAE,WAAW,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,WAAW,EAAE,CAAC;IAC1B,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,YAAY,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC;CACrC,CAAC;AAEF,KAAK,kBAAkB,GAAG;IACtB,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC3B,MAAM,EAAE,kBAAkB,CAAC;CAC9B,CAAC;AAIF,KAAK,mBAAmB,GAAG;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CAChC,CAAC;AAoTF,QAAA,MAAM,iBAAiB,GAAI,SAAS,mBAAmB,KAAG,kBAqCzD,CAAC;AAEF,OAAO,EAAE,iBAAiB,EAAE,KAAK,kBAAkB,EAAE,CAAC"}
@@ -1,4 +1,6 @@
1
1
  import { sanitizeIdentifier, sortStrings, sortStringsBy } from "@gtkx/utils";
2
+ import { buildDocContext } from "./doc-context.js";
3
+ import { buildExtensionIndex } from "./extensions.js";
2
4
  import { loadGlRegistry } from "./model.js";
3
5
  import { renderCommandsModule, renderEnumsModule, renderTypesModule } from "./modules.js";
4
6
  import { paramPairAt } from "./param-pair.js";
@@ -51,7 +53,12 @@ const PLAN_POLICY = {
51
53
  singleValuedQueries: SINGLE_VALUED_QUERIES,
52
54
  };
53
55
  const MAX_SAFE = BigInt(Number.MAX_SAFE_INTEGER);
54
- const GROUP_BEARING_PARAM_KINDS = new Set(["scalar", "array-in", "ref-out"]);
56
+ const GROUP_BEARING_PARAM_KINDS = new Set([
57
+ "scalar",
58
+ "array-in",
59
+ "ref-out",
60
+ "ref-array-out",
61
+ ]);
55
62
  const GL_SELECTION = { api: "gl", version: 4.6, profile: "core" };
56
63
  const enumExportName = (name) => sanitizeIdentifier((name.startsWith("GL_") ? name.slice(3) : name).toUpperCase());
57
64
  const enumLiteral = (token) => {
@@ -124,7 +131,7 @@ const planSelectedCommand = (registry, name) => {
124
131
  return { command: name, reason: "override-owned" };
125
132
  }
126
133
  const plan = planCommand(command, PLAN_POLICY);
127
- if (!plan.ok) {
134
+ if (!plan.isOk) {
128
135
  return { command: name, reason: plan.reason };
129
136
  }
130
137
  return plan;
@@ -134,11 +141,11 @@ const planSelectedCommands = (registry, commandNames) => {
134
141
  const okPlans = [];
135
142
  const planFeatures = new Map();
136
143
  const sortedCommands = sortStringsBy(commandNames.entries(), ([key]) => key);
137
- for (const [name, feature] of sortedCommands) {
144
+ for (const [name, provenance] of sortedCommands) {
138
145
  const result = planSelectedCommand(registry, name);
139
- if ("ok" in result) {
146
+ if ("isOk" in result) {
140
147
  okPlans.push(result);
141
- planFeatures.set(name, feature);
148
+ planFeatures.set(name, provenance);
142
149
  }
143
150
  else {
144
151
  exclusions.push(result);
@@ -146,18 +153,42 @@ const planSelectedCommands = (registry, commandNames) => {
146
153
  }
147
154
  return { okPlans, planFeatures, exclusions };
148
155
  };
149
- const buildEnumRows = (registry, enumNames) => {
150
- const enumRows = [];
156
+ const buildEnumRows = (registry, enumNames, selection) => {
157
+ const rows = [];
158
+ const enumExclusions = [];
151
159
  const sortedEnums = sortStringsBy(enumNames.entries(), ([key]) => key);
152
- for (const [name, feature] of sortedEnums) {
153
- const token = resolveEnum(registry, name);
160
+ for (const [name, provenance] of sortedEnums) {
161
+ const token = resolveEnum(registry, name, selection.api);
154
162
  const literal = enumLiteral(token);
155
163
  if (literal === undefined) {
156
- continue;
164
+ enumExclusions.push(name);
165
+ }
166
+ else {
167
+ rows.push({ token, exportName: enumExportName(name), literal, provenance });
157
168
  }
158
- enumRows.push({ token, exportName: enumExportName(name), literal, feature });
159
169
  }
160
- return enumRows;
170
+ return { rows, enumExclusions };
171
+ };
172
+ const provenanceFor = (planFeatures, name) => {
173
+ const found = planFeatures.get(name);
174
+ if (found === undefined) {
175
+ throw new Error(`Command ${name} was planned without a selection provenance`);
176
+ }
177
+ return found;
178
+ };
179
+ const renderCommands = (plans, planFeatures, usedTypes, docs) => {
180
+ const rendered = [];
181
+ const singulars = [];
182
+ for (const plan of plans) {
183
+ const provenance = provenanceFor(planFeatures, plan.command.name);
184
+ rendered.push(renderCommand(plan, provenance, usedTypes, docs));
185
+ const singular = deriveGenSingular(plan, provenance, usedTypes, docs) ??
186
+ deriveDeleteSingular(plan, provenance, usedTypes, docs);
187
+ if (singular !== undefined) {
188
+ singulars.push(singular);
189
+ }
190
+ }
191
+ return { rendered, singulars };
161
192
  };
162
193
  const claimExportName = (exportNames, name, owner) => {
163
194
  const existing = exportNames.get(name);
@@ -190,23 +221,21 @@ const generateGlModules = (options) => {
190
221
  const registry = loadGlRegistry(options.registryPath);
191
222
  const subset = selectSubset(registry, selection);
192
223
  const { okPlans, planFeatures, exclusions } = planSelectedCommands(registry, subset.commands);
224
+ const { rows, enumExclusions } = buildEnumRows(registry, subset.enums, selection);
225
+ const groupAliases = collectGroupAliases(okPlans);
226
+ const docs = buildDocContext({
227
+ registry,
228
+ extensions: buildExtensionIndex(registry, selection),
229
+ plans: okPlans,
230
+ enumRows: rows,
231
+ });
193
232
  const usedTypes = new Set();
194
- const rendered = [];
195
- const singulars = [];
196
- for (const plan of okPlans) {
197
- const feature = planFeatures.get(plan.command.name) ?? "unknown feature";
198
- rendered.push(renderCommand(plan, feature, usedTypes));
199
- const singular = deriveGenSingular(plan, feature, usedTypes) ?? deriveDeleteSingular(plan, feature, usedTypes);
200
- if (singular !== undefined) {
201
- singulars.push(singular);
202
- }
203
- }
204
- const enumRows = buildEnumRows(registry, subset.enums);
205
- assertExportNamesDisjoint(rendered, singulars, enumRows, options.overrideExports);
233
+ const { rendered, singulars } = renderCommands(okPlans, planFeatures, usedTypes, docs);
234
+ assertExportNamesDisjoint(rendered, singulars, rows, options.overrideExports);
206
235
  const files = new Map([
207
- ["types.ts", renderTypesModule(collectGroupAliases(okPlans))],
208
- ["enums.ts", renderEnumsModule(enumRows)],
209
- ["commands.ts", renderCommandsModule(rendered, singulars, usedTypes)],
236
+ ["types.ts", renderTypesModule(groupAliases, docs)],
237
+ ["enums.ts", renderEnumsModule(rows, docs)],
238
+ ["commands.ts", renderCommandsModule(rendered, singulars, usedTypes, docs)],
210
239
  ]);
211
240
  return {
212
241
  files,
@@ -216,6 +245,8 @@ const generateGlModules = (options) => {
216
245
  emittedCommands: rendered.length,
217
246
  derivedSingulars: singulars.length,
218
247
  exclusions,
248
+ enumExclusions,
249
+ coreRemovals: subset.removed,
219
250
  },
220
251
  };
221
252
  };