@gtkx/codegen 0.21.0 → 1.0.0-rc.1

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 (732) hide show
  1. package/README.md +173 -0
  2. package/dist/analysis/descriptor-render.d.ts +18 -0
  3. package/dist/analysis/descriptor-render.d.ts.map +1 -0
  4. package/dist/analysis/descriptor-render.js +297 -0
  5. package/dist/analysis/descriptor-render.js.map +1 -0
  6. package/dist/analysis/descriptor.d.ts +59 -0
  7. package/dist/analysis/descriptor.d.ts.map +1 -0
  8. package/dist/analysis/descriptor.js +123 -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 +193 -0
  13. package/dist/analysis/inheritance.js.map +1 -0
  14. package/dist/analysis/param-structure.d.ts +26 -0
  15. package/dist/analysis/param-structure.d.ts.map +1 -0
  16. package/dist/analysis/param-structure.js +107 -0
  17. package/dist/analysis/param-structure.js.map +1 -0
  18. package/dist/analysis/ts-type.d.ts +19 -0
  19. package/dist/analysis/ts-type.d.ts.map +1 -0
  20. package/dist/analysis/ts-type.js +65 -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 +123 -0
  25. package/dist/compile.js.map +1 -0
  26. package/dist/docs/api-reference.d.ts +66 -0
  27. package/dist/docs/api-reference.d.ts.map +1 -0
  28. package/dist/docs/api-reference.js +299 -0
  29. package/dist/docs/api-reference.js.map +1 -0
  30. package/dist/docs/element-page.d.ts +15 -0
  31. package/dist/docs/element-page.d.ts.map +1 -0
  32. package/dist/docs/element-page.js +221 -0
  33. package/dist/docs/element-page.js.map +1 -0
  34. package/dist/docs/pipeline.d.ts +25 -0
  35. package/dist/docs/pipeline.d.ts.map +1 -0
  36. package/dist/docs/pipeline.js +130 -0
  37. package/dist/docs/pipeline.js.map +1 -0
  38. package/dist/docs/render.d.ts +32 -0
  39. package/dist/docs/render.d.ts.map +1 -0
  40. package/dist/docs/render.js +134 -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 +338 -0
  45. package/dist/docs/symbol-page.js.map +1 -0
  46. package/dist/fingerprint.d.ts +6 -26
  47. package/dist/fingerprint.d.ts.map +1 -1
  48. package/dist/fingerprint.js +30 -18
  49. package/dist/fingerprint.js.map +1 -1
  50. package/dist/gir/ancestry.d.ts +9 -0
  51. package/dist/gir/ancestry.d.ts.map +1 -0
  52. package/dist/gir/ancestry.js +29 -0
  53. package/dist/gir/ancestry.js.map +1 -0
  54. package/dist/gir/callback.d.ts +9 -10
  55. package/dist/gir/callback.d.ts.map +1 -1
  56. package/dist/gir/callback.js +17 -16
  57. package/dist/gir/callback.js.map +1 -1
  58. package/dist/gir/class.d.ts +22 -43
  59. package/dist/gir/class.d.ts.map +1 -1
  60. package/dist/gir/class.js +11 -23
  61. package/dist/gir/class.js.map +1 -1
  62. package/dist/gir/enum.d.ts +13 -31
  63. package/dist/gir/enum.d.ts.map +1 -1
  64. package/dist/gir/enum.js +7 -14
  65. package/dist/gir/enum.js.map +1 -1
  66. package/dist/gir/field.d.ts +10 -23
  67. package/dist/gir/field.d.ts.map +1 -1
  68. package/dist/gir/field.js +12 -18
  69. package/dist/gir/field.js.map +1 -1
  70. package/dist/gir/function.d.ts +11 -42
  71. package/dist/gir/function.d.ts.map +1 -1
  72. package/dist/gir/function.js +7 -20
  73. package/dist/gir/function.js.map +1 -1
  74. package/dist/gir/gir-path.d.ts +2 -0
  75. package/dist/gir/gir-path.d.ts.map +1 -0
  76. package/dist/gir/gir-path.js +41 -0
  77. package/dist/gir/gir-path.js.map +1 -0
  78. package/dist/gir/libraries.d.ts +4 -0
  79. package/dist/gir/libraries.d.ts.map +1 -0
  80. package/dist/gir/libraries.js +62 -0
  81. package/dist/gir/libraries.js.map +1 -0
  82. package/dist/gir/library.d.ts +37 -0
  83. package/dist/gir/library.d.ts.map +1 -0
  84. package/dist/gir/library.js +218 -0
  85. package/dist/gir/library.js.map +1 -0
  86. package/dist/gir/namespace.d.ts +36 -50
  87. package/dist/gir/namespace.d.ts.map +1 -1
  88. package/dist/gir/namespace.js +46 -36
  89. package/dist/gir/namespace.js.map +1 -1
  90. package/dist/gir/parameter.d.ts +25 -69
  91. package/dist/gir/parameter.d.ts.map +1 -1
  92. package/dist/gir/parameter.js +36 -57
  93. package/dist/gir/parameter.js.map +1 -1
  94. package/dist/gir/parse.d.ts +6 -70
  95. package/dist/gir/parse.d.ts.map +1 -1
  96. package/dist/gir/parse.js +32 -80
  97. package/dist/gir/parse.js.map +1 -1
  98. package/dist/gir/primitives.d.ts +3 -34
  99. package/dist/gir/primitives.d.ts.map +1 -1
  100. package/dist/gir/primitives.js +19 -35
  101. package/dist/gir/primitives.js.map +1 -1
  102. package/dist/gir/property.d.ts +16 -25
  103. package/dist/gir/property.d.ts.map +1 -1
  104. package/dist/gir/property.js +12 -9
  105. package/dist/gir/property.js.map +1 -1
  106. package/dist/gir/record.d.ts +27 -0
  107. package/dist/gir/record.d.ts.map +1 -0
  108. package/dist/gir/record.js +25 -0
  109. package/dist/gir/record.js.map +1 -0
  110. package/dist/gir/size.d.ts +10 -57
  111. package/dist/gir/size.d.ts.map +1 -1
  112. package/dist/gir/size.js +0 -25
  113. package/dist/gir/size.js.map +1 -1
  114. package/dist/gir/type-id.d.ts +49 -0
  115. package/dist/gir/type-id.d.ts.map +1 -0
  116. package/dist/gir/type-id.js +8 -0
  117. package/dist/gir/type-id.js.map +1 -0
  118. package/dist/gir/type-ref.d.ts +3 -77
  119. package/dist/gir/type-ref.d.ts.map +1 -1
  120. package/dist/gir/type-ref.js +35 -65
  121. package/dist/gir/type-ref.js.map +1 -1
  122. package/dist/gir/type.d.ts +33 -0
  123. package/dist/gir/type.d.ts.map +1 -0
  124. package/dist/gir/type.js +2 -0
  125. package/dist/gir/type.js.map +1 -0
  126. package/dist/index.d.ts +5 -11
  127. package/dist/index.d.ts.map +1 -1
  128. package/dist/index.js +5 -11
  129. package/dist/index.js.map +1 -1
  130. package/dist/khronos/args.d.ts +30 -0
  131. package/dist/khronos/args.d.ts.map +1 -0
  132. package/dist/khronos/args.js +150 -0
  133. package/dist/khronos/args.js.map +1 -0
  134. package/dist/khronos/jsdoc.d.ts +21 -0
  135. package/dist/khronos/jsdoc.d.ts.map +1 -0
  136. package/dist/khronos/jsdoc.js +59 -0
  137. package/dist/khronos/jsdoc.js.map +1 -0
  138. package/dist/khronos/model.d.ts +37 -0
  139. package/dist/khronos/model.d.ts.map +1 -0
  140. package/dist/khronos/model.js +132 -0
  141. package/dist/khronos/model.js.map +1 -0
  142. package/dist/khronos/modules.d.ts +11 -0
  143. package/dist/khronos/modules.d.ts.map +1 -0
  144. package/dist/khronos/modules.js +58 -0
  145. package/dist/khronos/modules.js.map +1 -0
  146. package/dist/khronos/parse.d.ts +9 -0
  147. package/dist/khronos/parse.d.ts.map +1 -0
  148. package/dist/khronos/parse.js +61 -0
  149. package/dist/khronos/parse.js.map +1 -0
  150. package/dist/khronos/pipeline.d.ts +24 -0
  151. package/dist/khronos/pipeline.d.ts.map +1 -0
  152. package/dist/khronos/pipeline.js +182 -0
  153. package/dist/khronos/pipeline.js.map +1 -0
  154. package/dist/khronos/plan.d.ts +80 -0
  155. package/dist/khronos/plan.d.ts.map +1 -0
  156. package/dist/khronos/plan.js +136 -0
  157. package/dist/khronos/plan.js.map +1 -0
  158. package/dist/khronos/render.d.ts +16 -0
  159. package/dist/khronos/render.d.ts.map +1 -0
  160. package/dist/khronos/render.js +158 -0
  161. package/dist/khronos/render.js.map +1 -0
  162. package/dist/khronos/select.d.ts +15 -0
  163. package/dist/khronos/select.d.ts.map +1 -0
  164. package/dist/khronos/select.js +45 -0
  165. package/dist/khronos/select.js.map +1 -0
  166. package/dist/runner.d.ts +29 -47
  167. package/dist/runner.d.ts.map +1 -1
  168. package/dist/runner.js +78 -53
  169. package/dist/runner.js.map +1 -1
  170. package/dist/store/compile-store.d.ts +9 -0
  171. package/dist/store/compile-store.d.ts.map +1 -0
  172. package/dist/store/compile-store.js +38 -0
  173. package/dist/store/compile-store.js.map +1 -0
  174. package/dist/store/gi/async.d.ts +4 -0
  175. package/dist/store/gi/async.d.ts.map +1 -0
  176. package/dist/store/gi/async.js +41 -0
  177. package/dist/store/gi/async.js.map +1 -0
  178. package/dist/store/gi/callables.d.ts +36 -0
  179. package/dist/store/gi/callables.d.ts.map +1 -0
  180. package/dist/store/gi/callables.js +202 -0
  181. package/dist/store/gi/callables.js.map +1 -0
  182. package/dist/store/gi/callback.d.ts +4 -0
  183. package/dist/store/gi/callback.d.ts.map +1 -0
  184. package/dist/store/gi/callback.js +14 -0
  185. package/dist/store/gi/callback.js.map +1 -0
  186. package/dist/store/gi/class-struct-record.d.ts +9 -0
  187. package/dist/store/gi/class-struct-record.d.ts.map +1 -0
  188. package/dist/store/gi/class-struct-record.js +34 -0
  189. package/dist/store/gi/class-struct-record.js.map +1 -0
  190. package/dist/store/gi/class.d.ts +4 -0
  191. package/dist/store/gi/class.d.ts.map +1 -0
  192. package/dist/store/gi/class.js +169 -0
  193. package/dist/store/gi/class.js.map +1 -0
  194. package/dist/store/gi/companion.d.ts +4 -0
  195. package/dist/store/gi/companion.d.ts.map +1 -0
  196. package/dist/store/gi/companion.js +13 -0
  197. package/dist/store/gi/companion.js.map +1 -0
  198. package/dist/store/gi/constant.d.ts +5 -0
  199. package/dist/store/gi/constant.d.ts.map +1 -0
  200. package/dist/store/gi/constant.js +18 -0
  201. package/dist/store/gi/constant.js.map +1 -0
  202. package/dist/store/gi/constructor-props.d.ts +5 -0
  203. package/dist/store/gi/constructor-props.d.ts.map +1 -0
  204. package/dist/store/gi/constructor-props.js +64 -0
  205. package/dist/store/gi/constructor-props.js.map +1 -0
  206. package/dist/store/gi/enum.d.ts +5 -0
  207. package/dist/store/gi/enum.d.ts.map +1 -0
  208. package/dist/store/gi/enum.js +38 -0
  209. package/dist/store/gi/enum.js.map +1 -0
  210. package/dist/store/gi/function.d.ts +8 -0
  211. package/dist/store/gi/function.d.ts.map +1 -0
  212. package/dist/store/gi/function.js +87 -0
  213. package/dist/store/gi/function.js.map +1 -0
  214. package/dist/store/gi/gtype-binding.d.ts +10 -0
  215. package/dist/store/gi/gtype-binding.d.ts.map +1 -0
  216. package/dist/store/gi/gtype-binding.js +20 -0
  217. package/dist/store/gi/gtype-binding.js.map +1 -0
  218. package/dist/store/gi/interface.d.ts +4 -0
  219. package/dist/store/gi/interface.d.ts.map +1 -0
  220. package/dist/store/gi/interface.js +99 -0
  221. package/dist/store/gi/interface.js.map +1 -0
  222. package/dist/store/gi/item-comparators.d.ts +6 -0
  223. package/dist/store/gi/item-comparators.d.ts.map +1 -0
  224. package/dist/store/gi/item-comparators.js +76 -0
  225. package/dist/store/gi/item-comparators.js.map +1 -0
  226. package/dist/store/gi/method.d.ts +24 -0
  227. package/dist/store/gi/method.d.ts.map +1 -0
  228. package/dist/store/gi/method.js +279 -0
  229. package/dist/store/gi/method.js.map +1 -0
  230. package/dist/store/gi/param-marshal.d.ts +9 -0
  231. package/dist/store/gi/param-marshal.d.ts.map +1 -0
  232. package/dist/store/gi/param-marshal.js +37 -0
  233. package/dist/store/gi/param-marshal.js.map +1 -0
  234. package/dist/store/gi/pipeline.d.ts +4 -0
  235. package/dist/store/gi/pipeline.d.ts.map +1 -0
  236. package/dist/store/gi/pipeline.js +80 -0
  237. package/dist/store/gi/pipeline.js.map +1 -0
  238. package/dist/store/gi/properties.d.ts +5 -0
  239. package/dist/store/gi/properties.d.ts.map +1 -0
  240. package/dist/store/gi/properties.js +30 -0
  241. package/dist/store/gi/properties.js.map +1 -0
  242. package/dist/store/gi/property-accessor.d.ts +26 -0
  243. package/dist/store/gi/property-accessor.d.ts.map +1 -0
  244. package/dist/store/gi/property-accessor.js +132 -0
  245. package/dist/store/gi/property-accessor.js.map +1 -0
  246. package/dist/store/gi/record-constructor.d.ts +5 -0
  247. package/dist/store/gi/record-constructor.d.ts.map +1 -0
  248. package/dist/store/gi/record-constructor.js +65 -0
  249. package/dist/store/gi/record-constructor.js.map +1 -0
  250. package/dist/store/gi/record-field-accessor.d.ts +25 -0
  251. package/dist/store/gi/record-field-accessor.d.ts.map +1 -0
  252. package/dist/store/gi/record-field-accessor.js +288 -0
  253. package/dist/store/gi/record-field-accessor.js.map +1 -0
  254. package/dist/store/gi/record-layout.d.ts +14 -0
  255. package/dist/store/gi/record-layout.d.ts.map +1 -0
  256. package/dist/store/gi/record-layout.js +96 -0
  257. package/dist/store/gi/record-layout.js.map +1 -0
  258. package/dist/store/gi/record.d.ts +4 -0
  259. package/dist/store/gi/record.d.ts.map +1 -0
  260. package/dist/store/gi/record.js +59 -0
  261. package/dist/store/gi/record.js.map +1 -0
  262. package/dist/store/gi/registration.d.ts +16 -0
  263. package/dist/store/gi/registration.d.ts.map +1 -0
  264. package/dist/store/gi/registration.js +20 -0
  265. package/dist/store/gi/registration.js.map +1 -0
  266. package/dist/store/gi/return-wrap.d.ts +10 -0
  267. package/dist/store/gi/return-wrap.d.ts.map +1 -0
  268. package/dist/store/gi/return-wrap.js +46 -0
  269. package/dist/store/gi/return-wrap.js.map +1 -0
  270. package/dist/store/gi/runtime-override.d.ts +3 -0
  271. package/dist/store/gi/runtime-override.d.ts.map +1 -0
  272. package/dist/{writers → store/gi}/runtime-override.js +0 -15
  273. package/dist/store/gi/runtime-override.js.map +1 -0
  274. package/dist/store/gi/signal.d.ts +5 -0
  275. package/dist/store/gi/signal.d.ts.map +1 -0
  276. package/dist/store/gi/signal.js +233 -0
  277. package/dist/store/gi/signal.js.map +1 -0
  278. package/dist/store/gi/vtable.d.ts +4 -0
  279. package/dist/store/gi/vtable.d.ts.map +1 -0
  280. package/dist/store/gi/vtable.js +78 -0
  281. package/dist/store/gi/vtable.js.map +1 -0
  282. package/dist/store/gi-store.d.ts +9 -0
  283. package/dist/store/gi-store.d.ts.map +1 -0
  284. package/dist/store/gi-store.js +57 -0
  285. package/dist/store/gi-store.js.map +1 -0
  286. package/dist/store/jsx-store.d.ts +5 -0
  287. package/dist/store/jsx-store.d.ts.map +1 -0
  288. package/dist/store/jsx-store.js +23 -0
  289. package/dist/store/jsx-store.js.map +1 -0
  290. package/dist/store/react/built-ins.d.ts +9 -0
  291. package/dist/store/react/built-ins.d.ts.map +1 -0
  292. package/dist/store/react/built-ins.js +226 -0
  293. package/dist/store/react/built-ins.js.map +1 -0
  294. package/dist/store/react/element-components.d.ts +15 -0
  295. package/dist/store/react/element-components.d.ts.map +1 -0
  296. package/dist/store/react/element-components.js +92 -0
  297. package/dist/store/react/element-components.js.map +1 -0
  298. package/dist/store/react/element-prop-types.d.ts +19 -0
  299. package/dist/store/react/element-prop-types.d.ts.map +1 -0
  300. package/dist/store/react/element-prop-types.js +244 -0
  301. package/dist/store/react/element-prop-types.js.map +1 -0
  302. package/dist/store/react/element-props.d.ts +4 -0
  303. package/dist/store/react/element-props.d.ts.map +1 -0
  304. package/dist/store/react/element-props.js +178 -0
  305. package/dist/store/react/element-props.js.map +1 -0
  306. package/dist/store/react/gir-index.d.ts +25 -0
  307. package/dist/store/react/gir-index.d.ts.map +1 -0
  308. package/dist/store/react/gir-index.js +55 -0
  309. package/dist/store/react/gir-index.js.map +1 -0
  310. package/dist/store/react/intrinsic-elements.d.ts +26 -0
  311. package/dist/store/react/intrinsic-elements.d.ts.map +1 -0
  312. package/dist/store/react/intrinsic-elements.js +107 -0
  313. package/dist/store/react/intrinsic-elements.js.map +1 -0
  314. package/dist/store/react/jsx.d.ts +18 -0
  315. package/dist/store/react/jsx.d.ts.map +1 -0
  316. package/dist/store/react/jsx.js +203 -0
  317. package/dist/store/react/jsx.js.map +1 -0
  318. package/dist/store/react/metadata.d.ts +4 -0
  319. package/dist/store/react/metadata.d.ts.map +1 -0
  320. package/dist/store/react/metadata.js +174 -0
  321. package/dist/store/react/metadata.js.map +1 -0
  322. package/dist/store/react/pipeline.d.ts +14 -0
  323. package/dist/store/react/pipeline.d.ts.map +1 -0
  324. package/dist/store/react/pipeline.js +60 -0
  325. package/dist/store/react/pipeline.js.map +1 -0
  326. package/dist/store/react/props.d.ts +36 -0
  327. package/dist/store/react/props.d.ts.map +1 -0
  328. package/dist/store/react/props.js +133 -0
  329. package/dist/store/react/props.js.map +1 -0
  330. package/dist/store/store-fs.d.ts +41 -0
  331. package/dist/store/store-fs.d.ts.map +1 -0
  332. package/dist/store/store-fs.js +71 -0
  333. package/dist/store/store-fs.js.map +1 -0
  334. package/dist/writer/context.d.ts +16 -0
  335. package/dist/writer/context.d.ts.map +1 -0
  336. package/dist/writer/context.js +44 -0
  337. package/dist/writer/context.js.map +1 -0
  338. package/dist/writer/doc.d.ts +2 -0
  339. package/dist/writer/doc.d.ts.map +1 -0
  340. package/dist/writer/doc.js +12 -0
  341. package/dist/writer/doc.js.map +1 -0
  342. package/dist/writer/emit.d.ts +8 -0
  343. package/dist/writer/emit.d.ts.map +1 -0
  344. package/dist/writer/emit.js +21 -0
  345. package/dist/writer/emit.js.map +1 -0
  346. package/dist/writer/gtk-doc.d.ts +2 -0
  347. package/dist/writer/gtk-doc.d.ts.map +1 -0
  348. package/dist/writer/gtk-doc.js +67 -0
  349. package/dist/writer/gtk-doc.js.map +1 -0
  350. package/dist/writer/imports.d.ts +10 -0
  351. package/dist/writer/imports.d.ts.map +1 -0
  352. package/dist/writer/imports.js +50 -0
  353. package/dist/writer/imports.js.map +1 -0
  354. package/dist/writer/module.d.ts +15 -0
  355. package/dist/writer/module.d.ts.map +1 -0
  356. package/dist/writer/module.js +46 -0
  357. package/dist/writer/module.js.map +1 -0
  358. package/overrides/cairo/context.ts.ejs +1269 -0
  359. package/overrides/cairo/font-face.ts.ejs +151 -0
  360. package/overrides/cairo/font-options.ts.ejs +199 -0
  361. package/overrides/cairo/image-surface.ts.ejs +132 -0
  362. package/overrides/cairo/index.ts.ejs +22 -0
  363. package/overrides/cairo/matrix.ts.ejs +171 -0
  364. package/overrides/cairo/pattern.ts.ejs +476 -0
  365. package/overrides/cairo/recording-surface.ts.ejs +102 -0
  366. package/overrides/cairo/region.ts.ejs +237 -0
  367. package/overrides/cairo/scaled-font.ts.ejs +330 -0
  368. package/overrides/cairo/surface.ts.ejs +296 -0
  369. package/overrides/gdk/index.ts.ejs +2 -0
  370. package/overrides/gdk/rgba.ts.ejs +11 -0
  371. package/overrides/gobject/index.ts.ejs +29 -0
  372. package/overrides/gobject/object.ts.ejs +51 -0
  373. package/overrides/gobject/value.ts.ejs +17 -0
  374. package/overrides/graphene/index.ts.ejs +2 -0
  375. package/overrides/graphene/structs.ts.ejs +37 -0
  376. package/overrides/gtk/constants.ts.ejs +3 -0
  377. package/overrides/gtk/index.ts.ejs +2 -0
  378. package/package.json +15 -15
  379. package/src/analysis/descriptor-render.ts +407 -0
  380. package/src/analysis/descriptor.ts +263 -0
  381. package/src/analysis/inheritance.ts +242 -0
  382. package/src/analysis/param-structure.ts +127 -0
  383. package/src/analysis/ts-type.ts +88 -0
  384. package/src/compile.ts +152 -0
  385. package/src/docs/api-reference.ts +361 -0
  386. package/src/docs/element-page.ts +290 -0
  387. package/src/docs/pipeline.ts +182 -0
  388. package/src/docs/render.ts +191 -0
  389. package/src/docs/symbol-page.ts +444 -0
  390. package/src/fingerprint.ts +40 -29
  391. package/src/gir/ancestry.ts +41 -0
  392. package/src/gir/callback.ts +25 -22
  393. package/src/gir/class.ts +31 -57
  394. package/src/gir/enum.ts +20 -38
  395. package/src/gir/field.ts +21 -36
  396. package/src/gir/function.ts +17 -56
  397. package/src/gir/gir-path.ts +49 -0
  398. package/src/gir/libraries.ts +77 -0
  399. package/src/gir/library.ts +248 -0
  400. package/src/gir/namespace.ts +85 -80
  401. package/src/gir/parameter.ts +64 -93
  402. package/src/gir/parse.ts +43 -95
  403. package/src/gir/primitives.ts +23 -45
  404. package/src/gir/property.ts +27 -29
  405. package/src/gir/record.ts +53 -0
  406. package/src/gir/size.ts +9 -56
  407. package/src/gir/type-id.ts +49 -0
  408. package/src/gir/type-ref.ts +35 -140
  409. package/src/gir/type.ts +16 -0
  410. package/src/index.ts +20 -15
  411. package/src/khronos/args.ts +202 -0
  412. package/src/khronos/jsdoc.ts +76 -0
  413. package/src/khronos/model.ts +166 -0
  414. package/src/khronos/modules.ts +75 -0
  415. package/src/khronos/parse.ts +66 -0
  416. package/src/khronos/pipeline.ts +234 -0
  417. package/src/khronos/plan.ts +191 -0
  418. package/src/khronos/registry/LICENSE +202 -0
  419. package/src/khronos/registry/gl.xml +47748 -0
  420. package/src/khronos/render.ts +193 -0
  421. package/src/khronos/select.ts +67 -0
  422. package/src/runner.ts +112 -75
  423. package/src/store/compile-store.ts +49 -0
  424. package/src/store/gi/async.ts +42 -0
  425. package/src/store/gi/callables.ts +309 -0
  426. package/src/store/gi/callback.ts +15 -0
  427. package/src/store/gi/class-struct-record.ts +40 -0
  428. package/src/store/gi/class.ts +212 -0
  429. package/src/store/gi/companion.ts +13 -0
  430. package/src/store/gi/constant.ts +24 -0
  431. package/src/store/gi/constructor-props.ts +82 -0
  432. package/src/store/gi/enum.ts +49 -0
  433. package/src/store/gi/function.ts +107 -0
  434. package/src/store/gi/gtype-binding.ts +33 -0
  435. package/src/store/gi/interface.ts +157 -0
  436. package/src/store/gi/item-comparators.ts +90 -0
  437. package/src/store/gi/method.ts +417 -0
  438. package/src/store/gi/param-marshal.ts +48 -0
  439. package/src/store/gi/pipeline.ts +85 -0
  440. package/src/store/gi/properties.ts +39 -0
  441. package/src/store/gi/property-accessor.ts +194 -0
  442. package/src/store/gi/record-constructor.ts +87 -0
  443. package/src/store/gi/record-field-accessor.ts +394 -0
  444. package/src/store/gi/record-layout.ts +134 -0
  445. package/src/store/gi/record.ts +66 -0
  446. package/src/store/gi/registration.ts +38 -0
  447. package/src/store/gi/return-wrap.ts +52 -0
  448. package/src/store/gi/runtime-override.ts +36 -0
  449. package/src/store/gi/signal.ts +310 -0
  450. package/src/store/gi/vtable.ts +99 -0
  451. package/src/store/gi-store.ts +79 -0
  452. package/src/store/jsx-store.ts +27 -0
  453. package/src/store/react/built-ins.ts +260 -0
  454. package/src/store/react/element-components.ts +138 -0
  455. package/src/store/react/element-prop-types.ts +280 -0
  456. package/src/store/react/element-props.ts +204 -0
  457. package/src/store/react/gir-index.ts +85 -0
  458. package/src/store/react/intrinsic-elements.ts +161 -0
  459. package/src/store/react/jsx.ts +294 -0
  460. package/src/store/react/metadata.ts +197 -0
  461. package/src/store/react/pipeline.ts +90 -0
  462. package/src/store/react/props.ts +197 -0
  463. package/src/store/store-fs.ts +112 -0
  464. package/src/writer/context.ts +48 -0
  465. package/src/writer/doc.ts +11 -0
  466. package/src/writer/emit.ts +26 -0
  467. package/src/writer/gtk-doc.ts +74 -0
  468. package/src/writer/imports.ts +59 -0
  469. package/src/writer/module.ts +45 -0
  470. package/LICENSE +0 -373
  471. package/dist/dsl/context.d.ts +0 -104
  472. package/dist/dsl/context.d.ts.map +0 -1
  473. package/dist/dsl/context.js +0 -140
  474. package/dist/dsl/context.js.map +0 -1
  475. package/dist/dsl/emit.d.ts +0 -28
  476. package/dist/dsl/emit.d.ts.map +0 -1
  477. package/dist/dsl/emit.js +0 -41
  478. package/dist/dsl/emit.js.map +0 -1
  479. package/dist/dsl/identifier.d.ts +0 -28
  480. package/dist/dsl/identifier.d.ts.map +0 -1
  481. package/dist/dsl/identifier.js +0 -45
  482. package/dist/dsl/identifier.js.map +0 -1
  483. package/dist/dsl/imports.d.ts +0 -58
  484. package/dist/dsl/imports.d.ts.map +0 -1
  485. package/dist/dsl/imports.js +0 -107
  486. package/dist/dsl/imports.js.map +0 -1
  487. package/dist/dsl/module.d.ts +0 -53
  488. package/dist/dsl/module.d.ts.map +0 -1
  489. package/dist/dsl/module.js +0 -76
  490. package/dist/dsl/module.js.map +0 -1
  491. package/dist/ffi/pipeline.d.ts +0 -19
  492. package/dist/ffi/pipeline.d.ts.map +0 -1
  493. package/dist/ffi/pipeline.js +0 -107
  494. package/dist/ffi/pipeline.js.map +0 -1
  495. package/dist/gi-store.d.ts +0 -34
  496. package/dist/gi-store.d.ts.map +0 -1
  497. package/dist/gi-store.js +0 -154
  498. package/dist/gi-store.js.map +0 -1
  499. package/dist/gir/boxed.d.ts +0 -66
  500. package/dist/gir/boxed.d.ts.map +0 -1
  501. package/dist/gir/boxed.js +0 -49
  502. package/dist/gir/boxed.js.map +0 -1
  503. package/dist/gir/qualified-name.d.ts +0 -37
  504. package/dist/gir/qualified-name.d.ts.map +0 -1
  505. package/dist/gir/qualified-name.js +0 -39
  506. package/dist/gir/qualified-name.js.map +0 -1
  507. package/dist/gir/qualify.d.ts +0 -32
  508. package/dist/gir/qualify.d.ts.map +0 -1
  509. package/dist/gir/qualify.js +0 -60
  510. package/dist/gir/qualify.js.map +0 -1
  511. package/dist/gir/repository.d.ts +0 -82
  512. package/dist/gir/repository.d.ts.map +0 -1
  513. package/dist/gir/repository.js +0 -122
  514. package/dist/gir/repository.js.map +0 -1
  515. package/dist/gir/signal.d.ts +0 -22
  516. package/dist/gir/signal.d.ts.map +0 -1
  517. package/dist/gir/signal.js +0 -20
  518. package/dist/gir/signal.js.map +0 -1
  519. package/dist/jsx-store.d.ts +0 -22
  520. package/dist/jsx-store.d.ts.map +0 -1
  521. package/dist/jsx-store.js +0 -40
  522. package/dist/jsx-store.js.map +0 -1
  523. package/dist/react/compounds-meta.d.ts +0 -18
  524. package/dist/react/compounds-meta.d.ts.map +0 -1
  525. package/dist/react/compounds-meta.js +0 -93
  526. package/dist/react/compounds-meta.js.map +0 -1
  527. package/dist/react/compounds.d.ts +0 -27
  528. package/dist/react/compounds.d.ts.map +0 -1
  529. package/dist/react/compounds.js +0 -164
  530. package/dist/react/compounds.js.map +0 -1
  531. package/dist/react/internal.d.ts +0 -14
  532. package/dist/react/internal.d.ts.map +0 -1
  533. package/dist/react/internal.js +0 -79
  534. package/dist/react/internal.js.map +0 -1
  535. package/dist/react/jsx.d.ts +0 -22
  536. package/dist/react/jsx.d.ts.map +0 -1
  537. package/dist/react/jsx.js +0 -134
  538. package/dist/react/jsx.js.map +0 -1
  539. package/dist/react/pipeline.d.ts +0 -13
  540. package/dist/react/pipeline.d.ts.map +0 -1
  541. package/dist/react/pipeline.js +0 -25
  542. package/dist/react/pipeline.js.map +0 -1
  543. package/dist/react/props.d.ts +0 -38
  544. package/dist/react/props.d.ts.map +0 -1
  545. package/dist/react/props.js +0 -231
  546. package/dist/react/props.js.map +0 -1
  547. package/dist/react/slot-props.d.ts +0 -10
  548. package/dist/react/slot-props.d.ts.map +0 -1
  549. package/dist/react/slot-props.js +0 -56
  550. package/dist/react/slot-props.js.map +0 -1
  551. package/dist/react/widgets.d.ts +0 -83
  552. package/dist/react/widgets.d.ts.map +0 -1
  553. package/dist/react/widgets.js +0 -152
  554. package/dist/react/widgets.js.map +0 -1
  555. package/dist/store-fs.d.ts +0 -109
  556. package/dist/store-fs.d.ts.map +0 -1
  557. package/dist/store-fs.js +0 -98
  558. package/dist/store-fs.js.map +0 -1
  559. package/dist/transpile.d.ts +0 -32
  560. package/dist/transpile.d.ts.map +0 -1
  561. package/dist/transpile.js +0 -63
  562. package/dist/transpile.js.map +0 -1
  563. package/dist/typecheck-store.d.ts +0 -41
  564. package/dist/typecheck-store.d.ts.map +0 -1
  565. package/dist/typecheck-store.js +0 -102
  566. package/dist/typecheck-store.js.map +0 -1
  567. package/dist/writers/alias.d.ts +0 -13
  568. package/dist/writers/alias.d.ts.map +0 -1
  569. package/dist/writers/alias.js +0 -17
  570. package/dist/writers/alias.js.map +0 -1
  571. package/dist/writers/async.d.ts +0 -22
  572. package/dist/writers/async.d.ts.map +0 -1
  573. package/dist/writers/async.js +0 -48
  574. package/dist/writers/async.js.map +0 -1
  575. package/dist/writers/boxed-constructor.d.ts +0 -26
  576. package/dist/writers/boxed-constructor.d.ts.map +0 -1
  577. package/dist/writers/boxed-constructor.js +0 -85
  578. package/dist/writers/boxed-constructor.js.map +0 -1
  579. package/dist/writers/boxed-field-accessor.d.ts +0 -18
  580. package/dist/writers/boxed-field-accessor.d.ts.map +0 -1
  581. package/dist/writers/boxed-field-accessor.js +0 -260
  582. package/dist/writers/boxed-field-accessor.js.map +0 -1
  583. package/dist/writers/boxed-layout.d.ts +0 -27
  584. package/dist/writers/boxed-layout.d.ts.map +0 -1
  585. package/dist/writers/boxed-layout.js +0 -128
  586. package/dist/writers/boxed-layout.js.map +0 -1
  587. package/dist/writers/boxed.d.ts +0 -20
  588. package/dist/writers/boxed.d.ts.map +0 -1
  589. package/dist/writers/boxed.js +0 -71
  590. package/dist/writers/boxed.js.map +0 -1
  591. package/dist/writers/callables.d.ts +0 -124
  592. package/dist/writers/callables.d.ts.map +0 -1
  593. package/dist/writers/callables.js +0 -283
  594. package/dist/writers/callables.js.map +0 -1
  595. package/dist/writers/callback.d.ts +0 -16
  596. package/dist/writers/callback.d.ts.map +0 -1
  597. package/dist/writers/callback.js +0 -38
  598. package/dist/writers/callback.js.map +0 -1
  599. package/dist/writers/class-struct-record.d.ts +0 -31
  600. package/dist/writers/class-struct-record.d.ts.map +0 -1
  601. package/dist/writers/class-struct-record.js +0 -67
  602. package/dist/writers/class-struct-record.js.map +0 -1
  603. package/dist/writers/class-struct.d.ts +0 -22
  604. package/dist/writers/class-struct.d.ts.map +0 -1
  605. package/dist/writers/class-struct.js +0 -85
  606. package/dist/writers/class-struct.js.map +0 -1
  607. package/dist/writers/class.d.ts +0 -16
  608. package/dist/writers/class.d.ts.map +0 -1
  609. package/dist/writers/class.js +0 -307
  610. package/dist/writers/class.js.map +0 -1
  611. package/dist/writers/constant.d.ts +0 -15
  612. package/dist/writers/constant.d.ts.map +0 -1
  613. package/dist/writers/constant.js +0 -23
  614. package/dist/writers/constant.js.map +0 -1
  615. package/dist/writers/constants.d.ts +0 -15
  616. package/dist/writers/constants.d.ts.map +0 -1
  617. package/dist/writers/constants.js +0 -23
  618. package/dist/writers/constants.js.map +0 -1
  619. package/dist/writers/constructor-props.d.ts +0 -32
  620. package/dist/writers/constructor-props.d.ts.map +0 -1
  621. package/dist/writers/constructor-props.js +0 -110
  622. package/dist/writers/constructor-props.js.map +0 -1
  623. package/dist/writers/enum.d.ts +0 -21
  624. package/dist/writers/enum.d.ts.map +0 -1
  625. package/dist/writers/enum.js +0 -48
  626. package/dist/writers/enum.js.map +0 -1
  627. package/dist/writers/function.d.ts +0 -40
  628. package/dist/writers/function.d.ts.map +0 -1
  629. package/dist/writers/function.js +0 -127
  630. package/dist/writers/function.js.map +0 -1
  631. package/dist/writers/gtype-binding.d.ts +0 -19
  632. package/dist/writers/gtype-binding.d.ts.map +0 -1
  633. package/dist/writers/gtype-binding.js +0 -40
  634. package/dist/writers/gtype-binding.js.map +0 -1
  635. package/dist/writers/inheritance.d.ts +0 -48
  636. package/dist/writers/inheritance.d.ts.map +0 -1
  637. package/dist/writers/inheritance.js +0 -90
  638. package/dist/writers/inheritance.js.map +0 -1
  639. package/dist/writers/interface.d.ts +0 -16
  640. package/dist/writers/interface.d.ts.map +0 -1
  641. package/dist/writers/interface.js +0 -155
  642. package/dist/writers/interface.js.map +0 -1
  643. package/dist/writers/method.d.ts +0 -150
  644. package/dist/writers/method.d.ts.map +0 -1
  645. package/dist/writers/method.js +0 -510
  646. package/dist/writers/method.js.map +0 -1
  647. package/dist/writers/param-classify.d.ts +0 -93
  648. package/dist/writers/param-classify.d.ts.map +0 -1
  649. package/dist/writers/param-classify.js +0 -163
  650. package/dist/writers/param-classify.js.map +0 -1
  651. package/dist/writers/property-accessor.d.ts +0 -19
  652. package/dist/writers/property-accessor.d.ts.map +0 -1
  653. package/dist/writers/property-accessor.js +0 -117
  654. package/dist/writers/property-accessor.js.map +0 -1
  655. package/dist/writers/registration.d.ts +0 -27
  656. package/dist/writers/registration.d.ts.map +0 -1
  657. package/dist/writers/registration.js +0 -30
  658. package/dist/writers/registration.js.map +0 -1
  659. package/dist/writers/return-wrap.d.ts +0 -39
  660. package/dist/writers/return-wrap.d.ts.map +0 -1
  661. package/dist/writers/return-wrap.js +0 -152
  662. package/dist/writers/return-wrap.js.map +0 -1
  663. package/dist/writers/runtime-override.d.ts +0 -18
  664. package/dist/writers/runtime-override.d.ts.map +0 -1
  665. package/dist/writers/runtime-override.js.map +0 -1
  666. package/dist/writers/signal.d.ts +0 -21
  667. package/dist/writers/signal.d.ts.map +0 -1
  668. package/dist/writers/signal.js +0 -260
  669. package/dist/writers/signal.js.map +0 -1
  670. package/dist/writers/ts-type.d.ts +0 -50
  671. package/dist/writers/ts-type.d.ts.map +0 -1
  672. package/dist/writers/ts-type.js +0 -75
  673. package/dist/writers/ts-type.js.map +0 -1
  674. package/dist/writers/types-ts.d.ts +0 -27
  675. package/dist/writers/types-ts.d.ts.map +0 -1
  676. package/dist/writers/types-ts.js +0 -97
  677. package/dist/writers/types-ts.js.map +0 -1
  678. package/dist/writers/value.d.ts +0 -89
  679. package/dist/writers/value.d.ts.map +0 -1
  680. package/dist/writers/value.js +0 -402
  681. package/dist/writers/value.js.map +0 -1
  682. package/src/dsl/context.ts +0 -146
  683. package/src/dsl/emit.ts +0 -42
  684. package/src/dsl/identifier.ts +0 -52
  685. package/src/dsl/imports.ts +0 -109
  686. package/src/dsl/module.ts +0 -75
  687. package/src/ffi/pipeline.ts +0 -113
  688. package/src/gi-store.ts +0 -199
  689. package/src/gir/boxed.ts +0 -94
  690. package/src/gir/qualified-name.ts +0 -55
  691. package/src/gir/qualify.ts +0 -64
  692. package/src/gir/repository.ts +0 -149
  693. package/src/gir/signal.ts +0 -36
  694. package/src/jsx-store.ts +0 -53
  695. package/src/react/compounds-meta.ts +0 -99
  696. package/src/react/compounds.ts +0 -204
  697. package/src/react/internal.ts +0 -91
  698. package/src/react/jsx.ts +0 -155
  699. package/src/react/pipeline.ts +0 -29
  700. package/src/react/props.ts +0 -307
  701. package/src/react/slot-props.ts +0 -57
  702. package/src/react/widgets.ts +0 -185
  703. package/src/store-fs.ts +0 -157
  704. package/src/transpile.ts +0 -80
  705. package/src/typecheck-store.ts +0 -136
  706. package/src/writers/alias.ts +0 -19
  707. package/src/writers/async.ts +0 -44
  708. package/src/writers/boxed-constructor.ts +0 -105
  709. package/src/writers/boxed-field-accessor.ts +0 -306
  710. package/src/writers/boxed-layout.ts +0 -166
  711. package/src/writers/boxed.ts +0 -77
  712. package/src/writers/callables.ts +0 -339
  713. package/src/writers/callback.ts +0 -40
  714. package/src/writers/class-struct-record.ts +0 -75
  715. package/src/writers/class-struct.ts +0 -96
  716. package/src/writers/class.ts +0 -384
  717. package/src/writers/constant.ts +0 -29
  718. package/src/writers/constructor-props.ts +0 -130
  719. package/src/writers/enum.ts +0 -53
  720. package/src/writers/function.ts +0 -136
  721. package/src/writers/gtype-binding.ts +0 -48
  722. package/src/writers/inheritance.ts +0 -104
  723. package/src/writers/interface.ts +0 -168
  724. package/src/writers/method.ts +0 -678
  725. package/src/writers/param-classify.ts +0 -178
  726. package/src/writers/property-accessor.ts +0 -139
  727. package/src/writers/registration.ts +0 -42
  728. package/src/writers/return-wrap.ts +0 -180
  729. package/src/writers/runtime-override.ts +0 -59
  730. package/src/writers/signal.ts +0 -318
  731. package/src/writers/ts-type.ts +0 -115
  732. package/src/writers/value.ts +0 -485
@@ -0,0 +1,248 @@
1
+ import { existsSync } from "node:fs";
2
+ import { join } from "node:path";
3
+ import { callbackFromNode } from "./callback.js";
4
+ import {
5
+ createNamespaceShell,
6
+ type GirNamespace,
7
+ type NamespaceHeader,
8
+ parseNamespaceHeader,
9
+ populateNamespaceBody,
10
+ } from "./namespace.js";
11
+ 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
+ import { splitOptionalNamespace } from "./type-ref.js";
16
+
17
+ const INTERNAL_NS_ID = 0;
18
+
19
+ type TypeTable = {
20
+ types: (GirType | undefined)[];
21
+ names: (string | undefined)[];
22
+ index: Map<string, number>;
23
+ };
24
+
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[] = [];
32
+
33
+ public get namespaces(): Map<string, GirNamespace> {
34
+ return this.namespacesByName;
35
+ }
36
+
37
+ public get girFiles(): string[] {
38
+ return this.girFilesValue;
39
+ }
40
+
41
+ constructor() {
42
+ this.typeTables[INTERNAL_NS_ID] = { types: [], names: [], index: new Map() };
43
+ this.namespaceById[INTERNAL_NS_ID] = undefined;
44
+ this.nsNameById[INTERNAL_NS_ID] = "$internal";
45
+ }
46
+
47
+ private ensureNsId(name: string): number {
48
+ const existing = this.nsIdByName.get(name);
49
+ if (existing !== undefined) return existing;
50
+ const nsId = this.typeTables.length;
51
+ this.typeTables[nsId] = { types: [], names: [], index: new Map() };
52
+ this.namespaceById[nsId] = undefined;
53
+ this.nsNameById[nsId] = name;
54
+ this.nsIdByName.set(name, nsId);
55
+ return nsId;
56
+ }
57
+
58
+ private registerNamespace(header: NamespaceHeader): GirNamespace {
59
+ const nsId = this.ensureNsId(header.name);
60
+ const shell = createNamespaceShell(header, nsId);
61
+ this.namespaceById[nsId] = shell;
62
+ this.namespacesByName.set(header.name, shell);
63
+ return shell;
64
+ }
65
+
66
+ private namespaceOf(nsId: number): GirNamespace {
67
+ const namespace = this.namespaceById[nsId];
68
+ if (namespace === undefined) {
69
+ throw new Error(`No namespace registered for type table id ${nsId}`);
70
+ }
71
+ return namespace;
72
+ }
73
+
74
+ private typeTableOf(nsId: number): TypeTable {
75
+ const typeTable = this.typeTables[nsId];
76
+ if (typeTable === undefined) {
77
+ throw new Error(`No type table for namespace id ${nsId}`);
78
+ }
79
+ return typeTable;
80
+ }
81
+
82
+ private insertIntoTypeTable(
83
+ typeTable: TypeTable,
84
+ slot: { type: GirType | undefined; indexKey?: string; displayName?: string },
85
+ ): number {
86
+ const id = typeTable.types.length;
87
+ typeTable.types.push(slot.type);
88
+ typeTable.names.push(slot.displayName);
89
+ if (slot.indexKey !== undefined) typeTable.index.set(slot.indexKey, id);
90
+ return id;
91
+ }
92
+
93
+ private addType(nsId: number, name: string, type: GirType): void {
94
+ const typeTable = this.typeTableOf(nsId);
95
+ const existing = typeTable.index.get(name);
96
+ if (existing !== undefined) {
97
+ typeTable.types[existing] = type;
98
+ return;
99
+ }
100
+ this.insertIntoTypeTable(typeTable, { type, indexKey: name, displayName: name });
101
+ }
102
+
103
+ 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 };
109
+ }
110
+
111
+ private addAnonymousType(nsId: number, type: GirType): TypeId {
112
+ const typeTable = this.typeTableOf(nsId);
113
+ const id = this.insertIntoTypeTable(typeTable, { type });
114
+ return { nsId, id };
115
+ }
116
+
117
+ private findTypeByName(currentNsId: number, name: string): TypeId {
118
+ const [namespaceName, localName] = splitOptionalNamespace(name);
119
+ const targetNsId = namespaceName === undefined ? currentNsId : this.ensureNsId(namespaceName);
120
+ return this.findType(targetNsId, localName);
121
+ }
122
+
123
+ private parseContext(nsId: number): ParseContext {
124
+ const context: ParseContext = {
125
+ nsId,
126
+ findType: (name) => this.findTypeByName(nsId, name),
127
+ addPrimitive: (category) => this.addPrimitive(category),
128
+ addVarargs: () => this.addVarargs(),
129
+ addContainer: (type: CArrayType | ListType | HashTableType) => this.addAnonymousType(nsId, type),
130
+ addAnonymousCallback: (node) =>
131
+ this.addAnonymousType(nsId, {
132
+ kind: "callback",
133
+ namespace: this.namespaceOf(nsId),
134
+ value: callbackFromNode(node, context),
135
+ }),
136
+ };
137
+ return context;
138
+ }
139
+
140
+ private addPrimitive(category: PrimitiveCategory): TypeId {
141
+ return this.findOrAddContainer(`primitive:${category}`, { kind: "primitive", category });
142
+ }
143
+
144
+ private addVarargs(): TypeId {
145
+ return this.findOrAddContainer("varargs", { kind: "varargs" });
146
+ }
147
+
148
+ private findOrAddContainer(key: string, type: GirType): TypeId {
149
+ const typeTable = this.typeTableOf(INTERNAL_NS_ID);
150
+ const existing = typeTable.index.get(key);
151
+ if (existing !== undefined) return { nsId: INTERNAL_NS_ID, id: existing };
152
+ const id = this.insertIntoTypeTable(typeTable, { type, indexKey: key });
153
+ return { nsId: INTERNAL_NS_ID, id };
154
+ }
155
+
156
+ private addDeclarations(shell: GirNamespace): void {
157
+ const nsId = shell.id;
158
+ for (const value of shell.classes) this.addType(nsId, value.name, { kind: "class", namespace: shell, value });
159
+ for (const value of shell.interfaces) {
160
+ this.addType(nsId, value.name, { kind: "interface", namespace: shell, value });
161
+ }
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 });
164
+ for (const value of shell.callbacks) {
165
+ this.addType(nsId, value.name, { kind: "callback", namespace: shell, value });
166
+ }
167
+ for (const alias of shell.aliases) {
168
+ this.addType(nsId, alias.name, { kind: "alias", namespace: shell, value: alias });
169
+ }
170
+ }
171
+
172
+ typeOf(tid: TypeId): GirType | undefined {
173
+ return this.typeTables[tid.nsId]?.types[tid.id];
174
+ }
175
+
176
+ nameOf(tid: TypeId): { namespaceName: string; typeName: string } | undefined {
177
+ const typeName = this.typeTables[tid.nsId]?.names[tid.id];
178
+ const namespaceName = this.nsNameById[tid.nsId];
179
+ if (typeName === undefined || namespaceName === undefined) return undefined;
180
+ return { namespaceName, typeName };
181
+ }
182
+
183
+ resolveType(currentNamespaceName: string, name: string): GirType | undefined {
184
+ const currentNsId = this.nsIdByName.get(currentNamespaceName);
185
+ if (currentNsId === undefined) return undefined;
186
+ const [namespaceName, localName] = splitOptionalNamespace(name);
187
+ 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
+
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));
217
+ }
218
+ for (const { shell } of discovered) {
219
+ library.addDeclarations(shell);
220
+ }
221
+ library.girFilesValue = girFiles;
222
+ }
223
+
224
+ static load(libraries: string[], girPath: string[]): Library {
225
+ const library = new Library();
226
+ Library.drive(library, libraries, girPath);
227
+ return library;
228
+ }
229
+ }
230
+
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
+ };
@@ -1,118 +1,123 @@
1
- import { boxedFromNode, boxedKind, type GirBoxed } from "./boxed.js";
2
1
  import { callbackFromNode, type GirCallback } from "./callback.js";
3
2
  import { classFromNode, type GirClass } from "./class.js";
4
3
  import { enumFromNode, type GirEnum } from "./enum.js";
5
4
  import { functionFromNode, type GirFunction } from "./function.js";
6
- import { attr, childrenOf, type RawNode } from "./parse.js";
7
- import { type GirTypeRef, typeRefFromSlot } from "./type-ref.js";
5
+ import { attr, childOf, childrenOf, docOf, nameAttr, type RawNode } from "./parse.js";
6
+ import { type GirRecord, isVtableRecord, recordFromNode } from "./record.js";
7
+ import type { ParseContext, TypeId } from "./type-id.js";
8
+ import { typeRefFromNode } from "./type-ref.js";
8
9
 
9
- /** A `<constant>` declaration at namespace level. */
10
10
  export type GirConstant = {
11
- readonly name: string;
12
- readonly cType: string | undefined;
13
- readonly cIdentifier: string | undefined;
14
- /** Constant value as the raw string from GIR. */
15
- readonly value: string;
16
- readonly type: GirTypeRef | undefined;
11
+ name: string;
12
+ doc: string | undefined;
13
+ value: string;
14
+ type: TypeId | undefined;
17
15
  };
18
16
 
19
- /** A `<alias>` declaration at namespace level. */
20
17
  export type GirAlias = {
21
- readonly name: string;
22
- readonly target: GirTypeRef | undefined;
18
+ name: string;
19
+ doc: string | undefined;
20
+ cType: string | undefined;
21
+ target: TypeId | undefined;
22
+ targetCType: string | undefined;
23
23
  };
24
24
 
25
- /**
26
- * A single namespace loaded from one `.gir` file.
27
- *
28
- * The class lives in `namespace.ts` (mutable holder) because populating it
29
- * involves walking the raw XML tree once, materialising each construct.
30
- * After construction the public surface is read-only by convention.
31
- */
32
25
  export type GirNamespace = {
33
- /** Namespace name (e.g. `"Gtk"`). */
34
- readonly name: string;
35
- /** Namespace version (e.g. `"4.0"`). */
36
- readonly version: string;
37
- /** `Name-Version` identifier (e.g. `"Gtk-4.0"`). */
38
- readonly identifier: string;
39
- /** Comma-separated `shared-library` value (passed verbatim to `t.fn(...)`). */
40
- readonly sharedLibrary: string | undefined;
41
- /** GIR `c:identifier-prefixes` (used to strip type prefixes). */
42
- readonly cIdentifierPrefixes: readonly string[];
43
- /** GIR `c:symbol-prefixes` (used to strip function prefixes). */
44
- readonly cSymbolPrefixes: readonly string[];
45
- /** Other namespaces referenced via `<include>`. */
46
- readonly includes: readonly NamespaceInclude[];
47
- readonly classes: readonly GirClass[];
48
- readonly interfaces: readonly GirClass[];
49
- readonly boxeds: readonly GirBoxed[];
50
- readonly enums: readonly GirEnum[];
51
- readonly callbacks: readonly GirCallback[];
52
- readonly functions: readonly GirFunction[];
53
- readonly constants: readonly GirConstant[];
54
- readonly aliases: readonly GirAlias[];
26
+ id: number;
27
+ name: string;
28
+ sharedLibrary: string | undefined;
29
+ cSymbolPrefixes: string[];
30
+ classes: GirClass[];
31
+ interfaces: GirClass[];
32
+ records: GirRecord[];
33
+ enums: GirEnum[];
34
+ callbacks: GirCallback[];
35
+ functions: GirFunction[];
36
+ constants: GirConstant[];
37
+ aliases: GirAlias[];
55
38
  };
56
39
 
57
- /** A `<include>` entry pointing at another namespace identifier. */
40
+ export const namespaceDirectory = (namespace: Pick<GirNamespace, "name">): string => namespace.name.toLowerCase();
41
+
58
42
  type NamespaceInclude = {
59
- readonly name: string;
60
- readonly version: string;
43
+ name: string;
44
+ version: string;
45
+ };
46
+
47
+ export type NamespaceHeader = {
48
+ name: string;
49
+ sharedLibrary: string | undefined;
50
+ cSymbolPrefixes: string[];
51
+ includes: NamespaceInclude[];
52
+ namespaceNode: RawNode;
61
53
  };
62
54
 
63
- /**
64
- * Builds a {@link GirNamespace} from a parsed `<repository>` root.
65
- *
66
- * @param repositoryNode - The raw `<repository>` element returned by `parseGirFile`
67
- */
68
- export const namespaceFromRepository = (repositoryNode: RawNode): GirNamespace => {
55
+ export const parseNamespaceHeader = (repositoryNode: RawNode): NamespaceHeader => {
69
56
  const includes = childrenOf(repositoryNode, "include").map<NamespaceInclude>((include) => ({
70
- name: attr(include, "name") ?? "",
57
+ name: nameAttr(include),
71
58
  version: attr(include, "version") ?? "",
72
59
  }));
73
60
  const namespaceNode = childrenOf(repositoryNode, "namespace")[0];
74
61
  if (namespaceNode === undefined) {
75
62
  throw new Error("GIR repository has no <namespace> child");
76
63
  }
77
- const name = attr(namespaceNode, "name") ?? "";
78
- const version = attr(namespaceNode, "version") ?? "";
79
64
  return {
80
- name,
81
- version,
82
- identifier: `${name}-${version}`,
65
+ name: nameAttr(namespaceNode),
83
66
  sharedLibrary: attr(namespaceNode, "shared-library"),
84
- cIdentifierPrefixes: splitPrefixes(attr(namespaceNode, "c:identifier-prefixes")),
85
67
  cSymbolPrefixes: splitPrefixes(attr(namespaceNode, "c:symbol-prefixes")),
86
68
  includes,
87
- classes: childrenOf(namespaceNode, "class").map((klass) => classFromNode(klass, false)),
88
- interfaces: childrenOf(namespaceNode, "interface").map((iface) => classFromNode(iface, true)),
89
- boxeds: collectBoxeds(namespaceNode),
90
- enums: collectEnums(namespaceNode),
91
- callbacks: childrenOf(namespaceNode, "callback").map(callbackFromNode),
92
- functions: childrenOf(namespaceNode, "function").map((fn) => functionFromNode(fn, "function")),
93
- constants: childrenOf(namespaceNode, "constant").map((constant) => ({
94
- name: attr(constant, "name") ?? "",
95
- cType: attr(constant, "c:type"),
96
- cIdentifier: attr(constant, "c:identifier"),
97
- value: attr(constant, "value") ?? "",
98
- type: typeRefFromSlot(constant),
99
- })),
100
- aliases: childrenOf(namespaceNode, "alias").map((alias) => ({
101
- name: attr(alias, "name") ?? "",
102
- target: typeRefFromSlot(alias),
103
- })),
69
+ namespaceNode,
104
70
  };
105
71
  };
106
72
 
107
- const splitPrefixes = (raw: string | undefined): readonly string[] =>
73
+ export const createNamespaceShell = (header: NamespaceHeader, id: number): GirNamespace => ({
74
+ id,
75
+ name: header.name,
76
+ sharedLibrary: header.sharedLibrary,
77
+ cSymbolPrefixes: header.cSymbolPrefixes,
78
+ classes: [],
79
+ interfaces: [],
80
+ records: [],
81
+ enums: [],
82
+ callbacks: [],
83
+ functions: [],
84
+ constants: [],
85
+ aliases: [],
86
+ });
87
+
88
+ export const populateNamespaceBody = (shell: GirNamespace, namespaceNode: RawNode, context: ParseContext): void => {
89
+ shell.classes = childrenOf(namespaceNode, "class").map((klass) => classFromNode(klass, false, context));
90
+ shell.interfaces = childrenOf(namespaceNode, "interface").map((iface) => classFromNode(iface, true, context));
91
+ shell.records = collectRecords(namespaceNode, context);
92
+ shell.enums = collectEnums(namespaceNode);
93
+ shell.callbacks = childrenOf(namespaceNode, "callback").map((callback) => callbackFromNode(callback, context));
94
+ shell.functions = childrenOf(namespaceNode, "function").map((fn) => functionFromNode(fn, context));
95
+ shell.constants = childrenOf(namespaceNode, "constant").map((constant) => ({
96
+ name: nameAttr(constant),
97
+ doc: docOf(constant),
98
+ value: attr(constant, "value") ?? "",
99
+ type: typeRefFromNode(constant, context),
100
+ }));
101
+ shell.aliases = childrenOf(namespaceNode, "alias").map((alias) => ({
102
+ name: nameAttr(alias),
103
+ doc: docOf(alias),
104
+ cType: attr(alias, "c:type"),
105
+ target: typeRefFromNode(alias, context),
106
+ targetCType: attr(childOf(alias, "type"), "c:type"),
107
+ }));
108
+ };
109
+
110
+ const splitPrefixes = (raw: string | undefined): string[] =>
108
111
  (raw ?? "").split(",").filter((prefix) => prefix.length > 0);
109
112
 
110
- const collectBoxeds = (namespaceNode: RawNode): readonly GirBoxed[] => [
111
- ...childrenOf(namespaceNode, "record").map((record) => boxedFromNode(record, boxedKind(record), false)),
112
- ...childrenOf(namespaceNode, "union").map((union) => boxedFromNode(union, boxedKind(union), true)),
113
+ const collectRecords = (namespaceNode: RawNode, context: ParseContext): GirRecord[] => [
114
+ ...childrenOf(namespaceNode, "record").map((record) =>
115
+ recordFromNode(record, isVtableRecord(record), false, context),
116
+ ),
117
+ ...childrenOf(namespaceNode, "union").map((union) => recordFromNode(union, isVtableRecord(union), true, context)),
113
118
  ];
114
119
 
115
- const collectEnums = (namespaceNode: RawNode) => [
120
+ const collectEnums = (namespaceNode: RawNode): GirEnum[] => [
116
121
  ...childrenOf(namespaceNode, "enumeration").map((enumeration) => enumFromNode(enumeration, "enumeration")),
117
122
  ...childrenOf(namespaceNode, "bitfield").map((bitfield) => enumFromNode(bitfield, "bitfield")),
118
123
  ];
@@ -1,120 +1,91 @@
1
- import { attr, attrBool, childOf, type RawNode } from "./parse.js";
2
- import { type GirTypeRef, typeRefFromSlot } from "./type-ref.js";
1
+ import { attr, attrBool, childOf, childrenOf, docOf, intAttr, nameAttr, parseEnumAttr, type RawNode } from "./parse.js";
2
+ import type { ParseContext, TypeId } from "./type-id.js";
3
+ import { typeRefFromNode } from "./type-ref.js";
3
4
 
4
- /** Direction of a `<parameter>` (`in`, `out`, `inout`). */
5
5
  type ParameterDirection = "in" | "out" | "inout";
6
6
 
7
- /**
8
- * Lifetime conveyed by `transfer-ownership`. Mirrors the GIR vocabulary one
9
- * for one; the marshal layer translates to the runtime's `Ownership` set.
10
- */
11
7
  export type ParameterTransfer = "none" | "full" | "container";
12
8
 
13
- /** Lifetime of a callback parameter (`scope=…`). */
14
9
  type CallbackScope = "call" | "notified" | "async" | "forever";
15
10
 
16
- /**
17
- * A `<parameter>` or `<instance-parameter>` of a callable.
18
- *
19
- * Only the bits the FFI writers actually look at are retained; the original
20
- * raw node is dropped so the domain model is self-describing.
21
- */
11
+ const DIRECTIONS: Set<ParameterDirection> = new Set(["in", "out", "inout"]);
12
+ const TRANSFERS: Set<ParameterTransfer> = new Set(["none", "full", "container"]);
13
+ const SCOPES: Set<CallbackScope> = new Set(["call", "notified", "async", "forever"]);
14
+
15
+ export const transferOwnership = (node: RawNode): ParameterTransfer =>
16
+ parseEnumAttr(attr(node, "transfer-ownership"), TRANSFERS, "none", "transfer-ownership");
17
+
18
+ const nullableAttr = (node: RawNode): boolean => attrBool(node, "nullable") || attrBool(node, "allow-none");
19
+
22
20
  export type GirParameter = {
23
- /** Parameter name as authored in GIR (often snake_case). */
24
- readonly name: string;
25
- /** Typed slot of the parameter, or `undefined` for `<varargs/>`. */
26
- readonly type: GirTypeRef | undefined;
27
- readonly direction: ParameterDirection;
28
- readonly transferOwnership: ParameterTransfer;
29
- readonly nullable: boolean;
30
- readonly optional: boolean;
31
- /** `caller-allocates="1"` used in out parameters that fill a caller buffer. */
32
- readonly callerAllocates: boolean;
33
- /** Lifetime of a callback parameter (defined only when the parameter is a callback). */
34
- readonly scope: CallbackScope | undefined;
35
- /** Index of the paired `gpointer user_data` parameter in the C signature. */
36
- readonly closureIndex: number | undefined;
37
- /** Index of the paired `GDestroyNotify` parameter in the C signature. */
38
- readonly destroyIndex: number | undefined;
39
- /** `true` for `<instance-parameter>` (the implicit `self` of a method). */
40
- readonly isInstance: boolean;
41
- /** `<varargs/>` parameter; not marshalable. */
42
- readonly isVarargs: boolean;
21
+ name: string;
22
+ type: TypeId | undefined;
23
+ direction: ParameterDirection;
24
+ transferOwnership: ParameterTransfer;
25
+ nullable: boolean;
26
+ optional: boolean;
27
+ callerAllocates: boolean;
28
+ scope: CallbackScope | undefined;
29
+ closureIndex: number | undefined;
30
+ destroyIndex: number | undefined;
31
+ isVarargs: boolean;
43
32
  };
44
33
 
45
- /**
46
- * Builds a {@link GirParameter} from a `<parameter>` or `<instance-parameter>`.
47
- *
48
- * @param node - The XML element
49
- * @param isInstance - Whether the source element was `<instance-parameter>`
50
- */
51
- export const parameterFromNode = (node: RawNode, isInstance: boolean): GirParameter => {
52
- const direction = (attr(node, "direction") ?? "in") as ParameterDirection;
53
- const transferOwnership = (attr(node, "transfer-ownership") ?? "none") as ParameterTransfer;
54
- const closure = attr(node, "closure");
55
- const destroy = attr(node, "destroy");
56
- return {
57
- name: attr(node, "name") ?? "",
58
- type: typeRefFromSlot(node),
59
- direction,
60
- transferOwnership,
61
- nullable: attrBool(node, "nullable") || attrBool(node, "allow-none"),
62
- optional: attrBool(node, "optional"),
63
- callerAllocates: attrBool(node, "caller-allocates"),
64
- scope: attr(node, "scope") as CallbackScope | undefined,
65
- closureIndex: closure === undefined ? undefined : Number.parseInt(closure, 10),
66
- destroyIndex: destroy === undefined ? undefined : Number.parseInt(destroy, 10),
67
- isInstance,
68
- isVarargs: childOf(node, "varargs") !== undefined,
69
- };
70
- };
34
+ export const parameterFromNode = (node: RawNode, context: ParseContext): GirParameter => ({
35
+ name: nameAttr(node),
36
+ type: typeRefFromNode(node, context),
37
+ direction: parseEnumAttr(attr(node, "direction"), DIRECTIONS, "in", "direction"),
38
+ transferOwnership: transferOwnership(node),
39
+ nullable: nullableAttr(node),
40
+ optional: attrBool(node, "optional"),
41
+ callerAllocates: attrBool(node, "caller-allocates"),
42
+ scope: parseEnumAttr(attr(node, "scope"), SCOPES, undefined, "scope"),
43
+ closureIndex: intAttr(node, "closure"),
44
+ destroyIndex: intAttr(node, "destroy"),
45
+ isVarargs: childOf(node, "varargs") !== undefined,
46
+ });
71
47
 
72
- /**
73
- * Whether a parameter is a pure out-parameter: `direction="out"` and not
74
- * caller-allocated, so it marshals through a `{ value }` cell the callee writes into.
75
- *
76
- * @param parameter - The parameter to test
77
- */
78
48
  export const isOutParameter = (parameter: GirParameter): boolean =>
79
49
  parameter.direction === "out" && !parameter.callerAllocates;
80
50
 
81
- /**
82
- * Whether a parameter is a caller-allocated out-parameter: `direction="out"`
83
- * with `caller-allocates="1"`, passed as a pre-built handle the callee fills
84
- * in place rather than through a `{ value }` cell.
85
- *
86
- * @param parameter - The parameter to test
87
- */
88
51
  export const isCallerAllocatedOut = (parameter: GirParameter): boolean =>
89
52
  parameter.direction === "out" && parameter.callerAllocates;
90
53
 
91
- /**
92
- * Whether a parameter is an inout parameter (`direction="inout"`).
93
- *
94
- * @param parameter - The parameter to test
95
- */
96
54
  export const isInoutParameter = (parameter: GirParameter): boolean => parameter.direction === "inout";
97
55
 
98
- /** A `<return-value>` plus its inferred type and transfer settings. */
99
56
  export type GirReturnValue = {
100
- readonly type: GirTypeRef | undefined;
101
- readonly transferOwnership: ParameterTransfer;
102
- readonly nullable: boolean;
57
+ type: TypeId | undefined;
58
+ transferOwnership: ParameterTransfer;
59
+ nullable: boolean;
60
+ skip: boolean;
103
61
  };
104
62
 
105
- /**
106
- * Builds a {@link GirReturnValue} from a `<return-value>` element, or returns a
107
- * void return when the element is missing.
108
- *
109
- * @param node - The `<return-value>` element, or `undefined`
110
- */
111
- export const returnValueFromNode = (node: RawNode | undefined): GirReturnValue => {
63
+ const returnValueFromNode = (node: RawNode | undefined, context: ParseContext): GirReturnValue => {
112
64
  if (node === undefined) {
113
- return { type: undefined, transferOwnership: "none", nullable: false };
65
+ return { type: undefined, transferOwnership: "none", nullable: false, skip: false };
114
66
  }
115
67
  return {
116
- type: typeRefFromSlot(node),
117
- transferOwnership: (attr(node, "transfer-ownership") ?? "none") as ParameterTransfer,
118
- nullable: attrBool(node, "nullable") || attrBool(node, "allow-none"),
68
+ type: typeRefFromNode(node, context),
69
+ transferOwnership: transferOwnership(node),
70
+ nullable: nullableAttr(node),
71
+ skip: attrBool(node, "skip"),
72
+ };
73
+ };
74
+
75
+ export type GirSignal = {
76
+ name: string;
77
+ doc: string | undefined;
78
+ parameters: GirParameter[];
79
+ returnValue: GirReturnValue;
80
+ };
81
+
82
+ export const parseCallable = (node: RawNode, context: ParseContext): GirSignal => {
83
+ const parametersNode = childOf(node, "parameters");
84
+ const parameterNodes = childrenOf(parametersNode, "parameter");
85
+ return {
86
+ name: nameAttr(node),
87
+ doc: docOf(node),
88
+ parameters: parameterNodes.map((parameter) => parameterFromNode(parameter, context)),
89
+ returnValue: returnValueFromNode(childOf(node, "return-value"), context),
119
90
  };
120
91
  };