@gtkx/codegen 1.0.0-rc.1 → 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 (521) hide show
  1. package/dist/analysis/descriptor-render.d.ts +18 -11
  2. package/dist/analysis/descriptor-render.d.ts.map +1 -1
  3. package/dist/analysis/descriptor-render.js +275 -152
  4. package/dist/analysis/descriptor-render.js.map +1 -1
  5. package/dist/analysis/descriptor.d.ts +37 -34
  6. package/dist/analysis/descriptor.d.ts.map +1 -1
  7. package/dist/analysis/descriptor.js +34 -30
  8. package/dist/analysis/descriptor.js.map +1 -1
  9. package/dist/analysis/inheritance.d.ts +16 -16
  10. package/dist/analysis/inheritance.d.ts.map +1 -1
  11. package/dist/analysis/inheritance.js +139 -84
  12. package/dist/analysis/inheritance.js.map +1 -1
  13. package/dist/analysis/param-structure.d.ts +14 -13
  14. package/dist/analysis/param-structure.d.ts.map +1 -1
  15. package/dist/analysis/param-structure.js +104 -53
  16. package/dist/analysis/param-structure.js.map +1 -1
  17. package/dist/analysis/ts-type.d.ts +6 -5
  18. package/dist/analysis/ts-type.d.ts.map +1 -1
  19. package/dist/analysis/ts-type.js +69 -23
  20. package/dist/analysis/ts-type.js.map +1 -1
  21. package/dist/compile.d.ts +5 -5
  22. package/dist/compile.d.ts.map +1 -1
  23. package/dist/compile.js +70 -63
  24. package/dist/compile.js.map +1 -1
  25. package/dist/docs/api-reference.d.ts +12 -11
  26. package/dist/docs/api-reference.d.ts.map +1 -1
  27. package/dist/docs/api-reference.js +194 -121
  28. package/dist/docs/api-reference.js.map +1 -1
  29. package/dist/docs/element-page.d.ts +6 -9
  30. package/dist/docs/element-page.d.ts.map +1 -1
  31. package/dist/docs/element-page.js +68 -133
  32. package/dist/docs/element-page.js.map +1 -1
  33. package/dist/docs/pipeline.d.ts +8 -7
  34. package/dist/docs/pipeline.d.ts.map +1 -1
  35. package/dist/docs/pipeline.js +79 -53
  36. package/dist/docs/pipeline.js.map +1 -1
  37. package/dist/docs/render.d.ts +21 -19
  38. package/dist/docs/render.d.ts.map +1 -1
  39. package/dist/docs/render.js +80 -71
  40. package/dist/docs/render.js.map +1 -1
  41. package/dist/docs/symbol-page.d.ts +6 -6
  42. package/dist/docs/symbol-page.d.ts.map +1 -1
  43. package/dist/docs/symbol-page.js +126 -84
  44. package/dist/docs/symbol-page.js.map +1 -1
  45. package/dist/fingerprint.d.ts +28 -5
  46. package/dist/fingerprint.d.ts.map +1 -1
  47. package/dist/fingerprint.js +66 -13
  48. package/dist/fingerprint.js.map +1 -1
  49. package/dist/gi.d.ts +13 -0
  50. package/dist/gi.d.ts.map +1 -0
  51. package/dist/gi.js +21 -0
  52. package/dist/gi.js.map +1 -0
  53. package/dist/gir/ancestry.d.ts +4 -3
  54. package/dist/gir/ancestry.d.ts.map +1 -1
  55. package/dist/gir/ancestry.js +12 -15
  56. package/dist/gir/ancestry.js.map +1 -1
  57. package/dist/gir/callback.d.ts +6 -11
  58. package/dist/gir/callback.d.ts.map +1 -1
  59. package/dist/gir/callback.js +6 -7
  60. package/dist/gir/callback.js.map +1 -1
  61. package/dist/gir/class.d.ts +7 -5
  62. package/dist/gir/class.d.ts.map +1 -1
  63. package/dist/gir/class.js +14 -12
  64. package/dist/gir/class.js.map +1 -1
  65. package/dist/gir/enum.d.ts +3 -3
  66. package/dist/gir/enum.d.ts.map +1 -1
  67. package/dist/gir/enum.js +7 -6
  68. package/dist/gir/enum.js.map +1 -1
  69. package/dist/gir/field.d.ts +8 -3
  70. package/dist/gir/field.d.ts.map +1 -1
  71. package/dist/gir/field.js +30 -7
  72. package/dist/gir/field.js.map +1 -1
  73. package/dist/gir/function.d.ts +6 -3
  74. package/dist/gir/function.d.ts.map +1 -1
  75. package/dist/gir/function.js +23 -7
  76. package/dist/gir/function.js.map +1 -1
  77. package/dist/gir/gir-path.d.ts +2 -1
  78. package/dist/gir/gir-path.d.ts.map +1 -1
  79. package/dist/gir/gir-path.js +26 -10
  80. package/dist/gir/gir-path.js.map +1 -1
  81. package/dist/gir/libraries.d.ts +3 -2
  82. package/dist/gir/libraries.d.ts.map +1 -1
  83. package/dist/gir/libraries.js +39 -27
  84. package/dist/gir/libraries.js.map +1 -1
  85. package/dist/gir/library.d.ts +17 -11
  86. package/dist/gir/library.d.ts.map +1 -1
  87. package/dist/gir/library.js +116 -92
  88. package/dist/gir/library.js.map +1 -1
  89. package/dist/gir/namespace.d.ts +10 -10
  90. package/dist/gir/namespace.d.ts.map +1 -1
  91. package/dist/gir/namespace.js +21 -20
  92. package/dist/gir/namespace.js.map +1 -1
  93. package/dist/gir/nullable-overrides.d.ts +3 -0
  94. package/dist/gir/nullable-overrides.d.ts.map +1 -0
  95. package/dist/gir/nullable-overrides.js +5 -0
  96. package/dist/gir/nullable-overrides.js.map +1 -0
  97. package/dist/gir/parameter.d.ts +14 -12
  98. package/dist/gir/parameter.d.ts.map +1 -1
  99. package/dist/gir/parameter.js +27 -18
  100. package/dist/gir/parameter.js.map +1 -1
  101. package/dist/gir/parse.d.ts +12 -13
  102. package/dist/gir/parse.d.ts.map +1 -1
  103. package/dist/gir/parse.js +50 -40
  104. package/dist/gir/parse.js.map +1 -1
  105. package/dist/gir/primitives.d.ts +5 -4
  106. package/dist/gir/primitives.d.ts.map +1 -1
  107. package/dist/gir/primitives.js +4 -3
  108. package/dist/gir/primitives.js.map +1 -1
  109. package/dist/gir/property.d.ts +5 -4
  110. package/dist/gir/property.d.ts.map +1 -1
  111. package/dist/gir/property.js +10 -9
  112. package/dist/gir/property.js.map +1 -1
  113. package/dist/gir/record.d.ts +5 -4
  114. package/dist/gir/record.d.ts.map +1 -1
  115. package/dist/gir/record.js +13 -12
  116. package/dist/gir/record.js.map +1 -1
  117. package/dist/gir/size.d.ts +6 -5
  118. package/dist/gir/size.d.ts.map +1 -1
  119. package/dist/gir/size.js +49 -47
  120. package/dist/gir/size.js.map +1 -1
  121. package/dist/gir/type-id.d.ts +17 -15
  122. package/dist/gir/type-id.d.ts.map +1 -1
  123. package/dist/gir/type-id.js +5 -1
  124. package/dist/gir/type-id.js.map +1 -1
  125. package/dist/gir/type-ref.d.ts +3 -2
  126. package/dist/gir/type-ref.d.ts.map +1 -1
  127. package/dist/gir/type-ref.js +36 -25
  128. package/dist/gir/type-ref.js.map +1 -1
  129. package/dist/gir/type.d.ts +3 -2
  130. package/dist/gir/type.d.ts.map +1 -1
  131. package/dist/gir/type.js.map +1 -1
  132. package/dist/index.d.ts +2 -0
  133. package/dist/index.d.ts.map +1 -1
  134. package/dist/index.js +1 -0
  135. package/dist/index.js.map +1 -1
  136. package/dist/jsx.d.ts +26 -0
  137. package/dist/jsx.d.ts.map +1 -0
  138. package/dist/jsx.js +40 -0
  139. package/dist/jsx.js.map +1 -0
  140. package/dist/khronos/args.d.ts +7 -7
  141. package/dist/khronos/args.d.ts.map +1 -1
  142. package/dist/khronos/args.js +88 -67
  143. package/dist/khronos/args.js.map +1 -1
  144. package/dist/khronos/jsdoc.d.ts +4 -4
  145. package/dist/khronos/jsdoc.d.ts.map +1 -1
  146. package/dist/khronos/jsdoc.js +29 -16
  147. package/dist/khronos/jsdoc.js.map +1 -1
  148. package/dist/khronos/model.d.ts +8 -7
  149. package/dist/khronos/model.d.ts.map +1 -1
  150. package/dist/khronos/model.js +94 -59
  151. package/dist/khronos/model.js.map +1 -1
  152. package/dist/khronos/modules.d.ts +4 -3
  153. package/dist/khronos/modules.d.ts.map +1 -1
  154. package/dist/khronos/modules.js +40 -25
  155. package/dist/khronos/modules.js.map +1 -1
  156. package/dist/khronos/param-pair.d.ts +11 -0
  157. package/dist/khronos/param-pair.d.ts.map +1 -0
  158. package/dist/khronos/param-pair.js +6 -0
  159. package/dist/khronos/param-pair.js.map +1 -0
  160. package/dist/khronos/parse.d.ts +7 -8
  161. package/dist/khronos/parse.d.ts.map +1 -1
  162. package/dist/khronos/parse.js +17 -16
  163. package/dist/khronos/parse.js.map +1 -1
  164. package/dist/khronos/pipeline.d.ts +4 -4
  165. package/dist/khronos/pipeline.d.ts.map +1 -1
  166. package/dist/khronos/pipeline.js +97 -56
  167. package/dist/khronos/pipeline.js.map +1 -1
  168. package/dist/khronos/plan.d.ts +11 -10
  169. package/dist/khronos/plan.d.ts.map +1 -1
  170. package/dist/khronos/plan.js +109 -45
  171. package/dist/khronos/plan.js.map +1 -1
  172. package/dist/khronos/render.d.ts +5 -4
  173. package/dist/khronos/render.d.ts.map +1 -1
  174. package/dist/khronos/render.js +106 -59
  175. package/dist/khronos/render.js.map +1 -1
  176. package/dist/khronos/select.d.ts +4 -4
  177. package/dist/khronos/select.d.ts.map +1 -1
  178. package/dist/khronos/select.js +30 -19
  179. package/dist/khronos/select.js.map +1 -1
  180. package/dist/react/element-config.d.ts +17 -0
  181. package/dist/react/element-config.d.ts.map +1 -0
  182. package/dist/react/element-config.js +61 -0
  183. package/dist/react/element-config.js.map +1 -0
  184. package/dist/runner.d.ts +17 -10
  185. package/dist/runner.d.ts.map +1 -1
  186. package/dist/runner.js +45 -43
  187. package/dist/runner.js.map +1 -1
  188. package/dist/store/compile-store.d.ts +5 -3
  189. package/dist/store/compile-store.d.ts.map +1 -1
  190. package/dist/store/compile-store.js +24 -22
  191. package/dist/store/compile-store.js.map +1 -1
  192. package/dist/store/gi/async.d.ts +2 -1
  193. package/dist/store/gi/async.d.ts.map +1 -1
  194. package/dist/store/gi/async.js +28 -24
  195. package/dist/store/gi/async.js.map +1 -1
  196. package/dist/store/gi/callables.d.ts +26 -20
  197. package/dist/store/gi/callables.d.ts.map +1 -1
  198. package/dist/store/gi/callables.js +162 -100
  199. package/dist/store/gi/callables.js.map +1 -1
  200. package/dist/store/gi/callback.d.ts +3 -2
  201. package/dist/store/gi/callback.d.ts.map +1 -1
  202. package/dist/store/gi/callback.js +6 -3
  203. package/dist/store/gi/callback.js.map +1 -1
  204. package/dist/store/gi/class-struct-record.d.ts +4 -3
  205. package/dist/store/gi/class-struct-record.d.ts.map +1 -1
  206. package/dist/store/gi/class-struct-record.js +33 -15
  207. package/dist/store/gi/class-struct-record.js.map +1 -1
  208. package/dist/store/gi/class.d.ts +2 -1
  209. package/dist/store/gi/class.d.ts.map +1 -1
  210. package/dist/store/gi/class.js +86 -47
  211. package/dist/store/gi/class.js.map +1 -1
  212. package/dist/store/gi/companion.d.ts +2 -1
  213. package/dist/store/gi/companion.d.ts.map +1 -1
  214. package/dist/store/gi/companion.js +8 -5
  215. package/dist/store/gi/companion.js.map +1 -1
  216. package/dist/store/gi/constant.d.ts +3 -2
  217. package/dist/store/gi/constant.d.ts.map +1 -1
  218. package/dist/store/gi/constant.js +25 -8
  219. package/dist/store/gi/constant.js.map +1 -1
  220. package/dist/store/gi/constructor-props.d.ts +3 -2
  221. package/dist/store/gi/constructor-props.d.ts.map +1 -1
  222. package/dist/store/gi/constructor-props.js +17 -10
  223. package/dist/store/gi/constructor-props.js.map +1 -1
  224. package/dist/store/gi/enum.d.ts +3 -2
  225. package/dist/store/gi/enum.d.ts.map +1 -1
  226. package/dist/store/gi/enum.js +14 -11
  227. package/dist/store/gi/enum.js.map +1 -1
  228. package/dist/store/gi/function.d.ts +5 -4
  229. package/dist/store/gi/function.d.ts.map +1 -1
  230. package/dist/store/gi/function.js +50 -23
  231. package/dist/store/gi/function.js.map +1 -1
  232. package/dist/store/gi/gtype-binding.d.ts +4 -4
  233. package/dist/store/gi/gtype-binding.d.ts.map +1 -1
  234. package/dist/store/gi/gtype-binding.js +15 -11
  235. package/dist/store/gi/gtype-binding.js.map +1 -1
  236. package/dist/store/gi/interface.d.ts +2 -1
  237. package/dist/store/gi/interface.d.ts.map +1 -1
  238. package/dist/store/gi/interface.js +36 -18
  239. package/dist/store/gi/interface.js.map +1 -1
  240. package/dist/store/gi/item-comparators.d.ts +3 -2
  241. package/dist/store/gi/item-comparators.d.ts.map +1 -1
  242. package/dist/store/gi/item-comparators.js +33 -21
  243. package/dist/store/gi/item-comparators.js.map +1 -1
  244. package/dist/store/gi/method.d.ts +13 -13
  245. package/dist/store/gi/method.d.ts.map +1 -1
  246. package/dist/store/gi/method.js +187 -130
  247. package/dist/store/gi/method.js.map +1 -1
  248. package/dist/store/gi/param-marshal.d.ts +7 -6
  249. package/dist/store/gi/param-marshal.d.ts.map +1 -1
  250. package/dist/store/gi/param-marshal.js +26 -13
  251. package/dist/store/gi/param-marshal.js.map +1 -1
  252. package/dist/store/gi/pipeline.d.ts +2 -1
  253. package/dist/store/gi/pipeline.d.ts.map +1 -1
  254. package/dist/store/gi/pipeline.js +38 -23
  255. package/dist/store/gi/pipeline.js.map +1 -1
  256. package/dist/store/gi/properties.d.ts +2 -1
  257. package/dist/store/gi/properties.d.ts.map +1 -1
  258. package/dist/store/gi/properties.js +6 -4
  259. package/dist/store/gi/properties.js.map +1 -1
  260. package/dist/store/gi/property-accessor.d.ts +11 -10
  261. package/dist/store/gi/property-accessor.d.ts.map +1 -1
  262. package/dist/store/gi/property-accessor.js +86 -60
  263. package/dist/store/gi/property-accessor.js.map +1 -1
  264. package/dist/store/gi/record-constructor.d.ts +3 -2
  265. package/dist/store/gi/record-constructor.d.ts.map +1 -1
  266. package/dist/store/gi/record-constructor.js +36 -25
  267. package/dist/store/gi/record-constructor.js.map +1 -1
  268. package/dist/store/gi/record-field-accessor.d.ts +8 -8
  269. package/dist/store/gi/record-field-accessor.d.ts.map +1 -1
  270. package/dist/store/gi/record-field-accessor.js +171 -99
  271. package/dist/store/gi/record-field-accessor.js.map +1 -1
  272. package/dist/store/gi/record-layout.d.ts +6 -5
  273. package/dist/store/gi/record-layout.d.ts.map +1 -1
  274. package/dist/store/gi/record-layout.js +75 -39
  275. package/dist/store/gi/record-layout.js.map +1 -1
  276. package/dist/store/gi/record.d.ts +2 -1
  277. package/dist/store/gi/record.d.ts.map +1 -1
  278. package/dist/store/gi/record.js +19 -13
  279. package/dist/store/gi/record.js.map +1 -1
  280. package/dist/store/gi/registration.d.ts +3 -3
  281. package/dist/store/gi/registration.d.ts.map +1 -1
  282. package/dist/store/gi/registration.js +3 -2
  283. package/dist/store/gi/registration.js.map +1 -1
  284. package/dist/store/gi/return-wrap.d.ts +2 -2
  285. package/dist/store/gi/return-wrap.d.ts.map +1 -1
  286. package/dist/store/gi/return-wrap.js +43 -22
  287. package/dist/store/gi/return-wrap.js.map +1 -1
  288. package/dist/store/gi/runtime-override.d.ts +2 -1
  289. package/dist/store/gi/runtime-override.d.ts.map +1 -1
  290. package/dist/store/gi/runtime-override.js +6 -3
  291. package/dist/store/gi/runtime-override.js.map +1 -1
  292. package/dist/store/gi/signal.d.ts +3 -2
  293. package/dist/store/gi/signal.d.ts.map +1 -1
  294. package/dist/store/gi/signal.js +113 -66
  295. package/dist/store/gi/signal.js.map +1 -1
  296. package/dist/store/gi/vtable.d.ts +2 -1
  297. package/dist/store/gi/vtable.d.ts.map +1 -1
  298. package/dist/store/gi/vtable.js +60 -30
  299. package/dist/store/gi/vtable.js.map +1 -1
  300. package/dist/store/gi-store.d.ts +5 -4
  301. package/dist/store/gi-store.d.ts.map +1 -1
  302. package/dist/store/gi-store.js +4 -2
  303. package/dist/store/gi-store.js.map +1 -1
  304. package/dist/store/jsx/element-components.d.ts +23 -0
  305. package/dist/store/jsx/element-components.d.ts.map +1 -0
  306. package/dist/store/jsx/element-components.js +86 -0
  307. package/dist/store/jsx/element-components.js.map +1 -0
  308. package/dist/store/jsx/element-prop-imports.d.ts +17 -0
  309. package/dist/store/jsx/element-prop-imports.d.ts.map +1 -0
  310. package/dist/store/jsx/element-prop-imports.js +15 -0
  311. package/dist/store/jsx/element-prop-imports.js.map +1 -0
  312. package/dist/store/jsx/element-prop-types.d.ts +10 -0
  313. package/dist/store/jsx/element-prop-types.d.ts.map +1 -0
  314. package/dist/store/jsx/element-prop-types.js +41 -0
  315. package/dist/store/jsx/element-prop-types.js.map +1 -0
  316. package/dist/store/jsx/gir-index.d.ts +16 -0
  317. package/dist/store/jsx/gir-index.d.ts.map +1 -0
  318. package/dist/store/jsx/gir-index.js +33 -0
  319. package/dist/store/jsx/gir-index.js.map +1 -0
  320. package/dist/store/jsx/intrinsic-elements.d.ts +27 -0
  321. package/dist/store/jsx/intrinsic-elements.d.ts.map +1 -0
  322. package/dist/store/jsx/intrinsic-elements.js +128 -0
  323. package/dist/store/jsx/intrinsic-elements.js.map +1 -0
  324. package/dist/store/{react → jsx}/jsx.d.ts +2 -4
  325. package/dist/store/jsx/jsx.d.ts.map +1 -0
  326. package/dist/store/{react → jsx}/jsx.js +110 -71
  327. package/dist/store/jsx/jsx.js.map +1 -0
  328. package/dist/store/jsx/metadata.d.ts +4 -0
  329. package/dist/store/jsx/metadata.d.ts.map +1 -0
  330. package/dist/store/{react → jsx}/metadata.js +148 -69
  331. package/dist/store/jsx/metadata.js.map +1 -0
  332. package/dist/store/jsx/pipeline.d.ts +21 -0
  333. package/dist/store/jsx/pipeline.d.ts.map +1 -0
  334. package/dist/store/{react → jsx}/pipeline.js +36 -15
  335. package/dist/store/jsx/pipeline.js.map +1 -0
  336. package/dist/store/{react → jsx}/props.d.ts +9 -12
  337. package/dist/store/jsx/props.d.ts.map +1 -0
  338. package/dist/store/jsx/props.js +158 -0
  339. package/dist/store/jsx/props.js.map +1 -0
  340. package/dist/store/jsx-store.d.ts +5 -3
  341. package/dist/store/jsx-store.d.ts.map +1 -1
  342. package/dist/store/jsx-store.js +4 -1
  343. package/dist/store/jsx-store.js.map +1 -1
  344. package/dist/store/store-fs.d.ts +14 -12
  345. package/dist/store/store-fs.d.ts.map +1 -1
  346. package/dist/store/store-fs.js +9 -7
  347. package/dist/store/store-fs.js.map +1 -1
  348. package/dist/writer/context.d.ts +2 -1
  349. package/dist/writer/context.d.ts.map +1 -1
  350. package/dist/writer/context.js +12 -6
  351. package/dist/writer/context.js.map +1 -1
  352. package/dist/writer/doc.d.ts +2 -1
  353. package/dist/writer/doc.d.ts.map +1 -1
  354. package/dist/writer/doc.js +13 -7
  355. package/dist/writer/doc.js.map +1 -1
  356. package/dist/writer/emit.d.ts +8 -7
  357. package/dist/writer/emit.d.ts.map +1 -1
  358. package/dist/writer/emit.js +13 -10
  359. package/dist/writer/emit.js.map +1 -1
  360. package/dist/writer/gtk-doc.d.ts +2 -1
  361. package/dist/writer/gtk-doc.d.ts.map +1 -1
  362. package/dist/writer/gtk-doc.js +29 -18
  363. package/dist/writer/gtk-doc.js.map +1 -1
  364. package/dist/writer/imports.d.ts +4 -2
  365. package/dist/writer/imports.d.ts.map +1 -1
  366. package/dist/writer/imports.js +35 -24
  367. package/dist/writer/imports.js.map +1 -1
  368. package/dist/writer/module.d.ts +3 -2
  369. package/dist/writer/module.d.ts.map +1 -1
  370. package/dist/writer/module.js +16 -9
  371. package/dist/writer/module.js.map +1 -1
  372. package/dist/xml.d.ts +4 -0
  373. package/dist/xml.d.ts.map +1 -0
  374. package/dist/xml.js +10 -0
  375. package/dist/xml.js.map +1 -0
  376. package/overrides/cairo/context.ts.ejs +7 -7
  377. package/overrides/cairo/matrix.ts.ejs +2 -2
  378. package/overrides/cairo/recording-surface.ts.ejs +2 -2
  379. package/overrides/cairo/region.ts.ejs +1 -1
  380. package/overrides/cairo/scaled-font.ts.ejs +3 -3
  381. package/package.json +15 -9
  382. package/src/analysis/descriptor-render.ts +484 -168
  383. package/src/analysis/descriptor.ts +162 -125
  384. package/src/analysis/inheritance.ts +286 -98
  385. package/src/analysis/param-structure.ts +188 -57
  386. package/src/analysis/ts-type.ts +112 -26
  387. package/src/compile.ts +103 -76
  388. package/src/docs/api-reference.ts +340 -144
  389. package/src/docs/element-page.ts +137 -146
  390. package/src/docs/pipeline.ts +132 -73
  391. package/src/docs/render.ts +151 -87
  392. package/src/docs/symbol-page.ts +268 -123
  393. package/src/fingerprint.ts +127 -29
  394. package/src/gi.ts +26 -0
  395. package/src/gir/ancestry.ts +26 -14
  396. package/src/gir/callback.ts +10 -15
  397. package/src/gir/class.ts +20 -16
  398. package/src/gir/enum.ts +9 -7
  399. package/src/gir/field.ts +37 -8
  400. package/src/gir/function.ts +33 -9
  401. package/src/gir/gir-path.ts +36 -12
  402. package/src/gir/libraries.ts +56 -31
  403. package/src/gir/library.ts +200 -97
  404. package/src/gir/namespace.ts +42 -26
  405. package/src/gir/nullable-overrides.ts +5 -0
  406. package/src/gir/parameter.ts +80 -42
  407. package/src/gir/parse.ts +102 -47
  408. package/src/gir/primitives.ts +25 -23
  409. package/src/gir/property.ts +13 -11
  410. package/src/gir/record.ts +16 -14
  411. package/src/gir/size.ts +91 -58
  412. package/src/gir/type-id.ts +33 -18
  413. package/src/gir/type-ref.ts +62 -26
  414. package/src/gir/type.ts +10 -8
  415. package/src/index.ts +7 -0
  416. package/src/jsx.ts +70 -0
  417. package/src/khronos/args.ts +158 -89
  418. package/src/khronos/jsdoc.ts +67 -29
  419. package/src/khronos/model.ts +154 -53
  420. package/src/khronos/modules.ts +67 -27
  421. package/src/khronos/param-pair.ts +14 -0
  422. package/src/khronos/parse.ts +37 -17
  423. package/src/khronos/pipeline.ts +193 -90
  424. package/src/khronos/plan.ts +235 -86
  425. package/src/khronos/render.ts +208 -71
  426. package/src/khronos/select.ts +48 -18
  427. package/src/react/element-config.ts +91 -0
  428. package/src/runner.ts +93 -57
  429. package/src/store/compile-store.ts +32 -26
  430. package/src/store/gi/async.ts +48 -21
  431. package/src/store/gi/callables.ts +345 -136
  432. package/src/store/gi/callback.ts +13 -4
  433. package/src/store/gi/class-struct-record.ts +49 -17
  434. package/src/store/gi/class.ts +186 -64
  435. package/src/store/gi/companion.ts +15 -6
  436. package/src/store/gi/constant.ts +42 -8
  437. package/src/store/gi/constructor-props.ts +42 -16
  438. package/src/store/gi/enum.ts +28 -13
  439. package/src/store/gi/function.ts +90 -24
  440. package/src/store/gi/gtype-binding.ts +31 -18
  441. package/src/store/gi/interface.ts +101 -36
  442. package/src/store/gi/item-comparators.ts +74 -26
  443. package/src/store/gi/method.ts +376 -159
  444. package/src/store/gi/param-marshal.ts +38 -15
  445. package/src/store/gi/pipeline.ts +72 -22
  446. package/src/store/gi/properties.ts +16 -5
  447. package/src/store/gi/property-accessor.ts +192 -84
  448. package/src/store/gi/record-constructor.ts +62 -30
  449. package/src/store/gi/record-field-accessor.ts +380 -167
  450. package/src/store/gi/record-layout.ts +130 -43
  451. package/src/store/gi/record.ts +37 -14
  452. package/src/store/gi/registration.ts +15 -9
  453. package/src/store/gi/return-wrap.ts +71 -23
  454. package/src/store/gi/runtime-override.ts +13 -3
  455. package/src/store/gi/signal.ts +244 -104
  456. package/src/store/gi/vtable.ts +117 -41
  457. package/src/store/gi-store.ts +26 -13
  458. package/src/store/jsx/element-components.ts +152 -0
  459. package/src/store/jsx/element-prop-imports.ts +24 -0
  460. package/src/store/jsx/element-prop-types.ts +59 -0
  461. package/src/store/jsx/gir-index.ts +62 -0
  462. package/src/store/jsx/intrinsic-elements.ts +262 -0
  463. package/src/store/{react → jsx}/jsx.ts +213 -99
  464. package/src/store/jsx/metadata.ts +385 -0
  465. package/src/store/jsx/pipeline.ts +145 -0
  466. package/src/store/jsx/props.ts +274 -0
  467. package/src/store/jsx-store.ts +15 -3
  468. package/src/store/store-fs.ts +36 -20
  469. package/src/writer/context.ts +25 -6
  470. package/src/writer/doc.ts +19 -5
  471. package/src/writer/emit.ts +20 -11
  472. package/src/writer/gtk-doc.ts +48 -21
  473. package/src/writer/imports.ts +63 -28
  474. package/src/writer/module.ts +35 -11
  475. package/src/xml.ts +12 -0
  476. package/dist/store/react/built-ins.d.ts +0 -9
  477. package/dist/store/react/built-ins.d.ts.map +0 -1
  478. package/dist/store/react/built-ins.js +0 -226
  479. package/dist/store/react/built-ins.js.map +0 -1
  480. package/dist/store/react/element-components.d.ts +0 -15
  481. package/dist/store/react/element-components.d.ts.map +0 -1
  482. package/dist/store/react/element-components.js +0 -92
  483. package/dist/store/react/element-components.js.map +0 -1
  484. package/dist/store/react/element-prop-types.d.ts +0 -19
  485. package/dist/store/react/element-prop-types.d.ts.map +0 -1
  486. package/dist/store/react/element-prop-types.js +0 -244
  487. package/dist/store/react/element-prop-types.js.map +0 -1
  488. package/dist/store/react/element-props.d.ts +0 -4
  489. package/dist/store/react/element-props.d.ts.map +0 -1
  490. package/dist/store/react/element-props.js +0 -178
  491. package/dist/store/react/element-props.js.map +0 -1
  492. package/dist/store/react/gir-index.d.ts +0 -25
  493. package/dist/store/react/gir-index.d.ts.map +0 -1
  494. package/dist/store/react/gir-index.js +0 -55
  495. package/dist/store/react/gir-index.js.map +0 -1
  496. package/dist/store/react/intrinsic-elements.d.ts +0 -26
  497. package/dist/store/react/intrinsic-elements.d.ts.map +0 -1
  498. package/dist/store/react/intrinsic-elements.js +0 -107
  499. package/dist/store/react/intrinsic-elements.js.map +0 -1
  500. package/dist/store/react/jsx.d.ts.map +0 -1
  501. package/dist/store/react/jsx.js.map +0 -1
  502. package/dist/store/react/metadata.d.ts +0 -4
  503. package/dist/store/react/metadata.d.ts.map +0 -1
  504. package/dist/store/react/metadata.js.map +0 -1
  505. package/dist/store/react/pipeline.d.ts +0 -14
  506. package/dist/store/react/pipeline.d.ts.map +0 -1
  507. package/dist/store/react/pipeline.js.map +0 -1
  508. package/dist/store/react/props.d.ts.map +0 -1
  509. package/dist/store/react/props.js +0 -133
  510. package/dist/store/react/props.js.map +0 -1
  511. package/overrides/gtk/constants.ts.ejs +0 -3
  512. package/overrides/gtk/index.ts.ejs +0 -2
  513. package/src/store/react/built-ins.ts +0 -260
  514. package/src/store/react/element-components.ts +0 -138
  515. package/src/store/react/element-prop-types.ts +0 -280
  516. package/src/store/react/element-props.ts +0 -204
  517. package/src/store/react/gir-index.ts +0 -85
  518. package/src/store/react/intrinsic-elements.ts +0 -161
  519. package/src/store/react/metadata.ts +0 -197
  520. package/src/store/react/pipeline.ts +0 -90
  521. package/src/store/react/props.ts +0 -197
@@ -1,20 +1,20 @@
1
+ import type { ParseContext, TypeId } from "./type-id.js";
1
2
  import { callbackFromNode, type GirCallback } from "./callback.js";
2
3
  import { classFromNode, type GirClass } from "./class.js";
3
4
  import { enumFromNode, type GirEnum } from "./enum.js";
4
5
  import { functionFromNode, type GirFunction } from "./function.js";
5
- import { attr, childOf, childrenOf, docOf, nameAttr, type RawNode } from "./parse.js";
6
+ import { attr, getChild, getChildren, getDoc, nameAttr, type RawNode } from "./parse.js";
6
7
  import { type GirRecord, isVtableRecord, recordFromNode } from "./record.js";
7
- import type { ParseContext, TypeId } from "./type-id.js";
8
8
  import { typeRefFromNode } from "./type-ref.js";
9
9
 
10
- export type GirConstant = {
10
+ type GirConstant = {
11
11
  name: string;
12
12
  doc: string | undefined;
13
13
  value: string;
14
14
  type: TypeId | undefined;
15
15
  };
16
16
 
17
- export type GirAlias = {
17
+ type GirAlias = {
18
18
  name: string;
19
19
  doc: string | undefined;
20
20
  cType: string | undefined;
@@ -22,7 +22,7 @@ export type GirAlias = {
22
22
  targetCType: string | undefined;
23
23
  };
24
24
 
25
- export type GirNamespace = {
25
+ type GirNamespace = {
26
26
  id: number;
27
27
  name: string;
28
28
  sharedLibrary: string | undefined;
@@ -37,14 +37,12 @@ export type GirNamespace = {
37
37
  aliases: GirAlias[];
38
38
  };
39
39
 
40
- export const namespaceDirectory = (namespace: Pick<GirNamespace, "name">): string => namespace.name.toLowerCase();
41
-
42
40
  type NamespaceInclude = {
43
41
  name: string;
44
42
  version: string;
45
43
  };
46
44
 
47
- export type NamespaceHeader = {
45
+ type NamespaceHeader = {
48
46
  name: string;
49
47
  sharedLibrary: string | undefined;
50
48
  cSymbolPrefixes: string[];
@@ -52,15 +50,20 @@ export type NamespaceHeader = {
52
50
  namespaceNode: RawNode;
53
51
  };
54
52
 
55
- export const parseNamespaceHeader = (repositoryNode: RawNode): NamespaceHeader => {
56
- const includes = childrenOf(repositoryNode, "include").map<NamespaceInclude>((include) => ({
53
+ const namespaceDirectory = (namespace: Pick<GirNamespace, "name">): string => namespace.name.toLowerCase();
54
+
55
+ const parseNamespaceHeader = (repositoryNode: RawNode): NamespaceHeader => {
56
+ const includes = getChildren(repositoryNode, "include").map<NamespaceInclude>((include) => ({
57
57
  name: nameAttr(include),
58
58
  version: attr(include, "version") ?? "",
59
59
  }));
60
- const namespaceNode = childrenOf(repositoryNode, "namespace")[0];
60
+
61
+ const namespaceNode = getChildren(repositoryNode, "namespace")[0];
62
+
61
63
  if (namespaceNode === undefined) {
62
64
  throw new Error("GIR repository has no <namespace> child");
63
65
  }
66
+
64
67
  return {
65
68
  name: nameAttr(namespaceNode),
66
69
  sharedLibrary: attr(namespaceNode, "shared-library"),
@@ -70,7 +73,7 @@ export const parseNamespaceHeader = (repositoryNode: RawNode): NamespaceHeader =
70
73
  };
71
74
  };
72
75
 
73
- export const createNamespaceShell = (header: NamespaceHeader, id: number): GirNamespace => ({
76
+ const createNamespaceShell = (header: NamespaceHeader, id: number): GirNamespace => ({
74
77
  id,
75
78
  name: header.name,
76
79
  sharedLibrary: header.sharedLibrary,
@@ -85,25 +88,27 @@ export const createNamespaceShell = (header: NamespaceHeader, id: number): GirNa
85
88
  aliases: [],
86
89
  });
87
90
 
88
- export const populateNamespaceBody = (shell: GirNamespace, namespaceNode: RawNode, context: ParseContext): void => {
89
- shell.classes = childrenOf(namespaceNode, "class").map((klass) => classFromNode(klass, false, context));
90
- shell.interfaces = childrenOf(namespaceNode, "interface").map((iface) => classFromNode(iface, true, context));
91
+ const populateNamespaceBody = (shell: GirNamespace, namespaceNode: RawNode, context: ParseContext): void => {
92
+ shell.classes = getChildren(namespaceNode, "class").map((klass) => classFromNode(klass, false, context));
93
+ shell.interfaces = getChildren(namespaceNode, "interface").map((iface) => classFromNode(iface, true, context));
91
94
  shell.records = collectRecords(namespaceNode, context);
92
95
  shell.enums = collectEnums(namespaceNode);
93
- shell.callbacks = childrenOf(namespaceNode, "callback").map((callback) => callbackFromNode(callback, context));
94
- shell.functions = childrenOf(namespaceNode, "function").map((fn) => functionFromNode(fn, context));
95
- shell.constants = childrenOf(namespaceNode, "constant").map((constant) => ({
96
+ shell.callbacks = getChildren(namespaceNode, "callback").map((callback) => callbackFromNode(callback, context));
97
+ shell.functions = getChildren(namespaceNode, "function").map((fn) => functionFromNode(fn, context));
98
+
99
+ shell.constants = getChildren(namespaceNode, "constant").map((constant) => ({
96
100
  name: nameAttr(constant),
97
- doc: docOf(constant),
101
+ doc: getDoc(constant),
98
102
  value: attr(constant, "value") ?? "",
99
103
  type: typeRefFromNode(constant, context),
100
104
  }));
101
- shell.aliases = childrenOf(namespaceNode, "alias").map((alias) => ({
105
+
106
+ shell.aliases = getChildren(namespaceNode, "alias").map((alias) => ({
102
107
  name: nameAttr(alias),
103
- doc: docOf(alias),
108
+ doc: getDoc(alias),
104
109
  cType: attr(alias, "c:type"),
105
110
  target: typeRefFromNode(alias, context),
106
- targetCType: attr(childOf(alias, "type"), "c:type"),
111
+ targetCType: attr(getChild(alias, "type"), "c:type"),
107
112
  }));
108
113
  };
109
114
 
@@ -111,13 +116,24 @@ const splitPrefixes = (raw: string | undefined): string[] =>
111
116
  (raw ?? "").split(",").filter((prefix) => prefix.length > 0);
112
117
 
113
118
  const collectRecords = (namespaceNode: RawNode, context: ParseContext): GirRecord[] => [
114
- ...childrenOf(namespaceNode, "record").map((record) =>
119
+ ...getChildren(namespaceNode, "record").map((record) =>
115
120
  recordFromNode(record, isVtableRecord(record), false, context),
116
121
  ),
117
- ...childrenOf(namespaceNode, "union").map((union) => recordFromNode(union, isVtableRecord(union), true, context)),
122
+ ...getChildren(namespaceNode, "union").map((union) => recordFromNode(union, isVtableRecord(union), true, context)),
118
123
  ];
119
124
 
120
125
  const collectEnums = (namespaceNode: RawNode): GirEnum[] => [
121
- ...childrenOf(namespaceNode, "enumeration").map((enumeration) => enumFromNode(enumeration, "enumeration")),
122
- ...childrenOf(namespaceNode, "bitfield").map((bitfield) => enumFromNode(bitfield, "bitfield")),
126
+ ...getChildren(namespaceNode, "enumeration").map((enumeration) => enumFromNode(enumeration, "enumeration")),
127
+ ...getChildren(namespaceNode, "bitfield").map((bitfield) => enumFromNode(bitfield, "bitfield")),
123
128
  ];
129
+
130
+ export {
131
+ namespaceDirectory,
132
+ parseNamespaceHeader,
133
+ createNamespaceShell,
134
+ populateNamespaceBody,
135
+ type GirConstant,
136
+ type GirAlias,
137
+ type GirNamespace,
138
+ type NamespaceHeader,
139
+ };
@@ -0,0 +1,5 @@
1
+ const PARAMETERS_MISSING_NULLABLE_ANNOTATION: Map<string, string[]> = new Map([
2
+ ["gtk_fixed_layout_child_set_transform", ["transform"]],
3
+ ]);
4
+
5
+ export { PARAMETERS_MISSING_NULLABLE_ANNOTATION };
@@ -1,23 +1,22 @@
1
- import { attr, attrBool, childOf, childrenOf, docOf, intAttr, nameAttr, parseEnumAttr, type RawNode } from "./parse.js";
2
1
  import type { ParseContext, TypeId } from "./type-id.js";
2
+ import {
3
+ attr,
4
+ getChild,
5
+ getChildren,
6
+ getDoc,
7
+ intAttr,
8
+ isAttrTrue,
9
+ nameAttr,
10
+ parseEnumAttr,
11
+ type RawNode,
12
+ } from "./parse.js";
3
13
  import { typeRefFromNode } from "./type-ref.js";
4
14
 
5
15
  type ParameterDirection = "in" | "out" | "inout";
6
-
7
- export type ParameterTransfer = "none" | "full" | "container";
8
-
16
+ type ParameterTransfer = "none" | "full" | "container";
9
17
  type CallbackScope = "call" | "notified" | "async" | "forever";
10
18
 
11
- const DIRECTIONS: Set<ParameterDirection> = new Set(["in", "out", "inout"]);
12
- const TRANSFERS: Set<ParameterTransfer> = new Set(["none", "full", "container"]);
13
- const SCOPES: Set<CallbackScope> = new Set(["call", "notified", "async", "forever"]);
14
-
15
- export const transferOwnership = (node: RawNode): ParameterTransfer =>
16
- parseEnumAttr(attr(node, "transfer-ownership"), TRANSFERS, "none", "transfer-ownership");
17
-
18
- const nullableAttr = (node: RawNode): boolean => attrBool(node, "nullable") || attrBool(node, "allow-none");
19
-
20
- export type GirParameter = {
19
+ type GirParameter = {
21
20
  name: string;
22
21
  type: TypeId | undefined;
23
22
  direction: ParameterDirection;
@@ -31,61 +30,100 @@ export type GirParameter = {
31
30
  isVarargs: boolean;
32
31
  };
33
32
 
34
- export const parameterFromNode = (node: RawNode, context: ParseContext): GirParameter => ({
33
+ type GirReturnValue = {
34
+ type: TypeId | undefined;
35
+ transferOwnership: ParameterTransfer;
36
+ nullable: boolean;
37
+ skip: boolean;
38
+ };
39
+
40
+ type GirCallable = {
41
+ name: string;
42
+ doc: string | undefined;
43
+ parameters: GirParameter[];
44
+ returnValue: GirReturnValue;
45
+ throws: boolean;
46
+ introspectable: boolean;
47
+ };
48
+
49
+ const DIRECTIONS: Set<ParameterDirection> = new Set(["in", "out", "inout"]);
50
+ const TRANSFERS: Set<ParameterTransfer> = new Set(["none", "full", "container"]);
51
+ const SCOPES: Set<CallbackScope> = new Set(["call", "notified", "async", "forever"]);
52
+
53
+ const transferOwnership = (node: RawNode): ParameterTransfer =>
54
+ parseEnumAttr(attr(node, "transfer-ownership"), TRANSFERS, "none", "transfer-ownership");
55
+
56
+ // `allow-none` is the legacy spelling of two different attributes: on an in-parameter it means the
57
+ // value may be NULL (`nullable`), but on an out-parameter it means the caller may pass a NULL
58
+ // location (`optional`). Folding it into `nullable` for an out-parameter would claim the returned
59
+ // value can be null for the 494 out-parameters across the installed GIRs that only say `allow-none`.
60
+ const isInDirection = (node: RawNode): boolean =>
61
+ parseEnumAttr(attr(node, "direction"), DIRECTIONS, "in", "direction") === "in";
62
+
63
+ const hasNullableAttr = (node: RawNode): boolean =>
64
+ isAttrTrue(node, "nullable") || (isInDirection(node) && isAttrTrue(node, "allow-none"));
65
+
66
+ const hasOptionalAttr = (node: RawNode): boolean =>
67
+ isAttrTrue(node, "optional") || (!isInDirection(node) && isAttrTrue(node, "allow-none"));
68
+
69
+ const parameterFromNode = (node: RawNode, context: ParseContext): GirParameter => ({
35
70
  name: nameAttr(node),
36
71
  type: typeRefFromNode(node, context),
37
72
  direction: parseEnumAttr(attr(node, "direction"), DIRECTIONS, "in", "direction"),
38
73
  transferOwnership: transferOwnership(node),
39
- nullable: nullableAttr(node),
40
- optional: attrBool(node, "optional"),
41
- callerAllocates: attrBool(node, "caller-allocates"),
74
+ nullable: hasNullableAttr(node),
75
+ optional: hasOptionalAttr(node),
76
+ callerAllocates: isAttrTrue(node, "caller-allocates"),
42
77
  scope: parseEnumAttr(attr(node, "scope"), SCOPES, undefined, "scope"),
43
78
  closureIndex: intAttr(node, "closure"),
44
79
  destroyIndex: intAttr(node, "destroy"),
45
- isVarargs: childOf(node, "varargs") !== undefined,
80
+ isVarargs: getChild(node, "varargs") !== undefined,
46
81
  });
47
82
 
48
- export const isOutParameter = (parameter: GirParameter): boolean =>
83
+ const isOutParameter = (parameter: GirParameter): boolean =>
49
84
  parameter.direction === "out" && !parameter.callerAllocates;
50
85
 
51
- export const isCallerAllocatedOut = (parameter: GirParameter): boolean =>
86
+ const isCallerAllocatedOut = (parameter: GirParameter): boolean =>
52
87
  parameter.direction === "out" && parameter.callerAllocates;
53
88
 
54
- export const isInoutParameter = (parameter: GirParameter): boolean => parameter.direction === "inout";
55
-
56
- export type GirReturnValue = {
57
- type: TypeId | undefined;
58
- transferOwnership: ParameterTransfer;
59
- nullable: boolean;
60
- skip: boolean;
61
- };
89
+ const isInoutParameter = (parameter: GirParameter): boolean => parameter.direction === "inout";
62
90
 
63
91
  const returnValueFromNode = (node: RawNode | undefined, context: ParseContext): GirReturnValue => {
64
92
  if (node === undefined) {
65
93
  return { type: undefined, transferOwnership: "none", nullable: false, skip: false };
66
94
  }
95
+
67
96
  return {
68
97
  type: typeRefFromNode(node, context),
69
98
  transferOwnership: transferOwnership(node),
70
- nullable: nullableAttr(node),
71
- skip: attrBool(node, "skip"),
99
+ nullable: hasNullableAttr(node),
100
+ skip: isAttrTrue(node, "skip"),
72
101
  };
73
102
  };
74
103
 
75
- export type GirSignal = {
76
- name: string;
77
- doc: string | undefined;
78
- parameters: GirParameter[];
79
- returnValue: GirReturnValue;
80
- };
104
+ const parseCallable = (node: RawNode, context: ParseContext): GirCallable => {
105
+ const parametersNode = getChild(node, "parameters");
106
+ const parameterNodes = getChildren(parametersNode, "parameter");
81
107
 
82
- export const parseCallable = (node: RawNode, context: ParseContext): GirSignal => {
83
- const parametersNode = childOf(node, "parameters");
84
- const parameterNodes = childrenOf(parametersNode, "parameter");
85
108
  return {
86
109
  name: nameAttr(node),
87
- doc: docOf(node),
110
+ doc: getDoc(node),
88
111
  parameters: parameterNodes.map((parameter) => parameterFromNode(parameter, context)),
89
- returnValue: returnValueFromNode(childOf(node, "return-value"), context),
112
+ returnValue: returnValueFromNode(getChild(node, "return-value"), context),
113
+ throws: isAttrTrue(node, "throws"),
114
+ introspectable: isAttrTrue(node, "introspectable", true),
90
115
  };
91
116
  };
117
+
118
+ export {
119
+ transferOwnership,
120
+ parameterFromNode,
121
+ isOutParameter,
122
+ isCallerAllocatedOut,
123
+ isInoutParameter,
124
+ parseCallable,
125
+ type ParameterTransfer,
126
+ type GirParameter,
127
+ type GirReturnValue,
128
+ type GirCallable,
129
+ };
package/src/gir/parse.ts CHANGED
@@ -1,9 +1,7 @@
1
1
  import { readFileSync } from "node:fs";
2
- import { XMLParser } from "fast-xml-parser";
2
+ import { createXmlParser } from "../xml.js";
3
3
 
4
- export type RawNode = {
5
- [attributeOrChild: string]: unknown;
6
- };
4
+ type RawNode = Record<string, unknown>;
7
5
 
8
6
  const MULTI_TAGS: Set<string> = new Set([
9
7
  "include",
@@ -28,92 +26,149 @@ const MULTI_TAGS: Set<string> = new Set([
28
26
  "parameter",
29
27
  ]);
30
28
 
31
- export const GIR_CONSTRUCTOR_TAG = "gir-constructor";
32
-
29
+ const GIR_CONSTRUCTOR_TAG = "gir-constructor";
33
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)));
34
32
 
35
- const renameReservedTag = (tag: string): string => RESERVED_TAG_RENAMES.get(tag) ?? tag;
36
-
37
- const RENAMED_MULTI_TAGS: Set<string> = new Set([...MULTI_TAGS].map(renameReservedTag));
38
-
39
- const PARSER = new XMLParser({
40
- ignoreAttributes: false,
41
- attributeNamePrefix: "@_",
42
- parseAttributeValue: false,
43
- parseTagValue: false,
33
+ const PARSER = createXmlParser({
44
34
  trimValues: true,
45
35
  transformTagName: renameReservedTag,
46
36
  isArray: (name) => RENAMED_MULTI_TAGS.has(name),
47
37
  });
48
38
 
49
- export const parseGirFile = (path: string): RawNode => {
50
- 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
+
51
46
  return PARSER.parse(xml) as RawNode;
52
47
  };
53
48
 
54
- export const attr = (node: RawNode | undefined, name: string): string | undefined => {
55
- if (node === undefined) return undefined;
49
+ const attr = (node: RawNode | undefined, name: string): string | undefined => {
50
+ if (node === undefined) {
51
+ return undefined;
52
+ }
53
+
56
54
  const value = node[`@_${name}`];
55
+
57
56
  return typeof value === "string" ? value : undefined;
58
57
  };
59
58
 
60
- export const attrBool = (node: RawNode | undefined, name: string, fallback = false): boolean => {
59
+ const isAttrTrue = (node: RawNode | undefined, name: string, isTrueByDefault = false): boolean => {
61
60
  const value = attr(node, name);
62
- if (value === undefined) return fallback;
61
+
62
+ if (value === undefined) {
63
+ return isTrueByDefault;
64
+ }
65
+
63
66
  return value === "1";
64
67
  };
65
68
 
66
- export const nameAttr = (node: RawNode): string => attr(node, "name") ?? "";
69
+ const nameAttr = (node: RawNode): string => attr(node, "name") ?? "";
67
70
 
68
- export const intAttr = (node: RawNode, name: string): number | undefined => {
71
+ const intAttr = (node: RawNode, name: string): number | undefined => {
69
72
  const raw = attr(node, name);
70
- return raw === undefined ? undefined : Number.parseInt(raw, 10);
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}"`);
71
85
  };
72
86
 
73
- export const parseEnumAttr = <T extends string, F extends T | undefined>(
87
+ const parseEnumAttr = <T extends string, F extends T | undefined>(
74
88
  raw: string | undefined,
75
89
  members: Set<T>,
76
90
  fallback: F,
77
91
  label: string,
78
- ): T | F => {
79
- if (raw === undefined) return fallback;
80
- for (const member of members) {
81
- if (member === raw) return member;
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 [];
82
97
  }
83
- throw new Error(`Unknown ${label} value "${raw}"`);
84
- };
85
98
 
86
- export const childrenOf = (node: RawNode | undefined, tag: string): RawNode[] => {
87
- if (node === undefined) return [];
88
99
  const value = node[tag];
89
- if (value === undefined) return [];
90
- if (Array.isArray(value)) return value as RawNode[];
100
+
101
+ if (value === undefined) {
102
+ return [];
103
+ }
104
+
105
+ if (Array.isArray(value)) {
106
+ return value as RawNode[];
107
+ }
108
+
91
109
  return [value as RawNode];
92
110
  };
93
111
 
94
- export const childOf = (node: RawNode | undefined, tag: string): RawNode | undefined => {
95
- if (node === undefined) return undefined;
112
+ const getChild = (node: RawNode | undefined, tag: string): RawNode | undefined => {
113
+ if (node === undefined) {
114
+ return undefined;
115
+ }
116
+
96
117
  const value = node[tag];
97
- if (value === undefined) return undefined;
118
+
119
+ if (value === undefined) {
120
+ return undefined;
121
+ }
122
+
98
123
  if (Array.isArray(value)) {
99
124
  return value.length === 0 ? undefined : (value[0] as RawNode);
100
125
  }
126
+
101
127
  return value as RawNode;
102
128
  };
103
129
 
104
130
  const normalizeDoc = (text: string): string | undefined => {
105
131
  const trimmed = text.trim();
132
+
106
133
  return trimmed.length === 0 ? undefined : trimmed;
107
134
  };
108
135
 
109
- export const docOf = (node: RawNode | undefined): string | undefined => {
110
- if (node === undefined) return undefined;
111
- const raw = node.doc;
112
- const value = Array.isArray(raw) ? raw[0] : raw;
113
- if (typeof value === "string") return normalizeDoc(value);
114
- if (value !== null && typeof value === "object") {
115
- const text = (value as RawNode)["#text"];
116
- if (typeof text === "string") return normalizeDoc(text);
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;
117
157
  }
118
- return undefined;
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,
119
174
  };
@@ -1,24 +1,24 @@
1
- export 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";
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";
20
20
 
21
- export const PRIMITIVE_SIZE: Record<PrimitiveCategory, number> = {
21
+ const PRIMITIVE_SIZE: Record<PrimitiveCategory, number> = {
22
22
  void: 0,
23
23
  boolean: 4,
24
24
  int8: 1,
@@ -91,9 +91,7 @@ const PRIMITIVE_BY_NAME: Map<string, PrimitiveCategory> = new Map([
91
91
  ["gconstpointer", "pointer"],
92
92
  ] as const);
93
93
 
94
- export const primitiveCategory = (name: string): PrimitiveCategory | undefined => PRIMITIVE_BY_NAME.get(name);
95
-
96
- export const PRIMITIVE_TS_TYPE: Record<PrimitiveCategory, string> = {
94
+ const PRIMITIVE_TS_TYPE: Record<PrimitiveCategory, string> = {
97
95
  void: "void",
98
96
  boolean: "boolean",
99
97
  int8: "number",
@@ -113,3 +111,7 @@ export const PRIMITIVE_TS_TYPE: Record<PrimitiveCategory, string> = {
113
111
  unichar: "string",
114
112
  pointer: "number",
115
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,9 +1,9 @@
1
- import { type ParameterTransfer, transferOwnership } from "./parameter.js";
2
- import { attr, attrBool, docOf, nameAttr, type RawNode } from "./parse.js";
3
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
4
  import { typeRefFromNode } from "./type-ref.js";
5
5
 
6
- export type GirProperty = {
6
+ type GirProperty = {
7
7
  name: string;
8
8
  doc: string | undefined;
9
9
  type: TypeId | undefined;
@@ -18,20 +18,22 @@ export type GirProperty = {
18
18
  defaultValue: string | undefined;
19
19
  };
20
20
 
21
- export const isConstructableProperty = (property: GirProperty): boolean =>
21
+ const isConstructableProperty = (property: GirProperty): boolean =>
22
22
  property.writable || property.construct || property.constructOnly;
23
23
 
24
- export const propertyFromNode = (node: RawNode, context: ParseContext): GirProperty => ({
24
+ const propertyFromNode = (node: RawNode, context: ParseContext): GirProperty => ({
25
25
  name: nameAttr(node),
26
- doc: docOf(node),
26
+ doc: getDoc(node),
27
27
  type: typeRefFromNode(node, context),
28
- readable: attrBool(node, "readable", true),
29
- writable: attrBool(node, "writable"),
30
- construct: attrBool(node, "construct"),
31
- constructOnly: attrBool(node, "construct-only"),
32
- introspectable: attrBool(node, "introspectable", true),
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
33
  transferOwnership: transferOwnership(node),
34
34
  getter: attr(node, "getter"),
35
35
  setter: attr(node, "setter"),
36
36
  defaultValue: attr(node, "default-value"),
37
37
  });
38
+
39
+ export { isConstructableProperty, propertyFromNode, type GirProperty };