@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,6 +1,6 @@
1
1
  import { collectText, nodeAttr, nodeChildren, nodeTag, type OrderedNode, parseRegistryFile } from "./parse.js";
2
2
 
3
- export type GlParam = {
3
+ type GlParam = {
4
4
  name: string;
5
5
  cType: string;
6
6
  group?: string;
@@ -8,26 +8,26 @@ export type GlParam = {
8
8
  objectClass?: string;
9
9
  };
10
10
 
11
- export type GlCommand = {
11
+ type GlCommand = {
12
12
  name: string;
13
13
  returnCType: string;
14
14
  returnGroup?: string;
15
15
  params: GlParam[];
16
16
  };
17
17
 
18
- export type GlEnum = {
18
+ type GlEnum = {
19
19
  name: string;
20
20
  value: string;
21
21
  groups: string[];
22
22
  };
23
23
 
24
- export type GlInterfaceBlock = {
24
+ type GlInterfaceBlock = {
25
25
  profile?: string;
26
26
  commands: string[];
27
27
  enums: string[];
28
28
  };
29
29
 
30
- export type GlFeature = {
30
+ type GlFeature = {
31
31
  api: string;
32
32
  name: string;
33
33
  number: number;
@@ -35,7 +35,7 @@ export type GlFeature = {
35
35
  removes: GlInterfaceBlock[];
36
36
  };
37
37
 
38
- export type GlRegistry = {
38
+ type GlRegistry = {
39
39
  commands: Map<string, GlCommand>;
40
40
  enums: GlEnum[];
41
41
  features: GlFeature[];
@@ -44,18 +44,25 @@ export type GlRegistry = {
44
44
  const NAME_TAG = "name";
45
45
  const SKIP_IN_C_TYPE: Set<string> = new Set([NAME_TAG, "comment"]);
46
46
 
47
- const normalizeWhitespace = (text: string): string => text.replace(/\s+/g, " ").trim();
47
+ const normalizeWhitespace = (text: string): string => text.replaceAll(/\s+/g, " ").trim();
48
48
 
49
49
  const childNamed = (node: OrderedNode, tag: string): OrderedNode | undefined => {
50
50
  for (const child of nodeChildren(node)) {
51
- if (nodeTag(child) === tag) return child;
51
+ if (nodeTag(child) === tag) {
52
+ return child;
53
+ }
52
54
  }
55
+
53
56
  return undefined;
54
57
  };
55
58
 
56
59
  const elementName = (node: OrderedNode): string => {
57
60
  const nameChild = childNamed(node, NAME_TAG);
58
- if (nameChild === undefined) return "";
61
+
62
+ if (nameChild === undefined) {
63
+ return "";
64
+ }
65
+
59
66
  return normalizeWhitespace(collectText(nameChild, new Set()));
60
67
  };
61
68
 
@@ -64,103 +71,197 @@ const parseParam = (node: OrderedNode): GlParam => {
64
71
  name: elementName(node),
65
72
  cType: normalizeWhitespace(collectText(node, SKIP_IN_C_TYPE)),
66
73
  };
74
+
67
75
  const group = nodeAttr(node, "group");
68
76
  const len = nodeAttr(node, "len");
69
77
  const objectClass = nodeAttr(node, "class");
78
+
70
79
  return {
71
80
  ...param,
72
- ...(group !== undefined ? { group } : {}),
73
- ...(len !== undefined ? { len } : {}),
74
- ...(objectClass !== undefined ? { objectClass } : {}),
81
+ ...((group !== undefined) && { group }),
82
+ ...((len !== undefined) && { len }),
83
+ ...((objectClass !== undefined) && { objectClass }),
75
84
  };
76
85
  };
77
86
 
78
87
  const parseCommand = (node: OrderedNode): GlCommand | undefined => {
79
88
  const proto = childNamed(node, "proto");
80
- if (proto === undefined) return undefined;
89
+
90
+ if (proto === undefined) {
91
+ return undefined;
92
+ }
93
+
81
94
  const params: GlParam[] = [];
95
+
82
96
  for (const child of nodeChildren(node)) {
83
- if (nodeTag(child) === "param") params.push(parseParam(child));
97
+ if (nodeTag(child) === "param") {
98
+ params.push(parseParam(child));
99
+ }
84
100
  }
101
+
85
102
  const returnGroup = nodeAttr(proto, "group");
103
+
86
104
  return {
87
105
  name: elementName(proto),
88
106
  returnCType: normalizeWhitespace(collectText(proto, SKIP_IN_C_TYPE)),
89
- ...(returnGroup !== undefined ? { returnGroup } : {}),
107
+ ...((returnGroup !== undefined) && { returnGroup }),
90
108
  params,
91
109
  };
92
110
  };
93
111
 
112
+ const parseEnum = (child: OrderedNode): GlEnum | undefined => {
113
+ if (nodeTag(child) !== "enum") {
114
+ return undefined;
115
+ }
116
+
117
+ const name = nodeAttr(child, "name");
118
+ const value = nodeAttr(child, "value");
119
+
120
+ if (name === undefined || value === undefined) {
121
+ return undefined;
122
+ }
123
+
124
+ const group = nodeAttr(child, "group");
125
+
126
+ return {
127
+ name,
128
+ value,
129
+ groups: group === undefined ? [] : group.split(",").map((part) => part.trim()),
130
+ };
131
+ };
132
+
94
133
  const parseEnums = (node: OrderedNode, into: GlEnum[]): void => {
95
134
  for (const child of nodeChildren(node)) {
96
- if (nodeTag(child) !== "enum") continue;
97
- const name = nodeAttr(child, "name");
98
- const value = nodeAttr(child, "value");
99
- if (name === undefined || value === undefined) continue;
100
- const group = nodeAttr(child, "group");
101
- into.push({
102
- name,
103
- value,
104
- groups: group === undefined ? [] : group.split(",").map((part) => part.trim()),
105
- });
135
+ const parsed = parseEnum(child);
136
+
137
+ if (parsed !== undefined) {
138
+ into.push(parsed);
139
+ }
140
+ }
141
+ };
142
+
143
+ const collectInterfaceMember = (child: OrderedNode, commands: string[], enums: string[]): void => {
144
+ const name = nodeAttr(child, "name");
145
+
146
+ if (name === undefined) {
147
+ return;
148
+ }
149
+
150
+ const tag = nodeTag(child);
151
+
152
+ if (tag === "command") {
153
+ commands.push(name);
154
+ } else if (tag === "enum") {
155
+ enums.push(name);
106
156
  }
107
157
  };
108
158
 
109
159
  const parseInterfaceBlock = (node: OrderedNode): GlInterfaceBlock => {
110
160
  const commands: string[] = [];
111
161
  const enums: string[] = [];
162
+
112
163
  for (const child of nodeChildren(node)) {
113
- const name = nodeAttr(child, "name");
114
- if (name === undefined) continue;
115
- const tag = nodeTag(child);
116
- if (tag === "command") commands.push(name);
117
- else if (tag === "enum") enums.push(name);
164
+ collectInterfaceMember(child, commands, enums);
118
165
  }
166
+
119
167
  const profile = nodeAttr(node, "profile");
168
+
120
169
  return {
121
- ...(profile !== undefined ? { profile } : {}),
170
+ ...((profile !== undefined) && { profile }),
122
171
  commands,
123
172
  enums,
124
173
  };
125
174
  };
126
175
 
176
+ const collectFeatureBlock = (child: OrderedNode, requires: GlInterfaceBlock[], removes: GlInterfaceBlock[]): void => {
177
+ const tag = nodeTag(child);
178
+
179
+ if (tag === "require") {
180
+ requires.push(parseInterfaceBlock(child));
181
+ } else if (tag === "remove") {
182
+ removes.push(parseInterfaceBlock(child));
183
+ }
184
+ };
185
+
127
186
  const parseFeature = (node: OrderedNode): GlFeature | undefined => {
128
187
  const api = nodeAttr(node, "api");
129
188
  const name = nodeAttr(node, "name");
130
189
  const number = nodeAttr(node, "number");
131
- if (api === undefined || name === undefined || number === undefined) return undefined;
190
+
191
+ if (api === undefined || name === undefined || number === undefined) {
192
+ return undefined;
193
+ }
194
+
132
195
  const requires: GlInterfaceBlock[] = [];
133
196
  const removes: GlInterfaceBlock[] = [];
197
+
134
198
  for (const child of nodeChildren(node)) {
135
- const tag = nodeTag(child);
136
- if (tag === "require") requires.push(parseInterfaceBlock(child));
137
- else if (tag === "remove") removes.push(parseInterfaceBlock(child));
199
+ collectFeatureBlock(child, requires, removes);
200
+ }
201
+
202
+ return { api, name, number: Number(number), requires, removes };
203
+ };
204
+
205
+ const addCommand = (child: OrderedNode, into: Map<string, GlCommand>): void => {
206
+ if (nodeTag(child) !== "command") {
207
+ return;
208
+ }
209
+
210
+ const command = parseCommand(child);
211
+
212
+ if (command !== undefined && command.name.length > 0) {
213
+ into.set(command.name, command);
138
214
  }
139
- return { api, name, number: Number.parseFloat(number), requires, removes };
140
215
  };
141
216
 
142
217
  const parseCommandsSection = (section: OrderedNode, into: Map<string, GlCommand>): void => {
143
218
  for (const child of nodeChildren(section)) {
144
- if (nodeTag(child) !== "command") continue;
145
- const command = parseCommand(child);
146
- if (command !== undefined && command.name.length > 0) into.set(command.name, command);
219
+ addCommand(child, into);
220
+ }
221
+ };
222
+
223
+ const parseSection = (section: OrderedNode, registry: GlRegistry): void => {
224
+ const tag = nodeTag(section);
225
+
226
+ if (tag === "commands") {
227
+ parseCommandsSection(section, registry.commands);
228
+
229
+ return;
230
+ }
231
+
232
+ if (tag === "enums") {
233
+ parseEnums(section, registry.enums);
234
+
235
+ return;
236
+ }
237
+
238
+ if (tag !== "feature") {
239
+ return;
240
+ }
241
+
242
+ const feature = parseFeature(section);
243
+
244
+ if (feature !== undefined) {
245
+ registry.features.push(feature);
147
246
  }
148
247
  };
149
248
 
150
- export const loadGlRegistry = (path: string): GlRegistry => {
151
- const commands = new Map<string, GlCommand>();
152
- const enums: GlEnum[] = [];
153
- const features: GlFeature[] = [];
249
+ const loadGlRegistry = (path: string): GlRegistry => {
250
+ const registry: GlRegistry = { commands: new Map<string, GlCommand>(), enums: [], features: [] };
251
+
154
252
  for (const section of parseRegistryFile(path)) {
155
- const tag = nodeTag(section);
156
- if (tag === "commands") {
157
- parseCommandsSection(section, commands);
158
- } else if (tag === "enums") {
159
- parseEnums(section, enums);
160
- } else if (tag === "feature") {
161
- const feature = parseFeature(section);
162
- if (feature !== undefined) features.push(feature);
163
- }
253
+ parseSection(section, registry);
164
254
  }
165
- return { commands, enums, features };
255
+
256
+ return registry;
257
+ };
258
+
259
+ export {
260
+ loadGlRegistry,
261
+ type GlParam,
262
+ type GlCommand,
263
+ type GlEnum,
264
+ type GlInterfaceBlock,
265
+ type GlFeature,
266
+ type GlRegistry,
166
267
  };
@@ -1,75 +1,115 @@
1
1
  import { sortStrings, sortStringsBy } from "@gtkx/utils";
2
- import { ModuleBuilder } from "../writer/module.js";
3
2
  import type { GlEnum } from "./model.js";
4
- import { GL_SCALARS } from "./plan.js";
5
3
  import type { RenderedCommand } from "./render.js";
4
+ import { ModuleBuilder } from "../writer/module.js";
5
+ import { GL_SCALARS } from "./plan.js";
6
6
 
7
- const LIB_CONSTANT = `export const LIB = "libGL.so.1";`;
7
+ const LIB_CONSTANT = "export const LIB = \"libGL.so.1\";";
8
8
 
9
9
  const GENERATED_HEADER = `/**
10
10
  * GENERATED FILE: do not edit.
11
11
  */`;
12
12
 
13
- export const renderEnumsModule = (
13
+ const TS_PRIMITIVES: Set<string> = new Set(["boolean", "string", "void", "number"]);
14
+
15
+ const quotedGroupList = (groups: string[]): string => groups.map((group) => `\`${group}\``).join(", ");
16
+
17
+ const renderEnumsModule = (
14
18
  tokens: { token: GlEnum; exportName: string; literal: string; feature: string }[],
15
19
  ): string => {
16
20
  const builder = new ModuleBuilder();
21
+
17
22
  for (const { token, exportName, literal, feature } of tokens) {
18
- const groupNote = token.groups.length > 0 ? ` Groups: ${token.groups.map((g) => `\`${g}\``).join(", ")}.` : "";
23
+ const groupNote = token.groups.length > 0 ? ` Groups: ${quotedGroupList(token.groups)}.` : "";
24
+
19
25
  builder.appendDeclaration(
20
- `/** \`${token.name}\`, provided by \`${feature}\`.${groupNote} */\nexport const ${exportName} = ${literal};`,
26
+ `/** \`${token.name}\`, provided by \`${feature}\`.${groupNote} */\n` +
27
+ `export const ${exportName} = ${literal};`,
21
28
  );
22
29
  }
30
+
23
31
  return `${GENERATED_HEADER}\n\n${builder.toSource()}`;
24
32
  };
25
33
 
26
- export const renderTypesModule = (groupAliases: Map<string, string>): string => {
34
+ const renderTypesModule = (groupAliases: Map<string, string>): string => {
27
35
  const builder = new ModuleBuilder();
28
36
  builder.imports.addNamed("@gtkx/native", "ExternalObject", true);
29
37
  builder.imports.addNamed("@gtkx/native", "Handle", true);
38
+
30
39
  builder.appendDeclaration(
31
- `/** An opaque \`GLsync\` fence handle. */\nexport type GLsync = ExternalObject<Handle>;`,
40
+ "/** An opaque `GLsync` fence handle. */\nexport type GLsync = ExternalObject<Handle>;",
32
41
  );
42
+
33
43
  builder.appendDeclaration(
34
- `/** An opaque native pointer handle (e.g. a \`glMapBufferRange\` mapping). */\nexport type GLpointer = ExternalObject<Handle>;`,
44
+ "/** An opaque native pointer handle (e.g. a `glMapBufferRange` mapping). */\n" +
45
+ "export type GLpointer = ExternalObject<Handle>;",
35
46
  );
36
- const seen = new Set<string>();
47
+
48
+ const seen: Set<string> = new Set();
49
+
37
50
  for (const scalar of GL_SCALARS.values()) {
38
- if (seen.has(scalar.tsAlias)) continue;
51
+ if (seen.has(scalar.tsAlias)) {
52
+ continue;
53
+ }
54
+
39
55
  seen.add(scalar.tsAlias);
56
+
40
57
  builder.appendDeclaration(
41
58
  `/** The C \`${scalar.tsAlias}\` scalar. */\nexport type ${scalar.tsAlias} = number;`,
42
59
  );
43
60
  }
44
- for (const [group, base] of sortStringsBy(groupAliases.entries(), ([key]) => key)) {
61
+
62
+ const sortedAliases = sortStringsBy(groupAliases.entries(), ([key]) => key);
63
+
64
+ for (const [group, base] of sortedAliases) {
45
65
  builder.appendDeclaration(
46
- `/** Registry enum group \`${group}\`; open and documentation-only, any \`${base}\` value is accepted. */\nexport type ${group} = ${base};`,
66
+ `/** Registry enum group \`${group}\`; open and documentation-only, ` +
67
+ `any \`${base}\` value is accepted. */\nexport type ${group} = ${base};`,
47
68
  );
48
69
  }
70
+
49
71
  return `${GENERATED_HEADER}\n\n${builder.toSource()}`;
50
72
  };
51
73
 
52
- const TS_PRIMITIVES: Set<string> = new Set(["boolean", "string", "void", "number"]);
74
+ const appendTypeImports = (builder: ModuleBuilder, usedTypes: Set<string>): void => {
75
+ for (const alias of sortStrings(usedTypes)) {
76
+ if (TS_PRIMITIVES.has(alias)) {
77
+ continue;
78
+ }
79
+
80
+ builder.imports.addNamed("./types.js", alias, true);
81
+ }
82
+ };
53
83
 
54
- export const renderCommandsModule = (
84
+ const appendCommandBindings = (builder: ModuleBuilder, commands: RenderedCommand[]): void => {
85
+ for (const command of commands) {
86
+ if (command.binding !== undefined) {
87
+ builder.appendBinding(command.binding, command.binding);
88
+ }
89
+ }
90
+ };
91
+
92
+ const appendCommandDeclarations = (builder: ModuleBuilder, commands: RenderedCommand[]): void => {
93
+ for (const command of commands) {
94
+ builder.appendDeclaration(command.declaration);
95
+ }
96
+ };
97
+
98
+ const renderCommandsModule = (
55
99
  rendered: RenderedCommand[],
56
100
  singulars: RenderedCommand[],
57
101
  usedTypes: Set<string>,
58
102
  ): string => {
59
103
  const builder = new ModuleBuilder();
60
104
  builder.imports.addNamed("@gtkx/runtime", "t");
61
- for (const alias of sortStrings(usedTypes)) {
62
- if (TS_PRIMITIVES.has(alias)) continue;
63
- builder.imports.addNamed("./types.js", alias, true);
64
- }
105
+ appendTypeImports(builder, usedTypes);
65
106
  builder.appendBinding(LIB_CONSTANT);
66
- for (const command of rendered) {
67
- if (command.binding !== undefined) builder.appendBinding(command.binding, command.binding);
68
- }
69
- for (const singular of singulars) {
70
- if (singular.binding !== undefined) builder.appendBinding(singular.binding, singular.binding);
71
- }
72
- for (const command of rendered) builder.appendDeclaration(command.declaration);
73
- for (const singular of singulars) builder.appendDeclaration(singular.declaration);
107
+ appendCommandBindings(builder, rendered);
108
+ appendCommandBindings(builder, singulars);
109
+ appendCommandDeclarations(builder, rendered);
110
+ appendCommandDeclarations(builder, singulars);
111
+
74
112
  return `${GENERATED_HEADER}\n\n${builder.toSource()}`;
75
113
  };
114
+
115
+ export { renderEnumsModule, renderTypesModule, renderCommandsModule };
@@ -0,0 +1,14 @@
1
+ import type { GlParam } from "./model.js";
2
+ import type { CommandPlan, ParamPlan } from "./plan.js";
3
+
4
+ type ParamPair = {
5
+ paramPlan: ParamPlan | undefined;
6
+ param: GlParam | undefined;
7
+ };
8
+
9
+ const paramPairAt = (plan: CommandPlan & { ok: true }, index: number): ParamPair => ({
10
+ paramPlan: plan.params[index],
11
+ param: plan.command.params[index],
12
+ });
13
+
14
+ export { paramPairAt };
@@ -1,66 +1,86 @@
1
1
  import { readFileSync } from "node:fs";
2
- import { XMLParser } from "fast-xml-parser";
2
+ import { createXmlParser } from "../xml.js";
3
3
 
4
- export type OrderedNode = { [key: string]: unknown };
4
+ type OrderedNode = Record<string, unknown>;
5
5
 
6
6
  const ATTRIBUTES_KEY = ":@";
7
7
  const TEXT_KEY = "#text";
8
8
 
9
- const PARSER = new XMLParser({
10
- ignoreAttributes: false,
11
- attributeNamePrefix: "@_",
12
- parseAttributeValue: false,
13
- parseTagValue: false,
9
+ const PARSER = createXmlParser({
14
10
  trimValues: false,
15
11
  preserveOrder: true,
16
12
  });
17
13
 
18
- export const parseRegistryFile = (path: string): OrderedNode[] => {
19
- const xml = readFileSync(path, "utf-8");
14
+ const parseRegistryFile = (path: string): OrderedNode[] => {
15
+ const xml = readFileSync(path, "utf8");
20
16
  const documentNodes = PARSER.parse(xml) as OrderedNode[];
17
+
21
18
  for (const node of documentNodes) {
22
- if (nodeTag(node) === "registry") return nodeChildren(node);
19
+ if (nodeTag(node) === "registry") {
20
+ return nodeChildren(node);
21
+ }
23
22
  }
23
+
24
24
  throw new Error(`No <registry> root element found in ${path}`);
25
25
  };
26
26
 
27
- export const nodeTag = (node: OrderedNode): string => {
27
+ const nodeTag = (node: OrderedNode): string => {
28
28
  for (const key of Object.keys(node)) {
29
- if (key !== ATTRIBUTES_KEY && key !== TEXT_KEY) return key;
29
+ if (key !== ATTRIBUTES_KEY && key !== TEXT_KEY) {
30
+ return key;
31
+ }
30
32
  }
33
+
31
34
  return TEXT_KEY;
32
35
  };
33
36
 
34
- export const nodeChildren = (node: OrderedNode): OrderedNode[] => {
37
+ const nodeChildren = (node: OrderedNode): OrderedNode[] => {
35
38
  const tag = nodeTag(node);
36
- if (tag === TEXT_KEY) return [];
39
+
40
+ if (tag === TEXT_KEY) {
41
+ return [];
42
+ }
43
+
37
44
  const children = node[tag];
45
+
38
46
  return Array.isArray(children) ? (children as OrderedNode[]) : [];
39
47
  };
40
48
 
41
- export const nodeAttr = (node: OrderedNode, name: string): string | undefined => {
49
+ const nodeAttr = (node: OrderedNode, name: string): string | undefined => {
42
50
  const attributes = node[ATTRIBUTES_KEY];
43
- if (typeof attributes !== "object" || attributes === null) return undefined;
51
+
52
+ if (typeof attributes !== "object" || attributes === null) {
53
+ return undefined;
54
+ }
55
+
44
56
  const value = (attributes as Record<string, unknown>)[`@_${name}`];
57
+
45
58
  return typeof value === "string" ? value : undefined;
46
59
  };
47
60
 
48
61
  const nodeText = (node: OrderedNode): string | undefined => {
49
62
  const value = node[TEXT_KEY];
63
+
50
64
  return typeof value === "string" ? value : undefined;
51
65
  };
52
66
 
53
- export const collectText = (node: OrderedNode, skipTags: Set<string>): string => {
67
+ const collectText = (node: OrderedNode, skipTags: Set<string>): string => {
54
68
  let text = "";
69
+
55
70
  for (const child of nodeChildren(node)) {
56
71
  const childText = nodeText(child);
72
+
57
73
  if (childText !== undefined) {
58
74
  text += childText;
59
75
  continue;
60
76
  }
77
+
61
78
  if (!skipTags.has(nodeTag(child))) {
62
79
  text += collectText(child, skipTags);
63
80
  }
64
81
  }
82
+
65
83
  return text;
66
84
  };
85
+
86
+ export { parseRegistryFile, nodeTag, nodeChildren, nodeAttr, collectText, type OrderedNode };