@gtkx/codegen 1.0.0-rc.1 → 1.0.0-rc.3

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 (531) hide show
  1. package/dist/analysis/descriptor-render.d.ts +20 -11
  2. package/dist/analysis/descriptor-render.d.ts.map +1 -1
  3. package/dist/analysis/descriptor-render.js +296 -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 +71 -29
  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 +192 -123
  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 +69 -133
  32. package/dist/docs/element-page.js.map +1 -1
  33. package/dist/docs/pipeline.d.ts +10 -7
  34. package/dist/docs/pipeline.d.ts.map +1 -1
  35. package/dist/docs/pipeline.js +81 -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 +29 -5
  46. package/dist/fingerprint.d.ts.map +1 -1
  47. package/dist/fingerprint.js +69 -13
  48. package/dist/fingerprint.js.map +1 -1
  49. package/dist/gi.d.ts +18 -0
  50. package/dist/gi.d.ts.map +1 -0
  51. package/dist/gi.js +23 -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 +5 -3
  82. package/dist/gir/libraries.d.ts.map +1 -1
  83. package/dist/gir/libraries.js +41 -28
  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 +3 -0
  133. package/dist/index.d.ts.map +1 -1
  134. package/dist/index.js +2 -0
  135. package/dist/index.js.map +1 -1
  136. package/dist/jsx.d.ts +28 -0
  137. package/dist/jsx.d.ts.map +1 -0
  138. package/dist/jsx.js +44 -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 +20 -0
  181. package/dist/react/element-config.d.ts.map +1 -0
  182. package/dist/react/element-config.js +64 -0
  183. package/dist/react/element-config.js.map +1 -0
  184. package/dist/runner.d.ts +19 -10
  185. package/dist/runner.d.ts.map +1 -1
  186. package/dist/runner.js +48 -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 +157 -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.d.ts +2 -1
  205. package/dist/store/gi/class.d.ts.map +1 -1
  206. package/dist/store/gi/class.js +86 -47
  207. package/dist/store/gi/class.js.map +1 -1
  208. package/dist/store/gi/companion.d.ts +2 -1
  209. package/dist/store/gi/companion.d.ts.map +1 -1
  210. package/dist/store/gi/companion.js +8 -5
  211. package/dist/store/gi/companion.js.map +1 -1
  212. package/dist/store/gi/constant.d.ts +3 -2
  213. package/dist/store/gi/constant.d.ts.map +1 -1
  214. package/dist/store/gi/constant.js +25 -8
  215. package/dist/store/gi/constant.js.map +1 -1
  216. package/dist/store/gi/constructor-props.d.ts +3 -2
  217. package/dist/store/gi/constructor-props.d.ts.map +1 -1
  218. package/dist/store/gi/constructor-props.js +17 -10
  219. package/dist/store/gi/constructor-props.js.map +1 -1
  220. package/dist/store/gi/enum.d.ts +3 -2
  221. package/dist/store/gi/enum.d.ts.map +1 -1
  222. package/dist/store/gi/enum.js +14 -11
  223. package/dist/store/gi/enum.js.map +1 -1
  224. package/dist/store/gi/function.d.ts +5 -4
  225. package/dist/store/gi/function.d.ts.map +1 -1
  226. package/dist/store/gi/function.js +48 -23
  227. package/dist/store/gi/function.js.map +1 -1
  228. package/dist/store/gi/gtype-binding.d.ts +4 -4
  229. package/dist/store/gi/gtype-binding.d.ts.map +1 -1
  230. package/dist/store/gi/gtype-binding.js +15 -11
  231. package/dist/store/gi/gtype-binding.js.map +1 -1
  232. package/dist/store/gi/interface.d.ts +2 -1
  233. package/dist/store/gi/interface.d.ts.map +1 -1
  234. package/dist/store/gi/interface.js +36 -18
  235. package/dist/store/gi/interface.js.map +1 -1
  236. package/dist/store/gi/item-comparators.d.ts +3 -2
  237. package/dist/store/gi/item-comparators.d.ts.map +1 -1
  238. package/dist/store/gi/item-comparators.js +33 -21
  239. package/dist/store/gi/item-comparators.js.map +1 -1
  240. package/dist/store/gi/method.d.ts +13 -13
  241. package/dist/store/gi/method.d.ts.map +1 -1
  242. package/dist/store/gi/method.js +188 -130
  243. package/dist/store/gi/method.js.map +1 -1
  244. package/dist/store/gi/param-marshal.d.ts +7 -6
  245. package/dist/store/gi/param-marshal.d.ts.map +1 -1
  246. package/dist/store/gi/param-marshal.js +26 -13
  247. package/dist/store/gi/param-marshal.js.map +1 -1
  248. package/dist/store/gi/pipeline.d.ts +2 -1
  249. package/dist/store/gi/pipeline.d.ts.map +1 -1
  250. package/dist/store/gi/pipeline.js +38 -23
  251. package/dist/store/gi/pipeline.js.map +1 -1
  252. package/dist/store/gi/properties.d.ts +2 -1
  253. package/dist/store/gi/properties.d.ts.map +1 -1
  254. package/dist/store/gi/properties.js +6 -4
  255. package/dist/store/gi/properties.js.map +1 -1
  256. package/dist/store/gi/property-accessor.d.ts +11 -10
  257. package/dist/store/gi/property-accessor.d.ts.map +1 -1
  258. package/dist/store/gi/property-accessor.js +86 -60
  259. package/dist/store/gi/property-accessor.js.map +1 -1
  260. package/dist/store/gi/record-constructor.d.ts +3 -2
  261. package/dist/store/gi/record-constructor.d.ts.map +1 -1
  262. package/dist/store/gi/record-constructor.js +40 -28
  263. package/dist/store/gi/record-constructor.js.map +1 -1
  264. package/dist/store/gi/record-field-accessor.d.ts +9 -8
  265. package/dist/store/gi/record-field-accessor.d.ts.map +1 -1
  266. package/dist/store/gi/record-field-accessor.js +187 -99
  267. package/dist/store/gi/record-field-accessor.js.map +1 -1
  268. package/dist/store/gi/record-layout.d.ts +6 -5
  269. package/dist/store/gi/record-layout.d.ts.map +1 -1
  270. package/dist/store/gi/record-layout.js +75 -39
  271. package/dist/store/gi/record-layout.js.map +1 -1
  272. package/dist/store/gi/record.d.ts +2 -1
  273. package/dist/store/gi/record.d.ts.map +1 -1
  274. package/dist/store/gi/record.js +15 -16
  275. package/dist/store/gi/record.js.map +1 -1
  276. package/dist/store/gi/registration.d.ts +3 -3
  277. package/dist/store/gi/registration.d.ts.map +1 -1
  278. package/dist/store/gi/registration.js +3 -2
  279. package/dist/store/gi/registration.js.map +1 -1
  280. package/dist/store/gi/return-wrap.d.ts +2 -2
  281. package/dist/store/gi/return-wrap.d.ts.map +1 -1
  282. package/dist/store/gi/return-wrap.js +43 -22
  283. package/dist/store/gi/return-wrap.js.map +1 -1
  284. package/dist/store/gi/runtime-override.d.ts +2 -1
  285. package/dist/store/gi/runtime-override.d.ts.map +1 -1
  286. package/dist/store/gi/runtime-override.js +6 -3
  287. package/dist/store/gi/runtime-override.js.map +1 -1
  288. package/dist/store/gi/signal.d.ts +3 -2
  289. package/dist/store/gi/signal.d.ts.map +1 -1
  290. package/dist/store/gi/signal.js +113 -66
  291. package/dist/store/gi/signal.js.map +1 -1
  292. package/dist/store/gi/value-marshalable.d.ts +15 -0
  293. package/dist/store/gi/value-marshalable.d.ts.map +1 -0
  294. package/dist/store/gi/value-marshalable.js +66 -0
  295. package/dist/store/gi/value-marshalable.js.map +1 -0
  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 +26 -0
  321. package/dist/store/jsx/intrinsic-elements.d.ts.map +1 -0
  322. package/dist/store/jsx/intrinsic-elements.js +127 -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/omitted-props.d.ts +10 -0
  333. package/dist/store/jsx/omitted-props.d.ts.map +1 -0
  334. package/dist/store/jsx/omitted-props.js +22 -0
  335. package/dist/store/jsx/omitted-props.js.map +1 -0
  336. package/dist/store/jsx/pipeline.d.ts +23 -0
  337. package/dist/store/jsx/pipeline.d.ts.map +1 -0
  338. package/dist/store/{react → jsx}/pipeline.js +38 -15
  339. package/dist/store/jsx/pipeline.js.map +1 -0
  340. package/dist/store/{react → jsx}/props.d.ts +9 -12
  341. package/dist/store/jsx/props.d.ts.map +1 -0
  342. package/dist/store/jsx/props.js +153 -0
  343. package/dist/store/jsx/props.js.map +1 -0
  344. package/dist/store/jsx-store.d.ts +5 -3
  345. package/dist/store/jsx-store.d.ts.map +1 -1
  346. package/dist/store/jsx-store.js +4 -1
  347. package/dist/store/jsx-store.js.map +1 -1
  348. package/dist/store/store-fs.d.ts +14 -12
  349. package/dist/store/store-fs.d.ts.map +1 -1
  350. package/dist/store/store-fs.js +9 -7
  351. package/dist/store/store-fs.js.map +1 -1
  352. package/dist/writer/context.d.ts +2 -1
  353. package/dist/writer/context.d.ts.map +1 -1
  354. package/dist/writer/context.js +12 -6
  355. package/dist/writer/context.js.map +1 -1
  356. package/dist/writer/doc.d.ts +2 -1
  357. package/dist/writer/doc.d.ts.map +1 -1
  358. package/dist/writer/doc.js +13 -7
  359. package/dist/writer/doc.js.map +1 -1
  360. package/dist/writer/emit.d.ts +8 -7
  361. package/dist/writer/emit.d.ts.map +1 -1
  362. package/dist/writer/emit.js +13 -10
  363. package/dist/writer/emit.js.map +1 -1
  364. package/dist/writer/gtk-doc.d.ts +2 -1
  365. package/dist/writer/gtk-doc.d.ts.map +1 -1
  366. package/dist/writer/gtk-doc.js +29 -18
  367. package/dist/writer/gtk-doc.js.map +1 -1
  368. package/dist/writer/imports.d.ts +4 -2
  369. package/dist/writer/imports.d.ts.map +1 -1
  370. package/dist/writer/imports.js +35 -24
  371. package/dist/writer/imports.js.map +1 -1
  372. package/dist/writer/module.d.ts +3 -2
  373. package/dist/writer/module.d.ts.map +1 -1
  374. package/dist/writer/module.js +16 -9
  375. package/dist/writer/module.js.map +1 -1
  376. package/dist/xml.d.ts +4 -0
  377. package/dist/xml.d.ts.map +1 -0
  378. package/dist/xml.js +10 -0
  379. package/dist/xml.js.map +1 -0
  380. package/overrides/cairo/context.ts.ejs +7 -7
  381. package/overrides/cairo/matrix.ts.ejs +2 -2
  382. package/overrides/cairo/recording-surface.ts.ejs +2 -2
  383. package/overrides/cairo/region.ts.ejs +1 -1
  384. package/overrides/cairo/scaled-font.ts.ejs +3 -3
  385. package/package.json +14 -9
  386. package/src/analysis/descriptor-render.ts +516 -168
  387. package/src/analysis/descriptor.ts +162 -125
  388. package/src/analysis/inheritance.ts +286 -98
  389. package/src/analysis/param-structure.ts +188 -57
  390. package/src/analysis/ts-type.ts +113 -34
  391. package/src/compile.ts +103 -76
  392. package/src/docs/api-reference.ts +337 -146
  393. package/src/docs/element-page.ts +137 -150
  394. package/src/docs/pipeline.ts +135 -73
  395. package/src/docs/render.ts +151 -87
  396. package/src/docs/symbol-page.ts +268 -123
  397. package/src/fingerprint.ts +138 -26
  398. package/src/gi.ts +35 -0
  399. package/src/gir/ancestry.ts +26 -14
  400. package/src/gir/callback.ts +10 -15
  401. package/src/gir/class.ts +20 -16
  402. package/src/gir/enum.ts +9 -7
  403. package/src/gir/field.ts +37 -8
  404. package/src/gir/function.ts +33 -9
  405. package/src/gir/gir-path.ts +36 -12
  406. package/src/gir/libraries.ts +59 -33
  407. package/src/gir/library.ts +200 -97
  408. package/src/gir/namespace.ts +42 -26
  409. package/src/gir/nullable-overrides.ts +5 -0
  410. package/src/gir/parameter.ts +80 -42
  411. package/src/gir/parse.ts +102 -47
  412. package/src/gir/primitives.ts +25 -23
  413. package/src/gir/property.ts +13 -11
  414. package/src/gir/record.ts +16 -14
  415. package/src/gir/size.ts +91 -58
  416. package/src/gir/type-id.ts +33 -18
  417. package/src/gir/type-ref.ts +62 -26
  418. package/src/gir/type.ts +10 -8
  419. package/src/index.ts +8 -0
  420. package/src/jsx.ts +75 -0
  421. package/src/khronos/args.ts +158 -89
  422. package/src/khronos/jsdoc.ts +67 -29
  423. package/src/khronos/model.ts +154 -53
  424. package/src/khronos/modules.ts +67 -27
  425. package/src/khronos/param-pair.ts +14 -0
  426. package/src/khronos/parse.ts +37 -17
  427. package/src/khronos/pipeline.ts +193 -90
  428. package/src/khronos/plan.ts +235 -86
  429. package/src/khronos/render.ts +208 -71
  430. package/src/khronos/select.ts +48 -18
  431. package/src/react/element-config.ts +97 -0
  432. package/src/runner.ts +100 -57
  433. package/src/store/compile-store.ts +32 -26
  434. package/src/store/gi/async.ts +48 -21
  435. package/src/store/gi/callables.ts +339 -136
  436. package/src/store/gi/callback.ts +13 -4
  437. package/src/store/gi/class.ts +186 -64
  438. package/src/store/gi/companion.ts +15 -6
  439. package/src/store/gi/constant.ts +42 -8
  440. package/src/store/gi/constructor-props.ts +42 -16
  441. package/src/store/gi/enum.ts +28 -13
  442. package/src/store/gi/function.ts +88 -24
  443. package/src/store/gi/gtype-binding.ts +31 -18
  444. package/src/store/gi/interface.ts +101 -36
  445. package/src/store/gi/item-comparators.ts +74 -26
  446. package/src/store/gi/method.ts +377 -159
  447. package/src/store/gi/param-marshal.ts +38 -15
  448. package/src/store/gi/pipeline.ts +72 -22
  449. package/src/store/gi/properties.ts +16 -5
  450. package/src/store/gi/property-accessor.ts +192 -84
  451. package/src/store/gi/record-constructor.ts +70 -33
  452. package/src/store/gi/record-field-accessor.ts +415 -167
  453. package/src/store/gi/record-layout.ts +130 -43
  454. package/src/store/gi/record.ts +29 -15
  455. package/src/store/gi/registration.ts +15 -9
  456. package/src/store/gi/return-wrap.ts +71 -23
  457. package/src/store/gi/runtime-override.ts +13 -3
  458. package/src/store/gi/signal.ts +244 -104
  459. package/src/store/gi/value-marshalable.ts +96 -0
  460. package/src/store/gi/vtable.ts +117 -41
  461. package/src/store/gi-store.ts +26 -13
  462. package/src/store/jsx/element-components.ts +152 -0
  463. package/src/store/jsx/element-prop-imports.ts +24 -0
  464. package/src/store/jsx/element-prop-types.ts +59 -0
  465. package/src/store/jsx/gir-index.ts +62 -0
  466. package/src/store/jsx/intrinsic-elements.ts +253 -0
  467. package/src/store/{react → jsx}/jsx.ts +213 -99
  468. package/src/store/jsx/metadata.ts +385 -0
  469. package/src/store/jsx/omitted-props.ts +32 -0
  470. package/src/store/jsx/pipeline.ts +148 -0
  471. package/src/store/jsx/props.ts +262 -0
  472. package/src/store/jsx-store.ts +15 -3
  473. package/src/store/store-fs.ts +36 -20
  474. package/src/writer/context.ts +25 -6
  475. package/src/writer/doc.ts +19 -5
  476. package/src/writer/emit.ts +20 -11
  477. package/src/writer/gtk-doc.ts +48 -21
  478. package/src/writer/imports.ts +63 -28
  479. package/src/writer/module.ts +35 -11
  480. package/src/xml.ts +12 -0
  481. package/dist/store/gi/class-struct-record.d.ts +0 -9
  482. package/dist/store/gi/class-struct-record.d.ts.map +0 -1
  483. package/dist/store/gi/class-struct-record.js +0 -34
  484. package/dist/store/gi/class-struct-record.js.map +0 -1
  485. package/dist/store/react/built-ins.d.ts +0 -9
  486. package/dist/store/react/built-ins.d.ts.map +0 -1
  487. package/dist/store/react/built-ins.js +0 -226
  488. package/dist/store/react/built-ins.js.map +0 -1
  489. package/dist/store/react/element-components.d.ts +0 -15
  490. package/dist/store/react/element-components.d.ts.map +0 -1
  491. package/dist/store/react/element-components.js +0 -92
  492. package/dist/store/react/element-components.js.map +0 -1
  493. package/dist/store/react/element-prop-types.d.ts +0 -19
  494. package/dist/store/react/element-prop-types.d.ts.map +0 -1
  495. package/dist/store/react/element-prop-types.js +0 -244
  496. package/dist/store/react/element-prop-types.js.map +0 -1
  497. package/dist/store/react/element-props.d.ts +0 -4
  498. package/dist/store/react/element-props.d.ts.map +0 -1
  499. package/dist/store/react/element-props.js +0 -178
  500. package/dist/store/react/element-props.js.map +0 -1
  501. package/dist/store/react/gir-index.d.ts +0 -25
  502. package/dist/store/react/gir-index.d.ts.map +0 -1
  503. package/dist/store/react/gir-index.js +0 -55
  504. package/dist/store/react/gir-index.js.map +0 -1
  505. package/dist/store/react/intrinsic-elements.d.ts +0 -26
  506. package/dist/store/react/intrinsic-elements.d.ts.map +0 -1
  507. package/dist/store/react/intrinsic-elements.js +0 -107
  508. package/dist/store/react/intrinsic-elements.js.map +0 -1
  509. package/dist/store/react/jsx.d.ts.map +0 -1
  510. package/dist/store/react/jsx.js.map +0 -1
  511. package/dist/store/react/metadata.d.ts +0 -4
  512. package/dist/store/react/metadata.d.ts.map +0 -1
  513. package/dist/store/react/metadata.js.map +0 -1
  514. package/dist/store/react/pipeline.d.ts +0 -14
  515. package/dist/store/react/pipeline.d.ts.map +0 -1
  516. package/dist/store/react/pipeline.js.map +0 -1
  517. package/dist/store/react/props.d.ts.map +0 -1
  518. package/dist/store/react/props.js +0 -133
  519. package/dist/store/react/props.js.map +0 -1
  520. package/overrides/gtk/constants.ts.ejs +0 -3
  521. package/overrides/gtk/index.ts.ejs +0 -2
  522. package/src/store/gi/class-struct-record.ts +0 -40
  523. package/src/store/react/built-ins.ts +0 -260
  524. package/src/store/react/element-components.ts +0 -138
  525. package/src/store/react/element-prop-types.ts +0 -280
  526. package/src/store/react/element-props.ts +0 -204
  527. package/src/store/react/gir-index.ts +0 -85
  528. package/src/store/react/intrinsic-elements.ts +0 -161
  529. package/src/store/react/metadata.ts +0 -197
  530. package/src/store/react/pipeline.ts +0 -90
  531. package/src/store/react/props.ts +0 -197
@@ -1,64 +1,87 @@
1
- import { readdirSync } from "node:fs";
2
- import type { Config } from "@gtkx/config";
3
- import { GIR_LIBRARY_PATTERN, LIBRARIES_WILDCARD } from "@gtkx/config/internal";
4
1
  import { sortStrings } from "@gtkx/utils";
2
+ import { readdirSync } from "node:fs";
5
3
 
6
- const DEFAULT_LIBRARIES: string[] = ["Gtk-4.0"];
4
+ type GirNamespace = { name: string; version: string; identifier: string };
5
+ type LibrarySelection = typeof LIBRARIES_WILDCARD | string[] | undefined;
7
6
 
7
+ const LIBRARIES_WILDCARD = "*";
8
+ const GIR_LIBRARY_PATTERN = /^[A-Za-z][A-Za-z0-9]*-\d+(?:\.\d+)*$/;
9
+ const DEFAULT_LIBRARIES: string[] = ["Gtk-4.0"];
8
10
  const GIR_FILE_SUFFIX = ".gir";
9
11
 
10
- export const resolveLibraries = (libraries: Config["libraries"], girPath: string[]): string[] => {
12
+ const resolveLibraries = (libraries: LibrarySelection, girPath: string[]): string[] => {
11
13
  if (libraries === undefined) {
12
14
  return [...DEFAULT_LIBRARIES];
13
15
  }
14
16
 
15
17
  if (libraries === LIBRARIES_WILDCARD) {
16
18
  const discovered = discoverGirNamespaces(girPath);
19
+
17
20
  if (discovered.length === 0) {
18
21
  throw new Error(
19
22
  `gtkx.config.ts: \`libraries: "*"\` matched no .gir files in [${girPath.join(", ")}]. ` +
20
- "Install gobject-introspection data packages, or list the libraries explicitly.",
23
+ "Install gobject-introspection data packages, or list the libraries explicitly.",
21
24
  );
22
25
  }
26
+
23
27
  return discovered;
24
28
  }
25
29
 
26
30
  const hasGtk = libraries.some((library) => library.startsWith("Gtk-"));
31
+
27
32
  return [...new Set([...(hasGtk ? [] : DEFAULT_LIBRARIES), ...libraries])];
28
33
  };
29
34
 
30
- export const discoverGirNamespaces = (girPath: string[]): string[] => {
31
- const highestByName = new Map<string, { version: string; identifier: string }>();
35
+ const readDirEntries = (dir: string): string[] => {
36
+ try {
37
+ return readdirSync(dir);
38
+ } catch {
39
+ return [];
40
+ }
41
+ };
32
42
 
33
- for (const dir of girPath) {
34
- let entries: string[];
35
- try {
36
- entries = readdirSync(dir);
37
- } catch {
38
- continue;
39
- }
43
+ const parseGirNamespace = (entry: string): GirNamespace | undefined => {
44
+ if (!entry.endsWith(GIR_FILE_SUFFIX)) {
45
+ return undefined;
46
+ }
47
+
48
+ const identifier = entry.slice(0, -GIR_FILE_SUFFIX.length);
49
+
50
+ if (!GIR_LIBRARY_PATTERN.test(identifier)) {
51
+ return undefined;
52
+ }
40
53
 
41
- for (const entry of entries) {
42
- if (!entry.endsWith(GIR_FILE_SUFFIX)) {
43
- continue;
44
- }
45
-
46
- const identifier = entry.slice(0, -GIR_FILE_SUFFIX.length);
47
- if (!GIR_LIBRARY_PATTERN.test(identifier)) {
48
- continue;
49
- }
50
-
51
- const separator = identifier.indexOf("-");
52
- const name = identifier.slice(0, separator);
53
- const version = identifier.slice(separator + 1);
54
- const existing = highestByName.get(name);
55
- if (existing === undefined || compareVersions(version, existing.version) > 0) {
56
- highestByName.set(name, { version, identifier });
57
- }
54
+ const separator = identifier.indexOf("-");
55
+
56
+ return { name: identifier.slice(0, separator), version: identifier.slice(separator + 1), identifier };
57
+ };
58
+
59
+ const recordHighest = (highestByName: Map<string, GirNamespace>, parsed: GirNamespace): void => {
60
+ const existing = highestByName.get(parsed.name);
61
+
62
+ if (existing === undefined || compareVersions(parsed.version, existing.version) > 0) {
63
+ highestByName.set(parsed.name, parsed);
64
+ }
65
+ };
66
+
67
+ const collectDirNamespaces = (highestByName: Map<string, GirNamespace>, dir: string): void => {
68
+ for (const entry of readDirEntries(dir)) {
69
+ const parsed = parseGirNamespace(entry);
70
+
71
+ if (parsed !== undefined) {
72
+ recordHighest(highestByName, parsed);
58
73
  }
59
74
  }
75
+ };
76
+
77
+ const discoverGirNamespaces = (girPath: string[]): string[] => {
78
+ const highestByName: Map<string, GirNamespace> = new Map();
60
79
 
61
- return sortStrings([...highestByName.values()].map(({ identifier }) => identifier));
80
+ for (const dir of girPath) {
81
+ collectDirNamespaces(highestByName, dir);
82
+ }
83
+
84
+ return sortStrings(highestByName.values().map(({ identifier }) => identifier));
62
85
  };
63
86
 
64
87
  const compareVersions = (a: string, b: string): number => {
@@ -68,6 +91,7 @@ const compareVersions = (a: string, b: string): number => {
68
91
 
69
92
  for (let index = 0; index < length; index += 1) {
70
93
  const difference = Number(aParts[index] ?? 0) - Number(bParts[index] ?? 0);
94
+
71
95
  if (difference !== 0) {
72
96
  return difference;
73
97
  }
@@ -75,3 +99,5 @@ const compareVersions = (a: string, b: string): number => {
75
99
 
76
100
  return 0;
77
101
  };
102
+
103
+ export { resolveLibraries, discoverGirNamespaces, type LibrarySelection };
@@ -1,5 +1,8 @@
1
1
  import { existsSync } from "node:fs";
2
2
  import { join } from "node:path";
3
+ import type { PrimitiveCategory } from "./primitives.js";
4
+ import type { CArrayType, HashTableType, ListType, ParseContext, TypeId } from "./type-id.js";
5
+ import type { GirType } from "./type.js";
3
6
  import { callbackFromNode } from "./callback.js";
4
7
  import {
5
8
  createNamespaceShell,
@@ -9,35 +12,73 @@ import {
9
12
  populateNamespaceBody,
10
13
  } from "./namespace.js";
11
14
  import { parseGirFile, type RawNode } from "./parse.js";
12
- import type { PrimitiveCategory } from "./primitives.js";
13
- import type { GirType } from "./type.js";
14
- import type { CArrayType, HashTableType, ListType, ParseContext, TypeId } from "./type-id.js";
15
15
  import { splitOptionalNamespace } from "./type-ref.js";
16
16
 
17
- const INTERNAL_NS_ID = 0;
18
-
19
17
  type TypeTable = {
20
18
  types: (GirType | undefined)[];
21
19
  names: (string | undefined)[];
22
20
  index: Map<string, number>;
23
21
  };
24
22
 
25
- export class Library {
26
- private namespacesByName = new Map<string, GirNamespace>();
27
- private namespaceById: (GirNamespace | undefined)[] = [];
28
- private nsNameById: string[] = [];
29
- private nsIdByName = new Map<string, number>();
30
- private typeTables: TypeTable[] = [];
31
- private girFilesValue: string[] = [];
23
+ type DiscoveredNamespace = { header: NamespaceHeader; shell: GirNamespace };
32
24
 
33
- public get namespaces(): Map<string, GirNamespace> {
34
- return this.namespacesByName;
25
+ const INTERNAL_NS_ID = 0;
26
+
27
+ const readRepositoryNode = (path: string): RawNode => {
28
+ const root = parseGirFile(path);
29
+ const repository = root.repository;
30
+
31
+ if (typeof repository !== "object" || repository === null) {
32
+ throw new Error(`GIR file at ${path} has no <repository> root`);
35
33
  }
36
34
 
37
- public get girFiles(): string[] {
38
- return this.girFilesValue;
35
+ return repository as RawNode;
36
+ };
37
+
38
+ const locateGirFile = (identifier: string, girPath: string[]): string => {
39
+ const filename = `${identifier}.gir`;
40
+
41
+ for (const directory of girPath) {
42
+ const candidate = join(directory, filename);
43
+
44
+ if (existsSync(candidate)) {
45
+ return candidate;
46
+ }
47
+ }
48
+
49
+ const tried = girPath.map((directory) => join(directory, filename)).join(", ");
50
+ throw new Error(`GIR file ${filename} not found on girPath. Tried: ${tried}`);
51
+ };
52
+
53
+ class Library {
54
+ private static drive(library: Library, libraries: string[], girPath: string[]): void {
55
+ const { discovered, girFiles } = library.discoverNamespaces(libraries, girPath);
56
+
57
+ for (const { header, shell } of discovered) {
58
+ populateNamespaceBody(shell, header.namespaceNode, library.parseContext(shell.id));
59
+ }
60
+
61
+ for (const { shell } of discovered) {
62
+ library.addDeclarations(shell);
63
+ }
64
+
65
+ library.girFilesValue = girFiles;
66
+ }
67
+
68
+ static load(libraries: string[], girPath: string[]): Library {
69
+ const library = new Library();
70
+ this.drive(library, libraries, girPath);
71
+
72
+ return library;
39
73
  }
40
74
 
75
+ private namespacesByName: Map<string, GirNamespace> = new Map();
76
+ private namespaceById: (GirNamespace | undefined)[] = [];
77
+ private nsNameById: string[] = [];
78
+ private nsIdByName: Map<string, number> = new Map();
79
+ private typeTables: TypeTable[] = [];
80
+ private girFilesValue: string[] = [];
81
+
41
82
  constructor() {
42
83
  this.typeTables[INTERNAL_NS_ID] = { types: [], names: [], index: new Map() };
43
84
  this.namespaceById[INTERNAL_NS_ID] = undefined;
@@ -46,12 +87,17 @@ export class Library {
46
87
 
47
88
  private ensureNsId(name: string): number {
48
89
  const existing = this.nsIdByName.get(name);
49
- if (existing !== undefined) return existing;
90
+
91
+ if (existing !== undefined) {
92
+ return existing;
93
+ }
94
+
50
95
  const nsId = this.typeTables.length;
51
96
  this.typeTables[nsId] = { types: [], names: [], index: new Map() };
52
97
  this.namespaceById[nsId] = undefined;
53
98
  this.nsNameById[nsId] = name;
54
99
  this.nsIdByName.set(name, nsId);
100
+
55
101
  return nsId;
56
102
  }
57
103
 
@@ -60,22 +106,27 @@ export class Library {
60
106
  const shell = createNamespaceShell(header, nsId);
61
107
  this.namespaceById[nsId] = shell;
62
108
  this.namespacesByName.set(header.name, shell);
109
+
63
110
  return shell;
64
111
  }
65
112
 
66
- private namespaceOf(nsId: number): GirNamespace {
113
+ private namespaceFor(nsId: number): GirNamespace {
67
114
  const namespace = this.namespaceById[nsId];
115
+
68
116
  if (namespace === undefined) {
69
- throw new Error(`No namespace registered for type table id ${nsId}`);
117
+ throw new Error(`No namespace registered for type table id ${String(nsId)}`);
70
118
  }
119
+
71
120
  return namespace;
72
121
  }
73
122
 
74
- private typeTableOf(nsId: number): TypeTable {
123
+ private typeTableFor(nsId: number): TypeTable {
75
124
  const typeTable = this.typeTables[nsId];
125
+
76
126
  if (typeTable === undefined) {
77
- throw new Error(`No type table for namespace id ${nsId}`);
127
+ throw new Error(`No type table for namespace id ${String(nsId)}`);
78
128
  }
129
+
79
130
  return typeTable;
80
131
  }
81
132
 
@@ -86,37 +137,44 @@ export class Library {
86
137
  const id = typeTable.types.length;
87
138
  typeTable.types.push(slot.type);
88
139
  typeTable.names.push(slot.displayName);
89
- if (slot.indexKey !== undefined) typeTable.index.set(slot.indexKey, id);
140
+
141
+ if (slot.indexKey !== undefined) {
142
+ typeTable.index.set(slot.indexKey, id);
143
+ }
144
+
90
145
  return id;
91
146
  }
92
147
 
93
- private addType(nsId: number, name: string, type: GirType): void {
94
- const typeTable = this.typeTableOf(nsId);
148
+ private resolveTypeId(nsId: number, name: string, type: GirType | undefined): number {
149
+ const typeTable = this.typeTableFor(nsId);
95
150
  const existing = typeTable.index.get(name);
151
+
96
152
  if (existing !== undefined) {
97
- typeTable.types[existing] = type;
98
- return;
153
+ return existing;
99
154
  }
100
- this.insertIntoTypeTable(typeTable, { type, indexKey: name, displayName: name });
155
+
156
+ return this.insertIntoTypeTable(typeTable, { type, indexKey: name, displayName: name });
157
+ }
158
+
159
+ private addType(nsId: number, name: string, type: GirType): void {
160
+ this.typeTableFor(nsId).types[this.resolveTypeId(nsId, name, type)] = type;
101
161
  }
102
162
 
103
163
  private findType(nsId: number, name: string): TypeId {
104
- const typeTable = this.typeTableOf(nsId);
105
- const existing = typeTable.index.get(name);
106
- if (existing !== undefined) return { nsId, id: existing };
107
- const id = this.insertIntoTypeTable(typeTable, { type: undefined, indexKey: name, displayName: name });
108
- return { nsId, id };
164
+ return { nsId, id: this.resolveTypeId(nsId, name, undefined) };
109
165
  }
110
166
 
111
167
  private addAnonymousType(nsId: number, type: GirType): TypeId {
112
- const typeTable = this.typeTableOf(nsId);
168
+ const typeTable = this.typeTableFor(nsId);
113
169
  const id = this.insertIntoTypeTable(typeTable, { type });
170
+
114
171
  return { nsId, id };
115
172
  }
116
173
 
117
174
  private findTypeByName(currentNsId: number, name: string): TypeId {
118
175
  const [namespaceName, localName] = splitOptionalNamespace(name);
119
176
  const targetNsId = namespaceName === undefined ? currentNsId : this.ensureNsId(namespaceName);
177
+
120
178
  return this.findType(targetNsId, localName);
121
179
  }
122
180
 
@@ -130,10 +188,11 @@ export class Library {
130
188
  addAnonymousCallback: (node) =>
131
189
  this.addAnonymousType(nsId, {
132
190
  kind: "callback",
133
- namespace: this.namespaceOf(nsId),
191
+ namespace: this.namespaceFor(nsId),
134
192
  value: callbackFromNode(node, context),
135
193
  }),
136
194
  };
195
+
137
196
  return context;
138
197
  }
139
198
 
@@ -146,103 +205,147 @@ export class Library {
146
205
  }
147
206
 
148
207
  private findOrAddContainer(key: string, type: GirType): TypeId {
149
- const typeTable = this.typeTableOf(INTERNAL_NS_ID);
208
+ const typeTable = this.typeTableFor(INTERNAL_NS_ID);
150
209
  const existing = typeTable.index.get(key);
151
- if (existing !== undefined) return { nsId: INTERNAL_NS_ID, id: existing };
210
+
211
+ if (existing !== undefined) {
212
+ return { nsId: INTERNAL_NS_ID, id: existing };
213
+ }
214
+
152
215
  const id = this.insertIntoTypeTable(typeTable, { type, indexKey: key });
216
+
153
217
  return { nsId: INTERNAL_NS_ID, id };
154
218
  }
155
219
 
156
220
  private addDeclarations(shell: GirNamespace): void {
221
+ this.addClassDeclarations(shell);
222
+ this.addValueDeclarations(shell);
223
+ }
224
+
225
+ private addClassDeclarations(shell: GirNamespace): void {
157
226
  const nsId = shell.id;
158
- for (const value of shell.classes) this.addType(nsId, value.name, { kind: "class", namespace: shell, value });
227
+
228
+ for (const value of shell.classes) {
229
+ this.addType(nsId, value.name, { kind: "class", namespace: shell, value });
230
+ }
231
+
159
232
  for (const value of shell.interfaces) {
160
233
  this.addType(nsId, value.name, { kind: "interface", namespace: shell, value });
161
234
  }
162
- for (const value of shell.records) this.addType(nsId, value.name, { kind: "record", namespace: shell, value });
163
- for (const value of shell.enums) this.addType(nsId, value.name, { kind: "enum", namespace: shell, value });
235
+
236
+ for (const value of shell.records) {
237
+ this.addType(nsId, value.name, { kind: "record", namespace: shell, value });
238
+ }
239
+ }
240
+
241
+ private addValueDeclarations(shell: GirNamespace): void {
242
+ const nsId = shell.id;
243
+
244
+ for (const value of shell.enums) {
245
+ this.addType(nsId, value.name, { kind: "enum", namespace: shell, value });
246
+ }
247
+
164
248
  for (const value of shell.callbacks) {
165
249
  this.addType(nsId, value.name, { kind: "callback", namespace: shell, value });
166
250
  }
251
+
167
252
  for (const alias of shell.aliases) {
168
253
  this.addType(nsId, alias.name, { kind: "alias", namespace: shell, value: alias });
169
254
  }
170
255
  }
171
256
 
172
- typeOf(tid: TypeId): GirType | undefined {
257
+ private processIdentifier(input: {
258
+ identifier: string;
259
+ girPath: string[];
260
+ seen: Set<string>;
261
+ queue: string[];
262
+ girFiles: string[];
263
+ discovered: DiscoveredNamespace[];
264
+ }): void {
265
+ const { identifier, girPath, seen, queue, girFiles, discovered } = input;
266
+ const namespaceName = identifier.split("-", 1)[0] ?? identifier;
267
+
268
+ if (seen.has(namespaceName)) {
269
+ return;
270
+ }
271
+
272
+ seen.add(namespaceName);
273
+ const path = locateGirFile(identifier, girPath);
274
+ girFiles.push(path);
275
+ const header = parseNamespaceHeader(readRepositoryNode(path));
276
+ const shell = this.registerNamespace(header);
277
+ discovered.push({ header, shell });
278
+
279
+ for (const include of header.includes) {
280
+ queue.push(`${include.name}-${include.version}`);
281
+ }
282
+ }
283
+
284
+ private discoverNamespaces(
285
+ libraries: string[],
286
+ girPath: string[],
287
+ ): { discovered: DiscoveredNamespace[]; girFiles: string[] } {
288
+ const queue: string[] = [...libraries];
289
+ const seen: Set<string> = new Set();
290
+ const discovered: DiscoveredNamespace[] = [];
291
+ const girFiles: string[] = [];
292
+
293
+ while (queue.length > 0) {
294
+ const identifier = queue.shift();
295
+
296
+ if (identifier !== undefined) {
297
+ this.processIdentifier({ identifier, girPath, seen, queue, girFiles, discovered });
298
+ }
299
+ }
300
+
301
+ return { discovered, girFiles };
302
+ }
303
+
304
+ public get namespaces(): Map<string, GirNamespace> {
305
+ return this.namespacesByName;
306
+ }
307
+
308
+ public get girFiles(): string[] {
309
+ return this.girFilesValue;
310
+ }
311
+
312
+ typeFor(tid: TypeId): GirType | undefined {
173
313
  return this.typeTables[tid.nsId]?.types[tid.id];
174
314
  }
175
315
 
176
- nameOf(tid: TypeId): { namespaceName: string; typeName: string } | undefined {
316
+ nameFor(tid: TypeId): { namespaceName: string; typeName: string } | undefined {
177
317
  const typeName = this.typeTables[tid.nsId]?.names[tid.id];
178
318
  const namespaceName = this.nsNameById[tid.nsId];
179
- if (typeName === undefined || namespaceName === undefined) return undefined;
319
+
320
+ if (typeName === undefined || namespaceName === undefined) {
321
+ return undefined;
322
+ }
323
+
180
324
  return { namespaceName, typeName };
181
325
  }
182
326
 
183
327
  resolveType(currentNamespaceName: string, name: string): GirType | undefined {
184
328
  const currentNsId = this.nsIdByName.get(currentNamespaceName);
185
- if (currentNsId === undefined) return undefined;
329
+
330
+ if (currentNsId === undefined) {
331
+ return undefined;
332
+ }
333
+
186
334
  const [namespaceName, localName] = splitOptionalNamespace(name);
187
335
  const targetNsId = namespaceName === undefined ? currentNsId : this.nsIdByName.get(namespaceName);
188
- if (targetNsId === undefined) return undefined;
189
- const id = this.typeTableOf(targetNsId).index.get(localName);
190
- if (id === undefined) return undefined;
191
- return this.typeTableOf(targetNsId).types[id];
192
- }
193
336
 
194
- private static drive(library: Library, libraries: string[], girPath: string[]): void {
195
- const queue: string[] = [...libraries];
196
- const seen = new Set<string>();
197
- const discovered: { header: NamespaceHeader; shell: GirNamespace }[] = [];
198
- const girFiles: string[] = [];
199
- while (queue.length > 0) {
200
- const identifier = queue.shift();
201
- if (identifier === undefined) continue;
202
- const namespaceName = identifier.split("-")[0] ?? identifier;
203
- if (seen.has(namespaceName)) continue;
204
- seen.add(namespaceName);
205
- const path = locateGirFile(identifier, girPath);
206
- girFiles.push(path);
207
- const repositoryNode = readRepositoryNode(path);
208
- const header = parseNamespaceHeader(repositoryNode);
209
- const shell = library.registerNamespace(header);
210
- discovered.push({ header, shell });
211
- for (const include of header.includes) {
212
- queue.push(`${include.name}-${include.version}`);
213
- }
214
- }
215
- for (const { header, shell } of discovered) {
216
- populateNamespaceBody(shell, header.namespaceNode, library.parseContext(shell.id));
337
+ if (targetNsId === undefined) {
338
+ return undefined;
217
339
  }
218
- for (const { shell } of discovered) {
219
- library.addDeclarations(shell);
340
+
341
+ const id = this.typeTableFor(targetNsId).index.get(localName);
342
+
343
+ if (id === undefined) {
344
+ return undefined;
220
345
  }
221
- library.girFilesValue = girFiles;
222
- }
223
346
 
224
- static load(libraries: string[], girPath: string[]): Library {
225
- const library = new Library();
226
- Library.drive(library, libraries, girPath);
227
- return library;
347
+ return this.typeTableFor(targetNsId).types[id];
228
348
  }
229
349
  }
230
350
 
231
- const readRepositoryNode = (path: string): RawNode => {
232
- const root = parseGirFile(path);
233
- const repository = root.repository;
234
- if (typeof repository !== "object" || repository === null) {
235
- throw new Error(`GIR file at ${path} has no <repository> root`);
236
- }
237
- return repository as RawNode;
238
- };
239
-
240
- const locateGirFile = (identifier: string, girPath: string[]): string => {
241
- const filename = `${identifier}.gir`;
242
- for (const directory of girPath) {
243
- const candidate = join(directory, filename);
244
- if (existsSync(candidate)) return candidate;
245
- }
246
- const tried = girPath.map((directory) => join(directory, filename)).join(", ");
247
- throw new Error(`GIR file ${filename} not found on girPath. Tried: ${tried}`);
248
- };
351
+ export { Library };