@gtkx/codegen 0.21.0 → 1.0.0-rc.1

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 (732) hide show
  1. package/README.md +173 -0
  2. package/dist/analysis/descriptor-render.d.ts +18 -0
  3. package/dist/analysis/descriptor-render.d.ts.map +1 -0
  4. package/dist/analysis/descriptor-render.js +297 -0
  5. package/dist/analysis/descriptor-render.js.map +1 -0
  6. package/dist/analysis/descriptor.d.ts +59 -0
  7. package/dist/analysis/descriptor.d.ts.map +1 -0
  8. package/dist/analysis/descriptor.js +123 -0
  9. package/dist/analysis/descriptor.js.map +1 -0
  10. package/dist/analysis/inheritance.d.ts +38 -0
  11. package/dist/analysis/inheritance.d.ts.map +1 -0
  12. package/dist/analysis/inheritance.js +193 -0
  13. package/dist/analysis/inheritance.js.map +1 -0
  14. package/dist/analysis/param-structure.d.ts +26 -0
  15. package/dist/analysis/param-structure.d.ts.map +1 -0
  16. package/dist/analysis/param-structure.js +107 -0
  17. package/dist/analysis/param-structure.js.map +1 -0
  18. package/dist/analysis/ts-type.d.ts +19 -0
  19. package/dist/analysis/ts-type.d.ts.map +1 -0
  20. package/dist/analysis/ts-type.js +65 -0
  21. package/dist/analysis/ts-type.js.map +1 -0
  22. package/dist/compile.d.ts +18 -0
  23. package/dist/compile.d.ts.map +1 -0
  24. package/dist/compile.js +123 -0
  25. package/dist/compile.js.map +1 -0
  26. package/dist/docs/api-reference.d.ts +66 -0
  27. package/dist/docs/api-reference.d.ts.map +1 -0
  28. package/dist/docs/api-reference.js +299 -0
  29. package/dist/docs/api-reference.js.map +1 -0
  30. package/dist/docs/element-page.d.ts +15 -0
  31. package/dist/docs/element-page.d.ts.map +1 -0
  32. package/dist/docs/element-page.js +221 -0
  33. package/dist/docs/element-page.js.map +1 -0
  34. package/dist/docs/pipeline.d.ts +25 -0
  35. package/dist/docs/pipeline.d.ts.map +1 -0
  36. package/dist/docs/pipeline.js +130 -0
  37. package/dist/docs/pipeline.js.map +1 -0
  38. package/dist/docs/render.d.ts +32 -0
  39. package/dist/docs/render.d.ts.map +1 -0
  40. package/dist/docs/render.js +134 -0
  41. package/dist/docs/render.js.map +1 -0
  42. package/dist/docs/symbol-page.d.ts +41 -0
  43. package/dist/docs/symbol-page.d.ts.map +1 -0
  44. package/dist/docs/symbol-page.js +338 -0
  45. package/dist/docs/symbol-page.js.map +1 -0
  46. package/dist/fingerprint.d.ts +6 -26
  47. package/dist/fingerprint.d.ts.map +1 -1
  48. package/dist/fingerprint.js +30 -18
  49. package/dist/fingerprint.js.map +1 -1
  50. package/dist/gir/ancestry.d.ts +9 -0
  51. package/dist/gir/ancestry.d.ts.map +1 -0
  52. package/dist/gir/ancestry.js +29 -0
  53. package/dist/gir/ancestry.js.map +1 -0
  54. package/dist/gir/callback.d.ts +9 -10
  55. package/dist/gir/callback.d.ts.map +1 -1
  56. package/dist/gir/callback.js +17 -16
  57. package/dist/gir/callback.js.map +1 -1
  58. package/dist/gir/class.d.ts +22 -43
  59. package/dist/gir/class.d.ts.map +1 -1
  60. package/dist/gir/class.js +11 -23
  61. package/dist/gir/class.js.map +1 -1
  62. package/dist/gir/enum.d.ts +13 -31
  63. package/dist/gir/enum.d.ts.map +1 -1
  64. package/dist/gir/enum.js +7 -14
  65. package/dist/gir/enum.js.map +1 -1
  66. package/dist/gir/field.d.ts +10 -23
  67. package/dist/gir/field.d.ts.map +1 -1
  68. package/dist/gir/field.js +12 -18
  69. package/dist/gir/field.js.map +1 -1
  70. package/dist/gir/function.d.ts +11 -42
  71. package/dist/gir/function.d.ts.map +1 -1
  72. package/dist/gir/function.js +7 -20
  73. package/dist/gir/function.js.map +1 -1
  74. package/dist/gir/gir-path.d.ts +2 -0
  75. package/dist/gir/gir-path.d.ts.map +1 -0
  76. package/dist/gir/gir-path.js +41 -0
  77. package/dist/gir/gir-path.js.map +1 -0
  78. package/dist/gir/libraries.d.ts +4 -0
  79. package/dist/gir/libraries.d.ts.map +1 -0
  80. package/dist/gir/libraries.js +62 -0
  81. package/dist/gir/libraries.js.map +1 -0
  82. package/dist/gir/library.d.ts +37 -0
  83. package/dist/gir/library.d.ts.map +1 -0
  84. package/dist/gir/library.js +218 -0
  85. package/dist/gir/library.js.map +1 -0
  86. package/dist/gir/namespace.d.ts +36 -50
  87. package/dist/gir/namespace.d.ts.map +1 -1
  88. package/dist/gir/namespace.js +46 -36
  89. package/dist/gir/namespace.js.map +1 -1
  90. package/dist/gir/parameter.d.ts +25 -69
  91. package/dist/gir/parameter.d.ts.map +1 -1
  92. package/dist/gir/parameter.js +36 -57
  93. package/dist/gir/parameter.js.map +1 -1
  94. package/dist/gir/parse.d.ts +6 -70
  95. package/dist/gir/parse.d.ts.map +1 -1
  96. package/dist/gir/parse.js +32 -80
  97. package/dist/gir/parse.js.map +1 -1
  98. package/dist/gir/primitives.d.ts +3 -34
  99. package/dist/gir/primitives.d.ts.map +1 -1
  100. package/dist/gir/primitives.js +19 -35
  101. package/dist/gir/primitives.js.map +1 -1
  102. package/dist/gir/property.d.ts +16 -25
  103. package/dist/gir/property.d.ts.map +1 -1
  104. package/dist/gir/property.js +12 -9
  105. package/dist/gir/property.js.map +1 -1
  106. package/dist/gir/record.d.ts +27 -0
  107. package/dist/gir/record.d.ts.map +1 -0
  108. package/dist/gir/record.js +25 -0
  109. package/dist/gir/record.js.map +1 -0
  110. package/dist/gir/size.d.ts +10 -57
  111. package/dist/gir/size.d.ts.map +1 -1
  112. package/dist/gir/size.js +0 -25
  113. package/dist/gir/size.js.map +1 -1
  114. package/dist/gir/type-id.d.ts +49 -0
  115. package/dist/gir/type-id.d.ts.map +1 -0
  116. package/dist/gir/type-id.js +8 -0
  117. package/dist/gir/type-id.js.map +1 -0
  118. package/dist/gir/type-ref.d.ts +3 -77
  119. package/dist/gir/type-ref.d.ts.map +1 -1
  120. package/dist/gir/type-ref.js +35 -65
  121. package/dist/gir/type-ref.js.map +1 -1
  122. package/dist/gir/type.d.ts +33 -0
  123. package/dist/gir/type.d.ts.map +1 -0
  124. package/dist/gir/type.js +2 -0
  125. package/dist/gir/type.js.map +1 -0
  126. package/dist/index.d.ts +5 -11
  127. package/dist/index.d.ts.map +1 -1
  128. package/dist/index.js +5 -11
  129. package/dist/index.js.map +1 -1
  130. package/dist/khronos/args.d.ts +30 -0
  131. package/dist/khronos/args.d.ts.map +1 -0
  132. package/dist/khronos/args.js +150 -0
  133. package/dist/khronos/args.js.map +1 -0
  134. package/dist/khronos/jsdoc.d.ts +21 -0
  135. package/dist/khronos/jsdoc.d.ts.map +1 -0
  136. package/dist/khronos/jsdoc.js +59 -0
  137. package/dist/khronos/jsdoc.js.map +1 -0
  138. package/dist/khronos/model.d.ts +37 -0
  139. package/dist/khronos/model.d.ts.map +1 -0
  140. package/dist/khronos/model.js +132 -0
  141. package/dist/khronos/model.js.map +1 -0
  142. package/dist/khronos/modules.d.ts +11 -0
  143. package/dist/khronos/modules.d.ts.map +1 -0
  144. package/dist/khronos/modules.js +58 -0
  145. package/dist/khronos/modules.js.map +1 -0
  146. package/dist/khronos/parse.d.ts +9 -0
  147. package/dist/khronos/parse.d.ts.map +1 -0
  148. package/dist/khronos/parse.js +61 -0
  149. package/dist/khronos/parse.js.map +1 -0
  150. package/dist/khronos/pipeline.d.ts +24 -0
  151. package/dist/khronos/pipeline.d.ts.map +1 -0
  152. package/dist/khronos/pipeline.js +182 -0
  153. package/dist/khronos/pipeline.js.map +1 -0
  154. package/dist/khronos/plan.d.ts +80 -0
  155. package/dist/khronos/plan.d.ts.map +1 -0
  156. package/dist/khronos/plan.js +136 -0
  157. package/dist/khronos/plan.js.map +1 -0
  158. package/dist/khronos/render.d.ts +16 -0
  159. package/dist/khronos/render.d.ts.map +1 -0
  160. package/dist/khronos/render.js +158 -0
  161. package/dist/khronos/render.js.map +1 -0
  162. package/dist/khronos/select.d.ts +15 -0
  163. package/dist/khronos/select.d.ts.map +1 -0
  164. package/dist/khronos/select.js +45 -0
  165. package/dist/khronos/select.js.map +1 -0
  166. package/dist/runner.d.ts +29 -47
  167. package/dist/runner.d.ts.map +1 -1
  168. package/dist/runner.js +78 -53
  169. package/dist/runner.js.map +1 -1
  170. package/dist/store/compile-store.d.ts +9 -0
  171. package/dist/store/compile-store.d.ts.map +1 -0
  172. package/dist/store/compile-store.js +38 -0
  173. package/dist/store/compile-store.js.map +1 -0
  174. package/dist/store/gi/async.d.ts +4 -0
  175. package/dist/store/gi/async.d.ts.map +1 -0
  176. package/dist/store/gi/async.js +41 -0
  177. package/dist/store/gi/async.js.map +1 -0
  178. package/dist/store/gi/callables.d.ts +36 -0
  179. package/dist/store/gi/callables.d.ts.map +1 -0
  180. package/dist/store/gi/callables.js +202 -0
  181. package/dist/store/gi/callables.js.map +1 -0
  182. package/dist/store/gi/callback.d.ts +4 -0
  183. package/dist/store/gi/callback.d.ts.map +1 -0
  184. package/dist/store/gi/callback.js +14 -0
  185. package/dist/store/gi/callback.js.map +1 -0
  186. package/dist/store/gi/class-struct-record.d.ts +9 -0
  187. package/dist/store/gi/class-struct-record.d.ts.map +1 -0
  188. package/dist/store/gi/class-struct-record.js +34 -0
  189. package/dist/store/gi/class-struct-record.js.map +1 -0
  190. package/dist/store/gi/class.d.ts +4 -0
  191. package/dist/store/gi/class.d.ts.map +1 -0
  192. package/dist/store/gi/class.js +169 -0
  193. package/dist/store/gi/class.js.map +1 -0
  194. package/dist/store/gi/companion.d.ts +4 -0
  195. package/dist/store/gi/companion.d.ts.map +1 -0
  196. package/dist/store/gi/companion.js +13 -0
  197. package/dist/store/gi/companion.js.map +1 -0
  198. package/dist/store/gi/constant.d.ts +5 -0
  199. package/dist/store/gi/constant.d.ts.map +1 -0
  200. package/dist/store/gi/constant.js +18 -0
  201. package/dist/store/gi/constant.js.map +1 -0
  202. package/dist/store/gi/constructor-props.d.ts +5 -0
  203. package/dist/store/gi/constructor-props.d.ts.map +1 -0
  204. package/dist/store/gi/constructor-props.js +64 -0
  205. package/dist/store/gi/constructor-props.js.map +1 -0
  206. package/dist/store/gi/enum.d.ts +5 -0
  207. package/dist/store/gi/enum.d.ts.map +1 -0
  208. package/dist/store/gi/enum.js +38 -0
  209. package/dist/store/gi/enum.js.map +1 -0
  210. package/dist/store/gi/function.d.ts +8 -0
  211. package/dist/store/gi/function.d.ts.map +1 -0
  212. package/dist/store/gi/function.js +87 -0
  213. package/dist/store/gi/function.js.map +1 -0
  214. package/dist/store/gi/gtype-binding.d.ts +10 -0
  215. package/dist/store/gi/gtype-binding.d.ts.map +1 -0
  216. package/dist/store/gi/gtype-binding.js +20 -0
  217. package/dist/store/gi/gtype-binding.js.map +1 -0
  218. package/dist/store/gi/interface.d.ts +4 -0
  219. package/dist/store/gi/interface.d.ts.map +1 -0
  220. package/dist/store/gi/interface.js +99 -0
  221. package/dist/store/gi/interface.js.map +1 -0
  222. package/dist/store/gi/item-comparators.d.ts +6 -0
  223. package/dist/store/gi/item-comparators.d.ts.map +1 -0
  224. package/dist/store/gi/item-comparators.js +76 -0
  225. package/dist/store/gi/item-comparators.js.map +1 -0
  226. package/dist/store/gi/method.d.ts +24 -0
  227. package/dist/store/gi/method.d.ts.map +1 -0
  228. package/dist/store/gi/method.js +279 -0
  229. package/dist/store/gi/method.js.map +1 -0
  230. package/dist/store/gi/param-marshal.d.ts +9 -0
  231. package/dist/store/gi/param-marshal.d.ts.map +1 -0
  232. package/dist/store/gi/param-marshal.js +37 -0
  233. package/dist/store/gi/param-marshal.js.map +1 -0
  234. package/dist/store/gi/pipeline.d.ts +4 -0
  235. package/dist/store/gi/pipeline.d.ts.map +1 -0
  236. package/dist/store/gi/pipeline.js +80 -0
  237. package/dist/store/gi/pipeline.js.map +1 -0
  238. package/dist/store/gi/properties.d.ts +5 -0
  239. package/dist/store/gi/properties.d.ts.map +1 -0
  240. package/dist/store/gi/properties.js +30 -0
  241. package/dist/store/gi/properties.js.map +1 -0
  242. package/dist/store/gi/property-accessor.d.ts +26 -0
  243. package/dist/store/gi/property-accessor.d.ts.map +1 -0
  244. package/dist/store/gi/property-accessor.js +132 -0
  245. package/dist/store/gi/property-accessor.js.map +1 -0
  246. package/dist/store/gi/record-constructor.d.ts +5 -0
  247. package/dist/store/gi/record-constructor.d.ts.map +1 -0
  248. package/dist/store/gi/record-constructor.js +65 -0
  249. package/dist/store/gi/record-constructor.js.map +1 -0
  250. package/dist/store/gi/record-field-accessor.d.ts +25 -0
  251. package/dist/store/gi/record-field-accessor.d.ts.map +1 -0
  252. package/dist/store/gi/record-field-accessor.js +288 -0
  253. package/dist/store/gi/record-field-accessor.js.map +1 -0
  254. package/dist/store/gi/record-layout.d.ts +14 -0
  255. package/dist/store/gi/record-layout.d.ts.map +1 -0
  256. package/dist/store/gi/record-layout.js +96 -0
  257. package/dist/store/gi/record-layout.js.map +1 -0
  258. package/dist/store/gi/record.d.ts +4 -0
  259. package/dist/store/gi/record.d.ts.map +1 -0
  260. package/dist/store/gi/record.js +59 -0
  261. package/dist/store/gi/record.js.map +1 -0
  262. package/dist/store/gi/registration.d.ts +16 -0
  263. package/dist/store/gi/registration.d.ts.map +1 -0
  264. package/dist/store/gi/registration.js +20 -0
  265. package/dist/store/gi/registration.js.map +1 -0
  266. package/dist/store/gi/return-wrap.d.ts +10 -0
  267. package/dist/store/gi/return-wrap.d.ts.map +1 -0
  268. package/dist/store/gi/return-wrap.js +46 -0
  269. package/dist/store/gi/return-wrap.js.map +1 -0
  270. package/dist/store/gi/runtime-override.d.ts +3 -0
  271. package/dist/store/gi/runtime-override.d.ts.map +1 -0
  272. package/dist/{writers → store/gi}/runtime-override.js +0 -15
  273. package/dist/store/gi/runtime-override.js.map +1 -0
  274. package/dist/store/gi/signal.d.ts +5 -0
  275. package/dist/store/gi/signal.d.ts.map +1 -0
  276. package/dist/store/gi/signal.js +233 -0
  277. package/dist/store/gi/signal.js.map +1 -0
  278. package/dist/store/gi/vtable.d.ts +4 -0
  279. package/dist/store/gi/vtable.d.ts.map +1 -0
  280. package/dist/store/gi/vtable.js +78 -0
  281. package/dist/store/gi/vtable.js.map +1 -0
  282. package/dist/store/gi-store.d.ts +9 -0
  283. package/dist/store/gi-store.d.ts.map +1 -0
  284. package/dist/store/gi-store.js +57 -0
  285. package/dist/store/gi-store.js.map +1 -0
  286. package/dist/store/jsx-store.d.ts +5 -0
  287. package/dist/store/jsx-store.d.ts.map +1 -0
  288. package/dist/store/jsx-store.js +23 -0
  289. package/dist/store/jsx-store.js.map +1 -0
  290. package/dist/store/react/built-ins.d.ts +9 -0
  291. package/dist/store/react/built-ins.d.ts.map +1 -0
  292. package/dist/store/react/built-ins.js +226 -0
  293. package/dist/store/react/built-ins.js.map +1 -0
  294. package/dist/store/react/element-components.d.ts +15 -0
  295. package/dist/store/react/element-components.d.ts.map +1 -0
  296. package/dist/store/react/element-components.js +92 -0
  297. package/dist/store/react/element-components.js.map +1 -0
  298. package/dist/store/react/element-prop-types.d.ts +19 -0
  299. package/dist/store/react/element-prop-types.d.ts.map +1 -0
  300. package/dist/store/react/element-prop-types.js +244 -0
  301. package/dist/store/react/element-prop-types.js.map +1 -0
  302. package/dist/store/react/element-props.d.ts +4 -0
  303. package/dist/store/react/element-props.d.ts.map +1 -0
  304. package/dist/store/react/element-props.js +178 -0
  305. package/dist/store/react/element-props.js.map +1 -0
  306. package/dist/store/react/gir-index.d.ts +25 -0
  307. package/dist/store/react/gir-index.d.ts.map +1 -0
  308. package/dist/store/react/gir-index.js +55 -0
  309. package/dist/store/react/gir-index.js.map +1 -0
  310. package/dist/store/react/intrinsic-elements.d.ts +26 -0
  311. package/dist/store/react/intrinsic-elements.d.ts.map +1 -0
  312. package/dist/store/react/intrinsic-elements.js +107 -0
  313. package/dist/store/react/intrinsic-elements.js.map +1 -0
  314. package/dist/store/react/jsx.d.ts +18 -0
  315. package/dist/store/react/jsx.d.ts.map +1 -0
  316. package/dist/store/react/jsx.js +203 -0
  317. package/dist/store/react/jsx.js.map +1 -0
  318. package/dist/store/react/metadata.d.ts +4 -0
  319. package/dist/store/react/metadata.d.ts.map +1 -0
  320. package/dist/store/react/metadata.js +174 -0
  321. package/dist/store/react/metadata.js.map +1 -0
  322. package/dist/store/react/pipeline.d.ts +14 -0
  323. package/dist/store/react/pipeline.d.ts.map +1 -0
  324. package/dist/store/react/pipeline.js +60 -0
  325. package/dist/store/react/pipeline.js.map +1 -0
  326. package/dist/store/react/props.d.ts +36 -0
  327. package/dist/store/react/props.d.ts.map +1 -0
  328. package/dist/store/react/props.js +133 -0
  329. package/dist/store/react/props.js.map +1 -0
  330. package/dist/store/store-fs.d.ts +41 -0
  331. package/dist/store/store-fs.d.ts.map +1 -0
  332. package/dist/store/store-fs.js +71 -0
  333. package/dist/store/store-fs.js.map +1 -0
  334. package/dist/writer/context.d.ts +16 -0
  335. package/dist/writer/context.d.ts.map +1 -0
  336. package/dist/writer/context.js +44 -0
  337. package/dist/writer/context.js.map +1 -0
  338. package/dist/writer/doc.d.ts +2 -0
  339. package/dist/writer/doc.d.ts.map +1 -0
  340. package/dist/writer/doc.js +12 -0
  341. package/dist/writer/doc.js.map +1 -0
  342. package/dist/writer/emit.d.ts +8 -0
  343. package/dist/writer/emit.d.ts.map +1 -0
  344. package/dist/writer/emit.js +21 -0
  345. package/dist/writer/emit.js.map +1 -0
  346. package/dist/writer/gtk-doc.d.ts +2 -0
  347. package/dist/writer/gtk-doc.d.ts.map +1 -0
  348. package/dist/writer/gtk-doc.js +67 -0
  349. package/dist/writer/gtk-doc.js.map +1 -0
  350. package/dist/writer/imports.d.ts +10 -0
  351. package/dist/writer/imports.d.ts.map +1 -0
  352. package/dist/writer/imports.js +50 -0
  353. package/dist/writer/imports.js.map +1 -0
  354. package/dist/writer/module.d.ts +15 -0
  355. package/dist/writer/module.d.ts.map +1 -0
  356. package/dist/writer/module.js +46 -0
  357. package/dist/writer/module.js.map +1 -0
  358. package/overrides/cairo/context.ts.ejs +1269 -0
  359. package/overrides/cairo/font-face.ts.ejs +151 -0
  360. package/overrides/cairo/font-options.ts.ejs +199 -0
  361. package/overrides/cairo/image-surface.ts.ejs +132 -0
  362. package/overrides/cairo/index.ts.ejs +22 -0
  363. package/overrides/cairo/matrix.ts.ejs +171 -0
  364. package/overrides/cairo/pattern.ts.ejs +476 -0
  365. package/overrides/cairo/recording-surface.ts.ejs +102 -0
  366. package/overrides/cairo/region.ts.ejs +237 -0
  367. package/overrides/cairo/scaled-font.ts.ejs +330 -0
  368. package/overrides/cairo/surface.ts.ejs +296 -0
  369. package/overrides/gdk/index.ts.ejs +2 -0
  370. package/overrides/gdk/rgba.ts.ejs +11 -0
  371. package/overrides/gobject/index.ts.ejs +29 -0
  372. package/overrides/gobject/object.ts.ejs +51 -0
  373. package/overrides/gobject/value.ts.ejs +17 -0
  374. package/overrides/graphene/index.ts.ejs +2 -0
  375. package/overrides/graphene/structs.ts.ejs +37 -0
  376. package/overrides/gtk/constants.ts.ejs +3 -0
  377. package/overrides/gtk/index.ts.ejs +2 -0
  378. package/package.json +15 -15
  379. package/src/analysis/descriptor-render.ts +407 -0
  380. package/src/analysis/descriptor.ts +263 -0
  381. package/src/analysis/inheritance.ts +242 -0
  382. package/src/analysis/param-structure.ts +127 -0
  383. package/src/analysis/ts-type.ts +88 -0
  384. package/src/compile.ts +152 -0
  385. package/src/docs/api-reference.ts +361 -0
  386. package/src/docs/element-page.ts +290 -0
  387. package/src/docs/pipeline.ts +182 -0
  388. package/src/docs/render.ts +191 -0
  389. package/src/docs/symbol-page.ts +444 -0
  390. package/src/fingerprint.ts +40 -29
  391. package/src/gir/ancestry.ts +41 -0
  392. package/src/gir/callback.ts +25 -22
  393. package/src/gir/class.ts +31 -57
  394. package/src/gir/enum.ts +20 -38
  395. package/src/gir/field.ts +21 -36
  396. package/src/gir/function.ts +17 -56
  397. package/src/gir/gir-path.ts +49 -0
  398. package/src/gir/libraries.ts +77 -0
  399. package/src/gir/library.ts +248 -0
  400. package/src/gir/namespace.ts +85 -80
  401. package/src/gir/parameter.ts +64 -93
  402. package/src/gir/parse.ts +43 -95
  403. package/src/gir/primitives.ts +23 -45
  404. package/src/gir/property.ts +27 -29
  405. package/src/gir/record.ts +53 -0
  406. package/src/gir/size.ts +9 -56
  407. package/src/gir/type-id.ts +49 -0
  408. package/src/gir/type-ref.ts +35 -140
  409. package/src/gir/type.ts +16 -0
  410. package/src/index.ts +20 -15
  411. package/src/khronos/args.ts +202 -0
  412. package/src/khronos/jsdoc.ts +76 -0
  413. package/src/khronos/model.ts +166 -0
  414. package/src/khronos/modules.ts +75 -0
  415. package/src/khronos/parse.ts +66 -0
  416. package/src/khronos/pipeline.ts +234 -0
  417. package/src/khronos/plan.ts +191 -0
  418. package/src/khronos/registry/LICENSE +202 -0
  419. package/src/khronos/registry/gl.xml +47748 -0
  420. package/src/khronos/render.ts +193 -0
  421. package/src/khronos/select.ts +67 -0
  422. package/src/runner.ts +112 -75
  423. package/src/store/compile-store.ts +49 -0
  424. package/src/store/gi/async.ts +42 -0
  425. package/src/store/gi/callables.ts +309 -0
  426. package/src/store/gi/callback.ts +15 -0
  427. package/src/store/gi/class-struct-record.ts +40 -0
  428. package/src/store/gi/class.ts +212 -0
  429. package/src/store/gi/companion.ts +13 -0
  430. package/src/store/gi/constant.ts +24 -0
  431. package/src/store/gi/constructor-props.ts +82 -0
  432. package/src/store/gi/enum.ts +49 -0
  433. package/src/store/gi/function.ts +107 -0
  434. package/src/store/gi/gtype-binding.ts +33 -0
  435. package/src/store/gi/interface.ts +157 -0
  436. package/src/store/gi/item-comparators.ts +90 -0
  437. package/src/store/gi/method.ts +417 -0
  438. package/src/store/gi/param-marshal.ts +48 -0
  439. package/src/store/gi/pipeline.ts +85 -0
  440. package/src/store/gi/properties.ts +39 -0
  441. package/src/store/gi/property-accessor.ts +194 -0
  442. package/src/store/gi/record-constructor.ts +87 -0
  443. package/src/store/gi/record-field-accessor.ts +394 -0
  444. package/src/store/gi/record-layout.ts +134 -0
  445. package/src/store/gi/record.ts +66 -0
  446. package/src/store/gi/registration.ts +38 -0
  447. package/src/store/gi/return-wrap.ts +52 -0
  448. package/src/store/gi/runtime-override.ts +36 -0
  449. package/src/store/gi/signal.ts +310 -0
  450. package/src/store/gi/vtable.ts +99 -0
  451. package/src/store/gi-store.ts +79 -0
  452. package/src/store/jsx-store.ts +27 -0
  453. package/src/store/react/built-ins.ts +260 -0
  454. package/src/store/react/element-components.ts +138 -0
  455. package/src/store/react/element-prop-types.ts +280 -0
  456. package/src/store/react/element-props.ts +204 -0
  457. package/src/store/react/gir-index.ts +85 -0
  458. package/src/store/react/intrinsic-elements.ts +161 -0
  459. package/src/store/react/jsx.ts +294 -0
  460. package/src/store/react/metadata.ts +197 -0
  461. package/src/store/react/pipeline.ts +90 -0
  462. package/src/store/react/props.ts +197 -0
  463. package/src/store/store-fs.ts +112 -0
  464. package/src/writer/context.ts +48 -0
  465. package/src/writer/doc.ts +11 -0
  466. package/src/writer/emit.ts +26 -0
  467. package/src/writer/gtk-doc.ts +74 -0
  468. package/src/writer/imports.ts +59 -0
  469. package/src/writer/module.ts +45 -0
  470. package/LICENSE +0 -373
  471. package/dist/dsl/context.d.ts +0 -104
  472. package/dist/dsl/context.d.ts.map +0 -1
  473. package/dist/dsl/context.js +0 -140
  474. package/dist/dsl/context.js.map +0 -1
  475. package/dist/dsl/emit.d.ts +0 -28
  476. package/dist/dsl/emit.d.ts.map +0 -1
  477. package/dist/dsl/emit.js +0 -41
  478. package/dist/dsl/emit.js.map +0 -1
  479. package/dist/dsl/identifier.d.ts +0 -28
  480. package/dist/dsl/identifier.d.ts.map +0 -1
  481. package/dist/dsl/identifier.js +0 -45
  482. package/dist/dsl/identifier.js.map +0 -1
  483. package/dist/dsl/imports.d.ts +0 -58
  484. package/dist/dsl/imports.d.ts.map +0 -1
  485. package/dist/dsl/imports.js +0 -107
  486. package/dist/dsl/imports.js.map +0 -1
  487. package/dist/dsl/module.d.ts +0 -53
  488. package/dist/dsl/module.d.ts.map +0 -1
  489. package/dist/dsl/module.js +0 -76
  490. package/dist/dsl/module.js.map +0 -1
  491. package/dist/ffi/pipeline.d.ts +0 -19
  492. package/dist/ffi/pipeline.d.ts.map +0 -1
  493. package/dist/ffi/pipeline.js +0 -107
  494. package/dist/ffi/pipeline.js.map +0 -1
  495. package/dist/gi-store.d.ts +0 -34
  496. package/dist/gi-store.d.ts.map +0 -1
  497. package/dist/gi-store.js +0 -154
  498. package/dist/gi-store.js.map +0 -1
  499. package/dist/gir/boxed.d.ts +0 -66
  500. package/dist/gir/boxed.d.ts.map +0 -1
  501. package/dist/gir/boxed.js +0 -49
  502. package/dist/gir/boxed.js.map +0 -1
  503. package/dist/gir/qualified-name.d.ts +0 -37
  504. package/dist/gir/qualified-name.d.ts.map +0 -1
  505. package/dist/gir/qualified-name.js +0 -39
  506. package/dist/gir/qualified-name.js.map +0 -1
  507. package/dist/gir/qualify.d.ts +0 -32
  508. package/dist/gir/qualify.d.ts.map +0 -1
  509. package/dist/gir/qualify.js +0 -60
  510. package/dist/gir/qualify.js.map +0 -1
  511. package/dist/gir/repository.d.ts +0 -82
  512. package/dist/gir/repository.d.ts.map +0 -1
  513. package/dist/gir/repository.js +0 -122
  514. package/dist/gir/repository.js.map +0 -1
  515. package/dist/gir/signal.d.ts +0 -22
  516. package/dist/gir/signal.d.ts.map +0 -1
  517. package/dist/gir/signal.js +0 -20
  518. package/dist/gir/signal.js.map +0 -1
  519. package/dist/jsx-store.d.ts +0 -22
  520. package/dist/jsx-store.d.ts.map +0 -1
  521. package/dist/jsx-store.js +0 -40
  522. package/dist/jsx-store.js.map +0 -1
  523. package/dist/react/compounds-meta.d.ts +0 -18
  524. package/dist/react/compounds-meta.d.ts.map +0 -1
  525. package/dist/react/compounds-meta.js +0 -93
  526. package/dist/react/compounds-meta.js.map +0 -1
  527. package/dist/react/compounds.d.ts +0 -27
  528. package/dist/react/compounds.d.ts.map +0 -1
  529. package/dist/react/compounds.js +0 -164
  530. package/dist/react/compounds.js.map +0 -1
  531. package/dist/react/internal.d.ts +0 -14
  532. package/dist/react/internal.d.ts.map +0 -1
  533. package/dist/react/internal.js +0 -79
  534. package/dist/react/internal.js.map +0 -1
  535. package/dist/react/jsx.d.ts +0 -22
  536. package/dist/react/jsx.d.ts.map +0 -1
  537. package/dist/react/jsx.js +0 -134
  538. package/dist/react/jsx.js.map +0 -1
  539. package/dist/react/pipeline.d.ts +0 -13
  540. package/dist/react/pipeline.d.ts.map +0 -1
  541. package/dist/react/pipeline.js +0 -25
  542. package/dist/react/pipeline.js.map +0 -1
  543. package/dist/react/props.d.ts +0 -38
  544. package/dist/react/props.d.ts.map +0 -1
  545. package/dist/react/props.js +0 -231
  546. package/dist/react/props.js.map +0 -1
  547. package/dist/react/slot-props.d.ts +0 -10
  548. package/dist/react/slot-props.d.ts.map +0 -1
  549. package/dist/react/slot-props.js +0 -56
  550. package/dist/react/slot-props.js.map +0 -1
  551. package/dist/react/widgets.d.ts +0 -83
  552. package/dist/react/widgets.d.ts.map +0 -1
  553. package/dist/react/widgets.js +0 -152
  554. package/dist/react/widgets.js.map +0 -1
  555. package/dist/store-fs.d.ts +0 -109
  556. package/dist/store-fs.d.ts.map +0 -1
  557. package/dist/store-fs.js +0 -98
  558. package/dist/store-fs.js.map +0 -1
  559. package/dist/transpile.d.ts +0 -32
  560. package/dist/transpile.d.ts.map +0 -1
  561. package/dist/transpile.js +0 -63
  562. package/dist/transpile.js.map +0 -1
  563. package/dist/typecheck-store.d.ts +0 -41
  564. package/dist/typecheck-store.d.ts.map +0 -1
  565. package/dist/typecheck-store.js +0 -102
  566. package/dist/typecheck-store.js.map +0 -1
  567. package/dist/writers/alias.d.ts +0 -13
  568. package/dist/writers/alias.d.ts.map +0 -1
  569. package/dist/writers/alias.js +0 -17
  570. package/dist/writers/alias.js.map +0 -1
  571. package/dist/writers/async.d.ts +0 -22
  572. package/dist/writers/async.d.ts.map +0 -1
  573. package/dist/writers/async.js +0 -48
  574. package/dist/writers/async.js.map +0 -1
  575. package/dist/writers/boxed-constructor.d.ts +0 -26
  576. package/dist/writers/boxed-constructor.d.ts.map +0 -1
  577. package/dist/writers/boxed-constructor.js +0 -85
  578. package/dist/writers/boxed-constructor.js.map +0 -1
  579. package/dist/writers/boxed-field-accessor.d.ts +0 -18
  580. package/dist/writers/boxed-field-accessor.d.ts.map +0 -1
  581. package/dist/writers/boxed-field-accessor.js +0 -260
  582. package/dist/writers/boxed-field-accessor.js.map +0 -1
  583. package/dist/writers/boxed-layout.d.ts +0 -27
  584. package/dist/writers/boxed-layout.d.ts.map +0 -1
  585. package/dist/writers/boxed-layout.js +0 -128
  586. package/dist/writers/boxed-layout.js.map +0 -1
  587. package/dist/writers/boxed.d.ts +0 -20
  588. package/dist/writers/boxed.d.ts.map +0 -1
  589. package/dist/writers/boxed.js +0 -71
  590. package/dist/writers/boxed.js.map +0 -1
  591. package/dist/writers/callables.d.ts +0 -124
  592. package/dist/writers/callables.d.ts.map +0 -1
  593. package/dist/writers/callables.js +0 -283
  594. package/dist/writers/callables.js.map +0 -1
  595. package/dist/writers/callback.d.ts +0 -16
  596. package/dist/writers/callback.d.ts.map +0 -1
  597. package/dist/writers/callback.js +0 -38
  598. package/dist/writers/callback.js.map +0 -1
  599. package/dist/writers/class-struct-record.d.ts +0 -31
  600. package/dist/writers/class-struct-record.d.ts.map +0 -1
  601. package/dist/writers/class-struct-record.js +0 -67
  602. package/dist/writers/class-struct-record.js.map +0 -1
  603. package/dist/writers/class-struct.d.ts +0 -22
  604. package/dist/writers/class-struct.d.ts.map +0 -1
  605. package/dist/writers/class-struct.js +0 -85
  606. package/dist/writers/class-struct.js.map +0 -1
  607. package/dist/writers/class.d.ts +0 -16
  608. package/dist/writers/class.d.ts.map +0 -1
  609. package/dist/writers/class.js +0 -307
  610. package/dist/writers/class.js.map +0 -1
  611. package/dist/writers/constant.d.ts +0 -15
  612. package/dist/writers/constant.d.ts.map +0 -1
  613. package/dist/writers/constant.js +0 -23
  614. package/dist/writers/constant.js.map +0 -1
  615. package/dist/writers/constants.d.ts +0 -15
  616. package/dist/writers/constants.d.ts.map +0 -1
  617. package/dist/writers/constants.js +0 -23
  618. package/dist/writers/constants.js.map +0 -1
  619. package/dist/writers/constructor-props.d.ts +0 -32
  620. package/dist/writers/constructor-props.d.ts.map +0 -1
  621. package/dist/writers/constructor-props.js +0 -110
  622. package/dist/writers/constructor-props.js.map +0 -1
  623. package/dist/writers/enum.d.ts +0 -21
  624. package/dist/writers/enum.d.ts.map +0 -1
  625. package/dist/writers/enum.js +0 -48
  626. package/dist/writers/enum.js.map +0 -1
  627. package/dist/writers/function.d.ts +0 -40
  628. package/dist/writers/function.d.ts.map +0 -1
  629. package/dist/writers/function.js +0 -127
  630. package/dist/writers/function.js.map +0 -1
  631. package/dist/writers/gtype-binding.d.ts +0 -19
  632. package/dist/writers/gtype-binding.d.ts.map +0 -1
  633. package/dist/writers/gtype-binding.js +0 -40
  634. package/dist/writers/gtype-binding.js.map +0 -1
  635. package/dist/writers/inheritance.d.ts +0 -48
  636. package/dist/writers/inheritance.d.ts.map +0 -1
  637. package/dist/writers/inheritance.js +0 -90
  638. package/dist/writers/inheritance.js.map +0 -1
  639. package/dist/writers/interface.d.ts +0 -16
  640. package/dist/writers/interface.d.ts.map +0 -1
  641. package/dist/writers/interface.js +0 -155
  642. package/dist/writers/interface.js.map +0 -1
  643. package/dist/writers/method.d.ts +0 -150
  644. package/dist/writers/method.d.ts.map +0 -1
  645. package/dist/writers/method.js +0 -510
  646. package/dist/writers/method.js.map +0 -1
  647. package/dist/writers/param-classify.d.ts +0 -93
  648. package/dist/writers/param-classify.d.ts.map +0 -1
  649. package/dist/writers/param-classify.js +0 -163
  650. package/dist/writers/param-classify.js.map +0 -1
  651. package/dist/writers/property-accessor.d.ts +0 -19
  652. package/dist/writers/property-accessor.d.ts.map +0 -1
  653. package/dist/writers/property-accessor.js +0 -117
  654. package/dist/writers/property-accessor.js.map +0 -1
  655. package/dist/writers/registration.d.ts +0 -27
  656. package/dist/writers/registration.d.ts.map +0 -1
  657. package/dist/writers/registration.js +0 -30
  658. package/dist/writers/registration.js.map +0 -1
  659. package/dist/writers/return-wrap.d.ts +0 -39
  660. package/dist/writers/return-wrap.d.ts.map +0 -1
  661. package/dist/writers/return-wrap.js +0 -152
  662. package/dist/writers/return-wrap.js.map +0 -1
  663. package/dist/writers/runtime-override.d.ts +0 -18
  664. package/dist/writers/runtime-override.d.ts.map +0 -1
  665. package/dist/writers/runtime-override.js.map +0 -1
  666. package/dist/writers/signal.d.ts +0 -21
  667. package/dist/writers/signal.d.ts.map +0 -1
  668. package/dist/writers/signal.js +0 -260
  669. package/dist/writers/signal.js.map +0 -1
  670. package/dist/writers/ts-type.d.ts +0 -50
  671. package/dist/writers/ts-type.d.ts.map +0 -1
  672. package/dist/writers/ts-type.js +0 -75
  673. package/dist/writers/ts-type.js.map +0 -1
  674. package/dist/writers/types-ts.d.ts +0 -27
  675. package/dist/writers/types-ts.d.ts.map +0 -1
  676. package/dist/writers/types-ts.js +0 -97
  677. package/dist/writers/types-ts.js.map +0 -1
  678. package/dist/writers/value.d.ts +0 -89
  679. package/dist/writers/value.d.ts.map +0 -1
  680. package/dist/writers/value.js +0 -402
  681. package/dist/writers/value.js.map +0 -1
  682. package/src/dsl/context.ts +0 -146
  683. package/src/dsl/emit.ts +0 -42
  684. package/src/dsl/identifier.ts +0 -52
  685. package/src/dsl/imports.ts +0 -109
  686. package/src/dsl/module.ts +0 -75
  687. package/src/ffi/pipeline.ts +0 -113
  688. package/src/gi-store.ts +0 -199
  689. package/src/gir/boxed.ts +0 -94
  690. package/src/gir/qualified-name.ts +0 -55
  691. package/src/gir/qualify.ts +0 -64
  692. package/src/gir/repository.ts +0 -149
  693. package/src/gir/signal.ts +0 -36
  694. package/src/jsx-store.ts +0 -53
  695. package/src/react/compounds-meta.ts +0 -99
  696. package/src/react/compounds.ts +0 -204
  697. package/src/react/internal.ts +0 -91
  698. package/src/react/jsx.ts +0 -155
  699. package/src/react/pipeline.ts +0 -29
  700. package/src/react/props.ts +0 -307
  701. package/src/react/slot-props.ts +0 -57
  702. package/src/react/widgets.ts +0 -185
  703. package/src/store-fs.ts +0 -157
  704. package/src/transpile.ts +0 -80
  705. package/src/typecheck-store.ts +0 -136
  706. package/src/writers/alias.ts +0 -19
  707. package/src/writers/async.ts +0 -44
  708. package/src/writers/boxed-constructor.ts +0 -105
  709. package/src/writers/boxed-field-accessor.ts +0 -306
  710. package/src/writers/boxed-layout.ts +0 -166
  711. package/src/writers/boxed.ts +0 -77
  712. package/src/writers/callables.ts +0 -339
  713. package/src/writers/callback.ts +0 -40
  714. package/src/writers/class-struct-record.ts +0 -75
  715. package/src/writers/class-struct.ts +0 -96
  716. package/src/writers/class.ts +0 -384
  717. package/src/writers/constant.ts +0 -29
  718. package/src/writers/constructor-props.ts +0 -130
  719. package/src/writers/enum.ts +0 -53
  720. package/src/writers/function.ts +0 -136
  721. package/src/writers/gtype-binding.ts +0 -48
  722. package/src/writers/inheritance.ts +0 -104
  723. package/src/writers/interface.ts +0 -168
  724. package/src/writers/method.ts +0 -678
  725. package/src/writers/param-classify.ts +0 -178
  726. package/src/writers/property-accessor.ts +0 -139
  727. package/src/writers/registration.ts +0 -42
  728. package/src/writers/return-wrap.ts +0 -180
  729. package/src/writers/runtime-override.ts +0 -59
  730. package/src/writers/signal.ts +0 -318
  731. package/src/writers/ts-type.ts +0 -115
  732. package/src/writers/value.ts +0 -485
@@ -1,179 +1,74 @@
1
- import { attr, attrBool, childOf, childrenOf, type RawNode } from "./parse.js";
2
- import { type PrimitiveCategory, primitiveCategory } from "./primitives.js";
1
+ import { attr, childOf, childrenOf, intAttr, nameAttr, type RawNode } from "./parse.js";
2
+ import { primitiveCategory } from "./primitives.js";
3
+ import { type CArrayType, LIST_FLAVOR_BY_NAME, type ListFlavor, type ParseContext, type TypeId } from "./type-id.js";
3
4
 
4
- /**
5
- * Lazily-resolved reference to a GIR type as it appears in a `<type>` or
6
- * `<array>` slot.
7
- *
8
- * The reference captures everything the writers need at emission time
9
- * without forcing entity resolution to happen at parse time (which would
10
- * impose a topological-sort order on namespace loading). Resolution into a
11
- * concrete `GirClass` / `GirBoxed` / `GirEnum` / … is performed on demand
12
- * by the writers via `GirRepository.resolveNamed`.
13
- */
14
- export type GirTypeRef =
15
- | PrimitiveTypeRef
16
- | NamedTypeRef
17
- | ArrayTypeRef
18
- | ListTypeRef
19
- | HashTableTypeRef
20
- | InlineCallbackTypeRef
21
- | VarargsTypeRef;
5
+ const LIST_FLAVOR_BY_NAME_LOOKUP: Map<string, ListFlavor> = new Map(Object.entries(LIST_FLAVOR_BY_NAME));
22
6
 
23
- /** A GIR scalar primitive: `gint`, `gboolean`, `utf8`, `gpointer`, etc. */
24
- export type PrimitiveTypeRef = {
25
- readonly kind: "primitive";
26
- readonly category: PrimitiveCategory;
27
- readonly cType: string | undefined;
7
+ const elementRefOf = (node: RawNode, context: ParseContext): TypeId => {
8
+ const elementNode = childOf(node, "type");
9
+ return elementNode === undefined ? pointerFallback(context) : typeRefFromTypeNode(elementNode, context);
28
10
  };
29
11
 
30
- /**
31
- * A named type that resolves to a class, interface, boxed, enum, alias, or
32
- * fundamental in some namespace.
33
- *
34
- * `namespaceName` is the namespace prefix from the GIR (`"GLib"`, `"Gtk"`,
35
- * …) or `undefined` for an unqualified reference. The unqualified form
36
- * implies "look in the namespace the reference appears in".
37
- */
38
- export type NamedTypeRef = {
39
- readonly kind: "named";
40
- readonly namespaceName: string | undefined;
41
- readonly typeName: string;
42
- readonly cType: string | undefined;
43
- };
44
-
45
- /** A C array (`<array>`) with optional length, fixed-size, or zero-terminated metadata. */
46
- export type ArrayTypeRef = {
47
- readonly kind: "array";
48
- readonly element: GirTypeRef;
49
- readonly cType: string | undefined;
50
- readonly lengthParameterIndex: number | undefined;
51
- readonly fixedSize: number | undefined;
52
- readonly zeroTerminated: boolean;
53
- };
54
-
55
- /** A GLib `GList` / `GSList` / `GPtrArray` / `GArray` / `GByteArray`. */
56
- export type ListTypeRef = {
57
- readonly kind: "list";
58
- readonly flavor: "glist" | "gslist" | "gptrarray" | "garray" | "gbytearray";
59
- readonly element: GirTypeRef;
60
- readonly cType: string | undefined;
61
- };
62
-
63
- /** A GLib `GHashTable` with key and value element types. */
64
- export type HashTableTypeRef = {
65
- readonly kind: "hashtable";
66
- readonly key: GirTypeRef;
67
- readonly value: GirTypeRef;
68
- readonly cType: string | undefined;
69
- };
70
-
71
- /** An inline `<callback>` (used for vtable slots and callback parameters). */
72
- type InlineCallbackTypeRef = {
73
- readonly kind: "callback";
74
- readonly callback: RawNode;
75
- };
76
-
77
- /** A `<varargs/>` parameter placeholder; not marshalable. */
78
- type VarargsTypeRef = { readonly kind: "varargs" };
79
-
80
- const LIST_KIND_BY_NAME: ReadonlyMap<string, "glist" | "gslist" | "gptrarray" | "garray" | "gbytearray"> = new Map([
81
- ["GLib.List", "glist"],
82
- ["GLib.SList", "gslist"],
83
- ["GLib.PtrArray", "gptrarray"],
84
- ["GLib.Array", "garray"],
85
- ["GLib.ByteArray", "gbytearray"],
86
- ] as const);
87
-
88
- /**
89
- * Builds a {@link GirTypeRef} from a parent XML node whose first `<type>`,
90
- * `<array>`, or `<varargs>` child describes the slot.
91
- *
92
- * Pass the parent (`<parameter>`, `<return-value>`, `<field>`, `<property>`,
93
- * `<constant>`, `<alias>`). The helper extracts the right child and routes
94
- * to {@link typeRefFromTypeNode}.
95
- *
96
- * @param parent - The element whose typed slot we are inspecting
97
- * @returns The reference, or `undefined` if no type slot exists
98
- */
99
- export const typeRefFromSlot = (parent: RawNode | undefined): GirTypeRef | undefined => {
12
+ export const typeRefFromNode = (parent: RawNode | undefined, context: ParseContext): TypeId | undefined => {
100
13
  if (parent === undefined) return undefined;
101
- if (childOf(parent, "varargs") !== undefined) return { kind: "varargs" };
14
+ if (childOf(parent, "varargs") !== undefined) return context.addVarargs();
102
15
  const arrayNode = childOf(parent, "array");
103
- if (arrayNode !== undefined) return arrayTypeRefFromNode(arrayNode);
16
+ if (arrayNode !== undefined) return arrayTypeRefFromNode(arrayNode, context);
104
17
  const typeNode = childOf(parent, "type");
105
- if (typeNode !== undefined) return typeRefFromTypeNode(typeNode);
18
+ if (typeNode !== undefined) return typeRefFromTypeNode(typeNode, context);
106
19
  const callback = childOf(parent, "callback");
107
- if (callback !== undefined) return { kind: "callback", callback };
20
+ if (callback !== undefined) return context.addAnonymousCallback(callback);
108
21
  return undefined;
109
22
  };
110
23
 
111
- /**
112
- * Builds a {@link GirTypeRef} from a `<type>` element.
113
- *
114
- * Splits a `Namespace.TypeName` form into namespace + type, recognises GLib
115
- * container types (`GLib.List`, `GLib.HashTable`, …) by name and routes
116
- * them to the dedicated branches, otherwise produces a primitive or named
117
- * reference for later resolution.
118
- *
119
- * @param typeNode - A `<type>` element
120
- */
121
- const typeRefFromTypeNode = (typeNode: RawNode): GirTypeRef => {
122
- const name = attr(typeNode, "name") ?? "";
123
- const cType = attr(typeNode, "c:type");
24
+ const typeRefFromTypeNode = (typeNode: RawNode, context: ParseContext): TypeId => {
25
+ const name = nameAttr(typeNode);
124
26
 
125
- const listFlavor = LIST_KIND_BY_NAME.get(name);
27
+ const listFlavor = LIST_FLAVOR_BY_NAME_LOOKUP.get(name);
126
28
  if (listFlavor !== undefined) {
127
- const elementNode = childOf(typeNode, "type");
128
- const element = elementNode === undefined ? pointerFallback() : typeRefFromTypeNode(elementNode);
129
- return { kind: "list", flavor: listFlavor, element, cType };
29
+ return context.addContainer({ kind: "list", flavor: listFlavor, element: elementRefOf(typeNode, context) });
130
30
  }
131
31
 
132
32
  if (name === "GLib.HashTable") {
133
33
  const elementTypes = childrenOf(typeNode, "type");
134
34
  const keyNode = elementTypes[0];
135
35
  const valueNode = elementTypes[1];
136
- return {
36
+ return context.addContainer({
137
37
  kind: "hashtable",
138
- key: keyNode === undefined ? pointerFallback() : typeRefFromTypeNode(keyNode),
139
- value: valueNode === undefined ? pointerFallback() : typeRefFromTypeNode(valueNode),
140
- cType,
141
- };
38
+ key: keyNode === undefined ? pointerFallback(context) : typeRefFromTypeNode(keyNode, context),
39
+ value: valueNode === undefined ? pointerFallback(context) : typeRefFromTypeNode(valueNode, context),
40
+ });
142
41
  }
143
42
 
144
43
  const primitive = primitiveCategory(name);
145
44
  if (primitive !== undefined) {
146
- return { kind: "primitive", category: primitive, cType };
45
+ return context.addPrimitive(primitive);
147
46
  }
148
47
 
149
- const [namespaceName, typeName] = splitOptionalNamespace(name);
150
- return { kind: "named", namespaceName, typeName, cType };
48
+ return context.findType(name);
151
49
  };
152
50
 
153
- const arrayTypeRefFromNode = (arrayNode: RawNode): ArrayTypeRef | ListTypeRef => {
154
- const elementNode = childOf(arrayNode, "type");
155
- const element: GirTypeRef = elementNode === undefined ? pointerFallback() : typeRefFromTypeNode(elementNode);
156
- const cType = attr(arrayNode, "c:type");
51
+ const arrayTypeRefFromNode = (arrayNode: RawNode, context: ParseContext): TypeId => {
52
+ const element = elementRefOf(arrayNode, context);
157
53
  const arrayName = attr(arrayNode, "name");
158
- const listFlavor = arrayName === undefined ? undefined : LIST_KIND_BY_NAME.get(arrayName);
54
+ const listFlavor = arrayName === undefined ? undefined : LIST_FLAVOR_BY_NAME_LOOKUP.get(arrayName);
159
55
  if (listFlavor !== undefined) {
160
- return { kind: "list", flavor: listFlavor, element, cType };
56
+ return context.addContainer({ kind: "list", flavor: listFlavor, element });
161
57
  }
162
- const lengthAttr = attr(arrayNode, "length");
163
- const fixedSizeAttr = attr(arrayNode, "fixed-size");
164
- return {
165
- kind: "array",
58
+ const elementNode = childOf(arrayNode, "type");
59
+ const carray: CArrayType = {
60
+ kind: "carray",
166
61
  element,
167
- cType,
168
- lengthParameterIndex: lengthAttr === undefined ? undefined : Number.parseInt(lengthAttr, 10),
169
- fixedSize: fixedSizeAttr === undefined ? undefined : Number.parseInt(fixedSizeAttr, 10),
170
- zeroTerminated: attrBool(arrayNode, "zero-terminated", false),
62
+ elementCType: elementNode === undefined ? undefined : attr(elementNode, "c:type"),
63
+ lengthParameterIndex: intAttr(arrayNode, "length"),
64
+ fixedSize: intAttr(arrayNode, "fixed-size"),
171
65
  };
66
+ return context.addContainer(carray);
172
67
  };
173
68
 
174
- const pointerFallback = (): PrimitiveTypeRef => ({ kind: "primitive", category: "pointer", cType: undefined });
69
+ const pointerFallback = (context: ParseContext): TypeId => context.addPrimitive("pointer");
175
70
 
176
- const splitOptionalNamespace = (name: string): [string | undefined, string] => {
71
+ export const splitOptionalNamespace = (name: string): [string | undefined, string] => {
177
72
  const dot = name.indexOf(".");
178
73
  if (dot === -1) return [undefined, name];
179
74
  return [name.slice(0, dot), name.slice(dot + 1)];
@@ -0,0 +1,16 @@
1
+ import type { GirCallback } from "./callback.js";
2
+ import type { GirClass } from "./class.js";
3
+ import type { GirEnum } from "./enum.js";
4
+ import type { GirAlias, GirNamespace } from "./namespace.js";
5
+ import type { GirRecord } from "./record.js";
6
+ import type { StructuralType } from "./type-id.js";
7
+
8
+ export type EntityType =
9
+ | { kind: "class"; namespace: GirNamespace; value: GirClass }
10
+ | { kind: "interface"; namespace: GirNamespace; value: GirClass }
11
+ | { kind: "record"; namespace: GirNamespace; value: GirRecord }
12
+ | { kind: "enum"; namespace: GirNamespace; value: GirEnum }
13
+ | { kind: "callback"; namespace: GirNamespace; value: GirCallback }
14
+ | { kind: "alias"; namespace: GirNamespace; value: GirAlias };
15
+
16
+ export type GirType = StructuralType | EntityType;
package/src/index.ts CHANGED
@@ -1,16 +1,21 @@
1
- /**
2
- * Public API of `@gtkx/codegen`.
3
- *
4
- * The package exposes a single entry point — {@link CodegenRunner} — that
5
- * orchestrates the GIR-driven code generation for the FFI and React
6
- * surfaces. Internal modules (`gir/`, `dsl/`, `writers/`, `ffi/`,
7
- * `react/`) are not part of the supported surface and may change in any
8
- * release.
9
- */
10
1
  export {
11
- CODEGEN_VERSION,
12
- type CodegenFingerprint,
13
- computeFingerprint,
14
- FINGERPRINT_FILENAME,
15
- } from "./fingerprint.js";
16
- export { CodegenRunner } from "./runner.js";
2
+ API_SYMBOL_KINDS,
3
+ type ApiLookupResult,
4
+ type ApiNamespaceSummary,
5
+ type ApiReference,
6
+ type ApiReferenceOptions,
7
+ type ApiSearchOptions,
8
+ type ApiSymbol,
9
+ type ApiSymbolKind,
10
+ loadApiReference,
11
+ } from "./docs/api-reference.js";
12
+ export {
13
+ type DocsElementLink,
14
+ type DocsNamespace,
15
+ type DocsOptions,
16
+ type DocsResult,
17
+ writeDocs,
18
+ } from "./docs/pipeline.js";
19
+ export { resolveGirPath } from "./gir/gir-path.js";
20
+ export { discoverGirNamespaces, resolveLibraries } from "./gir/libraries.js";
21
+ export { runCodegen } from "./runner.js";
@@ -0,0 +1,202 @@
1
+ import { toCamelIdentifier } from "@gtkx/utils";
2
+ import {
3
+ tArray,
4
+ tBoolean,
5
+ tBuffer,
6
+ tFixedArray,
7
+ tInlineStruct,
8
+ tRef,
9
+ tSizedArray,
10
+ tString,
11
+ tUint64,
12
+ } from "../analysis/descriptor.js";
13
+ import type { GlCommand } from "./model.js";
14
+ import type { CommandPlan, GlScalar, ParamPlan } from "./plan.js";
15
+
16
+ export const scalarAliasOrGroup = (scalar: GlScalar, group: string | undefined): string =>
17
+ group !== undefined && scalar.groupBearing === true ? group : scalar.tsAlias;
18
+
19
+ const paramIndexByName = (command: GlCommand, name: string): number => {
20
+ const index = command.params.findIndex((param) => param.name === name);
21
+ if (index < 0) throw new Error(`Command ${command.name} has no parameter named ${name}`);
22
+ return index;
23
+ };
24
+
25
+ const arrayInTsType = (scalar: GlScalar, group: string | undefined): string => {
26
+ const element = scalarAliasOrGroup(scalar, group);
27
+ return scalar.viewType === undefined ? `${element}[]` : `${element}[] | ${scalar.viewType}`;
28
+ };
29
+
30
+ export type InArg = {
31
+ out: false;
32
+ name: string;
33
+ tsType: string;
34
+ descriptor: string;
35
+ };
36
+
37
+ export type OutArg = {
38
+ out: true;
39
+ cellName: string;
40
+ seed: string;
41
+ tsType: string;
42
+ descriptor: string;
43
+ paramIndex: number;
44
+ };
45
+
46
+ type PlannedArg = InArg | OutArg;
47
+
48
+ type BuildArgOptions = {
49
+ command: GlCommand;
50
+ index: number;
51
+ plan: ParamPlan;
52
+ outIndex: number;
53
+ };
54
+
55
+ const inArg = (name: string, tsType: string, descriptor: string): InArg => ({
56
+ out: false,
57
+ name,
58
+ tsType,
59
+ descriptor,
60
+ });
61
+
62
+ const buildInArg = (options: BuildArgOptions, name: string, track: (alias: string) => string): InArg => {
63
+ const { command, index, plan } = options;
64
+ const param = command.params[index];
65
+ if (param === undefined) throw new Error(`Parameter index ${index} out of range on ${command.name}`);
66
+ switch (plan.kind) {
67
+ case "scalar":
68
+ return inArg(name, track(scalarAliasOrGroup(plan.scalar, param.group)), plan.scalar.descriptor);
69
+ case "boolean":
70
+ return inArg(name, "boolean", tBoolean);
71
+ case "sync":
72
+ return inArg(name, track("GLsync"), tInlineStruct());
73
+ case "string-in":
74
+ return inArg(name, "string", tString("borrowed"));
75
+ case "string-array-in":
76
+ return inArg(name, "string[]", tArray(tString("borrowed")));
77
+ case "array-in": {
78
+ track(scalarAliasOrGroup(plan.scalar, param.group));
79
+ return inArg(name, arrayInTsType(plan.scalar, param.group), tArray(plan.scalar.descriptor));
80
+ }
81
+ case "buffer":
82
+ return inArg(name, `ArrayBufferView | ${track("GLintptr")} | null`, tBuffer);
83
+ case "byte-offset":
84
+ return inArg(name, track("GLintptr"), tUint64);
85
+ case "byte-offset-array":
86
+ return inArg(name, `${track("GLintptr")}[]`, tArray(tUint64));
87
+ default:
88
+ throw new Error(`Plan kind ${plan.kind} is not an input parameter`);
89
+ }
90
+ };
91
+
92
+ const buildOutArg = (options: BuildArgOptions, track: (alias: string) => string): OutArg => {
93
+ const { command, index, plan, outIndex } = options;
94
+ const param = command.params[index];
95
+ if (param === undefined) throw new Error(`Parameter index ${index} out of range on ${command.name}`);
96
+ const cellName = `out${outIndex}`;
97
+ switch (plan.kind) {
98
+ case "ref-out":
99
+ return {
100
+ out: true,
101
+ cellName,
102
+ seed: `const ${cellName} = { value: 0 };`,
103
+ tsType: track(scalarAliasOrGroup(plan.scalar, param.group)),
104
+ descriptor: tRef(plan.scalar.descriptor),
105
+ paramIndex: index,
106
+ };
107
+ case "ref-array-out": {
108
+ const sizeIndex = paramIndexByName(command, plan.lenParamName);
109
+ const lenIdentifier = toCamelIdentifier(plan.lenParamName);
110
+ return {
111
+ out: true,
112
+ cellName,
113
+ seed: `const ${cellName} = { value: new Array<number>(${lenIdentifier}).fill(0) };`,
114
+ tsType: `${track(plan.scalar.tsAlias)}[]`,
115
+ descriptor: tRef(tSizedArray(plan.scalar.descriptor, sizeIndex)),
116
+ paramIndex: index,
117
+ };
118
+ }
119
+ case "ref-fixed-out":
120
+ return {
121
+ out: true,
122
+ cellName,
123
+ seed: `const ${cellName} = { value: new Array<number>(${plan.length}).fill(0) };`,
124
+ tsType: `${track(plan.scalar.tsAlias)}[]`,
125
+ descriptor: tRef(tFixedArray(plan.scalar.descriptor, plan.length)),
126
+ paramIndex: index,
127
+ };
128
+ case "string-out":
129
+ return {
130
+ out: true,
131
+ cellName,
132
+ seed: `const ${cellName} = { value: "" };`,
133
+ tsType: "string",
134
+ descriptor: tRef(tString("borrowed", toCamelIdentifier(plan.lenParamName))),
135
+ paramIndex: index,
136
+ };
137
+ default:
138
+ throw new Error(`Plan kind ${plan.kind} is not an output parameter`);
139
+ }
140
+ };
141
+
142
+ const isOutPlan = (plan: ParamPlan): boolean =>
143
+ plan.kind === "ref-out" ||
144
+ plan.kind === "ref-array-out" ||
145
+ plan.kind === "ref-fixed-out" ||
146
+ plan.kind === "string-out";
147
+
148
+ export const trackInto =
149
+ (usedTypes: Set<string>) =>
150
+ (alias: string): string => {
151
+ usedTypes.add(alias);
152
+ return alias;
153
+ };
154
+
155
+ export const planArgs = (
156
+ plan: CommandPlan & { ok: true },
157
+ usedTypes: Set<string>,
158
+ ): { args: PlannedArg[]; ins: InArg[]; outs: OutArg[] } => {
159
+ const track = trackInto(usedTypes);
160
+ const args: PlannedArg[] = [];
161
+ const ins: InArg[] = [];
162
+ const outs: OutArg[] = [];
163
+ plan.params.forEach((paramPlan, index) => {
164
+ const param = plan.command.params[index];
165
+ if (param === undefined) throw new Error(`Parameter index ${index} out of range on ${plan.command.name}`);
166
+ const options: BuildArgOptions = {
167
+ command: plan.command,
168
+ index,
169
+ plan: paramPlan,
170
+ outIndex: outs.length,
171
+ };
172
+ if (isOutPlan(paramPlan)) {
173
+ const arg = buildOutArg(options, track);
174
+ args.push(arg);
175
+ outs.push(arg);
176
+ } else {
177
+ const arg = buildInArg(options, toCamelIdentifier(param.name), track);
178
+ args.push(arg);
179
+ ins.push(arg);
180
+ }
181
+ });
182
+ return { args, ins, outs };
183
+ };
184
+
185
+ export const scalarPrefixArgs = (plan: CommandPlan & { ok: true }, usedTypes: Set<string>): InArg[] | undefined => {
186
+ const track = trackInto(usedTypes);
187
+ const prefix: InArg[] = [];
188
+ for (let index = 0; index < plan.params.length - 2; index++) {
189
+ const paramPlan = plan.params[index];
190
+ const param = plan.command.params[index];
191
+ if (param === undefined) return undefined;
192
+ if (paramPlan === undefined || paramPlan.kind !== "scalar") return undefined;
193
+ prefix.push(
194
+ buildInArg(
195
+ { command: plan.command, index, plan: paramPlan, outIndex: 0 },
196
+ toCamelIdentifier(param.name),
197
+ track,
198
+ ),
199
+ );
200
+ }
201
+ return prefix;
202
+ };
@@ -0,0 +1,76 @@
1
+ import { toCamelIdentifier } from "@gtkx/utils";
2
+ import type { InArg, OutArg } from "./args.js";
3
+ import type { GlCommand } from "./model.js";
4
+ import type { ReturnPlan } from "./plan.js";
5
+
6
+ const REFPAGES_BASE = "https://registry.khronos.org/OpenGL-Refpages/gl4/html";
7
+
8
+ const formatPrototype = (command: GlCommand): string => {
9
+ const params = command.params
10
+ .map((param) => (param.cType.endsWith("*") ? `${param.cType}${param.name}` : `${param.cType} ${param.name}`))
11
+ .join(", ");
12
+ return `${command.returnCType} ${command.name}(${params})`;
13
+ };
14
+
15
+ export const inParamDocLine = (command: GlCommand, arg: InArg): string => {
16
+ const param = command.params.find((candidate) => toCamelIdentifier(candidate.name) === arg.name);
17
+ if (param === undefined) return ` * @param ${arg.name}`;
18
+ const notes: string[] = [`\`${param.cType}\``];
19
+ if (param.group !== undefined) notes.push(`group \`${param.group}\``);
20
+ if (param.len !== undefined) notes.push(`length \`${param.len}\``);
21
+ if (param.objectClass !== undefined) notes.push(`object class \`${param.objectClass}\``);
22
+ return ` * @param ${arg.name} - ${notes.join(", ")}`;
23
+ };
24
+
25
+ const returnsDocLine = (command: GlCommand, returnPlan: ReturnPlan, outs: OutArg[]): string | undefined => {
26
+ const members: string[] = [];
27
+ if (returnPlan.kind !== "void") members.push(`\`${command.returnCType}\``);
28
+ for (const out of outs) {
29
+ const param = command.params[out.paramIndex];
30
+ if (param === undefined)
31
+ throw new Error(`Output parameter index ${out.paramIndex} out of range on ${command.name}`);
32
+ members.push(`\`${param.name}\` (\`${param.cType}\`)`);
33
+ }
34
+ if (members.length === 0) return undefined;
35
+ if (members.length === 1) return ` * @returns ${members[0]}`;
36
+ return ` * @returns Tuple of ${members.join(", ")}`;
37
+ };
38
+
39
+ type CommandJsDocOptions = {
40
+ command: GlCommand;
41
+ feature: string;
42
+ ins: InArg[];
43
+ outs: OutArg[];
44
+ returnPlan: ReturnPlan;
45
+ };
46
+
47
+ type SingularJsDocOptions = {
48
+ commandName: string;
49
+ feature: string;
50
+ summary: string;
51
+ body: string[];
52
+ };
53
+
54
+ export const singularJsDoc = ({ commandName, feature, summary, body }: SingularJsDocOptions): string =>
55
+ [
56
+ "/**",
57
+ ` * ${summary}`,
58
+ " *",
59
+ ` * Provided by \`${feature}\`.`,
60
+ ...body,
61
+ ` * @see ${REFPAGES_BASE}/${commandName}.xhtml`,
62
+ " */",
63
+ ].join("\n");
64
+
65
+ export const commandJsDoc = ({ command, feature, ins, outs, returnPlan }: CommandJsDocOptions): string => {
66
+ const returnsLine = returnsDocLine(command, returnPlan, outs);
67
+ return singularJsDoc({
68
+ commandName: command.name,
69
+ feature,
70
+ summary: `\`${formatPrototype(command)}\``,
71
+ body: [
72
+ ...(ins.length > 0 ? [" *", ...ins.map((arg) => inParamDocLine(command, arg))] : []),
73
+ ...(returnsLine !== undefined ? [returnsLine] : []),
74
+ ],
75
+ });
76
+ };