@gtkx/codegen 1.0.0-rc.4 → 1.1.0

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 (523) hide show
  1. package/README.md +5 -5
  2. package/dist/analysis/descriptor-render.d.ts +13 -9
  3. package/dist/analysis/descriptor-render.d.ts.map +1 -1
  4. package/dist/analysis/descriptor-render.js +80 -50
  5. package/dist/analysis/descriptor-render.js.map +1 -1
  6. package/dist/analysis/descriptor.d.ts +16 -7
  7. package/dist/analysis/descriptor.d.ts.map +1 -1
  8. package/dist/analysis/descriptor.js +15 -3
  9. package/dist/analysis/descriptor.js.map +1 -1
  10. package/dist/analysis/inheritance.d.ts +4 -3
  11. package/dist/analysis/inheritance.d.ts.map +1 -1
  12. package/dist/analysis/inheritance.js +103 -58
  13. package/dist/analysis/inheritance.js.map +1 -1
  14. package/dist/analysis/interface-conflicts.d.ts +23 -0
  15. package/dist/analysis/interface-conflicts.d.ts.map +1 -0
  16. package/dist/analysis/interface-conflicts.js +144 -0
  17. package/dist/analysis/interface-conflicts.js.map +1 -0
  18. package/dist/analysis/nul-terminated-bytes.d.ts +5 -0
  19. package/dist/analysis/nul-terminated-bytes.d.ts.map +1 -0
  20. package/dist/analysis/nul-terminated-bytes.js +18 -0
  21. package/dist/analysis/nul-terminated-bytes.js.map +1 -0
  22. package/dist/analysis/param-capability.d.ts +5 -0
  23. package/dist/analysis/param-capability.d.ts.map +1 -0
  24. package/dist/analysis/param-capability.js +129 -0
  25. package/dist/analysis/param-capability.js.map +1 -0
  26. package/dist/analysis/param-structure.d.ts +11 -4
  27. package/dist/analysis/param-structure.d.ts.map +1 -1
  28. package/dist/analysis/param-structure.js +42 -16
  29. package/dist/analysis/param-structure.js.map +1 -1
  30. package/dist/analysis/ts-type.d.ts.map +1 -1
  31. package/dist/analysis/ts-type.js +10 -17
  32. package/dist/analysis/ts-type.js.map +1 -1
  33. package/dist/analysis/type-key.d.ts +5 -0
  34. package/dist/analysis/type-key.d.ts.map +1 -0
  35. package/dist/analysis/type-key.js +9 -0
  36. package/dist/analysis/type-key.js.map +1 -0
  37. package/dist/analysis/type-shape.d.ts +8 -0
  38. package/dist/analysis/type-shape.d.ts.map +1 -0
  39. package/dist/analysis/type-shape.js +12 -0
  40. package/dist/analysis/type-shape.js.map +1 -0
  41. package/dist/compile.d.ts +12 -3
  42. package/dist/compile.d.ts.map +1 -1
  43. package/dist/compile.js +73 -24
  44. package/dist/compile.js.map +1 -1
  45. package/dist/docs/api-reference.d.ts +2 -2
  46. package/dist/docs/api-reference.d.ts.map +1 -1
  47. package/dist/docs/api-reference.js +17 -23
  48. package/dist/docs/api-reference.js.map +1 -1
  49. package/dist/docs/element-page.d.ts +4 -4
  50. package/dist/docs/element-page.d.ts.map +1 -1
  51. package/dist/docs/element-page.js +36 -22
  52. package/dist/docs/element-page.js.map +1 -1
  53. package/dist/docs/handwritten-props.d.ts +9 -0
  54. package/dist/docs/handwritten-props.d.ts.map +1 -0
  55. package/dist/docs/handwritten-props.js +149 -0
  56. package/dist/docs/handwritten-props.js.map +1 -0
  57. package/dist/docs/pipeline.d.ts.map +1 -1
  58. package/dist/docs/pipeline.js +87 -20
  59. package/dist/docs/pipeline.js.map +1 -1
  60. package/dist/docs/render.d.ts +26 -5
  61. package/dist/docs/render.d.ts.map +1 -1
  62. package/dist/docs/render.js +88 -25
  63. package/dist/docs/render.js.map +1 -1
  64. package/dist/docs/symbol-page.d.ts +17 -0
  65. package/dist/docs/symbol-page.d.ts.map +1 -1
  66. package/dist/docs/symbol-page.js +132 -44
  67. package/dist/docs/symbol-page.js.map +1 -1
  68. package/dist/fingerprint.d.ts +12 -1
  69. package/dist/fingerprint.d.ts.map +1 -1
  70. package/dist/fingerprint.js +44 -28
  71. package/dist/fingerprint.js.map +1 -1
  72. package/dist/gi.d.ts.map +1 -1
  73. package/dist/gi.js +1 -0
  74. package/dist/gi.js.map +1 -1
  75. package/dist/gir/ancestry.d.ts +8 -2
  76. package/dist/gir/ancestry.d.ts.map +1 -1
  77. package/dist/gir/ancestry.js +19 -1
  78. package/dist/gir/ancestry.js.map +1 -1
  79. package/dist/gir/annotations.d.ts +21 -0
  80. package/dist/gir/annotations.d.ts.map +1 -0
  81. package/dist/gir/annotations.js +15 -0
  82. package/dist/gir/annotations.js.map +1 -0
  83. package/dist/gir/callback.d.ts +1 -0
  84. package/dist/gir/callback.d.ts.map +1 -1
  85. package/dist/gir/callback.js +1 -0
  86. package/dist/gir/callback.js.map +1 -1
  87. package/dist/gir/class.d.ts +32 -1
  88. package/dist/gir/class.d.ts.map +1 -1
  89. package/dist/gir/class.js +8 -3
  90. package/dist/gir/class.js.map +1 -1
  91. package/dist/gir/cursor-overrides.d.ts +8 -0
  92. package/dist/gir/cursor-overrides.d.ts.map +1 -0
  93. package/dist/gir/cursor-overrides.js +6 -0
  94. package/dist/gir/cursor-overrides.js.map +1 -0
  95. package/dist/gir/emittable.d.ts +7 -0
  96. package/dist/gir/emittable.d.ts.map +1 -0
  97. package/dist/gir/emittable.js +3 -0
  98. package/dist/gir/emittable.js.map +1 -0
  99. package/dist/gir/enum.d.ts +21 -1
  100. package/dist/gir/enum.d.ts.map +1 -1
  101. package/dist/gir/enum.js +9 -9
  102. package/dist/gir/enum.js.map +1 -1
  103. package/dist/gir/field.d.ts +19 -3
  104. package/dist/gir/field.d.ts.map +1 -1
  105. package/dist/gir/field.js +7 -8
  106. package/dist/gir/field.js.map +1 -1
  107. package/dist/gir/function.d.ts +15 -0
  108. package/dist/gir/function.d.ts.map +1 -1
  109. package/dist/gir/function.js +28 -2
  110. package/dist/gir/function.js.map +1 -1
  111. package/dist/gir/libraries.d.ts +1 -3
  112. package/dist/gir/libraries.d.ts.map +1 -1
  113. package/dist/gir/libraries.js +0 -1
  114. package/dist/gir/libraries.js.map +1 -1
  115. package/dist/gir/library.d.ts +36 -0
  116. package/dist/gir/library.d.ts.map +1 -1
  117. package/dist/gir/library.js +35 -1
  118. package/dist/gir/library.js.map +1 -1
  119. package/dist/gir/namespace.d.ts +43 -1
  120. package/dist/gir/namespace.d.ts.map +1 -1
  121. package/dist/gir/namespace.js +8 -7
  122. package/dist/gir/namespace.js.map +1 -1
  123. package/dist/gir/parameter.d.ts +52 -1
  124. package/dist/gir/parameter.d.ts.map +1 -1
  125. package/dist/gir/parameter.js +8 -3
  126. package/dist/gir/parameter.js.map +1 -1
  127. package/dist/gir/parse.d.ts +3 -1
  128. package/dist/gir/parse.d.ts.map +1 -1
  129. package/dist/gir/parse.js +9 -9
  130. package/dist/gir/parse.js.map +1 -1
  131. package/dist/gir/primitives.d.ts +1 -0
  132. package/dist/gir/primitives.d.ts.map +1 -1
  133. package/dist/gir/primitives.js.map +1 -1
  134. package/dist/gir/property.d.ts +16 -0
  135. package/dist/gir/property.d.ts.map +1 -1
  136. package/dist/gir/property.js +3 -3
  137. package/dist/gir/property.js.map +1 -1
  138. package/dist/gir/record.d.ts +22 -0
  139. package/dist/gir/record.d.ts.map +1 -1
  140. package/dist/gir/record.js +3 -2
  141. package/dist/gir/record.js.map +1 -1
  142. package/dist/gir/size.d.ts +5 -4
  143. package/dist/gir/size.d.ts.map +1 -1
  144. package/dist/gir/size.js.map +1 -1
  145. package/dist/gir/type-id.d.ts +35 -0
  146. package/dist/gir/type-id.d.ts.map +1 -1
  147. package/dist/gir/type-id.js +1 -0
  148. package/dist/gir/type-id.js.map +1 -1
  149. package/dist/gir/type-ref.d.ts.map +1 -1
  150. package/dist/gir/type-ref.js +1 -0
  151. package/dist/gir/type-ref.js.map +1 -1
  152. package/dist/gir/type.d.ts +20 -0
  153. package/dist/gir/type.d.ts.map +1 -1
  154. package/dist/gir/type.js.map +1 -1
  155. package/dist/guards.d.ts +16 -0
  156. package/dist/guards.d.ts.map +1 -0
  157. package/dist/guards.js +11 -0
  158. package/dist/guards.js.map +1 -0
  159. package/dist/internal.d.ts +2 -0
  160. package/dist/internal.d.ts.map +1 -1
  161. package/dist/internal.js +2 -0
  162. package/dist/internal.js.map +1 -1
  163. package/dist/json.d.ts +3 -0
  164. package/dist/json.d.ts.map +1 -0
  165. package/dist/json.js +11 -0
  166. package/dist/json.js.map +1 -0
  167. package/dist/khronos/args.d.ts +7 -6
  168. package/dist/khronos/args.d.ts.map +1 -1
  169. package/dist/khronos/args.js +28 -6
  170. package/dist/khronos/args.js.map +1 -1
  171. package/dist/khronos/doc-context.d.ts +29 -0
  172. package/dist/khronos/doc-context.d.ts.map +1 -0
  173. package/dist/khronos/doc-context.js +29 -0
  174. package/dist/khronos/doc-context.js.map +1 -0
  175. package/dist/khronos/extensions.d.ts +13 -0
  176. package/dist/khronos/extensions.d.ts.map +1 -0
  177. package/dist/khronos/extensions.js +49 -0
  178. package/dist/khronos/extensions.js.map +1 -0
  179. package/dist/khronos/jsdoc.d.ts +17 -11
  180. package/dist/khronos/jsdoc.d.ts.map +1 -1
  181. package/dist/khronos/jsdoc.js +104 -46
  182. package/dist/khronos/jsdoc.js.map +1 -1
  183. package/dist/khronos/model.d.ts +42 -3
  184. package/dist/khronos/model.d.ts.map +1 -1
  185. package/dist/khronos/model.js +218 -63
  186. package/dist/khronos/model.js.map +1 -1
  187. package/dist/khronos/modules.d.ts +9 -6
  188. package/dist/khronos/modules.d.ts.map +1 -1
  189. package/dist/khronos/modules.js +112 -27
  190. package/dist/khronos/modules.js.map +1 -1
  191. package/dist/khronos/notes.d.ts +19 -0
  192. package/dist/khronos/notes.d.ts.map +1 -0
  193. package/dist/khronos/notes.js +35 -0
  194. package/dist/khronos/notes.js.map +1 -0
  195. package/dist/khronos/param-pair.d.ts +1 -1
  196. package/dist/khronos/param-pair.d.ts.map +1 -1
  197. package/dist/khronos/param-pair.js.map +1 -1
  198. package/dist/khronos/parse.d.ts.map +1 -1
  199. package/dist/khronos/parse.js +3 -4
  200. package/dist/khronos/parse.js.map +1 -1
  201. package/dist/khronos/pipeline.d.ts +4 -2
  202. package/dist/khronos/pipeline.d.ts.map +1 -1
  203. package/dist/khronos/pipeline.js +58 -27
  204. package/dist/khronos/pipeline.js.map +1 -1
  205. package/dist/khronos/plan.d.ts +3 -9
  206. package/dist/khronos/plan.d.ts.map +1 -1
  207. package/dist/khronos/plan.js +3 -3
  208. package/dist/khronos/plan.js.map +1 -1
  209. package/dist/khronos/render.d.ts +8 -6
  210. package/dist/khronos/render.d.ts.map +1 -1
  211. package/dist/khronos/render.js +35 -26
  212. package/dist/khronos/render.js.map +1 -1
  213. package/dist/khronos/select.d.ts +21 -4
  214. package/dist/khronos/select.d.ts.map +1 -1
  215. package/dist/khronos/select.js +47 -34
  216. package/dist/khronos/select.js.map +1 -1
  217. package/dist/react/element-config.d.ts +2 -2
  218. package/dist/react/element-config.d.ts.map +1 -1
  219. package/dist/react/element-config.js.map +1 -1
  220. package/dist/runner.d.ts +6 -8
  221. package/dist/runner.d.ts.map +1 -1
  222. package/dist/runner.js +16 -0
  223. package/dist/runner.js.map +1 -1
  224. package/dist/staging.d.ts +5 -0
  225. package/dist/staging.d.ts.map +1 -0
  226. package/dist/staging.js +57 -0
  227. package/dist/staging.js.map +1 -0
  228. package/dist/store/compile-store.d.ts +1 -1
  229. package/dist/store/compile-store.d.ts.map +1 -1
  230. package/dist/store/compile-store.js +4 -2
  231. package/dist/store/compile-store.js.map +1 -1
  232. package/dist/store/gi/callable-doc.d.ts +11 -0
  233. package/dist/store/gi/callable-doc.d.ts.map +1 -0
  234. package/dist/store/gi/callable-doc.js +62 -0
  235. package/dist/store/gi/callable-doc.js.map +1 -0
  236. package/dist/store/gi/callables.d.ts +9 -2
  237. package/dist/store/gi/callables.d.ts.map +1 -1
  238. package/dist/store/gi/callables.js +35 -40
  239. package/dist/store/gi/callables.js.map +1 -1
  240. package/dist/store/gi/callback.d.ts.map +1 -1
  241. package/dist/store/gi/callback.js +10 -6
  242. package/dist/store/gi/callback.js.map +1 -1
  243. package/dist/store/gi/class.d.ts.map +1 -1
  244. package/dist/store/gi/class.js +63 -40
  245. package/dist/store/gi/class.js.map +1 -1
  246. package/dist/store/gi/closure-invocation.d.ts +4 -0
  247. package/dist/store/gi/closure-invocation.d.ts.map +1 -0
  248. package/dist/store/gi/closure-invocation.js +22 -0
  249. package/dist/store/gi/closure-invocation.js.map +1 -0
  250. package/dist/store/gi/companion.d.ts.map +1 -1
  251. package/dist/store/gi/companion.js +6 -6
  252. package/dist/store/gi/companion.js.map +1 -1
  253. package/dist/store/gi/constant.d.ts.map +1 -1
  254. package/dist/store/gi/constant.js +12 -3
  255. package/dist/store/gi/constant.js.map +1 -1
  256. package/dist/store/gi/constructor-props.d.ts.map +1 -1
  257. package/dist/store/gi/constructor-props.js +18 -20
  258. package/dist/store/gi/constructor-props.js.map +1 -1
  259. package/dist/store/gi/doc-spec.d.ts +14 -0
  260. package/dist/store/gi/doc-spec.d.ts.map +1 -0
  261. package/dist/store/gi/doc-spec.js +23 -0
  262. package/dist/store/gi/doc-spec.js.map +1 -0
  263. package/dist/store/gi/enum.d.ts.map +1 -1
  264. package/dist/store/gi/enum.js +52 -19
  265. package/dist/store/gi/enum.js.map +1 -1
  266. package/dist/store/gi/function.d.ts +1 -3
  267. package/dist/store/gi/function.d.ts.map +1 -1
  268. package/dist/store/gi/function.js +50 -29
  269. package/dist/store/gi/function.js.map +1 -1
  270. package/dist/store/gi/gtype-binding.d.ts.map +1 -1
  271. package/dist/store/gi/gtype-binding.js +4 -1
  272. package/dist/store/gi/gtype-binding.js.map +1 -1
  273. package/dist/store/gi/interface.d.ts.map +1 -1
  274. package/dist/store/gi/interface.js +155 -26
  275. package/dist/store/gi/interface.js.map +1 -1
  276. package/dist/store/gi/item-comparators.d.ts.map +1 -1
  277. package/dist/store/gi/item-comparators.js +3 -5
  278. package/dist/store/gi/item-comparators.js.map +1 -1
  279. package/dist/store/gi/method.d.ts +11 -2
  280. package/dist/store/gi/method.d.ts.map +1 -1
  281. package/dist/store/gi/method.js +80 -45
  282. package/dist/store/gi/method.js.map +1 -1
  283. package/dist/store/gi/param-marshal.d.ts +6 -2
  284. package/dist/store/gi/param-marshal.d.ts.map +1 -1
  285. package/dist/store/gi/param-marshal.js +54 -5
  286. package/dist/store/gi/param-marshal.js.map +1 -1
  287. package/dist/store/gi/pipeline.d.ts.map +1 -1
  288. package/dist/store/gi/pipeline.js +23 -11
  289. package/dist/store/gi/pipeline.js.map +1 -1
  290. package/dist/store/gi/properties.d.ts +2 -1
  291. package/dist/store/gi/properties.d.ts.map +1 -1
  292. package/dist/store/gi/properties.js +7 -4
  293. package/dist/store/gi/properties.js.map +1 -1
  294. package/dist/store/gi/property-accessor.d.ts +12 -5
  295. package/dist/store/gi/property-accessor.d.ts.map +1 -1
  296. package/dist/store/gi/property-accessor.js +98 -46
  297. package/dist/store/gi/property-accessor.js.map +1 -1
  298. package/dist/store/gi/record-constructor.d.ts +8 -1
  299. package/dist/store/gi/record-constructor.d.ts.map +1 -1
  300. package/dist/store/gi/record-constructor.js +34 -11
  301. package/dist/store/gi/record-constructor.js.map +1 -1
  302. package/dist/store/gi/record-field-accessor.d.ts +3 -1
  303. package/dist/store/gi/record-field-accessor.d.ts.map +1 -1
  304. package/dist/store/gi/record-field-accessor.js +8 -3
  305. package/dist/store/gi/record-field-accessor.js.map +1 -1
  306. package/dist/store/gi/record-layout.d.ts +6 -1
  307. package/dist/store/gi/record-layout.d.ts.map +1 -1
  308. package/dist/store/gi/record-layout.js +9 -2
  309. package/dist/store/gi/record-layout.js.map +1 -1
  310. package/dist/store/gi/record.d.ts.map +1 -1
  311. package/dist/store/gi/record.js +21 -9
  312. package/dist/store/gi/record.js.map +1 -1
  313. package/dist/store/gi/registration.d.ts +1 -1
  314. package/dist/store/gi/registration.js +4 -4
  315. package/dist/store/gi/registration.js.map +1 -1
  316. package/dist/store/gi/runtime-override.d.ts +2 -1
  317. package/dist/store/gi/runtime-override.d.ts.map +1 -1
  318. package/dist/store/gi/runtime-override.js +8 -5
  319. package/dist/store/gi/runtime-override.js.map +1 -1
  320. package/dist/store/gi/signal.d.ts +2 -1
  321. package/dist/store/gi/signal.d.ts.map +1 -1
  322. package/dist/store/gi/signal.js +42 -37
  323. package/dist/store/gi/signal.js.map +1 -1
  324. package/dist/store/gi/value-marshalable.d.ts +1 -2
  325. package/dist/store/gi/value-marshalable.d.ts.map +1 -1
  326. package/dist/store/gi/value-marshalable.js +3 -2
  327. package/dist/store/gi/value-marshalable.js.map +1 -1
  328. package/dist/store/gi/vtable.d.ts +19 -1
  329. package/dist/store/gi/vtable.d.ts.map +1 -1
  330. package/dist/store/gi/vtable.js +257 -51
  331. package/dist/store/gi/vtable.js.map +1 -1
  332. package/dist/store/gi-store.d.ts +1 -0
  333. package/dist/store/gi-store.d.ts.map +1 -1
  334. package/dist/store/gi-store.js +15 -20
  335. package/dist/store/gi-store.js.map +1 -1
  336. package/dist/store/jsx/element-components.d.ts +1 -1
  337. package/dist/store/jsx/element-components.d.ts.map +1 -1
  338. package/dist/store/jsx/element-components.js +6 -4
  339. package/dist/store/jsx/element-components.js.map +1 -1
  340. package/dist/store/jsx/element-prop-imports.d.ts +1 -3
  341. package/dist/store/jsx/element-prop-imports.d.ts.map +1 -1
  342. package/dist/store/jsx/element-prop-imports.js.map +1 -1
  343. package/dist/store/jsx/element-prop-types.d.ts +3 -0
  344. package/dist/store/jsx/element-prop-types.d.ts.map +1 -1
  345. package/dist/store/jsx/element-prop-types.js +7 -1
  346. package/dist/store/jsx/element-prop-types.js.map +1 -1
  347. package/dist/store/jsx/generated-elements.d.ts +2 -1
  348. package/dist/store/jsx/generated-elements.d.ts.map +1 -1
  349. package/dist/store/jsx/generated-elements.js +13 -7
  350. package/dist/store/jsx/generated-elements.js.map +1 -1
  351. package/dist/store/jsx/intrinsic-elements.d.ts +4 -0
  352. package/dist/store/jsx/intrinsic-elements.d.ts.map +1 -1
  353. package/dist/store/jsx/intrinsic-elements.js.map +1 -1
  354. package/dist/store/jsx/jsx.d.ts.map +1 -1
  355. package/dist/store/jsx/jsx.js +10 -9
  356. package/dist/store/jsx/jsx.js.map +1 -1
  357. package/dist/store/jsx/metadata.d.ts.map +1 -1
  358. package/dist/store/jsx/metadata.js +5 -3
  359. package/dist/store/jsx/metadata.js.map +1 -1
  360. package/dist/store/jsx/pipeline.d.ts +1 -1
  361. package/dist/store/jsx/pipeline.d.ts.map +1 -1
  362. package/dist/store/jsx/pipeline.js.map +1 -1
  363. package/dist/store/jsx/props.d.ts +1 -7
  364. package/dist/store/jsx/props.d.ts.map +1 -1
  365. package/dist/store/jsx/props.js +14 -6
  366. package/dist/store/jsx/props.js.map +1 -1
  367. package/dist/store/jsx-store.d.ts.map +1 -1
  368. package/dist/store/jsx-store.js +3 -3
  369. package/dist/store/jsx-store.js.map +1 -1
  370. package/dist/store/resolve-store.d.ts +14 -3
  371. package/dist/store/resolve-store.d.ts.map +1 -1
  372. package/dist/store/resolve-store.js +98 -15
  373. package/dist/store/resolve-store.js.map +1 -1
  374. package/dist/store/store-fs.d.ts +9 -6
  375. package/dist/store/store-fs.d.ts.map +1 -1
  376. package/dist/store/store-fs.js +59 -25
  377. package/dist/store/store-fs.js.map +1 -1
  378. package/dist/store/store-links.d.ts +3 -0
  379. package/dist/store/store-links.d.ts.map +1 -0
  380. package/dist/store/store-links.js +39 -0
  381. package/dist/store/store-links.js.map +1 -0
  382. package/dist/writer/comparison-context.d.ts +4 -0
  383. package/dist/writer/comparison-context.d.ts.map +1 -0
  384. package/dist/writer/comparison-context.js +13 -0
  385. package/dist/writer/comparison-context.js.map +1 -0
  386. package/dist/writer/context.d.ts +3 -2
  387. package/dist/writer/context.d.ts.map +1 -1
  388. package/dist/writer/context.js +11 -3
  389. package/dist/writer/context.js.map +1 -1
  390. package/dist/writer/doc-tags.d.ts +21 -0
  391. package/dist/writer/doc-tags.d.ts.map +1 -0
  392. package/dist/writer/doc-tags.js +38 -0
  393. package/dist/writer/doc-tags.js.map +1 -0
  394. package/dist/writer/doc.d.ts +3 -1
  395. package/dist/writer/doc.d.ts.map +1 -1
  396. package/dist/writer/doc.js +19 -6
  397. package/dist/writer/doc.js.map +1 -1
  398. package/dist/writer/gtk-doc.d.ts +1 -1
  399. package/dist/writer/gtk-doc.d.ts.map +1 -1
  400. package/dist/writer/gtk-doc.js +64 -15
  401. package/dist/writer/gtk-doc.js.map +1 -1
  402. package/dist/writer/module.d.ts +17 -3
  403. package/dist/writer/module.d.ts.map +1 -1
  404. package/dist/writer/module.js +72 -3
  405. package/dist/writer/module.js.map +1 -1
  406. package/dist/xml.d.ts +7 -1
  407. package/dist/xml.d.ts.map +1 -1
  408. package/dist/xml.js +43 -1
  409. package/dist/xml.js.map +1 -1
  410. package/overrides/gdk/rgba.ts.ejs +26 -0
  411. package/overrides/gobject/object.ts.ejs +48 -3
  412. package/overrides/gobject/value.ts.ejs +7 -0
  413. package/overrides/graphene/structs.ts.ejs +55 -0
  414. package/package.json +15 -4
  415. package/src/analysis/descriptor-render.ts +130 -66
  416. package/src/analysis/descriptor.ts +35 -11
  417. package/src/analysis/inheritance.ts +166 -75
  418. package/src/analysis/interface-conflicts.ts +237 -0
  419. package/src/analysis/nul-terminated-bytes.ts +31 -0
  420. package/src/analysis/param-capability.ts +169 -0
  421. package/src/analysis/param-structure.ts +85 -25
  422. package/src/analysis/ts-type.ts +13 -17
  423. package/src/analysis/type-key.ts +14 -0
  424. package/src/analysis/type-shape.ts +24 -0
  425. package/src/compile.ts +110 -26
  426. package/src/docs/api-reference.ts +46 -34
  427. package/src/docs/element-page.ts +58 -49
  428. package/src/docs/handwritten-props.ts +230 -0
  429. package/src/docs/pipeline.ts +131 -21
  430. package/src/docs/render.ts +153 -35
  431. package/src/docs/symbol-page.ts +230 -80
  432. package/src/fingerprint.ts +86 -32
  433. package/src/gi.ts +1 -0
  434. package/src/gir/ancestry.ts +31 -1
  435. package/src/gir/annotations.ts +37 -0
  436. package/src/gir/callback.ts +2 -0
  437. package/src/gir/class.ts +42 -4
  438. package/src/gir/cursor-overrides.ts +12 -0
  439. package/src/gir/emittable.ts +8 -0
  440. package/src/gir/enum.ts +30 -10
  441. package/src/gir/field.ts +24 -9
  442. package/src/gir/function.ts +60 -9
  443. package/src/gir/libraries.ts +11 -3
  444. package/src/gir/library.ts +52 -3
  445. package/src/gir/namespace.ts +49 -7
  446. package/src/gir/parameter.ts +62 -3
  447. package/src/gir/parse.ts +13 -9
  448. package/src/gir/primitives.ts +1 -0
  449. package/src/gir/property.ts +18 -3
  450. package/src/gir/record.ts +24 -2
  451. package/src/gir/size.ts +8 -3
  452. package/src/gir/type-id.ts +49 -3
  453. package/src/gir/type-ref.ts +1 -0
  454. package/src/gir/type.ts +50 -6
  455. package/src/guards.ts +23 -0
  456. package/src/internal.ts +2 -0
  457. package/src/json.ts +11 -0
  458. package/src/khronos/args.ts +36 -13
  459. package/src/khronos/doc-context.ts +62 -0
  460. package/src/khronos/extensions.ts +85 -0
  461. package/src/khronos/jsdoc.ts +152 -56
  462. package/src/khronos/model.ts +314 -69
  463. package/src/khronos/modules.ts +150 -40
  464. package/src/khronos/notes.ts +74 -0
  465. package/src/khronos/param-pair.ts +1 -1
  466. package/src/khronos/parse.ts +3 -4
  467. package/src/khronos/pipeline.ts +95 -42
  468. package/src/khronos/plan.ts +4 -6
  469. package/src/khronos/render.ts +62 -50
  470. package/src/khronos/select.ts +91 -50
  471. package/src/react/element-config.ts +2 -2
  472. package/src/runner.ts +20 -9
  473. package/src/staging.ts +69 -0
  474. package/src/store/compile-store.ts +7 -5
  475. package/src/store/gi/callable-doc.ts +102 -0
  476. package/src/store/gi/callables.ts +58 -44
  477. package/src/store/gi/callback.ts +10 -9
  478. package/src/store/gi/class.ts +83 -49
  479. package/src/store/gi/closure-invocation.ts +26 -0
  480. package/src/store/gi/companion.ts +7 -6
  481. package/src/store/gi/constant.ts +14 -5
  482. package/src/store/gi/constructor-props.ts +19 -23
  483. package/src/store/gi/doc-spec.ts +38 -0
  484. package/src/store/gi/enum.ts +75 -26
  485. package/src/store/gi/function.ts +72 -44
  486. package/src/store/gi/gtype-binding.ts +7 -2
  487. package/src/store/gi/interface.ts +244 -37
  488. package/src/store/gi/item-comparators.ts +3 -5
  489. package/src/store/gi/method.ts +124 -69
  490. package/src/store/gi/param-marshal.ts +91 -6
  491. package/src/store/gi/pipeline.ts +28 -13
  492. package/src/store/gi/properties.ts +10 -5
  493. package/src/store/gi/property-accessor.ts +163 -75
  494. package/src/store/gi/record-constructor.ts +56 -19
  495. package/src/store/gi/record-field-accessor.ts +13 -4
  496. package/src/store/gi/record-layout.ts +12 -2
  497. package/src/store/gi/record.ts +24 -10
  498. package/src/store/gi/registration.ts +5 -5
  499. package/src/store/gi/runtime-override.ts +13 -6
  500. package/src/store/gi/signal.ts +54 -57
  501. package/src/store/gi/value-marshalable.ts +4 -2
  502. package/src/store/gi/vtable.ts +439 -61
  503. package/src/store/gi-store.ts +26 -31
  504. package/src/store/jsx/element-components.ts +8 -5
  505. package/src/store/jsx/element-prop-imports.ts +1 -3
  506. package/src/store/jsx/element-prop-types.ts +10 -1
  507. package/src/store/jsx/generated-elements.ts +17 -8
  508. package/src/store/jsx/intrinsic-elements.ts +4 -0
  509. package/src/store/jsx/jsx.ts +11 -9
  510. package/src/store/jsx/metadata.ts +6 -3
  511. package/src/store/jsx/pipeline.ts +1 -1
  512. package/src/store/jsx/props.ts +20 -7
  513. package/src/store/jsx-store.ts +3 -3
  514. package/src/store/resolve-store.ts +133 -18
  515. package/src/store/store-fs.ts +87 -34
  516. package/src/store/store-links.ts +49 -0
  517. package/src/writer/comparison-context.ts +18 -0
  518. package/src/writer/context.ts +14 -4
  519. package/src/writer/doc-tags.ts +70 -0
  520. package/src/writer/doc.ts +29 -6
  521. package/src/writer/gtk-doc.ts +82 -15
  522. package/src/writer/module.ts +114 -4
  523. package/src/xml.ts +61 -1
@@ -1,8 +1,11 @@
1
- import { lowerFirst, sourceStringLiteral, toCamelIdentifier } from "@gtkx/utils";
1
+ import { sourceStringLiteral, toCamelIdentifier } from "@gtkx/utils";
2
+ import type { GlDocContext } from "./doc-context.js";
2
3
  import type { CommandPlan, GlScalar, ReturnPlan } from "./plan.js";
4
+ import type { GlSymbolProvenance } from "./select.js";
3
5
  import { tBind, tInlineStruct, tRef, tString, tUint8, tVoid } from "../analysis/descriptor.js";
4
- import { type OutArg, planArgs, scalarAliasOrGroup, scalarPrefixArgs, trackInto } from "./args.js";
5
- import { commandJsDoc, inParamDocLine, singularJsDoc } from "./jsdoc.js";
6
+ import { type InArg, type OutArg, planArgs, returnPlanTsType, scalarPrefixArgs, trackInto } from "./args.js";
7
+ import { commandJsDoc, derivedJsDoc, inParamDocLine } from "./jsdoc.js";
8
+ import { commandExportName } from "./notes.js";
6
9
 
7
10
  type RenderedCommand = {
8
11
  exportName: string;
@@ -10,6 +13,12 @@ type RenderedCommand = {
10
13
  declaration: string;
11
14
  };
12
15
 
16
+ type SingularContext = {
17
+ plan: CommandPlan & { isOk: true };
18
+ provenance: GlSymbolProvenance;
19
+ docs: GlDocContext;
20
+ };
21
+
13
22
  type EmittedReturn = {
14
23
  tsType: string;
15
24
  descriptor: string;
@@ -34,9 +43,6 @@ const glBind = (name: string, argList: string, returnType: string): string =>
34
43
  returnType,
35
44
  });
36
45
 
37
- const commandExportName = (name: string): string =>
38
- toCamelIdentifier(name.startsWith("gl") ? lowerFirst(name.slice(2)) : name);
39
-
40
46
  const singularize = (plural: string): string =>
41
47
  plural.endsWith("ies") ? `${plural.slice(0, -3)}y` : plural.replace(/s$/, "");
42
48
 
@@ -48,32 +54,27 @@ const buildEmittedReturn = (
48
54
  returnGroup: string | undefined,
49
55
  usedTypes: Set<string>,
50
56
  ): EmittedReturn => {
51
- const track = trackInto(usedTypes);
57
+ const tsType = trackInto(usedTypes)(returnPlanTsType(plan, returnGroup));
58
+ const cast = (call: string): string => `${call} as ${tsType}`;
52
59
 
53
60
  switch (plan.kind) {
54
61
  case "void": {
55
- return { tsType: "void", descriptor: tVoid };
62
+ return { tsType, descriptor: tVoid };
56
63
  }
57
64
  case "scalar": {
58
- const alias = track(scalarAliasOrGroup(plan.scalar, returnGroup));
59
-
60
- return { tsType: alias, descriptor: plan.scalar.descriptor, expr: (call) => `${call} as ${alias}` };
65
+ return { tsType, descriptor: plan.scalar.descriptor, expr: cast };
61
66
  }
62
67
  case "boolean": {
63
- return { tsType: "boolean", descriptor: tUint8, expr: (call) => `(${call} as number) !== 0` };
68
+ return { tsType, descriptor: tUint8, expr: (call) => `(${call} as number) !== 0` };
64
69
  }
65
70
  case "string": {
66
- return { tsType: "string", descriptor: tString("borrowed"), expr: (call) => `${call} as string` };
71
+ return { tsType, descriptor: tString("borrowed"), expr: cast };
67
72
  }
68
73
  case "sync": {
69
- return { tsType: track("GLsync"), descriptor: tInlineStruct(), expr: (call) => `${call} as GLsync` };
74
+ return { tsType, descriptor: tInlineStruct(), expr: cast };
70
75
  }
71
76
  case "opaque-pointer": {
72
- return {
73
- tsType: track("GLpointer"),
74
- descriptor: tInlineStruct(),
75
- expr: (call) => `${call} as GLpointer`,
76
- };
77
+ return { tsType, descriptor: tInlineStruct(), expr: cast };
77
78
  }
78
79
  }
79
80
  };
@@ -117,19 +118,20 @@ const returnStatements = (call: string, returned: EmittedReturn, outs: OutArg[])
117
118
  };
118
119
 
119
120
  const renderCommand = (
120
- plan: CommandPlan & { ok: true },
121
- feature: string,
121
+ plan: CommandPlan & { isOk: true },
122
+ provenance: GlSymbolProvenance,
122
123
  usedTypes: Set<string>,
124
+ docs: GlDocContext,
123
125
  ): RenderedCommand => {
124
126
  const { command } = plan;
125
127
  const exportName = commandExportName(command.name);
126
128
  const { args, ins, outs } = planArgs(plan, usedTypes);
127
129
  const returned = buildEmittedReturn(plan.returnPlan, command.returnGroup, usedTypes);
128
130
  const signature = ins.map((arg) => `${arg.name}: ${arg.tsType}`).join(", ");
129
- const argNames = args.map((arg) => (arg.out ? arg.cellName : arg.name)).join(", ");
131
+ const argNames = args.map((arg) => (arg.isOut ? arg.cellName : arg.name)).join(", ");
130
132
  const descriptors = renderDescriptorList(args.map((arg) => arg.descriptor));
131
133
  const tsReturn = returnTsType(returned, outs);
132
- const jsDoc = commandJsDoc({ command, feature, ins, outs, returnPlan: plan.returnPlan });
134
+ const jsDoc = commandJsDoc({ plan, provenance, ins, outs, docs });
133
135
  const seeds = outs.map((out) => out.seed);
134
136
  const bindExpression = glBind(command.name, descriptors, returned.descriptor);
135
137
  const isInline = plan.params.some((paramPlan) => paramPlan.kind === "string-out");
@@ -150,15 +152,17 @@ const renderCommand = (
150
152
  };
151
153
  };
152
154
 
153
- const singularCommandJsDoc = (
154
- plan: CommandPlan & { ok: true },
155
- feature: string,
156
- summary: string,
157
- body: string[],
158
- ): string => singularJsDoc({ commandName: plan.command.name, feature, summary, body });
155
+ const singularCommandJsDoc = (context: SingularContext, summary: string, body: string[]): string =>
156
+ derivedJsDoc({
157
+ command: context.plan.command,
158
+ provenance: context.provenance,
159
+ docs: context.docs,
160
+ summary,
161
+ body,
162
+ });
159
163
 
160
164
  const genSingularScalars = (
161
- plan: CommandPlan & { ok: true },
165
+ plan: CommandPlan & { isOk: true },
162
166
  ): { countScalar: GlScalar; outScalar: GlScalar; lenParamName: string } | undefined => {
163
167
  const countPlan = plan.params.at(-2);
164
168
 
@@ -175,7 +179,7 @@ const genSingularScalars = (
175
179
  return { countScalar: countPlan.scalar, outScalar: outPlan.scalar, lenParamName: outPlan.lenParamName };
176
180
  };
177
181
 
178
- const genSingularObjectClass = (plan: CommandPlan & { ok: true }, lenParamName: string): string | undefined => {
182
+ const genSingularObjectClass = (plan: CommandPlan & { isOk: true }, lenParamName: string): string | undefined => {
179
183
  const countParam = plan.command.params[plan.params.length - 2];
180
184
  const outParam = plan.command.params[plan.params.length - 1];
181
185
 
@@ -190,7 +194,7 @@ const genSingularObjectClass = (plan: CommandPlan & { ok: true }, lenParamName:
190
194
  return outParam.objectClass;
191
195
  };
192
196
 
193
- const genSingularShape = (plan: CommandPlan & { ok: true }): GenSingularShape | undefined => {
197
+ const genSingularShape = (plan: CommandPlan & { isOk: true }): GenSingularShape | undefined => {
194
198
  const scalars = genSingularScalars(plan);
195
199
 
196
200
  if (scalars === undefined) {
@@ -206,10 +210,25 @@ const genSingularShape = (plan: CommandPlan & { ok: true }): GenSingularShape |
206
210
  return { countScalar: scalars.countScalar, outScalar: scalars.outScalar, objectClass };
207
211
  };
208
212
 
213
+ const genSingularJsDoc = (context: SingularContext, prefix: InArg[], shape: GenSingularShape): string => {
214
+ const { command } = context.plan;
215
+
216
+ return singularCommandJsDoc(
217
+ context,
218
+ `Returns one ${shape.objectClass} object name via ` +
219
+ `\`${command.name}(${prefix.length > 0 ? "..., " : ""}1, ...)\`.`,
220
+ [
221
+ ...prefix.map((arg) => inParamDocLine(context.plan, arg, context.docs)),
222
+ ` * @returns \`${shape.outScalar.tsAlias}\`, object class \`${shape.objectClass}\``,
223
+ ],
224
+ );
225
+ };
226
+
209
227
  const deriveGenSingular = (
210
- plan: CommandPlan & { ok: true },
211
- feature: string,
228
+ plan: CommandPlan & { isOk: true },
229
+ provenance: GlSymbolProvenance,
212
230
  usedTypes: Set<string>,
231
+ docs: GlDocContext,
213
232
  ): RenderedCommand | undefined => {
214
233
  if (!GEN_FAMILY.test(plan.command.name)) {
215
234
  return undefined;
@@ -227,21 +246,14 @@ const deriveGenSingular = (
227
246
  return undefined;
228
247
  }
229
248
 
230
- const { countScalar, outScalar, objectClass } = shape;
249
+ const { countScalar, outScalar } = shape;
231
250
  const exportName = singularize(commandExportName(plan.command.name));
232
251
  const bindingName = `${plan.command.name}Single`;
233
252
  const descriptors = [...prefix.map((arg) => arg.descriptor), countScalar.descriptor, tRef(outScalar.descriptor)];
234
253
  usedTypes.add(outScalar.tsAlias);
235
254
  const signature = prefix.map((arg) => `${arg.name}: ${arg.tsType}`).join(", ");
236
255
  const callArgs = [...prefix.map((arg) => arg.name), "1", "out"].join(", ");
237
-
238
- const jsDoc = singularCommandJsDoc(
239
- plan,
240
- feature,
241
- `Returns one ${objectClass} object name via ` +
242
- `\`${plan.command.name}(${prefix.length > 0 ? "..., " : ""}1, ...)\`.`,
243
- [...prefix.map((arg) => inParamDocLine(plan.command, arg)), ` * @returns The new ${objectClass} object name`],
244
- );
256
+ const jsDoc = genSingularJsDoc({ plan, provenance, docs }, prefix, shape);
245
257
 
246
258
  const body = [" const out = { value: 0 };", ` ${bindingName}(${callArgs});`, " return out.value;"].join(
247
259
  "\n",
@@ -256,7 +268,7 @@ const deriveGenSingular = (
256
268
  };
257
269
  };
258
270
 
259
- const deleteSingularAlias = (plan: CommandPlan & { ok: true }): string | undefined => {
271
+ const deleteSingularAlias = (plan: CommandPlan & { isOk: true }): string | undefined => {
260
272
  if (plan.params.length !== 2) {
261
273
  return undefined;
262
274
  }
@@ -274,7 +286,7 @@ const deleteSingularAlias = (plan: CommandPlan & { ok: true }): string | undefin
274
286
  return arrayPlan.scalar.tsAlias;
275
287
  };
276
288
 
277
- const deleteSingularObjectClass = (plan: CommandPlan & { ok: true }): string | undefined => {
289
+ const deleteSingularObjectClass = (plan: CommandPlan & { isOk: true }): string | undefined => {
278
290
  const [countParam, arrayParam] = plan.command.params;
279
291
 
280
292
  if (countParam === undefined || arrayParam === undefined) {
@@ -289,9 +301,10 @@ const deleteSingularObjectClass = (plan: CommandPlan & { ok: true }): string | u
289
301
  };
290
302
 
291
303
  const deriveDeleteSingular = (
292
- plan: CommandPlan & { ok: true },
293
- feature: string,
304
+ plan: CommandPlan & { isOk: true },
305
+ provenance: GlSymbolProvenance,
294
306
  usedTypes: Set<string>,
307
+ docs: GlDocContext,
295
308
  ): RenderedCommand | undefined => {
296
309
  if (!DELETE_FAMILY.test(plan.command.name)) {
297
310
  return undefined;
@@ -313,10 +326,9 @@ const deriveDeleteSingular = (
313
326
  const exportName = singularize(commandExportName(plan.command.name));
314
327
 
315
328
  const jsDoc = singularCommandJsDoc(
316
- plan,
317
- feature,
329
+ { plan, provenance, docs },
318
330
  `Deletes one ${objectClass} object name via \`${plan.command.name}(1, ...)\`.`,
319
- [` * @param name - The ${objectClass} object name to delete`],
331
+ [` * @param name - \`${scalarAlias}\`, object class \`${objectClass}\``],
320
332
  );
321
333
 
322
334
  return {
@@ -1,3 +1,4 @@
1
+ import { sortStringsBy } from "@gtkx/utils";
1
2
  import type { GlEnum, GlFeature, GlInterfaceBlock, GlRegistry } from "./model.js";
2
3
 
3
4
  type GlProfile = "core";
@@ -8,60 +9,94 @@ type GlSelection = {
8
9
  profile: GlProfile;
9
10
  };
10
11
 
12
+ type GlSymbolKind = "command" | "enum";
13
+
14
+ type GlRemoval = {
15
+ feature: string;
16
+ comment?: string;
17
+ };
18
+
19
+ type GlSymbolProvenance = {
20
+ feature: string;
21
+ requireComment?: string;
22
+ removals: GlRemoval[];
23
+ };
24
+
25
+ type GlRemovedSymbol = {
26
+ name: string;
27
+ kind: GlSymbolKind;
28
+ feature: string;
29
+ comment?: string;
30
+ };
31
+
11
32
  type GlSubset = {
12
- commands: Map<string, string>;
13
- enums: Map<string, string>;
33
+ commands: Map<string, GlSymbolProvenance>;
34
+ enums: Map<string, GlSymbolProvenance>;
35
+ removed: GlRemovedSymbol[];
14
36
  };
15
37
 
16
- const isBlockApplicable = (block: GlInterfaceBlock, selection: GlSelection): boolean =>
17
- block.profile === undefined || block.profile === selection.profile;
38
+ type SelectionState = GlSubset & {
39
+ history: Map<string, GlRemoval[]>;
40
+ };
18
41
 
19
- const addMissing = (target: Map<string, string>, names: string[], value: string): void => {
20
- for (const name of names) {
21
- if (!target.has(name)) {
22
- target.set(name, value);
23
- }
24
- }
42
+ type MemberContext = {
43
+ feature: GlFeature;
44
+ block: GlInterfaceBlock;
45
+ kind: GlSymbolKind;
25
46
  };
26
47
 
27
- const applyRequires = (
28
- feature: GlFeature,
29
- selection: GlSelection,
30
- commands: Map<string, string>,
31
- enums: Map<string, string>,
32
- ): void => {
33
- for (const block of feature.requires) {
34
- if (!isBlockApplicable(block, selection)) {
35
- continue;
36
- }
48
+ const isBlockApplicable = (block: GlInterfaceBlock, selection: GlSelection): boolean =>
49
+ (block.profile === undefined || block.profile === selection.profile) &&
50
+ (block.api === undefined || block.api === selection.api);
51
+
52
+ const targetFor = (state: SelectionState, kind: GlSymbolKind): Map<string, GlSymbolProvenance> =>
53
+ kind === "command" ? state.commands : state.enums;
37
54
 
38
- addMissing(commands, block.commands, feature.name);
39
- addMissing(enums, block.enums, feature.name);
55
+ const commentEntry = (comment: string | undefined): { comment?: string } =>
56
+ comment === undefined ? {} : { comment };
57
+
58
+ const requireMember = (state: SelectionState, name: string, context: MemberContext): void => {
59
+ const target = targetFor(state, context.kind);
60
+
61
+ if (target.has(name)) {
62
+ return;
40
63
  }
64
+
65
+ const { block, feature } = context;
66
+
67
+ target.set(name, {
68
+ feature: feature.name,
69
+ ...(block.comment !== undefined && { requireComment: block.comment }),
70
+ removals: [...(state.history.get(name) ?? [])],
71
+ });
41
72
  };
42
73
 
43
- const removeBlock = (block: GlInterfaceBlock, commands: Map<string, string>, enums: Map<string, string>): void => {
44
- for (const name of block.commands) {
45
- commands.delete(name);
46
- }
74
+ const removeMember = (state: SelectionState, name: string, context: MemberContext): void => {
75
+ const { block, feature, kind } = context;
76
+ const removal: GlRemoval = { feature: feature.name, ...commentEntry(block.comment) };
77
+ targetFor(state, kind).delete(name);
78
+ state.history.set(name, [...(state.history.get(name) ?? []), removal]);
79
+ state.removed.push({ name, kind, ...removal });
80
+ };
81
+
82
+ const applyMembers = (state: SelectionState, names: string[], context: MemberContext): void => {
83
+ const apply = context.block.kind === "require" ? requireMember : removeMember;
47
84
 
48
- for (const name of block.enums) {
49
- enums.delete(name);
85
+ for (const name of names) {
86
+ apply(state, name, context);
50
87
  }
51
88
  };
52
89
 
53
- const applyRemoves = (
54
- feature: GlFeature,
55
- selection: GlSelection,
56
- commands: Map<string, string>,
57
- enums: Map<string, string>,
58
- ): void => {
59
- for (const block of feature.removes) {
60
- if (!isBlockApplicable(block, selection)) {
61
- continue;
62
- }
90
+ const applyBlock = (state: SelectionState, feature: GlFeature, block: GlInterfaceBlock): void => {
91
+ applyMembers(state, block.commands, { feature, block, kind: "command" });
92
+ applyMembers(state, block.enums, { feature, block, kind: "enum" });
93
+ };
63
94
 
64
- removeBlock(block, commands, enums);
95
+ const applyFeature = (state: SelectionState, feature: GlFeature, selection: GlSelection): void => {
96
+ for (const block of feature.blocks) {
97
+ if (isBlockApplicable(block, selection)) {
98
+ applyBlock(state, feature, block);
99
+ }
65
100
  }
66
101
  };
67
102
 
@@ -70,22 +105,28 @@ const selectSubset = (registry: GlRegistry, selection: GlSelection): GlSubset =>
70
105
  .filter((feature) => feature.api === selection.api && feature.number <= selection.version)
71
106
  .toSorted((a, b) => a.number - b.number);
72
107
 
73
- const commands: Map<string, string> = new Map();
74
- const enums: Map<string, string> = new Map();
75
-
76
- for (const feature of features) {
77
- applyRequires(feature, selection, commands, enums);
78
- }
108
+ const state: SelectionState = {
109
+ commands: new Map(),
110
+ enums: new Map(),
111
+ removed: [],
112
+ history: new Map(),
113
+ };
79
114
 
80
115
  for (const feature of features) {
81
- applyRemoves(feature, selection, commands, enums);
116
+ applyFeature(state, feature, selection);
82
117
  }
83
118
 
84
- return { commands, enums };
119
+ return {
120
+ commands: state.commands,
121
+ enums: state.enums,
122
+ removed: sortStringsBy(state.removed, (entry) => entry.name),
123
+ };
85
124
  };
86
125
 
87
- const resolveEnum = (registry: GlRegistry, name: string): GlEnum => {
88
- const found = registry.enums.find((candidate) => candidate.name === name);
126
+ const resolveEnum = (registry: GlRegistry, name: string, api: string): GlEnum => {
127
+ const found = registry.enums.find(
128
+ (candidate) => candidate.name === name && (candidate.api === undefined || candidate.api === api),
129
+ );
89
130
 
90
131
  if (found === undefined) {
91
132
  throw new Error(`Enum token ${name} has no definition in the registry`);
@@ -94,4 +135,4 @@ const resolveEnum = (registry: GlRegistry, name: string): GlEnum => {
94
135
  return found;
95
136
  };
96
137
 
97
- export { selectSubset, resolveEnum, type GlSelection };
138
+ export { selectSubset, resolveEnum, type GlRemoval, type GlSelection, type GlSubset, type GlSymbolProvenance };
@@ -1,4 +1,4 @@
1
- import type { ModuleExport } from "@gtkx/react/internal";
1
+ import type { ModuleExport } from "@gtkx/react/config";
2
2
  import { readdirSync } from "node:fs";
3
3
  import type { OmittedProps } from "../store/jsx/omitted-props.js";
4
4
 
@@ -96,5 +96,5 @@ const readBuiltinElements = async (reactSubexports: string[], giStoreDir: string
96
96
  return result;
97
97
  };
98
98
 
99
- export type { ModuleExport } from "@gtkx/react/internal";
99
+ export type { ModuleExport } from "@gtkx/react/config";
100
100
  export { readBuiltinElements, type BuiltinElements };
package/src/runner.ts CHANGED
@@ -1,20 +1,14 @@
1
1
  import { mkdirSync, writeFileSync } from "node:fs";
2
2
  import { join } from "node:path";
3
+ import type { ModuleExport } from "./react/element-config.js";
3
4
  import type { OmittedProps } from "./store/jsx/omitted-props.js";
4
- import type { StoreOptions } from "./store/store-fs.js";
5
5
  import { checkModules } from "./compile.js";
6
6
  import { isGiStoreFresh } from "./fingerprint.js";
7
7
  import { runGiCodegen } from "./gi.js";
8
8
  import { Library } from "./gir/library.js";
9
9
  import { generateGlModules, type GlGenerationReport } from "./khronos/pipeline.js";
10
-
11
- /** A named export in a module, referenced as plain data (the module is never imported at runtime). */
12
- type ModuleExport = {
13
- /** Specifier the export is imported from. */
14
- module: string;
15
- /** Identifier the module exports it under. */
16
- export: string;
17
- };
10
+ import { sweepStagingDirs } from "./staging.js";
11
+ import { ensureStoreLink, type StoreOptions } from "./store/store-fs.js";
18
12
 
19
13
  type GlCodegenOptions = {
20
14
  registryPath: string;
@@ -71,6 +65,10 @@ type StoreResult = {
71
65
  * store or the React element config changed, unless `options.isForced` is set. Pass the spread of
72
66
  * `resolveStore(projectRoot)` for everything but `libraries` and `girPath`.
73
67
  *
68
+ * Every store already on disk is linked at its `linkDir` before anything is generated, so a link an install
69
+ * pruned out of `node_modules` is restored without regenerating the store, and the gi store is reachable
70
+ * under its own specifier while the jsx store is type checked.
71
+ *
74
72
  * @param options What to generate and where to write it.
75
73
  * @returns A summary of what was regenerated and how long the run took.
76
74
  * @throws If `girPath` is empty, which would otherwise generate nothing and report success.
@@ -174,6 +172,17 @@ const emitStoresWithConfig = async (config: {
174
172
  return emitJsxStore({ options, jsx, gi, loadLibrary, isGiRegenerated, namespaces });
175
173
  };
176
174
 
175
+ const prepareStores = (stores: (StoreOptions | undefined)[]): void => {
176
+ for (const store of stores) {
177
+ if (store === undefined) {
178
+ continue;
179
+ }
180
+
181
+ sweepStagingDirs(store.storeDir);
182
+ ensureStoreLink(store);
183
+ }
184
+ };
185
+
177
186
  const emitStores = async (options: CodegenRunnerOptions): Promise<StoreResult> => {
178
187
  const { gi, jsx, libraries, girPath } = options;
179
188
 
@@ -181,6 +190,8 @@ const emitStores = async (options: CodegenRunnerOptions): Promise<StoreResult> =
181
190
  throw new Error("codegen needs at least one GIR search path; pass the result of resolveGirPath");
182
191
  }
183
192
 
193
+ prepareStores([gi, jsx]);
194
+
184
195
  return emitStoresWithConfig({ options, gi, jsx, libraries, girPath });
185
196
  };
186
197
 
package/src/staging.ts ADDED
@@ -0,0 +1,69 @@
1
+ import { mkdirSync, mkdtempSync, readdirSync, rmSync } from "node:fs";
2
+ import { basename, dirname, join } from "node:path";
3
+
4
+ const STAGING_SUFFIX = ".tmp-";
5
+ const OWNER_PATTERN = /^(?<pid>\d+)-/;
6
+
7
+ const errorCode = (error: unknown): string | undefined =>
8
+ error instanceof Error && "code" in error && typeof error.code === "string" ? error.code : undefined;
9
+
10
+ const isOwnerRunning = (pid: number): boolean => {
11
+ if (!Number.isSafeInteger(pid) || pid <= 0) {
12
+ return false;
13
+ }
14
+
15
+ try {
16
+ process.kill(pid, 0);
17
+
18
+ return true;
19
+ } catch (error) {
20
+ return errorCode(error) === "EPERM";
21
+ }
22
+ };
23
+
24
+ const isStranded = (entry: string, prefix: string): boolean => {
25
+ if (!entry.startsWith(prefix)) {
26
+ return false;
27
+ }
28
+
29
+ const owner = OWNER_PATTERN.exec(entry.slice(prefix.length))?.groups?.pid;
30
+
31
+ return owner === undefined || !isOwnerRunning(Number(owner));
32
+ };
33
+
34
+ const readEntries = (parentDir: string): string[] => {
35
+ try {
36
+ return readdirSync(parentDir);
37
+ } catch {
38
+ return [];
39
+ }
40
+ };
41
+
42
+ const removeStrandedDir = (path: string): void => {
43
+ try {
44
+ rmSync(path, { recursive: true, force: true });
45
+ } catch {
46
+ return;
47
+ }
48
+ };
49
+
50
+ const sweepStrandedDirs = (parentDir: string, prefix: string): void => {
51
+ for (const entry of readEntries(parentDir)) {
52
+ if (isStranded(entry, prefix)) {
53
+ removeStrandedDir(join(parentDir, entry));
54
+ }
55
+ }
56
+ };
57
+
58
+ const sweepStagingDirs = (target: string): void => {
59
+ sweepStrandedDirs(dirname(target), `${basename(target)}${STAGING_SUFFIX}`);
60
+ };
61
+
62
+ const createStagingDir = (target: string): string => {
63
+ mkdirSync(dirname(target), { recursive: true });
64
+ sweepStagingDirs(target);
65
+
66
+ return mkdtempSync(`${target}${STAGING_SUFFIX}${String(process.pid)}-`);
67
+ };
68
+
69
+ export { createStagingDir, sweepStagingDirs, sweepStrandedDirs };
@@ -1,6 +1,6 @@
1
1
  import { rmSync, writeFileSync } from "node:fs";
2
2
  import { join } from "node:path";
3
- import { compileProject, type SourceModule } from "../compile.js";
3
+ import { compileProject, type ProjectFile, type SourceModule } from "../compile.js";
4
4
 
5
5
  type CompileStoreParams = {
6
6
  storeDir: string;
@@ -29,16 +29,18 @@ const writeEnvReference = (storeDir: string): (() => void) => {
29
29
  };
30
30
 
31
31
  const compileStore = (params: CompileStoreParams): void => {
32
- const fileNames = params.files.map((file) => file.fileName);
33
-
34
32
  const removeEnvReference = params.requiresEnvReference === true
35
33
  ? writeEnvReference(params.storeDir)
36
34
  : (): void => undefined;
37
35
 
36
+ const files: ProjectFile[] = params.requiresEnvReference === true
37
+ ? [{ fileName: ENV_REFERENCE_FILE }, ...params.files]
38
+ : params.files;
39
+
38
40
  try {
39
41
  compileProject({
40
42
  projectDir: params.storeDir,
41
- fileNames: params.requiresEnvReference === true ? [ENV_REFERENCE_FILE, ...fileNames] : fileNames,
43
+ files,
42
44
  compilerOptions: EMIT_OPTIONS,
43
45
  label: `the generated ${params.packageName} store`,
44
46
  });
@@ -51,4 +53,4 @@ const compileStore = (params: CompileStoreParams): void => {
51
53
  }
52
54
  };
53
55
 
54
- export { compileStore, type CompileStoreParams };
56
+ export { compileStore };