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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (531) hide show
  1. package/dist/analysis/descriptor-render.d.ts +20 -11
  2. package/dist/analysis/descriptor-render.d.ts.map +1 -1
  3. package/dist/analysis/descriptor-render.js +296 -152
  4. package/dist/analysis/descriptor-render.js.map +1 -1
  5. package/dist/analysis/descriptor.d.ts +37 -34
  6. package/dist/analysis/descriptor.d.ts.map +1 -1
  7. package/dist/analysis/descriptor.js +34 -30
  8. package/dist/analysis/descriptor.js.map +1 -1
  9. package/dist/analysis/inheritance.d.ts +16 -16
  10. package/dist/analysis/inheritance.d.ts.map +1 -1
  11. package/dist/analysis/inheritance.js +139 -84
  12. package/dist/analysis/inheritance.js.map +1 -1
  13. package/dist/analysis/param-structure.d.ts +14 -13
  14. package/dist/analysis/param-structure.d.ts.map +1 -1
  15. package/dist/analysis/param-structure.js +104 -53
  16. package/dist/analysis/param-structure.js.map +1 -1
  17. package/dist/analysis/ts-type.d.ts +6 -5
  18. package/dist/analysis/ts-type.d.ts.map +1 -1
  19. package/dist/analysis/ts-type.js +71 -29
  20. package/dist/analysis/ts-type.js.map +1 -1
  21. package/dist/compile.d.ts +5 -5
  22. package/dist/compile.d.ts.map +1 -1
  23. package/dist/compile.js +70 -63
  24. package/dist/compile.js.map +1 -1
  25. package/dist/docs/api-reference.d.ts +12 -11
  26. package/dist/docs/api-reference.d.ts.map +1 -1
  27. package/dist/docs/api-reference.js +192 -123
  28. package/dist/docs/api-reference.js.map +1 -1
  29. package/dist/docs/element-page.d.ts +6 -9
  30. package/dist/docs/element-page.d.ts.map +1 -1
  31. package/dist/docs/element-page.js +69 -133
  32. package/dist/docs/element-page.js.map +1 -1
  33. package/dist/docs/pipeline.d.ts +10 -7
  34. package/dist/docs/pipeline.d.ts.map +1 -1
  35. package/dist/docs/pipeline.js +81 -53
  36. package/dist/docs/pipeline.js.map +1 -1
  37. package/dist/docs/render.d.ts +21 -19
  38. package/dist/docs/render.d.ts.map +1 -1
  39. package/dist/docs/render.js +80 -71
  40. package/dist/docs/render.js.map +1 -1
  41. package/dist/docs/symbol-page.d.ts +6 -6
  42. package/dist/docs/symbol-page.d.ts.map +1 -1
  43. package/dist/docs/symbol-page.js +126 -84
  44. package/dist/docs/symbol-page.js.map +1 -1
  45. package/dist/fingerprint.d.ts +29 -5
  46. package/dist/fingerprint.d.ts.map +1 -1
  47. package/dist/fingerprint.js +69 -13
  48. package/dist/fingerprint.js.map +1 -1
  49. package/dist/gi.d.ts +18 -0
  50. package/dist/gi.d.ts.map +1 -0
  51. package/dist/gi.js +23 -0
  52. package/dist/gi.js.map +1 -0
  53. package/dist/gir/ancestry.d.ts +4 -3
  54. package/dist/gir/ancestry.d.ts.map +1 -1
  55. package/dist/gir/ancestry.js +12 -15
  56. package/dist/gir/ancestry.js.map +1 -1
  57. package/dist/gir/callback.d.ts +6 -11
  58. package/dist/gir/callback.d.ts.map +1 -1
  59. package/dist/gir/callback.js +6 -7
  60. package/dist/gir/callback.js.map +1 -1
  61. package/dist/gir/class.d.ts +7 -5
  62. package/dist/gir/class.d.ts.map +1 -1
  63. package/dist/gir/class.js +14 -12
  64. package/dist/gir/class.js.map +1 -1
  65. package/dist/gir/enum.d.ts +3 -3
  66. package/dist/gir/enum.d.ts.map +1 -1
  67. package/dist/gir/enum.js +7 -6
  68. package/dist/gir/enum.js.map +1 -1
  69. package/dist/gir/field.d.ts +8 -3
  70. package/dist/gir/field.d.ts.map +1 -1
  71. package/dist/gir/field.js +30 -7
  72. package/dist/gir/field.js.map +1 -1
  73. package/dist/gir/function.d.ts +6 -3
  74. package/dist/gir/function.d.ts.map +1 -1
  75. package/dist/gir/function.js +23 -7
  76. package/dist/gir/function.js.map +1 -1
  77. package/dist/gir/gir-path.d.ts +2 -1
  78. package/dist/gir/gir-path.d.ts.map +1 -1
  79. package/dist/gir/gir-path.js +26 -10
  80. package/dist/gir/gir-path.js.map +1 -1
  81. package/dist/gir/libraries.d.ts +5 -3
  82. package/dist/gir/libraries.d.ts.map +1 -1
  83. package/dist/gir/libraries.js +41 -28
  84. package/dist/gir/libraries.js.map +1 -1
  85. package/dist/gir/library.d.ts +17 -11
  86. package/dist/gir/library.d.ts.map +1 -1
  87. package/dist/gir/library.js +116 -92
  88. package/dist/gir/library.js.map +1 -1
  89. package/dist/gir/namespace.d.ts +10 -10
  90. package/dist/gir/namespace.d.ts.map +1 -1
  91. package/dist/gir/namespace.js +21 -20
  92. package/dist/gir/namespace.js.map +1 -1
  93. package/dist/gir/nullable-overrides.d.ts +3 -0
  94. package/dist/gir/nullable-overrides.d.ts.map +1 -0
  95. package/dist/gir/nullable-overrides.js +5 -0
  96. package/dist/gir/nullable-overrides.js.map +1 -0
  97. package/dist/gir/parameter.d.ts +14 -12
  98. package/dist/gir/parameter.d.ts.map +1 -1
  99. package/dist/gir/parameter.js +27 -18
  100. package/dist/gir/parameter.js.map +1 -1
  101. package/dist/gir/parse.d.ts +12 -13
  102. package/dist/gir/parse.d.ts.map +1 -1
  103. package/dist/gir/parse.js +50 -40
  104. package/dist/gir/parse.js.map +1 -1
  105. package/dist/gir/primitives.d.ts +5 -4
  106. package/dist/gir/primitives.d.ts.map +1 -1
  107. package/dist/gir/primitives.js +4 -3
  108. package/dist/gir/primitives.js.map +1 -1
  109. package/dist/gir/property.d.ts +5 -4
  110. package/dist/gir/property.d.ts.map +1 -1
  111. package/dist/gir/property.js +10 -9
  112. package/dist/gir/property.js.map +1 -1
  113. package/dist/gir/record.d.ts +5 -4
  114. package/dist/gir/record.d.ts.map +1 -1
  115. package/dist/gir/record.js +13 -12
  116. package/dist/gir/record.js.map +1 -1
  117. package/dist/gir/size.d.ts +6 -5
  118. package/dist/gir/size.d.ts.map +1 -1
  119. package/dist/gir/size.js +49 -47
  120. package/dist/gir/size.js.map +1 -1
  121. package/dist/gir/type-id.d.ts +17 -15
  122. package/dist/gir/type-id.d.ts.map +1 -1
  123. package/dist/gir/type-id.js +5 -1
  124. package/dist/gir/type-id.js.map +1 -1
  125. package/dist/gir/type-ref.d.ts +3 -2
  126. package/dist/gir/type-ref.d.ts.map +1 -1
  127. package/dist/gir/type-ref.js +36 -25
  128. package/dist/gir/type-ref.js.map +1 -1
  129. package/dist/gir/type.d.ts +3 -2
  130. package/dist/gir/type.d.ts.map +1 -1
  131. package/dist/gir/type.js.map +1 -1
  132. package/dist/index.d.ts +3 -0
  133. package/dist/index.d.ts.map +1 -1
  134. package/dist/index.js +2 -0
  135. package/dist/index.js.map +1 -1
  136. package/dist/jsx.d.ts +28 -0
  137. package/dist/jsx.d.ts.map +1 -0
  138. package/dist/jsx.js +44 -0
  139. package/dist/jsx.js.map +1 -0
  140. package/dist/khronos/args.d.ts +7 -7
  141. package/dist/khronos/args.d.ts.map +1 -1
  142. package/dist/khronos/args.js +88 -67
  143. package/dist/khronos/args.js.map +1 -1
  144. package/dist/khronos/jsdoc.d.ts +4 -4
  145. package/dist/khronos/jsdoc.d.ts.map +1 -1
  146. package/dist/khronos/jsdoc.js +29 -16
  147. package/dist/khronos/jsdoc.js.map +1 -1
  148. package/dist/khronos/model.d.ts +8 -7
  149. package/dist/khronos/model.d.ts.map +1 -1
  150. package/dist/khronos/model.js +94 -59
  151. package/dist/khronos/model.js.map +1 -1
  152. package/dist/khronos/modules.d.ts +4 -3
  153. package/dist/khronos/modules.d.ts.map +1 -1
  154. package/dist/khronos/modules.js +40 -25
  155. package/dist/khronos/modules.js.map +1 -1
  156. package/dist/khronos/param-pair.d.ts +11 -0
  157. package/dist/khronos/param-pair.d.ts.map +1 -0
  158. package/dist/khronos/param-pair.js +6 -0
  159. package/dist/khronos/param-pair.js.map +1 -0
  160. package/dist/khronos/parse.d.ts +7 -8
  161. package/dist/khronos/parse.d.ts.map +1 -1
  162. package/dist/khronos/parse.js +17 -16
  163. package/dist/khronos/parse.js.map +1 -1
  164. package/dist/khronos/pipeline.d.ts +4 -4
  165. package/dist/khronos/pipeline.d.ts.map +1 -1
  166. package/dist/khronos/pipeline.js +97 -56
  167. package/dist/khronos/pipeline.js.map +1 -1
  168. package/dist/khronos/plan.d.ts +11 -10
  169. package/dist/khronos/plan.d.ts.map +1 -1
  170. package/dist/khronos/plan.js +109 -45
  171. package/dist/khronos/plan.js.map +1 -1
  172. package/dist/khronos/render.d.ts +5 -4
  173. package/dist/khronos/render.d.ts.map +1 -1
  174. package/dist/khronos/render.js +106 -59
  175. package/dist/khronos/render.js.map +1 -1
  176. package/dist/khronos/select.d.ts +4 -4
  177. package/dist/khronos/select.d.ts.map +1 -1
  178. package/dist/khronos/select.js +30 -19
  179. package/dist/khronos/select.js.map +1 -1
  180. package/dist/react/element-config.d.ts +20 -0
  181. package/dist/react/element-config.d.ts.map +1 -0
  182. package/dist/react/element-config.js +64 -0
  183. package/dist/react/element-config.js.map +1 -0
  184. package/dist/runner.d.ts +19 -10
  185. package/dist/runner.d.ts.map +1 -1
  186. package/dist/runner.js +48 -43
  187. package/dist/runner.js.map +1 -1
  188. package/dist/store/compile-store.d.ts +5 -3
  189. package/dist/store/compile-store.d.ts.map +1 -1
  190. package/dist/store/compile-store.js +24 -22
  191. package/dist/store/compile-store.js.map +1 -1
  192. package/dist/store/gi/async.d.ts +2 -1
  193. package/dist/store/gi/async.d.ts.map +1 -1
  194. package/dist/store/gi/async.js +28 -24
  195. package/dist/store/gi/async.js.map +1 -1
  196. package/dist/store/gi/callables.d.ts +26 -20
  197. package/dist/store/gi/callables.d.ts.map +1 -1
  198. package/dist/store/gi/callables.js +157 -100
  199. package/dist/store/gi/callables.js.map +1 -1
  200. package/dist/store/gi/callback.d.ts +3 -2
  201. package/dist/store/gi/callback.d.ts.map +1 -1
  202. package/dist/store/gi/callback.js +6 -3
  203. package/dist/store/gi/callback.js.map +1 -1
  204. package/dist/store/gi/class.d.ts +2 -1
  205. package/dist/store/gi/class.d.ts.map +1 -1
  206. package/dist/store/gi/class.js +86 -47
  207. package/dist/store/gi/class.js.map +1 -1
  208. package/dist/store/gi/companion.d.ts +2 -1
  209. package/dist/store/gi/companion.d.ts.map +1 -1
  210. package/dist/store/gi/companion.js +8 -5
  211. package/dist/store/gi/companion.js.map +1 -1
  212. package/dist/store/gi/constant.d.ts +3 -2
  213. package/dist/store/gi/constant.d.ts.map +1 -1
  214. package/dist/store/gi/constant.js +25 -8
  215. package/dist/store/gi/constant.js.map +1 -1
  216. package/dist/store/gi/constructor-props.d.ts +3 -2
  217. package/dist/store/gi/constructor-props.d.ts.map +1 -1
  218. package/dist/store/gi/constructor-props.js +17 -10
  219. package/dist/store/gi/constructor-props.js.map +1 -1
  220. package/dist/store/gi/enum.d.ts +3 -2
  221. package/dist/store/gi/enum.d.ts.map +1 -1
  222. package/dist/store/gi/enum.js +14 -11
  223. package/dist/store/gi/enum.js.map +1 -1
  224. package/dist/store/gi/function.d.ts +5 -4
  225. package/dist/store/gi/function.d.ts.map +1 -1
  226. package/dist/store/gi/function.js +48 -23
  227. package/dist/store/gi/function.js.map +1 -1
  228. package/dist/store/gi/gtype-binding.d.ts +4 -4
  229. package/dist/store/gi/gtype-binding.d.ts.map +1 -1
  230. package/dist/store/gi/gtype-binding.js +15 -11
  231. package/dist/store/gi/gtype-binding.js.map +1 -1
  232. package/dist/store/gi/interface.d.ts +2 -1
  233. package/dist/store/gi/interface.d.ts.map +1 -1
  234. package/dist/store/gi/interface.js +36 -18
  235. package/dist/store/gi/interface.js.map +1 -1
  236. package/dist/store/gi/item-comparators.d.ts +3 -2
  237. package/dist/store/gi/item-comparators.d.ts.map +1 -1
  238. package/dist/store/gi/item-comparators.js +33 -21
  239. package/dist/store/gi/item-comparators.js.map +1 -1
  240. package/dist/store/gi/method.d.ts +13 -13
  241. package/dist/store/gi/method.d.ts.map +1 -1
  242. package/dist/store/gi/method.js +188 -130
  243. package/dist/store/gi/method.js.map +1 -1
  244. package/dist/store/gi/param-marshal.d.ts +7 -6
  245. package/dist/store/gi/param-marshal.d.ts.map +1 -1
  246. package/dist/store/gi/param-marshal.js +26 -13
  247. package/dist/store/gi/param-marshal.js.map +1 -1
  248. package/dist/store/gi/pipeline.d.ts +2 -1
  249. package/dist/store/gi/pipeline.d.ts.map +1 -1
  250. package/dist/store/gi/pipeline.js +38 -23
  251. package/dist/store/gi/pipeline.js.map +1 -1
  252. package/dist/store/gi/properties.d.ts +2 -1
  253. package/dist/store/gi/properties.d.ts.map +1 -1
  254. package/dist/store/gi/properties.js +6 -4
  255. package/dist/store/gi/properties.js.map +1 -1
  256. package/dist/store/gi/property-accessor.d.ts +11 -10
  257. package/dist/store/gi/property-accessor.d.ts.map +1 -1
  258. package/dist/store/gi/property-accessor.js +86 -60
  259. package/dist/store/gi/property-accessor.js.map +1 -1
  260. package/dist/store/gi/record-constructor.d.ts +3 -2
  261. package/dist/store/gi/record-constructor.d.ts.map +1 -1
  262. package/dist/store/gi/record-constructor.js +40 -28
  263. package/dist/store/gi/record-constructor.js.map +1 -1
  264. package/dist/store/gi/record-field-accessor.d.ts +9 -8
  265. package/dist/store/gi/record-field-accessor.d.ts.map +1 -1
  266. package/dist/store/gi/record-field-accessor.js +187 -99
  267. package/dist/store/gi/record-field-accessor.js.map +1 -1
  268. package/dist/store/gi/record-layout.d.ts +6 -5
  269. package/dist/store/gi/record-layout.d.ts.map +1 -1
  270. package/dist/store/gi/record-layout.js +75 -39
  271. package/dist/store/gi/record-layout.js.map +1 -1
  272. package/dist/store/gi/record.d.ts +2 -1
  273. package/dist/store/gi/record.d.ts.map +1 -1
  274. package/dist/store/gi/record.js +15 -16
  275. package/dist/store/gi/record.js.map +1 -1
  276. package/dist/store/gi/registration.d.ts +3 -3
  277. package/dist/store/gi/registration.d.ts.map +1 -1
  278. package/dist/store/gi/registration.js +3 -2
  279. package/dist/store/gi/registration.js.map +1 -1
  280. package/dist/store/gi/return-wrap.d.ts +2 -2
  281. package/dist/store/gi/return-wrap.d.ts.map +1 -1
  282. package/dist/store/gi/return-wrap.js +43 -22
  283. package/dist/store/gi/return-wrap.js.map +1 -1
  284. package/dist/store/gi/runtime-override.d.ts +2 -1
  285. package/dist/store/gi/runtime-override.d.ts.map +1 -1
  286. package/dist/store/gi/runtime-override.js +6 -3
  287. package/dist/store/gi/runtime-override.js.map +1 -1
  288. package/dist/store/gi/signal.d.ts +3 -2
  289. package/dist/store/gi/signal.d.ts.map +1 -1
  290. package/dist/store/gi/signal.js +113 -66
  291. package/dist/store/gi/signal.js.map +1 -1
  292. package/dist/store/gi/value-marshalable.d.ts +15 -0
  293. package/dist/store/gi/value-marshalable.d.ts.map +1 -0
  294. package/dist/store/gi/value-marshalable.js +66 -0
  295. package/dist/store/gi/value-marshalable.js.map +1 -0
  296. package/dist/store/gi/vtable.d.ts +2 -1
  297. package/dist/store/gi/vtable.d.ts.map +1 -1
  298. package/dist/store/gi/vtable.js +60 -30
  299. package/dist/store/gi/vtable.js.map +1 -1
  300. package/dist/store/gi-store.d.ts +5 -4
  301. package/dist/store/gi-store.d.ts.map +1 -1
  302. package/dist/store/gi-store.js +4 -2
  303. package/dist/store/gi-store.js.map +1 -1
  304. package/dist/store/jsx/element-components.d.ts +23 -0
  305. package/dist/store/jsx/element-components.d.ts.map +1 -0
  306. package/dist/store/jsx/element-components.js +86 -0
  307. package/dist/store/jsx/element-components.js.map +1 -0
  308. package/dist/store/jsx/element-prop-imports.d.ts +17 -0
  309. package/dist/store/jsx/element-prop-imports.d.ts.map +1 -0
  310. package/dist/store/jsx/element-prop-imports.js +15 -0
  311. package/dist/store/jsx/element-prop-imports.js.map +1 -0
  312. package/dist/store/jsx/element-prop-types.d.ts +10 -0
  313. package/dist/store/jsx/element-prop-types.d.ts.map +1 -0
  314. package/dist/store/jsx/element-prop-types.js +41 -0
  315. package/dist/store/jsx/element-prop-types.js.map +1 -0
  316. package/dist/store/jsx/gir-index.d.ts +16 -0
  317. package/dist/store/jsx/gir-index.d.ts.map +1 -0
  318. package/dist/store/jsx/gir-index.js +33 -0
  319. package/dist/store/jsx/gir-index.js.map +1 -0
  320. package/dist/store/jsx/intrinsic-elements.d.ts +26 -0
  321. package/dist/store/jsx/intrinsic-elements.d.ts.map +1 -0
  322. package/dist/store/jsx/intrinsic-elements.js +127 -0
  323. package/dist/store/jsx/intrinsic-elements.js.map +1 -0
  324. package/dist/store/{react → jsx}/jsx.d.ts +2 -4
  325. package/dist/store/jsx/jsx.d.ts.map +1 -0
  326. package/dist/store/{react → jsx}/jsx.js +110 -71
  327. package/dist/store/jsx/jsx.js.map +1 -0
  328. package/dist/store/jsx/metadata.d.ts +4 -0
  329. package/dist/store/jsx/metadata.d.ts.map +1 -0
  330. package/dist/store/{react → jsx}/metadata.js +148 -69
  331. package/dist/store/jsx/metadata.js.map +1 -0
  332. package/dist/store/jsx/omitted-props.d.ts +10 -0
  333. package/dist/store/jsx/omitted-props.d.ts.map +1 -0
  334. package/dist/store/jsx/omitted-props.js +22 -0
  335. package/dist/store/jsx/omitted-props.js.map +1 -0
  336. package/dist/store/jsx/pipeline.d.ts +23 -0
  337. package/dist/store/jsx/pipeline.d.ts.map +1 -0
  338. package/dist/store/{react → jsx}/pipeline.js +38 -15
  339. package/dist/store/jsx/pipeline.js.map +1 -0
  340. package/dist/store/{react → jsx}/props.d.ts +9 -12
  341. package/dist/store/jsx/props.d.ts.map +1 -0
  342. package/dist/store/jsx/props.js +153 -0
  343. package/dist/store/jsx/props.js.map +1 -0
  344. package/dist/store/jsx-store.d.ts +5 -3
  345. package/dist/store/jsx-store.d.ts.map +1 -1
  346. package/dist/store/jsx-store.js +4 -1
  347. package/dist/store/jsx-store.js.map +1 -1
  348. package/dist/store/store-fs.d.ts +14 -12
  349. package/dist/store/store-fs.d.ts.map +1 -1
  350. package/dist/store/store-fs.js +9 -7
  351. package/dist/store/store-fs.js.map +1 -1
  352. package/dist/writer/context.d.ts +2 -1
  353. package/dist/writer/context.d.ts.map +1 -1
  354. package/dist/writer/context.js +12 -6
  355. package/dist/writer/context.js.map +1 -1
  356. package/dist/writer/doc.d.ts +2 -1
  357. package/dist/writer/doc.d.ts.map +1 -1
  358. package/dist/writer/doc.js +13 -7
  359. package/dist/writer/doc.js.map +1 -1
  360. package/dist/writer/emit.d.ts +8 -7
  361. package/dist/writer/emit.d.ts.map +1 -1
  362. package/dist/writer/emit.js +13 -10
  363. package/dist/writer/emit.js.map +1 -1
  364. package/dist/writer/gtk-doc.d.ts +2 -1
  365. package/dist/writer/gtk-doc.d.ts.map +1 -1
  366. package/dist/writer/gtk-doc.js +29 -18
  367. package/dist/writer/gtk-doc.js.map +1 -1
  368. package/dist/writer/imports.d.ts +4 -2
  369. package/dist/writer/imports.d.ts.map +1 -1
  370. package/dist/writer/imports.js +35 -24
  371. package/dist/writer/imports.js.map +1 -1
  372. package/dist/writer/module.d.ts +3 -2
  373. package/dist/writer/module.d.ts.map +1 -1
  374. package/dist/writer/module.js +16 -9
  375. package/dist/writer/module.js.map +1 -1
  376. package/dist/xml.d.ts +4 -0
  377. package/dist/xml.d.ts.map +1 -0
  378. package/dist/xml.js +10 -0
  379. package/dist/xml.js.map +1 -0
  380. package/overrides/cairo/context.ts.ejs +7 -7
  381. package/overrides/cairo/matrix.ts.ejs +2 -2
  382. package/overrides/cairo/recording-surface.ts.ejs +2 -2
  383. package/overrides/cairo/region.ts.ejs +1 -1
  384. package/overrides/cairo/scaled-font.ts.ejs +3 -3
  385. package/package.json +14 -9
  386. package/src/analysis/descriptor-render.ts +516 -168
  387. package/src/analysis/descriptor.ts +162 -125
  388. package/src/analysis/inheritance.ts +286 -98
  389. package/src/analysis/param-structure.ts +188 -57
  390. package/src/analysis/ts-type.ts +113 -34
  391. package/src/compile.ts +103 -76
  392. package/src/docs/api-reference.ts +337 -146
  393. package/src/docs/element-page.ts +137 -150
  394. package/src/docs/pipeline.ts +135 -73
  395. package/src/docs/render.ts +151 -87
  396. package/src/docs/symbol-page.ts +268 -123
  397. package/src/fingerprint.ts +138 -26
  398. package/src/gi.ts +35 -0
  399. package/src/gir/ancestry.ts +26 -14
  400. package/src/gir/callback.ts +10 -15
  401. package/src/gir/class.ts +20 -16
  402. package/src/gir/enum.ts +9 -7
  403. package/src/gir/field.ts +37 -8
  404. package/src/gir/function.ts +33 -9
  405. package/src/gir/gir-path.ts +36 -12
  406. package/src/gir/libraries.ts +59 -33
  407. package/src/gir/library.ts +200 -97
  408. package/src/gir/namespace.ts +42 -26
  409. package/src/gir/nullable-overrides.ts +5 -0
  410. package/src/gir/parameter.ts +80 -42
  411. package/src/gir/parse.ts +102 -47
  412. package/src/gir/primitives.ts +25 -23
  413. package/src/gir/property.ts +13 -11
  414. package/src/gir/record.ts +16 -14
  415. package/src/gir/size.ts +91 -58
  416. package/src/gir/type-id.ts +33 -18
  417. package/src/gir/type-ref.ts +62 -26
  418. package/src/gir/type.ts +10 -8
  419. package/src/index.ts +8 -0
  420. package/src/jsx.ts +75 -0
  421. package/src/khronos/args.ts +158 -89
  422. package/src/khronos/jsdoc.ts +67 -29
  423. package/src/khronos/model.ts +154 -53
  424. package/src/khronos/modules.ts +67 -27
  425. package/src/khronos/param-pair.ts +14 -0
  426. package/src/khronos/parse.ts +37 -17
  427. package/src/khronos/pipeline.ts +193 -90
  428. package/src/khronos/plan.ts +235 -86
  429. package/src/khronos/render.ts +208 -71
  430. package/src/khronos/select.ts +48 -18
  431. package/src/react/element-config.ts +97 -0
  432. package/src/runner.ts +100 -57
  433. package/src/store/compile-store.ts +32 -26
  434. package/src/store/gi/async.ts +48 -21
  435. package/src/store/gi/callables.ts +339 -136
  436. package/src/store/gi/callback.ts +13 -4
  437. package/src/store/gi/class.ts +186 -64
  438. package/src/store/gi/companion.ts +15 -6
  439. package/src/store/gi/constant.ts +42 -8
  440. package/src/store/gi/constructor-props.ts +42 -16
  441. package/src/store/gi/enum.ts +28 -13
  442. package/src/store/gi/function.ts +88 -24
  443. package/src/store/gi/gtype-binding.ts +31 -18
  444. package/src/store/gi/interface.ts +101 -36
  445. package/src/store/gi/item-comparators.ts +74 -26
  446. package/src/store/gi/method.ts +377 -159
  447. package/src/store/gi/param-marshal.ts +38 -15
  448. package/src/store/gi/pipeline.ts +72 -22
  449. package/src/store/gi/properties.ts +16 -5
  450. package/src/store/gi/property-accessor.ts +192 -84
  451. package/src/store/gi/record-constructor.ts +70 -33
  452. package/src/store/gi/record-field-accessor.ts +415 -167
  453. package/src/store/gi/record-layout.ts +130 -43
  454. package/src/store/gi/record.ts +29 -15
  455. package/src/store/gi/registration.ts +15 -9
  456. package/src/store/gi/return-wrap.ts +71 -23
  457. package/src/store/gi/runtime-override.ts +13 -3
  458. package/src/store/gi/signal.ts +244 -104
  459. package/src/store/gi/value-marshalable.ts +96 -0
  460. package/src/store/gi/vtable.ts +117 -41
  461. package/src/store/gi-store.ts +26 -13
  462. package/src/store/jsx/element-components.ts +152 -0
  463. package/src/store/jsx/element-prop-imports.ts +24 -0
  464. package/src/store/jsx/element-prop-types.ts +59 -0
  465. package/src/store/jsx/gir-index.ts +62 -0
  466. package/src/store/jsx/intrinsic-elements.ts +253 -0
  467. package/src/store/{react → jsx}/jsx.ts +213 -99
  468. package/src/store/jsx/metadata.ts +385 -0
  469. package/src/store/jsx/omitted-props.ts +32 -0
  470. package/src/store/jsx/pipeline.ts +148 -0
  471. package/src/store/jsx/props.ts +262 -0
  472. package/src/store/jsx-store.ts +15 -3
  473. package/src/store/store-fs.ts +36 -20
  474. package/src/writer/context.ts +25 -6
  475. package/src/writer/doc.ts +19 -5
  476. package/src/writer/emit.ts +20 -11
  477. package/src/writer/gtk-doc.ts +48 -21
  478. package/src/writer/imports.ts +63 -28
  479. package/src/writer/module.ts +35 -11
  480. package/src/xml.ts +12 -0
  481. package/dist/store/gi/class-struct-record.d.ts +0 -9
  482. package/dist/store/gi/class-struct-record.d.ts.map +0 -1
  483. package/dist/store/gi/class-struct-record.js +0 -34
  484. package/dist/store/gi/class-struct-record.js.map +0 -1
  485. package/dist/store/react/built-ins.d.ts +0 -9
  486. package/dist/store/react/built-ins.d.ts.map +0 -1
  487. package/dist/store/react/built-ins.js +0 -226
  488. package/dist/store/react/built-ins.js.map +0 -1
  489. package/dist/store/react/element-components.d.ts +0 -15
  490. package/dist/store/react/element-components.d.ts.map +0 -1
  491. package/dist/store/react/element-components.js +0 -92
  492. package/dist/store/react/element-components.js.map +0 -1
  493. package/dist/store/react/element-prop-types.d.ts +0 -19
  494. package/dist/store/react/element-prop-types.d.ts.map +0 -1
  495. package/dist/store/react/element-prop-types.js +0 -244
  496. package/dist/store/react/element-prop-types.js.map +0 -1
  497. package/dist/store/react/element-props.d.ts +0 -4
  498. package/dist/store/react/element-props.d.ts.map +0 -1
  499. package/dist/store/react/element-props.js +0 -178
  500. package/dist/store/react/element-props.js.map +0 -1
  501. package/dist/store/react/gir-index.d.ts +0 -25
  502. package/dist/store/react/gir-index.d.ts.map +0 -1
  503. package/dist/store/react/gir-index.js +0 -55
  504. package/dist/store/react/gir-index.js.map +0 -1
  505. package/dist/store/react/intrinsic-elements.d.ts +0 -26
  506. package/dist/store/react/intrinsic-elements.d.ts.map +0 -1
  507. package/dist/store/react/intrinsic-elements.js +0 -107
  508. package/dist/store/react/intrinsic-elements.js.map +0 -1
  509. package/dist/store/react/jsx.d.ts.map +0 -1
  510. package/dist/store/react/jsx.js.map +0 -1
  511. package/dist/store/react/metadata.d.ts +0 -4
  512. package/dist/store/react/metadata.d.ts.map +0 -1
  513. package/dist/store/react/metadata.js.map +0 -1
  514. package/dist/store/react/pipeline.d.ts +0 -14
  515. package/dist/store/react/pipeline.d.ts.map +0 -1
  516. package/dist/store/react/pipeline.js.map +0 -1
  517. package/dist/store/react/props.d.ts.map +0 -1
  518. package/dist/store/react/props.js +0 -133
  519. package/dist/store/react/props.js.map +0 -1
  520. package/overrides/gtk/constants.ts.ejs +0 -3
  521. package/overrides/gtk/index.ts.ejs +0 -2
  522. package/src/store/gi/class-struct-record.ts +0 -40
  523. package/src/store/react/built-ins.ts +0 -260
  524. package/src/store/react/element-components.ts +0 -138
  525. package/src/store/react/element-prop-types.ts +0 -280
  526. package/src/store/react/element-props.ts +0 -204
  527. package/src/store/react/gir-index.ts +0 -85
  528. package/src/store/react/intrinsic-elements.ts +0 -161
  529. package/src/store/react/metadata.ts +0 -197
  530. package/src/store/react/pipeline.ts +0 -90
  531. package/src/store/react/props.ts +0 -197
@@ -1,10 +1,30 @@
1
1
  import { lowerFirst, sourceStringLiteral, toCamelIdentifier } from "@gtkx/utils";
2
+ import type { CommandPlan, GlScalar, ReturnPlan } from "./plan.js";
2
3
  import { tBind, tInlineStruct, tRef, tString, tUint8, tVoid } from "../analysis/descriptor.js";
3
4
  import { type OutArg, planArgs, scalarAliasOrGroup, scalarPrefixArgs, trackInto } from "./args.js";
4
5
  import { commandJsDoc, inParamDocLine, singularJsDoc } from "./jsdoc.js";
5
- import type { CommandPlan, ReturnPlan } from "./plan.js";
6
+
7
+ type RenderedCommand = {
8
+ exportName: string;
9
+ binding?: string;
10
+ declaration: string;
11
+ };
12
+
13
+ type EmittedReturn = {
14
+ tsType: string;
15
+ descriptor: string;
16
+ expr?: (call: string) => string;
17
+ };
18
+
19
+ type GenSingularShape = {
20
+ countScalar: GlScalar;
21
+ outScalar: GlScalar;
22
+ objectClass: string;
23
+ };
6
24
 
7
25
  const GL_LIB_EXPRESSION = "LIB";
26
+ const GEN_FAMILY = /^gl(Gen|Create)[A-Z][A-Za-z]*s$/;
27
+ const DELETE_FAMILY = /^glDelete[A-Z][A-Za-z]*s$/;
8
28
 
9
29
  const glBind = (name: string, argList: string, returnType: string): string =>
10
30
  tBind({
@@ -23,68 +43,80 @@ const singularize = (plural: string): string =>
23
43
  const renderDescriptorList = (descriptors: string[]): string =>
24
44
  descriptors.length === 0 ? "[]" : `[${descriptors.join(", ")}]`;
25
45
 
26
- export type RenderedCommand = {
27
- exportName: string;
28
- binding?: string;
29
- declaration: string;
30
- };
31
-
32
- type EmittedReturn = {
33
- tsType: string;
34
- descriptor: string;
35
- expr?: (call: string) => string;
36
- };
37
-
38
46
  const buildEmittedReturn = (
39
47
  plan: ReturnPlan,
40
48
  returnGroup: string | undefined,
41
49
  usedTypes: Set<string>,
42
50
  ): EmittedReturn => {
43
51
  const track = trackInto(usedTypes);
52
+
44
53
  switch (plan.kind) {
45
- case "void":
54
+ case "void": {
46
55
  return { tsType: "void", descriptor: tVoid };
56
+ }
47
57
  case "scalar": {
48
58
  const alias = track(scalarAliasOrGroup(plan.scalar, returnGroup));
59
+
49
60
  return { tsType: alias, descriptor: plan.scalar.descriptor, expr: (call) => `${call} as ${alias}` };
50
61
  }
51
- case "boolean":
62
+ case "boolean": {
52
63
  return { tsType: "boolean", descriptor: tUint8, expr: (call) => `(${call} as number) !== 0` };
53
- case "string":
64
+ }
65
+ case "string": {
54
66
  return { tsType: "string", descriptor: tString("borrowed"), expr: (call) => `${call} as string` };
55
- case "sync":
67
+ }
68
+ case "sync": {
56
69
  return { tsType: track("GLsync"), descriptor: tInlineStruct(), expr: (call) => `${call} as GLsync` };
57
- case "opaque-pointer":
70
+ }
71
+ case "opaque-pointer": {
58
72
  return {
59
73
  tsType: track("GLpointer"),
60
74
  descriptor: tInlineStruct(),
61
75
  expr: (call) => `${call} as GLpointer`,
62
76
  };
77
+ }
63
78
  }
64
79
  };
65
80
 
66
81
  const returnTsType = (returned: EmittedReturn, outs: OutArg[]): string => {
67
- if (outs.length === 0) return returned.tsType;
82
+ if (outs.length === 0) {
83
+ return returned.tsType;
84
+ }
85
+
68
86
  const outTypes = outs.map((out) => out.tsType);
87
+
69
88
  if (returned.expr === undefined) {
70
89
  return outTypes.length === 1 && outTypes[0] !== undefined ? outTypes[0] : `[${outTypes.join(", ")}]`;
71
90
  }
91
+
72
92
  return `[${returned.tsType}, ${outTypes.join(", ")}]`;
73
93
  };
74
94
 
95
+ const returnNoOut = (call: string, returned: EmittedReturn): string[] =>
96
+ returned.expr === undefined ? [`${call};`] : [`return ${returned.expr(call)};`];
97
+
75
98
  const returnStatements = (call: string, returned: EmittedReturn, outs: OutArg[]): string[] => {
76
99
  if (outs.length === 0) {
77
- return returned.expr === undefined ? [`${call};`] : [`return ${returned.expr(call)};`];
100
+ return returnNoOut(call, returned);
78
101
  }
102
+
79
103
  const outValues = outs.map((out) => `${out.cellName}.value`);
104
+
80
105
  if (returned.expr === undefined) {
81
- const tail = outValues.length === 1 ? `return ${outValues[0]};` : `return [${outValues.join(", ")}];`;
106
+ const [single] = outValues;
107
+
108
+ const tail =
109
+ single !== undefined && outValues.length === 1
110
+ ? `return ${single};`
111
+ : `return [${outValues.join(", ")}];`;
112
+
82
113
  return [`${call};`, tail];
83
114
  }
115
+
84
116
  return [`const result = ${call};`, `return [${returned.expr("result")}, ${outValues.join(", ")}];`];
85
117
  };
86
118
 
87
- export const renderCommand = (
119
+ const renderCommand = (
88
120
  plan: CommandPlan & { ok: true },
89
121
  feature: string,
90
122
  usedTypes: Set<string>,
@@ -100,94 +132,199 @@ export const renderCommand = (
100
132
  const jsDoc = commandJsDoc({ command, feature, ins, outs, returnPlan: plan.returnPlan });
101
133
  const seeds = outs.map((out) => out.seed);
102
134
  const bindExpression = glBind(command.name, descriptors, returned.descriptor);
103
- const inline = plan.params.some((paramPlan) => paramPlan.kind === "string-out");
104
- const bindingName = inline ? "binding" : toCamelIdentifier(command.name);
135
+ const isInline = plan.params.some((paramPlan) => paramPlan.kind === "string-out");
136
+ const bindingName = isInline ? "binding" : toCamelIdentifier(command.name);
137
+
105
138
  const body = [
106
139
  ...seeds,
107
- ...(inline ? [`const ${bindingName} = ${bindExpression};`] : []),
140
+ ...(isInline ? [`const ${bindingName} = ${bindExpression};`] : []),
108
141
  ...returnStatements(`${bindingName}(${argNames})`, returned, outs),
109
142
  ]
110
143
  .map((line) => ` ${line}`)
111
144
  .join("\n");
145
+
112
146
  return {
113
147
  exportName,
114
- ...(inline ? {} : { binding: `const ${bindingName} = ${bindExpression};` }),
148
+ ...(!isInline && { binding: `const ${bindingName} = ${bindExpression};` }),
115
149
  declaration: `${jsDoc}\nexport function ${exportName}(${signature}): ${tsReturn} {\n${body}\n}`,
116
150
  };
117
151
  };
118
152
 
119
- const GEN_FAMILY = /^gl(Gen|Create)[A-Z][A-Za-z]*s$/;
120
- const DELETE_FAMILY = /^glDelete[A-Z][A-Za-z]*s$/;
153
+ const singularCommandJsDoc = (
154
+ plan: CommandPlan & { ok: true },
155
+ feature: string,
156
+ summary: string,
157
+ body: string[],
158
+ ): string => singularJsDoc({ commandName: plan.command.name, feature, summary, body });
121
159
 
122
- export const deriveGenSingular = (
160
+ const genSingularScalars = (
161
+ plan: CommandPlan & { ok: true },
162
+ ): { countScalar: GlScalar; outScalar: GlScalar; lenParamName: string } | undefined => {
163
+ const countPlan = plan.params.at(-2);
164
+
165
+ if (countPlan?.kind !== "scalar") {
166
+ return undefined;
167
+ }
168
+
169
+ const outPlan = plan.params.at(-1);
170
+
171
+ if (outPlan?.kind !== "ref-array-out") {
172
+ return undefined;
173
+ }
174
+
175
+ return { countScalar: countPlan.scalar, outScalar: outPlan.scalar, lenParamName: outPlan.lenParamName };
176
+ };
177
+
178
+ const genSingularObjectClass = (plan: CommandPlan & { ok: true }, lenParamName: string): string | undefined => {
179
+ const countParam = plan.command.params[plan.params.length - 2];
180
+ const outParam = plan.command.params[plan.params.length - 1];
181
+
182
+ if (countParam === undefined || outParam === undefined) {
183
+ return undefined;
184
+ }
185
+
186
+ if (lenParamName !== countParam.name) {
187
+ return undefined;
188
+ }
189
+
190
+ return outParam.objectClass;
191
+ };
192
+
193
+ const genSingularShape = (plan: CommandPlan & { ok: true }): GenSingularShape | undefined => {
194
+ const scalars = genSingularScalars(plan);
195
+
196
+ if (scalars === undefined) {
197
+ return undefined;
198
+ }
199
+
200
+ const objectClass = genSingularObjectClass(plan, scalars.lenParamName);
201
+
202
+ if (objectClass === undefined) {
203
+ return undefined;
204
+ }
205
+
206
+ return { countScalar: scalars.countScalar, outScalar: scalars.outScalar, objectClass };
207
+ };
208
+
209
+ const deriveGenSingular = (
123
210
  plan: CommandPlan & { ok: true },
124
211
  feature: string,
125
212
  usedTypes: Set<string>,
126
213
  ): RenderedCommand | undefined => {
127
- if (!GEN_FAMILY.test(plan.command.name)) return undefined;
128
- const countIndex = plan.params.length - 2;
129
- const outIndex = plan.params.length - 1;
130
- const countPlan = plan.params[countIndex];
131
- const outPlan = plan.params[outIndex];
132
- const countParam = plan.command.params[countIndex];
133
- const outParam = plan.command.params[outIndex];
134
- if (countPlan?.kind !== "scalar" || outPlan?.kind !== "ref-array-out") return undefined;
135
- if (countParam === undefined || outParam === undefined) return undefined;
136
- if (outPlan.lenParamName !== countParam.name || outParam.objectClass === undefined) return undefined;
214
+ if (!GEN_FAMILY.test(plan.command.name)) {
215
+ return undefined;
216
+ }
217
+
218
+ const shape = genSingularShape(plan);
219
+
220
+ if (shape === undefined) {
221
+ return undefined;
222
+ }
223
+
137
224
  const prefix = scalarPrefixArgs(plan, usedTypes);
138
- if (prefix === undefined) return undefined;
225
+
226
+ if (prefix === undefined) {
227
+ return undefined;
228
+ }
229
+
230
+ const { countScalar, outScalar, objectClass } = shape;
139
231
  const exportName = singularize(commandExportName(plan.command.name));
140
232
  const bindingName = `${plan.command.name}Single`;
141
- const descriptors = [
142
- ...prefix.map((arg) => arg.descriptor),
143
- countPlan.scalar.descriptor,
144
- tRef(outPlan.scalar.descriptor),
145
- ];
146
- usedTypes.add(outPlan.scalar.tsAlias);
233
+ const descriptors = [...prefix.map((arg) => arg.descriptor), countScalar.descriptor, tRef(outScalar.descriptor)];
234
+ usedTypes.add(outScalar.tsAlias);
147
235
  const signature = prefix.map((arg) => `${arg.name}: ${arg.tsType}`).join(", ");
148
236
  const callArgs = [...prefix.map((arg) => arg.name), "1", "out"].join(", ");
149
- const jsDoc = singularJsDoc({
150
- commandName: plan.command.name,
237
+
238
+ const jsDoc = singularCommandJsDoc(
239
+ plan,
151
240
  feature,
152
- summary: `Returns one ${outParam.objectClass} object name via \`${plan.command.name}(${prefix.length > 0 ? "..., " : ""}1, ...)\`.`,
153
- body: [
154
- ...prefix.map((arg) => inParamDocLine(plan.command, arg)),
155
- ` * @returns The new ${outParam.objectClass} object name`,
156
- ],
157
- });
158
- const body = [` const out = { value: 0 };`, ` ${bindingName}(${callArgs});`, " return out.value;"].join(
241
+ `Returns one ${objectClass} object name via ` +
242
+ `\`${plan.command.name}(${prefix.length > 0 ? "..., " : ""}1, ...)\`.`,
243
+ [...prefix.map((arg) => inParamDocLine(plan.command, arg)), ` * @returns The new ${objectClass} object name`],
244
+ );
245
+
246
+ const body = [" const out = { value: 0 };", ` ${bindingName}(${callArgs});`, " return out.value;"].join(
159
247
  "\n",
160
248
  );
249
+
161
250
  const binding = glBind(plan.command.name, renderDescriptorList(descriptors), tVoid);
251
+
162
252
  return {
163
253
  exportName,
164
254
  binding: `const ${bindingName} = ${binding};`,
165
- declaration: `${jsDoc}\nexport function ${exportName}(${signature}): ${outPlan.scalar.tsAlias} {\n${body}\n}`,
255
+ declaration: `${jsDoc}\nexport function ${exportName}(${signature}): ${outScalar.tsAlias} {\n${body}\n}`,
166
256
  };
167
257
  };
168
258
 
169
- export const deriveDeleteSingular = (
259
+ const deleteSingularAlias = (plan: CommandPlan & { ok: true }): string | undefined => {
260
+ if (plan.params.length !== 2) {
261
+ return undefined;
262
+ }
263
+
264
+ const [countPlan, arrayPlan] = plan.params;
265
+
266
+ if (countPlan?.kind !== "scalar") {
267
+ return undefined;
268
+ }
269
+
270
+ if (arrayPlan?.kind !== "array-in") {
271
+ return undefined;
272
+ }
273
+
274
+ return arrayPlan.scalar.tsAlias;
275
+ };
276
+
277
+ const deleteSingularObjectClass = (plan: CommandPlan & { ok: true }): string | undefined => {
278
+ const [countParam, arrayParam] = plan.command.params;
279
+
280
+ if (countParam === undefined || arrayParam === undefined) {
281
+ return undefined;
282
+ }
283
+
284
+ if (arrayParam.len !== countParam.name) {
285
+ return undefined;
286
+ }
287
+
288
+ return arrayParam.objectClass;
289
+ };
290
+
291
+ const deriveDeleteSingular = (
170
292
  plan: CommandPlan & { ok: true },
171
293
  feature: string,
172
294
  usedTypes: Set<string>,
173
295
  ): RenderedCommand | undefined => {
174
- if (!DELETE_FAMILY.test(plan.command.name)) return undefined;
175
- if (plan.params.length !== 2) return undefined;
176
- const [countPlan, arrayPlan] = plan.params;
177
- const [countParam, arrayParam] = plan.command.params;
178
- if (countPlan?.kind !== "scalar" || arrayPlan?.kind !== "array-in") return undefined;
179
- if (countParam === undefined || arrayParam === undefined) return undefined;
180
- if (arrayParam.len !== countParam.name || arrayParam.objectClass === undefined) return undefined;
296
+ if (!DELETE_FAMILY.test(plan.command.name)) {
297
+ return undefined;
298
+ }
299
+
300
+ const scalarAlias = deleteSingularAlias(plan);
301
+
302
+ if (scalarAlias === undefined) {
303
+ return undefined;
304
+ }
305
+
306
+ const objectClass = deleteSingularObjectClass(plan);
307
+
308
+ if (objectClass === undefined) {
309
+ return undefined;
310
+ }
311
+
312
+ usedTypes.add(scalarAlias);
181
313
  const exportName = singularize(commandExportName(plan.command.name));
182
- usedTypes.add(arrayPlan.scalar.tsAlias);
183
- const jsDoc = singularJsDoc({
184
- commandName: plan.command.name,
314
+
315
+ const jsDoc = singularCommandJsDoc(
316
+ plan,
185
317
  feature,
186
- summary: `Deletes one ${arrayParam.objectClass} object name via \`${plan.command.name}(1, ...)\`.`,
187
- body: [` * @param name - The ${arrayParam.objectClass} object name to delete`],
188
- });
318
+ `Deletes one ${objectClass} object name via \`${plan.command.name}(1, ...)\`.`,
319
+ [` * @param name - The ${objectClass} object name to delete`],
320
+ );
321
+
189
322
  return {
190
323
  exportName,
191
- declaration: `${jsDoc}\nexport function ${exportName}(name: ${arrayPlan.scalar.tsAlias}): void {\n ${plan.command.name}(1, [name]);\n}`,
324
+ declaration:
325
+ `${jsDoc}\nexport function ${exportName}(name: ${scalarAlias}): void {\n` +
326
+ ` ${plan.command.name}(1, [name]);\n}`,
192
327
  };
193
328
  };
329
+
330
+ export { renderCommand, deriveGenSingular, deriveDeleteSingular, type RenderedCommand };
@@ -2,7 +2,7 @@ import type { GlEnum, GlFeature, GlInterfaceBlock, GlRegistry } from "./model.js
2
2
 
3
3
  type GlProfile = "core";
4
4
 
5
- export type GlSelection = {
5
+ type GlSelection = {
6
6
  api: string;
7
7
  version: number;
8
8
  profile: GlProfile;
@@ -13,9 +13,17 @@ type GlSubset = {
13
13
  enums: Map<string, string>;
14
14
  };
15
15
 
16
- const blockApplies = (block: GlInterfaceBlock, selection: GlSelection): boolean =>
16
+ const isBlockApplicable = (block: GlInterfaceBlock, selection: GlSelection): boolean =>
17
17
  block.profile === undefined || block.profile === selection.profile;
18
18
 
19
+ const addMissing = (target: Map<string, string>, names: string[], value: string): void => {
20
+ for (const name of names) {
21
+ if (!target.has(name)) {
22
+ target.set(name, value);
23
+ }
24
+ }
25
+ };
26
+
19
27
  const applyRequires = (
20
28
  feature: GlFeature,
21
29
  selection: GlSelection,
@@ -23,13 +31,22 @@ const applyRequires = (
23
31
  enums: Map<string, string>,
24
32
  ): void => {
25
33
  for (const block of feature.requires) {
26
- if (!blockApplies(block, selection)) continue;
27
- for (const name of block.commands) {
28
- if (!commands.has(name)) commands.set(name, feature.name);
29
- }
30
- for (const name of block.enums) {
31
- if (!enums.has(name)) enums.set(name, feature.name);
34
+ if (!isBlockApplicable(block, selection)) {
35
+ continue;
32
36
  }
37
+
38
+ addMissing(commands, block.commands, feature.name);
39
+ addMissing(enums, block.enums, feature.name);
40
+ }
41
+ };
42
+
43
+ const removeBlock = (block: GlInterfaceBlock, commands: Map<string, string>, enums: Map<string, string>): void => {
44
+ for (const name of block.commands) {
45
+ commands.delete(name);
46
+ }
47
+
48
+ for (const name of block.enums) {
49
+ enums.delete(name);
33
50
  }
34
51
  };
35
52
 
@@ -40,28 +57,41 @@ const applyRemoves = (
40
57
  enums: Map<string, string>,
41
58
  ): void => {
42
59
  for (const block of feature.removes) {
43
- if (!blockApplies(block, selection)) continue;
44
- for (const name of block.commands) commands.delete(name);
45
- for (const name of block.enums) enums.delete(name);
60
+ if (!isBlockApplicable(block, selection)) {
61
+ continue;
62
+ }
63
+
64
+ removeBlock(block, commands, enums);
46
65
  }
47
66
  };
48
67
 
49
- export const selectSubset = (registry: GlRegistry, selection: GlSelection): GlSubset => {
68
+ const selectSubset = (registry: GlRegistry, selection: GlSelection): GlSubset => {
50
69
  const features = registry.features
51
70
  .filter((feature) => feature.api === selection.api && feature.number <= selection.version)
52
- .sort((a, b) => a.number - b.number);
71
+ .toSorted((a, b) => a.number - b.number);
72
+
73
+ const commands: Map<string, string> = new Map();
74
+ const enums: Map<string, string> = new Map();
75
+
76
+ for (const feature of features) {
77
+ applyRequires(feature, selection, commands, enums);
78
+ }
79
+
80
+ for (const feature of features) {
81
+ applyRemoves(feature, selection, commands, enums);
82
+ }
53
83
 
54
- const commands = new Map<string, string>();
55
- const enums = new Map<string, string>();
56
- for (const feature of features) applyRequires(feature, selection, commands, enums);
57
- for (const feature of features) applyRemoves(feature, selection, commands, enums);
58
84
  return { commands, enums };
59
85
  };
60
86
 
61
- export const resolveEnum = (registry: GlRegistry, name: string): GlEnum => {
87
+ const resolveEnum = (registry: GlRegistry, name: string): GlEnum => {
62
88
  const found = registry.enums.find((candidate) => candidate.name === name);
89
+
63
90
  if (found === undefined) {
64
91
  throw new Error(`Enum token ${name} has no definition in the registry`);
65
92
  }
93
+
66
94
  return found;
67
95
  };
96
+
97
+ export { selectSubset, resolveEnum, type GlSelection };
@@ -0,0 +1,97 @@
1
+ import type { ModuleExport } from "@gtkx/react/config";
2
+ import { readdirSync } from "node:fs";
3
+ import type { OmittedProps } from "../store/jsx/omitted-props.js";
4
+
5
+ /** The codegen-relevant subset of a React element config; behaviors are ignored at codegen time. */
6
+ type BuiltinElement = { component?: ModuleExport; lazy?: boolean; props?: ModuleExport; omitProps?: string[] };
7
+
8
+ /** The framework's built-in element config, split into the maps codegen consumes. */
9
+ type BuiltinElements = {
10
+ components: Record<string, ModuleExport>;
11
+ lazyElements: string[];
12
+ props: Record<string, ModuleExport>;
13
+ omitProps: OmittedProps;
14
+ };
15
+
16
+ const CONFIG_ENTRYPOINT = "config";
17
+ const CONFIG_SUFFIX = `/${CONFIG_ENTRYPOINT}`;
18
+
19
+ const presentNamespaceDirs = (giStoreDir: string): Set<string> => {
20
+ const dirs: Set<string> = new Set();
21
+ const entries = readdirSync(giStoreDir, { withFileTypes: true });
22
+
23
+ for (const entry of entries) {
24
+ if (entry.isDirectory()) {
25
+ dirs.add(entry.name);
26
+ }
27
+ }
28
+
29
+ return dirs;
30
+ };
31
+
32
+ /**
33
+ * The clean, reconciler-free `@gtkx/react` config entrypoints to import: the base `config` entry plus
34
+ * each namespace's `<ns>/config` entry whose GIR namespace is present in the gi store.
35
+ */
36
+ const configEntrypoints = (reactSubexports: string[], present: Set<string>): string[] =>
37
+ reactSubexports.filter((sub) => {
38
+ if (sub === CONFIG_ENTRYPOINT) {
39
+ return true;
40
+ }
41
+
42
+ return sub.endsWith(CONFIG_SUFFIX) && present.has(sub.slice(0, sub.length - CONFIG_SUFFIX.length));
43
+ });
44
+
45
+ const importBuiltinElements = async (entrypoint: string): Promise<Record<string, BuiltinElement>> => {
46
+ const specifier = `@gtkx/react/${entrypoint}`;
47
+
48
+ const imported = (await import(/* @vite-ignore */ specifier)) as {
49
+ BUILTIN_ELEMENTS?: Record<string, BuiltinElement>;
50
+ };
51
+
52
+ return imported.BUILTIN_ELEMENTS ?? {};
53
+ };
54
+
55
+ const applyBuiltinElement = (target: BuiltinElements, type: string, config: BuiltinElement): void => {
56
+ if (config.component !== undefined) {
57
+ target.components[type] = config.component;
58
+ }
59
+
60
+ if (config.props !== undefined) {
61
+ target.props[type] = config.props;
62
+ }
63
+
64
+ if (config.omitProps !== undefined) {
65
+ target.omitProps[type] = [...(target.omitProps[type] ?? []), ...config.omitProps];
66
+ }
67
+
68
+ if (config.lazy === true) {
69
+ target.lazyElements.push(type);
70
+ }
71
+ };
72
+
73
+ /**
74
+ * Reads the framework's built-in element config by importing the freshly linked `@gtkx/react` config
75
+ * entrypoints. These are reconciler-free, so importing them resolves `@gtkx/gi` but never `virtual:gtkx-config`;
76
+ * it must run only after the gi store has been linked.
77
+ */
78
+ const collectBuiltinElements = (target: BuiltinElements, elements: Record<string, BuiltinElement>): void => {
79
+ for (const [type, config] of Object.entries(elements)) {
80
+ applyBuiltinElement(target, type, config);
81
+ }
82
+ };
83
+
84
+ const readBuiltinElements = async (reactSubexports: string[], giStoreDir: string): Promise<BuiltinElements> => {
85
+ const present = presentNamespaceDirs(giStoreDir);
86
+ const entrypoints = configEntrypoints(reactSubexports, present);
87
+ const result: BuiltinElements = { components: {}, lazyElements: [], props: {}, omitProps: {} };
88
+
89
+ for (const entrypoint of entrypoints) {
90
+ collectBuiltinElements(result, await importBuiltinElements(entrypoint));
91
+ }
92
+
93
+ return result;
94
+ };
95
+
96
+ export { type ModuleExport } from "@gtkx/react/config";
97
+ export { readBuiltinElements, type BuiltinElement, type BuiltinElements };