@gtkx/codegen 0.21.0 → 1.0.0-rc.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (732) hide show
  1. package/README.md +173 -0
  2. package/dist/analysis/descriptor-render.d.ts +18 -0
  3. package/dist/analysis/descriptor-render.d.ts.map +1 -0
  4. package/dist/analysis/descriptor-render.js +297 -0
  5. package/dist/analysis/descriptor-render.js.map +1 -0
  6. package/dist/analysis/descriptor.d.ts +59 -0
  7. package/dist/analysis/descriptor.d.ts.map +1 -0
  8. package/dist/analysis/descriptor.js +123 -0
  9. package/dist/analysis/descriptor.js.map +1 -0
  10. package/dist/analysis/inheritance.d.ts +38 -0
  11. package/dist/analysis/inheritance.d.ts.map +1 -0
  12. package/dist/analysis/inheritance.js +193 -0
  13. package/dist/analysis/inheritance.js.map +1 -0
  14. package/dist/analysis/param-structure.d.ts +26 -0
  15. package/dist/analysis/param-structure.d.ts.map +1 -0
  16. package/dist/analysis/param-structure.js +107 -0
  17. package/dist/analysis/param-structure.js.map +1 -0
  18. package/dist/analysis/ts-type.d.ts +19 -0
  19. package/dist/analysis/ts-type.d.ts.map +1 -0
  20. package/dist/analysis/ts-type.js +65 -0
  21. package/dist/analysis/ts-type.js.map +1 -0
  22. package/dist/compile.d.ts +18 -0
  23. package/dist/compile.d.ts.map +1 -0
  24. package/dist/compile.js +123 -0
  25. package/dist/compile.js.map +1 -0
  26. package/dist/docs/api-reference.d.ts +66 -0
  27. package/dist/docs/api-reference.d.ts.map +1 -0
  28. package/dist/docs/api-reference.js +299 -0
  29. package/dist/docs/api-reference.js.map +1 -0
  30. package/dist/docs/element-page.d.ts +15 -0
  31. package/dist/docs/element-page.d.ts.map +1 -0
  32. package/dist/docs/element-page.js +221 -0
  33. package/dist/docs/element-page.js.map +1 -0
  34. package/dist/docs/pipeline.d.ts +25 -0
  35. package/dist/docs/pipeline.d.ts.map +1 -0
  36. package/dist/docs/pipeline.js +130 -0
  37. package/dist/docs/pipeline.js.map +1 -0
  38. package/dist/docs/render.d.ts +32 -0
  39. package/dist/docs/render.d.ts.map +1 -0
  40. package/dist/docs/render.js +134 -0
  41. package/dist/docs/render.js.map +1 -0
  42. package/dist/docs/symbol-page.d.ts +41 -0
  43. package/dist/docs/symbol-page.d.ts.map +1 -0
  44. package/dist/docs/symbol-page.js +338 -0
  45. package/dist/docs/symbol-page.js.map +1 -0
  46. package/dist/fingerprint.d.ts +6 -26
  47. package/dist/fingerprint.d.ts.map +1 -1
  48. package/dist/fingerprint.js +30 -18
  49. package/dist/fingerprint.js.map +1 -1
  50. package/dist/gir/ancestry.d.ts +9 -0
  51. package/dist/gir/ancestry.d.ts.map +1 -0
  52. package/dist/gir/ancestry.js +29 -0
  53. package/dist/gir/ancestry.js.map +1 -0
  54. package/dist/gir/callback.d.ts +9 -10
  55. package/dist/gir/callback.d.ts.map +1 -1
  56. package/dist/gir/callback.js +17 -16
  57. package/dist/gir/callback.js.map +1 -1
  58. package/dist/gir/class.d.ts +22 -43
  59. package/dist/gir/class.d.ts.map +1 -1
  60. package/dist/gir/class.js +11 -23
  61. package/dist/gir/class.js.map +1 -1
  62. package/dist/gir/enum.d.ts +13 -31
  63. package/dist/gir/enum.d.ts.map +1 -1
  64. package/dist/gir/enum.js +7 -14
  65. package/dist/gir/enum.js.map +1 -1
  66. package/dist/gir/field.d.ts +10 -23
  67. package/dist/gir/field.d.ts.map +1 -1
  68. package/dist/gir/field.js +12 -18
  69. package/dist/gir/field.js.map +1 -1
  70. package/dist/gir/function.d.ts +11 -42
  71. package/dist/gir/function.d.ts.map +1 -1
  72. package/dist/gir/function.js +7 -20
  73. package/dist/gir/function.js.map +1 -1
  74. package/dist/gir/gir-path.d.ts +2 -0
  75. package/dist/gir/gir-path.d.ts.map +1 -0
  76. package/dist/gir/gir-path.js +41 -0
  77. package/dist/gir/gir-path.js.map +1 -0
  78. package/dist/gir/libraries.d.ts +4 -0
  79. package/dist/gir/libraries.d.ts.map +1 -0
  80. package/dist/gir/libraries.js +62 -0
  81. package/dist/gir/libraries.js.map +1 -0
  82. package/dist/gir/library.d.ts +37 -0
  83. package/dist/gir/library.d.ts.map +1 -0
  84. package/dist/gir/library.js +218 -0
  85. package/dist/gir/library.js.map +1 -0
  86. package/dist/gir/namespace.d.ts +36 -50
  87. package/dist/gir/namespace.d.ts.map +1 -1
  88. package/dist/gir/namespace.js +46 -36
  89. package/dist/gir/namespace.js.map +1 -1
  90. package/dist/gir/parameter.d.ts +25 -69
  91. package/dist/gir/parameter.d.ts.map +1 -1
  92. package/dist/gir/parameter.js +36 -57
  93. package/dist/gir/parameter.js.map +1 -1
  94. package/dist/gir/parse.d.ts +6 -70
  95. package/dist/gir/parse.d.ts.map +1 -1
  96. package/dist/gir/parse.js +32 -80
  97. package/dist/gir/parse.js.map +1 -1
  98. package/dist/gir/primitives.d.ts +3 -34
  99. package/dist/gir/primitives.d.ts.map +1 -1
  100. package/dist/gir/primitives.js +19 -35
  101. package/dist/gir/primitives.js.map +1 -1
  102. package/dist/gir/property.d.ts +16 -25
  103. package/dist/gir/property.d.ts.map +1 -1
  104. package/dist/gir/property.js +12 -9
  105. package/dist/gir/property.js.map +1 -1
  106. package/dist/gir/record.d.ts +27 -0
  107. package/dist/gir/record.d.ts.map +1 -0
  108. package/dist/gir/record.js +25 -0
  109. package/dist/gir/record.js.map +1 -0
  110. package/dist/gir/size.d.ts +10 -57
  111. package/dist/gir/size.d.ts.map +1 -1
  112. package/dist/gir/size.js +0 -25
  113. package/dist/gir/size.js.map +1 -1
  114. package/dist/gir/type-id.d.ts +49 -0
  115. package/dist/gir/type-id.d.ts.map +1 -0
  116. package/dist/gir/type-id.js +8 -0
  117. package/dist/gir/type-id.js.map +1 -0
  118. package/dist/gir/type-ref.d.ts +3 -77
  119. package/dist/gir/type-ref.d.ts.map +1 -1
  120. package/dist/gir/type-ref.js +35 -65
  121. package/dist/gir/type-ref.js.map +1 -1
  122. package/dist/gir/type.d.ts +33 -0
  123. package/dist/gir/type.d.ts.map +1 -0
  124. package/dist/gir/type.js +2 -0
  125. package/dist/gir/type.js.map +1 -0
  126. package/dist/index.d.ts +5 -11
  127. package/dist/index.d.ts.map +1 -1
  128. package/dist/index.js +5 -11
  129. package/dist/index.js.map +1 -1
  130. package/dist/khronos/args.d.ts +30 -0
  131. package/dist/khronos/args.d.ts.map +1 -0
  132. package/dist/khronos/args.js +150 -0
  133. package/dist/khronos/args.js.map +1 -0
  134. package/dist/khronos/jsdoc.d.ts +21 -0
  135. package/dist/khronos/jsdoc.d.ts.map +1 -0
  136. package/dist/khronos/jsdoc.js +59 -0
  137. package/dist/khronos/jsdoc.js.map +1 -0
  138. package/dist/khronos/model.d.ts +37 -0
  139. package/dist/khronos/model.d.ts.map +1 -0
  140. package/dist/khronos/model.js +132 -0
  141. package/dist/khronos/model.js.map +1 -0
  142. package/dist/khronos/modules.d.ts +11 -0
  143. package/dist/khronos/modules.d.ts.map +1 -0
  144. package/dist/khronos/modules.js +58 -0
  145. package/dist/khronos/modules.js.map +1 -0
  146. package/dist/khronos/parse.d.ts +9 -0
  147. package/dist/khronos/parse.d.ts.map +1 -0
  148. package/dist/khronos/parse.js +61 -0
  149. package/dist/khronos/parse.js.map +1 -0
  150. package/dist/khronos/pipeline.d.ts +24 -0
  151. package/dist/khronos/pipeline.d.ts.map +1 -0
  152. package/dist/khronos/pipeline.js +182 -0
  153. package/dist/khronos/pipeline.js.map +1 -0
  154. package/dist/khronos/plan.d.ts +80 -0
  155. package/dist/khronos/plan.d.ts.map +1 -0
  156. package/dist/khronos/plan.js +136 -0
  157. package/dist/khronos/plan.js.map +1 -0
  158. package/dist/khronos/render.d.ts +16 -0
  159. package/dist/khronos/render.d.ts.map +1 -0
  160. package/dist/khronos/render.js +158 -0
  161. package/dist/khronos/render.js.map +1 -0
  162. package/dist/khronos/select.d.ts +15 -0
  163. package/dist/khronos/select.d.ts.map +1 -0
  164. package/dist/khronos/select.js +45 -0
  165. package/dist/khronos/select.js.map +1 -0
  166. package/dist/runner.d.ts +29 -47
  167. package/dist/runner.d.ts.map +1 -1
  168. package/dist/runner.js +78 -53
  169. package/dist/runner.js.map +1 -1
  170. package/dist/store/compile-store.d.ts +9 -0
  171. package/dist/store/compile-store.d.ts.map +1 -0
  172. package/dist/store/compile-store.js +38 -0
  173. package/dist/store/compile-store.js.map +1 -0
  174. package/dist/store/gi/async.d.ts +4 -0
  175. package/dist/store/gi/async.d.ts.map +1 -0
  176. package/dist/store/gi/async.js +41 -0
  177. package/dist/store/gi/async.js.map +1 -0
  178. package/dist/store/gi/callables.d.ts +36 -0
  179. package/dist/store/gi/callables.d.ts.map +1 -0
  180. package/dist/store/gi/callables.js +202 -0
  181. package/dist/store/gi/callables.js.map +1 -0
  182. package/dist/store/gi/callback.d.ts +4 -0
  183. package/dist/store/gi/callback.d.ts.map +1 -0
  184. package/dist/store/gi/callback.js +14 -0
  185. package/dist/store/gi/callback.js.map +1 -0
  186. package/dist/store/gi/class-struct-record.d.ts +9 -0
  187. package/dist/store/gi/class-struct-record.d.ts.map +1 -0
  188. package/dist/store/gi/class-struct-record.js +34 -0
  189. package/dist/store/gi/class-struct-record.js.map +1 -0
  190. package/dist/store/gi/class.d.ts +4 -0
  191. package/dist/store/gi/class.d.ts.map +1 -0
  192. package/dist/store/gi/class.js +169 -0
  193. package/dist/store/gi/class.js.map +1 -0
  194. package/dist/store/gi/companion.d.ts +4 -0
  195. package/dist/store/gi/companion.d.ts.map +1 -0
  196. package/dist/store/gi/companion.js +13 -0
  197. package/dist/store/gi/companion.js.map +1 -0
  198. package/dist/store/gi/constant.d.ts +5 -0
  199. package/dist/store/gi/constant.d.ts.map +1 -0
  200. package/dist/store/gi/constant.js +18 -0
  201. package/dist/store/gi/constant.js.map +1 -0
  202. package/dist/store/gi/constructor-props.d.ts +5 -0
  203. package/dist/store/gi/constructor-props.d.ts.map +1 -0
  204. package/dist/store/gi/constructor-props.js +64 -0
  205. package/dist/store/gi/constructor-props.js.map +1 -0
  206. package/dist/store/gi/enum.d.ts +5 -0
  207. package/dist/store/gi/enum.d.ts.map +1 -0
  208. package/dist/store/gi/enum.js +38 -0
  209. package/dist/store/gi/enum.js.map +1 -0
  210. package/dist/store/gi/function.d.ts +8 -0
  211. package/dist/store/gi/function.d.ts.map +1 -0
  212. package/dist/store/gi/function.js +87 -0
  213. package/dist/store/gi/function.js.map +1 -0
  214. package/dist/store/gi/gtype-binding.d.ts +10 -0
  215. package/dist/store/gi/gtype-binding.d.ts.map +1 -0
  216. package/dist/store/gi/gtype-binding.js +20 -0
  217. package/dist/store/gi/gtype-binding.js.map +1 -0
  218. package/dist/store/gi/interface.d.ts +4 -0
  219. package/dist/store/gi/interface.d.ts.map +1 -0
  220. package/dist/store/gi/interface.js +99 -0
  221. package/dist/store/gi/interface.js.map +1 -0
  222. package/dist/store/gi/item-comparators.d.ts +6 -0
  223. package/dist/store/gi/item-comparators.d.ts.map +1 -0
  224. package/dist/store/gi/item-comparators.js +76 -0
  225. package/dist/store/gi/item-comparators.js.map +1 -0
  226. package/dist/store/gi/method.d.ts +24 -0
  227. package/dist/store/gi/method.d.ts.map +1 -0
  228. package/dist/store/gi/method.js +279 -0
  229. package/dist/store/gi/method.js.map +1 -0
  230. package/dist/store/gi/param-marshal.d.ts +9 -0
  231. package/dist/store/gi/param-marshal.d.ts.map +1 -0
  232. package/dist/store/gi/param-marshal.js +37 -0
  233. package/dist/store/gi/param-marshal.js.map +1 -0
  234. package/dist/store/gi/pipeline.d.ts +4 -0
  235. package/dist/store/gi/pipeline.d.ts.map +1 -0
  236. package/dist/store/gi/pipeline.js +80 -0
  237. package/dist/store/gi/pipeline.js.map +1 -0
  238. package/dist/store/gi/properties.d.ts +5 -0
  239. package/dist/store/gi/properties.d.ts.map +1 -0
  240. package/dist/store/gi/properties.js +30 -0
  241. package/dist/store/gi/properties.js.map +1 -0
  242. package/dist/store/gi/property-accessor.d.ts +26 -0
  243. package/dist/store/gi/property-accessor.d.ts.map +1 -0
  244. package/dist/store/gi/property-accessor.js +132 -0
  245. package/dist/store/gi/property-accessor.js.map +1 -0
  246. package/dist/store/gi/record-constructor.d.ts +5 -0
  247. package/dist/store/gi/record-constructor.d.ts.map +1 -0
  248. package/dist/store/gi/record-constructor.js +65 -0
  249. package/dist/store/gi/record-constructor.js.map +1 -0
  250. package/dist/store/gi/record-field-accessor.d.ts +25 -0
  251. package/dist/store/gi/record-field-accessor.d.ts.map +1 -0
  252. package/dist/store/gi/record-field-accessor.js +288 -0
  253. package/dist/store/gi/record-field-accessor.js.map +1 -0
  254. package/dist/store/gi/record-layout.d.ts +14 -0
  255. package/dist/store/gi/record-layout.d.ts.map +1 -0
  256. package/dist/store/gi/record-layout.js +96 -0
  257. package/dist/store/gi/record-layout.js.map +1 -0
  258. package/dist/store/gi/record.d.ts +4 -0
  259. package/dist/store/gi/record.d.ts.map +1 -0
  260. package/dist/store/gi/record.js +59 -0
  261. package/dist/store/gi/record.js.map +1 -0
  262. package/dist/store/gi/registration.d.ts +16 -0
  263. package/dist/store/gi/registration.d.ts.map +1 -0
  264. package/dist/store/gi/registration.js +20 -0
  265. package/dist/store/gi/registration.js.map +1 -0
  266. package/dist/store/gi/return-wrap.d.ts +10 -0
  267. package/dist/store/gi/return-wrap.d.ts.map +1 -0
  268. package/dist/store/gi/return-wrap.js +46 -0
  269. package/dist/store/gi/return-wrap.js.map +1 -0
  270. package/dist/store/gi/runtime-override.d.ts +3 -0
  271. package/dist/store/gi/runtime-override.d.ts.map +1 -0
  272. package/dist/{writers → store/gi}/runtime-override.js +0 -15
  273. package/dist/store/gi/runtime-override.js.map +1 -0
  274. package/dist/store/gi/signal.d.ts +5 -0
  275. package/dist/store/gi/signal.d.ts.map +1 -0
  276. package/dist/store/gi/signal.js +233 -0
  277. package/dist/store/gi/signal.js.map +1 -0
  278. package/dist/store/gi/vtable.d.ts +4 -0
  279. package/dist/store/gi/vtable.d.ts.map +1 -0
  280. package/dist/store/gi/vtable.js +78 -0
  281. package/dist/store/gi/vtable.js.map +1 -0
  282. package/dist/store/gi-store.d.ts +9 -0
  283. package/dist/store/gi-store.d.ts.map +1 -0
  284. package/dist/store/gi-store.js +57 -0
  285. package/dist/store/gi-store.js.map +1 -0
  286. package/dist/store/jsx-store.d.ts +5 -0
  287. package/dist/store/jsx-store.d.ts.map +1 -0
  288. package/dist/store/jsx-store.js +23 -0
  289. package/dist/store/jsx-store.js.map +1 -0
  290. package/dist/store/react/built-ins.d.ts +9 -0
  291. package/dist/store/react/built-ins.d.ts.map +1 -0
  292. package/dist/store/react/built-ins.js +226 -0
  293. package/dist/store/react/built-ins.js.map +1 -0
  294. package/dist/store/react/element-components.d.ts +15 -0
  295. package/dist/store/react/element-components.d.ts.map +1 -0
  296. package/dist/store/react/element-components.js +92 -0
  297. package/dist/store/react/element-components.js.map +1 -0
  298. package/dist/store/react/element-prop-types.d.ts +19 -0
  299. package/dist/store/react/element-prop-types.d.ts.map +1 -0
  300. package/dist/store/react/element-prop-types.js +244 -0
  301. package/dist/store/react/element-prop-types.js.map +1 -0
  302. package/dist/store/react/element-props.d.ts +4 -0
  303. package/dist/store/react/element-props.d.ts.map +1 -0
  304. package/dist/store/react/element-props.js +178 -0
  305. package/dist/store/react/element-props.js.map +1 -0
  306. package/dist/store/react/gir-index.d.ts +25 -0
  307. package/dist/store/react/gir-index.d.ts.map +1 -0
  308. package/dist/store/react/gir-index.js +55 -0
  309. package/dist/store/react/gir-index.js.map +1 -0
  310. package/dist/store/react/intrinsic-elements.d.ts +26 -0
  311. package/dist/store/react/intrinsic-elements.d.ts.map +1 -0
  312. package/dist/store/react/intrinsic-elements.js +107 -0
  313. package/dist/store/react/intrinsic-elements.js.map +1 -0
  314. package/dist/store/react/jsx.d.ts +18 -0
  315. package/dist/store/react/jsx.d.ts.map +1 -0
  316. package/dist/store/react/jsx.js +203 -0
  317. package/dist/store/react/jsx.js.map +1 -0
  318. package/dist/store/react/metadata.d.ts +4 -0
  319. package/dist/store/react/metadata.d.ts.map +1 -0
  320. package/dist/store/react/metadata.js +174 -0
  321. package/dist/store/react/metadata.js.map +1 -0
  322. package/dist/store/react/pipeline.d.ts +14 -0
  323. package/dist/store/react/pipeline.d.ts.map +1 -0
  324. package/dist/store/react/pipeline.js +60 -0
  325. package/dist/store/react/pipeline.js.map +1 -0
  326. package/dist/store/react/props.d.ts +36 -0
  327. package/dist/store/react/props.d.ts.map +1 -0
  328. package/dist/store/react/props.js +133 -0
  329. package/dist/store/react/props.js.map +1 -0
  330. package/dist/store/store-fs.d.ts +41 -0
  331. package/dist/store/store-fs.d.ts.map +1 -0
  332. package/dist/store/store-fs.js +71 -0
  333. package/dist/store/store-fs.js.map +1 -0
  334. package/dist/writer/context.d.ts +16 -0
  335. package/dist/writer/context.d.ts.map +1 -0
  336. package/dist/writer/context.js +44 -0
  337. package/dist/writer/context.js.map +1 -0
  338. package/dist/writer/doc.d.ts +2 -0
  339. package/dist/writer/doc.d.ts.map +1 -0
  340. package/dist/writer/doc.js +12 -0
  341. package/dist/writer/doc.js.map +1 -0
  342. package/dist/writer/emit.d.ts +8 -0
  343. package/dist/writer/emit.d.ts.map +1 -0
  344. package/dist/writer/emit.js +21 -0
  345. package/dist/writer/emit.js.map +1 -0
  346. package/dist/writer/gtk-doc.d.ts +2 -0
  347. package/dist/writer/gtk-doc.d.ts.map +1 -0
  348. package/dist/writer/gtk-doc.js +67 -0
  349. package/dist/writer/gtk-doc.js.map +1 -0
  350. package/dist/writer/imports.d.ts +10 -0
  351. package/dist/writer/imports.d.ts.map +1 -0
  352. package/dist/writer/imports.js +50 -0
  353. package/dist/writer/imports.js.map +1 -0
  354. package/dist/writer/module.d.ts +15 -0
  355. package/dist/writer/module.d.ts.map +1 -0
  356. package/dist/writer/module.js +46 -0
  357. package/dist/writer/module.js.map +1 -0
  358. package/overrides/cairo/context.ts.ejs +1269 -0
  359. package/overrides/cairo/font-face.ts.ejs +151 -0
  360. package/overrides/cairo/font-options.ts.ejs +199 -0
  361. package/overrides/cairo/image-surface.ts.ejs +132 -0
  362. package/overrides/cairo/index.ts.ejs +22 -0
  363. package/overrides/cairo/matrix.ts.ejs +171 -0
  364. package/overrides/cairo/pattern.ts.ejs +476 -0
  365. package/overrides/cairo/recording-surface.ts.ejs +102 -0
  366. package/overrides/cairo/region.ts.ejs +237 -0
  367. package/overrides/cairo/scaled-font.ts.ejs +330 -0
  368. package/overrides/cairo/surface.ts.ejs +296 -0
  369. package/overrides/gdk/index.ts.ejs +2 -0
  370. package/overrides/gdk/rgba.ts.ejs +11 -0
  371. package/overrides/gobject/index.ts.ejs +29 -0
  372. package/overrides/gobject/object.ts.ejs +51 -0
  373. package/overrides/gobject/value.ts.ejs +17 -0
  374. package/overrides/graphene/index.ts.ejs +2 -0
  375. package/overrides/graphene/structs.ts.ejs +37 -0
  376. package/overrides/gtk/constants.ts.ejs +3 -0
  377. package/overrides/gtk/index.ts.ejs +2 -0
  378. package/package.json +15 -15
  379. package/src/analysis/descriptor-render.ts +407 -0
  380. package/src/analysis/descriptor.ts +263 -0
  381. package/src/analysis/inheritance.ts +242 -0
  382. package/src/analysis/param-structure.ts +127 -0
  383. package/src/analysis/ts-type.ts +88 -0
  384. package/src/compile.ts +152 -0
  385. package/src/docs/api-reference.ts +361 -0
  386. package/src/docs/element-page.ts +290 -0
  387. package/src/docs/pipeline.ts +182 -0
  388. package/src/docs/render.ts +191 -0
  389. package/src/docs/symbol-page.ts +444 -0
  390. package/src/fingerprint.ts +40 -29
  391. package/src/gir/ancestry.ts +41 -0
  392. package/src/gir/callback.ts +25 -22
  393. package/src/gir/class.ts +31 -57
  394. package/src/gir/enum.ts +20 -38
  395. package/src/gir/field.ts +21 -36
  396. package/src/gir/function.ts +17 -56
  397. package/src/gir/gir-path.ts +49 -0
  398. package/src/gir/libraries.ts +77 -0
  399. package/src/gir/library.ts +248 -0
  400. package/src/gir/namespace.ts +85 -80
  401. package/src/gir/parameter.ts +64 -93
  402. package/src/gir/parse.ts +43 -95
  403. package/src/gir/primitives.ts +23 -45
  404. package/src/gir/property.ts +27 -29
  405. package/src/gir/record.ts +53 -0
  406. package/src/gir/size.ts +9 -56
  407. package/src/gir/type-id.ts +49 -0
  408. package/src/gir/type-ref.ts +35 -140
  409. package/src/gir/type.ts +16 -0
  410. package/src/index.ts +20 -15
  411. package/src/khronos/args.ts +202 -0
  412. package/src/khronos/jsdoc.ts +76 -0
  413. package/src/khronos/model.ts +166 -0
  414. package/src/khronos/modules.ts +75 -0
  415. package/src/khronos/parse.ts +66 -0
  416. package/src/khronos/pipeline.ts +234 -0
  417. package/src/khronos/plan.ts +191 -0
  418. package/src/khronos/registry/LICENSE +202 -0
  419. package/src/khronos/registry/gl.xml +47748 -0
  420. package/src/khronos/render.ts +193 -0
  421. package/src/khronos/select.ts +67 -0
  422. package/src/runner.ts +112 -75
  423. package/src/store/compile-store.ts +49 -0
  424. package/src/store/gi/async.ts +42 -0
  425. package/src/store/gi/callables.ts +309 -0
  426. package/src/store/gi/callback.ts +15 -0
  427. package/src/store/gi/class-struct-record.ts +40 -0
  428. package/src/store/gi/class.ts +212 -0
  429. package/src/store/gi/companion.ts +13 -0
  430. package/src/store/gi/constant.ts +24 -0
  431. package/src/store/gi/constructor-props.ts +82 -0
  432. package/src/store/gi/enum.ts +49 -0
  433. package/src/store/gi/function.ts +107 -0
  434. package/src/store/gi/gtype-binding.ts +33 -0
  435. package/src/store/gi/interface.ts +157 -0
  436. package/src/store/gi/item-comparators.ts +90 -0
  437. package/src/store/gi/method.ts +417 -0
  438. package/src/store/gi/param-marshal.ts +48 -0
  439. package/src/store/gi/pipeline.ts +85 -0
  440. package/src/store/gi/properties.ts +39 -0
  441. package/src/store/gi/property-accessor.ts +194 -0
  442. package/src/store/gi/record-constructor.ts +87 -0
  443. package/src/store/gi/record-field-accessor.ts +394 -0
  444. package/src/store/gi/record-layout.ts +134 -0
  445. package/src/store/gi/record.ts +66 -0
  446. package/src/store/gi/registration.ts +38 -0
  447. package/src/store/gi/return-wrap.ts +52 -0
  448. package/src/store/gi/runtime-override.ts +36 -0
  449. package/src/store/gi/signal.ts +310 -0
  450. package/src/store/gi/vtable.ts +99 -0
  451. package/src/store/gi-store.ts +79 -0
  452. package/src/store/jsx-store.ts +27 -0
  453. package/src/store/react/built-ins.ts +260 -0
  454. package/src/store/react/element-components.ts +138 -0
  455. package/src/store/react/element-prop-types.ts +280 -0
  456. package/src/store/react/element-props.ts +204 -0
  457. package/src/store/react/gir-index.ts +85 -0
  458. package/src/store/react/intrinsic-elements.ts +161 -0
  459. package/src/store/react/jsx.ts +294 -0
  460. package/src/store/react/metadata.ts +197 -0
  461. package/src/store/react/pipeline.ts +90 -0
  462. package/src/store/react/props.ts +197 -0
  463. package/src/store/store-fs.ts +112 -0
  464. package/src/writer/context.ts +48 -0
  465. package/src/writer/doc.ts +11 -0
  466. package/src/writer/emit.ts +26 -0
  467. package/src/writer/gtk-doc.ts +74 -0
  468. package/src/writer/imports.ts +59 -0
  469. package/src/writer/module.ts +45 -0
  470. package/LICENSE +0 -373
  471. package/dist/dsl/context.d.ts +0 -104
  472. package/dist/dsl/context.d.ts.map +0 -1
  473. package/dist/dsl/context.js +0 -140
  474. package/dist/dsl/context.js.map +0 -1
  475. package/dist/dsl/emit.d.ts +0 -28
  476. package/dist/dsl/emit.d.ts.map +0 -1
  477. package/dist/dsl/emit.js +0 -41
  478. package/dist/dsl/emit.js.map +0 -1
  479. package/dist/dsl/identifier.d.ts +0 -28
  480. package/dist/dsl/identifier.d.ts.map +0 -1
  481. package/dist/dsl/identifier.js +0 -45
  482. package/dist/dsl/identifier.js.map +0 -1
  483. package/dist/dsl/imports.d.ts +0 -58
  484. package/dist/dsl/imports.d.ts.map +0 -1
  485. package/dist/dsl/imports.js +0 -107
  486. package/dist/dsl/imports.js.map +0 -1
  487. package/dist/dsl/module.d.ts +0 -53
  488. package/dist/dsl/module.d.ts.map +0 -1
  489. package/dist/dsl/module.js +0 -76
  490. package/dist/dsl/module.js.map +0 -1
  491. package/dist/ffi/pipeline.d.ts +0 -19
  492. package/dist/ffi/pipeline.d.ts.map +0 -1
  493. package/dist/ffi/pipeline.js +0 -107
  494. package/dist/ffi/pipeline.js.map +0 -1
  495. package/dist/gi-store.d.ts +0 -34
  496. package/dist/gi-store.d.ts.map +0 -1
  497. package/dist/gi-store.js +0 -154
  498. package/dist/gi-store.js.map +0 -1
  499. package/dist/gir/boxed.d.ts +0 -66
  500. package/dist/gir/boxed.d.ts.map +0 -1
  501. package/dist/gir/boxed.js +0 -49
  502. package/dist/gir/boxed.js.map +0 -1
  503. package/dist/gir/qualified-name.d.ts +0 -37
  504. package/dist/gir/qualified-name.d.ts.map +0 -1
  505. package/dist/gir/qualified-name.js +0 -39
  506. package/dist/gir/qualified-name.js.map +0 -1
  507. package/dist/gir/qualify.d.ts +0 -32
  508. package/dist/gir/qualify.d.ts.map +0 -1
  509. package/dist/gir/qualify.js +0 -60
  510. package/dist/gir/qualify.js.map +0 -1
  511. package/dist/gir/repository.d.ts +0 -82
  512. package/dist/gir/repository.d.ts.map +0 -1
  513. package/dist/gir/repository.js +0 -122
  514. package/dist/gir/repository.js.map +0 -1
  515. package/dist/gir/signal.d.ts +0 -22
  516. package/dist/gir/signal.d.ts.map +0 -1
  517. package/dist/gir/signal.js +0 -20
  518. package/dist/gir/signal.js.map +0 -1
  519. package/dist/jsx-store.d.ts +0 -22
  520. package/dist/jsx-store.d.ts.map +0 -1
  521. package/dist/jsx-store.js +0 -40
  522. package/dist/jsx-store.js.map +0 -1
  523. package/dist/react/compounds-meta.d.ts +0 -18
  524. package/dist/react/compounds-meta.d.ts.map +0 -1
  525. package/dist/react/compounds-meta.js +0 -93
  526. package/dist/react/compounds-meta.js.map +0 -1
  527. package/dist/react/compounds.d.ts +0 -27
  528. package/dist/react/compounds.d.ts.map +0 -1
  529. package/dist/react/compounds.js +0 -164
  530. package/dist/react/compounds.js.map +0 -1
  531. package/dist/react/internal.d.ts +0 -14
  532. package/dist/react/internal.d.ts.map +0 -1
  533. package/dist/react/internal.js +0 -79
  534. package/dist/react/internal.js.map +0 -1
  535. package/dist/react/jsx.d.ts +0 -22
  536. package/dist/react/jsx.d.ts.map +0 -1
  537. package/dist/react/jsx.js +0 -134
  538. package/dist/react/jsx.js.map +0 -1
  539. package/dist/react/pipeline.d.ts +0 -13
  540. package/dist/react/pipeline.d.ts.map +0 -1
  541. package/dist/react/pipeline.js +0 -25
  542. package/dist/react/pipeline.js.map +0 -1
  543. package/dist/react/props.d.ts +0 -38
  544. package/dist/react/props.d.ts.map +0 -1
  545. package/dist/react/props.js +0 -231
  546. package/dist/react/props.js.map +0 -1
  547. package/dist/react/slot-props.d.ts +0 -10
  548. package/dist/react/slot-props.d.ts.map +0 -1
  549. package/dist/react/slot-props.js +0 -56
  550. package/dist/react/slot-props.js.map +0 -1
  551. package/dist/react/widgets.d.ts +0 -83
  552. package/dist/react/widgets.d.ts.map +0 -1
  553. package/dist/react/widgets.js +0 -152
  554. package/dist/react/widgets.js.map +0 -1
  555. package/dist/store-fs.d.ts +0 -109
  556. package/dist/store-fs.d.ts.map +0 -1
  557. package/dist/store-fs.js +0 -98
  558. package/dist/store-fs.js.map +0 -1
  559. package/dist/transpile.d.ts +0 -32
  560. package/dist/transpile.d.ts.map +0 -1
  561. package/dist/transpile.js +0 -63
  562. package/dist/transpile.js.map +0 -1
  563. package/dist/typecheck-store.d.ts +0 -41
  564. package/dist/typecheck-store.d.ts.map +0 -1
  565. package/dist/typecheck-store.js +0 -102
  566. package/dist/typecheck-store.js.map +0 -1
  567. package/dist/writers/alias.d.ts +0 -13
  568. package/dist/writers/alias.d.ts.map +0 -1
  569. package/dist/writers/alias.js +0 -17
  570. package/dist/writers/alias.js.map +0 -1
  571. package/dist/writers/async.d.ts +0 -22
  572. package/dist/writers/async.d.ts.map +0 -1
  573. package/dist/writers/async.js +0 -48
  574. package/dist/writers/async.js.map +0 -1
  575. package/dist/writers/boxed-constructor.d.ts +0 -26
  576. package/dist/writers/boxed-constructor.d.ts.map +0 -1
  577. package/dist/writers/boxed-constructor.js +0 -85
  578. package/dist/writers/boxed-constructor.js.map +0 -1
  579. package/dist/writers/boxed-field-accessor.d.ts +0 -18
  580. package/dist/writers/boxed-field-accessor.d.ts.map +0 -1
  581. package/dist/writers/boxed-field-accessor.js +0 -260
  582. package/dist/writers/boxed-field-accessor.js.map +0 -1
  583. package/dist/writers/boxed-layout.d.ts +0 -27
  584. package/dist/writers/boxed-layout.d.ts.map +0 -1
  585. package/dist/writers/boxed-layout.js +0 -128
  586. package/dist/writers/boxed-layout.js.map +0 -1
  587. package/dist/writers/boxed.d.ts +0 -20
  588. package/dist/writers/boxed.d.ts.map +0 -1
  589. package/dist/writers/boxed.js +0 -71
  590. package/dist/writers/boxed.js.map +0 -1
  591. package/dist/writers/callables.d.ts +0 -124
  592. package/dist/writers/callables.d.ts.map +0 -1
  593. package/dist/writers/callables.js +0 -283
  594. package/dist/writers/callables.js.map +0 -1
  595. package/dist/writers/callback.d.ts +0 -16
  596. package/dist/writers/callback.d.ts.map +0 -1
  597. package/dist/writers/callback.js +0 -38
  598. package/dist/writers/callback.js.map +0 -1
  599. package/dist/writers/class-struct-record.d.ts +0 -31
  600. package/dist/writers/class-struct-record.d.ts.map +0 -1
  601. package/dist/writers/class-struct-record.js +0 -67
  602. package/dist/writers/class-struct-record.js.map +0 -1
  603. package/dist/writers/class-struct.d.ts +0 -22
  604. package/dist/writers/class-struct.d.ts.map +0 -1
  605. package/dist/writers/class-struct.js +0 -85
  606. package/dist/writers/class-struct.js.map +0 -1
  607. package/dist/writers/class.d.ts +0 -16
  608. package/dist/writers/class.d.ts.map +0 -1
  609. package/dist/writers/class.js +0 -307
  610. package/dist/writers/class.js.map +0 -1
  611. package/dist/writers/constant.d.ts +0 -15
  612. package/dist/writers/constant.d.ts.map +0 -1
  613. package/dist/writers/constant.js +0 -23
  614. package/dist/writers/constant.js.map +0 -1
  615. package/dist/writers/constants.d.ts +0 -15
  616. package/dist/writers/constants.d.ts.map +0 -1
  617. package/dist/writers/constants.js +0 -23
  618. package/dist/writers/constants.js.map +0 -1
  619. package/dist/writers/constructor-props.d.ts +0 -32
  620. package/dist/writers/constructor-props.d.ts.map +0 -1
  621. package/dist/writers/constructor-props.js +0 -110
  622. package/dist/writers/constructor-props.js.map +0 -1
  623. package/dist/writers/enum.d.ts +0 -21
  624. package/dist/writers/enum.d.ts.map +0 -1
  625. package/dist/writers/enum.js +0 -48
  626. package/dist/writers/enum.js.map +0 -1
  627. package/dist/writers/function.d.ts +0 -40
  628. package/dist/writers/function.d.ts.map +0 -1
  629. package/dist/writers/function.js +0 -127
  630. package/dist/writers/function.js.map +0 -1
  631. package/dist/writers/gtype-binding.d.ts +0 -19
  632. package/dist/writers/gtype-binding.d.ts.map +0 -1
  633. package/dist/writers/gtype-binding.js +0 -40
  634. package/dist/writers/gtype-binding.js.map +0 -1
  635. package/dist/writers/inheritance.d.ts +0 -48
  636. package/dist/writers/inheritance.d.ts.map +0 -1
  637. package/dist/writers/inheritance.js +0 -90
  638. package/dist/writers/inheritance.js.map +0 -1
  639. package/dist/writers/interface.d.ts +0 -16
  640. package/dist/writers/interface.d.ts.map +0 -1
  641. package/dist/writers/interface.js +0 -155
  642. package/dist/writers/interface.js.map +0 -1
  643. package/dist/writers/method.d.ts +0 -150
  644. package/dist/writers/method.d.ts.map +0 -1
  645. package/dist/writers/method.js +0 -510
  646. package/dist/writers/method.js.map +0 -1
  647. package/dist/writers/param-classify.d.ts +0 -93
  648. package/dist/writers/param-classify.d.ts.map +0 -1
  649. package/dist/writers/param-classify.js +0 -163
  650. package/dist/writers/param-classify.js.map +0 -1
  651. package/dist/writers/property-accessor.d.ts +0 -19
  652. package/dist/writers/property-accessor.d.ts.map +0 -1
  653. package/dist/writers/property-accessor.js +0 -117
  654. package/dist/writers/property-accessor.js.map +0 -1
  655. package/dist/writers/registration.d.ts +0 -27
  656. package/dist/writers/registration.d.ts.map +0 -1
  657. package/dist/writers/registration.js +0 -30
  658. package/dist/writers/registration.js.map +0 -1
  659. package/dist/writers/return-wrap.d.ts +0 -39
  660. package/dist/writers/return-wrap.d.ts.map +0 -1
  661. package/dist/writers/return-wrap.js +0 -152
  662. package/dist/writers/return-wrap.js.map +0 -1
  663. package/dist/writers/runtime-override.d.ts +0 -18
  664. package/dist/writers/runtime-override.d.ts.map +0 -1
  665. package/dist/writers/runtime-override.js.map +0 -1
  666. package/dist/writers/signal.d.ts +0 -21
  667. package/dist/writers/signal.d.ts.map +0 -1
  668. package/dist/writers/signal.js +0 -260
  669. package/dist/writers/signal.js.map +0 -1
  670. package/dist/writers/ts-type.d.ts +0 -50
  671. package/dist/writers/ts-type.d.ts.map +0 -1
  672. package/dist/writers/ts-type.js +0 -75
  673. package/dist/writers/ts-type.js.map +0 -1
  674. package/dist/writers/types-ts.d.ts +0 -27
  675. package/dist/writers/types-ts.d.ts.map +0 -1
  676. package/dist/writers/types-ts.js +0 -97
  677. package/dist/writers/types-ts.js.map +0 -1
  678. package/dist/writers/value.d.ts +0 -89
  679. package/dist/writers/value.d.ts.map +0 -1
  680. package/dist/writers/value.js +0 -402
  681. package/dist/writers/value.js.map +0 -1
  682. package/src/dsl/context.ts +0 -146
  683. package/src/dsl/emit.ts +0 -42
  684. package/src/dsl/identifier.ts +0 -52
  685. package/src/dsl/imports.ts +0 -109
  686. package/src/dsl/module.ts +0 -75
  687. package/src/ffi/pipeline.ts +0 -113
  688. package/src/gi-store.ts +0 -199
  689. package/src/gir/boxed.ts +0 -94
  690. package/src/gir/qualified-name.ts +0 -55
  691. package/src/gir/qualify.ts +0 -64
  692. package/src/gir/repository.ts +0 -149
  693. package/src/gir/signal.ts +0 -36
  694. package/src/jsx-store.ts +0 -53
  695. package/src/react/compounds-meta.ts +0 -99
  696. package/src/react/compounds.ts +0 -204
  697. package/src/react/internal.ts +0 -91
  698. package/src/react/jsx.ts +0 -155
  699. package/src/react/pipeline.ts +0 -29
  700. package/src/react/props.ts +0 -307
  701. package/src/react/slot-props.ts +0 -57
  702. package/src/react/widgets.ts +0 -185
  703. package/src/store-fs.ts +0 -157
  704. package/src/transpile.ts +0 -80
  705. package/src/typecheck-store.ts +0 -136
  706. package/src/writers/alias.ts +0 -19
  707. package/src/writers/async.ts +0 -44
  708. package/src/writers/boxed-constructor.ts +0 -105
  709. package/src/writers/boxed-field-accessor.ts +0 -306
  710. package/src/writers/boxed-layout.ts +0 -166
  711. package/src/writers/boxed.ts +0 -77
  712. package/src/writers/callables.ts +0 -339
  713. package/src/writers/callback.ts +0 -40
  714. package/src/writers/class-struct-record.ts +0 -75
  715. package/src/writers/class-struct.ts +0 -96
  716. package/src/writers/class.ts +0 -384
  717. package/src/writers/constant.ts +0 -29
  718. package/src/writers/constructor-props.ts +0 -130
  719. package/src/writers/enum.ts +0 -53
  720. package/src/writers/function.ts +0 -136
  721. package/src/writers/gtype-binding.ts +0 -48
  722. package/src/writers/inheritance.ts +0 -104
  723. package/src/writers/interface.ts +0 -168
  724. package/src/writers/method.ts +0 -678
  725. package/src/writers/param-classify.ts +0 -178
  726. package/src/writers/property-accessor.ts +0 -139
  727. package/src/writers/registration.ts +0 -42
  728. package/src/writers/return-wrap.ts +0 -180
  729. package/src/writers/runtime-override.ts +0 -59
  730. package/src/writers/signal.ts +0 -318
  731. package/src/writers/ts-type.ts +0 -115
  732. package/src/writers/value.ts +0 -485
@@ -0,0 +1,65 @@
1
+ import { PRIMITIVE_TS_TYPE } from "../gir/primitives.js";
2
+ import { isClassStructRecord } from "../store/gi/class-struct-record.js";
3
+ import { gtypeTsType } from "../store/gi/gtype-binding.js";
4
+ const willEmitEntity = (library, type) => {
5
+ switch (type.kind) {
6
+ case "callback":
7
+ return type.value.introspectable && type.value.name.length > 0;
8
+ case "record":
9
+ return (type.value.introspectable &&
10
+ !type.value.isVtable &&
11
+ type.value.name.length > 0 &&
12
+ !isClassStructRecord(library, type.namespace.name, type.value));
13
+ default:
14
+ return true;
15
+ }
16
+ };
17
+ export const renderBaseTypeFor = (library, target, ref) => {
18
+ if (ref === undefined)
19
+ return "void";
20
+ const type = library.typeOf(ref);
21
+ const name = library.nameOf(ref);
22
+ if (type === undefined)
23
+ return renderNamedType(target, undefined, name);
24
+ switch (type.kind) {
25
+ case "primitive":
26
+ return type.category === "gtype" ? target.renderGtype() : PRIMITIVE_TS_TYPE[type.category];
27
+ case "varargs":
28
+ return "unknown[]";
29
+ case "callback":
30
+ case "class":
31
+ case "interface":
32
+ case "record":
33
+ case "enum":
34
+ case "alias":
35
+ return renderNamedType(target, type, willEmitEntity(library, type) ? name : undefined);
36
+ case "carray":
37
+ return `${renderBaseTypeFor(library, target, type.element)}[]`;
38
+ case "list":
39
+ if (type.flavor === "gbytearray" && target.byteArrayAsNumber)
40
+ return "number[]";
41
+ return `${renderBaseTypeFor(library, target, type.element)}[]`;
42
+ case "hashtable": {
43
+ const key = renderBaseTypeFor(library, target, type.key);
44
+ const value = renderBaseTypeFor(library, target, type.value);
45
+ return target.containerStyle === "record" ? `Record<${key}, ${value}>` : `Map<${key}, ${value}>`;
46
+ }
47
+ }
48
+ };
49
+ const renderNamedType = (target, resolved, name) => {
50
+ if (name === undefined)
51
+ return resolved?.kind === "callback" ? target.callbackType : "unknown";
52
+ return target.renderNamed(resolved, name);
53
+ };
54
+ const moduleTarget = (context) => ({
55
+ containerStyle: "map",
56
+ callbackType: "((...args: any[]) => any)",
57
+ byteArrayAsNumber: true,
58
+ renderNamed: (_resolved, name) => context.qualify(name.namespaceName, name.typeName),
59
+ renderGtype: () => gtypeTsType(context),
60
+ });
61
+ export const renderTsType = (context, ref, isNullable = false) => {
62
+ const base = renderBaseTypeFor(context.library, moduleTarget(context), ref);
63
+ return isNullable ? `${base} | null` : base;
64
+ };
65
+ //# sourceMappingURL=ts-type.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ts-type.js","sourceRoot":"","sources":["../../src/analysis/ts-type.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Library } from \"../gir/library.js\";\nimport { PRIMITIVE_TS_TYPE } from \"../gir/primitives.js\";\nimport type { EntityType, GirType } from \"../gir/type.js\";\nimport type { TypeId } from \"../gir/type-id.js\";\nimport { isClassStructRecord } from \"../store/gi/class-struct-record.js\";\nimport { gtypeTsType } from \"../store/gi/gtype-binding.js\";\nimport type { ModuleContext } from \"../writer/context.js\";\n\ntype ReferenceName = {\n namespaceName: string;\n typeName: string;\n};\n\nexport type TsTypeTarget = {\n containerStyle: \"map\" | \"record\";\n callbackType: string;\n byteArrayAsNumber: boolean;\n renderNamed: (resolved: GirType | undefined, name: ReferenceName) => string;\n renderGtype: () => string;\n};\n\nconst willEmitEntity = (library: Library, type: EntityType): boolean => {\n switch (type.kind) {\n case \"callback\":\n return type.value.introspectable && type.value.name.length > 0;\n case \"record\":\n return (\n type.value.introspectable &&\n !type.value.isVtable &&\n type.value.name.length > 0 &&\n !isClassStructRecord(library, type.namespace.name, type.value)\n );\n default:\n return true;\n }\n};\n\nexport const renderBaseTypeFor = (library: Library, target: TsTypeTarget, ref: TypeId | undefined): string => {\n if (ref === undefined) return \"void\";\n const type = library.typeOf(ref);\n const name = library.nameOf(ref);\n if (type === undefined) return renderNamedType(target, undefined, name);\n switch (type.kind) {\n case \"primitive\":\n return type.category === \"gtype\" ? target.renderGtype() : PRIMITIVE_TS_TYPE[type.category];\n case \"varargs\":\n return \"unknown[]\";\n case \"callback\":\n case \"class\":\n case \"interface\":\n case \"record\":\n case \"enum\":\n case \"alias\":\n return renderNamedType(target, type, willEmitEntity(library, type) ? name : undefined);\n case \"carray\":\n return `${renderBaseTypeFor(library, target, type.element)}[]`;\n case \"list\":\n if (type.flavor === \"gbytearray\" && target.byteArrayAsNumber) return \"number[]\";\n return `${renderBaseTypeFor(library, target, type.element)}[]`;\n case \"hashtable\": {\n const key = renderBaseTypeFor(library, target, type.key);\n const value = renderBaseTypeFor(library, target, type.value);\n return target.containerStyle === \"record\" ? `Record<${key}, ${value}>` : `Map<${key}, ${value}>`;\n }\n }\n};\n\nconst renderNamedType = (\n target: TsTypeTarget,\n resolved: GirType | undefined,\n name: ReferenceName | undefined,\n): string => {\n if (name === undefined) return resolved?.kind === \"callback\" ? target.callbackType : \"unknown\";\n return target.renderNamed(resolved, name);\n};\n\nconst moduleTarget = (context: ModuleContext): TsTypeTarget => ({\n containerStyle: \"map\",\n callbackType: \"((...args: any[]) => any)\",\n byteArrayAsNumber: true,\n renderNamed: (_resolved, name) => context.qualify(name.namespaceName, name.typeName),\n renderGtype: () => gtypeTsType(context),\n});\n\nexport const renderTsType = (context: ModuleContext, ref: TypeId | undefined, isNullable = false): string => {\n const base = renderBaseTypeFor(context.library, moduleTarget(context), ref);\n return isNullable ? `${base} | null` : base;\n};\n"]}
@@ -0,0 +1,18 @@
1
+ export type SourceModule = {
2
+ fileName: string;
3
+ source: string;
4
+ };
5
+ export type CompileProjectParams = {
6
+ projectDir: string;
7
+ fileNames: string[];
8
+ compilerOptions: Record<string, unknown>;
9
+ label: string;
10
+ paths?: Record<string, string[]>;
11
+ };
12
+ export declare const compileProject: (params: CompileProjectParams) => void;
13
+ export declare const checkModules: (params: {
14
+ modules: SourceModule[];
15
+ resolveFrom: string;
16
+ label: string;
17
+ }) => void;
18
+ //# sourceMappingURL=compile.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compile.d.ts","sourceRoot":"","sources":["../src/compile.ts"],"names":[],"mappings":"AAOA,MAAM,MAAM,YAAY,GAAG;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACzC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;CACpC,CAAC;AA+EF,eAAO,MAAM,cAAc,WAAY,oBAAoB,KAAG,IA2B7D,CAAC;AAQF,eAAO,MAAM,YAAY,WAAY;IAAE,OAAO,EAAE,YAAY,EAAE,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,KAAG,IAmBtG,CAAC"}
@@ -0,0 +1,123 @@
1
+ import { execFileSync } from "node:child_process";
2
+ import { existsSync, mkdirSync, mkdtempSync, rmSync, symlinkSync, writeFileSync } from "node:fs";
3
+ import { createRequire } from "node:module";
4
+ import { dirname, isAbsolute, join, relative, resolve } from "node:path";
5
+ const require = createRequire(import.meta.url);
6
+ const BASE_COMPILER_OPTIONS = {
7
+ module: "esnext",
8
+ moduleResolution: "bundler",
9
+ target: "esnext",
10
+ lib: ["esnext"],
11
+ jsx: "react-jsx",
12
+ jsxImportSource: "react",
13
+ customConditions: ["source"],
14
+ strict: true,
15
+ exactOptionalPropertyTypes: true,
16
+ noUncheckedIndexedAccess: true,
17
+ noImplicitReturns: true,
18
+ noFallthroughCasesInSwitch: true,
19
+ allowUnreachableCode: false,
20
+ forceConsistentCasingInFileNames: true,
21
+ resolveJsonModule: true,
22
+ skipLibCheck: true,
23
+ types: ["node"],
24
+ };
25
+ const codegenModules = () => dirname(dirname(dirname(require.resolve("@types/node/package.json"))));
26
+ const linkToolingModules = (projectDir) => {
27
+ const link = join(projectDir, "node_modules");
28
+ if (existsSync(link))
29
+ return () => { };
30
+ symlinkSync(codegenModules(), link, "junction");
31
+ return () => rmSync(link, { force: true });
32
+ };
33
+ const tscBin = () => join(dirname(require.resolve("typescript/package.json")), "bin", "tsc");
34
+ const runTsc = (tsconfigPath, cwd) => {
35
+ try {
36
+ execFileSync(process.execPath, [tscBin(), "--pretty", "false", "-p", tsconfigPath], {
37
+ cwd,
38
+ encoding: "utf8",
39
+ stdio: ["ignore", "pipe", "pipe"],
40
+ maxBuffer: 64 * 1024 * 1024,
41
+ });
42
+ return { code: 0, output: "" };
43
+ }
44
+ catch (error) {
45
+ const { status, stdout = "", stderr = "", } = error;
46
+ return { code: typeof status === "number" ? status : 1, output: `${stdout}\n${stderr}` };
47
+ }
48
+ };
49
+ const DIAGNOSTIC_LINE = /^(.+?)\((\d+),(\d+)\): error TS(\d+): (.*)$/;
50
+ const parseDiagnostics = (output, projectDir) => {
51
+ const diagnostics = [];
52
+ for (const raw of output.split(/\r?\n/)) {
53
+ const match = DIAGNOSTIC_LINE.exec(raw);
54
+ if (match === null)
55
+ continue;
56
+ const [, filePart, line, column, code, message] = match;
57
+ if (filePart === undefined || line === undefined || column === undefined || code === undefined)
58
+ continue;
59
+ const file = resolve(projectDir, filePart);
60
+ const rel = relative(projectDir, file);
61
+ if (rel.startsWith("..") || isAbsolute(rel) || rel.split(/[/\\]/).includes("node_modules"))
62
+ continue;
63
+ diagnostics.push({ file, line, column, code, message: (message ?? "").trim() });
64
+ }
65
+ return diagnostics;
66
+ };
67
+ const formatDiagnostics = (label, projectDir, diagnostics) => {
68
+ const messages = diagnostics.map((diagnostic) => `${relative(projectDir, diagnostic.file)}:${diagnostic.line}:${diagnostic.column} - ${diagnostic.message} (TS${diagnostic.code})`);
69
+ return `Type checking ${label} found ${diagnostics.length} error(s):\n${messages.join("\n")}`;
70
+ };
71
+ export const compileProject = (params) => {
72
+ const tsconfigPath = join(params.projectDir, "tsconfig.json");
73
+ const unlinkToolingModules = linkToolingModules(params.projectDir);
74
+ try {
75
+ writeFileSync(tsconfigPath, JSON.stringify({
76
+ compilerOptions: {
77
+ ...BASE_COMPILER_OPTIONS,
78
+ ...params.compilerOptions,
79
+ ...(params.paths === undefined ? {} : { paths: params.paths }),
80
+ },
81
+ files: params.fileNames.map((name) => `./${name}`),
82
+ }));
83
+ const { code, output } = runTsc(tsconfigPath, params.projectDir);
84
+ const diagnostics = parseDiagnostics(output, params.projectDir);
85
+ if (diagnostics.length > 0) {
86
+ throw new Error(formatDiagnostics(params.label, params.projectDir, diagnostics));
87
+ }
88
+ if (code !== 0) {
89
+ throw new Error(`Type checking ${params.label} failed:\n${output.trim()}`);
90
+ }
91
+ }
92
+ finally {
93
+ unlinkToolingModules();
94
+ rmSync(tsconfigPath, { force: true });
95
+ }
96
+ };
97
+ const CHECK_OPTIONS = {
98
+ declaration: true,
99
+ isolatedDeclarations: true,
100
+ noEmit: true,
101
+ };
102
+ export const checkModules = (params) => {
103
+ const checkRoot = join(params.resolveFrom, "node_modules");
104
+ mkdirSync(checkRoot, { recursive: true });
105
+ const projectDir = mkdtempSync(join(checkRoot, ".gtkx-check-"));
106
+ try {
107
+ for (const module of params.modules) {
108
+ const filePath = join(projectDir, module.fileName);
109
+ mkdirSync(dirname(filePath), { recursive: true });
110
+ writeFileSync(filePath, module.source);
111
+ }
112
+ compileProject({
113
+ projectDir,
114
+ fileNames: params.modules.map((module) => module.fileName),
115
+ compilerOptions: CHECK_OPTIONS,
116
+ label: params.label,
117
+ });
118
+ }
119
+ finally {
120
+ rmSync(projectDir, { recursive: true, force: true });
121
+ }
122
+ };
123
+ //# sourceMappingURL=compile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compile.js","sourceRoot":"","sources":["../src/compile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACjG,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEzE,MAAM,OAAO,GAAG,aAAa,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC;AAe/C,MAAM,qBAAqB,GAAG;IAC1B,MAAM,EAAE,QAAQ;IAChB,gBAAgB,EAAE,SAAS;IAC3B,MAAM,EAAE,QAAQ;IAChB,GAAG,EAAE,CAAC,QAAQ,CAAC;IACf,GAAG,EAAE,WAAW;IAChB,eAAe,EAAE,OAAO;IACxB,gBAAgB,EAAE,CAAC,QAAQ,CAAC;IAC5B,MAAM,EAAE,IAAI;IACZ,0BAA0B,EAAE,IAAI;IAChC,wBAAwB,EAAE,IAAI;IAC9B,iBAAiB,EAAE,IAAI;IACvB,0BAA0B,EAAE,IAAI;IAChC,oBAAoB,EAAE,KAAK;IAC3B,gCAAgC,EAAE,IAAI;IACtC,iBAAiB,EAAE,IAAI;IACvB,YAAY,EAAE,IAAI;IAClB,KAAK,EAAE,CAAC,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,cAAc,GAAG,GAAW,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,0BAA0B,CAAC,CAAC,CAAC,CAAC,CAAC;AAE5G,MAAM,kBAAkB,GAAG,CAAC,UAAkB,EAAgB,EAAE;IAC5D,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;IAC9C,IAAI,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,GAAG,EAAE,GAAE,CAAC,CAAC;IACtC,WAAW,CAAC,cAAc,EAAE,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;IAChD,OAAO,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;AAC/C,CAAC,CAAC;AAEF,MAAM,MAAM,GAAG,GAAW,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;AAErG,MAAM,MAAM,GAAG,CAAC,YAAoB,EAAE,GAAW,EAAoC,EAAE;IACnF,IAAI,CAAC;QACD,YAAY,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,EAAE,UAAU,EAAE,OAAO,EAAE,IAAI,EAAE,YAAY,CAAC,EAAE;YAChF,GAAG;YACH,QAAQ,EAAE,MAAM;YAChB,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC;YACjC,SAAS,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI;SAC9B,CAAC,CAAC;QACH,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;IACnC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,MAAM,EACF,MAAM,EACN,MAAM,GAAG,EAAE,EACX,MAAM,GAAG,EAAE,GACd,GAAG,KAAqE,CAAC;QAC1E,OAAO,EAAE,IAAI,EAAE,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,KAAK,MAAM,EAAE,EAAE,CAAC;IAC7F,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,eAAe,GAAG,6CAA6C,CAAC;AAItE,MAAM,gBAAgB,GAAG,CAAC,MAAc,EAAE,UAAkB,EAAuB,EAAE;IACjF,MAAM,WAAW,GAAwB,EAAE,CAAC;IAC5C,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;QACtC,MAAM,KAAK,GAAG,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACxC,IAAI,KAAK,KAAK,IAAI;YAAE,SAAS;QAC7B,MAAM,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,GAAG,KAAK,CAAC;QACxD,IAAI,QAAQ,KAAK,SAAS,IAAI,IAAI,KAAK,SAAS,IAAI,MAAM,KAAK,SAAS,IAAI,IAAI,KAAK,SAAS;YAAE,SAAS;QACzG,MAAM,IAAI,GAAG,OAAO,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QAC3C,MAAM,GAAG,GAAG,QAAQ,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;QACvC,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,cAAc,CAAC;YAAE,SAAS;QACrG,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IACpF,CAAC;IACD,OAAO,WAAW,CAAC;AACvB,CAAC,CAAC;AAEF,MAAM,iBAAiB,GAAG,CAAC,KAAa,EAAE,UAAkB,EAAE,WAAgC,EAAU,EAAE;IACtG,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,CAC5B,CAAC,UAAU,EAAE,EAAE,CACX,GAAG,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,IAAI,IAAI,UAAU,CAAC,MAAM,MAAM,UAAU,CAAC,OAAO,OAAO,UAAU,CAAC,IAAI,GAAG,CACxI,CAAC;IACF,OAAO,iBAAiB,KAAK,UAAU,WAAW,CAAC,MAAM,eAAe,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;AAClG,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,MAA4B,EAAQ,EAAE;IACjE,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,eAAe,CAAC,CAAC;IAC9D,MAAM,oBAAoB,GAAG,kBAAkB,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IACnE,IAAI,CAAC;QACD,aAAa,CACT,YAAY,EACZ,IAAI,CAAC,SAAS,CAAC;YACX,eAAe,EAAE;gBACb,GAAG,qBAAqB;gBACxB,GAAG,MAAM,CAAC,eAAe;gBACzB,GAAG,CAAC,MAAM,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC;aACjE;YACD,KAAK,EAAE,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC;SACrD,CAAC,CACL,CAAC;QACF,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;QACjE,MAAM,WAAW,GAAG,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;QAChE,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC;QACrF,CAAC;QACD,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,iBAAiB,MAAM,CAAC,KAAK,aAAa,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAC/E,CAAC;IACL,CAAC;YAAS,CAAC;QACP,oBAAoB,EAAE,CAAC;QACvB,MAAM,CAAC,YAAY,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1C,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,aAAa,GAAG;IAClB,WAAW,EAAE,IAAI;IACjB,oBAAoB,EAAE,IAAI;IAC1B,MAAM,EAAE,IAAI;CACf,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,MAAuE,EAAQ,EAAE;IAC1G,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;IAC3D,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1C,MAAM,UAAU,GAAG,WAAW,CAAC,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC,CAAC;IAChE,IAAI,CAAC;QACD,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YAClC,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;YACnD,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAClD,aAAa,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;QAC3C,CAAC;QACD,cAAc,CAAC;YACX,UAAU;YACV,SAAS,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC;YAC1D,eAAe,EAAE,aAAa;YAC9B,KAAK,EAAE,MAAM,CAAC,KAAK;SACtB,CAAC,CAAC;IACP,CAAC;YAAS,CAAC;QACP,MAAM,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACzD,CAAC;AACL,CAAC,CAAC","sourcesContent":["import { execFileSync } from \"node:child_process\";\nimport { existsSync, mkdirSync, mkdtempSync, rmSync, symlinkSync, writeFileSync } from \"node:fs\";\nimport { createRequire } from \"node:module\";\nimport { dirname, isAbsolute, join, relative, resolve } from \"node:path\";\n\nconst require = createRequire(import.meta.url);\n\nexport type SourceModule = {\n fileName: string;\n source: string;\n};\n\nexport type CompileProjectParams = {\n projectDir: string;\n fileNames: string[];\n compilerOptions: Record<string, unknown>;\n label: string;\n paths?: Record<string, string[]>;\n};\n\nconst BASE_COMPILER_OPTIONS = {\n module: \"esnext\",\n moduleResolution: \"bundler\",\n target: \"esnext\",\n lib: [\"esnext\"],\n jsx: \"react-jsx\",\n jsxImportSource: \"react\",\n customConditions: [\"source\"],\n strict: true,\n exactOptionalPropertyTypes: true,\n noUncheckedIndexedAccess: true,\n noImplicitReturns: true,\n noFallthroughCasesInSwitch: true,\n allowUnreachableCode: false,\n forceConsistentCasingInFileNames: true,\n resolveJsonModule: true,\n skipLibCheck: true,\n types: [\"node\"],\n};\n\nconst codegenModules = (): string => dirname(dirname(dirname(require.resolve(\"@types/node/package.json\"))));\n\nconst linkToolingModules = (projectDir: string): (() => void) => {\n const link = join(projectDir, \"node_modules\");\n if (existsSync(link)) return () => {};\n symlinkSync(codegenModules(), link, \"junction\");\n return () => rmSync(link, { force: true });\n};\n\nconst tscBin = (): string => join(dirname(require.resolve(\"typescript/package.json\")), \"bin\", \"tsc\");\n\nconst runTsc = (tsconfigPath: string, cwd: string): { code: number; output: string } => {\n try {\n execFileSync(process.execPath, [tscBin(), \"--pretty\", \"false\", \"-p\", tsconfigPath], {\n cwd,\n encoding: \"utf8\",\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n maxBuffer: 64 * 1024 * 1024,\n });\n return { code: 0, output: \"\" };\n } catch (error) {\n const {\n status,\n stdout = \"\",\n stderr = \"\",\n } = error as { status?: number | null; stdout?: string; stderr?: string };\n return { code: typeof status === \"number\" ? status : 1, output: `${stdout}\\n${stderr}` };\n }\n};\n\nconst DIAGNOSTIC_LINE = /^(.+?)\\((\\d+),(\\d+)\\): error TS(\\d+): (.*)$/;\n\ntype ProjectDiagnostic = { file: string; line: string; column: string; code: string; message: string };\n\nconst parseDiagnostics = (output: string, projectDir: string): ProjectDiagnostic[] => {\n const diagnostics: ProjectDiagnostic[] = [];\n for (const raw of output.split(/\\r?\\n/)) {\n const match = DIAGNOSTIC_LINE.exec(raw);\n if (match === null) continue;\n const [, filePart, line, column, code, message] = match;\n if (filePart === undefined || line === undefined || column === undefined || code === undefined) continue;\n const file = resolve(projectDir, filePart);\n const rel = relative(projectDir, file);\n if (rel.startsWith(\"..\") || isAbsolute(rel) || rel.split(/[/\\\\]/).includes(\"node_modules\")) continue;\n diagnostics.push({ file, line, column, code, message: (message ?? \"\").trim() });\n }\n return diagnostics;\n};\n\nconst formatDiagnostics = (label: string, projectDir: string, diagnostics: ProjectDiagnostic[]): string => {\n const messages = diagnostics.map(\n (diagnostic) =>\n `${relative(projectDir, diagnostic.file)}:${diagnostic.line}:${diagnostic.column} - ${diagnostic.message} (TS${diagnostic.code})`,\n );\n return `Type checking ${label} found ${diagnostics.length} error(s):\\n${messages.join(\"\\n\")}`;\n};\n\nexport const compileProject = (params: CompileProjectParams): void => {\n const tsconfigPath = join(params.projectDir, \"tsconfig.json\");\n const unlinkToolingModules = linkToolingModules(params.projectDir);\n try {\n writeFileSync(\n tsconfigPath,\n JSON.stringify({\n compilerOptions: {\n ...BASE_COMPILER_OPTIONS,\n ...params.compilerOptions,\n ...(params.paths === undefined ? {} : { paths: params.paths }),\n },\n files: params.fileNames.map((name) => `./${name}`),\n }),\n );\n const { code, output } = runTsc(tsconfigPath, params.projectDir);\n const diagnostics = parseDiagnostics(output, params.projectDir);\n if (diagnostics.length > 0) {\n throw new Error(formatDiagnostics(params.label, params.projectDir, diagnostics));\n }\n if (code !== 0) {\n throw new Error(`Type checking ${params.label} failed:\\n${output.trim()}`);\n }\n } finally {\n unlinkToolingModules();\n rmSync(tsconfigPath, { force: true });\n }\n};\n\nconst CHECK_OPTIONS = {\n declaration: true,\n isolatedDeclarations: true,\n noEmit: true,\n};\n\nexport const checkModules = (params: { modules: SourceModule[]; resolveFrom: string; label: string }): void => {\n const checkRoot = join(params.resolveFrom, \"node_modules\");\n mkdirSync(checkRoot, { recursive: true });\n const projectDir = mkdtempSync(join(checkRoot, \".gtkx-check-\"));\n try {\n for (const module of params.modules) {\n const filePath = join(projectDir, module.fileName);\n mkdirSync(dirname(filePath), { recursive: true });\n writeFileSync(filePath, module.source);\n }\n compileProject({\n projectDir,\n fileNames: params.modules.map((module) => module.fileName),\n compilerOptions: CHECK_OPTIONS,\n label: params.label,\n });\n } finally {\n rmSync(projectDir, { recursive: true, force: true });\n }\n};\n"]}
@@ -0,0 +1,66 @@
1
+ import type { ElementProp } from "@gtkx/config";
2
+ import { type GiSymbolEntry } from "./symbol-page.js";
3
+ export type ApiReferenceOptions = {
4
+ libraries: string[];
5
+ girPath: string[];
6
+ elementProps?: Record<string, ElementProp[]>;
7
+ };
8
+ export type ApiSymbolKind = GiSymbolEntry["kind"] | "element";
9
+ export declare const API_SYMBOL_KINDS: ApiSymbolKind[];
10
+ export type ApiSymbol = {
11
+ namespace: string;
12
+ name: string;
13
+ kind: ApiSymbolKind;
14
+ summary: string;
15
+ };
16
+ export type ApiNamespaceSummary = {
17
+ name: string;
18
+ importPath: string;
19
+ symbols: number;
20
+ elements: number;
21
+ };
22
+ export type ApiLookupResult = {
23
+ outcome: "page";
24
+ symbol: ApiSymbol;
25
+ markdown: string;
26
+ } | {
27
+ outcome: "ambiguous";
28
+ candidates: ApiSymbol[];
29
+ } | {
30
+ outcome: "notFound";
31
+ };
32
+ export type ApiSearchOptions = {
33
+ query: string;
34
+ namespace?: string;
35
+ kinds?: ApiSymbolKind[];
36
+ limit?: number;
37
+ };
38
+ declare class ApiReference {
39
+ private library;
40
+ private libraries;
41
+ private elementContext;
42
+ private entries;
43
+ private byQualified;
44
+ private byName;
45
+ private byNamespace;
46
+ private elementsByClass;
47
+ constructor(options: ApiReferenceOptions);
48
+ get girFiles(): string[];
49
+ private add;
50
+ private buildIndex;
51
+ private indexNamespace;
52
+ private indexFunctions;
53
+ private toApiSymbol;
54
+ private symbolPageOptions;
55
+ private renderPage;
56
+ private findNamespace;
57
+ lookup(query: string, kind?: ApiSymbolKind): ApiLookupResult;
58
+ search(options: ApiSearchOptions): ApiSymbol[];
59
+ namespaces(): ApiNamespaceSummary[];
60
+ symbolNames(namespaceName: string): string[];
61
+ overview(): string;
62
+ namespaceOverview(name: string): string | undefined;
63
+ }
64
+ export type { ApiReference };
65
+ export declare const loadApiReference: (options: ApiReferenceOptions) => ApiReference;
66
+ //# sourceMappingURL=api-reference.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-reference.d.ts","sourceRoot":"","sources":["../../src/docs/api-reference.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAUhD,OAAO,EAAE,KAAK,aAAa,EAA4C,MAAM,kBAAkB,CAAC;AAEhG,MAAM,MAAM,mBAAmB,GAAG;IAC9B,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC;CAChD,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,aAAa,CAAC,MAAM,CAAC,GAAG,SAAS,CAAC;AAE9D,eAAO,MAAM,gBAAgB,EAAE,aAAa,EAU3C,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,aAAa,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,eAAe,GACrB;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,SAAS,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GACxD;IAAE,OAAO,EAAE,WAAW,CAAC;IAAC,UAAU,EAAE,SAAS,EAAE,CAAA;CAAE,GACjD;IAAE,OAAO,EAAE,UAAU,CAAA;CAAE,CAAC;AAE9B,MAAM,MAAM,gBAAgB,GAAG;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,aAAa,EAAE,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AA4BF,cAAM,YAAY;IACd,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,SAAS,CAAW;IAC5B,OAAO,CAAC,cAAc,CAAqB;IAC3C,OAAO,CAAC,OAAO,CAAqB;IACpC,OAAO,CAAC,WAAW,CAAoC;IACvD,OAAO,CAAC,MAAM,CAAoC;IAClD,OAAO,CAAC,WAAW,CAAoC;IACvD,OAAO,CAAC,eAAe,CAA6B;IAEpD,YAAY,OAAO,EAAE,mBAAmB,EAKvC;IAED,IAAI,QAAQ,IAAI,MAAM,EAAE,CAEvB;IAED,OAAO,CAAC,GAAG;IAYX,OAAO,CAAC,UAAU;IAgBlB,OAAO,CAAC,cAAc;IAYtB,OAAO,CAAC,cAAc;IAYtB,OAAO,CAAC,WAAW;IASnB,OAAO,CAAC,iBAAiB;IAOzB,OAAO,CAAC,UAAU;IAKlB,OAAO,CAAC,aAAa;IAQrB,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,aAAa,GAAG,eAAe,CAmB3D;IAED,MAAM,CAAC,OAAO,EAAE,gBAAgB,GAAG,SAAS,EAAE,CAsB7C;IAED,UAAU,IAAI,mBAAmB,EAAE,CAQlC;IAED,WAAW,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,EAAE,CAK3C;IAED,QAAQ,IAAI,MAAM,CAiBjB;IAED,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAwBlD;CACJ;AAED,YAAY,EAAE,YAAY,EAAE,CAAC;AAE7B,eAAO,MAAM,gBAAgB,YAAa,mBAAmB,KAAG,YAAyC,CAAC"}
@@ -0,0 +1,299 @@
1
+ import { sortStrings, sortStringsBy, toPascalCase } from "@gtkx/utils";
2
+ import { Library } from "../gir/library.js";
3
+ import { namespaceDirectory } from "../gir/namespace.js";
4
+ import { dedupeCallables, isEmittableCallable } from "../store/gi/callables.js";
5
+ import { isClassStructRecord } from "../store/gi/class-struct-record.js";
6
+ import { namespaceFunctionExportName } from "../store/gi/function.js";
7
+ import { collectIntrinsicElementClasses } from "../store/react/intrinsic-elements.js";
8
+ import { createElementPageContext, renderElementPage } from "./element-page.js";
9
+ import { docsSignatureContext, firstSentence, namespaceOrder } from "./render.js";
10
+ import { renderSymbolPage } from "./symbol-page.js";
11
+ export const API_SYMBOL_KINDS = [
12
+ "element",
13
+ "class",
14
+ "interface",
15
+ "record",
16
+ "enum",
17
+ "callback",
18
+ "alias",
19
+ "function",
20
+ "constant",
21
+ ];
22
+ const KIND_SECTION_TITLES = {
23
+ element: "JSX elements",
24
+ class: "Classes",
25
+ interface: "Interfaces",
26
+ record: "Records",
27
+ enum: "Enums",
28
+ callback: "Callbacks",
29
+ alias: "Aliases",
30
+ function: "Functions",
31
+ constant: "Constants",
32
+ };
33
+ const DEFAULT_SEARCH_LIMIT = 20;
34
+ const compareNames = (a, b) => (a < b ? -1 : a > b ? 1 : 0);
35
+ class ApiReference {
36
+ library;
37
+ libraries;
38
+ elementContext;
39
+ entries = [];
40
+ byQualified = new Map();
41
+ byName = new Map();
42
+ byNamespace = new Map();
43
+ elementsByClass = new Map();
44
+ constructor(options) {
45
+ this.libraries = options.libraries;
46
+ this.library = Library.load(options.libraries, options.girPath);
47
+ this.elementContext = createElementPageContext(this.library, options.elementProps ?? {}, () => undefined);
48
+ this.buildIndex();
49
+ }
50
+ get girFiles() {
51
+ return this.library.girFiles;
52
+ }
53
+ add(entry) {
54
+ this.entries.push(entry);
55
+ const push = (map, key) => {
56
+ const list = map.get(key) ?? [];
57
+ list.push(entry);
58
+ map.set(key, list);
59
+ };
60
+ push(this.byQualified, `${entry.namespace.name}.${entry.name}`.toLowerCase());
61
+ push(this.byName, entry.name.toLowerCase());
62
+ push(this.byNamespace, entry.namespace.name);
63
+ }
64
+ buildIndex() {
65
+ for (const namespace of this.library.namespaces.values()) {
66
+ this.indexNamespace(namespace);
67
+ }
68
+ for (const element of collectIntrinsicElementClasses(this.library)) {
69
+ this.add({
70
+ kind: "element",
71
+ namespace: element.namespace,
72
+ name: element.glibName,
73
+ doc: element.klass.doc,
74
+ element,
75
+ });
76
+ this.elementsByClass.set(`${element.namespace.name}.${element.klass.name}`, element.glibName);
77
+ }
78
+ }
79
+ indexNamespace(namespace) {
80
+ const entries = [
81
+ ...classEntries(namespace),
82
+ ...recordEntries(this.library, namespace),
83
+ ...valueEntries(namespace),
84
+ ];
85
+ for (const entry of entries) {
86
+ this.add(entry);
87
+ }
88
+ this.indexFunctions(namespace);
89
+ }
90
+ indexFunctions(namespace) {
91
+ if (namespace.sharedLibrary === undefined)
92
+ return;
93
+ const docsContext = docsSignatureContext(namespace, this.library);
94
+ for (const fn of dedupeCallables(namespace.functions)) {
95
+ if (!isEmittableCallable(docsContext, fn))
96
+ continue;
97
+ const cIdentifier = fn.cIdentifier;
98
+ if (cIdentifier === undefined)
99
+ continue;
100
+ const name = namespaceFunctionExportName(cIdentifier, fn.name, namespace.cSymbolPrefixes);
101
+ this.add({ kind: "function", namespace, name, doc: fn.doc, fn });
102
+ }
103
+ }
104
+ toApiSymbol(entry) {
105
+ return {
106
+ namespace: entry.namespace.name,
107
+ name: entry.name,
108
+ kind: entry.kind,
109
+ summary: firstSentence(entry.doc),
110
+ };
111
+ }
112
+ symbolPageOptions() {
113
+ return {
114
+ library: this.library,
115
+ elementNameFor: (namespaceName, className) => this.elementsByClass.get(`${namespaceName}.${className}`),
116
+ };
117
+ }
118
+ renderPage(entry) {
119
+ if (entry.kind === "element")
120
+ return renderElementPage(entry.element, this.elementContext);
121
+ return renderSymbolPage(entry, this.symbolPageOptions());
122
+ }
123
+ findNamespace(name) {
124
+ const lower = name.toLowerCase();
125
+ for (const namespace of this.library.namespaces.values()) {
126
+ if (namespace.name.toLowerCase() === lower)
127
+ return namespace;
128
+ }
129
+ return undefined;
130
+ }
131
+ lookup(query, kind) {
132
+ const trimmed = query.trim();
133
+ if (trimmed.length === 0)
134
+ return { outcome: "notFound" };
135
+ const qualified = trimmed.includes(".");
136
+ const map = qualified ? this.byQualified : this.byName;
137
+ let candidates = map.get(trimmed.toLowerCase()) ?? [];
138
+ if (kind !== undefined)
139
+ candidates = candidates.filter((entry) => entry.kind === kind);
140
+ if (candidates.length > 1) {
141
+ const exact = candidates.filter((entry) => qualified ? `${entry.namespace.name}.${entry.name}` === trimmed : entry.name === trimmed);
142
+ if (exact.length > 0)
143
+ candidates = exact;
144
+ }
145
+ const entry = candidates[0];
146
+ if (entry === undefined)
147
+ return { outcome: "notFound" };
148
+ if (candidates.length > 1) {
149
+ return { outcome: "ambiguous", candidates: candidates.map((candidate) => this.toApiSymbol(candidate)) };
150
+ }
151
+ return { outcome: "page", symbol: this.toApiSymbol(entry), markdown: this.renderPage(entry) };
152
+ }
153
+ search(options) {
154
+ const query = options.query.trim().toLowerCase();
155
+ if (query.length === 0)
156
+ return [];
157
+ const limit = Math.max(1, Math.floor(options.limit ?? DEFAULT_SEARCH_LIMIT));
158
+ const namespaceFilter = options.namespace?.toLowerCase();
159
+ const scored = [];
160
+ for (const entry of this.entries) {
161
+ if (namespaceFilter !== undefined && entry.namespace.name.toLowerCase() !== namespaceFilter)
162
+ continue;
163
+ if (options.kinds !== undefined && !options.kinds.includes(entry.kind))
164
+ continue;
165
+ const score = searchScore(entry, query);
166
+ if (score === 0)
167
+ continue;
168
+ scored.push({ score, entry });
169
+ }
170
+ scored.sort((a, b) => b.score - a.score ||
171
+ a.entry.name.length - b.entry.name.length ||
172
+ compareNames(a.entry.name, b.entry.name) ||
173
+ compareNames(namespaceOrder(a.entry.namespace.name), namespaceOrder(b.entry.namespace.name)) ||
174
+ compareNames(a.entry.kind, b.entry.kind));
175
+ return scored.slice(0, limit).map((item) => this.toApiSymbol(item.entry));
176
+ }
177
+ namespaces() {
178
+ const summaries = [...this.byNamespace.entries()].map(([name, entries]) => ({
179
+ name,
180
+ importPath: `@gtkx/gi/${namespaceDirectory({ name })}`,
181
+ symbols: entries.filter((entry) => entry.kind !== "element").length,
182
+ elements: entries.filter((entry) => entry.kind === "element").length,
183
+ }));
184
+ return sortStringsBy(summaries, (summary) => namespaceOrder(summary.name));
185
+ }
186
+ symbolNames(namespaceName) {
187
+ const namespace = this.findNamespace(namespaceName);
188
+ if (namespace === undefined)
189
+ return [];
190
+ const entries = this.byNamespace.get(namespace.name) ?? [];
191
+ return sortStrings(entries.map((entry) => entry.name));
192
+ }
193
+ overview() {
194
+ const rows = this.namespaces().map((summary) => `| ${summary.name} | \`${summary.importPath}\` | ${summary.symbols} | ${summary.elements} |`);
195
+ const librariesList = this.libraries.map((library) => `\`${library}\``).join(", ");
196
+ return [
197
+ "# API Reference",
198
+ "",
199
+ `Generated bindings for ${librariesList} and the namespaces they pull in. Classes, interfaces, records, enums, callbacks, aliases, functions, and constants are imported from \`@gtkx/gi/<namespace>\`; JSX elements are imported from \`@gtkx/jsx/<namespace>\`.`,
200
+ "",
201
+ "Every symbol has a reference page addressed by its qualified name (for example `Gtk.Button`, `Gtk.Orientation`, `GLib.idleAdd`) and every JSX element by its element name (for example `GtkButton`).",
202
+ "",
203
+ "| Namespace | Import | Symbols | JSX elements |",
204
+ "| --- | --- | --- | --- |",
205
+ ...rows,
206
+ "",
207
+ ].join("\n");
208
+ }
209
+ namespaceOverview(name) {
210
+ const namespace = this.findNamespace(name);
211
+ if (namespace === undefined)
212
+ return undefined;
213
+ const entries = this.byNamespace.get(namespace.name) ?? [];
214
+ const directory = namespaceDirectory(namespace);
215
+ const lines = [
216
+ `# ${namespace.name}`,
217
+ "",
218
+ `\`\`\`ts\nimport * as ${namespace.name} from "@gtkx/gi/${directory}";\n\`\`\``,
219
+ ];
220
+ for (const kind of API_SYMBOL_KINDS) {
221
+ const names = entries.filter((entry) => entry.kind === kind).map((entry) => entry.name);
222
+ if (names.length === 0)
223
+ continue;
224
+ lines.push("", `## ${KIND_SECTION_TITLES[kind]} (${names.length})`, "", sortStrings(names)
225
+ .map((symbolName) => `\`${symbolName}\``)
226
+ .join(", "));
227
+ }
228
+ lines.push("");
229
+ return lines.join("\n");
230
+ }
231
+ }
232
+ export const loadApiReference = (options) => new ApiReference(options);
233
+ const classEntries = (namespace) => {
234
+ const entries = [];
235
+ for (const klass of [...namespace.classes, ...namespace.interfaces]) {
236
+ if (!klass.introspectable || klass.name.length === 0)
237
+ continue;
238
+ const kind = klass.isInterface ? "interface" : "class";
239
+ entries.push({ kind, namespace, name: toPascalCase(klass.name), doc: klass.doc, klass });
240
+ }
241
+ return entries;
242
+ };
243
+ const recordEntries = (library, namespace) => {
244
+ const entries = [];
245
+ for (const record of namespace.records) {
246
+ if (!record.introspectable || record.isVtable || record.name.length === 0)
247
+ continue;
248
+ if (isClassStructRecord(library, namespace.name, record))
249
+ continue;
250
+ entries.push({ kind: "record", namespace, name: record.name, doc: record.doc, record });
251
+ }
252
+ return entries;
253
+ };
254
+ const valueEntries = (namespace) => [
255
+ ...namespace.enums
256
+ .filter((enumeration) => enumeration.introspectable)
257
+ .map((enumeration) => ({
258
+ kind: "enum",
259
+ namespace,
260
+ name: enumeration.name,
261
+ doc: enumeration.doc,
262
+ enumeration,
263
+ })),
264
+ ...namespace.callbacks
265
+ .filter((callback) => callback.introspectable)
266
+ .map((callback) => ({
267
+ kind: "callback",
268
+ namespace,
269
+ name: callback.name,
270
+ doc: callback.doc,
271
+ callback,
272
+ })),
273
+ ...namespace.aliases.map((alias) => ({
274
+ kind: "alias",
275
+ namespace,
276
+ name: alias.name,
277
+ doc: alias.doc,
278
+ alias,
279
+ })),
280
+ ...namespace.constants.map((constant) => ({
281
+ kind: "constant",
282
+ namespace,
283
+ name: constant.name,
284
+ doc: constant.doc,
285
+ constant,
286
+ })),
287
+ ];
288
+ const searchScore = (entry, query) => {
289
+ const name = entry.name.toLowerCase();
290
+ const qualified = `${entry.namespace.name.toLowerCase()}.${name}`;
291
+ if (name === query || qualified === query)
292
+ return 3;
293
+ if (name.startsWith(query))
294
+ return 2;
295
+ if (name.includes(query) || qualified.includes(query))
296
+ return 1;
297
+ return 0;
298
+ };
299
+ //# sourceMappingURL=api-reference.js.map