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

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 (521) hide show
  1. package/dist/analysis/descriptor-render.d.ts +18 -11
  2. package/dist/analysis/descriptor-render.d.ts.map +1 -1
  3. package/dist/analysis/descriptor-render.js +275 -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 +69 -23
  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 +194 -121
  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 +68 -133
  32. package/dist/docs/element-page.js.map +1 -1
  33. package/dist/docs/pipeline.d.ts +8 -7
  34. package/dist/docs/pipeline.d.ts.map +1 -1
  35. package/dist/docs/pipeline.js +79 -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 +28 -5
  46. package/dist/fingerprint.d.ts.map +1 -1
  47. package/dist/fingerprint.js +66 -13
  48. package/dist/fingerprint.js.map +1 -1
  49. package/dist/gi.d.ts +13 -0
  50. package/dist/gi.d.ts.map +1 -0
  51. package/dist/gi.js +21 -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 +3 -2
  82. package/dist/gir/libraries.d.ts.map +1 -1
  83. package/dist/gir/libraries.js +39 -27
  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 +2 -0
  133. package/dist/index.d.ts.map +1 -1
  134. package/dist/index.js +1 -0
  135. package/dist/index.js.map +1 -1
  136. package/dist/jsx.d.ts +26 -0
  137. package/dist/jsx.d.ts.map +1 -0
  138. package/dist/jsx.js +40 -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 +17 -0
  181. package/dist/react/element-config.d.ts.map +1 -0
  182. package/dist/react/element-config.js +61 -0
  183. package/dist/react/element-config.js.map +1 -0
  184. package/dist/runner.d.ts +17 -10
  185. package/dist/runner.d.ts.map +1 -1
  186. package/dist/runner.js +45 -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 +162 -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-struct-record.d.ts +4 -3
  205. package/dist/store/gi/class-struct-record.d.ts.map +1 -1
  206. package/dist/store/gi/class-struct-record.js +33 -15
  207. package/dist/store/gi/class-struct-record.js.map +1 -1
  208. package/dist/store/gi/class.d.ts +2 -1
  209. package/dist/store/gi/class.d.ts.map +1 -1
  210. package/dist/store/gi/class.js +86 -47
  211. package/dist/store/gi/class.js.map +1 -1
  212. package/dist/store/gi/companion.d.ts +2 -1
  213. package/dist/store/gi/companion.d.ts.map +1 -1
  214. package/dist/store/gi/companion.js +8 -5
  215. package/dist/store/gi/companion.js.map +1 -1
  216. package/dist/store/gi/constant.d.ts +3 -2
  217. package/dist/store/gi/constant.d.ts.map +1 -1
  218. package/dist/store/gi/constant.js +25 -8
  219. package/dist/store/gi/constant.js.map +1 -1
  220. package/dist/store/gi/constructor-props.d.ts +3 -2
  221. package/dist/store/gi/constructor-props.d.ts.map +1 -1
  222. package/dist/store/gi/constructor-props.js +17 -10
  223. package/dist/store/gi/constructor-props.js.map +1 -1
  224. package/dist/store/gi/enum.d.ts +3 -2
  225. package/dist/store/gi/enum.d.ts.map +1 -1
  226. package/dist/store/gi/enum.js +14 -11
  227. package/dist/store/gi/enum.js.map +1 -1
  228. package/dist/store/gi/function.d.ts +5 -4
  229. package/dist/store/gi/function.d.ts.map +1 -1
  230. package/dist/store/gi/function.js +50 -23
  231. package/dist/store/gi/function.js.map +1 -1
  232. package/dist/store/gi/gtype-binding.d.ts +4 -4
  233. package/dist/store/gi/gtype-binding.d.ts.map +1 -1
  234. package/dist/store/gi/gtype-binding.js +15 -11
  235. package/dist/store/gi/gtype-binding.js.map +1 -1
  236. package/dist/store/gi/interface.d.ts +2 -1
  237. package/dist/store/gi/interface.d.ts.map +1 -1
  238. package/dist/store/gi/interface.js +36 -18
  239. package/dist/store/gi/interface.js.map +1 -1
  240. package/dist/store/gi/item-comparators.d.ts +3 -2
  241. package/dist/store/gi/item-comparators.d.ts.map +1 -1
  242. package/dist/store/gi/item-comparators.js +33 -21
  243. package/dist/store/gi/item-comparators.js.map +1 -1
  244. package/dist/store/gi/method.d.ts +13 -13
  245. package/dist/store/gi/method.d.ts.map +1 -1
  246. package/dist/store/gi/method.js +187 -130
  247. package/dist/store/gi/method.js.map +1 -1
  248. package/dist/store/gi/param-marshal.d.ts +7 -6
  249. package/dist/store/gi/param-marshal.d.ts.map +1 -1
  250. package/dist/store/gi/param-marshal.js +26 -13
  251. package/dist/store/gi/param-marshal.js.map +1 -1
  252. package/dist/store/gi/pipeline.d.ts +2 -1
  253. package/dist/store/gi/pipeline.d.ts.map +1 -1
  254. package/dist/store/gi/pipeline.js +38 -23
  255. package/dist/store/gi/pipeline.js.map +1 -1
  256. package/dist/store/gi/properties.d.ts +2 -1
  257. package/dist/store/gi/properties.d.ts.map +1 -1
  258. package/dist/store/gi/properties.js +6 -4
  259. package/dist/store/gi/properties.js.map +1 -1
  260. package/dist/store/gi/property-accessor.d.ts +11 -10
  261. package/dist/store/gi/property-accessor.d.ts.map +1 -1
  262. package/dist/store/gi/property-accessor.js +86 -60
  263. package/dist/store/gi/property-accessor.js.map +1 -1
  264. package/dist/store/gi/record-constructor.d.ts +3 -2
  265. package/dist/store/gi/record-constructor.d.ts.map +1 -1
  266. package/dist/store/gi/record-constructor.js +36 -25
  267. package/dist/store/gi/record-constructor.js.map +1 -1
  268. package/dist/store/gi/record-field-accessor.d.ts +8 -8
  269. package/dist/store/gi/record-field-accessor.d.ts.map +1 -1
  270. package/dist/store/gi/record-field-accessor.js +171 -99
  271. package/dist/store/gi/record-field-accessor.js.map +1 -1
  272. package/dist/store/gi/record-layout.d.ts +6 -5
  273. package/dist/store/gi/record-layout.d.ts.map +1 -1
  274. package/dist/store/gi/record-layout.js +75 -39
  275. package/dist/store/gi/record-layout.js.map +1 -1
  276. package/dist/store/gi/record.d.ts +2 -1
  277. package/dist/store/gi/record.d.ts.map +1 -1
  278. package/dist/store/gi/record.js +19 -13
  279. package/dist/store/gi/record.js.map +1 -1
  280. package/dist/store/gi/registration.d.ts +3 -3
  281. package/dist/store/gi/registration.d.ts.map +1 -1
  282. package/dist/store/gi/registration.js +3 -2
  283. package/dist/store/gi/registration.js.map +1 -1
  284. package/dist/store/gi/return-wrap.d.ts +2 -2
  285. package/dist/store/gi/return-wrap.d.ts.map +1 -1
  286. package/dist/store/gi/return-wrap.js +43 -22
  287. package/dist/store/gi/return-wrap.js.map +1 -1
  288. package/dist/store/gi/runtime-override.d.ts +2 -1
  289. package/dist/store/gi/runtime-override.d.ts.map +1 -1
  290. package/dist/store/gi/runtime-override.js +6 -3
  291. package/dist/store/gi/runtime-override.js.map +1 -1
  292. package/dist/store/gi/signal.d.ts +3 -2
  293. package/dist/store/gi/signal.d.ts.map +1 -1
  294. package/dist/store/gi/signal.js +113 -66
  295. package/dist/store/gi/signal.js.map +1 -1
  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 +27 -0
  321. package/dist/store/jsx/intrinsic-elements.d.ts.map +1 -0
  322. package/dist/store/jsx/intrinsic-elements.js +128 -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/pipeline.d.ts +21 -0
  333. package/dist/store/jsx/pipeline.d.ts.map +1 -0
  334. package/dist/store/{react → jsx}/pipeline.js +36 -15
  335. package/dist/store/jsx/pipeline.js.map +1 -0
  336. package/dist/store/{react → jsx}/props.d.ts +9 -12
  337. package/dist/store/jsx/props.d.ts.map +1 -0
  338. package/dist/store/jsx/props.js +158 -0
  339. package/dist/store/jsx/props.js.map +1 -0
  340. package/dist/store/jsx-store.d.ts +5 -3
  341. package/dist/store/jsx-store.d.ts.map +1 -1
  342. package/dist/store/jsx-store.js +4 -1
  343. package/dist/store/jsx-store.js.map +1 -1
  344. package/dist/store/store-fs.d.ts +14 -12
  345. package/dist/store/store-fs.d.ts.map +1 -1
  346. package/dist/store/store-fs.js +9 -7
  347. package/dist/store/store-fs.js.map +1 -1
  348. package/dist/writer/context.d.ts +2 -1
  349. package/dist/writer/context.d.ts.map +1 -1
  350. package/dist/writer/context.js +12 -6
  351. package/dist/writer/context.js.map +1 -1
  352. package/dist/writer/doc.d.ts +2 -1
  353. package/dist/writer/doc.d.ts.map +1 -1
  354. package/dist/writer/doc.js +13 -7
  355. package/dist/writer/doc.js.map +1 -1
  356. package/dist/writer/emit.d.ts +8 -7
  357. package/dist/writer/emit.d.ts.map +1 -1
  358. package/dist/writer/emit.js +13 -10
  359. package/dist/writer/emit.js.map +1 -1
  360. package/dist/writer/gtk-doc.d.ts +2 -1
  361. package/dist/writer/gtk-doc.d.ts.map +1 -1
  362. package/dist/writer/gtk-doc.js +29 -18
  363. package/dist/writer/gtk-doc.js.map +1 -1
  364. package/dist/writer/imports.d.ts +4 -2
  365. package/dist/writer/imports.d.ts.map +1 -1
  366. package/dist/writer/imports.js +35 -24
  367. package/dist/writer/imports.js.map +1 -1
  368. package/dist/writer/module.d.ts +3 -2
  369. package/dist/writer/module.d.ts.map +1 -1
  370. package/dist/writer/module.js +16 -9
  371. package/dist/writer/module.js.map +1 -1
  372. package/dist/xml.d.ts +4 -0
  373. package/dist/xml.d.ts.map +1 -0
  374. package/dist/xml.js +10 -0
  375. package/dist/xml.js.map +1 -0
  376. package/overrides/cairo/context.ts.ejs +7 -7
  377. package/overrides/cairo/matrix.ts.ejs +2 -2
  378. package/overrides/cairo/recording-surface.ts.ejs +2 -2
  379. package/overrides/cairo/region.ts.ejs +1 -1
  380. package/overrides/cairo/scaled-font.ts.ejs +3 -3
  381. package/package.json +15 -9
  382. package/src/analysis/descriptor-render.ts +484 -168
  383. package/src/analysis/descriptor.ts +162 -125
  384. package/src/analysis/inheritance.ts +286 -98
  385. package/src/analysis/param-structure.ts +188 -57
  386. package/src/analysis/ts-type.ts +112 -26
  387. package/src/compile.ts +103 -76
  388. package/src/docs/api-reference.ts +340 -144
  389. package/src/docs/element-page.ts +137 -146
  390. package/src/docs/pipeline.ts +132 -73
  391. package/src/docs/render.ts +151 -87
  392. package/src/docs/symbol-page.ts +268 -123
  393. package/src/fingerprint.ts +127 -29
  394. package/src/gi.ts +26 -0
  395. package/src/gir/ancestry.ts +26 -14
  396. package/src/gir/callback.ts +10 -15
  397. package/src/gir/class.ts +20 -16
  398. package/src/gir/enum.ts +9 -7
  399. package/src/gir/field.ts +37 -8
  400. package/src/gir/function.ts +33 -9
  401. package/src/gir/gir-path.ts +36 -12
  402. package/src/gir/libraries.ts +56 -31
  403. package/src/gir/library.ts +200 -97
  404. package/src/gir/namespace.ts +42 -26
  405. package/src/gir/nullable-overrides.ts +5 -0
  406. package/src/gir/parameter.ts +80 -42
  407. package/src/gir/parse.ts +102 -47
  408. package/src/gir/primitives.ts +25 -23
  409. package/src/gir/property.ts +13 -11
  410. package/src/gir/record.ts +16 -14
  411. package/src/gir/size.ts +91 -58
  412. package/src/gir/type-id.ts +33 -18
  413. package/src/gir/type-ref.ts +62 -26
  414. package/src/gir/type.ts +10 -8
  415. package/src/index.ts +7 -0
  416. package/src/jsx.ts +70 -0
  417. package/src/khronos/args.ts +158 -89
  418. package/src/khronos/jsdoc.ts +67 -29
  419. package/src/khronos/model.ts +154 -53
  420. package/src/khronos/modules.ts +67 -27
  421. package/src/khronos/param-pair.ts +14 -0
  422. package/src/khronos/parse.ts +37 -17
  423. package/src/khronos/pipeline.ts +193 -90
  424. package/src/khronos/plan.ts +235 -86
  425. package/src/khronos/render.ts +208 -71
  426. package/src/khronos/select.ts +48 -18
  427. package/src/react/element-config.ts +91 -0
  428. package/src/runner.ts +93 -57
  429. package/src/store/compile-store.ts +32 -26
  430. package/src/store/gi/async.ts +48 -21
  431. package/src/store/gi/callables.ts +345 -136
  432. package/src/store/gi/callback.ts +13 -4
  433. package/src/store/gi/class-struct-record.ts +49 -17
  434. package/src/store/gi/class.ts +186 -64
  435. package/src/store/gi/companion.ts +15 -6
  436. package/src/store/gi/constant.ts +42 -8
  437. package/src/store/gi/constructor-props.ts +42 -16
  438. package/src/store/gi/enum.ts +28 -13
  439. package/src/store/gi/function.ts +90 -24
  440. package/src/store/gi/gtype-binding.ts +31 -18
  441. package/src/store/gi/interface.ts +101 -36
  442. package/src/store/gi/item-comparators.ts +74 -26
  443. package/src/store/gi/method.ts +376 -159
  444. package/src/store/gi/param-marshal.ts +38 -15
  445. package/src/store/gi/pipeline.ts +72 -22
  446. package/src/store/gi/properties.ts +16 -5
  447. package/src/store/gi/property-accessor.ts +192 -84
  448. package/src/store/gi/record-constructor.ts +62 -30
  449. package/src/store/gi/record-field-accessor.ts +380 -167
  450. package/src/store/gi/record-layout.ts +130 -43
  451. package/src/store/gi/record.ts +37 -14
  452. package/src/store/gi/registration.ts +15 -9
  453. package/src/store/gi/return-wrap.ts +71 -23
  454. package/src/store/gi/runtime-override.ts +13 -3
  455. package/src/store/gi/signal.ts +244 -104
  456. package/src/store/gi/vtable.ts +117 -41
  457. package/src/store/gi-store.ts +26 -13
  458. package/src/store/jsx/element-components.ts +152 -0
  459. package/src/store/jsx/element-prop-imports.ts +24 -0
  460. package/src/store/jsx/element-prop-types.ts +59 -0
  461. package/src/store/jsx/gir-index.ts +62 -0
  462. package/src/store/jsx/intrinsic-elements.ts +262 -0
  463. package/src/store/{react → jsx}/jsx.ts +213 -99
  464. package/src/store/jsx/metadata.ts +385 -0
  465. package/src/store/jsx/pipeline.ts +145 -0
  466. package/src/store/jsx/props.ts +274 -0
  467. package/src/store/jsx-store.ts +15 -3
  468. package/src/store/store-fs.ts +36 -20
  469. package/src/writer/context.ts +25 -6
  470. package/src/writer/doc.ts +19 -5
  471. package/src/writer/emit.ts +20 -11
  472. package/src/writer/gtk-doc.ts +48 -21
  473. package/src/writer/imports.ts +63 -28
  474. package/src/writer/module.ts +35 -11
  475. package/src/xml.ts +12 -0
  476. package/dist/store/react/built-ins.d.ts +0 -9
  477. package/dist/store/react/built-ins.d.ts.map +0 -1
  478. package/dist/store/react/built-ins.js +0 -226
  479. package/dist/store/react/built-ins.js.map +0 -1
  480. package/dist/store/react/element-components.d.ts +0 -15
  481. package/dist/store/react/element-components.d.ts.map +0 -1
  482. package/dist/store/react/element-components.js +0 -92
  483. package/dist/store/react/element-components.js.map +0 -1
  484. package/dist/store/react/element-prop-types.d.ts +0 -19
  485. package/dist/store/react/element-prop-types.d.ts.map +0 -1
  486. package/dist/store/react/element-prop-types.js +0 -244
  487. package/dist/store/react/element-prop-types.js.map +0 -1
  488. package/dist/store/react/element-props.d.ts +0 -4
  489. package/dist/store/react/element-props.d.ts.map +0 -1
  490. package/dist/store/react/element-props.js +0 -178
  491. package/dist/store/react/element-props.js.map +0 -1
  492. package/dist/store/react/gir-index.d.ts +0 -25
  493. package/dist/store/react/gir-index.d.ts.map +0 -1
  494. package/dist/store/react/gir-index.js +0 -55
  495. package/dist/store/react/gir-index.js.map +0 -1
  496. package/dist/store/react/intrinsic-elements.d.ts +0 -26
  497. package/dist/store/react/intrinsic-elements.d.ts.map +0 -1
  498. package/dist/store/react/intrinsic-elements.js +0 -107
  499. package/dist/store/react/intrinsic-elements.js.map +0 -1
  500. package/dist/store/react/jsx.d.ts.map +0 -1
  501. package/dist/store/react/jsx.js.map +0 -1
  502. package/dist/store/react/metadata.d.ts +0 -4
  503. package/dist/store/react/metadata.d.ts.map +0 -1
  504. package/dist/store/react/metadata.js.map +0 -1
  505. package/dist/store/react/pipeline.d.ts +0 -14
  506. package/dist/store/react/pipeline.d.ts.map +0 -1
  507. package/dist/store/react/pipeline.js.map +0 -1
  508. package/dist/store/react/props.d.ts.map +0 -1
  509. package/dist/store/react/props.js +0 -133
  510. package/dist/store/react/props.js.map +0 -1
  511. package/overrides/gtk/constants.ts.ejs +0 -3
  512. package/overrides/gtk/index.ts.ejs +0 -2
  513. package/src/store/react/built-ins.ts +0 -260
  514. package/src/store/react/element-components.ts +0 -138
  515. package/src/store/react/element-prop-types.ts +0 -280
  516. package/src/store/react/element-props.ts +0 -204
  517. package/src/store/react/gir-index.ts +0 -85
  518. package/src/store/react/intrinsic-elements.ts +0 -161
  519. package/src/store/react/metadata.ts +0 -197
  520. package/src/store/react/pipeline.ts +0 -90
  521. package/src/store/react/props.ts +0 -197
@@ -1 +1 @@
1
- {"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../src/khronos/model.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,OAAO,GAAG;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,OAAO,EAAE,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,MAAM,GAAG;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,EAAE,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,KAAK,EAAE,MAAM,EAAE,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG;IACpB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,gBAAgB,EAAE,CAAC;IAC7B,OAAO,EAAE,gBAAgB,EAAE,CAAC;CAC/B,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACrB,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACjC,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,QAAQ,EAAE,SAAS,EAAE,CAAC;CACzB,CAAC;AA4GF,eAAO,MAAM,cAAc,SAAU,MAAM,KAAG,UAgB7C,CAAC"}
1
+ {"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../src/khronos/model.ts"],"names":[],"mappings":"AAEA,KAAK,OAAO,GAAG;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,KAAK,SAAS,GAAG;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,OAAO,EAAE,CAAC;CACrB,CAAC;AAEF,KAAK,MAAM,GAAG;IACV,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,EAAE,CAAC;CACpB,CAAC;AAEF,KAAK,gBAAgB,GAAG;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,KAAK,EAAE,MAAM,EAAE,CAAC;CACnB,CAAC;AAEF,KAAK,SAAS,GAAG;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,gBAAgB,EAAE,CAAC;IAC7B,OAAO,EAAE,gBAAgB,EAAE,CAAC;CAC/B,CAAC;AAEF,KAAK,UAAU,GAAG;IACd,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACjC,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,QAAQ,EAAE,SAAS,EAAE,CAAC;CACzB,CAAC;AA+MF,QAAA,MAAM,cAAc,GAAI,MAAM,MAAM,KAAG,UAQtC,CAAC;AAEF,OAAO,EACH,cAAc,EACd,KAAK,OAAO,EACZ,KAAK,SAAS,EACd,KAAK,MAAM,EACX,KAAK,gBAAgB,EACrB,KAAK,SAAS,EACd,KAAK,UAAU,GAClB,CAAC"}
@@ -1,18 +1,20 @@
1
1
  import { collectText, nodeAttr, nodeChildren, nodeTag, parseRegistryFile } from "./parse.js";
2
2
  const NAME_TAG = "name";
3
3
  const SKIP_IN_C_TYPE = new Set([NAME_TAG, "comment"]);
4
- const normalizeWhitespace = (text) => text.replace(/\s+/g, " ").trim();
4
+ const normalizeWhitespace = (text) => text.replaceAll(/\s+/g, " ").trim();
5
5
  const childNamed = (node, tag) => {
6
6
  for (const child of nodeChildren(node)) {
7
- if (nodeTag(child) === tag)
7
+ if (nodeTag(child) === tag) {
8
8
  return child;
9
+ }
9
10
  }
10
11
  return undefined;
11
12
  };
12
13
  const elementName = (node) => {
13
14
  const nameChild = childNamed(node, NAME_TAG);
14
- if (nameChild === undefined)
15
+ if (nameChild === undefined) {
15
16
  return "";
17
+ }
16
18
  return normalizeWhitespace(collectText(nameChild, new Set()));
17
19
  };
18
20
  const parseParam = (node) => {
@@ -25,108 +27,141 @@ const parseParam = (node) => {
25
27
  const objectClass = nodeAttr(node, "class");
26
28
  return {
27
29
  ...param,
28
- ...(group !== undefined ? { group } : {}),
29
- ...(len !== undefined ? { len } : {}),
30
- ...(objectClass !== undefined ? { objectClass } : {}),
30
+ ...((group !== undefined) && { group }),
31
+ ...((len !== undefined) && { len }),
32
+ ...((objectClass !== undefined) && { objectClass }),
31
33
  };
32
34
  };
33
35
  const parseCommand = (node) => {
34
36
  const proto = childNamed(node, "proto");
35
- if (proto === undefined)
37
+ if (proto === undefined) {
36
38
  return undefined;
39
+ }
37
40
  const params = [];
38
41
  for (const child of nodeChildren(node)) {
39
- if (nodeTag(child) === "param")
42
+ if (nodeTag(child) === "param") {
40
43
  params.push(parseParam(child));
44
+ }
41
45
  }
42
46
  const returnGroup = nodeAttr(proto, "group");
43
47
  return {
44
48
  name: elementName(proto),
45
49
  returnCType: normalizeWhitespace(collectText(proto, SKIP_IN_C_TYPE)),
46
- ...(returnGroup !== undefined ? { returnGroup } : {}),
50
+ ...((returnGroup !== undefined) && { returnGroup }),
47
51
  params,
48
52
  };
49
53
  };
54
+ const parseEnum = (child) => {
55
+ if (nodeTag(child) !== "enum") {
56
+ return undefined;
57
+ }
58
+ const name = nodeAttr(child, "name");
59
+ const value = nodeAttr(child, "value");
60
+ if (name === undefined || value === undefined) {
61
+ return undefined;
62
+ }
63
+ const group = nodeAttr(child, "group");
64
+ return {
65
+ name,
66
+ value,
67
+ groups: group === undefined ? [] : group.split(",").map((part) => part.trim()),
68
+ };
69
+ };
50
70
  const parseEnums = (node, into) => {
51
71
  for (const child of nodeChildren(node)) {
52
- if (nodeTag(child) !== "enum")
53
- continue;
54
- const name = nodeAttr(child, "name");
55
- const value = nodeAttr(child, "value");
56
- if (name === undefined || value === undefined)
57
- continue;
58
- const group = nodeAttr(child, "group");
59
- into.push({
60
- name,
61
- value,
62
- groups: group === undefined ? [] : group.split(",").map((part) => part.trim()),
63
- });
72
+ const parsed = parseEnum(child);
73
+ if (parsed !== undefined) {
74
+ into.push(parsed);
75
+ }
76
+ }
77
+ };
78
+ const collectInterfaceMember = (child, commands, enums) => {
79
+ const name = nodeAttr(child, "name");
80
+ if (name === undefined) {
81
+ return;
82
+ }
83
+ const tag = nodeTag(child);
84
+ if (tag === "command") {
85
+ commands.push(name);
86
+ }
87
+ else if (tag === "enum") {
88
+ enums.push(name);
64
89
  }
65
90
  };
66
91
  const parseInterfaceBlock = (node) => {
67
92
  const commands = [];
68
93
  const enums = [];
69
94
  for (const child of nodeChildren(node)) {
70
- const name = nodeAttr(child, "name");
71
- if (name === undefined)
72
- continue;
73
- const tag = nodeTag(child);
74
- if (tag === "command")
75
- commands.push(name);
76
- else if (tag === "enum")
77
- enums.push(name);
95
+ collectInterfaceMember(child, commands, enums);
78
96
  }
79
97
  const profile = nodeAttr(node, "profile");
80
98
  return {
81
- ...(profile !== undefined ? { profile } : {}),
99
+ ...((profile !== undefined) && { profile }),
82
100
  commands,
83
101
  enums,
84
102
  };
85
103
  };
104
+ const collectFeatureBlock = (child, requires, removes) => {
105
+ const tag = nodeTag(child);
106
+ if (tag === "require") {
107
+ requires.push(parseInterfaceBlock(child));
108
+ }
109
+ else if (tag === "remove") {
110
+ removes.push(parseInterfaceBlock(child));
111
+ }
112
+ };
86
113
  const parseFeature = (node) => {
87
114
  const api = nodeAttr(node, "api");
88
115
  const name = nodeAttr(node, "name");
89
116
  const number = nodeAttr(node, "number");
90
- if (api === undefined || name === undefined || number === undefined)
117
+ if (api === undefined || name === undefined || number === undefined) {
91
118
  return undefined;
119
+ }
92
120
  const requires = [];
93
121
  const removes = [];
94
122
  for (const child of nodeChildren(node)) {
95
- const tag = nodeTag(child);
96
- if (tag === "require")
97
- requires.push(parseInterfaceBlock(child));
98
- else if (tag === "remove")
99
- removes.push(parseInterfaceBlock(child));
123
+ collectFeatureBlock(child, requires, removes);
124
+ }
125
+ return { api, name, number: Number(number), requires, removes };
126
+ };
127
+ const addCommand = (child, into) => {
128
+ if (nodeTag(child) !== "command") {
129
+ return;
130
+ }
131
+ const command = parseCommand(child);
132
+ if (command !== undefined && command.name.length > 0) {
133
+ into.set(command.name, command);
100
134
  }
101
- return { api, name, number: Number.parseFloat(number), requires, removes };
102
135
  };
103
136
  const parseCommandsSection = (section, into) => {
104
137
  for (const child of nodeChildren(section)) {
105
- if (nodeTag(child) !== "command")
106
- continue;
107
- const command = parseCommand(child);
108
- if (command !== undefined && command.name.length > 0)
109
- into.set(command.name, command);
138
+ addCommand(child, into);
110
139
  }
111
140
  };
112
- export const loadGlRegistry = (path) => {
113
- const commands = new Map();
114
- const enums = [];
115
- const features = [];
141
+ const parseSection = (section, registry) => {
142
+ const tag = nodeTag(section);
143
+ if (tag === "commands") {
144
+ parseCommandsSection(section, registry.commands);
145
+ return;
146
+ }
147
+ if (tag === "enums") {
148
+ parseEnums(section, registry.enums);
149
+ return;
150
+ }
151
+ if (tag !== "feature") {
152
+ return;
153
+ }
154
+ const feature = parseFeature(section);
155
+ if (feature !== undefined) {
156
+ registry.features.push(feature);
157
+ }
158
+ };
159
+ const loadGlRegistry = (path) => {
160
+ const registry = { commands: new Map(), enums: [], features: [] };
116
161
  for (const section of parseRegistryFile(path)) {
117
- const tag = nodeTag(section);
118
- if (tag === "commands") {
119
- parseCommandsSection(section, commands);
120
- }
121
- else if (tag === "enums") {
122
- parseEnums(section, enums);
123
- }
124
- else if (tag === "feature") {
125
- const feature = parseFeature(section);
126
- if (feature !== undefined)
127
- features.push(feature);
128
- }
162
+ parseSection(section, registry);
129
163
  }
130
- return { commands, enums, features };
164
+ return registry;
131
165
  };
166
+ export { loadGlRegistry, };
132
167
  //# sourceMappingURL=model.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"model.js","sourceRoot":"","sources":["../../src/khronos/model.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,YAAY,EAAE,OAAO,EAAoB,iBAAiB,EAAE,MAAM,YAAY,CAAC;AA2C/G,MAAM,QAAQ,GAAG,MAAM,CAAC;AACxB,MAAM,cAAc,GAAgB,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC;AAEnE,MAAM,mBAAmB,GAAG,CAAC,IAAY,EAAU,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;AAEvF,MAAM,UAAU,GAAG,CAAC,IAAiB,EAAE,GAAW,EAA2B,EAAE;IAC3E,KAAK,MAAM,KAAK,IAAI,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;QACrC,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,GAAG;YAAE,OAAO,KAAK,CAAC;IAC7C,CAAC;IACD,OAAO,SAAS,CAAC;AACrB,CAAC,CAAC;AAEF,MAAM,WAAW,GAAG,CAAC,IAAiB,EAAU,EAAE;IAC9C,MAAM,SAAS,GAAG,UAAU,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAC7C,IAAI,SAAS,KAAK,SAAS;QAAE,OAAO,EAAE,CAAC;IACvC,OAAO,mBAAmB,CAAC,WAAW,CAAC,SAAS,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC;AAClE,CAAC,CAAC;AAEF,MAAM,UAAU,GAAG,CAAC,IAAiB,EAAW,EAAE;IAC9C,MAAM,KAAK,GAAY;QACnB,IAAI,EAAE,WAAW,CAAC,IAAI,CAAC;QACvB,KAAK,EAAE,mBAAmB,CAAC,WAAW,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;KAChE,CAAC;IACF,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACtC,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAClC,MAAM,WAAW,GAAG,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC5C,OAAO;QACH,GAAG,KAAK;QACR,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACzC,GAAG,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACrC,GAAG,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACxD,CAAC;AACN,CAAC,CAAC;AAEF,MAAM,YAAY,GAAG,CAAC,IAAiB,EAAyB,EAAE;IAC9D,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACxC,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC1C,MAAM,MAAM,GAAc,EAAE,CAAC;IAC7B,KAAK,MAAM,KAAK,IAAI,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;QACrC,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,OAAO;YAAE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;IACnE,CAAC;IACD,MAAM,WAAW,GAAG,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAC7C,OAAO;QACH,IAAI,EAAE,WAAW,CAAC,KAAK,CAAC;QACxB,WAAW,EAAE,mBAAmB,CAAC,WAAW,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;QACpE,GAAG,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACrD,MAAM;KACT,CAAC;AACN,CAAC,CAAC;AAEF,MAAM,UAAU,GAAG,CAAC,IAAiB,EAAE,IAAc,EAAQ,EAAE;IAC3D,KAAK,MAAM,KAAK,IAAI,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;QACrC,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,MAAM;YAAE,SAAS;QACxC,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QACrC,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QACvC,IAAI,IAAI,KAAK,SAAS,IAAI,KAAK,KAAK,SAAS;YAAE,SAAS;QACxD,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QACvC,IAAI,CAAC,IAAI,CAAC;YACN,IAAI;YACJ,KAAK;YACL,MAAM,EAAE,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;SACjF,CAAC,CAAC;IACP,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,mBAAmB,GAAG,CAAC,IAAiB,EAAoB,EAAE;IAChE,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,MAAM,KAAK,IAAI,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;QACrC,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QACrC,IAAI,IAAI,KAAK,SAAS;YAAE,SAAS;QACjC,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;QAC3B,IAAI,GAAG,KAAK,SAAS;YAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aACtC,IAAI,GAAG,KAAK,MAAM;YAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC9C,CAAC;IACD,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAC1C,OAAO;QACH,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7C,QAAQ;QACR,KAAK;KACR,CAAC;AACN,CAAC,CAAC;AAEF,MAAM,YAAY,GAAG,CAAC,IAAiB,EAAyB,EAAE;IAC9D,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAClC,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACpC,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACxC,IAAI,GAAG,KAAK,SAAS,IAAI,IAAI,KAAK,SAAS,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IACtF,MAAM,QAAQ,GAAuB,EAAE,CAAC;IACxC,MAAM,OAAO,GAAuB,EAAE,CAAC;IACvC,KAAK,MAAM,KAAK,IAAI,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;QACrC,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;QAC3B,IAAI,GAAG,KAAK,SAAS;YAAE,QAAQ,CAAC,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC;aAC5D,IAAI,GAAG,KAAK,QAAQ;YAAE,OAAO,CAAC,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC;IACxE,CAAC;IACD,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;AAC/E,CAAC,CAAC;AAEF,MAAM,oBAAoB,GAAG,CAAC,OAAoB,EAAE,IAA4B,EAAQ,EAAE;IACtF,KAAK,MAAM,KAAK,IAAI,YAAY,CAAC,OAAO,CAAC,EAAE,CAAC;QACxC,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,SAAS;YAAE,SAAS;QAC3C,MAAM,OAAO,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;QACpC,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC;YAAE,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC1F,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,IAAY,EAAc,EAAE;IACvD,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAqB,CAAC;IAC9C,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,QAAQ,GAAgB,EAAE,CAAC;IACjC,KAAK,MAAM,OAAO,IAAI,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5C,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;QAC7B,IAAI,GAAG,KAAK,UAAU,EAAE,CAAC;YACrB,oBAAoB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QAC5C,CAAC;aAAM,IAAI,GAAG,KAAK,OAAO,EAAE,CAAC;YACzB,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAC/B,CAAC;aAAM,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YAC3B,MAAM,OAAO,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;YACtC,IAAI,OAAO,KAAK,SAAS;gBAAE,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACtD,CAAC;IACL,CAAC;IACD,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;AACzC,CAAC,CAAC","sourcesContent":["import { collectText, nodeAttr, nodeChildren, nodeTag, type OrderedNode, parseRegistryFile } from \"./parse.js\";\n\nexport type GlParam = {\n name: string;\n cType: string;\n group?: string;\n len?: string;\n objectClass?: string;\n};\n\nexport type GlCommand = {\n name: string;\n returnCType: string;\n returnGroup?: string;\n params: GlParam[];\n};\n\nexport type GlEnum = {\n name: string;\n value: string;\n groups: string[];\n};\n\nexport type GlInterfaceBlock = {\n profile?: string;\n commands: string[];\n enums: string[];\n};\n\nexport type GlFeature = {\n api: string;\n name: string;\n number: number;\n requires: GlInterfaceBlock[];\n removes: GlInterfaceBlock[];\n};\n\nexport type GlRegistry = {\n commands: Map<string, GlCommand>;\n enums: GlEnum[];\n features: GlFeature[];\n};\n\nconst NAME_TAG = \"name\";\nconst SKIP_IN_C_TYPE: Set<string> = new Set([NAME_TAG, \"comment\"]);\n\nconst normalizeWhitespace = (text: string): string => text.replace(/\\s+/g, \" \").trim();\n\nconst childNamed = (node: OrderedNode, tag: string): OrderedNode | undefined => {\n for (const child of nodeChildren(node)) {\n if (nodeTag(child) === tag) return child;\n }\n return undefined;\n};\n\nconst elementName = (node: OrderedNode): string => {\n const nameChild = childNamed(node, NAME_TAG);\n if (nameChild === undefined) return \"\";\n return normalizeWhitespace(collectText(nameChild, new Set()));\n};\n\nconst parseParam = (node: OrderedNode): GlParam => {\n const param: GlParam = {\n name: elementName(node),\n cType: normalizeWhitespace(collectText(node, SKIP_IN_C_TYPE)),\n };\n const group = nodeAttr(node, \"group\");\n const len = nodeAttr(node, \"len\");\n const objectClass = nodeAttr(node, \"class\");\n return {\n ...param,\n ...(group !== undefined ? { group } : {}),\n ...(len !== undefined ? { len } : {}),\n ...(objectClass !== undefined ? { objectClass } : {}),\n };\n};\n\nconst parseCommand = (node: OrderedNode): GlCommand | undefined => {\n const proto = childNamed(node, \"proto\");\n if (proto === undefined) return undefined;\n const params: GlParam[] = [];\n for (const child of nodeChildren(node)) {\n if (nodeTag(child) === \"param\") params.push(parseParam(child));\n }\n const returnGroup = nodeAttr(proto, \"group\");\n return {\n name: elementName(proto),\n returnCType: normalizeWhitespace(collectText(proto, SKIP_IN_C_TYPE)),\n ...(returnGroup !== undefined ? { returnGroup } : {}),\n params,\n };\n};\n\nconst parseEnums = (node: OrderedNode, into: GlEnum[]): void => {\n for (const child of nodeChildren(node)) {\n if (nodeTag(child) !== \"enum\") continue;\n const name = nodeAttr(child, \"name\");\n const value = nodeAttr(child, \"value\");\n if (name === undefined || value === undefined) continue;\n const group = nodeAttr(child, \"group\");\n into.push({\n name,\n value,\n groups: group === undefined ? [] : group.split(\",\").map((part) => part.trim()),\n });\n }\n};\n\nconst parseInterfaceBlock = (node: OrderedNode): GlInterfaceBlock => {\n const commands: string[] = [];\n const enums: string[] = [];\n for (const child of nodeChildren(node)) {\n const name = nodeAttr(child, \"name\");\n if (name === undefined) continue;\n const tag = nodeTag(child);\n if (tag === \"command\") commands.push(name);\n else if (tag === \"enum\") enums.push(name);\n }\n const profile = nodeAttr(node, \"profile\");\n return {\n ...(profile !== undefined ? { profile } : {}),\n commands,\n enums,\n };\n};\n\nconst parseFeature = (node: OrderedNode): GlFeature | undefined => {\n const api = nodeAttr(node, \"api\");\n const name = nodeAttr(node, \"name\");\n const number = nodeAttr(node, \"number\");\n if (api === undefined || name === undefined || number === undefined) return undefined;\n const requires: GlInterfaceBlock[] = [];\n const removes: GlInterfaceBlock[] = [];\n for (const child of nodeChildren(node)) {\n const tag = nodeTag(child);\n if (tag === \"require\") requires.push(parseInterfaceBlock(child));\n else if (tag === \"remove\") removes.push(parseInterfaceBlock(child));\n }\n return { api, name, number: Number.parseFloat(number), requires, removes };\n};\n\nconst parseCommandsSection = (section: OrderedNode, into: Map<string, GlCommand>): void => {\n for (const child of nodeChildren(section)) {\n if (nodeTag(child) !== \"command\") continue;\n const command = parseCommand(child);\n if (command !== undefined && command.name.length > 0) into.set(command.name, command);\n }\n};\n\nexport const loadGlRegistry = (path: string): GlRegistry => {\n const commands = new Map<string, GlCommand>();\n const enums: GlEnum[] = [];\n const features: GlFeature[] = [];\n for (const section of parseRegistryFile(path)) {\n const tag = nodeTag(section);\n if (tag === \"commands\") {\n parseCommandsSection(section, commands);\n } else if (tag === \"enums\") {\n parseEnums(section, enums);\n } else if (tag === \"feature\") {\n const feature = parseFeature(section);\n if (feature !== undefined) features.push(feature);\n }\n }\n return { commands, enums, features };\n};\n"]}
1
+ {"version":3,"file":"model.js","sourceRoot":"","sources":["../../src/khronos/model.ts"],"names":[],"mappings":"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","sourcesContent":["import { collectText, nodeAttr, nodeChildren, nodeTag, type OrderedNode, parseRegistryFile } from \"./parse.js\";\n\ntype GlParam = {\n name: string;\n cType: string;\n group?: string;\n len?: string;\n objectClass?: string;\n};\n\ntype GlCommand = {\n name: string;\n returnCType: string;\n returnGroup?: string;\n params: GlParam[];\n};\n\ntype GlEnum = {\n name: string;\n value: string;\n groups: string[];\n};\n\ntype GlInterfaceBlock = {\n profile?: string;\n commands: string[];\n enums: string[];\n};\n\ntype GlFeature = {\n api: string;\n name: string;\n number: number;\n requires: GlInterfaceBlock[];\n removes: GlInterfaceBlock[];\n};\n\ntype GlRegistry = {\n commands: Map<string, GlCommand>;\n enums: GlEnum[];\n features: GlFeature[];\n};\n\nconst NAME_TAG = \"name\";\nconst SKIP_IN_C_TYPE: Set<string> = new Set([NAME_TAG, \"comment\"]);\n\nconst normalizeWhitespace = (text: string): string => text.replaceAll(/\\s+/g, \" \").trim();\n\nconst childNamed = (node: OrderedNode, tag: string): OrderedNode | undefined => {\n for (const child of nodeChildren(node)) {\n if (nodeTag(child) === tag) {\n return child;\n }\n }\n\n return undefined;\n};\n\nconst elementName = (node: OrderedNode): string => {\n const nameChild = childNamed(node, NAME_TAG);\n\n if (nameChild === undefined) {\n return \"\";\n }\n\n return normalizeWhitespace(collectText(nameChild, new Set()));\n};\n\nconst parseParam = (node: OrderedNode): GlParam => {\n const param: GlParam = {\n name: elementName(node),\n cType: normalizeWhitespace(collectText(node, SKIP_IN_C_TYPE)),\n };\n\n const group = nodeAttr(node, \"group\");\n const len = nodeAttr(node, \"len\");\n const objectClass = nodeAttr(node, \"class\");\n\n return {\n ...param,\n ...((group !== undefined) && { group }),\n ...((len !== undefined) && { len }),\n ...((objectClass !== undefined) && { objectClass }),\n };\n};\n\nconst parseCommand = (node: OrderedNode): GlCommand | undefined => {\n const proto = childNamed(node, \"proto\");\n\n if (proto === undefined) {\n return undefined;\n }\n\n const params: GlParam[] = [];\n\n for (const child of nodeChildren(node)) {\n if (nodeTag(child) === \"param\") {\n params.push(parseParam(child));\n }\n }\n\n const returnGroup = nodeAttr(proto, \"group\");\n\n return {\n name: elementName(proto),\n returnCType: normalizeWhitespace(collectText(proto, SKIP_IN_C_TYPE)),\n ...((returnGroup !== undefined) && { returnGroup }),\n params,\n };\n};\n\nconst parseEnum = (child: OrderedNode): GlEnum | undefined => {\n if (nodeTag(child) !== \"enum\") {\n return undefined;\n }\n\n const name = nodeAttr(child, \"name\");\n const value = nodeAttr(child, \"value\");\n\n if (name === undefined || value === undefined) {\n return undefined;\n }\n\n const group = nodeAttr(child, \"group\");\n\n return {\n name,\n value,\n groups: group === undefined ? [] : group.split(\",\").map((part) => part.trim()),\n };\n};\n\nconst parseEnums = (node: OrderedNode, into: GlEnum[]): void => {\n for (const child of nodeChildren(node)) {\n const parsed = parseEnum(child);\n\n if (parsed !== undefined) {\n into.push(parsed);\n }\n }\n};\n\nconst collectInterfaceMember = (child: OrderedNode, commands: string[], enums: string[]): void => {\n const name = nodeAttr(child, \"name\");\n\n if (name === undefined) {\n return;\n }\n\n const tag = nodeTag(child);\n\n if (tag === \"command\") {\n commands.push(name);\n } else if (tag === \"enum\") {\n enums.push(name);\n }\n};\n\nconst parseInterfaceBlock = (node: OrderedNode): GlInterfaceBlock => {\n const commands: string[] = [];\n const enums: string[] = [];\n\n for (const child of nodeChildren(node)) {\n collectInterfaceMember(child, commands, enums);\n }\n\n const profile = nodeAttr(node, \"profile\");\n\n return {\n ...((profile !== undefined) && { profile }),\n commands,\n enums,\n };\n};\n\nconst collectFeatureBlock = (child: OrderedNode, requires: GlInterfaceBlock[], removes: GlInterfaceBlock[]): void => {\n const tag = nodeTag(child);\n\n if (tag === \"require\") {\n requires.push(parseInterfaceBlock(child));\n } else if (tag === \"remove\") {\n removes.push(parseInterfaceBlock(child));\n }\n};\n\nconst parseFeature = (node: OrderedNode): GlFeature | undefined => {\n const api = nodeAttr(node, \"api\");\n const name = nodeAttr(node, \"name\");\n const number = nodeAttr(node, \"number\");\n\n if (api === undefined || name === undefined || number === undefined) {\n return undefined;\n }\n\n const requires: GlInterfaceBlock[] = [];\n const removes: GlInterfaceBlock[] = [];\n\n for (const child of nodeChildren(node)) {\n collectFeatureBlock(child, requires, removes);\n }\n\n return { api, name, number: Number(number), requires, removes };\n};\n\nconst addCommand = (child: OrderedNode, into: Map<string, GlCommand>): void => {\n if (nodeTag(child) !== \"command\") {\n return;\n }\n\n const command = parseCommand(child);\n\n if (command !== undefined && command.name.length > 0) {\n into.set(command.name, command);\n }\n};\n\nconst parseCommandsSection = (section: OrderedNode, into: Map<string, GlCommand>): void => {\n for (const child of nodeChildren(section)) {\n addCommand(child, into);\n }\n};\n\nconst parseSection = (section: OrderedNode, registry: GlRegistry): void => {\n const tag = nodeTag(section);\n\n if (tag === \"commands\") {\n parseCommandsSection(section, registry.commands);\n\n return;\n }\n\n if (tag === \"enums\") {\n parseEnums(section, registry.enums);\n\n return;\n }\n\n if (tag !== \"feature\") {\n return;\n }\n\n const feature = parseFeature(section);\n\n if (feature !== undefined) {\n registry.features.push(feature);\n }\n};\n\nconst loadGlRegistry = (path: string): GlRegistry => {\n const registry: GlRegistry = { commands: new Map<string, GlCommand>(), enums: [], features: [] };\n\n for (const section of parseRegistryFile(path)) {\n parseSection(section, registry);\n }\n\n return registry;\n};\n\nexport {\n loadGlRegistry,\n type GlParam,\n type GlCommand,\n type GlEnum,\n type GlInterfaceBlock,\n type GlFeature,\n type GlRegistry,\n};\n"]}
@@ -1,11 +1,12 @@
1
1
  import type { GlEnum } from "./model.js";
2
2
  import type { RenderedCommand } from "./render.js";
3
- export declare const renderEnumsModule: (tokens: {
3
+ declare const renderEnumsModule: (tokens: {
4
4
  token: GlEnum;
5
5
  exportName: string;
6
6
  literal: string;
7
7
  feature: string;
8
8
  }[]) => string;
9
- export declare const renderTypesModule: (groupAliases: Map<string, string>) => string;
10
- export declare const renderCommandsModule: (rendered: RenderedCommand[], singulars: RenderedCommand[], usedTypes: Set<string>) => string;
9
+ declare const renderTypesModule: (groupAliases: Map<string, string>) => string;
10
+ declare const renderCommandsModule: (rendered: RenderedCommand[], singulars: RenderedCommand[], usedTypes: Set<string>) => string;
11
+ export { renderEnumsModule, renderTypesModule, renderCommandsModule };
11
12
  //# sourceMappingURL=modules.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"modules.d.ts","sourceRoot":"","sources":["../../src/khronos/modules.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAEzC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAQnD,eAAO,MAAM,iBAAiB,WAClB;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,EAAE,KAClF,MASF,CAAC;AAEF,eAAO,MAAM,iBAAiB,iBAAkB,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,KAAG,MAwBrE,CAAC;AAIF,eAAO,MAAM,oBAAoB,aACnB,eAAe,EAAE,aAChB,eAAe,EAAE,aACjB,GAAG,CAAC,MAAM,CAAC,KACvB,MAiBF,CAAC"}
1
+ {"version":3,"file":"modules.d.ts","sourceRoot":"","sources":["../../src/khronos/modules.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAcnD,QAAA,MAAM,iBAAiB,GACnB,QAAQ;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,EAAE,KAClF,MAaF,CAAC;AAEF,QAAA,MAAM,iBAAiB,GAAI,cAAc,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,KAAG,MAsC9D,CAAC;AA0BF,QAAA,MAAM,oBAAoB,GACtB,UAAU,eAAe,EAAE,EAC3B,WAAW,eAAe,EAAE,EAC5B,WAAW,GAAG,CAAC,MAAM,CAAC,KACvB,MAWF,CAAC;AAEF,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,CAAC"}
@@ -1,58 +1,73 @@
1
1
  import { sortStrings, sortStringsBy } from "@gtkx/utils";
2
2
  import { ModuleBuilder } from "../writer/module.js";
3
3
  import { GL_SCALARS } from "./plan.js";
4
- const LIB_CONSTANT = `export const LIB = "libGL.so.1";`;
4
+ const LIB_CONSTANT = "export const LIB = \"libGL.so.1\";";
5
5
  const GENERATED_HEADER = `/**
6
6
  * GENERATED FILE: do not edit.
7
7
  */`;
8
- export const renderEnumsModule = (tokens) => {
8
+ const TS_PRIMITIVES = new Set(["boolean", "string", "void", "number"]);
9
+ const quotedGroupList = (groups) => groups.map((group) => `\`${group}\``).join(", ");
10
+ const renderEnumsModule = (tokens) => {
9
11
  const builder = new ModuleBuilder();
10
12
  for (const { token, exportName, literal, feature } of tokens) {
11
- const groupNote = token.groups.length > 0 ? ` Groups: ${token.groups.map((g) => `\`${g}\``).join(", ")}.` : "";
12
- builder.appendDeclaration(`/** \`${token.name}\`, provided by \`${feature}\`.${groupNote} */\nexport const ${exportName} = ${literal};`);
13
+ const groupNote = token.groups.length > 0 ? ` Groups: ${quotedGroupList(token.groups)}.` : "";
14
+ builder.appendDeclaration(`/** \`${token.name}\`, provided by \`${feature}\`.${groupNote} */\n` +
15
+ `export const ${exportName} = ${literal};`);
13
16
  }
14
17
  return `${GENERATED_HEADER}\n\n${builder.toSource()}`;
15
18
  };
16
- export const renderTypesModule = (groupAliases) => {
19
+ const renderTypesModule = (groupAliases) => {
17
20
  const builder = new ModuleBuilder();
18
21
  builder.imports.addNamed("@gtkx/native", "ExternalObject", true);
19
22
  builder.imports.addNamed("@gtkx/native", "Handle", true);
20
- builder.appendDeclaration(`/** An opaque \`GLsync\` fence handle. */\nexport type GLsync = ExternalObject<Handle>;`);
21
- builder.appendDeclaration(`/** An opaque native pointer handle (e.g. a \`glMapBufferRange\` mapping). */\nexport type GLpointer = ExternalObject<Handle>;`);
23
+ builder.appendDeclaration("/** An opaque `GLsync` fence handle. */\nexport type GLsync = ExternalObject<Handle>;");
24
+ builder.appendDeclaration("/** An opaque native pointer handle (e.g. a `glMapBufferRange` mapping). */\n" +
25
+ "export type GLpointer = ExternalObject<Handle>;");
22
26
  const seen = new Set();
23
27
  for (const scalar of GL_SCALARS.values()) {
24
- if (seen.has(scalar.tsAlias))
28
+ if (seen.has(scalar.tsAlias)) {
25
29
  continue;
30
+ }
26
31
  seen.add(scalar.tsAlias);
27
32
  builder.appendDeclaration(`/** The C \`${scalar.tsAlias}\` scalar. */\nexport type ${scalar.tsAlias} = number;`);
28
33
  }
29
- for (const [group, base] of sortStringsBy(groupAliases.entries(), ([key]) => key)) {
30
- builder.appendDeclaration(`/** Registry enum group \`${group}\`; open and documentation-only, any \`${base}\` value is accepted. */\nexport type ${group} = ${base};`);
34
+ const sortedAliases = sortStringsBy(groupAliases.entries(), ([key]) => key);
35
+ for (const [group, base] of sortedAliases) {
36
+ builder.appendDeclaration(`/** Registry enum group \`${group}\`; open and documentation-only, ` +
37
+ `any \`${base}\` value is accepted. */\nexport type ${group} = ${base};`);
31
38
  }
32
39
  return `${GENERATED_HEADER}\n\n${builder.toSource()}`;
33
40
  };
34
- const TS_PRIMITIVES = new Set(["boolean", "string", "void", "number"]);
35
- export const renderCommandsModule = (rendered, singulars, usedTypes) => {
36
- const builder = new ModuleBuilder();
37
- builder.imports.addNamed("@gtkx/runtime", "t");
41
+ const appendTypeImports = (builder, usedTypes) => {
38
42
  for (const alias of sortStrings(usedTypes)) {
39
- if (TS_PRIMITIVES.has(alias))
43
+ if (TS_PRIMITIVES.has(alias)) {
40
44
  continue;
45
+ }
41
46
  builder.imports.addNamed("./types.js", alias, true);
42
47
  }
43
- builder.appendBinding(LIB_CONSTANT);
44
- for (const command of rendered) {
45
- if (command.binding !== undefined)
48
+ };
49
+ const appendCommandBindings = (builder, commands) => {
50
+ for (const command of commands) {
51
+ if (command.binding !== undefined) {
46
52
  builder.appendBinding(command.binding, command.binding);
53
+ }
47
54
  }
48
- for (const singular of singulars) {
49
- if (singular.binding !== undefined)
50
- builder.appendBinding(singular.binding, singular.binding);
51
- }
52
- for (const command of rendered)
55
+ };
56
+ const appendCommandDeclarations = (builder, commands) => {
57
+ for (const command of commands) {
53
58
  builder.appendDeclaration(command.declaration);
54
- for (const singular of singulars)
55
- builder.appendDeclaration(singular.declaration);
59
+ }
60
+ };
61
+ const renderCommandsModule = (rendered, singulars, usedTypes) => {
62
+ const builder = new ModuleBuilder();
63
+ builder.imports.addNamed("@gtkx/runtime", "t");
64
+ appendTypeImports(builder, usedTypes);
65
+ builder.appendBinding(LIB_CONSTANT);
66
+ appendCommandBindings(builder, rendered);
67
+ appendCommandBindings(builder, singulars);
68
+ appendCommandDeclarations(builder, rendered);
69
+ appendCommandDeclarations(builder, singulars);
56
70
  return `${GENERATED_HEADER}\n\n${builder.toSource()}`;
57
71
  };
72
+ export { renderEnumsModule, renderTypesModule, renderCommandsModule };
58
73
  //# sourceMappingURL=modules.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"modules.js","sourceRoot":"","sources":["../../src/khronos/modules.ts"],"names":[],"mappings":"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","sourcesContent":["import { sortStrings, sortStringsBy } from \"@gtkx/utils\";\nimport { ModuleBuilder } from \"../writer/module.js\";\nimport type { GlEnum } from \"./model.js\";\nimport { GL_SCALARS } from \"./plan.js\";\nimport type { RenderedCommand } from \"./render.js\";\n\nconst LIB_CONSTANT = `export const LIB = \"libGL.so.1\";`;\n\nconst GENERATED_HEADER = `/**\n * GENERATED FILE: do not edit.\n */`;\n\nexport const renderEnumsModule = (\n tokens: { token: GlEnum; exportName: string; literal: string; feature: string }[],\n): string => {\n const builder = new ModuleBuilder();\n for (const { token, exportName, literal, feature } of tokens) {\n const groupNote = token.groups.length > 0 ? ` Groups: ${token.groups.map((g) => `\\`${g}\\``).join(\", \")}.` : \"\";\n builder.appendDeclaration(\n `/** \\`${token.name}\\`, provided by \\`${feature}\\`.${groupNote} */\\nexport const ${exportName} = ${literal};`,\n );\n }\n return `${GENERATED_HEADER}\\n\\n${builder.toSource()}`;\n};\n\nexport const renderTypesModule = (groupAliases: Map<string, string>): string => {\n const builder = new ModuleBuilder();\n builder.imports.addNamed(\"@gtkx/native\", \"ExternalObject\", true);\n builder.imports.addNamed(\"@gtkx/native\", \"Handle\", true);\n builder.appendDeclaration(\n `/** An opaque \\`GLsync\\` fence handle. */\\nexport type GLsync = ExternalObject<Handle>;`,\n );\n builder.appendDeclaration(\n `/** An opaque native pointer handle (e.g. a \\`glMapBufferRange\\` mapping). */\\nexport type GLpointer = ExternalObject<Handle>;`,\n );\n const seen = new Set<string>();\n for (const scalar of GL_SCALARS.values()) {\n if (seen.has(scalar.tsAlias)) continue;\n seen.add(scalar.tsAlias);\n builder.appendDeclaration(\n `/** The C \\`${scalar.tsAlias}\\` scalar. */\\nexport type ${scalar.tsAlias} = number;`,\n );\n }\n for (const [group, base] of sortStringsBy(groupAliases.entries(), ([key]) => key)) {\n builder.appendDeclaration(\n `/** Registry enum group \\`${group}\\`; open and documentation-only, any \\`${base}\\` value is accepted. */\\nexport type ${group} = ${base};`,\n );\n }\n return `${GENERATED_HEADER}\\n\\n${builder.toSource()}`;\n};\n\nconst TS_PRIMITIVES: Set<string> = new Set([\"boolean\", \"string\", \"void\", \"number\"]);\n\nexport const renderCommandsModule = (\n rendered: RenderedCommand[],\n singulars: RenderedCommand[],\n usedTypes: Set<string>,\n): string => {\n const builder = new ModuleBuilder();\n builder.imports.addNamed(\"@gtkx/runtime\", \"t\");\n for (const alias of sortStrings(usedTypes)) {\n if (TS_PRIMITIVES.has(alias)) continue;\n builder.imports.addNamed(\"./types.js\", alias, true);\n }\n builder.appendBinding(LIB_CONSTANT);\n for (const command of rendered) {\n if (command.binding !== undefined) builder.appendBinding(command.binding, command.binding);\n }\n for (const singular of singulars) {\n if (singular.binding !== undefined) builder.appendBinding(singular.binding, singular.binding);\n }\n for (const command of rendered) builder.appendDeclaration(command.declaration);\n for (const singular of singulars) builder.appendDeclaration(singular.declaration);\n return `${GENERATED_HEADER}\\n\\n${builder.toSource()}`;\n};\n"]}
1
+ {"version":3,"file":"modules.js","sourceRoot":"","sources":["../../src/khronos/modules.ts"],"names":[],"mappings":"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","sourcesContent":["import { sortStrings, sortStringsBy } from \"@gtkx/utils\";\nimport type { GlEnum } from \"./model.js\";\nimport type { RenderedCommand } from \"./render.js\";\nimport { ModuleBuilder } from \"../writer/module.js\";\nimport { GL_SCALARS } from \"./plan.js\";\n\nconst LIB_CONSTANT = \"export const LIB = \\\"libGL.so.1\\\";\";\n\nconst GENERATED_HEADER = `/**\n * GENERATED FILE: do not edit.\n */`;\n\nconst TS_PRIMITIVES: Set<string> = new Set([\"boolean\", \"string\", \"void\", \"number\"]);\n\nconst quotedGroupList = (groups: string[]): string => groups.map((group) => `\\`${group}\\``).join(\", \");\n\nconst renderEnumsModule = (\n tokens: { token: GlEnum; exportName: string; literal: string; feature: string }[],\n): string => {\n const builder = new ModuleBuilder();\n\n for (const { token, exportName, literal, feature } of tokens) {\n const groupNote = token.groups.length > 0 ? ` Groups: ${quotedGroupList(token.groups)}.` : \"\";\n\n builder.appendDeclaration(\n `/** \\`${token.name}\\`, provided by \\`${feature}\\`.${groupNote} */\\n` +\n `export const ${exportName} = ${literal};`,\n );\n }\n\n return `${GENERATED_HEADER}\\n\\n${builder.toSource()}`;\n};\n\nconst renderTypesModule = (groupAliases: Map<string, string>): string => {\n const builder = new ModuleBuilder();\n builder.imports.addNamed(\"@gtkx/native\", \"ExternalObject\", true);\n builder.imports.addNamed(\"@gtkx/native\", \"Handle\", true);\n\n builder.appendDeclaration(\n \"/** An opaque `GLsync` fence handle. */\\nexport type GLsync = ExternalObject<Handle>;\",\n );\n\n builder.appendDeclaration(\n \"/** An opaque native pointer handle (e.g. a `glMapBufferRange` mapping). */\\n\" +\n \"export type GLpointer = ExternalObject<Handle>;\",\n );\n\n const seen: Set<string> = new Set();\n\n for (const scalar of GL_SCALARS.values()) {\n if (seen.has(scalar.tsAlias)) {\n continue;\n }\n\n seen.add(scalar.tsAlias);\n\n builder.appendDeclaration(\n `/** The C \\`${scalar.tsAlias}\\` scalar. */\\nexport type ${scalar.tsAlias} = number;`,\n );\n }\n\n const sortedAliases = sortStringsBy(groupAliases.entries(), ([key]) => key);\n\n for (const [group, base] of sortedAliases) {\n builder.appendDeclaration(\n `/** Registry enum group \\`${group}\\`; open and documentation-only, ` +\n `any \\`${base}\\` value is accepted. */\\nexport type ${group} = ${base};`,\n );\n }\n\n return `${GENERATED_HEADER}\\n\\n${builder.toSource()}`;\n};\n\nconst appendTypeImports = (builder: ModuleBuilder, usedTypes: Set<string>): void => {\n for (const alias of sortStrings(usedTypes)) {\n if (TS_PRIMITIVES.has(alias)) {\n continue;\n }\n\n builder.imports.addNamed(\"./types.js\", alias, true);\n }\n};\n\nconst appendCommandBindings = (builder: ModuleBuilder, commands: RenderedCommand[]): void => {\n for (const command of commands) {\n if (command.binding !== undefined) {\n builder.appendBinding(command.binding, command.binding);\n }\n }\n};\n\nconst appendCommandDeclarations = (builder: ModuleBuilder, commands: RenderedCommand[]): void => {\n for (const command of commands) {\n builder.appendDeclaration(command.declaration);\n }\n};\n\nconst renderCommandsModule = (\n rendered: RenderedCommand[],\n singulars: RenderedCommand[],\n usedTypes: Set<string>,\n): string => {\n const builder = new ModuleBuilder();\n builder.imports.addNamed(\"@gtkx/runtime\", \"t\");\n appendTypeImports(builder, usedTypes);\n builder.appendBinding(LIB_CONSTANT);\n appendCommandBindings(builder, rendered);\n appendCommandBindings(builder, singulars);\n appendCommandDeclarations(builder, rendered);\n appendCommandDeclarations(builder, singulars);\n\n return `${GENERATED_HEADER}\\n\\n${builder.toSource()}`;\n};\n\nexport { renderEnumsModule, renderTypesModule, renderCommandsModule };\n"]}
@@ -0,0 +1,11 @@
1
+ import type { GlParam } from "./model.js";
2
+ import type { CommandPlan, ParamPlan } from "./plan.js";
3
+ type ParamPair = {
4
+ paramPlan: ParamPlan | undefined;
5
+ param: GlParam | undefined;
6
+ };
7
+ declare const paramPairAt: (plan: CommandPlan & {
8
+ ok: true;
9
+ }, index: number) => ParamPair;
10
+ export { paramPairAt };
11
+ //# sourceMappingURL=param-pair.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"param-pair.d.ts","sourceRoot":"","sources":["../../src/khronos/param-pair.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAExD,KAAK,SAAS,GAAG;IACb,SAAS,EAAE,SAAS,GAAG,SAAS,CAAC;IACjC,KAAK,EAAE,OAAO,GAAG,SAAS,CAAC;CAC9B,CAAC;AAEF,QAAA,MAAM,WAAW,GAAI,MAAM,WAAW,GAAG;IAAE,EAAE,EAAE,IAAI,CAAA;CAAE,EAAE,OAAO,MAAM,KAAG,SAGrE,CAAC;AAEH,OAAO,EAAE,WAAW,EAAE,CAAC"}
@@ -0,0 +1,6 @@
1
+ const paramPairAt = (plan, index) => ({
2
+ paramPlan: plan.params[index],
3
+ param: plan.command.params[index],
4
+ });
5
+ export { paramPairAt };
6
+ //# sourceMappingURL=param-pair.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"param-pair.js","sourceRoot":"","sources":["../../src/khronos/param-pair.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,GAAG,CAAC,IAAgC,EAAE,KAAa,EAAa,EAAE,CAAC,CAAC;IACjF,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;IAC7B,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;CACpC,CAAC,CAAC;AAEH,OAAO,EAAE,WAAW,EAAE,CAAC","sourcesContent":["import type { GlParam } from \"./model.js\";\nimport type { CommandPlan, ParamPlan } from \"./plan.js\";\n\ntype ParamPair = {\n paramPlan: ParamPlan | undefined;\n param: GlParam | undefined;\n};\n\nconst paramPairAt = (plan: CommandPlan & { ok: true }, index: number): ParamPair => ({\n paramPlan: plan.params[index],\n param: plan.command.params[index],\n});\n\nexport { paramPairAt };\n"]}
@@ -1,9 +1,8 @@
1
- export type OrderedNode = {
2
- [key: string]: unknown;
3
- };
4
- export declare const parseRegistryFile: (path: string) => OrderedNode[];
5
- export declare const nodeTag: (node: OrderedNode) => string;
6
- export declare const nodeChildren: (node: OrderedNode) => OrderedNode[];
7
- export declare const nodeAttr: (node: OrderedNode, name: string) => string | undefined;
8
- export declare const collectText: (node: OrderedNode, skipTags: Set<string>) => string;
1
+ type OrderedNode = Record<string, unknown>;
2
+ declare const parseRegistryFile: (path: string) => OrderedNode[];
3
+ declare const nodeTag: (node: OrderedNode) => string;
4
+ declare const nodeChildren: (node: OrderedNode) => OrderedNode[];
5
+ declare const nodeAttr: (node: OrderedNode, name: string) => string | undefined;
6
+ declare const collectText: (node: OrderedNode, skipTags: Set<string>) => string;
7
+ export { parseRegistryFile, nodeTag, nodeChildren, nodeAttr, collectText, type OrderedNode };
9
8
  //# sourceMappingURL=parse.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../../src/khronos/parse.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,WAAW,GAAG;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CAAE,CAAC;AAcrD,eAAO,MAAM,iBAAiB,SAAU,MAAM,KAAG,WAAW,EAO3D,CAAC;AAEF,eAAO,MAAM,OAAO,SAAU,WAAW,KAAG,MAK3C,CAAC;AAEF,eAAO,MAAM,YAAY,SAAU,WAAW,KAAG,WAAW,EAK3D,CAAC;AAEF,eAAO,MAAM,QAAQ,SAAU,WAAW,QAAQ,MAAM,KAAG,MAAM,GAAG,SAKnE,CAAC;AAOF,eAAO,MAAM,WAAW,SAAU,WAAW,YAAY,GAAG,CAAC,MAAM,CAAC,KAAG,MAatE,CAAC"}
1
+ {"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../../src/khronos/parse.ts"],"names":[],"mappings":"AAGA,KAAK,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAU3C,QAAA,MAAM,iBAAiB,GAAI,MAAM,MAAM,KAAG,WAAW,EAWpD,CAAC;AAEF,QAAA,MAAM,OAAO,GAAI,MAAM,WAAW,KAAG,MAQpC,CAAC;AAEF,QAAA,MAAM,YAAY,GAAI,MAAM,WAAW,KAAG,WAAW,EAUpD,CAAC;AAEF,QAAA,MAAM,QAAQ,GAAI,MAAM,WAAW,EAAE,MAAM,MAAM,KAAG,MAAM,GAAG,SAU5D,CAAC;AAQF,QAAA,MAAM,WAAW,GAAI,MAAM,WAAW,EAAE,UAAU,GAAG,CAAC,MAAM,CAAC,KAAG,MAiB/D,CAAC;AAEF,OAAO,EAAE,iBAAiB,EAAE,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,WAAW,EAAE,KAAK,WAAW,EAAE,CAAC"}
@@ -1,42 +1,42 @@
1
1
  import { readFileSync } from "node:fs";
2
- import { XMLParser } from "fast-xml-parser";
2
+ import { createXmlParser } from "../xml.js";
3
3
  const ATTRIBUTES_KEY = ":@";
4
4
  const TEXT_KEY = "#text";
5
- const PARSER = new XMLParser({
6
- ignoreAttributes: false,
7
- attributeNamePrefix: "@_",
8
- parseAttributeValue: false,
9
- parseTagValue: false,
5
+ const PARSER = createXmlParser({
10
6
  trimValues: false,
11
7
  preserveOrder: true,
12
8
  });
13
- export const parseRegistryFile = (path) => {
14
- const xml = readFileSync(path, "utf-8");
9
+ const parseRegistryFile = (path) => {
10
+ const xml = readFileSync(path, "utf8");
15
11
  const documentNodes = PARSER.parse(xml);
16
12
  for (const node of documentNodes) {
17
- if (nodeTag(node) === "registry")
13
+ if (nodeTag(node) === "registry") {
18
14
  return nodeChildren(node);
15
+ }
19
16
  }
20
17
  throw new Error(`No <registry> root element found in ${path}`);
21
18
  };
22
- export const nodeTag = (node) => {
19
+ const nodeTag = (node) => {
23
20
  for (const key of Object.keys(node)) {
24
- if (key !== ATTRIBUTES_KEY && key !== TEXT_KEY)
21
+ if (key !== ATTRIBUTES_KEY && key !== TEXT_KEY) {
25
22
  return key;
23
+ }
26
24
  }
27
25
  return TEXT_KEY;
28
26
  };
29
- export const nodeChildren = (node) => {
27
+ const nodeChildren = (node) => {
30
28
  const tag = nodeTag(node);
31
- if (tag === TEXT_KEY)
29
+ if (tag === TEXT_KEY) {
32
30
  return [];
31
+ }
33
32
  const children = node[tag];
34
33
  return Array.isArray(children) ? children : [];
35
34
  };
36
- export const nodeAttr = (node, name) => {
35
+ const nodeAttr = (node, name) => {
37
36
  const attributes = node[ATTRIBUTES_KEY];
38
- if (typeof attributes !== "object" || attributes === null)
37
+ if (typeof attributes !== "object" || attributes === null) {
39
38
  return undefined;
39
+ }
40
40
  const value = attributes[`@_${name}`];
41
41
  return typeof value === "string" ? value : undefined;
42
42
  };
@@ -44,7 +44,7 @@ const nodeText = (node) => {
44
44
  const value = node[TEXT_KEY];
45
45
  return typeof value === "string" ? value : undefined;
46
46
  };
47
- export const collectText = (node, skipTags) => {
47
+ const collectText = (node, skipTags) => {
48
48
  let text = "";
49
49
  for (const child of nodeChildren(node)) {
50
50
  const childText = nodeText(child);
@@ -58,4 +58,5 @@ export const collectText = (node, skipTags) => {
58
58
  }
59
59
  return text;
60
60
  };
61
+ export { parseRegistryFile, nodeTag, nodeChildren, nodeAttr, collectText };
61
62
  //# sourceMappingURL=parse.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"parse.js","sourceRoot":"","sources":["../../src/khronos/parse.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAI5C,MAAM,cAAc,GAAG,IAAI,CAAC;AAC5B,MAAM,QAAQ,GAAG,OAAO,CAAC;AAEzB,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;IACzB,gBAAgB,EAAE,KAAK;IACvB,mBAAmB,EAAE,IAAI;IACzB,mBAAmB,EAAE,KAAK;IAC1B,aAAa,EAAE,KAAK;IACpB,UAAU,EAAE,KAAK;IACjB,aAAa,EAAE,IAAI;CACtB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,IAAY,EAAiB,EAAE;IAC7D,MAAM,GAAG,GAAG,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACxC,MAAM,aAAa,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAkB,CAAC;IACzD,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;QAC/B,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,UAAU;YAAE,OAAO,YAAY,CAAC,IAAI,CAAC,CAAC;IAChE,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,uCAAuC,IAAI,EAAE,CAAC,CAAC;AACnE,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,IAAiB,EAAU,EAAE;IACjD,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAClC,IAAI,GAAG,KAAK,cAAc,IAAI,GAAG,KAAK,QAAQ;YAAE,OAAO,GAAG,CAAC;IAC/D,CAAC;IACD,OAAO,QAAQ,CAAC;AACpB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,IAAiB,EAAiB,EAAE;IAC7D,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1B,IAAI,GAAG,KAAK,QAAQ;QAAE,OAAO,EAAE,CAAC;IAChC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;IAC3B,OAAO,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAE,QAA0B,CAAC,CAAC,CAAC,EAAE,CAAC;AACtE,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,IAAiB,EAAE,IAAY,EAAsB,EAAE;IAC5E,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC;IACxC,IAAI,OAAO,UAAU,KAAK,QAAQ,IAAI,UAAU,KAAK,IAAI;QAAE,OAAO,SAAS,CAAC;IAC5E,MAAM,KAAK,GAAI,UAAsC,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;IACnE,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AACzD,CAAC,CAAC;AAEF,MAAM,QAAQ,GAAG,CAAC,IAAiB,EAAsB,EAAE;IACvD,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC7B,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AACzD,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,IAAiB,EAAE,QAAqB,EAAU,EAAE;IAC5E,IAAI,IAAI,GAAG,EAAE,CAAC;IACd,KAAK,MAAM,KAAK,IAAI,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;QACrC,MAAM,SAAS,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;QAClC,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;YAC1B,IAAI,IAAI,SAAS,CAAC;YAClB,SAAS;QACb,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;YAChC,IAAI,IAAI,WAAW,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QACzC,CAAC;IACL,CAAC;IACD,OAAO,IAAI,CAAC;AAChB,CAAC,CAAC","sourcesContent":["import { readFileSync } from \"node:fs\";\nimport { XMLParser } from \"fast-xml-parser\";\n\nexport type OrderedNode = { [key: string]: unknown };\n\nconst ATTRIBUTES_KEY = \":@\";\nconst TEXT_KEY = \"#text\";\n\nconst PARSER = new XMLParser({\n ignoreAttributes: false,\n attributeNamePrefix: \"@_\",\n parseAttributeValue: false,\n parseTagValue: false,\n trimValues: false,\n preserveOrder: true,\n});\n\nexport const parseRegistryFile = (path: string): OrderedNode[] => {\n const xml = readFileSync(path, \"utf-8\");\n const documentNodes = PARSER.parse(xml) as OrderedNode[];\n for (const node of documentNodes) {\n if (nodeTag(node) === \"registry\") return nodeChildren(node);\n }\n throw new Error(`No <registry> root element found in ${path}`);\n};\n\nexport const nodeTag = (node: OrderedNode): string => {\n for (const key of Object.keys(node)) {\n if (key !== ATTRIBUTES_KEY && key !== TEXT_KEY) return key;\n }\n return TEXT_KEY;\n};\n\nexport const nodeChildren = (node: OrderedNode): OrderedNode[] => {\n const tag = nodeTag(node);\n if (tag === TEXT_KEY) return [];\n const children = node[tag];\n return Array.isArray(children) ? (children as OrderedNode[]) : [];\n};\n\nexport const nodeAttr = (node: OrderedNode, name: string): string | undefined => {\n const attributes = node[ATTRIBUTES_KEY];\n if (typeof attributes !== \"object\" || attributes === null) return undefined;\n const value = (attributes as Record<string, unknown>)[`@_${name}`];\n return typeof value === \"string\" ? value : undefined;\n};\n\nconst nodeText = (node: OrderedNode): string | undefined => {\n const value = node[TEXT_KEY];\n return typeof value === \"string\" ? value : undefined;\n};\n\nexport const collectText = (node: OrderedNode, skipTags: Set<string>): string => {\n let text = \"\";\n for (const child of nodeChildren(node)) {\n const childText = nodeText(child);\n if (childText !== undefined) {\n text += childText;\n continue;\n }\n if (!skipTags.has(nodeTag(child))) {\n text += collectText(child, skipTags);\n }\n }\n return text;\n};\n"]}
1
+ {"version":3,"file":"parse.js","sourceRoot":"","sources":["../../src/khronos/parse.ts"],"names":[],"mappings":"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","sourcesContent":["import { readFileSync } from \"node:fs\";\nimport { createXmlParser } from \"../xml.js\";\n\ntype OrderedNode = Record<string, unknown>;\n\nconst ATTRIBUTES_KEY = \":@\";\nconst TEXT_KEY = \"#text\";\n\nconst PARSER = createXmlParser({\n trimValues: false,\n preserveOrder: true,\n});\n\nconst parseRegistryFile = (path: string): OrderedNode[] => {\n const xml = readFileSync(path, \"utf8\");\n const documentNodes = PARSER.parse(xml) as OrderedNode[];\n\n for (const node of documentNodes) {\n if (nodeTag(node) === \"registry\") {\n return nodeChildren(node);\n }\n }\n\n throw new Error(`No <registry> root element found in ${path}`);\n};\n\nconst nodeTag = (node: OrderedNode): string => {\n for (const key of Object.keys(node)) {\n if (key !== ATTRIBUTES_KEY && key !== TEXT_KEY) {\n return key;\n }\n }\n\n return TEXT_KEY;\n};\n\nconst nodeChildren = (node: OrderedNode): OrderedNode[] => {\n const tag = nodeTag(node);\n\n if (tag === TEXT_KEY) {\n return [];\n }\n\n const children = node[tag];\n\n return Array.isArray(children) ? (children as OrderedNode[]) : [];\n};\n\nconst nodeAttr = (node: OrderedNode, name: string): string | undefined => {\n const attributes = node[ATTRIBUTES_KEY];\n\n if (typeof attributes !== \"object\" || attributes === null) {\n return undefined;\n }\n\n const value = (attributes as Record<string, unknown>)[`@_${name}`];\n\n return typeof value === \"string\" ? value : undefined;\n};\n\nconst nodeText = (node: OrderedNode): string | undefined => {\n const value = node[TEXT_KEY];\n\n return typeof value === \"string\" ? value : undefined;\n};\n\nconst collectText = (node: OrderedNode, skipTags: Set<string>): string => {\n let text = \"\";\n\n for (const child of nodeChildren(node)) {\n const childText = nodeText(child);\n\n if (childText !== undefined) {\n text += childText;\n continue;\n }\n\n if (!skipTags.has(nodeTag(child))) {\n text += collectText(child, skipTags);\n }\n }\n\n return text;\n};\n\nexport { parseRegistryFile, nodeTag, nodeChildren, nodeAttr, collectText, type OrderedNode };\n"]}