@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
@@ -1,82 +1,40 @@
1
+ import type { ParseContext, TypeId } from "./type-id.js";
1
2
  import { type RawNode } from "./parse.js";
2
- import { type GirTypeRef } from "./type-ref.js";
3
- /** Direction of a `<parameter>` (`in`, `out`, `inout`). */
4
3
  type ParameterDirection = "in" | "out" | "inout";
5
- /**
6
- * Lifetime conveyed by `transfer-ownership`. Mirrors the GIR vocabulary one
7
- * for one; the marshal layer translates to the runtime's `Ownership` set.
8
- */
9
- export type ParameterTransfer = "none" | "full" | "container";
10
- /** Lifetime of a callback parameter (`scope=…`). */
4
+ type ParameterTransfer = "none" | "full" | "container";
11
5
  type CallbackScope = "call" | "notified" | "async" | "forever";
12
- /**
13
- * A `<parameter>` or `<instance-parameter>` of a callable.
14
- *
15
- * Only the bits the FFI writers actually look at are retained; the original
16
- * raw node is dropped so the domain model is self-describing.
17
- */
18
- export type GirParameter = {
19
- /** Parameter name as authored in GIR (often snake_case). */
20
- readonly name: string;
21
- /** Typed slot of the parameter, or `undefined` for `<varargs/>`. */
22
- readonly type: GirTypeRef | undefined;
23
- readonly direction: ParameterDirection;
24
- readonly transferOwnership: ParameterTransfer;
25
- readonly nullable: boolean;
26
- readonly optional: boolean;
27
- /** `caller-allocates="1"` — used in out parameters that fill a caller buffer. */
28
- readonly callerAllocates: boolean;
29
- /** Lifetime of a callback parameter (defined only when the parameter is a callback). */
30
- readonly scope: CallbackScope | undefined;
31
- /** Index of the paired `gpointer user_data` parameter in the C signature. */
32
- readonly closureIndex: number | undefined;
33
- /** Index of the paired `GDestroyNotify` parameter in the C signature. */
34
- readonly destroyIndex: number | undefined;
35
- /** `true` for `<instance-parameter>` (the implicit `self` of a method). */
36
- readonly isInstance: boolean;
37
- /** `<varargs/>` parameter; not marshalable. */
38
- readonly isVarargs: boolean;
6
+ type GirParameter = {
7
+ name: string;
8
+ type: TypeId | undefined;
9
+ direction: ParameterDirection;
10
+ transferOwnership: ParameterTransfer;
11
+ nullable: boolean;
12
+ optional: boolean;
13
+ callerAllocates: boolean;
14
+ scope: CallbackScope | undefined;
15
+ closureIndex: number | undefined;
16
+ destroyIndex: number | undefined;
17
+ isVarargs: boolean;
39
18
  };
40
- /**
41
- * Builds a {@link GirParameter} from a `<parameter>` or `<instance-parameter>`.
42
- *
43
- * @param node - The XML element
44
- * @param isInstance - Whether the source element was `<instance-parameter>`
45
- */
46
- export declare const parameterFromNode: (node: RawNode, isInstance: boolean) => GirParameter;
47
- /**
48
- * Whether a parameter is a pure out-parameter: `direction="out"` and not
49
- * caller-allocated, so it marshals through a `{ value }` cell the callee writes into.
50
- *
51
- * @param parameter - The parameter to test
52
- */
53
- export declare const isOutParameter: (parameter: GirParameter) => boolean;
54
- /**
55
- * Whether a parameter is a caller-allocated out-parameter: `direction="out"`
56
- * with `caller-allocates="1"`, passed as a pre-built handle the callee fills
57
- * in place rather than through a `{ value }` cell.
58
- *
59
- * @param parameter - The parameter to test
60
- */
61
- export declare const isCallerAllocatedOut: (parameter: GirParameter) => boolean;
62
- /**
63
- * Whether a parameter is an inout parameter (`direction="inout"`).
64
- *
65
- * @param parameter - The parameter to test
66
- */
67
- export declare const isInoutParameter: (parameter: GirParameter) => boolean;
68
- /** A `<return-value>` plus its inferred type and transfer settings. */
69
- export type GirReturnValue = {
70
- readonly type: GirTypeRef | undefined;
71
- readonly transferOwnership: ParameterTransfer;
72
- readonly nullable: boolean;
19
+ type GirReturnValue = {
20
+ type: TypeId | undefined;
21
+ transferOwnership: ParameterTransfer;
22
+ nullable: boolean;
23
+ skip: boolean;
73
24
  };
74
- /**
75
- * Builds a {@link GirReturnValue} from a `<return-value>` element, or returns a
76
- * void return when the element is missing.
77
- *
78
- * @param node - The `<return-value>` element, or `undefined`
79
- */
80
- export declare const returnValueFromNode: (node: RawNode | undefined) => GirReturnValue;
81
- export {};
25
+ type GirCallable = {
26
+ name: string;
27
+ doc: string | undefined;
28
+ parameters: GirParameter[];
29
+ returnValue: GirReturnValue;
30
+ throws: boolean;
31
+ introspectable: boolean;
32
+ };
33
+ declare const transferOwnership: (node: RawNode) => ParameterTransfer;
34
+ declare const parameterFromNode: (node: RawNode, context: ParseContext) => GirParameter;
35
+ declare const isOutParameter: (parameter: GirParameter) => boolean;
36
+ declare const isCallerAllocatedOut: (parameter: GirParameter) => boolean;
37
+ declare const isInoutParameter: (parameter: GirParameter) => boolean;
38
+ declare const parseCallable: (node: RawNode, context: ParseContext) => GirCallable;
39
+ export { transferOwnership, parameterFromNode, isOutParameter, isCallerAllocatedOut, isInoutParameter, parseCallable, type ParameterTransfer, type GirParameter, type GirReturnValue, type GirCallable, };
82
40
  //# sourceMappingURL=parameter.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"parameter.d.ts","sourceRoot":"","sources":["../../src/gir/parameter.ts"],"names":[],"mappings":"AAAA,OAAO,EAA2B,KAAK,OAAO,EAAE,MAAM,YAAY,CAAC;AACnE,OAAO,EAAE,KAAK,UAAU,EAAmB,MAAM,eAAe,CAAC;AAEjE,2DAA2D;AAC3D,KAAK,kBAAkB,GAAG,IAAI,GAAG,KAAK,GAAG,OAAO,CAAC;AAEjD;;;GAGG;AACH,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,MAAM,GAAG,WAAW,CAAC;AAE9D,oDAAoD;AACpD,KAAK,aAAa,GAAG,MAAM,GAAG,UAAU,GAAG,OAAO,GAAG,SAAS,CAAC;AAE/D;;;;;GAKG;AACH,MAAM,MAAM,YAAY,GAAG;IACvB,4DAA4D;IAC5D,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,oEAAoE;IACpE,QAAQ,CAAC,IAAI,EAAE,UAAU,GAAG,SAAS,CAAC;IACtC,QAAQ,CAAC,SAAS,EAAE,kBAAkB,CAAC;IACvC,QAAQ,CAAC,iBAAiB,EAAE,iBAAiB,CAAC;IAC9C,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,iFAAiF;IACjF,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC;IAClC,wFAAwF;IACxF,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,SAAS,CAAC;IAC1C,6EAA6E;IAC7E,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1C,yEAAyE;IACzE,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1C,2EAA2E;IAC3E,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B,+CAA+C;IAC/C,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;CAC/B,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,GAAI,MAAM,OAAO,EAAE,YAAY,OAAO,KAAG,YAmBtE,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,cAAc,GAAI,WAAW,YAAY,KAAG,OACM,CAAC;AAEhE;;;;;;GAMG;AACH,eAAO,MAAM,oBAAoB,GAAI,WAAW,YAAY,KAAG,OACD,CAAC;AAE/D;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,GAAI,WAAW,YAAY,KAAG,OAA0C,CAAC;AAEtG,uEAAuE;AACvE,MAAM,MAAM,cAAc,GAAG;IACzB,QAAQ,CAAC,IAAI,EAAE,UAAU,GAAG,SAAS,CAAC;IACtC,QAAQ,CAAC,iBAAiB,EAAE,iBAAiB,CAAC;IAC9C,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;CAC9B,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,GAAI,MAAM,OAAO,GAAG,SAAS,KAAG,cAS/D,CAAC"}
1
+ {"version":3,"file":"parameter.d.ts","sourceRoot":"","sources":["../../src/gir/parameter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,EASH,KAAK,OAAO,EACf,MAAM,YAAY,CAAC;AAGpB,KAAK,kBAAkB,GAAG,IAAI,GAAG,KAAK,GAAG,OAAO,CAAC;AACjD,KAAK,iBAAiB,GAAG,MAAM,GAAG,MAAM,GAAG,WAAW,CAAC;AACvD,KAAK,aAAa,GAAG,MAAM,GAAG,UAAU,GAAG,OAAO,GAAG,SAAS,CAAC;AAE/D,KAAK,YAAY,GAAG;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,SAAS,EAAE,kBAAkB,CAAC;IAC9B,iBAAiB,EAAE,iBAAiB,CAAC;IACrC,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;IAClB,eAAe,EAAE,OAAO,CAAC;IACzB,KAAK,EAAE,aAAa,GAAG,SAAS,CAAC;IACjC,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,SAAS,EAAE,OAAO,CAAC;CACtB,CAAC;AAEF,KAAK,cAAc,GAAG;IAClB,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,iBAAiB,EAAE,iBAAiB,CAAC;IACrC,QAAQ,EAAE,OAAO,CAAC;IAClB,IAAI,EAAE,OAAO,CAAC;CACjB,CAAC;AAEF,KAAK,WAAW,GAAG;IACf,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC;IACxB,UAAU,EAAE,YAAY,EAAE,CAAC;IAC3B,WAAW,EAAE,cAAc,CAAC;IAC5B,MAAM,EAAE,OAAO,CAAC;IAChB,cAAc,EAAE,OAAO,CAAC;CAC3B,CAAC;AAMF,QAAA,MAAM,iBAAiB,GAAI,MAAM,OAAO,KAAG,iBACiD,CAAC;AAe7F,QAAA,MAAM,iBAAiB,GAAI,MAAM,OAAO,EAAE,SAAS,YAAY,KAAG,YAYhE,CAAC;AAEH,QAAA,MAAM,cAAc,GAAI,WAAW,YAAY,KAAG,OACa,CAAC;AAEhE,QAAA,MAAM,oBAAoB,GAAI,WAAW,YAAY,KAAG,OACM,CAAC;AAE/D,QAAA,MAAM,gBAAgB,GAAI,WAAW,YAAY,KAAG,OAA0C,CAAC;AAe/F,QAAA,MAAM,aAAa,GAAI,MAAM,OAAO,EAAE,SAAS,YAAY,KAAG,WAY7D,CAAC;AAEF,OAAO,EACH,iBAAiB,EACjB,iBAAiB,EACjB,cAAc,EACd,oBAAoB,EACpB,gBAAgB,EAChB,aAAa,EACb,KAAK,iBAAiB,EACtB,KAAK,YAAY,EACjB,KAAK,cAAc,EACnB,KAAK,WAAW,GACnB,CAAC"}
@@ -1,66 +1,54 @@
1
- import { attr, attrBool, childOf } from "./parse.js";
2
- import { typeRefFromSlot } from "./type-ref.js";
3
- /**
4
- * Builds a {@link GirParameter} from a `<parameter>` or `<instance-parameter>`.
5
- *
6
- * @param node - The XML element
7
- * @param isInstance - Whether the source element was `<instance-parameter>`
8
- */
9
- export const parameterFromNode = (node, isInstance) => {
10
- const direction = (attr(node, "direction") ?? "in");
11
- const transferOwnership = (attr(node, "transfer-ownership") ?? "none");
12
- const closure = attr(node, "closure");
13
- const destroy = attr(node, "destroy");
1
+ import { attr, getChild, getChildren, getDoc, intAttr, isAttrTrue, nameAttr, parseEnumAttr, } from "./parse.js";
2
+ import { typeRefFromNode } from "./type-ref.js";
3
+ const DIRECTIONS = new Set(["in", "out", "inout"]);
4
+ const TRANSFERS = new Set(["none", "full", "container"]);
5
+ const SCOPES = new Set(["call", "notified", "async", "forever"]);
6
+ const transferOwnership = (node) => parseEnumAttr(attr(node, "transfer-ownership"), TRANSFERS, "none", "transfer-ownership");
7
+ // `allow-none` is the legacy spelling of two different attributes: on an in-parameter it means the
8
+ // value may be NULL (`nullable`), but on an out-parameter it means the caller may pass a NULL
9
+ // location (`optional`). Folding it into `nullable` for an out-parameter would claim the returned
10
+ // value can be null for the 494 out-parameters across the installed GIRs that only say `allow-none`.
11
+ const isInDirection = (node) => parseEnumAttr(attr(node, "direction"), DIRECTIONS, "in", "direction") === "in";
12
+ const hasNullableAttr = (node) => isAttrTrue(node, "nullable") || (isInDirection(node) && isAttrTrue(node, "allow-none"));
13
+ const hasOptionalAttr = (node) => isAttrTrue(node, "optional") || (!isInDirection(node) && isAttrTrue(node, "allow-none"));
14
+ const parameterFromNode = (node, context) => ({
15
+ name: nameAttr(node),
16
+ type: typeRefFromNode(node, context),
17
+ direction: parseEnumAttr(attr(node, "direction"), DIRECTIONS, "in", "direction"),
18
+ transferOwnership: transferOwnership(node),
19
+ nullable: hasNullableAttr(node),
20
+ optional: hasOptionalAttr(node),
21
+ callerAllocates: isAttrTrue(node, "caller-allocates"),
22
+ scope: parseEnumAttr(attr(node, "scope"), SCOPES, undefined, "scope"),
23
+ closureIndex: intAttr(node, "closure"),
24
+ destroyIndex: intAttr(node, "destroy"),
25
+ isVarargs: getChild(node, "varargs") !== undefined,
26
+ });
27
+ const isOutParameter = (parameter) => parameter.direction === "out" && !parameter.callerAllocates;
28
+ const isCallerAllocatedOut = (parameter) => parameter.direction === "out" && parameter.callerAllocates;
29
+ const isInoutParameter = (parameter) => parameter.direction === "inout";
30
+ const returnValueFromNode = (node, context) => {
31
+ if (node === undefined) {
32
+ return { type: undefined, transferOwnership: "none", nullable: false, skip: false };
33
+ }
14
34
  return {
15
- name: attr(node, "name") ?? "",
16
- type: typeRefFromSlot(node),
17
- direction,
18
- transferOwnership,
19
- nullable: attrBool(node, "nullable") || attrBool(node, "allow-none"),
20
- optional: attrBool(node, "optional"),
21
- callerAllocates: attrBool(node, "caller-allocates"),
22
- scope: attr(node, "scope"),
23
- closureIndex: closure === undefined ? undefined : Number.parseInt(closure, 10),
24
- destroyIndex: destroy === undefined ? undefined : Number.parseInt(destroy, 10),
25
- isInstance,
26
- isVarargs: childOf(node, "varargs") !== undefined,
35
+ type: typeRefFromNode(node, context),
36
+ transferOwnership: transferOwnership(node),
37
+ nullable: hasNullableAttr(node),
38
+ skip: isAttrTrue(node, "skip"),
27
39
  };
28
40
  };
29
- /**
30
- * Whether a parameter is a pure out-parameter: `direction="out"` and not
31
- * caller-allocated, so it marshals through a `{ value }` cell the callee writes into.
32
- *
33
- * @param parameter - The parameter to test
34
- */
35
- export const isOutParameter = (parameter) => parameter.direction === "out" && !parameter.callerAllocates;
36
- /**
37
- * Whether a parameter is a caller-allocated out-parameter: `direction="out"`
38
- * with `caller-allocates="1"`, passed as a pre-built handle the callee fills
39
- * in place rather than through a `{ value }` cell.
40
- *
41
- * @param parameter - The parameter to test
42
- */
43
- export const isCallerAllocatedOut = (parameter) => parameter.direction === "out" && parameter.callerAllocates;
44
- /**
45
- * Whether a parameter is an inout parameter (`direction="inout"`).
46
- *
47
- * @param parameter - The parameter to test
48
- */
49
- export const isInoutParameter = (parameter) => parameter.direction === "inout";
50
- /**
51
- * Builds a {@link GirReturnValue} from a `<return-value>` element, or returns a
52
- * void return when the element is missing.
53
- *
54
- * @param node - The `<return-value>` element, or `undefined`
55
- */
56
- export const returnValueFromNode = (node) => {
57
- if (node === undefined) {
58
- return { type: undefined, transferOwnership: "none", nullable: false };
59
- }
41
+ const parseCallable = (node, context) => {
42
+ const parametersNode = getChild(node, "parameters");
43
+ const parameterNodes = getChildren(parametersNode, "parameter");
60
44
  return {
61
- type: typeRefFromSlot(node),
62
- transferOwnership: (attr(node, "transfer-ownership") ?? "none"),
63
- nullable: attrBool(node, "nullable") || attrBool(node, "allow-none"),
45
+ name: nameAttr(node),
46
+ doc: getDoc(node),
47
+ parameters: parameterNodes.map((parameter) => parameterFromNode(parameter, context)),
48
+ returnValue: returnValueFromNode(getChild(node, "return-value"), context),
49
+ throws: isAttrTrue(node, "throws"),
50
+ introspectable: isAttrTrue(node, "introspectable", true),
64
51
  };
65
52
  };
53
+ export { transferOwnership, parameterFromNode, isOutParameter, isCallerAllocatedOut, isInoutParameter, parseCallable, };
66
54
  //# sourceMappingURL=parameter.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"parameter.js","sourceRoot":"","sources":["../../src/gir/parameter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAgB,MAAM,YAAY,CAAC;AACnE,OAAO,EAAmB,eAAe,EAAE,MAAM,eAAe,CAAC;AA2CjE;;;;;GAKG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,IAAa,EAAE,UAAmB,EAAgB,EAAE;IAClF,MAAM,SAAS,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,IAAI,IAAI,CAAuB,CAAC;IAC1E,MAAM,iBAAiB,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,oBAAoB,CAAC,IAAI,MAAM,CAAsB,CAAC;IAC5F,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IACtC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IACtC,OAAO;QACH,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE;QAC9B,IAAI,EAAE,eAAe,CAAC,IAAI,CAAC;QAC3B,SAAS;QACT,iBAAiB;QACjB,QAAQ,EAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;QACpE,QAAQ,EAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;QACpC,eAAe,EAAE,QAAQ,CAAC,IAAI,EAAE,kBAAkB,CAAC;QACnD,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,OAAO,CAA8B;QACvD,YAAY,EAAE,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC;QAC9E,YAAY,EAAE,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC;QAC9E,UAAU;QACV,SAAS,EAAE,OAAO,CAAC,IAAI,EAAE,SAAS,CAAC,KAAK,SAAS;KACpD,CAAC;AACN,CAAC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,SAAuB,EAAW,EAAE,CAC/D,SAAS,CAAC,SAAS,KAAK,KAAK,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC;AAEhE;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,SAAuB,EAAW,EAAE,CACrE,SAAS,CAAC,SAAS,KAAK,KAAK,IAAI,SAAS,CAAC,eAAe,CAAC;AAE/D;;;;GAIG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,SAAuB,EAAW,EAAE,CAAC,SAAS,CAAC,SAAS,KAAK,OAAO,CAAC;AAStG;;;;;GAKG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,IAAyB,EAAkB,EAAE;IAC7E,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACrB,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;IAC3E,CAAC;IACD,OAAO;QACH,IAAI,EAAE,eAAe,CAAC,IAAI,CAAC;QAC3B,iBAAiB,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,oBAAoB,CAAC,IAAI,MAAM,CAAsB;QACpF,QAAQ,EAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;KACvE,CAAC;AACN,CAAC,CAAC"}
1
+ {"version":3,"file":"parameter.js","sourceRoot":"","sources":["../../src/gir/parameter.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ParseContext, TypeId } from \"./type-id.js\";\nimport {\n attr,\n getChild,\n getChildren,\n getDoc,\n intAttr,\n isAttrTrue,\n nameAttr,\n parseEnumAttr,\n type RawNode,\n} from \"./parse.js\";\nimport { typeRefFromNode } from \"./type-ref.js\";\n\ntype ParameterDirection = \"in\" | \"out\" | \"inout\";\ntype ParameterTransfer = \"none\" | \"full\" | \"container\";\ntype CallbackScope = \"call\" | \"notified\" | \"async\" | \"forever\";\n\ntype GirParameter = {\n name: string;\n type: TypeId | undefined;\n direction: ParameterDirection;\n transferOwnership: ParameterTransfer;\n nullable: boolean;\n optional: boolean;\n callerAllocates: boolean;\n scope: CallbackScope | undefined;\n closureIndex: number | undefined;\n destroyIndex: number | undefined;\n isVarargs: boolean;\n};\n\ntype GirReturnValue = {\n type: TypeId | undefined;\n transferOwnership: ParameterTransfer;\n nullable: boolean;\n skip: boolean;\n};\n\ntype GirCallable = {\n name: string;\n doc: string | undefined;\n parameters: GirParameter[];\n returnValue: GirReturnValue;\n throws: boolean;\n introspectable: boolean;\n};\n\nconst DIRECTIONS: Set<ParameterDirection> = new Set([\"in\", \"out\", \"inout\"]);\nconst TRANSFERS: Set<ParameterTransfer> = new Set([\"none\", \"full\", \"container\"]);\nconst SCOPES: Set<CallbackScope> = new Set([\"call\", \"notified\", \"async\", \"forever\"]);\n\nconst transferOwnership = (node: RawNode): ParameterTransfer =>\n parseEnumAttr(attr(node, \"transfer-ownership\"), TRANSFERS, \"none\", \"transfer-ownership\");\n\n// `allow-none` is the legacy spelling of two different attributes: on an in-parameter it means the\n// value may be NULL (`nullable`), but on an out-parameter it means the caller may pass a NULL\n// location (`optional`). Folding it into `nullable` for an out-parameter would claim the returned\n// value can be null for the 494 out-parameters across the installed GIRs that only say `allow-none`.\nconst isInDirection = (node: RawNode): boolean =>\n parseEnumAttr(attr(node, \"direction\"), DIRECTIONS, \"in\", \"direction\") === \"in\";\n\nconst hasNullableAttr = (node: RawNode): boolean =>\n isAttrTrue(node, \"nullable\") || (isInDirection(node) && isAttrTrue(node, \"allow-none\"));\n\nconst hasOptionalAttr = (node: RawNode): boolean =>\n isAttrTrue(node, \"optional\") || (!isInDirection(node) && isAttrTrue(node, \"allow-none\"));\n\nconst parameterFromNode = (node: RawNode, context: ParseContext): GirParameter => ({\n name: nameAttr(node),\n type: typeRefFromNode(node, context),\n direction: parseEnumAttr(attr(node, \"direction\"), DIRECTIONS, \"in\", \"direction\"),\n transferOwnership: transferOwnership(node),\n nullable: hasNullableAttr(node),\n optional: hasOptionalAttr(node),\n callerAllocates: isAttrTrue(node, \"caller-allocates\"),\n scope: parseEnumAttr(attr(node, \"scope\"), SCOPES, undefined, \"scope\"),\n closureIndex: intAttr(node, \"closure\"),\n destroyIndex: intAttr(node, \"destroy\"),\n isVarargs: getChild(node, \"varargs\") !== undefined,\n});\n\nconst isOutParameter = (parameter: GirParameter): boolean =>\n parameter.direction === \"out\" && !parameter.callerAllocates;\n\nconst isCallerAllocatedOut = (parameter: GirParameter): boolean =>\n parameter.direction === \"out\" && parameter.callerAllocates;\n\nconst isInoutParameter = (parameter: GirParameter): boolean => parameter.direction === \"inout\";\n\nconst returnValueFromNode = (node: RawNode | undefined, context: ParseContext): GirReturnValue => {\n if (node === undefined) {\n return { type: undefined, transferOwnership: \"none\", nullable: false, skip: false };\n }\n\n return {\n type: typeRefFromNode(node, context),\n transferOwnership: transferOwnership(node),\n nullable: hasNullableAttr(node),\n skip: isAttrTrue(node, \"skip\"),\n };\n};\n\nconst parseCallable = (node: RawNode, context: ParseContext): GirCallable => {\n const parametersNode = getChild(node, \"parameters\");\n const parameterNodes = getChildren(parametersNode, \"parameter\");\n\n return {\n name: nameAttr(node),\n doc: getDoc(node),\n parameters: parameterNodes.map((parameter) => parameterFromNode(parameter, context)),\n returnValue: returnValueFromNode(getChild(node, \"return-value\"), context),\n throws: isAttrTrue(node, \"throws\"),\n introspectable: isAttrTrue(node, \"introspectable\", true),\n };\n};\n\nexport {\n transferOwnership,\n parameterFromNode,\n isOutParameter,\n isCallerAllocatedOut,\n isInoutParameter,\n parseCallable,\n type ParameterTransfer,\n type GirParameter,\n type GirReturnValue,\n type GirCallable,\n};\n"]}
@@ -1,78 +1,13 @@
1
- /**
2
- * Raw GIR XML element after parsing.
3
- *
4
- * Attributes are exposed under `@_<name>` keys (the default
5
- * `fast-xml-parser` convention). Child elements appear under their tag name.
6
- * Multi-occurrence tags (every container in {@link MULTI_TAGS}) are always
7
- * arrays so callers do not need to disambiguate "single child" from "many
8
- * children" at every access. Single-occurrence tags appear as bare objects.
9
- */
10
- export type RawNode = {
11
- readonly [attributeOrChild: string]: unknown;
12
- };
13
- /**
14
- * The tag name codegen reads GIR constructors under.
15
- *
16
- * GIR spells constructors `<constructor>`, but `fast-xml-parser` rejects the
17
- * literal names `constructor`, `prototype`, and `__proto__` to guard against
18
- * prototype pollution, with no opt-out. {@link parseGirFile} rewrites the tag
19
- * to this token via `transformTagName` before that guard runs, so every
20
- * downstream lookup of a constructor child must use this constant rather than
21
- * the raw GIR name.
22
- */
23
- export declare const GIR_CONSTRUCTOR_TAG = "gir-constructor";
24
- /**
25
- * Parses a GIR XML file from disk and returns its raw tree.
26
- *
27
- * The returned object always has a single `repository` property containing
28
- * the root `<repository>` element. Callers should not interpret the tree
29
- * directly — pass it to {@link GirRepository.load} (in `./repository.ts`),
30
- * which builds the typed domain model on top of it.
31
- *
32
- * @param path - Absolute path to a `.gir` file
33
- * @returns The raw repository node
34
- */
35
- export declare const parseGirFile: (path: string) => RawNode;
36
- /**
37
- * Reads an attribute from a raw GIR node as a string, returning `undefined`
38
- * when the attribute is absent.
39
- *
40
- * The `@_` prefix is added by `fast-xml-parser`; this helper hides that
41
- * convention from the call sites.
42
- *
43
- * @param node - The raw element
44
- * @param name - The attribute name (without the `@_` prefix)
45
- */
46
- export declare const attr: (node: RawNode | undefined, name: string) => string | undefined;
47
- /**
48
- * Reads an attribute as a boolean using GIR's `"1"` / `"0"` convention.
49
- *
50
- * Attributes that are missing return the supplied default (defaulting to
51
- * `false`). Any non-`"1"` value is treated as `false`.
52
- *
53
- * @param node - The raw element
54
- * @param name - The attribute name (without the `@_` prefix)
55
- * @param fallback - Value returned when the attribute is missing
56
- */
57
- export declare const attrBool: (node: RawNode | undefined, name: string, fallback?: boolean) => boolean;
58
- /**
59
- * Returns the children of a raw node under a given tag name as an array.
60
- *
61
- * The parser configuration forces multi-occurrence tags to arrays already;
62
- * this helper covers the residual case where a tag was registered as
63
- * single-occurrence at the schema level but a particular file emits zero
64
- * elements (returning `[]`) or where the caller wants a uniform array view.
65
- *
66
- * @param node - The parent element
67
- * @param tag - The child tag name (with namespace prefix if any)
68
- */
69
- export declare const childrenOf: (node: RawNode | undefined, tag: string) => readonly RawNode[];
70
- /**
71
- * Returns the single child of a raw node under a given tag, or `undefined`
72
- * if absent. If multiple are present the first is returned.
73
- *
74
- * @param node - The parent element
75
- * @param tag - The child tag name (with namespace prefix if any)
76
- */
77
- export declare const childOf: (node: RawNode | undefined, tag: string) => RawNode | undefined;
1
+ type RawNode = Record<string, unknown>;
2
+ declare const GIR_CONSTRUCTOR_TAG = "gir-constructor";
3
+ declare const parseGirFile: (path: string) => RawNode;
4
+ declare const attr: (node: RawNode | undefined, name: string) => string | undefined;
5
+ declare const isAttrTrue: (node: RawNode | undefined, name: string, isTrueByDefault?: boolean) => boolean;
6
+ declare const nameAttr: (node: RawNode) => string;
7
+ declare const intAttr: (node: RawNode, name: string) => number | undefined;
8
+ declare const parseEnumAttr: <T extends string, F extends T | undefined>(raw: string | undefined, members: Set<T>, fallback: F, label: string) => T | F;
9
+ declare const getChildren: (node: RawNode | undefined, tag: string) => RawNode[];
10
+ declare const getChild: (node: RawNode | undefined, tag: string) => RawNode | undefined;
11
+ declare const getDoc: (node: RawNode | undefined) => string | undefined;
12
+ export { GIR_CONSTRUCTOR_TAG, parseGirFile, attr, isAttrTrue, nameAttr, intAttr, parseEnumAttr, getChildren, getChild, getDoc, type RawNode, };
78
13
  //# sourceMappingURL=parse.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../../src/gir/parse.ts"],"names":[],"mappings":"AAGA;;;;;;;;GAQG;AACH,MAAM,MAAM,OAAO,GAAG;IAClB,QAAQ,EAAE,gBAAgB,EAAE,MAAM,GAAG,OAAO,CAAC;CAChD,CAAC;AAuCF;;;;;;;;;GASG;AACH,eAAO,MAAM,mBAAmB,oBAAoB,CAAC;AAyBrD;;;;;;;;;;GAUG;AACH,eAAO,MAAM,YAAY,GAAI,MAAM,MAAM,KAAG,OAG3C,CAAC;AAEF;;;;;;;;;GASG;AACH,eAAO,MAAM,IAAI,GAAI,MAAM,OAAO,GAAG,SAAS,EAAE,MAAM,MAAM,KAAG,MAAM,GAAG,SAIvE,CAAC;AAEF;;;;;;;;;GASG;AACH,eAAO,MAAM,QAAQ,GAAI,MAAM,OAAO,GAAG,SAAS,EAAE,MAAM,MAAM,EAAE,kBAAgB,KAAG,OAIpF,CAAC;AAEF;;;;;;;;;;GAUG;AACH,eAAO,MAAM,UAAU,GAAI,MAAM,OAAO,GAAG,SAAS,EAAE,KAAK,MAAM,KAAG,SAAS,OAAO,EAMnF,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,OAAO,GAAI,MAAM,OAAO,GAAG,SAAS,EAAE,KAAK,MAAM,KAAG,OAAO,GAAG,SAQ1E,CAAC"}
1
+ {"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../../src/gir/parse.ts"],"names":[],"mappings":"AAGA,KAAK,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAyBvC,QAAA,MAAM,mBAAmB,oBAAoB,CAAC;AAc9C,QAAA,MAAM,YAAY,GAAI,MAAM,MAAM,KAAG,OAIpC,CAAC;AAEF,QAAA,MAAM,IAAI,GAAI,MAAM,OAAO,GAAG,SAAS,EAAE,MAAM,MAAM,KAAG,MAAM,GAAG,SAQhE,CAAC;AAEF,QAAA,MAAM,UAAU,GAAI,MAAM,OAAO,GAAG,SAAS,EAAE,MAAM,MAAM,EAAE,yBAAuB,KAAG,OAQtF,CAAC;AAEF,QAAA,MAAM,QAAQ,GAAI,MAAM,OAAO,KAAG,MAAkC,CAAC;AAErE,QAAA,MAAM,OAAO,GAAI,MAAM,OAAO,EAAE,MAAM,MAAM,KAAG,MAAM,GAAG,SAIvD,CAAC;AAYF,QAAA,MAAM,aAAa,GAAI,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,CAAC,GAAG,SAAS,EAC5D,KAAK,MAAM,GAAG,SAAS,EACvB,SAAS,GAAG,CAAC,CAAC,CAAC,EACf,UAAU,CAAC,EACX,OAAO,MAAM,KACd,CAAC,GAAG,CAAqE,CAAC;AAE7E,QAAA,MAAM,WAAW,GAAI,MAAM,OAAO,GAAG,SAAS,EAAE,KAAK,MAAM,KAAG,OAAO,EAgBpE,CAAC;AAEF,QAAA,MAAM,QAAQ,GAAI,MAAM,OAAO,GAAG,SAAS,EAAE,KAAK,MAAM,KAAG,OAAO,GAAG,SAgBpE,CAAC;AAgBF,QAAA,MAAM,MAAM,GAAI,MAAM,OAAO,GAAG,SAAS,KAAG,MAAM,GAAG,SAgBpD,CAAC;AAEF,OAAO,EACH,mBAAmB,EACnB,YAAY,EACZ,IAAI,EACJ,UAAU,EACV,QAAQ,EACR,OAAO,EACP,aAAa,EACb,WAAW,EACX,QAAQ,EACR,MAAM,EACN,KAAK,OAAO,GACf,CAAC"}
package/dist/gir/parse.js CHANGED
@@ -1,17 +1,7 @@
1
1
  import { readFileSync } from "node:fs";
2
- import { XMLParser } from "fast-xml-parser";
3
- /**
4
- * Tag names that the GIR schema permits at multi-occurrence positions.
5
- *
6
- * `fast-xml-parser` is configured to always materialize these as arrays so
7
- * downstream traversal never needs to branch on "is this an object or an
8
- * array of objects". Tags missing from this set may appear as a single
9
- * object (e.g. `<return-value>`, `<parameters>`, `<type>`, `<doc>`).
10
- */
2
+ import { createXmlParser } from "../xml.js";
11
3
  const MULTI_TAGS = new Set([
12
4
  "include",
13
- "c:include",
14
- "package",
15
5
  "class",
16
6
  "interface",
17
7
  "record",
@@ -19,14 +9,11 @@ const MULTI_TAGS = new Set([
19
9
  "bitfield",
20
10
  "callback",
21
11
  "function",
22
- "function-macro",
23
12
  "constant",
24
13
  "alias",
25
14
  "union",
26
- "glib:boxed",
27
15
  "method",
28
16
  "constructor",
29
- "virtual-method",
30
17
  "property",
31
18
  "field",
32
19
  "glib:signal",
@@ -34,122 +21,97 @@ const MULTI_TAGS = new Set([
34
21
  "prerequisite",
35
22
  "member",
36
23
  "parameter",
37
- "attribute",
38
24
  ]);
39
- /**
40
- * The tag name codegen reads GIR constructors under.
41
- *
42
- * GIR spells constructors `<constructor>`, but `fast-xml-parser` rejects the
43
- * literal names `constructor`, `prototype`, and `__proto__` to guard against
44
- * prototype pollution, with no opt-out. {@link parseGirFile} rewrites the tag
45
- * to this token via `transformTagName` before that guard runs, so every
46
- * downstream lookup of a constructor child must use this constant rather than
47
- * the raw GIR name.
48
- */
49
- export const GIR_CONSTRUCTOR_TAG = "gir-constructor";
25
+ const GIR_CONSTRUCTOR_TAG = "gir-constructor";
50
26
  const RESERVED_TAG_RENAMES = new Map([["constructor", GIR_CONSTRUCTOR_TAG]]);
51
- /**
52
- * Maps a GIR tag name to the token the parser exposes it under, rewriting the
53
- * names {@link RESERVED_TAG_RENAMES} covers and passing every other tag
54
- * through unchanged.
55
- *
56
- * @param tag - The raw GIR tag name
57
- */
58
- const renameReservedTag = (tag) => RESERVED_TAG_RENAMES.get(tag) ?? tag;
59
- const RENAMED_MULTI_TAGS = new Set([...MULTI_TAGS].map(renameReservedTag));
60
- const PARSER = new XMLParser({
61
- ignoreAttributes: false,
62
- attributeNamePrefix: "@_",
63
- parseAttributeValue: false,
64
- parseTagValue: false,
27
+ const RENAMED_MULTI_TAGS = new Set([...MULTI_TAGS].map((tag) => renameReservedTag(tag)));
28
+ const PARSER = createXmlParser({
65
29
  trimValues: true,
66
30
  transformTagName: renameReservedTag,
67
31
  isArray: (name) => RENAMED_MULTI_TAGS.has(name),
68
32
  });
69
- /**
70
- * Parses a GIR XML file from disk and returns its raw tree.
71
- *
72
- * The returned object always has a single `repository` property containing
73
- * the root `<repository>` element. Callers should not interpret the tree
74
- * directly — pass it to {@link GirRepository.load} (in `./repository.ts`),
75
- * which builds the typed domain model on top of it.
76
- *
77
- * @param path - Absolute path to a `.gir` file
78
- * @returns The raw repository node
79
- */
80
- export const parseGirFile = (path) => {
81
- const xml = readFileSync(path, "utf-8");
33
+ function renameReservedTag(tag) {
34
+ return RESERVED_TAG_RENAMES.get(tag) ?? tag;
35
+ }
36
+ const parseGirFile = (path) => {
37
+ const xml = readFileSync(path, "utf8");
82
38
  return PARSER.parse(xml);
83
39
  };
84
- /**
85
- * Reads an attribute from a raw GIR node as a string, returning `undefined`
86
- * when the attribute is absent.
87
- *
88
- * The `@_` prefix is added by `fast-xml-parser`; this helper hides that
89
- * convention from the call sites.
90
- *
91
- * @param node - The raw element
92
- * @param name - The attribute name (without the `@_` prefix)
93
- */
94
- export const attr = (node, name) => {
95
- if (node === undefined)
40
+ const attr = (node, name) => {
41
+ if (node === undefined) {
96
42
  return undefined;
43
+ }
97
44
  const value = node[`@_${name}`];
98
45
  return typeof value === "string" ? value : undefined;
99
46
  };
100
- /**
101
- * Reads an attribute as a boolean using GIR's `"1"` / `"0"` convention.
102
- *
103
- * Attributes that are missing return the supplied default (defaulting to
104
- * `false`). Any non-`"1"` value is treated as `false`.
105
- *
106
- * @param node - The raw element
107
- * @param name - The attribute name (without the `@_` prefix)
108
- * @param fallback - Value returned when the attribute is missing
109
- */
110
- export const attrBool = (node, name, fallback = false) => {
47
+ const isAttrTrue = (node, name, isTrueByDefault = false) => {
111
48
  const value = attr(node, name);
112
- if (value === undefined)
113
- return fallback;
49
+ if (value === undefined) {
50
+ return isTrueByDefault;
51
+ }
114
52
  return value === "1";
115
53
  };
116
- /**
117
- * Returns the children of a raw node under a given tag name as an array.
118
- *
119
- * The parser configuration forces multi-occurrence tags to arrays already;
120
- * this helper covers the residual case where a tag was registered as
121
- * single-occurrence at the schema level but a particular file emits zero
122
- * elements (returning `[]`) or where the caller wants a uniform array view.
123
- *
124
- * @param node - The parent element
125
- * @param tag - The child tag name (with namespace prefix if any)
126
- */
127
- export const childrenOf = (node, tag) => {
128
- if (node === undefined)
54
+ const nameAttr = (node) => attr(node, "name") ?? "";
55
+ const intAttr = (node, name) => {
56
+ const raw = attr(node, name);
57
+ return raw === undefined ? undefined : Number(raw);
58
+ };
59
+ const enumMember = (raw, members, label) => {
60
+ for (const member of members) {
61
+ if (member === raw) {
62
+ return member;
63
+ }
64
+ }
65
+ throw new Error(`Unknown ${label} value "${raw}"`);
66
+ };
67
+ const parseEnumAttr = (raw, members, fallback, label) => (raw === undefined ? fallback : enumMember(raw, members, label));
68
+ const getChildren = (node, tag) => {
69
+ if (node === undefined) {
129
70
  return [];
71
+ }
130
72
  const value = node[tag];
131
- if (value === undefined)
73
+ if (value === undefined) {
132
74
  return [];
133
- if (Array.isArray(value))
75
+ }
76
+ if (Array.isArray(value)) {
134
77
  return value;
78
+ }
135
79
  return [value];
136
80
  };
137
- /**
138
- * Returns the single child of a raw node under a given tag, or `undefined`
139
- * if absent. If multiple are present the first is returned.
140
- *
141
- * @param node - The parent element
142
- * @param tag - The child tag name (with namespace prefix if any)
143
- */
144
- export const childOf = (node, tag) => {
145
- if (node === undefined)
81
+ const getChild = (node, tag) => {
82
+ if (node === undefined) {
146
83
  return undefined;
84
+ }
147
85
  const value = node[tag];
148
- if (value === undefined)
86
+ if (value === undefined) {
149
87
  return undefined;
88
+ }
150
89
  if (Array.isArray(value)) {
151
90
  return value.length === 0 ? undefined : value[0];
152
91
  }
153
92
  return value;
154
93
  };
94
+ const normalizeDoc = (text) => {
95
+ const trimmed = text.trim();
96
+ return trimmed.length === 0 ? undefined : trimmed;
97
+ };
98
+ const firstDocValue = (raw) => (Array.isArray(raw) ? raw[0] : raw);
99
+ const docTextFromObject = (value) => {
100
+ const text = value["#text"];
101
+ return typeof text === "string" ? normalizeDoc(text) : undefined;
102
+ };
103
+ const getDoc = (node) => {
104
+ if (node === undefined) {
105
+ return undefined;
106
+ }
107
+ const value = firstDocValue(node.doc);
108
+ if (typeof value === "string") {
109
+ return normalizeDoc(value);
110
+ }
111
+ if (value === null || typeof value !== "object") {
112
+ return undefined;
113
+ }
114
+ return docTextFromObject(value);
115
+ };
116
+ export { GIR_CONSTRUCTOR_TAG, parseGirFile, attr, isAttrTrue, nameAttr, intAttr, parseEnumAttr, getChildren, getChild, getDoc, };
155
117
  //# sourceMappingURL=parse.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"parse.js","sourceRoot":"","sources":["../../src/gir/parse.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAe5C;;;;;;;GAOG;AACH,MAAM,UAAU,GAAwB,IAAI,GAAG,CAAC;IAC5C,SAAS;IACT,WAAW;IACX,SAAS;IACT,OAAO;IACP,WAAW;IACX,QAAQ;IACR,aAAa;IACb,UAAU;IACV,UAAU;IACV,UAAU;IACV,gBAAgB;IAChB,UAAU;IACV,OAAO;IACP,OAAO;IACP,YAAY;IACZ,QAAQ;IACR,aAAa;IACb,gBAAgB;IAChB,UAAU;IACV,OAAO;IACP,aAAa;IACb,YAAY;IACZ,cAAc;IACd,QAAQ;IACR,WAAW;IACX,WAAW;CACd,CAAC,CAAC;AAEH;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,iBAAiB,CAAC;AAErD,MAAM,oBAAoB,GAAgC,IAAI,GAAG,CAAC,CAAC,CAAC,aAAa,EAAE,mBAAmB,CAAC,CAAC,CAAC,CAAC;AAE1G;;;;;;GAMG;AACH,MAAM,iBAAiB,GAAG,CAAC,GAAW,EAAU,EAAE,CAAC,oBAAoB,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC;AAExF,MAAM,kBAAkB,GAAwB,IAAI,GAAG,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC;AAEhG,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;IACzB,gBAAgB,EAAE,KAAK;IACvB,mBAAmB,EAAE,IAAI;IACzB,mBAAmB,EAAE,KAAK;IAC1B,aAAa,EAAE,KAAK;IACpB,UAAU,EAAE,IAAI;IAChB,gBAAgB,EAAE,iBAAiB;IACnC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC;CAClD,CAAC,CAAC;AAEH;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,IAAY,EAAW,EAAE;IAClD,MAAM,GAAG,GAAG,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACxC,OAAO,MAAM,CAAC,KAAK,CAAC,GAAG,CAAY,CAAC;AACxC,CAAC,CAAC;AAEF;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,IAAyB,EAAE,IAAY,EAAsB,EAAE;IAChF,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IACzC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;IAChC,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AACzD,CAAC,CAAC;AAEF;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,IAAyB,EAAE,IAAY,EAAE,QAAQ,GAAG,KAAK,EAAW,EAAE;IAC3F,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC/B,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,QAAQ,CAAC;IACzC,OAAO,KAAK,KAAK,GAAG,CAAC;AACzB,CAAC,CAAC;AAEF;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,IAAyB,EAAE,GAAW,EAAsB,EAAE;IACrF,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,EAAE,CAAC;IAClC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;IACxB,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,EAAE,CAAC;IACnC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,KAA2B,CAAC;IAC7D,OAAO,CAAC,KAAgB,CAAC,CAAC;AAC9B,CAAC,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,IAAyB,EAAE,GAAW,EAAuB,EAAE;IACnF,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IACzC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;IACxB,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC1C,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAE,KAAK,CAAC,CAAC,CAAa,CAAC;IAClE,CAAC;IACD,OAAO,KAAgB,CAAC;AAC5B,CAAC,CAAC"}
1
+ {"version":3,"file":"parse.js","sourceRoot":"","sources":["../../src/gir/parse.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAI5C,MAAM,UAAU,GAAgB,IAAI,GAAG,CAAC;IACpC,SAAS;IACT,OAAO;IACP,WAAW;IACX,QAAQ;IACR,aAAa;IACb,UAAU;IACV,UAAU;IACV,UAAU;IACV,UAAU;IACV,OAAO;IACP,OAAO;IACP,QAAQ;IACR,aAAa;IACb,UAAU;IACV,OAAO;IACP,aAAa;IACb,YAAY;IACZ,cAAc;IACd,QAAQ;IACR,WAAW;CACd,CAAC,CAAC;AAEH,MAAM,mBAAmB,GAAG,iBAAiB,CAAC;AAC9C,MAAM,oBAAoB,GAAwB,IAAI,GAAG,CAAC,CAAC,CAAC,aAAa,EAAE,mBAAmB,CAAC,CAAC,CAAC,CAAC;AAClG,MAAM,kBAAkB,GAAgB,IAAI,GAAG,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAEtG,MAAM,MAAM,GAAG,eAAe,CAAC;IAC3B,UAAU,EAAE,IAAI;IAChB,gBAAgB,EAAE,iBAAiB;IACnC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC;CAClD,CAAC,CAAC;AAEH,SAAS,iBAAiB,CAAC,GAAW;IAClC,OAAO,oBAAoB,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC;AAChD,CAAC;AAED,MAAM,YAAY,GAAG,CAAC,IAAY,EAAW,EAAE;IAC3C,MAAM,GAAG,GAAG,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAEvC,OAAO,MAAM,CAAC,KAAK,CAAC,GAAG,CAAY,CAAC;AACxC,CAAC,CAAC;AAEF,MAAM,IAAI,GAAG,CAAC,IAAyB,EAAE,IAAY,EAAsB,EAAE;IACzE,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACrB,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;IAEhC,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AACzD,CAAC,CAAC;AAEF,MAAM,UAAU,GAAG,CAAC,IAAyB,EAAE,IAAY,EAAE,eAAe,GAAG,KAAK,EAAW,EAAE;IAC7F,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAE/B,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACtB,OAAO,eAAe,CAAC;IAC3B,CAAC;IAED,OAAO,KAAK,KAAK,GAAG,CAAC;AACzB,CAAC,CAAC;AAEF,MAAM,QAAQ,GAAG,CAAC,IAAa,EAAU,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC;AAErE,MAAM,OAAO,GAAG,CAAC,IAAa,EAAE,IAAY,EAAsB,EAAE;IAChE,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAE7B,OAAO,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AACvD,CAAC,CAAC;AAEF,MAAM,UAAU,GAAG,CAAmB,GAAW,EAAE,OAAe,EAAE,KAAa,EAAK,EAAE;IACpF,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC3B,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;YACjB,OAAO,MAAM,CAAC;QAClB,CAAC;IACL,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,WAAW,KAAK,WAAW,GAAG,GAAG,CAAC,CAAC;AACvD,CAAC,CAAC;AAEF,MAAM,aAAa,GAAG,CAClB,GAAuB,EACvB,OAAe,EACf,QAAW,EACX,KAAa,EACR,EAAE,CAAC,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;AAE7E,MAAM,WAAW,GAAG,CAAC,IAAyB,EAAE,GAAW,EAAa,EAAE;IACtE,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACrB,OAAO,EAAE,CAAC;IACd,CAAC;IAED,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;IAExB,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACtB,OAAO,EAAE,CAAC;IACd,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,KAAkB,CAAC;IAC9B,CAAC;IAED,OAAO,CAAC,KAAgB,CAAC,CAAC;AAC9B,CAAC,CAAC;AAEF,MAAM,QAAQ,GAAG,CAAC,IAAyB,EAAE,GAAW,EAAuB,EAAE;IAC7E,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACrB,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;IAExB,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACtB,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAE,KAAK,CAAC,CAAC,CAAa,CAAC;IAClE,CAAC;IAED,OAAO,KAAgB,CAAC;AAC5B,CAAC,CAAC;AAEF,MAAM,YAAY,GAAG,CAAC,IAAY,EAAsB,EAAE;IACtD,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IAE5B,OAAO,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC;AACtD,CAAC,CAAC;AAEF,MAAM,aAAa,GAAG,CAAC,GAAY,EAAW,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AAErF,MAAM,iBAAiB,GAAG,CAAC,KAAa,EAAsB,EAAE;IAC5D,MAAM,IAAI,GAAI,KAAiB,CAAC,OAAO,CAAC,CAAC;IAEzC,OAAO,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AACrE,CAAC,CAAC;AAEF,MAAM,MAAM,GAAG,CAAC,IAAyB,EAAsB,EAAE;IAC7D,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACrB,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,MAAM,KAAK,GAAG,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAEtC,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC5B,OAAO,YAAY,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC;IAED,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9C,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,OAAO,iBAAiB,CAAC,KAAK,CAAC,CAAC;AACpC,CAAC,CAAC;AAEF,OAAO,EACH,mBAAmB,EACnB,YAAY,EACZ,IAAI,EACJ,UAAU,EACV,QAAQ,EACR,OAAO,EACP,aAAa,EACb,WAAW,EACX,QAAQ,EACR,MAAM,GAET,CAAC","sourcesContent":["import { readFileSync } from \"node:fs\";\nimport { createXmlParser } from \"../xml.js\";\n\ntype RawNode = Record<string, unknown>;\n\nconst MULTI_TAGS: Set<string> = new Set([\n \"include\",\n \"class\",\n \"interface\",\n \"record\",\n \"enumeration\",\n \"bitfield\",\n \"callback\",\n \"function\",\n \"constant\",\n \"alias\",\n \"union\",\n \"method\",\n \"constructor\",\n \"property\",\n \"field\",\n \"glib:signal\",\n \"implements\",\n \"prerequisite\",\n \"member\",\n \"parameter\",\n]);\n\nconst GIR_CONSTRUCTOR_TAG = \"gir-constructor\";\nconst RESERVED_TAG_RENAMES: Map<string, string> = new Map([[\"constructor\", GIR_CONSTRUCTOR_TAG]]);\nconst RENAMED_MULTI_TAGS: Set<string> = new Set([...MULTI_TAGS].map((tag) => renameReservedTag(tag)));\n\nconst PARSER = createXmlParser({\n trimValues: true,\n transformTagName: renameReservedTag,\n isArray: (name) => RENAMED_MULTI_TAGS.has(name),\n});\n\nfunction renameReservedTag(tag: string): string {\n return RESERVED_TAG_RENAMES.get(tag) ?? tag;\n}\n\nconst parseGirFile = (path: string): RawNode => {\n const xml = readFileSync(path, \"utf8\");\n\n return PARSER.parse(xml) as RawNode;\n};\n\nconst attr = (node: RawNode | undefined, name: string): string | undefined => {\n if (node === undefined) {\n return undefined;\n }\n\n const value = node[`@_${name}`];\n\n return typeof value === \"string\" ? value : undefined;\n};\n\nconst isAttrTrue = (node: RawNode | undefined, name: string, isTrueByDefault = false): boolean => {\n const value = attr(node, name);\n\n if (value === undefined) {\n return isTrueByDefault;\n }\n\n return value === \"1\";\n};\n\nconst nameAttr = (node: RawNode): string => attr(node, \"name\") ?? \"\";\n\nconst intAttr = (node: RawNode, name: string): number | undefined => {\n const raw = attr(node, name);\n\n return raw === undefined ? undefined : Number(raw);\n};\n\nconst enumMember = <T extends string>(raw: string, members: Set<T>, label: string): T => {\n for (const member of members) {\n if (member === raw) {\n return member;\n }\n }\n\n throw new Error(`Unknown ${label} value \"${raw}\"`);\n};\n\nconst parseEnumAttr = <T extends string, F extends T | undefined>(\n raw: string | undefined,\n members: Set<T>,\n fallback: F,\n label: string,\n): T | F => (raw === undefined ? fallback : enumMember(raw, members, label));\n\nconst getChildren = (node: RawNode | undefined, tag: string): RawNode[] => {\n if (node === undefined) {\n return [];\n }\n\n const value = node[tag];\n\n if (value === undefined) {\n return [];\n }\n\n if (Array.isArray(value)) {\n return value as RawNode[];\n }\n\n return [value as RawNode];\n};\n\nconst getChild = (node: RawNode | undefined, tag: string): RawNode | undefined => {\n if (node === undefined) {\n return undefined;\n }\n\n const value = node[tag];\n\n if (value === undefined) {\n return undefined;\n }\n\n if (Array.isArray(value)) {\n return value.length === 0 ? undefined : (value[0] as RawNode);\n }\n\n return value as RawNode;\n};\n\nconst normalizeDoc = (text: string): string | undefined => {\n const trimmed = text.trim();\n\n return trimmed.length === 0 ? undefined : trimmed;\n};\n\nconst firstDocValue = (raw: unknown): unknown => (Array.isArray(raw) ? raw[0] : raw);\n\nconst docTextFromObject = (value: object): string | undefined => {\n const text = (value as RawNode)[\"#text\"];\n\n return typeof text === \"string\" ? normalizeDoc(text) : undefined;\n};\n\nconst getDoc = (node: RawNode | undefined): string | undefined => {\n if (node === undefined) {\n return undefined;\n }\n\n const value = firstDocValue(node.doc);\n\n if (typeof value === \"string\") {\n return normalizeDoc(value);\n }\n\n if (value === null || typeof value !== \"object\") {\n return undefined;\n }\n\n return docTextFromObject(value);\n};\n\nexport {\n GIR_CONSTRUCTOR_TAG,\n parseGirFile,\n attr,\n isAttrTrue,\n nameAttr,\n intAttr,\n parseEnumAttr,\n getChildren,\n getChild,\n getDoc,\n type RawNode,\n};\n"]}