@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/parse.ts CHANGED
@@ -1,31 +1,10 @@
1
1
  import { readFileSync } from "node:fs";
2
- import { XMLParser } from "fast-xml-parser";
3
-
4
- /**
5
- * Raw GIR XML element after parsing.
6
- *
7
- * Attributes are exposed under `@_<name>` keys (the default
8
- * `fast-xml-parser` convention). Child elements appear under their tag name.
9
- * Multi-occurrence tags (every container in {@link MULTI_TAGS}) are always
10
- * arrays so callers do not need to disambiguate "single child" from "many
11
- * children" at every access. Single-occurrence tags appear as bare objects.
12
- */
13
- export type RawNode = {
14
- readonly [attributeOrChild: string]: unknown;
15
- };
2
+ import { createXmlParser } from "../xml.js";
3
+
4
+ type RawNode = Record<string, unknown>;
16
5
 
17
- /**
18
- * Tag names that the GIR schema permits at multi-occurrence positions.
19
- *
20
- * `fast-xml-parser` is configured to always materialize these as arrays so
21
- * downstream traversal never needs to branch on "is this an object or an
22
- * array of objects". Tags missing from this set may appear as a single
23
- * object (e.g. `<return-value>`, `<parameters>`, `<type>`, `<doc>`).
24
- */
25
- const MULTI_TAGS: ReadonlySet<string> = new Set([
6
+ const MULTI_TAGS: Set<string> = new Set([
26
7
  "include",
27
- "c:include",
28
- "package",
29
8
  "class",
30
9
  "interface",
31
10
  "record",
@@ -33,14 +12,11 @@ const MULTI_TAGS: ReadonlySet<string> = new Set([
33
12
  "bitfield",
34
13
  "callback",
35
14
  "function",
36
- "function-macro",
37
15
  "constant",
38
16
  "alias",
39
17
  "union",
40
- "glib:boxed",
41
18
  "method",
42
19
  "constructor",
43
- "virtual-method",
44
20
  "property",
45
21
  "field",
46
22
  "glib:signal",
@@ -48,124 +24,151 @@ const MULTI_TAGS: ReadonlySet<string> = new Set([
48
24
  "prerequisite",
49
25
  "member",
50
26
  "parameter",
51
- "attribute",
52
27
  ]);
53
28
 
54
- /**
55
- * The tag name codegen reads GIR constructors under.
56
- *
57
- * GIR spells constructors `<constructor>`, but `fast-xml-parser` rejects the
58
- * literal names `constructor`, `prototype`, and `__proto__` to guard against
59
- * prototype pollution, with no opt-out. {@link parseGirFile} rewrites the tag
60
- * to this token via `transformTagName` before that guard runs, so every
61
- * downstream lookup of a constructor child must use this constant rather than
62
- * the raw GIR name.
63
- */
64
- export const GIR_CONSTRUCTOR_TAG = "gir-constructor";
65
-
66
- const RESERVED_TAG_RENAMES: ReadonlyMap<string, string> = new Map([["constructor", GIR_CONSTRUCTOR_TAG]]);
67
-
68
- /**
69
- * Maps a GIR tag name to the token the parser exposes it under, rewriting the
70
- * names {@link RESERVED_TAG_RENAMES} covers and passing every other tag
71
- * through unchanged.
72
- *
73
- * @param tag - The raw GIR tag name
74
- */
75
- const renameReservedTag = (tag: string): string => RESERVED_TAG_RENAMES.get(tag) ?? tag;
76
-
77
- const RENAMED_MULTI_TAGS: ReadonlySet<string> = new Set([...MULTI_TAGS].map(renameReservedTag));
78
-
79
- const PARSER = new XMLParser({
80
- ignoreAttributes: false,
81
- attributeNamePrefix: "@_",
82
- parseAttributeValue: false,
83
- parseTagValue: false,
29
+ const GIR_CONSTRUCTOR_TAG = "gir-constructor";
30
+ const RESERVED_TAG_RENAMES: Map<string, string> = new Map([["constructor", GIR_CONSTRUCTOR_TAG]]);
31
+ const RENAMED_MULTI_TAGS: Set<string> = new Set([...MULTI_TAGS].map((tag) => renameReservedTag(tag)));
32
+
33
+ const PARSER = createXmlParser({
84
34
  trimValues: true,
85
35
  transformTagName: renameReservedTag,
86
36
  isArray: (name) => RENAMED_MULTI_TAGS.has(name),
87
37
  });
88
38
 
89
- /**
90
- * Parses a GIR XML file from disk and returns its raw tree.
91
- *
92
- * The returned object always has a single `repository` property containing
93
- * the root `<repository>` element. Callers should not interpret the tree
94
- * directly — pass it to {@link GirRepository.load} (in `./repository.ts`),
95
- * which builds the typed domain model on top of it.
96
- *
97
- * @param path - Absolute path to a `.gir` file
98
- * @returns The raw repository node
99
- */
100
- export const parseGirFile = (path: string): RawNode => {
101
- const xml = readFileSync(path, "utf-8");
39
+ function renameReservedTag(tag: string): string {
40
+ return RESERVED_TAG_RENAMES.get(tag) ?? tag;
41
+ }
42
+
43
+ const parseGirFile = (path: string): RawNode => {
44
+ const xml = readFileSync(path, "utf8");
45
+
102
46
  return PARSER.parse(xml) as RawNode;
103
47
  };
104
48
 
105
- /**
106
- * Reads an attribute from a raw GIR node as a string, returning `undefined`
107
- * when the attribute is absent.
108
- *
109
- * The `@_` prefix is added by `fast-xml-parser`; this helper hides that
110
- * convention from the call sites.
111
- *
112
- * @param node - The raw element
113
- * @param name - The attribute name (without the `@_` prefix)
114
- */
115
- export const attr = (node: RawNode | undefined, name: string): string | undefined => {
116
- if (node === undefined) return undefined;
49
+ const attr = (node: RawNode | undefined, name: string): string | undefined => {
50
+ if (node === undefined) {
51
+ return undefined;
52
+ }
53
+
117
54
  const value = node[`@_${name}`];
55
+
118
56
  return typeof value === "string" ? value : undefined;
119
57
  };
120
58
 
121
- /**
122
- * Reads an attribute as a boolean using GIR's `"1"` / `"0"` convention.
123
- *
124
- * Attributes that are missing return the supplied default (defaulting to
125
- * `false`). Any non-`"1"` value is treated as `false`.
126
- *
127
- * @param node - The raw element
128
- * @param name - The attribute name (without the `@_` prefix)
129
- * @param fallback - Value returned when the attribute is missing
130
- */
131
- export const attrBool = (node: RawNode | undefined, name: string, fallback = false): boolean => {
59
+ const isAttrTrue = (node: RawNode | undefined, name: string, isTrueByDefault = false): boolean => {
132
60
  const value = attr(node, name);
133
- if (value === undefined) return fallback;
61
+
62
+ if (value === undefined) {
63
+ return isTrueByDefault;
64
+ }
65
+
134
66
  return value === "1";
135
67
  };
136
68
 
137
- /**
138
- * Returns the children of a raw node under a given tag name as an array.
139
- *
140
- * The parser configuration forces multi-occurrence tags to arrays already;
141
- * this helper covers the residual case where a tag was registered as
142
- * single-occurrence at the schema level but a particular file emits zero
143
- * elements (returning `[]`) or where the caller wants a uniform array view.
144
- *
145
- * @param node - The parent element
146
- * @param tag - The child tag name (with namespace prefix if any)
147
- */
148
- export const childrenOf = (node: RawNode | undefined, tag: string): readonly RawNode[] => {
149
- if (node === undefined) return [];
69
+ const nameAttr = (node: RawNode): string => attr(node, "name") ?? "";
70
+
71
+ const intAttr = (node: RawNode, name: string): number | undefined => {
72
+ const raw = attr(node, name);
73
+
74
+ return raw === undefined ? undefined : Number(raw);
75
+ };
76
+
77
+ const enumMember = <T extends string>(raw: string, members: Set<T>, label: string): T => {
78
+ for (const member of members) {
79
+ if (member === raw) {
80
+ return member;
81
+ }
82
+ }
83
+
84
+ throw new Error(`Unknown ${label} value "${raw}"`);
85
+ };
86
+
87
+ const parseEnumAttr = <T extends string, F extends T | undefined>(
88
+ raw: string | undefined,
89
+ members: Set<T>,
90
+ fallback: F,
91
+ label: string,
92
+ ): T | F => (raw === undefined ? fallback : enumMember(raw, members, label));
93
+
94
+ const getChildren = (node: RawNode | undefined, tag: string): RawNode[] => {
95
+ if (node === undefined) {
96
+ return [];
97
+ }
98
+
150
99
  const value = node[tag];
151
- if (value === undefined) return [];
152
- if (Array.isArray(value)) return value as readonly RawNode[];
100
+
101
+ if (value === undefined) {
102
+ return [];
103
+ }
104
+
105
+ if (Array.isArray(value)) {
106
+ return value as RawNode[];
107
+ }
108
+
153
109
  return [value as RawNode];
154
110
  };
155
111
 
156
- /**
157
- * Returns the single child of a raw node under a given tag, or `undefined`
158
- * if absent. If multiple are present the first is returned.
159
- *
160
- * @param node - The parent element
161
- * @param tag - The child tag name (with namespace prefix if any)
162
- */
163
- export const childOf = (node: RawNode | undefined, tag: string): RawNode | undefined => {
164
- if (node === undefined) return undefined;
112
+ const getChild = (node: RawNode | undefined, tag: string): RawNode | undefined => {
113
+ if (node === undefined) {
114
+ return undefined;
115
+ }
116
+
165
117
  const value = node[tag];
166
- if (value === undefined) return undefined;
118
+
119
+ if (value === undefined) {
120
+ return undefined;
121
+ }
122
+
167
123
  if (Array.isArray(value)) {
168
124
  return value.length === 0 ? undefined : (value[0] as RawNode);
169
125
  }
126
+
170
127
  return value as RawNode;
171
128
  };
129
+
130
+ const normalizeDoc = (text: string): string | undefined => {
131
+ const trimmed = text.trim();
132
+
133
+ return trimmed.length === 0 ? undefined : trimmed;
134
+ };
135
+
136
+ const firstDocValue = (raw: unknown): unknown => (Array.isArray(raw) ? raw[0] : raw);
137
+
138
+ const docTextFromObject = (value: object): string | undefined => {
139
+ const text = (value as RawNode)["#text"];
140
+
141
+ return typeof text === "string" ? normalizeDoc(text) : undefined;
142
+ };
143
+
144
+ const getDoc = (node: RawNode | undefined): string | undefined => {
145
+ if (node === undefined) {
146
+ return undefined;
147
+ }
148
+
149
+ const value = firstDocValue(node.doc);
150
+
151
+ if (typeof value === "string") {
152
+ return normalizeDoc(value);
153
+ }
154
+
155
+ if (value === null || typeof value !== "object") {
156
+ return undefined;
157
+ }
158
+
159
+ return docTextFromObject(value);
160
+ };
161
+
162
+ export {
163
+ GIR_CONSTRUCTOR_TAG,
164
+ parseGirFile,
165
+ attr,
166
+ isAttrTrue,
167
+ nameAttr,
168
+ intAttr,
169
+ parseEnumAttr,
170
+ getChildren,
171
+ getChild,
172
+ getDoc,
173
+ type RawNode,
174
+ };
@@ -1,36 +1,24 @@
1
- /**
2
- * Mapping from GIR primitive type names to the FFI marshaling categories
3
- * the writers emit.
4
- *
5
- * The categories mirror the `t.*` helpers exposed by `@gtkx/ffi`'s runtime
6
- * (see `packages/ffi/src/helpers.ts`). Categories that are not directly
7
- * marshaled (e.g. `void`, `string`, `unichar`) are still listed so callers
8
- * can branch on them without falling through to a default.
9
- */
10
- export type PrimitiveCategory =
11
- | "void"
12
- | "boolean"
13
- | "int8"
14
- | "uint8"
15
- | "int16"
16
- | "uint16"
17
- | "int32"
18
- | "uint32"
19
- | "int64"
20
- | "uint64"
21
- | "float32"
22
- | "float64"
23
- | "string"
24
- | "unichar"
25
- | "pointer";
1
+ type PrimitiveCategory =
2
+ | "void" |
3
+ "boolean" |
4
+ "int8" |
5
+ "uint8" |
6
+ "int16" |
7
+ "uint16" |
8
+ "int32" |
9
+ "uint32" |
10
+ "int64" |
11
+ "uint64" |
12
+ "bigint64" |
13
+ "biguint64" |
14
+ "gtype" |
15
+ "float32" |
16
+ "float64" |
17
+ "string" |
18
+ "unichar" |
19
+ "pointer";
26
20
 
27
- /**
28
- * Width in bytes of each primitive category on the x86-64 ABI (Linux LP64).
29
- *
30
- * The widths are also used as the natural alignment requirement of each
31
- * category — every native integer/float aligns to its own size.
32
- */
33
- export const PRIMITIVE_SIZE: Readonly<Record<PrimitiveCategory, number>> = Object.freeze({
21
+ const PRIMITIVE_SIZE: Record<PrimitiveCategory, number> = {
34
22
  void: 0,
35
23
  boolean: 4,
36
24
  int8: 1,
@@ -41,14 +29,17 @@ export const PRIMITIVE_SIZE: Readonly<Record<PrimitiveCategory, number>> = Objec
41
29
  uint32: 4,
42
30
  int64: 8,
43
31
  uint64: 8,
32
+ bigint64: 8,
33
+ biguint64: 8,
34
+ gtype: 8,
44
35
  float32: 4,
45
36
  float64: 8,
46
37
  string: 8,
47
38
  unichar: 4,
48
39
  pointer: 8,
49
- });
40
+ };
50
41
 
51
- const PRIMITIVE_BY_NAME: ReadonlyMap<string, PrimitiveCategory> = new Map([
42
+ const PRIMITIVE_BY_NAME: Map<string, PrimitiveCategory> = new Map([
52
43
  ["none", "void"],
53
44
  ["void", "void"],
54
45
  ["gboolean", "boolean"],
@@ -69,21 +60,21 @@ const PRIMITIVE_BY_NAME: ReadonlyMap<string, PrimitiveCategory> = new Map([
69
60
  ["uint16", "uint16"],
70
61
  ["int32", "int32"],
71
62
  ["uint32", "uint32"],
72
- ["int64", "int64"],
73
- ["uint64", "uint64"],
63
+ ["int64", "bigint64"],
64
+ ["uint64", "biguint64"],
74
65
  ["guint", "uint32"],
75
66
  ["guint32", "uint32"],
76
- ["glong", "int64"],
77
- ["gint64", "int64"],
78
- ["long", "int64"],
67
+ ["glong", "bigint64"],
68
+ ["gint64", "bigint64"],
69
+ ["long", "bigint64"],
79
70
  ["gssize", "int64"],
80
71
  ["gintptr", "int64"],
81
- ["gulong", "uint64"],
82
- ["guint64", "uint64"],
72
+ ["gulong", "biguint64"],
73
+ ["guint64", "biguint64"],
83
74
  ["gsize", "uint64"],
84
75
  ["guintptr", "uint64"],
85
- ["GType", "uint64"],
86
- ["time_t", "int64"],
76
+ ["GType", "gtype"],
77
+ ["time_t", "bigint64"],
87
78
  ["pid_t", "int32"],
88
79
  ["uid_t", "uint32"],
89
80
  ["gid_t", "uint32"],
@@ -100,25 +91,7 @@ const PRIMITIVE_BY_NAME: ReadonlyMap<string, PrimitiveCategory> = new Map([
100
91
  ["gconstpointer", "pointer"],
101
92
  ] as const);
102
93
 
103
- /**
104
- * Returns the FFI category for a GIR primitive name (`"gint"`, `"utf8"`,
105
- * `"gsize"`, …) or `undefined` when the name is not a primitive.
106
- *
107
- * Aliases that GIR uses inconsistently (`gint` / `int` / `gint32`, …) all
108
- * map to the same canonical category.
109
- *
110
- * @param name - The GIR type name as it appears in `<type name="…">`
111
- */
112
- export const primitiveCategory = (name: string): PrimitiveCategory | undefined => PRIMITIVE_BY_NAME.get(name);
113
-
114
- /**
115
- * TypeScript surface type for each primitive category.
116
- *
117
- * Codegen surfaces both raw C primitives and string-marshalled categories
118
- * (`string`, `unichar`) through this map so writers in the FFI and React
119
- * pipelines agree on the same annotation per category.
120
- */
121
- export const PRIMITIVE_TS_TYPE: Readonly<Record<PrimitiveCategory, string>> = Object.freeze({
94
+ const PRIMITIVE_TS_TYPE: Record<PrimitiveCategory, string> = {
122
95
  void: "void",
123
96
  boolean: "boolean",
124
97
  int8: "number",
@@ -129,9 +102,16 @@ export const PRIMITIVE_TS_TYPE: Readonly<Record<PrimitiveCategory, string>> = Ob
129
102
  uint32: "number",
130
103
  int64: "number",
131
104
  uint64: "number",
105
+ bigint64: "bigint",
106
+ biguint64: "bigint",
107
+ gtype: "bigint",
132
108
  float32: "number",
133
109
  float64: "number",
134
110
  string: "string",
135
111
  unichar: "string",
136
112
  pointer: "number",
137
- });
113
+ };
114
+
115
+ const primitiveCategory = (name: string): PrimitiveCategory | undefined => PRIMITIVE_BY_NAME.get(name);
116
+
117
+ export { PRIMITIVE_SIZE, PRIMITIVE_TS_TYPE, primitiveCategory, type PrimitiveCategory };
@@ -1,39 +1,39 @@
1
- import type { ParameterTransfer } from "./parameter.js";
2
- import { attr, attrBool, type RawNode } from "./parse.js";
3
- import { type GirTypeRef, typeRefFromSlot } from "./type-ref.js";
1
+ import type { ParseContext, TypeId } from "./type-id.js";
2
+ import { type ParameterTransfer, transferOwnership } from "./parameter.js";
3
+ import { attr, getDoc, isAttrTrue, nameAttr, type RawNode } from "./parse.js";
4
+ import { typeRefFromNode } from "./type-ref.js";
4
5
 
5
- /**
6
- * A `<property>` of a class or interface.
7
- *
8
- * GIR property names are kebab-case; the writers convert them to camelCase
9
- * for the JS surface and pass the original GIR name through to
10
- * `registerConstructionMeta` for `g_object_newv` parameter building.
11
- */
12
- export type GirProperty = {
13
- /** GIR property name, kebab-case (e.g. `"css-name"`). */
14
- readonly name: string;
15
- /** Property value type. */
16
- readonly type: GirTypeRef | undefined;
17
- readonly writable: boolean;
18
- readonly construct: boolean;
19
- readonly constructOnly: boolean;
20
- readonly transferOwnership: ParameterTransfer;
21
- /** Optional method name that backs the property's getter (`getter="get_foo"`). */
22
- readonly getter: string | undefined;
23
- /** Optional method name that backs the property's setter (`setter="set_foo"`). */
24
- readonly setter: string | undefined;
6
+ type GirProperty = {
7
+ name: string;
8
+ doc: string | undefined;
9
+ type: TypeId | undefined;
10
+ readable: boolean;
11
+ writable: boolean;
12
+ construct: boolean;
13
+ constructOnly: boolean;
14
+ introspectable: boolean;
15
+ transferOwnership: ParameterTransfer;
16
+ getter: string | undefined;
17
+ setter: string | undefined;
18
+ defaultValue: string | undefined;
25
19
  };
26
20
 
27
- /**
28
- * Builds a {@link GirProperty} from a `<property>` element.
29
- */
30
- export const propertyFromNode = (node: RawNode): GirProperty => ({
31
- name: attr(node, "name") ?? "",
32
- type: typeRefFromSlot(node),
33
- writable: attrBool(node, "writable"),
34
- construct: attrBool(node, "construct"),
35
- constructOnly: attrBool(node, "construct-only"),
36
- transferOwnership: (attr(node, "transfer-ownership") ?? "none") as ParameterTransfer,
21
+ const isConstructableProperty = (property: GirProperty): boolean =>
22
+ property.writable || property.construct || property.constructOnly;
23
+
24
+ const propertyFromNode = (node: RawNode, context: ParseContext): GirProperty => ({
25
+ name: nameAttr(node),
26
+ doc: getDoc(node),
27
+ type: typeRefFromNode(node, context),
28
+ readable: isAttrTrue(node, "readable", true),
29
+ writable: isAttrTrue(node, "writable"),
30
+ construct: isAttrTrue(node, "construct"),
31
+ constructOnly: isAttrTrue(node, "construct-only"),
32
+ introspectable: isAttrTrue(node, "introspectable", true),
33
+ transferOwnership: transferOwnership(node),
37
34
  getter: attr(node, "getter"),
38
35
  setter: attr(node, "setter"),
36
+ defaultValue: attr(node, "default-value"),
39
37
  });
38
+
39
+ export { isConstructableProperty, propertyFromNode, type GirProperty };
@@ -0,0 +1,55 @@
1
+ import type { ParseContext } from "./type-id.js";
2
+ import { collectFields, type GirField } from "./field.js";
3
+ import { functionFromNode, type GirFunction } from "./function.js";
4
+ import { attr, getChildren, getDoc, GIR_CONSTRUCTOR_TAG, isAttrTrue, type RawNode } from "./parse.js";
5
+
6
+ type GirRecord = {
7
+ isVtable: boolean;
8
+ name: string;
9
+ doc: string | undefined;
10
+ cType: string | undefined;
11
+ glibTypeName: string | undefined;
12
+ glibGetType: string | undefined;
13
+ glibRefFunc: string | undefined;
14
+ glibUnrefFunc: string | undefined;
15
+ copyFunc: string | undefined;
16
+ freeFunc: string | undefined;
17
+ disguised: boolean;
18
+ opaque: boolean;
19
+ introspectable: boolean;
20
+ fields: GirField[];
21
+ methods: GirFunction[];
22
+ constructors: GirFunction[];
23
+ functions: GirFunction[];
24
+ isUnion: boolean;
25
+ };
26
+
27
+ const recordFromNode = (
28
+ node: RawNode,
29
+ isVtable: boolean,
30
+ isUnion: boolean,
31
+ context: ParseContext,
32
+ ): GirRecord => ({
33
+ isVtable,
34
+ name: attr(node, "name") ?? attr(node, "glib:name") ?? "",
35
+ doc: getDoc(node),
36
+ cType: attr(node, "c:type"),
37
+ glibTypeName: attr(node, "glib:type-name"),
38
+ glibGetType: attr(node, "glib:get-type"),
39
+ glibRefFunc: attr(node, "glib:ref-func"),
40
+ glibUnrefFunc: attr(node, "glib:unref-func"),
41
+ copyFunc: attr(node, "copy-function"),
42
+ freeFunc: attr(node, "free-function"),
43
+ disguised: isAttrTrue(node, "disguised"),
44
+ opaque: isAttrTrue(node, "opaque"),
45
+ introspectable: isAttrTrue(node, "introspectable", true),
46
+ fields: collectFields(node, context),
47
+ methods: getChildren(node, "method").map((method) => functionFromNode(method, context)),
48
+ constructors: getChildren(node, GIR_CONSTRUCTOR_TAG).map((ctor) => functionFromNode(ctor, context)),
49
+ functions: getChildren(node, "function").map((fn) => functionFromNode(fn, context)),
50
+ isUnion,
51
+ });
52
+
53
+ const isVtableRecord = (node: RawNode): boolean => attr(node, "glib:is-gtype-struct-for") !== undefined;
54
+
55
+ export { recordFromNode, isVtableRecord, type GirRecord };