@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
@@ -1,402 +0,0 @@
1
- import { quote } from "@gtkx/utils";
2
- import { joinArgs } from "../dsl/emit.js";
3
- import { callbackFromNode } from "../gir/callback.js";
4
- import { isInoutParameter, isOutParameter } from "../gir/parameter.js";
5
- import { qualifyTypeRef } from "../gir/qualify.js";
6
- import { computeBoxedFieldSlots } from "./boxed-layout.js";
7
- /**
8
- * Inline byte sizes for boxed value types whose GIR record is opaque, so the
9
- * field layout cannot be computed but the type is still passed by value in
10
- * arrays (e.g. the `GValue` cells `g_signal_emitv` consumes).
11
- */
12
- const HARDCODED_INLINE_ELEMENT_SIZES = new Map([["GObject.Value", 24]]);
13
- /**
14
- * Maps a GIR transfer-ownership value to the FFI runtime's ownership
15
- * vocabulary.
16
- *
17
- * The runtime treats `"none"` as `"borrowed"` for incoming values and as
18
- * `"full"` for return values that already own the pointer. Callers pass
19
- * the GIR string directly; this helper does the translation.
20
- *
21
- * @param transfer - GIR transfer-ownership (`"none"`, `"full"`, `"container"`)
22
- */
23
- const ffiOwnership = (transfer) => {
24
- if (transfer === "full")
25
- return "full";
26
- if (transfer === "container")
27
- return "full";
28
- return "borrowed";
29
- };
30
- /**
31
- * Derives the transfer of a container's elements from the container's own
32
- * transfer. A `"container"` transfer owns the container but borrows its
33
- * elements, so they marshal as `"none"`; otherwise elements inherit the
34
- * container's transfer.
35
- *
36
- * @param transfer - The container's GIR transfer-ownership
37
- */
38
- const deriveElementTransfer = (transfer) => transfer === "container" ? "none" : transfer;
39
- /**
40
- * Renders a TypeScript expression that materialises the FFI type
41
- * descriptor for `ref`.
42
- *
43
- * @param context - The module context (used for cross-namespace imports)
44
- * @param ref - The GIR type reference, or `undefined` for void
45
- * @param transfer - GIR transfer-ownership conveyed onto the descriptor
46
- * @param argIndexOffset - Shift applied to a sized array's length-parameter
47
- * index so it addresses the FFI argument list (which includes the
48
- * instance receiver) rather than the GIR parameter list
49
- */
50
- export const renderFfiType = (context, ref, transfer = "none", argIndexOffset = 0) => {
51
- if (ref === undefined)
52
- return "t.void";
53
- const ownership = ffiOwnership(transfer);
54
- switch (ref.kind) {
55
- case "primitive":
56
- return primitiveExpression(ref.category, ownership);
57
- case "varargs":
58
- return "t.void";
59
- case "callback":
60
- return "t.void";
61
- case "named":
62
- return namedExpression(context, ref, ownership);
63
- case "array":
64
- return arrayExpression(context, ref, transfer, argIndexOffset);
65
- case "list": {
66
- if (ref.flavor === "gbytearray")
67
- return `t.byteArray(${quote(ownership)})`;
68
- const element = renderFfiType(context, ref.element, deriveElementTransfer(transfer), argIndexOffset);
69
- const helper = LIST_HELPERS[ref.flavor];
70
- return `t.${helper}(${element}, ${quote(ownership)})`;
71
- }
72
- case "hashtable": {
73
- const elementTransfer = deriveElementTransfer(transfer);
74
- const key = renderFfiType(context, ref.key, elementTransfer, argIndexOffset);
75
- const value = renderFfiType(context, ref.value, elementTransfer, argIndexOffset);
76
- return `t.hashTable(${key}, ${value}, ${quote(ownership)})`;
77
- }
78
- }
79
- };
80
- /**
81
- * Resolves a parameter type reference to its callback declaration, whether
82
- * declared inline (`<callback>` child) or by name (a namespace-level
83
- * `<callback>`). Returns `undefined` for non-callback references.
84
- *
85
- * @param context - The module context
86
- * @param ref - The parameter type reference
87
- */
88
- export const resolveCallbackType = (context, ref) => {
89
- if (ref === undefined)
90
- return undefined;
91
- if (ref.kind === "callback")
92
- return { callback: callbackFromNode(ref.callback), namespaceName: context.namespace.name };
93
- if (ref.kind !== "named")
94
- return undefined;
95
- const owner = ref.namespaceName ?? context.namespace.name;
96
- const resolved = context.repository.resolveNamed(owner, ref.typeName);
97
- if (resolved === undefined || resolved.kind !== "callback")
98
- return undefined;
99
- return { callback: resolved.value, namespaceName: resolved.namespace.name };
100
- };
101
- /**
102
- * Whether a type reference is a scalar the native trampoline can read and
103
- * write through a `{ value }` cell: a non-string, non-void primitive, an enum or
104
- * flags type, or an alias resolving to one. Pointer-shaped types (strings,
105
- * objects, boxed records, arrays) are excluded — their out-parameter slots may
106
- * be uninitialized, so reading the incoming value would be unsound.
107
- *
108
- * @param repository - The GIR repository
109
- * @param namespaceName - The namespace the reference is resolved against
110
- * @param ref - The type reference
111
- */
112
- export const isScalarRef = (repository, namespaceName, ref) => {
113
- if (ref === undefined)
114
- return false;
115
- if (ref.kind === "primitive")
116
- return ref.category !== "string" && ref.category !== "void";
117
- if (ref.kind !== "named")
118
- return false;
119
- const resolved = repository.resolveNamed(ref.namespaceName ?? namespaceName, ref.typeName);
120
- if (resolved === undefined)
121
- return false;
122
- if (resolved.kind === "enum")
123
- return true;
124
- if (resolved.kind === "alias") {
125
- return resolved.targetRef !== undefined && isScalarRef(repository, resolved.namespace.name, resolved.targetRef);
126
- }
127
- return false;
128
- };
129
- /**
130
- * Whether an inout parameter marshals through a readable-and-writable
131
- * `{ value }` cell rather than being passed by handle and mutated in place.
132
- *
133
- * True for scalar inout parameters (see {@link isScalarRef}): the native
134
- * trampoline seeds the cell with the incoming value, the handler returns its
135
- * replacement in the tuple, and the cell is flushed back through the pointer.
136
- * Handle-passing inout parameters (objects, interfaces, boxed records) stay
137
- * plain arguments the handler mutates directly.
138
- *
139
- * @param context - The module context
140
- * @param parameter - The parameter to test
141
- */
142
- export const isCellInout = (context, parameter) => isInoutParameter(parameter) && isScalarRef(context.repository, context.namespace.name, parameter.type);
143
- /**
144
- * Renders the `t.trampoline(...)` FFI descriptor for a callback parameter.
145
- *
146
- * The trampoline carries the callback's own argument and return FFI types,
147
- * the index of its `user_data` slot, and the owning parameter's `scope` plus
148
- * whether a paired `GDestroyNotify` is present. The native marshaller folds
149
- * the C-level callback, `user_data`, and destroy arguments into this single
150
- * descriptor. Returns `undefined` when `ref` is not a callback.
151
- *
152
- * @param context - The module context
153
- * @param ref - The parameter type reference
154
- * @param owningParameter - The parameter that carries the callback, for scope/destroy
155
- */
156
- export const renderTrampolineType = (context, ref, owningParameter) => {
157
- const resolved = resolveCallbackType(context, ref);
158
- if (resolved === undefined)
159
- return undefined;
160
- const { callback, namespaceName } = resolved;
161
- const argTypes = callback.parameters.map((parameter) => {
162
- const ffi = renderFfiType(context, qualifyTypeRef(parameter.type, namespaceName), parameter.transferOwnership);
163
- return isOutParameter(parameter) || isCellInout(context, parameter) ? `t.ref(${ffi})` : ffi;
164
- });
165
- let userDataIndex;
166
- callback.parameters.forEach((parameter, index) => {
167
- if (parameter.name === "user_data" || parameter.name === "data")
168
- userDataIndex = index;
169
- });
170
- const returnRef = qualifyTypeRef(callback.returnValue.type, namespaceName);
171
- const isVoid = returnRef === undefined || (returnRef.kind === "primitive" && returnRef.category === "void");
172
- const returnType = isVoid ? "t.void" : renderFfiType(context, returnRef, callback.returnValue.transferOwnership);
173
- const options = [];
174
- if (owningParameter.destroyIndex !== undefined)
175
- options.push("hasDestroy: true");
176
- if (userDataIndex !== undefined)
177
- options.push(`userDataIndex: ${userDataIndex}`);
178
- if (owningParameter.scope !== undefined)
179
- options.push(`scope: ${quote(owningParameter.scope)}`);
180
- const optionsArg = options.length > 0 ? `, { ${options.join(", ")} }` : "";
181
- return `t.trampoline([${argTypes.join(", ")}], ${returnType}${optionsArg})`;
182
- };
183
- const LIST_HELPERS = {
184
- glist: "list",
185
- gslist: "slist",
186
- gptrarray: "ptrArray",
187
- garray: "gArray",
188
- gbytearray: "byteArray",
189
- };
190
- const primitiveExpression = (category, ownership) => {
191
- if (category === "void")
192
- return "t.void";
193
- if (category === "string")
194
- return `t.string(${quote(ownership)})`;
195
- if (category === "pointer")
196
- return "t.uint64";
197
- return `t.${category}`;
198
- };
199
- const namedExpression = (context, ref, ownership) => {
200
- const namespaceName = ref.namespaceName ?? context.namespace.name;
201
- const resolved = context.repository.resolveNamed(namespaceName, ref.typeName);
202
- if (resolved === undefined) {
203
- return `t.object(${quote(ownership)})`;
204
- }
205
- return expressionForResolved(context, resolved, ownership);
206
- };
207
- /**
208
- * Ref/unref functions for fundamental types whose GIR record omits
209
- * `glib:ref-func`/`glib:unref-func` but which are nonetheless ref-counted
210
- * fundamentals (their `GType` is not a boxed type, so `g_boxed_free` aborts).
211
- * Keyed by GLib type name.
212
- */
213
- const INTRINSIC_FUNDAMENTAL_FUNCS = new Map([
214
- ["GVariant", { ref: "g_variant_ref_sink", unref: "g_variant_unref" }],
215
- ]);
216
- /**
217
- * Translates a GLib ref-func into the function the FFI runtime calls to add an
218
- * independent reference.
219
- *
220
- * The runtime references a fundamental to make a defensive copy of a borrowed
221
- * return, to clone a handle, or to hand a callee its own reference for a
222
- * transfer-full argument — each must *add* a reference. GObject registers
223
- * `*_ref_sink` (e.g. `g_param_spec_ref_sink`, `g_variant_ref_sink`) as the
224
- * ref-func for floating types, but a sink only clears the floating flag on a
225
- * floating instance and adds no reference, so a wrapper built from it would
226
- * later unref a reference it never took and abort. The plain `*_ref`
227
- * counterpart adds a reference for floating and non-floating instances alike.
228
- */
229
- const referenceAddingFunc = (refFunc) => refFunc.endsWith("_ref_sink") ? refFunc.slice(0, -"_sink".length) : refFunc;
230
- const renderFundamental = (descriptor) => {
231
- const { lib, refFunc, unrefFunc, glibTypeName, ownership } = descriptor;
232
- const parts = [`ownership: ${quote(ownership)}`];
233
- if (glibTypeName !== undefined)
234
- parts.push(`typeName: ${quote(glibTypeName)}`);
235
- return `t.fundamental(${quote(lib)}, ${quote(referenceAddingFunc(refFunc))}, ${quote(unrefFunc)}, { ${parts.join(", ")} })`;
236
- };
237
- const classOrInterfaceExpression = (resolved, ownership) => {
238
- const cls = resolved.value;
239
- if (cls.glibRefFunc === undefined || cls.glibUnrefFunc === undefined) {
240
- return `t.object(${quote(ownership)})`;
241
- }
242
- return renderFundamental({
243
- lib: resolved.namespace.sharedLibrary ?? "",
244
- refFunc: cls.glibRefFunc,
245
- unrefFunc: cls.glibUnrefFunc,
246
- glibTypeName: cls.glibTypeName,
247
- ownership,
248
- });
249
- };
250
- const fundamentalAncestor = (context, namespaceName, typeName) => {
251
- const seen = new Set();
252
- let owner = namespaceName;
253
- let name = typeName;
254
- while (!seen.has(`${owner}.${name}`)) {
255
- seen.add(`${owner}.${name}`);
256
- const resolved = context.repository.resolveNamed(owner, name);
257
- if (resolved === undefined || (resolved.kind !== "class" && resolved.kind !== "interface"))
258
- return undefined;
259
- const cls = resolved.value;
260
- if (cls.fundamental && cls.glibRefFunc !== undefined && cls.glibUnrefFunc !== undefined) {
261
- return {
262
- lib: resolved.namespace.sharedLibrary ?? "",
263
- refFunc: cls.glibRefFunc,
264
- unrefFunc: cls.glibUnrefFunc,
265
- glibTypeName: cls.glibTypeName,
266
- };
267
- }
268
- if (cls.parent === undefined)
269
- return undefined;
270
- const dot = cls.parent.indexOf(".");
271
- owner = dot === -1 ? resolved.namespace.name : cls.parent.slice(0, dot);
272
- name = dot === -1 ? cls.parent : cls.parent.slice(dot + 1);
273
- }
274
- return undefined;
275
- };
276
- /**
277
- * Renders the FFI descriptor for a method's instance (`self`) parameter.
278
- *
279
- * The receiver is always passed as a borrowed pointer regardless of the GIR
280
- * instance-parameter transfer (`transfer="full"` on e.g. `gdk_event_unref`
281
- * describes C-side consumption, not FFI ownership). A receiver whose ancestry
282
- * reaches a ref-counted fundamental (e.g. `GskRenderNode`) is marshalled as
283
- * `t.fundamental`; every other receiver — GObject subclasses and opaque
284
- * records alike — is a borrowed `t.object`.
285
- *
286
- * @param context - The module context
287
- * @param instance - The instance parameter
288
- */
289
- export const renderSelfFfiType = (context, instance) => {
290
- const ref = instance.type;
291
- if (ref === undefined || ref.kind !== "named")
292
- return `t.object("borrowed")`;
293
- const owner = ref.namespaceName ?? context.namespace.name;
294
- const resolved = context.repository.resolveNamed(owner, ref.typeName);
295
- if (resolved === undefined)
296
- return `t.object("borrowed")`;
297
- if (resolved.kind === "class" || resolved.kind === "interface") {
298
- const ancestor = fundamentalAncestor(context, owner, ref.typeName);
299
- return ancestor === undefined
300
- ? `t.object("borrowed")`
301
- : renderFundamental({ ...ancestor, ownership: "borrowed" });
302
- }
303
- if (resolved.kind === "boxed" && isReferenceableBoxed(resolved.value)) {
304
- return boxedExpression(resolved, ffiOwnership(instance.transferOwnership));
305
- }
306
- return `t.object("borrowed")`;
307
- };
308
- const isReferenceableBoxed = (boxed) => {
309
- const hasRefPair = (boxed.glibRefFunc ?? boxed.copyFunc) !== undefined && (boxed.glibUnrefFunc ?? boxed.freeFunc) !== undefined;
310
- const hasIntrinsic = boxed.glibTypeName !== undefined && INTRINSIC_FUNDAMENTAL_FUNCS.has(boxed.glibTypeName);
311
- return hasRefPair || hasIntrinsic || boxed.glibGetType !== undefined;
312
- };
313
- const boxedExpression = (resolved, ownership) => {
314
- const boxed = resolved.value;
315
- const intrinsic = boxed.glibTypeName === undefined ? undefined : INTRINSIC_FUNDAMENTAL_FUNCS.get(boxed.glibTypeName);
316
- const refFunc = boxed.glibRefFunc ?? boxed.copyFunc ?? intrinsic?.ref;
317
- const unrefFunc = boxed.glibUnrefFunc ?? boxed.freeFunc ?? intrinsic?.unref;
318
- if (refFunc !== undefined && unrefFunc !== undefined) {
319
- const lib = resolved.namespace.sharedLibrary ?? "";
320
- return renderFundamental({ lib, refFunc, unrefFunc, glibTypeName: boxed.glibTypeName, ownership });
321
- }
322
- if (boxed.glibGetType === undefined) {
323
- return `t.struct(${quote(ownership)})`;
324
- }
325
- const glibName = boxed.glibTypeName ?? boxed.cType ?? boxed.name;
326
- const lib = resolved.namespace.sharedLibrary;
327
- const libExpr = lib === undefined ? "undefined" : quote(lib);
328
- return `t.boxed(${joinArgs([quote(glibName), quote(ownership), libExpr, quote(boxed.glibGetType)])})`;
329
- };
330
- const expressionForResolved = (context, resolved, ownership) => {
331
- switch (resolved.kind) {
332
- case "class":
333
- case "interface":
334
- return classOrInterfaceExpression(resolved, ownership);
335
- case "boxed":
336
- return boxedExpression(resolved, ownership);
337
- case "enum": {
338
- const getter = resolved.value.glibGetType;
339
- const signed = resolved.value.members.some((member) => member.value.startsWith("-"));
340
- if (getter === undefined || getter === "")
341
- return signed ? "t.int32" : "t.uint32";
342
- const lib = resolved.namespace.sharedLibrary ?? "";
343
- const helper = resolved.value.kind === "bitfield" ? "flags" : "enum";
344
- return `t.${helper}(${quote(lib)}, ${quote(getter)}, ${String(signed)})`;
345
- }
346
- case "callback":
347
- return "t.void";
348
- case "alias":
349
- return aliasExpression(context, {
350
- namespace: resolved.namespace,
351
- targetRef: resolved.targetRef,
352
- ownership,
353
- });
354
- }
355
- };
356
- const arrayExpression = (context, ref, transfer, argIndexOffset) => {
357
- const ownership = ffiOwnership(transfer);
358
- const element = renderFfiType(context, ref.element, deriveElementTransfer(transfer), argIndexOffset);
359
- const size = inlineElementSize(context, ref.element);
360
- const sizeArg = size === undefined ? "" : `, ${size}`;
361
- if (ref.lengthParameterIndex !== undefined) {
362
- return `t.sizedArray(${element}, ${ref.lengthParameterIndex + argIndexOffset}, ${quote(ownership)}${sizeArg})`;
363
- }
364
- if (ref.fixedSize !== undefined) {
365
- return `t.fixedArray(${element}, ${ref.fixedSize}, ${quote(ownership)}${sizeArg})`;
366
- }
367
- const optionsArg = size === undefined ? "" : `, { elementSize: ${size} }`;
368
- return `t.array(${element}, "array", ${quote(ownership)}${optionsArg})`;
369
- };
370
- /**
371
- * Computes the inline byte size of an array element when it is a by-value
372
- * boxed struct, so the native marshaller can lay out a contiguous element
373
- * buffer. Returns `undefined` for pointer elements (objects, strings, boxed
374
- * pointers) and primitives, which the native layer already sizes.
375
- */
376
- const inlineElementSize = (context, element) => {
377
- if (element === undefined || element.kind !== "named")
378
- return undefined;
379
- const owner = element.namespaceName ?? context.namespace.name;
380
- const hardcoded = HARDCODED_INLINE_ELEMENT_SIZES.get(`${owner}.${element.typeName}`);
381
- if (hardcoded !== undefined)
382
- return hardcoded;
383
- if (element.cType?.includes("*"))
384
- return undefined;
385
- const resolved = context.repository.resolveNamed(owner, element.typeName);
386
- if (resolved === undefined || resolved.kind !== "boxed")
387
- return undefined;
388
- const boxed = resolved.value;
389
- if (boxed.opaque || boxed.disguised || boxed.fields.length === 0)
390
- return undefined;
391
- const { size } = computeBoxedFieldSlots(context, boxed.fields, boxed.isUnion);
392
- return size > 0 ? size : undefined;
393
- };
394
- const aliasExpression = (context, options) => {
395
- const { namespace, targetRef, ownership } = options;
396
- const qualified = qualifyTypeRef(targetRef, namespace.name);
397
- if (qualified === undefined) {
398
- return `t.object(${quote(ownership)})`;
399
- }
400
- return renderFfiType(context, qualified, ownership === "full" ? "full" : "none");
401
- };
402
- //# sourceMappingURL=value.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"value.js","sourceRoot":"","sources":["../../src/writers/value.ts"],"names":[],"mappings":"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"}
@@ -1,146 +0,0 @@
1
- import type { GirNamespace } from "../gir/namespace.js";
2
- import type { GirRepository } from "../gir/repository.js";
3
- import { ModuleBuilder } from "./module.js";
4
-
5
- /**
6
- * Shared context handed to every writer for a single generated FFI module.
7
- *
8
- * Bundles the namespace the writer is emitting for, the broader repository
9
- * (for cross-namespace lookups), and the in-progress {@link ModuleBuilder}.
10
- * Writers also call back into this context to register cross-namespace
11
- * runtime imports so individual writers do not need to know the relative
12
- * path layout of the generated output.
13
- *
14
- * Generated bindings live in the `@gtkx/gi` package at `<ns>/<ns>.{js,d.ts}`,
15
- * with a per-namespace barrel at `<ns>/index.js` and the augment overlay at
16
- * `<ns>/augment/*.js`. The hand-written runtime is reached through the single
17
- * `@gtkx/ffi` barrel; sibling generated namespaces are reached relative to the
18
- * gi package root.
19
- */
20
- export class ModuleContext {
21
- public readonly module = new ModuleBuilder();
22
-
23
- /**
24
- * @param namespace - The namespace this module corresponds to
25
- * @param repository - The repository containing every loaded namespace
26
- */
27
- constructor(
28
- public readonly namespace: GirNamespace,
29
- public readonly repository: GirRepository,
30
- ) {}
31
-
32
- /**
33
- * Adds a named import from the `@gtkx/ffi` runtime barrel.
34
- */
35
- addRuntimeImport(name: string): void {
36
- this.module.imports.addNamed("@gtkx/ffi", name);
37
- }
38
-
39
- /**
40
- * Adds a type-only named import from the `@gtkx/ffi` runtime barrel
41
- * (`import { type Name }`), erased from the emitted `.js`.
42
- */
43
- addRuntimeTypeImport(name: string): void {
44
- this.module.imports.addNamed("@gtkx/ffi", name, true);
45
- }
46
-
47
- /**
48
- * Adds a named import from the low-level `@gtkx/native` runtime.
49
- *
50
- * The transport primitives (`alloc`, `call`, `read`, `write`) live in
51
- * `@gtkx/native`; generated bindings reach them directly so `@gtkx/ffi`
52
- * stays the home of higher-level runtime helpers only.
53
- */
54
- addNativeImport(name: string): void {
55
- this.module.imports.addNamed("@gtkx/native", name);
56
- }
57
-
58
- /**
59
- * Adds a type-only named import from `@gtkx/native`
60
- * (`import { type Name }`), erased from the emitted `.js`.
61
- */
62
- addNativeTypeImport(name: string): void {
63
- this.module.imports.addNamed("@gtkx/native", name, true);
64
- }
65
-
66
- /** Adds the canonical `constructGObjectInstance` import from `@gtkx/ffi`. */
67
- addConstructGObjectInstanceImport(): void {
68
- this.module.imports.addNamed("@gtkx/ffi", "constructGObjectInstance");
69
- }
70
-
71
- /** Adds the `valueFromFfi` import from `@gtkx/ffi`. */
72
- addValueFromFfiImport(): void {
73
- this.module.imports.addNamed("@gtkx/ffi", "valueFromFfi");
74
- }
75
-
76
- /** Adds the `valueFromFfiOptional` import from `@gtkx/ffi`. */
77
- addValueFromFfiOptionalImport(): void {
78
- this.module.imports.addNamed("@gtkx/ffi", "valueFromFfiOptional");
79
- }
80
-
81
- /**
82
- * Adds the canonical side-effect imports for `gobject/object.js` and
83
- * `gobject/value.js`.
84
- *
85
- * Skipped for the `GObject` namespace itself (those modules import its
86
- * generated classes) and for `GLib`, which lives below GObject in the
87
- * import graph. Letting GLib bootstrap creates a runtime cycle:
88
- * `gobject.js` imports `glib.js` for `GLib.Variant` return-wrapping,
89
- * `glib.js`'s bootstrap re-enters `gobject/value.js`, and `value.ts`
90
- * touches `Value.prototype` before `gobject.js` has finished defining
91
- * `Value`. Other namespaces install the override on first import.
92
- */
93
- addGObjectBootstrapImports(): void {
94
- if (this.namespace.name === "GObject") return;
95
- if (this.namespace.name === "GLib") return;
96
- this.module.imports.addSideEffect("../gobject/augment/object.js");
97
- this.module.imports.addSideEffect("../gobject/augment/value.js");
98
- }
99
-
100
- /**
101
- * Adds a wildcard import for another namespace and returns the local
102
- * alias used.
103
- *
104
- * Most namespaces are routed through their hand-written `index.js` so any
105
- * prototype augmentations (Cairo `Context` methods, Gdk `RGBA`, Graphene
106
- * structs, …) load whenever a generated module references the namespace.
107
- * The foundational `gobject` and `glib` namespaces are routed straight to
108
- * their generated module instead, because their indexes pull in modules
109
- * that depend on values still mid-initialization, which would deadlock the
110
- * import graph.
111
- *
112
- * For non-foundational namespaces a side-effect import is recorded
113
- * alongside the wildcard so the foreign module loads even when its alias
114
- * appears only in type positions. The wildcard alias is type-stripped out
115
- * of the emitted `.js` whenever it is never read as a value, which would
116
- * otherwise drop the foreign module from the runtime graph and skip its
117
- * eager `*_get_type` registrations. The side-effect import survives type
118
- * stripping and pins the module in place. The foundational `gobject` and
119
- * `glib` wildcards are always read as values (enums, base classes) and so
120
- * are never stripped, needing no side-effect pin.
121
- *
122
- * @param namespaceName - The other namespace (e.g. `"GLib"`)
123
- */
124
- addCrossNamespaceImport(namespaceName: string): string {
125
- if (namespaceName === this.namespace.name) return namespaceName;
126
- const directory = namespaceName.toLowerCase();
127
- const isFoundational = directory === "gobject" || directory === "glib";
128
- const path = isFoundational ? `../${directory}/${directory}.js` : `../${directory}/index.js`;
129
- if (!isFoundational) this.module.imports.addSideEffect(`../${directory}/${directory}.js`);
130
- this.module.imports.addNamespace(path, namespaceName);
131
- return namespaceName;
132
- }
133
-
134
- /**
135
- * Renders a namespace-qualified reference to `typeName`: the bare name when
136
- * it lives in this module's own namespace, otherwise `Alias.Name` with the
137
- * foreign namespace imported on demand via {@link addCrossNamespaceImport}.
138
- *
139
- * @param namespaceName - The namespace the referenced type lives in
140
- * @param typeName - The local type or export name within that namespace
141
- */
142
- qualify(namespaceName: string, typeName: string): string {
143
- if (namespaceName === this.namespace.name) return typeName;
144
- return `${this.addCrossNamespaceImport(namespaceName)}.${typeName}`;
145
- }
146
- }
package/src/dsl/emit.ts DELETED
@@ -1,42 +0,0 @@
1
- /**
2
- * Tiny string-builder helpers used by the writers to assemble TypeScript
3
- * source. The DSL deliberately stops short of modelling expressions or
4
- * statements — writers compose strings directly using these primitives.
5
- */
6
-
7
- /**
8
- * Indents each line of `block` by `level` four-space units.
9
- *
10
- * Lines that are empty stay empty (no trailing whitespace).
11
- *
12
- * @param block - The multi-line source fragment
13
- * @param level - Number of indentation steps to apply
14
- */
15
- export const indent = (block: string, level: number): string => {
16
- if (level <= 0) return block;
17
- const prefix = " ".repeat(level);
18
- return block
19
- .split("\n")
20
- .map((line) => (line.length === 0 ? line : `${prefix}${line}`))
21
- .join("\n");
22
- };
23
-
24
- /**
25
- * Joins `parts` with commas, dropping `undefined` entries.
26
- */
27
- export const joinArgs = (parts: ReadonlyArray<string | undefined>): string =>
28
- parts.filter((part): part is string => part !== undefined).join(", ");
29
-
30
- /**
31
- * Renders an array literal multi-line, indenting each element four spaces
32
- * and adding a trailing comma.
33
- *
34
- * Empty input renders as `[]`.
35
- *
36
- * @param elements - Already-rendered element expressions
37
- */
38
- export const arrayLiteral = (elements: readonly string[]): string => {
39
- if (elements.length === 0) return "[]";
40
- const lines = elements.map((element) => ` ${element},`);
41
- return `[\n${lines.join("\n")}\n]`;
42
- };
@@ -1,52 +0,0 @@
1
- import { toCamelCase, toIdentifier } from "@gtkx/utils";
2
-
3
- /**
4
- * Derives the public camelCase export name for a namespace-level callable.
5
- *
6
- * The GIR `name` attribute is camelCased (`quark_from_string` →
7
- * `quarkFromString`); for a shadowing function it is the shadowed short name,
8
- * so `g_idle_add_full` (which shadows `idle_add`) exports as `idleAdd`. When the
9
- * `name` is empty the C identifier is used instead, with the namespace's
10
- * `c:symbol-prefixes` value stripped (e.g. `g_` from `g_quark_from_string`).
11
- * The result is escaped so it never collides with a reserved word.
12
- *
13
- * @param cIdentifier - The C symbol identifier from GIR
14
- * @param girName - The GIR `name` attribute (shadow-resolved)
15
- * @param symbolPrefixes - The namespace's `c:symbol-prefixes` values
16
- */
17
- export const namespaceFunctionExportName = (
18
- cIdentifier: string,
19
- girName: string,
20
- symbolPrefixes: readonly string[],
21
- ): string => {
22
- if (girName.length > 0) {
23
- return toIdentifier(toCamelCase(girName));
24
- }
25
- const stripped = stripLongestPrefix(cIdentifier, symbolPrefixes);
26
- return toIdentifier(toCamelCase(stripped));
27
- };
28
-
29
- /**
30
- * Derives the exported identifier for a GIR `<alias>`.
31
- *
32
- * Aliases are surfaced under their GIR `name` (e.g. `Quark`, `Pid`,
33
- * `Allocation`), matching the `@girs` convention. GObject's `Type` alias is the
34
- * one exception: it is published as `GType` so it lines up with the GObject
35
- * runtime's `GType` type and the references that resolve through it.
36
- *
37
- * @param namespaceName - The namespace the alias is declared in
38
- * @param aliasName - The alias's GIR `name`
39
- */
40
- export const aliasExportName = (namespaceName: string, aliasName: string): string =>
41
- namespaceName === "GObject" && aliasName === "Type" ? "GType" : aliasName;
42
-
43
- const stripLongestPrefix = (input: string, prefixes: readonly string[]): string => {
44
- let best = "";
45
- for (const prefix of prefixes) {
46
- const candidate = `${prefix}_`;
47
- if (input.startsWith(candidate) && candidate.length > best.length) {
48
- best = candidate;
49
- }
50
- }
51
- return best.length === 0 ? input : input.slice(best.length);
52
- };