@gtkx/codegen 0.21.0 → 1.0.0-rc.2

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 (756) hide show
  1. package/README.md +173 -0
  2. package/dist/analysis/descriptor-render.d.ts +25 -0
  3. package/dist/analysis/descriptor-render.d.ts.map +1 -0
  4. package/dist/analysis/descriptor-render.js +420 -0
  5. package/dist/analysis/descriptor-render.js.map +1 -0
  6. package/dist/analysis/descriptor.d.ts +62 -0
  7. package/dist/analysis/descriptor.d.ts.map +1 -0
  8. package/dist/analysis/descriptor.js +127 -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 +248 -0
  13. package/dist/analysis/inheritance.js.map +1 -0
  14. package/dist/analysis/param-structure.d.ts +27 -0
  15. package/dist/analysis/param-structure.d.ts.map +1 -0
  16. package/dist/analysis/param-structure.js +158 -0
  17. package/dist/analysis/param-structure.js.map +1 -0
  18. package/dist/analysis/ts-type.d.ts +20 -0
  19. package/dist/analysis/ts-type.d.ts.map +1 -0
  20. package/dist/analysis/ts-type.js +111 -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 +130 -0
  25. package/dist/compile.js.map +1 -0
  26. package/dist/docs/api-reference.d.ts +67 -0
  27. package/dist/docs/api-reference.d.ts.map +1 -0
  28. package/dist/docs/api-reference.js +372 -0
  29. package/dist/docs/api-reference.js.map +1 -0
  30. package/dist/docs/element-page.d.ts +12 -0
  31. package/dist/docs/element-page.d.ts.map +1 -0
  32. package/dist/docs/element-page.js +156 -0
  33. package/dist/docs/element-page.js.map +1 -0
  34. package/dist/docs/pipeline.d.ts +26 -0
  35. package/dist/docs/pipeline.d.ts.map +1 -0
  36. package/dist/docs/pipeline.js +156 -0
  37. package/dist/docs/pipeline.js.map +1 -0
  38. package/dist/docs/render.d.ts +34 -0
  39. package/dist/docs/render.d.ts.map +1 -0
  40. package/dist/docs/render.js +143 -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 +380 -0
  45. package/dist/docs/symbol-page.js.map +1 -0
  46. package/dist/fingerprint.d.ts +31 -28
  47. package/dist/fingerprint.d.ts.map +1 -1
  48. package/dist/fingerprint.js +84 -19
  49. package/dist/fingerprint.js.map +1 -1
  50. package/dist/gi.d.ts +13 -0
  51. package/dist/gi.d.ts.map +1 -0
  52. package/dist/gi.js +21 -0
  53. package/dist/gi.js.map +1 -0
  54. package/dist/gir/ancestry.d.ts +10 -0
  55. package/dist/gir/ancestry.d.ts.map +1 -0
  56. package/dist/gir/ancestry.js +26 -0
  57. package/dist/gir/ancestry.js.map +1 -0
  58. package/dist/gir/callback.d.ts +8 -14
  59. package/dist/gir/callback.d.ts.map +1 -1
  60. package/dist/gir/callback.js +16 -16
  61. package/dist/gir/callback.js.map +1 -1
  62. package/dist/gir/class.d.ts +25 -44
  63. package/dist/gir/class.d.ts.map +1 -1
  64. package/dist/gir/class.js +16 -26
  65. package/dist/gir/class.js.map +1 -1
  66. package/dist/gir/enum.d.ts +16 -34
  67. package/dist/gir/enum.d.ts.map +1 -1
  68. package/dist/gir/enum.js +10 -16
  69. package/dist/gir/enum.js.map +1 -1
  70. package/dist/gir/field.d.ts +16 -24
  71. package/dist/gir/field.d.ts.map +1 -1
  72. package/dist/gir/field.js +35 -18
  73. package/dist/gir/field.js.map +1 -1
  74. package/dist/gir/function.d.ts +15 -43
  75. package/dist/gir/function.d.ts.map +1 -1
  76. package/dist/gir/function.js +26 -23
  77. package/dist/gir/function.js.map +1 -1
  78. package/dist/gir/gir-path.d.ts +3 -0
  79. package/dist/gir/gir-path.d.ts.map +1 -0
  80. package/dist/gir/gir-path.js +57 -0
  81. package/dist/gir/gir-path.js.map +1 -0
  82. package/dist/gir/libraries.d.ts +5 -0
  83. package/dist/gir/libraries.d.ts.map +1 -0
  84. package/dist/gir/libraries.js +74 -0
  85. package/dist/gir/libraries.js.map +1 -0
  86. package/dist/gir/library.d.ts +43 -0
  87. package/dist/gir/library.d.ts.map +1 -0
  88. package/dist/gir/library.js +242 -0
  89. package/dist/gir/library.js.map +1 -0
  90. package/dist/gir/namespace.d.ts +40 -54
  91. package/dist/gir/namespace.d.ts.map +1 -1
  92. package/dist/gir/namespace.js +51 -40
  93. package/dist/gir/namespace.js.map +1 -1
  94. package/dist/gir/nullable-overrides.d.ts +3 -0
  95. package/dist/gir/nullable-overrides.d.ts.map +1 -0
  96. package/dist/gir/nullable-overrides.js +5 -0
  97. package/dist/gir/nullable-overrides.js.map +1 -0
  98. package/dist/gir/parameter.d.ts +34 -76
  99. package/dist/gir/parameter.d.ts.map +1 -1
  100. package/dist/gir/parameter.js +47 -59
  101. package/dist/gir/parameter.js.map +1 -1
  102. package/dist/gir/parse.d.ts +12 -77
  103. package/dist/gir/parse.d.ts.map +1 -1
  104. package/dist/gir/parse.js +65 -103
  105. package/dist/gir/parse.js.map +1 -1
  106. package/dist/gir/primitives.d.ts +5 -35
  107. package/dist/gir/primitives.d.ts.map +1 -1
  108. package/dist/gir/primitives.js +21 -36
  109. package/dist/gir/primitives.js.map +1 -1
  110. package/dist/gir/property.d.ts +18 -26
  111. package/dist/gir/property.d.ts.map +1 -1
  112. package/dist/gir/property.js +16 -12
  113. package/dist/gir/property.js.map +1 -1
  114. package/dist/gir/record.d.ts +28 -0
  115. package/dist/gir/record.d.ts.map +1 -0
  116. package/dist/gir/record.js +26 -0
  117. package/dist/gir/record.js.map +1 -0
  118. package/dist/gir/size.d.ts +15 -61
  119. package/dist/gir/size.d.ts.map +1 -1
  120. package/dist/gir/size.js +49 -72
  121. package/dist/gir/size.js.map +1 -1
  122. package/dist/gir/type-id.d.ts +51 -0
  123. package/dist/gir/type-id.d.ts.map +1 -0
  124. package/dist/gir/type-id.js +12 -0
  125. package/dist/gir/type-id.js.map +1 -0
  126. package/dist/gir/type-ref.d.ts +4 -77
  127. package/dist/gir/type-ref.d.ts.map +1 -1
  128. package/dist/gir/type-ref.js +58 -77
  129. package/dist/gir/type-ref.js.map +1 -1
  130. package/dist/gir/type.d.ts +34 -0
  131. package/dist/gir/type.d.ts.map +1 -0
  132. package/dist/gir/type.js +2 -0
  133. package/dist/gir/type.js.map +1 -0
  134. package/dist/index.d.ts +7 -11
  135. package/dist/index.d.ts.map +1 -1
  136. package/dist/index.js +6 -11
  137. package/dist/index.js.map +1 -1
  138. package/dist/jsx.d.ts +26 -0
  139. package/dist/jsx.d.ts.map +1 -0
  140. package/dist/jsx.js +40 -0
  141. package/dist/jsx.js.map +1 -0
  142. package/dist/khronos/args.d.ts +30 -0
  143. package/dist/khronos/args.d.ts.map +1 -0
  144. package/dist/khronos/args.js +171 -0
  145. package/dist/khronos/args.js.map +1 -0
  146. package/dist/khronos/jsdoc.d.ts +21 -0
  147. package/dist/khronos/jsdoc.d.ts.map +1 -0
  148. package/dist/khronos/jsdoc.js +72 -0
  149. package/dist/khronos/jsdoc.js.map +1 -0
  150. package/dist/khronos/model.d.ts +38 -0
  151. package/dist/khronos/model.d.ts.map +1 -0
  152. package/dist/khronos/model.js +167 -0
  153. package/dist/khronos/model.js.map +1 -0
  154. package/dist/khronos/modules.d.ts +12 -0
  155. package/dist/khronos/modules.d.ts.map +1 -0
  156. package/dist/khronos/modules.js +73 -0
  157. package/dist/khronos/modules.js.map +1 -0
  158. package/dist/khronos/param-pair.d.ts +11 -0
  159. package/dist/khronos/param-pair.d.ts.map +1 -0
  160. package/dist/khronos/param-pair.js +6 -0
  161. package/dist/khronos/param-pair.js.map +1 -0
  162. package/dist/khronos/parse.d.ts +8 -0
  163. package/dist/khronos/parse.d.ts.map +1 -0
  164. package/dist/khronos/parse.js +62 -0
  165. package/dist/khronos/parse.js.map +1 -0
  166. package/dist/khronos/pipeline.d.ts +24 -0
  167. package/dist/khronos/pipeline.d.ts.map +1 -0
  168. package/dist/khronos/pipeline.js +223 -0
  169. package/dist/khronos/pipeline.js.map +1 -0
  170. package/dist/khronos/plan.d.ts +81 -0
  171. package/dist/khronos/plan.d.ts.map +1 -0
  172. package/dist/khronos/plan.js +200 -0
  173. package/dist/khronos/plan.js.map +1 -0
  174. package/dist/khronos/render.d.ts +17 -0
  175. package/dist/khronos/render.d.ts.map +1 -0
  176. package/dist/khronos/render.js +205 -0
  177. package/dist/khronos/render.js.map +1 -0
  178. package/dist/khronos/select.d.ts +15 -0
  179. package/dist/khronos/select.d.ts.map +1 -0
  180. package/dist/khronos/select.js +56 -0
  181. package/dist/khronos/select.js.map +1 -0
  182. package/dist/react/element-config.d.ts +17 -0
  183. package/dist/react/element-config.d.ts.map +1 -0
  184. package/dist/react/element-config.js +61 -0
  185. package/dist/react/element-config.js.map +1 -0
  186. package/dist/runner.d.ts +38 -49
  187. package/dist/runner.d.ts.map +1 -1
  188. package/dist/runner.js +81 -54
  189. package/dist/runner.js.map +1 -1
  190. package/dist/store/compile-store.d.ts +11 -0
  191. package/dist/store/compile-store.d.ts.map +1 -0
  192. package/dist/store/compile-store.js +40 -0
  193. package/dist/store/compile-store.js.map +1 -0
  194. package/dist/store/gi/async.d.ts +5 -0
  195. package/dist/store/gi/async.d.ts.map +1 -0
  196. package/dist/store/gi/async.js +45 -0
  197. package/dist/store/gi/async.js.map +1 -0
  198. package/dist/store/gi/callables.d.ts +42 -0
  199. package/dist/store/gi/callables.d.ts.map +1 -0
  200. package/dist/store/gi/callables.js +264 -0
  201. package/dist/store/gi/callables.js.map +1 -0
  202. package/dist/store/gi/callback.d.ts +5 -0
  203. package/dist/store/gi/callback.d.ts.map +1 -0
  204. package/dist/store/gi/callback.js +17 -0
  205. package/dist/store/gi/callback.js.map +1 -0
  206. package/dist/store/gi/class-struct-record.d.ts +10 -0
  207. package/dist/store/gi/class-struct-record.d.ts.map +1 -0
  208. package/dist/store/gi/class-struct-record.js +52 -0
  209. package/dist/store/gi/class-struct-record.js.map +1 -0
  210. package/dist/store/gi/class.d.ts +5 -0
  211. package/dist/store/gi/class.d.ts.map +1 -0
  212. package/dist/store/gi/class.js +208 -0
  213. package/dist/store/gi/class.js.map +1 -0
  214. package/dist/store/gi/companion.d.ts +5 -0
  215. package/dist/store/gi/companion.d.ts.map +1 -0
  216. package/dist/store/gi/companion.js +16 -0
  217. package/dist/store/gi/companion.js.map +1 -0
  218. package/dist/store/gi/constant.d.ts +6 -0
  219. package/dist/store/gi/constant.d.ts.map +1 -0
  220. package/dist/store/gi/constant.js +35 -0
  221. package/dist/store/gi/constant.js.map +1 -0
  222. package/dist/store/gi/constructor-props.d.ts +6 -0
  223. package/dist/store/gi/constructor-props.d.ts.map +1 -0
  224. package/dist/store/gi/constructor-props.js +71 -0
  225. package/dist/store/gi/constructor-props.js.map +1 -0
  226. package/dist/store/gi/enum.d.ts +6 -0
  227. package/dist/store/gi/enum.d.ts.map +1 -0
  228. package/dist/store/gi/enum.js +41 -0
  229. package/dist/store/gi/enum.js.map +1 -0
  230. package/dist/store/gi/function.d.ts +9 -0
  231. package/dist/store/gi/function.d.ts.map +1 -0
  232. package/dist/store/gi/function.js +114 -0
  233. package/dist/store/gi/function.js.map +1 -0
  234. package/dist/store/gi/gtype-binding.d.ts +10 -0
  235. package/dist/store/gi/gtype-binding.d.ts.map +1 -0
  236. package/dist/store/gi/gtype-binding.js +24 -0
  237. package/dist/store/gi/gtype-binding.js.map +1 -0
  238. package/dist/store/gi/interface.d.ts +5 -0
  239. package/dist/store/gi/interface.d.ts.map +1 -0
  240. package/dist/store/gi/interface.js +117 -0
  241. package/dist/store/gi/interface.js.map +1 -0
  242. package/dist/store/gi/item-comparators.d.ts +7 -0
  243. package/dist/store/gi/item-comparators.d.ts.map +1 -0
  244. package/dist/store/gi/item-comparators.js +88 -0
  245. package/dist/store/gi/item-comparators.js.map +1 -0
  246. package/dist/store/gi/method.d.ts +24 -0
  247. package/dist/store/gi/method.d.ts.map +1 -0
  248. package/dist/store/gi/method.js +336 -0
  249. package/dist/store/gi/method.js.map +1 -0
  250. package/dist/store/gi/param-marshal.d.ts +10 -0
  251. package/dist/store/gi/param-marshal.d.ts.map +1 -0
  252. package/dist/store/gi/param-marshal.js +50 -0
  253. package/dist/store/gi/param-marshal.js.map +1 -0
  254. package/dist/store/gi/pipeline.d.ts +5 -0
  255. package/dist/store/gi/pipeline.d.ts.map +1 -0
  256. package/dist/store/gi/pipeline.js +95 -0
  257. package/dist/store/gi/pipeline.js.map +1 -0
  258. package/dist/store/gi/properties.d.ts +6 -0
  259. package/dist/store/gi/properties.d.ts.map +1 -0
  260. package/dist/store/gi/properties.js +32 -0
  261. package/dist/store/gi/properties.js.map +1 -0
  262. package/dist/store/gi/property-accessor.d.ts +27 -0
  263. package/dist/store/gi/property-accessor.d.ts.map +1 -0
  264. package/dist/store/gi/property-accessor.js +158 -0
  265. package/dist/store/gi/property-accessor.js.map +1 -0
  266. package/dist/store/gi/record-constructor.d.ts +6 -0
  267. package/dist/store/gi/record-constructor.d.ts.map +1 -0
  268. package/dist/store/gi/record-constructor.js +76 -0
  269. package/dist/store/gi/record-constructor.js.map +1 -0
  270. package/dist/store/gi/record-field-accessor.d.ts +25 -0
  271. package/dist/store/gi/record-field-accessor.d.ts.map +1 -0
  272. package/dist/store/gi/record-field-accessor.js +360 -0
  273. package/dist/store/gi/record-field-accessor.js.map +1 -0
  274. package/dist/store/gi/record-layout.d.ts +15 -0
  275. package/dist/store/gi/record-layout.d.ts.map +1 -0
  276. package/dist/store/gi/record-layout.js +132 -0
  277. package/dist/store/gi/record-layout.js.map +1 -0
  278. package/dist/store/gi/record.d.ts +5 -0
  279. package/dist/store/gi/record.d.ts.map +1 -0
  280. package/dist/store/gi/record.js +65 -0
  281. package/dist/store/gi/record.js.map +1 -0
  282. package/dist/store/gi/registration.d.ts +16 -0
  283. package/dist/store/gi/registration.d.ts.map +1 -0
  284. package/dist/store/gi/registration.js +21 -0
  285. package/dist/store/gi/registration.js.map +1 -0
  286. package/dist/store/gi/return-wrap.d.ts +10 -0
  287. package/dist/store/gi/return-wrap.d.ts.map +1 -0
  288. package/dist/store/gi/return-wrap.js +67 -0
  289. package/dist/store/gi/return-wrap.js.map +1 -0
  290. package/dist/store/gi/runtime-override.d.ts +4 -0
  291. package/dist/store/gi/runtime-override.d.ts.map +1 -0
  292. package/dist/store/gi/runtime-override.js +32 -0
  293. package/dist/store/gi/runtime-override.js.map +1 -0
  294. package/dist/store/gi/signal.d.ts +6 -0
  295. package/dist/store/gi/signal.d.ts.map +1 -0
  296. package/dist/store/gi/signal.js +280 -0
  297. package/dist/store/gi/signal.js.map +1 -0
  298. package/dist/store/gi/vtable.d.ts +5 -0
  299. package/dist/store/gi/vtable.d.ts.map +1 -0
  300. package/dist/store/gi/vtable.js +108 -0
  301. package/dist/store/gi/vtable.js.map +1 -0
  302. package/dist/store/gi-store.d.ts +10 -0
  303. package/dist/store/gi-store.d.ts.map +1 -0
  304. package/dist/store/gi-store.js +59 -0
  305. package/dist/store/gi-store.js.map +1 -0
  306. package/dist/store/jsx/element-components.d.ts +23 -0
  307. package/dist/store/jsx/element-components.d.ts.map +1 -0
  308. package/dist/store/jsx/element-components.js +86 -0
  309. package/dist/store/jsx/element-components.js.map +1 -0
  310. package/dist/store/jsx/element-prop-imports.d.ts +17 -0
  311. package/dist/store/jsx/element-prop-imports.d.ts.map +1 -0
  312. package/dist/store/jsx/element-prop-imports.js +15 -0
  313. package/dist/store/jsx/element-prop-imports.js.map +1 -0
  314. package/dist/store/jsx/element-prop-types.d.ts +10 -0
  315. package/dist/store/jsx/element-prop-types.d.ts.map +1 -0
  316. package/dist/store/jsx/element-prop-types.js +41 -0
  317. package/dist/store/jsx/element-prop-types.js.map +1 -0
  318. package/dist/store/jsx/gir-index.d.ts +16 -0
  319. package/dist/store/jsx/gir-index.d.ts.map +1 -0
  320. package/dist/store/jsx/gir-index.js +33 -0
  321. package/dist/store/jsx/gir-index.js.map +1 -0
  322. package/dist/store/jsx/intrinsic-elements.d.ts +27 -0
  323. package/dist/store/jsx/intrinsic-elements.d.ts.map +1 -0
  324. package/dist/store/jsx/intrinsic-elements.js +128 -0
  325. package/dist/store/jsx/intrinsic-elements.js.map +1 -0
  326. package/dist/store/jsx/jsx.d.ts +16 -0
  327. package/dist/store/jsx/jsx.d.ts.map +1 -0
  328. package/dist/store/jsx/jsx.js +242 -0
  329. package/dist/store/jsx/jsx.js.map +1 -0
  330. package/dist/store/jsx/metadata.d.ts +4 -0
  331. package/dist/store/jsx/metadata.d.ts.map +1 -0
  332. package/dist/store/jsx/metadata.js +253 -0
  333. package/dist/store/jsx/metadata.js.map +1 -0
  334. package/dist/store/jsx/pipeline.d.ts +21 -0
  335. package/dist/store/jsx/pipeline.d.ts.map +1 -0
  336. package/dist/store/jsx/pipeline.js +81 -0
  337. package/dist/store/jsx/pipeline.js.map +1 -0
  338. package/dist/store/jsx/props.d.ts +33 -0
  339. package/dist/store/jsx/props.d.ts.map +1 -0
  340. package/dist/store/jsx/props.js +158 -0
  341. package/dist/store/jsx/props.js.map +1 -0
  342. package/dist/store/jsx-store.d.ts +7 -0
  343. package/dist/store/jsx-store.d.ts.map +1 -0
  344. package/dist/store/jsx-store.js +26 -0
  345. package/dist/store/jsx-store.js.map +1 -0
  346. package/dist/store/store-fs.d.ts +43 -0
  347. package/dist/store/store-fs.d.ts.map +1 -0
  348. package/dist/store/store-fs.js +73 -0
  349. package/dist/store/store-fs.js.map +1 -0
  350. package/dist/writer/context.d.ts +17 -0
  351. package/dist/writer/context.d.ts.map +1 -0
  352. package/dist/writer/context.js +50 -0
  353. package/dist/writer/context.js.map +1 -0
  354. package/dist/writer/doc.d.ts +3 -0
  355. package/dist/writer/doc.d.ts.map +1 -0
  356. package/dist/writer/doc.js +18 -0
  357. package/dist/writer/doc.js.map +1 -0
  358. package/dist/writer/emit.d.ts +9 -0
  359. package/dist/writer/emit.d.ts.map +1 -0
  360. package/dist/writer/emit.js +24 -0
  361. package/dist/writer/emit.js.map +1 -0
  362. package/dist/writer/gtk-doc.d.ts +3 -0
  363. package/dist/writer/gtk-doc.d.ts.map +1 -0
  364. package/dist/writer/gtk-doc.js +78 -0
  365. package/dist/writer/gtk-doc.js.map +1 -0
  366. package/dist/writer/imports.d.ts +12 -0
  367. package/dist/writer/imports.d.ts.map +1 -0
  368. package/dist/writer/imports.js +61 -0
  369. package/dist/writer/imports.js.map +1 -0
  370. package/dist/writer/module.d.ts +16 -0
  371. package/dist/writer/module.d.ts.map +1 -0
  372. package/dist/writer/module.js +53 -0
  373. package/dist/writer/module.js.map +1 -0
  374. package/dist/xml.d.ts +4 -0
  375. package/dist/xml.d.ts.map +1 -0
  376. package/dist/xml.js +10 -0
  377. package/dist/xml.js.map +1 -0
  378. package/overrides/cairo/context.ts.ejs +1269 -0
  379. package/overrides/cairo/font-face.ts.ejs +151 -0
  380. package/overrides/cairo/font-options.ts.ejs +199 -0
  381. package/overrides/cairo/image-surface.ts.ejs +132 -0
  382. package/overrides/cairo/index.ts.ejs +22 -0
  383. package/overrides/cairo/matrix.ts.ejs +171 -0
  384. package/overrides/cairo/pattern.ts.ejs +476 -0
  385. package/overrides/cairo/recording-surface.ts.ejs +102 -0
  386. package/overrides/cairo/region.ts.ejs +237 -0
  387. package/overrides/cairo/scaled-font.ts.ejs +330 -0
  388. package/overrides/cairo/surface.ts.ejs +296 -0
  389. package/overrides/gdk/index.ts.ejs +2 -0
  390. package/overrides/gdk/rgba.ts.ejs +11 -0
  391. package/overrides/gobject/index.ts.ejs +29 -0
  392. package/overrides/gobject/object.ts.ejs +51 -0
  393. package/overrides/gobject/value.ts.ejs +17 -0
  394. package/overrides/graphene/index.ts.ejs +2 -0
  395. package/overrides/graphene/structs.ts.ejs +37 -0
  396. package/package.json +21 -15
  397. package/src/analysis/descriptor-render.ts +723 -0
  398. package/src/analysis/descriptor.ts +300 -0
  399. package/src/analysis/inheritance.ts +430 -0
  400. package/src/analysis/param-structure.ts +258 -0
  401. package/src/analysis/ts-type.ts +174 -0
  402. package/src/compile.ts +179 -0
  403. package/src/docs/api-reference.ts +557 -0
  404. package/src/docs/element-page.ts +281 -0
  405. package/src/docs/pipeline.ts +241 -0
  406. package/src/docs/render.ts +255 -0
  407. package/src/docs/symbol-page.ts +589 -0
  408. package/src/fingerprint.ts +144 -35
  409. package/src/gi.ts +26 -0
  410. package/src/gir/ancestry.ts +53 -0
  411. package/src/gir/callback.ts +22 -24
  412. package/src/gir/class.ts +39 -61
  413. package/src/gir/enum.ts +25 -41
  414. package/src/gir/field.ts +51 -37
  415. package/src/gir/function.ts +44 -59
  416. package/src/gir/gir-path.ts +73 -0
  417. package/src/gir/libraries.ts +102 -0
  418. package/src/gir/library.ts +351 -0
  419. package/src/gir/namespace.ts +109 -88
  420. package/src/gir/nullable-overrides.ts +5 -0
  421. package/src/gir/parameter.ts +111 -102
  422. package/src/gir/parse.ts +124 -121
  423. package/src/gir/primitives.ts +43 -63
  424. package/src/gir/property.ts +33 -33
  425. package/src/gir/record.ts +55 -0
  426. package/src/gir/size.ts +93 -107
  427. package/src/gir/type-id.ts +64 -0
  428. package/src/gir/type-ref.ts +77 -146
  429. package/src/gir/type.ts +18 -0
  430. package/src/index.ts +27 -15
  431. package/src/jsx.ts +70 -0
  432. package/src/khronos/args.ts +271 -0
  433. package/src/khronos/jsdoc.ts +114 -0
  434. package/src/khronos/model.ts +267 -0
  435. package/src/khronos/modules.ts +115 -0
  436. package/src/khronos/param-pair.ts +14 -0
  437. package/src/khronos/parse.ts +86 -0
  438. package/src/khronos/pipeline.ts +337 -0
  439. package/src/khronos/plan.ts +340 -0
  440. package/src/khronos/registry/LICENSE +202 -0
  441. package/src/khronos/registry/gl.xml +47748 -0
  442. package/src/khronos/render.ts +330 -0
  443. package/src/khronos/select.ts +97 -0
  444. package/src/react/element-config.ts +91 -0
  445. package/src/runner.ts +153 -80
  446. package/src/store/compile-store.ts +55 -0
  447. package/src/store/gi/async.ts +69 -0
  448. package/src/store/gi/callables.ts +518 -0
  449. package/src/store/gi/callback.ts +24 -0
  450. package/src/store/gi/class-struct-record.ts +72 -0
  451. package/src/store/gi/class.ts +334 -0
  452. package/src/store/gi/companion.ts +22 -0
  453. package/src/store/gi/constant.ts +58 -0
  454. package/src/store/gi/constructor-props.ts +108 -0
  455. package/src/store/gi/enum.ts +64 -0
  456. package/src/store/gi/function.ts +173 -0
  457. package/src/store/gi/gtype-binding.ts +46 -0
  458. package/src/store/gi/interface.ts +222 -0
  459. package/src/store/gi/item-comparators.ts +138 -0
  460. package/src/store/gi/method.ts +634 -0
  461. package/src/store/gi/param-marshal.ts +71 -0
  462. package/src/store/gi/pipeline.ts +135 -0
  463. package/src/store/gi/properties.ts +50 -0
  464. package/src/store/gi/property-accessor.ts +302 -0
  465. package/src/store/gi/record-constructor.ts +119 -0
  466. package/src/store/gi/record-field-accessor.ts +607 -0
  467. package/src/store/gi/record-layout.ts +221 -0
  468. package/src/store/gi/record.ts +89 -0
  469. package/src/store/gi/registration.ts +44 -0
  470. package/src/store/gi/return-wrap.ts +100 -0
  471. package/src/store/gi/runtime-override.ts +46 -0
  472. package/src/store/gi/signal.ts +450 -0
  473. package/src/store/gi/vtable.ts +175 -0
  474. package/src/store/gi-store.ts +92 -0
  475. package/src/store/jsx/element-components.ts +152 -0
  476. package/src/store/jsx/element-prop-imports.ts +24 -0
  477. package/src/store/jsx/element-prop-types.ts +59 -0
  478. package/src/store/jsx/gir-index.ts +62 -0
  479. package/src/store/jsx/intrinsic-elements.ts +262 -0
  480. package/src/store/jsx/jsx.ts +408 -0
  481. package/src/store/jsx/metadata.ts +385 -0
  482. package/src/store/jsx/pipeline.ts +145 -0
  483. package/src/store/jsx/props.ts +274 -0
  484. package/src/store/jsx-store.ts +39 -0
  485. package/src/store/store-fs.ts +128 -0
  486. package/src/writer/context.ts +67 -0
  487. package/src/writer/doc.ts +25 -0
  488. package/src/writer/emit.ts +35 -0
  489. package/src/writer/gtk-doc.ts +101 -0
  490. package/src/writer/imports.ts +94 -0
  491. package/src/writer/module.ts +69 -0
  492. package/src/xml.ts +12 -0
  493. package/LICENSE +0 -373
  494. package/dist/dsl/context.d.ts +0 -104
  495. package/dist/dsl/context.d.ts.map +0 -1
  496. package/dist/dsl/context.js +0 -140
  497. package/dist/dsl/context.js.map +0 -1
  498. package/dist/dsl/emit.d.ts +0 -28
  499. package/dist/dsl/emit.d.ts.map +0 -1
  500. package/dist/dsl/emit.js +0 -41
  501. package/dist/dsl/emit.js.map +0 -1
  502. package/dist/dsl/identifier.d.ts +0 -28
  503. package/dist/dsl/identifier.d.ts.map +0 -1
  504. package/dist/dsl/identifier.js +0 -45
  505. package/dist/dsl/identifier.js.map +0 -1
  506. package/dist/dsl/imports.d.ts +0 -58
  507. package/dist/dsl/imports.d.ts.map +0 -1
  508. package/dist/dsl/imports.js +0 -107
  509. package/dist/dsl/imports.js.map +0 -1
  510. package/dist/dsl/module.d.ts +0 -53
  511. package/dist/dsl/module.d.ts.map +0 -1
  512. package/dist/dsl/module.js +0 -76
  513. package/dist/dsl/module.js.map +0 -1
  514. package/dist/ffi/pipeline.d.ts +0 -19
  515. package/dist/ffi/pipeline.d.ts.map +0 -1
  516. package/dist/ffi/pipeline.js +0 -107
  517. package/dist/ffi/pipeline.js.map +0 -1
  518. package/dist/gi-store.d.ts +0 -34
  519. package/dist/gi-store.d.ts.map +0 -1
  520. package/dist/gi-store.js +0 -154
  521. package/dist/gi-store.js.map +0 -1
  522. package/dist/gir/boxed.d.ts +0 -66
  523. package/dist/gir/boxed.d.ts.map +0 -1
  524. package/dist/gir/boxed.js +0 -49
  525. package/dist/gir/boxed.js.map +0 -1
  526. package/dist/gir/qualified-name.d.ts +0 -37
  527. package/dist/gir/qualified-name.d.ts.map +0 -1
  528. package/dist/gir/qualified-name.js +0 -39
  529. package/dist/gir/qualified-name.js.map +0 -1
  530. package/dist/gir/qualify.d.ts +0 -32
  531. package/dist/gir/qualify.d.ts.map +0 -1
  532. package/dist/gir/qualify.js +0 -60
  533. package/dist/gir/qualify.js.map +0 -1
  534. package/dist/gir/repository.d.ts +0 -82
  535. package/dist/gir/repository.d.ts.map +0 -1
  536. package/dist/gir/repository.js +0 -122
  537. package/dist/gir/repository.js.map +0 -1
  538. package/dist/gir/signal.d.ts +0 -22
  539. package/dist/gir/signal.d.ts.map +0 -1
  540. package/dist/gir/signal.js +0 -20
  541. package/dist/gir/signal.js.map +0 -1
  542. package/dist/jsx-store.d.ts +0 -22
  543. package/dist/jsx-store.d.ts.map +0 -1
  544. package/dist/jsx-store.js +0 -40
  545. package/dist/jsx-store.js.map +0 -1
  546. package/dist/react/compounds-meta.d.ts +0 -18
  547. package/dist/react/compounds-meta.d.ts.map +0 -1
  548. package/dist/react/compounds-meta.js +0 -93
  549. package/dist/react/compounds-meta.js.map +0 -1
  550. package/dist/react/compounds.d.ts +0 -27
  551. package/dist/react/compounds.d.ts.map +0 -1
  552. package/dist/react/compounds.js +0 -164
  553. package/dist/react/compounds.js.map +0 -1
  554. package/dist/react/internal.d.ts +0 -14
  555. package/dist/react/internal.d.ts.map +0 -1
  556. package/dist/react/internal.js +0 -79
  557. package/dist/react/internal.js.map +0 -1
  558. package/dist/react/jsx.d.ts +0 -22
  559. package/dist/react/jsx.d.ts.map +0 -1
  560. package/dist/react/jsx.js +0 -134
  561. package/dist/react/jsx.js.map +0 -1
  562. package/dist/react/pipeline.d.ts +0 -13
  563. package/dist/react/pipeline.d.ts.map +0 -1
  564. package/dist/react/pipeline.js +0 -25
  565. package/dist/react/pipeline.js.map +0 -1
  566. package/dist/react/props.d.ts +0 -38
  567. package/dist/react/props.d.ts.map +0 -1
  568. package/dist/react/props.js +0 -231
  569. package/dist/react/props.js.map +0 -1
  570. package/dist/react/slot-props.d.ts +0 -10
  571. package/dist/react/slot-props.d.ts.map +0 -1
  572. package/dist/react/slot-props.js +0 -56
  573. package/dist/react/slot-props.js.map +0 -1
  574. package/dist/react/widgets.d.ts +0 -83
  575. package/dist/react/widgets.d.ts.map +0 -1
  576. package/dist/react/widgets.js +0 -152
  577. package/dist/react/widgets.js.map +0 -1
  578. package/dist/store-fs.d.ts +0 -109
  579. package/dist/store-fs.d.ts.map +0 -1
  580. package/dist/store-fs.js +0 -98
  581. package/dist/store-fs.js.map +0 -1
  582. package/dist/transpile.d.ts +0 -32
  583. package/dist/transpile.d.ts.map +0 -1
  584. package/dist/transpile.js +0 -63
  585. package/dist/transpile.js.map +0 -1
  586. package/dist/typecheck-store.d.ts +0 -41
  587. package/dist/typecheck-store.d.ts.map +0 -1
  588. package/dist/typecheck-store.js +0 -102
  589. package/dist/typecheck-store.js.map +0 -1
  590. package/dist/writers/alias.d.ts +0 -13
  591. package/dist/writers/alias.d.ts.map +0 -1
  592. package/dist/writers/alias.js +0 -17
  593. package/dist/writers/alias.js.map +0 -1
  594. package/dist/writers/async.d.ts +0 -22
  595. package/dist/writers/async.d.ts.map +0 -1
  596. package/dist/writers/async.js +0 -48
  597. package/dist/writers/async.js.map +0 -1
  598. package/dist/writers/boxed-constructor.d.ts +0 -26
  599. package/dist/writers/boxed-constructor.d.ts.map +0 -1
  600. package/dist/writers/boxed-constructor.js +0 -85
  601. package/dist/writers/boxed-constructor.js.map +0 -1
  602. package/dist/writers/boxed-field-accessor.d.ts +0 -18
  603. package/dist/writers/boxed-field-accessor.d.ts.map +0 -1
  604. package/dist/writers/boxed-field-accessor.js +0 -260
  605. package/dist/writers/boxed-field-accessor.js.map +0 -1
  606. package/dist/writers/boxed-layout.d.ts +0 -27
  607. package/dist/writers/boxed-layout.d.ts.map +0 -1
  608. package/dist/writers/boxed-layout.js +0 -128
  609. package/dist/writers/boxed-layout.js.map +0 -1
  610. package/dist/writers/boxed.d.ts +0 -20
  611. package/dist/writers/boxed.d.ts.map +0 -1
  612. package/dist/writers/boxed.js +0 -71
  613. package/dist/writers/boxed.js.map +0 -1
  614. package/dist/writers/callables.d.ts +0 -124
  615. package/dist/writers/callables.d.ts.map +0 -1
  616. package/dist/writers/callables.js +0 -283
  617. package/dist/writers/callables.js.map +0 -1
  618. package/dist/writers/callback.d.ts +0 -16
  619. package/dist/writers/callback.d.ts.map +0 -1
  620. package/dist/writers/callback.js +0 -38
  621. package/dist/writers/callback.js.map +0 -1
  622. package/dist/writers/class-struct-record.d.ts +0 -31
  623. package/dist/writers/class-struct-record.d.ts.map +0 -1
  624. package/dist/writers/class-struct-record.js +0 -67
  625. package/dist/writers/class-struct-record.js.map +0 -1
  626. package/dist/writers/class-struct.d.ts +0 -22
  627. package/dist/writers/class-struct.d.ts.map +0 -1
  628. package/dist/writers/class-struct.js +0 -85
  629. package/dist/writers/class-struct.js.map +0 -1
  630. package/dist/writers/class.d.ts +0 -16
  631. package/dist/writers/class.d.ts.map +0 -1
  632. package/dist/writers/class.js +0 -307
  633. package/dist/writers/class.js.map +0 -1
  634. package/dist/writers/constant.d.ts +0 -15
  635. package/dist/writers/constant.d.ts.map +0 -1
  636. package/dist/writers/constant.js +0 -23
  637. package/dist/writers/constant.js.map +0 -1
  638. package/dist/writers/constants.d.ts +0 -15
  639. package/dist/writers/constants.d.ts.map +0 -1
  640. package/dist/writers/constants.js +0 -23
  641. package/dist/writers/constants.js.map +0 -1
  642. package/dist/writers/constructor-props.d.ts +0 -32
  643. package/dist/writers/constructor-props.d.ts.map +0 -1
  644. package/dist/writers/constructor-props.js +0 -110
  645. package/dist/writers/constructor-props.js.map +0 -1
  646. package/dist/writers/enum.d.ts +0 -21
  647. package/dist/writers/enum.d.ts.map +0 -1
  648. package/dist/writers/enum.js +0 -48
  649. package/dist/writers/enum.js.map +0 -1
  650. package/dist/writers/function.d.ts +0 -40
  651. package/dist/writers/function.d.ts.map +0 -1
  652. package/dist/writers/function.js +0 -127
  653. package/dist/writers/function.js.map +0 -1
  654. package/dist/writers/gtype-binding.d.ts +0 -19
  655. package/dist/writers/gtype-binding.d.ts.map +0 -1
  656. package/dist/writers/gtype-binding.js +0 -40
  657. package/dist/writers/gtype-binding.js.map +0 -1
  658. package/dist/writers/inheritance.d.ts +0 -48
  659. package/dist/writers/inheritance.d.ts.map +0 -1
  660. package/dist/writers/inheritance.js +0 -90
  661. package/dist/writers/inheritance.js.map +0 -1
  662. package/dist/writers/interface.d.ts +0 -16
  663. package/dist/writers/interface.d.ts.map +0 -1
  664. package/dist/writers/interface.js +0 -155
  665. package/dist/writers/interface.js.map +0 -1
  666. package/dist/writers/method.d.ts +0 -150
  667. package/dist/writers/method.d.ts.map +0 -1
  668. package/dist/writers/method.js +0 -510
  669. package/dist/writers/method.js.map +0 -1
  670. package/dist/writers/param-classify.d.ts +0 -93
  671. package/dist/writers/param-classify.d.ts.map +0 -1
  672. package/dist/writers/param-classify.js +0 -163
  673. package/dist/writers/param-classify.js.map +0 -1
  674. package/dist/writers/property-accessor.d.ts +0 -19
  675. package/dist/writers/property-accessor.d.ts.map +0 -1
  676. package/dist/writers/property-accessor.js +0 -117
  677. package/dist/writers/property-accessor.js.map +0 -1
  678. package/dist/writers/registration.d.ts +0 -27
  679. package/dist/writers/registration.d.ts.map +0 -1
  680. package/dist/writers/registration.js +0 -30
  681. package/dist/writers/registration.js.map +0 -1
  682. package/dist/writers/return-wrap.d.ts +0 -39
  683. package/dist/writers/return-wrap.d.ts.map +0 -1
  684. package/dist/writers/return-wrap.js +0 -152
  685. package/dist/writers/return-wrap.js.map +0 -1
  686. package/dist/writers/runtime-override.d.ts +0 -18
  687. package/dist/writers/runtime-override.d.ts.map +0 -1
  688. package/dist/writers/runtime-override.js +0 -44
  689. package/dist/writers/runtime-override.js.map +0 -1
  690. package/dist/writers/signal.d.ts +0 -21
  691. package/dist/writers/signal.d.ts.map +0 -1
  692. package/dist/writers/signal.js +0 -260
  693. package/dist/writers/signal.js.map +0 -1
  694. package/dist/writers/ts-type.d.ts +0 -50
  695. package/dist/writers/ts-type.d.ts.map +0 -1
  696. package/dist/writers/ts-type.js +0 -75
  697. package/dist/writers/ts-type.js.map +0 -1
  698. package/dist/writers/types-ts.d.ts +0 -27
  699. package/dist/writers/types-ts.d.ts.map +0 -1
  700. package/dist/writers/types-ts.js +0 -97
  701. package/dist/writers/types-ts.js.map +0 -1
  702. package/dist/writers/value.d.ts +0 -89
  703. package/dist/writers/value.d.ts.map +0 -1
  704. package/dist/writers/value.js +0 -402
  705. package/dist/writers/value.js.map +0 -1
  706. package/src/dsl/context.ts +0 -146
  707. package/src/dsl/emit.ts +0 -42
  708. package/src/dsl/identifier.ts +0 -52
  709. package/src/dsl/imports.ts +0 -109
  710. package/src/dsl/module.ts +0 -75
  711. package/src/ffi/pipeline.ts +0 -113
  712. package/src/gi-store.ts +0 -199
  713. package/src/gir/boxed.ts +0 -94
  714. package/src/gir/qualified-name.ts +0 -55
  715. package/src/gir/qualify.ts +0 -64
  716. package/src/gir/repository.ts +0 -149
  717. package/src/gir/signal.ts +0 -36
  718. package/src/jsx-store.ts +0 -53
  719. package/src/react/compounds-meta.ts +0 -99
  720. package/src/react/compounds.ts +0 -204
  721. package/src/react/internal.ts +0 -91
  722. package/src/react/jsx.ts +0 -155
  723. package/src/react/pipeline.ts +0 -29
  724. package/src/react/props.ts +0 -307
  725. package/src/react/slot-props.ts +0 -57
  726. package/src/react/widgets.ts +0 -185
  727. package/src/store-fs.ts +0 -157
  728. package/src/transpile.ts +0 -80
  729. package/src/typecheck-store.ts +0 -136
  730. package/src/writers/alias.ts +0 -19
  731. package/src/writers/async.ts +0 -44
  732. package/src/writers/boxed-constructor.ts +0 -105
  733. package/src/writers/boxed-field-accessor.ts +0 -306
  734. package/src/writers/boxed-layout.ts +0 -166
  735. package/src/writers/boxed.ts +0 -77
  736. package/src/writers/callables.ts +0 -339
  737. package/src/writers/callback.ts +0 -40
  738. package/src/writers/class-struct-record.ts +0 -75
  739. package/src/writers/class-struct.ts +0 -96
  740. package/src/writers/class.ts +0 -384
  741. package/src/writers/constant.ts +0 -29
  742. package/src/writers/constructor-props.ts +0 -130
  743. package/src/writers/enum.ts +0 -53
  744. package/src/writers/function.ts +0 -136
  745. package/src/writers/gtype-binding.ts +0 -48
  746. package/src/writers/inheritance.ts +0 -104
  747. package/src/writers/interface.ts +0 -168
  748. package/src/writers/method.ts +0 -678
  749. package/src/writers/param-classify.ts +0 -178
  750. package/src/writers/property-accessor.ts +0 -139
  751. package/src/writers/registration.ts +0 -42
  752. package/src/writers/return-wrap.ts +0 -180
  753. package/src/writers/runtime-override.ts +0 -59
  754. package/src/writers/signal.ts +0 -318
  755. package/src/writers/ts-type.ts +0 -115
  756. package/src/writers/value.ts +0 -485
package/src/gir/size.ts CHANGED
@@ -1,129 +1,115 @@
1
1
  import { PRIMITIVE_SIZE, type PrimitiveCategory } from "./primitives.js";
2
2
 
3
- /**
4
- * Size and alignment of a single field as it appears in a C struct laid out
5
- * according to the x86-64 ABI.
6
- */
7
- export type FieldLayout = {
8
- /** Width of the field in bytes. */
9
- readonly size: number;
10
- /** Required alignment in bytes; storage offset rounds up to a multiple of this. */
11
- readonly align: number;
3
+ type FieldLayout = {
4
+ size: number;
5
+ align: number;
12
6
  };
13
7
 
14
- /**
15
- * Returns the `{ size, align }` pair for a primitive category.
16
- *
17
- * Pointers and pointer-sized integers (the `pointer` and 64-bit categories)
18
- * report 8/8. Smaller integers and floats report their natural width.
19
- *
20
- * @param category - The primitive category
21
- */
22
- export const layoutOfPrimitive = (category: PrimitiveCategory): FieldLayout => {
8
+ type FieldSlot = {
9
+ byteOffset: number;
10
+ bitOffset: number | undefined;
11
+ bitWidth: number | undefined;
12
+ };
13
+
14
+ type FieldLayoutInput = {
15
+ layout: FieldLayout;
16
+ bits: number | undefined;
17
+ };
18
+
19
+ type StructLayoutState = {
20
+ bitCursor: number;
21
+ maxAlign: number;
22
+ };
23
+
24
+ const floorDown = (value: number, multiple: number): number => value - (value % multiple);
25
+
26
+ const layoutOfPrimitive = (category: PrimitiveCategory): FieldLayout => {
23
27
  const size = PRIMITIVE_SIZE[category];
28
+
24
29
  return { size, align: size === 0 ? 1 : size };
25
30
  };
26
31
 
27
32
  const roundUp = (value: number, multiple: number): number => {
28
- if (multiple <= 1) return value;
33
+ if (multiple <= 1) {
34
+ return value;
35
+ }
36
+
29
37
  const remainder = value % multiple;
38
+
30
39
  return remainder === 0 ? value : value + (multiple - remainder);
31
40
  };
32
41
 
33
- /**
34
- * Layout slot for a single field that may participate in bitfield packing.
35
- *
36
- * `byteOffset` is always the offset of the underlying storage word; for
37
- * non-bitfield fields it is the field's offset directly, and for bitfield
38
- * members it is the start of the shared storage unit. `bitOffset` and
39
- * `bitWidth` are populated only for bitfield members.
40
- */
41
- export type FieldSlot = {
42
- /** Byte offset of the storage word the field occupies. */
43
- readonly byteOffset: number;
44
- /** Bit position within the storage word, for bitfield members. */
45
- readonly bitOffset: number | undefined;
46
- /** Width in bits, for bitfield members. */
47
- readonly bitWidth: number | undefined;
42
+ const computeUnionSlots = (fields: FieldLayoutInput[]): { slots: FieldSlot[]; size: number } => {
43
+ let maxSize = 0;
44
+ let maxAlign = 1;
45
+
46
+ const slots = fields.map((field) => {
47
+ maxSize = Math.max(maxSize, field.layout.size);
48
+ maxAlign = Math.max(maxAlign, field.layout.align);
49
+
50
+ return { byteOffset: 0, bitOffset: field.bits === undefined ? undefined : 0, bitWidth: field.bits };
51
+ });
52
+
53
+ return { slots, size: roundUp(maxSize, maxAlign) };
54
+ };
55
+
56
+ const pushPlainField = (state: StructLayoutState, slots: FieldSlot[], field: FieldLayoutInput, align: number): void => {
57
+ const byteOffset = roundUp(roundUp(state.bitCursor, 8) / 8, align);
58
+ slots.push({ byteOffset, bitOffset: undefined, bitWidth: undefined });
59
+ state.bitCursor = (byteOffset + field.layout.size) * 8;
48
60
  };
49
61
 
50
- /**
51
- * Describes a field for the purposes of layout computation.
52
- */
53
- export type FieldLayoutInput = {
54
- /** Natural byte size and alignment of the field's value type. */
55
- readonly layout: FieldLayout;
56
- /** When set, the field is a bitfield member with this many bits. */
57
- readonly bits: number | undefined;
62
+ // SysV AMD64 places a bit-field at the current bit offset whenever it still fits inside a storage
63
+ // unit of its declared type aligned to that type's alignment, so the unit the cursor already sits in
64
+ // may have room even though the cursor is not on a unit boundary.
65
+ const pushBitfield = (input: {
66
+ state: StructLayoutState;
67
+ slots: FieldSlot[];
68
+ field: FieldLayoutInput;
69
+ align: number;
70
+ bits: number;
71
+ }): void => {
72
+ const { state, slots, field, align, bits } = input;
73
+ const unitStart = floorDown(floorDown(state.bitCursor, 8) / 8, align);
74
+ const isFitsInCurrentUnit = state.bitCursor + bits <= (unitStart + field.layout.size) * 8;
75
+ const byteOffset = isFitsInCurrentUnit ? unitStart : roundUp(roundUp(state.bitCursor, 8) / 8, align);
76
+
77
+ if (!isFitsInCurrentUnit) {
78
+ state.bitCursor = byteOffset * 8;
79
+ }
80
+
81
+ slots.push({ byteOffset, bitOffset: state.bitCursor - byteOffset * 8, bitWidth: bits });
82
+ state.bitCursor += bits;
58
83
  };
59
84
 
60
- /**
61
- * Computes per-field byte offsets for a record, grouping consecutive
62
- * bitfield members of compatible storage widths into a shared storage
63
- * word.
64
- *
65
- * Mirrors the GCC/Itanium ABI rules for C bitfield packing in a
66
- * single-storage-word model: a new storage word is opened when the
67
- * underlying type's size changes, when the new field is not a bitfield,
68
- * or when adding the bits would exceed the word's bit count.
69
- *
70
- * A union (`isUnion`) overlays every member at byte offset 0; its size is the
71
- * largest member rounded up to the strongest member alignment.
72
- *
73
- * @param fields - Ordered field layouts and bit widths
74
- * @param isUnion - Whether the fields are union members (overlaid at offset 0)
75
- * @returns Parallel slot array and the total record size in bytes
76
- */
77
- export const computeFieldSlots = (
78
- fields: readonly FieldLayoutInput[],
79
- isUnion = false,
80
- ): { readonly slots: readonly FieldSlot[]; readonly size: number } => {
81
- if (isUnion) {
82
- let maxSize = 0;
83
- let maxAlign = 1;
84
- const unionSlots = fields.map((field) => {
85
- maxSize = Math.max(maxSize, field.layout.size);
86
- maxAlign = Math.max(maxAlign, field.layout.align);
87
- return { byteOffset: 0, bitOffset: field.bits === undefined ? undefined : 0, bitWidth: field.bits };
88
- });
89
- return { slots: unionSlots, size: roundUp(maxSize, maxAlign) };
85
+ const processStructField = (state: StructLayoutState, slots: FieldSlot[], field: FieldLayoutInput): void => {
86
+ const align = Math.max(1, field.layout.align);
87
+
88
+ if (align > state.maxAlign) {
89
+ state.maxAlign = align;
90
+ }
91
+
92
+ if (field.bits === undefined) {
93
+ pushPlainField(state, slots, field, align);
94
+
95
+ return;
90
96
  }
97
+
98
+ pushBitfield({ state, slots, field, align, bits: field.bits });
99
+ };
100
+
101
+ const computeStructSlots = (fields: FieldLayoutInput[]): { slots: FieldSlot[]; size: number } => {
91
102
  const slots: FieldSlot[] = [];
92
- let cursor = 0;
93
- let maxAlign = 1;
94
- let bitfieldWordOffset: number | undefined;
95
- let bitfieldWordSize = 0;
96
- let bitfieldUsedBits = 0;
103
+ const state: StructLayoutState = { bitCursor: 0, maxAlign: 1 };
104
+
97
105
  for (const field of fields) {
98
- const align = Math.max(1, field.layout.align);
99
- if (align > maxAlign) maxAlign = align;
100
- if (field.bits === undefined) {
101
- bitfieldWordOffset = undefined;
102
- bitfieldWordSize = 0;
103
- bitfieldUsedBits = 0;
104
- cursor = roundUp(cursor, align);
105
- slots.push({ byteOffset: cursor, bitOffset: undefined, bitWidth: undefined });
106
- cursor += field.layout.size;
107
- continue;
108
- }
109
- const wordSizeBits = field.layout.size * 8;
110
- const fits =
111
- bitfieldWordOffset !== undefined &&
112
- bitfieldWordSize === field.layout.size &&
113
- bitfieldUsedBits + field.bits <= wordSizeBits;
114
- if (!fits) {
115
- cursor = roundUp(cursor, align);
116
- bitfieldWordOffset = cursor;
117
- bitfieldWordSize = field.layout.size;
118
- bitfieldUsedBits = 0;
119
- cursor += field.layout.size;
120
- }
121
- slots.push({
122
- byteOffset: bitfieldWordOffset ?? 0,
123
- bitOffset: bitfieldUsedBits,
124
- bitWidth: field.bits,
125
- });
126
- bitfieldUsedBits += field.bits;
106
+ processStructField(state, slots, field);
127
107
  }
128
- return { slots, size: roundUp(cursor, maxAlign) };
108
+
109
+ return { slots, size: roundUp(roundUp(state.bitCursor, 8) / 8, state.maxAlign) };
129
110
  };
111
+
112
+ const computeFieldSlots = (fields: FieldLayoutInput[], isUnion = false): { slots: FieldSlot[]; size: number } =>
113
+ isUnion ? computeUnionSlots(fields) : computeStructSlots(fields);
114
+
115
+ export { layoutOfPrimitive, computeFieldSlots, type FieldLayout, type FieldSlot, type FieldLayoutInput };
@@ -0,0 +1,64 @@
1
+ import type { RawNode } from "./parse.js";
2
+ import type { PrimitiveCategory } from "./primitives.js";
3
+
4
+ type TypeId = { nsId: number; id: number };
5
+ type ListFlavor = (typeof LIST_FLAVOR_BY_NAME)[keyof typeof LIST_FLAVOR_BY_NAME];
6
+ type PrimitiveType = { kind: "primitive"; category: PrimitiveCategory };
7
+ type VarargsType = { kind: "varargs" };
8
+
9
+ type CArrayType = {
10
+ kind: "carray";
11
+ element: TypeId;
12
+ elementCType: string | undefined;
13
+ lengthParameterIndex: number | undefined;
14
+ fixedSize: number | undefined;
15
+ zeroTerminated: boolean;
16
+ };
17
+
18
+ type ListType = {
19
+ kind: "list";
20
+ flavor: ListFlavor;
21
+ element: TypeId;
22
+ };
23
+
24
+ type HashTableType = {
25
+ kind: "hashtable";
26
+ key: TypeId;
27
+ value: TypeId;
28
+ };
29
+
30
+ type StructuralType = PrimitiveType | VarargsType | CArrayType | ListType | HashTableType;
31
+
32
+ type ParseContext = {
33
+ nsId: number;
34
+ findType(name: string): TypeId;
35
+ addPrimitive(category: PrimitiveCategory): TypeId;
36
+ addVarargs(): TypeId;
37
+ addContainer(type: CArrayType | ListType | HashTableType): TypeId;
38
+ addAnonymousCallback(node: RawNode): TypeId;
39
+ };
40
+
41
+ const LIST_FLAVOR_BY_NAME = {
42
+ "GLib.List": "glist",
43
+ "GLib.SList": "gslist",
44
+ "GLib.PtrArray": "gptrarray",
45
+ "GLib.Array": "garray",
46
+ "GLib.ByteArray": "gbytearray",
47
+ } as const;
48
+
49
+ // An array with no length parameter, no fixed size and an explicit `zero-terminated="0"` carries no
50
+ // way to recover its length, so it is a bare pointer rather than something that can be walked.
51
+ const hasUnknownArrayLength = (ref: CArrayType): boolean =>
52
+ !ref.zeroTerminated && ref.lengthParameterIndex === undefined && ref.fixedSize === undefined;
53
+
54
+ export {
55
+ hasUnknownArrayLength,
56
+ LIST_FLAVOR_BY_NAME,
57
+ type TypeId,
58
+ type ListFlavor,
59
+ type CArrayType,
60
+ type ListType,
61
+ type HashTableType,
62
+ type StructuralType,
63
+ type ParseContext,
64
+ };
@@ -1,180 +1,111 @@
1
- import { attr, attrBool, childOf, childrenOf, type RawNode } from "./parse.js";
2
- import { type PrimitiveCategory, primitiveCategory } from "./primitives.js";
3
-
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;
22
-
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;
28
- };
1
+ import { attr, getChild, getChildren, intAttr, isAttrTrue, 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";
29
4
 
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
- };
5
+ const LIST_FLAVOR_BY_NAME_LOOKUP: Map<string, ListFlavor> = new Map(Object.entries(LIST_FLAVOR_BY_NAME));
44
6
 
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
- };
7
+ const getElementRef = (node: RawNode, context: ParseContext): TypeId => {
8
+ const elementNode = getChild(node, "type");
54
9
 
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;
10
+ return elementNode === undefined ? pointerFallback(context) : typeRefFromTypeNode(elementNode, context);
61
11
  };
62
12
 
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
- };
13
+ const typeRefFromNode = (parent: RawNode | undefined, context: ParseContext): TypeId | undefined => {
14
+ if (parent === undefined) {
15
+ return undefined;
16
+ }
70
17
 
71
- /** An inline `<callback>` (used for vtable slots and callback parameters). */
72
- type InlineCallbackTypeRef = {
73
- readonly kind: "callback";
74
- readonly callback: RawNode;
75
- };
18
+ if (getChild(parent, "varargs") !== undefined) {
19
+ return context.addVarargs();
20
+ }
21
+
22
+ const arrayNode = getChild(parent, "array");
23
+
24
+ if (arrayNode !== undefined) {
25
+ return arrayTypeRefFromNode(arrayNode, context);
26
+ }
27
+
28
+ const typeNode = getChild(parent, "type");
29
+
30
+ if (typeNode !== undefined) {
31
+ return typeRefFromTypeNode(typeNode, context);
32
+ }
33
+
34
+ const callback = getChild(parent, "callback");
35
+
36
+ if (callback !== undefined) {
37
+ return context.addAnonymousCallback(callback);
38
+ }
76
39
 
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 => {
100
- if (parent === undefined) return undefined;
101
- if (childOf(parent, "varargs") !== undefined) return { kind: "varargs" };
102
- const arrayNode = childOf(parent, "array");
103
- if (arrayNode !== undefined) return arrayTypeRefFromNode(arrayNode);
104
- const typeNode = childOf(parent, "type");
105
- if (typeNode !== undefined) return typeRefFromTypeNode(typeNode);
106
- const callback = childOf(parent, "callback");
107
- if (callback !== undefined) return { kind: "callback", callback };
108
40
  return undefined;
109
41
  };
110
42
 
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");
124
-
125
- const listFlavor = LIST_KIND_BY_NAME.get(name);
43
+ const hashTableRefFromNode = (typeNode: RawNode, context: ParseContext): TypeId => {
44
+ const elementTypes = getChildren(typeNode, "type");
45
+ const keyNode = elementTypes[0];
46
+ const valueNode = elementTypes[1];
47
+
48
+ return context.addContainer({
49
+ kind: "hashtable",
50
+ key: keyNode === undefined ? pointerFallback(context) : typeRefFromTypeNode(keyNode, context),
51
+ value: valueNode === undefined ? pointerFallback(context) : typeRefFromTypeNode(valueNode, context),
52
+ });
53
+ };
54
+
55
+ const typeRefFromTypeNode = (typeNode: RawNode, context: ParseContext): TypeId => {
56
+ const name = nameAttr(typeNode);
57
+ const listFlavor = LIST_FLAVOR_BY_NAME_LOOKUP.get(name);
58
+
126
59
  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 };
60
+ return context.addContainer({ kind: "list", flavor: listFlavor, element: getElementRef(typeNode, context) });
130
61
  }
131
62
 
132
63
  if (name === "GLib.HashTable") {
133
- const elementTypes = childrenOf(typeNode, "type");
134
- const keyNode = elementTypes[0];
135
- const valueNode = elementTypes[1];
136
- return {
137
- kind: "hashtable",
138
- key: keyNode === undefined ? pointerFallback() : typeRefFromTypeNode(keyNode),
139
- value: valueNode === undefined ? pointerFallback() : typeRefFromTypeNode(valueNode),
140
- cType,
141
- };
64
+ return hashTableRefFromNode(typeNode, context);
142
65
  }
143
66
 
144
67
  const primitive = primitiveCategory(name);
68
+
145
69
  if (primitive !== undefined) {
146
- return { kind: "primitive", category: primitive, cType };
70
+ return context.addPrimitive(primitive);
147
71
  }
148
72
 
149
- const [namespaceName, typeName] = splitOptionalNamespace(name);
150
- return { kind: "named", namespaceName, typeName, cType };
73
+ return context.findType(name);
151
74
  };
152
75
 
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");
76
+ const arrayTypeRefFromNode = (arrayNode: RawNode, context: ParseContext): TypeId => {
77
+ const element = getElementRef(arrayNode, context);
157
78
  const arrayName = attr(arrayNode, "name");
158
- const listFlavor = arrayName === undefined ? undefined : LIST_KIND_BY_NAME.get(arrayName);
79
+ const listFlavor = arrayName === undefined ? undefined : LIST_FLAVOR_BY_NAME_LOOKUP.get(arrayName);
80
+
159
81
  if (listFlavor !== undefined) {
160
- return { kind: "list", flavor: listFlavor, element, cType };
82
+ return context.addContainer({ kind: "list", flavor: listFlavor, element });
161
83
  }
162
- const lengthAttr = attr(arrayNode, "length");
163
- const fixedSizeAttr = attr(arrayNode, "fixed-size");
164
- return {
165
- kind: "array",
84
+
85
+ const elementNode = getChild(arrayNode, "type");
86
+
87
+ const carray: CArrayType = {
88
+ kind: "carray",
166
89
  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),
90
+ elementCType: elementNode === undefined ? undefined : attr(elementNode, "c:type"),
91
+ lengthParameterIndex: intAttr(arrayNode, "length"),
92
+ fixedSize: intAttr(arrayNode, "fixed-size"),
93
+ zeroTerminated: isAttrTrue(arrayNode, "zero-terminated", true),
171
94
  };
95
+
96
+ return context.addContainer(carray);
172
97
  };
173
98
 
174
- const pointerFallback = (): PrimitiveTypeRef => ({ kind: "primitive", category: "pointer", cType: undefined });
99
+ const pointerFallback = (context: ParseContext): TypeId => context.addPrimitive("pointer");
175
100
 
176
101
  const splitOptionalNamespace = (name: string): [string | undefined, string] => {
177
102
  const dot = name.indexOf(".");
178
- if (dot === -1) return [undefined, name];
103
+
104
+ if (dot === -1) {
105
+ return [undefined, name];
106
+ }
107
+
179
108
  return [name.slice(0, dot), name.slice(dot + 1)];
180
109
  };
110
+
111
+ export { typeRefFromNode, splitOptionalNamespace };
@@ -0,0 +1,18 @@
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
+ 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
+ type GirType = StructuralType | EntityType;
17
+
18
+ export { type EntityType, type GirType };
package/src/index.ts CHANGED
@@ -1,16 +1,28 @@
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 {
22
+ type BuiltinElement,
23
+ type BuiltinElements,
24
+ type ModuleExport,
25
+ readBuiltinElements,
26
+ } from "./react/element-config.js";
27
+ export { runCodegen } from "./runner.js";
28
+ export type { ElementProps } from "./store/jsx/element-prop-imports.js";