@gtkx/codegen 1.0.0-rc.4 → 1.0.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 (410) hide show
  1. package/README.md +5 -5
  2. package/dist/analysis/descriptor-render.d.ts +8 -1
  3. package/dist/analysis/descriptor-render.d.ts.map +1 -1
  4. package/dist/analysis/descriptor-render.js +37 -24
  5. package/dist/analysis/descriptor-render.js.map +1 -1
  6. package/dist/analysis/descriptor.d.ts +1 -1
  7. package/dist/analysis/descriptor.d.ts.map +1 -1
  8. package/dist/analysis/descriptor.js.map +1 -1
  9. package/dist/analysis/inheritance.d.ts +1 -2
  10. package/dist/analysis/inheritance.d.ts.map +1 -1
  11. package/dist/analysis/inheritance.js +25 -22
  12. package/dist/analysis/inheritance.js.map +1 -1
  13. package/dist/analysis/nul-terminated-bytes.d.ts +5 -0
  14. package/dist/analysis/nul-terminated-bytes.d.ts.map +1 -0
  15. package/dist/analysis/nul-terminated-bytes.js +18 -0
  16. package/dist/analysis/nul-terminated-bytes.js.map +1 -0
  17. package/dist/analysis/param-capability.d.ts +5 -0
  18. package/dist/analysis/param-capability.d.ts.map +1 -0
  19. package/dist/analysis/param-capability.js +130 -0
  20. package/dist/analysis/param-capability.js.map +1 -0
  21. package/dist/analysis/param-structure.d.ts +11 -4
  22. package/dist/analysis/param-structure.d.ts.map +1 -1
  23. package/dist/analysis/param-structure.js +40 -14
  24. package/dist/analysis/param-structure.js.map +1 -1
  25. package/dist/analysis/type-shape.d.ts +8 -0
  26. package/dist/analysis/type-shape.d.ts.map +1 -0
  27. package/dist/analysis/type-shape.js +12 -0
  28. package/dist/analysis/type-shape.js.map +1 -0
  29. package/dist/compile.d.ts +1 -1
  30. package/dist/compile.d.ts.map +1 -1
  31. package/dist/compile.js.map +1 -1
  32. package/dist/docs/api-reference.d.ts +2 -2
  33. package/dist/docs/api-reference.d.ts.map +1 -1
  34. package/dist/docs/api-reference.js +7 -14
  35. package/dist/docs/api-reference.js.map +1 -1
  36. package/dist/docs/element-page.d.ts +4 -4
  37. package/dist/docs/element-page.d.ts.map +1 -1
  38. package/dist/docs/element-page.js +32 -20
  39. package/dist/docs/element-page.js.map +1 -1
  40. package/dist/docs/handwritten-props.d.ts +9 -0
  41. package/dist/docs/handwritten-props.d.ts.map +1 -0
  42. package/dist/docs/handwritten-props.js +149 -0
  43. package/dist/docs/handwritten-props.js.map +1 -0
  44. package/dist/docs/pipeline.js +2 -2
  45. package/dist/docs/pipeline.js.map +1 -1
  46. package/dist/docs/render.d.ts +25 -5
  47. package/dist/docs/render.d.ts.map +1 -1
  48. package/dist/docs/render.js +84 -22
  49. package/dist/docs/render.js.map +1 -1
  50. package/dist/docs/symbol-page.d.ts +17 -0
  51. package/dist/docs/symbol-page.d.ts.map +1 -1
  52. package/dist/docs/symbol-page.js +128 -43
  53. package/dist/docs/symbol-page.js.map +1 -1
  54. package/dist/fingerprint.d.ts +1 -1
  55. package/dist/fingerprint.d.ts.map +1 -1
  56. package/dist/fingerprint.js.map +1 -1
  57. package/dist/gir/ancestry.d.ts +2 -2
  58. package/dist/gir/ancestry.d.ts.map +1 -1
  59. package/dist/gir/ancestry.js +11 -1
  60. package/dist/gir/ancestry.js.map +1 -1
  61. package/dist/gir/annotations.d.ts +22 -0
  62. package/dist/gir/annotations.d.ts.map +1 -0
  63. package/dist/gir/annotations.js +15 -0
  64. package/dist/gir/annotations.js.map +1 -0
  65. package/dist/gir/callback.d.ts +1 -0
  66. package/dist/gir/callback.d.ts.map +1 -1
  67. package/dist/gir/callback.js +1 -0
  68. package/dist/gir/callback.js.map +1 -1
  69. package/dist/gir/class.d.ts +32 -1
  70. package/dist/gir/class.d.ts.map +1 -1
  71. package/dist/gir/class.js +8 -3
  72. package/dist/gir/class.js.map +1 -1
  73. package/dist/gir/enum.d.ts +21 -1
  74. package/dist/gir/enum.d.ts.map +1 -1
  75. package/dist/gir/enum.js +9 -9
  76. package/dist/gir/enum.js.map +1 -1
  77. package/dist/gir/field.d.ts +19 -3
  78. package/dist/gir/field.d.ts.map +1 -1
  79. package/dist/gir/field.js +7 -8
  80. package/dist/gir/field.js.map +1 -1
  81. package/dist/gir/function.d.ts +15 -0
  82. package/dist/gir/function.d.ts.map +1 -1
  83. package/dist/gir/function.js.map +1 -1
  84. package/dist/gir/libraries.d.ts +1 -3
  85. package/dist/gir/libraries.d.ts.map +1 -1
  86. package/dist/gir/libraries.js +0 -1
  87. package/dist/gir/libraries.js.map +1 -1
  88. package/dist/gir/library.d.ts +36 -0
  89. package/dist/gir/library.d.ts.map +1 -1
  90. package/dist/gir/library.js +34 -0
  91. package/dist/gir/library.js.map +1 -1
  92. package/dist/gir/namespace.d.ts +38 -0
  93. package/dist/gir/namespace.d.ts.map +1 -1
  94. package/dist/gir/namespace.js +4 -5
  95. package/dist/gir/namespace.js.map +1 -1
  96. package/dist/gir/parameter.d.ts +39 -0
  97. package/dist/gir/parameter.d.ts.map +1 -1
  98. package/dist/gir/parameter.js +7 -3
  99. package/dist/gir/parameter.js.map +1 -1
  100. package/dist/gir/parse.d.ts +3 -1
  101. package/dist/gir/parse.d.ts.map +1 -1
  102. package/dist/gir/parse.js +6 -3
  103. package/dist/gir/parse.js.map +1 -1
  104. package/dist/gir/primitives.d.ts +1 -0
  105. package/dist/gir/primitives.d.ts.map +1 -1
  106. package/dist/gir/primitives.js.map +1 -1
  107. package/dist/gir/property.d.ts +16 -0
  108. package/dist/gir/property.d.ts.map +1 -1
  109. package/dist/gir/property.js +3 -3
  110. package/dist/gir/property.js.map +1 -1
  111. package/dist/gir/record.d.ts +22 -0
  112. package/dist/gir/record.d.ts.map +1 -1
  113. package/dist/gir/record.js +3 -2
  114. package/dist/gir/record.js.map +1 -1
  115. package/dist/gir/size.d.ts +5 -4
  116. package/dist/gir/size.d.ts.map +1 -1
  117. package/dist/gir/size.js.map +1 -1
  118. package/dist/gir/type-id.d.ts +35 -0
  119. package/dist/gir/type-id.d.ts.map +1 -1
  120. package/dist/gir/type-id.js +1 -0
  121. package/dist/gir/type-id.js.map +1 -1
  122. package/dist/gir/type-ref.d.ts.map +1 -1
  123. package/dist/gir/type-ref.js +1 -0
  124. package/dist/gir/type-ref.js.map +1 -1
  125. package/dist/gir/type.d.ts +20 -0
  126. package/dist/gir/type.d.ts.map +1 -1
  127. package/dist/gir/type.js.map +1 -1
  128. package/dist/khronos/args.d.ts +7 -6
  129. package/dist/khronos/args.d.ts.map +1 -1
  130. package/dist/khronos/args.js +28 -6
  131. package/dist/khronos/args.js.map +1 -1
  132. package/dist/khronos/doc-context.d.ts +29 -0
  133. package/dist/khronos/doc-context.d.ts.map +1 -0
  134. package/dist/khronos/doc-context.js +29 -0
  135. package/dist/khronos/doc-context.js.map +1 -0
  136. package/dist/khronos/extensions.d.ts +13 -0
  137. package/dist/khronos/extensions.d.ts.map +1 -0
  138. package/dist/khronos/extensions.js +49 -0
  139. package/dist/khronos/extensions.js.map +1 -0
  140. package/dist/khronos/jsdoc.d.ts +17 -11
  141. package/dist/khronos/jsdoc.d.ts.map +1 -1
  142. package/dist/khronos/jsdoc.js +104 -46
  143. package/dist/khronos/jsdoc.js.map +1 -1
  144. package/dist/khronos/model.d.ts +42 -3
  145. package/dist/khronos/model.d.ts.map +1 -1
  146. package/dist/khronos/model.js +218 -63
  147. package/dist/khronos/model.js.map +1 -1
  148. package/dist/khronos/modules.d.ts +9 -6
  149. package/dist/khronos/modules.d.ts.map +1 -1
  150. package/dist/khronos/modules.js +96 -26
  151. package/dist/khronos/modules.js.map +1 -1
  152. package/dist/khronos/notes.d.ts +19 -0
  153. package/dist/khronos/notes.d.ts.map +1 -0
  154. package/dist/khronos/notes.js +35 -0
  155. package/dist/khronos/notes.js.map +1 -0
  156. package/dist/khronos/param-pair.d.ts +1 -1
  157. package/dist/khronos/param-pair.d.ts.map +1 -1
  158. package/dist/khronos/param-pair.js.map +1 -1
  159. package/dist/khronos/pipeline.d.ts +3 -1
  160. package/dist/khronos/pipeline.d.ts.map +1 -1
  161. package/dist/khronos/pipeline.js +58 -27
  162. package/dist/khronos/pipeline.js.map +1 -1
  163. package/dist/khronos/plan.d.ts +3 -3
  164. package/dist/khronos/plan.d.ts.map +1 -1
  165. package/dist/khronos/plan.js +2 -2
  166. package/dist/khronos/plan.js.map +1 -1
  167. package/dist/khronos/render.d.ts +8 -6
  168. package/dist/khronos/render.d.ts.map +1 -1
  169. package/dist/khronos/render.js +35 -26
  170. package/dist/khronos/render.js.map +1 -1
  171. package/dist/khronos/select.d.ts +21 -4
  172. package/dist/khronos/select.d.ts.map +1 -1
  173. package/dist/khronos/select.js +47 -34
  174. package/dist/khronos/select.js.map +1 -1
  175. package/dist/react/element-config.d.ts +2 -2
  176. package/dist/react/element-config.d.ts.map +1 -1
  177. package/dist/react/element-config.js.map +1 -1
  178. package/dist/runner.d.ts +1 -7
  179. package/dist/runner.d.ts.map +1 -1
  180. package/dist/runner.js.map +1 -1
  181. package/dist/store/compile-store.d.ts +1 -1
  182. package/dist/store/compile-store.d.ts.map +1 -1
  183. package/dist/store/compile-store.js.map +1 -1
  184. package/dist/store/gi/callable-doc.d.ts +11 -0
  185. package/dist/store/gi/callable-doc.d.ts.map +1 -0
  186. package/dist/store/gi/callable-doc.js +62 -0
  187. package/dist/store/gi/callable-doc.js.map +1 -0
  188. package/dist/store/gi/callables.d.ts +3 -1
  189. package/dist/store/gi/callables.d.ts.map +1 -1
  190. package/dist/store/gi/callables.js +12 -12
  191. package/dist/store/gi/callables.js.map +1 -1
  192. package/dist/store/gi/callback.d.ts.map +1 -1
  193. package/dist/store/gi/callback.js +2 -2
  194. package/dist/store/gi/callback.js.map +1 -1
  195. package/dist/store/gi/class.d.ts.map +1 -1
  196. package/dist/store/gi/class.js +5 -3
  197. package/dist/store/gi/class.js.map +1 -1
  198. package/dist/store/gi/closure-invocation.d.ts +4 -0
  199. package/dist/store/gi/closure-invocation.d.ts.map +1 -0
  200. package/dist/store/gi/closure-invocation.js +22 -0
  201. package/dist/store/gi/closure-invocation.js.map +1 -0
  202. package/dist/store/gi/constant.d.ts.map +1 -1
  203. package/dist/store/gi/constant.js +3 -2
  204. package/dist/store/gi/constant.js.map +1 -1
  205. package/dist/store/gi/constructor-props.d.ts.map +1 -1
  206. package/dist/store/gi/constructor-props.js +18 -20
  207. package/dist/store/gi/constructor-props.js.map +1 -1
  208. package/dist/store/gi/doc-spec.d.ts +14 -0
  209. package/dist/store/gi/doc-spec.d.ts.map +1 -0
  210. package/dist/store/gi/doc-spec.js +23 -0
  211. package/dist/store/gi/doc-spec.js.map +1 -0
  212. package/dist/store/gi/enum.d.ts.map +1 -1
  213. package/dist/store/gi/enum.js +29 -16
  214. package/dist/store/gi/enum.js.map +1 -1
  215. package/dist/store/gi/function.d.ts.map +1 -1
  216. package/dist/store/gi/function.js +27 -12
  217. package/dist/store/gi/function.js.map +1 -1
  218. package/dist/store/gi/interface.d.ts.map +1 -1
  219. package/dist/store/gi/interface.js +130 -16
  220. package/dist/store/gi/interface.js.map +1 -1
  221. package/dist/store/gi/item-comparators.d.ts.map +1 -1
  222. package/dist/store/gi/item-comparators.js +3 -5
  223. package/dist/store/gi/item-comparators.js.map +1 -1
  224. package/dist/store/gi/method.d.ts +9 -1
  225. package/dist/store/gi/method.d.ts.map +1 -1
  226. package/dist/store/gi/method.js +69 -26
  227. package/dist/store/gi/method.js.map +1 -1
  228. package/dist/store/gi/param-marshal.d.ts +4 -1
  229. package/dist/store/gi/param-marshal.d.ts.map +1 -1
  230. package/dist/store/gi/param-marshal.js +5 -1
  231. package/dist/store/gi/param-marshal.js.map +1 -1
  232. package/dist/store/gi/pipeline.d.ts.map +1 -1
  233. package/dist/store/gi/pipeline.js +3 -2
  234. package/dist/store/gi/pipeline.js.map +1 -1
  235. package/dist/store/gi/properties.d.ts.map +1 -1
  236. package/dist/store/gi/properties.js +2 -2
  237. package/dist/store/gi/properties.js.map +1 -1
  238. package/dist/store/gi/property-accessor.d.ts +3 -1
  239. package/dist/store/gi/property-accessor.d.ts.map +1 -1
  240. package/dist/store/gi/property-accessor.js +6 -5
  241. package/dist/store/gi/property-accessor.js.map +1 -1
  242. package/dist/store/gi/record-constructor.d.ts.map +1 -1
  243. package/dist/store/gi/record-constructor.js +3 -1
  244. package/dist/store/gi/record-constructor.js.map +1 -1
  245. package/dist/store/gi/record-field-accessor.d.ts +3 -1
  246. package/dist/store/gi/record-field-accessor.d.ts.map +1 -1
  247. package/dist/store/gi/record-field-accessor.js +3 -2
  248. package/dist/store/gi/record-field-accessor.js.map +1 -1
  249. package/dist/store/gi/record-layout.js +1 -1
  250. package/dist/store/gi/record-layout.js.map +1 -1
  251. package/dist/store/gi/record.d.ts.map +1 -1
  252. package/dist/store/gi/record.js +3 -2
  253. package/dist/store/gi/record.js.map +1 -1
  254. package/dist/store/gi/registration.d.ts +1 -1
  255. package/dist/store/gi/registration.js +2 -2
  256. package/dist/store/gi/registration.js.map +1 -1
  257. package/dist/store/gi/runtime-override.d.ts +2 -1
  258. package/dist/store/gi/runtime-override.d.ts.map +1 -1
  259. package/dist/store/gi/runtime-override.js +8 -5
  260. package/dist/store/gi/runtime-override.js.map +1 -1
  261. package/dist/store/gi/signal.d.ts.map +1 -1
  262. package/dist/store/gi/signal.js +14 -15
  263. package/dist/store/gi/signal.js.map +1 -1
  264. package/dist/store/gi/value-marshalable.d.ts +1 -2
  265. package/dist/store/gi/value-marshalable.d.ts.map +1 -1
  266. package/dist/store/gi/value-marshalable.js +1 -1
  267. package/dist/store/gi/value-marshalable.js.map +1 -1
  268. package/dist/store/gi/vtable.d.ts +16 -1
  269. package/dist/store/gi/vtable.d.ts.map +1 -1
  270. package/dist/store/gi/vtable.js +214 -51
  271. package/dist/store/gi/vtable.js.map +1 -1
  272. package/dist/store/jsx/element-components.d.ts +1 -1
  273. package/dist/store/jsx/element-components.d.ts.map +1 -1
  274. package/dist/store/jsx/element-components.js +6 -4
  275. package/dist/store/jsx/element-components.js.map +1 -1
  276. package/dist/store/jsx/element-prop-imports.d.ts +1 -3
  277. package/dist/store/jsx/element-prop-imports.d.ts.map +1 -1
  278. package/dist/store/jsx/element-prop-imports.js.map +1 -1
  279. package/dist/store/jsx/element-prop-types.d.ts +3 -0
  280. package/dist/store/jsx/element-prop-types.d.ts.map +1 -1
  281. package/dist/store/jsx/element-prop-types.js +7 -1
  282. package/dist/store/jsx/element-prop-types.js.map +1 -1
  283. package/dist/store/jsx/intrinsic-elements.d.ts +4 -0
  284. package/dist/store/jsx/intrinsic-elements.d.ts.map +1 -1
  285. package/dist/store/jsx/intrinsic-elements.js.map +1 -1
  286. package/dist/store/jsx/jsx.d.ts.map +1 -1
  287. package/dist/store/jsx/jsx.js +7 -6
  288. package/dist/store/jsx/jsx.js.map +1 -1
  289. package/dist/store/jsx/metadata.js +2 -2
  290. package/dist/store/jsx/metadata.js.map +1 -1
  291. package/dist/store/jsx/pipeline.d.ts +1 -1
  292. package/dist/store/jsx/pipeline.d.ts.map +1 -1
  293. package/dist/store/jsx/pipeline.js.map +1 -1
  294. package/dist/store/jsx/props.d.ts +1 -7
  295. package/dist/store/jsx/props.d.ts.map +1 -1
  296. package/dist/store/jsx/props.js +14 -6
  297. package/dist/store/jsx/props.js.map +1 -1
  298. package/dist/writer/context.d.ts +2 -1
  299. package/dist/writer/context.d.ts.map +1 -1
  300. package/dist/writer/context.js +3 -0
  301. package/dist/writer/context.js.map +1 -1
  302. package/dist/writer/doc-tags.d.ts +21 -0
  303. package/dist/writer/doc-tags.d.ts.map +1 -0
  304. package/dist/writer/doc-tags.js +38 -0
  305. package/dist/writer/doc-tags.js.map +1 -0
  306. package/dist/writer/doc.d.ts +3 -1
  307. package/dist/writer/doc.d.ts.map +1 -1
  308. package/dist/writer/doc.js +19 -6
  309. package/dist/writer/doc.js.map +1 -1
  310. package/dist/writer/gtk-doc.d.ts +1 -1
  311. package/dist/writer/gtk-doc.d.ts.map +1 -1
  312. package/dist/writer/gtk-doc.js +64 -15
  313. package/dist/writer/gtk-doc.js.map +1 -1
  314. package/dist/writer/module.d.ts +8 -2
  315. package/dist/writer/module.d.ts.map +1 -1
  316. package/dist/writer/module.js +13 -1
  317. package/dist/writer/module.js.map +1 -1
  318. package/overrides/gdk/rgba.ts.ejs +26 -0
  319. package/overrides/gobject/object.ts.ejs +48 -3
  320. package/overrides/gobject/value.ts.ejs +7 -0
  321. package/overrides/graphene/structs.ts.ejs +55 -0
  322. package/package.json +4 -4
  323. package/src/analysis/descriptor-render.ts +47 -28
  324. package/src/analysis/descriptor.ts +0 -3
  325. package/src/analysis/inheritance.ts +35 -34
  326. package/src/analysis/nul-terminated-bytes.ts +31 -0
  327. package/src/analysis/param-capability.ts +172 -0
  328. package/src/analysis/param-structure.ts +83 -23
  329. package/src/analysis/type-shape.ts +24 -0
  330. package/src/compile.ts +1 -1
  331. package/src/docs/api-reference.ts +36 -25
  332. package/src/docs/element-page.ts +53 -47
  333. package/src/docs/handwritten-props.ts +230 -0
  334. package/src/docs/pipeline.ts +2 -2
  335. package/src/docs/render.ts +146 -32
  336. package/src/docs/symbol-page.ts +224 -79
  337. package/src/fingerprint.ts +0 -1
  338. package/src/gir/ancestry.ts +15 -1
  339. package/src/gir/annotations.ts +37 -0
  340. package/src/gir/callback.ts +2 -0
  341. package/src/gir/class.ts +42 -4
  342. package/src/gir/enum.ts +30 -10
  343. package/src/gir/field.ts +24 -9
  344. package/src/gir/function.ts +15 -0
  345. package/src/gir/libraries.ts +11 -3
  346. package/src/gir/library.ts +51 -2
  347. package/src/gir/namespace.ts +41 -5
  348. package/src/gir/parameter.ts +47 -3
  349. package/src/gir/parse.ts +8 -2
  350. package/src/gir/primitives.ts +1 -0
  351. package/src/gir/property.ts +18 -3
  352. package/src/gir/record.ts +24 -2
  353. package/src/gir/size.ts +8 -3
  354. package/src/gir/type-id.ts +49 -3
  355. package/src/gir/type-ref.ts +1 -0
  356. package/src/gir/type.ts +50 -6
  357. package/src/khronos/args.ts +36 -13
  358. package/src/khronos/doc-context.ts +62 -0
  359. package/src/khronos/extensions.ts +85 -0
  360. package/src/khronos/jsdoc.ts +152 -56
  361. package/src/khronos/model.ts +314 -69
  362. package/src/khronos/modules.ts +134 -40
  363. package/src/khronos/notes.ts +74 -0
  364. package/src/khronos/param-pair.ts +1 -1
  365. package/src/khronos/pipeline.ts +94 -41
  366. package/src/khronos/plan.ts +4 -5
  367. package/src/khronos/render.ts +62 -50
  368. package/src/khronos/select.ts +91 -50
  369. package/src/react/element-config.ts +2 -2
  370. package/src/runner.ts +1 -8
  371. package/src/store/compile-store.ts +1 -1
  372. package/src/store/gi/callable-doc.ts +102 -0
  373. package/src/store/gi/callables.ts +18 -12
  374. package/src/store/gi/callback.ts +3 -2
  375. package/src/store/gi/class.ts +6 -3
  376. package/src/store/gi/closure-invocation.ts +26 -0
  377. package/src/store/gi/constant.ts +3 -4
  378. package/src/store/gi/constructor-props.ts +19 -23
  379. package/src/store/gi/doc-spec.ts +38 -0
  380. package/src/store/gi/enum.ts +55 -20
  381. package/src/store/gi/function.ts +43 -21
  382. package/src/store/gi/interface.ts +214 -26
  383. package/src/store/gi/item-comparators.ts +3 -5
  384. package/src/store/gi/method.ts +98 -42
  385. package/src/store/gi/param-marshal.ts +15 -1
  386. package/src/store/gi/pipeline.ts +7 -2
  387. package/src/store/gi/properties.ts +3 -2
  388. package/src/store/gi/property-accessor.ts +9 -4
  389. package/src/store/gi/record-constructor.ts +6 -1
  390. package/src/store/gi/record-field-accessor.ts +5 -3
  391. package/src/store/gi/record-layout.ts +1 -1
  392. package/src/store/gi/record.ts +8 -2
  393. package/src/store/gi/registration.ts +3 -3
  394. package/src/store/gi/runtime-override.ts +13 -6
  395. package/src/store/gi/signal.ts +19 -20
  396. package/src/store/gi/value-marshalable.ts +1 -1
  397. package/src/store/gi/vtable.ts +361 -60
  398. package/src/store/jsx/element-components.ts +8 -5
  399. package/src/store/jsx/element-prop-imports.ts +1 -3
  400. package/src/store/jsx/element-prop-types.ts +10 -1
  401. package/src/store/jsx/intrinsic-elements.ts +4 -0
  402. package/src/store/jsx/jsx.ts +8 -6
  403. package/src/store/jsx/metadata.ts +2 -2
  404. package/src/store/jsx/pipeline.ts +1 -1
  405. package/src/store/jsx/props.ts +20 -7
  406. package/src/writer/context.ts +5 -1
  407. package/src/writer/doc-tags.ts +70 -0
  408. package/src/writer/doc.ts +29 -6
  409. package/src/writer/gtk-doc.ts +82 -15
  410. package/src/writer/module.ts +25 -2
@@ -3,9 +3,9 @@ import { renderDescriptor } from "../../analysis/descriptor-render.js";
3
3
  import { inputParameters } from "../../analysis/param-structure.js";
4
4
  import { renderTsType } from "../../analysis/ts-type.js";
5
5
  import { isConstructableProperty } from "../../gir/property.js";
6
- import { renderJsDoc } from "../../writer/doc.js";
7
6
  import { renderBlock } from "../../writer/emit.js";
8
7
  import { isEmittableCallable } from "./callables.js";
8
+ import { getDoc } from "./doc-spec.js";
9
9
  import { methodExportName, renderMethodReturnType } from "./method.js";
10
10
  const isNullablePropertyType = (context, type) => {
11
11
  if (type === undefined) {
@@ -69,7 +69,7 @@ const resolveAccessor = (args) => {
69
69
  }
70
70
  const ownType = resolveOwnType(context, property, getterMethod, setterMethod);
71
71
  const tsType = resolveTsType(args.inheritedType, ownType);
72
- return { jsName, tsType, hasGetter, isWritable, getterMember, getterMethod, setterMember };
72
+ return { property, jsName, tsType, hasGetter, isWritable, getterMember, getterMethod, setterMember };
73
73
  };
74
74
  const resolveOwnerAccessor = (context, property, methods) => {
75
75
  const methodByName = new Map();
@@ -102,11 +102,12 @@ const renderResolvedPropertyAccessor = (context, property, accessor) => {
102
102
  const setterBody = setterMember === undefined ? renderGenericSetBody(context, property) : `this.${setterMember}(value);`;
103
103
  blocks.push(renderBlock(`set ${jsName}(value: ${tsType})`, setterBody));
104
104
  }
105
- return `${renderJsDoc(property.doc)}${blocks.join("\n\n")}`;
105
+ return `${propertyDoc(property)}${blocks.join("\n\n")}`;
106
106
  };
107
+ const propertyDoc = (property) => getDoc(property);
107
108
  const renderPropertyAccessor = (args) => withAccessor(args, (accessor) => renderResolvedPropertyAccessor(args.context, args.property, accessor));
108
109
  const renderPropertyAccessorSignature = (args) => withAccessor(args, ({ jsName, tsType, hasGetter, isWritable }) => {
109
- const doc = renderJsDoc(args.property.doc);
110
+ const doc = propertyDoc(args.property);
110
111
  if (hasGetter && isWritable) {
111
112
  return `${doc}${jsName}: ${tsType};`;
112
113
  }
@@ -152,5 +153,5 @@ const delegateMember = (attribute, accessorName, claimedNames) => {
152
153
  }
153
154
  return member;
154
155
  };
155
- export { resolveAccessor, resolveOwnerAccessor, resolveAccessorType, renderResolvedPropertyAccessor, renderPropertyAccessor, renderPropertyAccessorSignature, };
156
+ export { propertyDoc, resolveAccessor, resolveOwnerAccessor, resolveAccessorType, renderResolvedPropertyAccessor, renderPropertyAccessor, renderPropertyAccessorSignature, };
156
157
  //# sourceMappingURL=property-accessor.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"property-accessor.js","sourceRoot":"","sources":["../../../src/store/gi/property-accessor.ts"],"names":[],"mappings":"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","sourcesContent":["import { camelCase, sourceStringLiteral, toCamelIdentifier } from \"@gtkx/utils\";\nimport type { GirFunction } from \"../../gir/function.js\";\nimport type { TypeId } from \"../../gir/type-id.js\";\nimport type { ModuleContext } from \"../../writer/context.js\";\nimport { renderDescriptor } from \"../../analysis/descriptor-render.js\";\nimport { inputParameters } from \"../../analysis/param-structure.js\";\nimport { renderTsType } from \"../../analysis/ts-type.js\";\nimport { type GirProperty, isConstructableProperty } from \"../../gir/property.js\";\nimport { renderJsDoc } from \"../../writer/doc.js\";\nimport { renderBlock } from \"../../writer/emit.js\";\nimport { isEmittableCallable } from \"./callables.js\";\nimport { methodExportName, renderMethodReturnType } from \"./method.js\";\n\ntype ResolvedAccessor = {\n jsName: string;\n tsType: string;\n hasGetter: boolean;\n isWritable: boolean;\n getterMember: string | undefined;\n getterMethod: GirFunction | undefined;\n setterMember: string | undefined;\n};\n\ntype PropertyAccessorArgs = {\n context: ModuleContext;\n property: GirProperty;\n claimedNames: Set<string>;\n methodByName: Map<string, GirFunction>;\n inheritedType?: string | undefined;\n};\n\ntype AccessorDelegate = { member: string | undefined; method: GirFunction | undefined };\n\ntype GetterBodyOptions = {\n context: ModuleContext;\n property: GirProperty;\n getterMember: string | undefined;\n getterMethod: GirFunction | undefined;\n tsType: string;\n};\n\nconst isNullablePropertyType = (context: ModuleContext, type: TypeId | undefined): boolean => {\n if (type === undefined) {\n return false;\n }\n\n const resolved = context.library.typeFor(type);\n\n if (resolved === undefined) {\n return true;\n }\n\n if (resolved.kind === \"primitive\") {\n return false;\n }\n\n if (resolved.kind === \"enum\") {\n return false;\n }\n\n if (resolved.kind === \"alias\") {\n return isNullablePropertyType(context, resolved.value.target);\n }\n\n return true;\n};\n\nconst resolveDelegate = (\n args: PropertyAccessorArgs,\n attribute: string | undefined,\n member: string | undefined,\n isDelegatable: (method: GirFunction) => boolean,\n): AccessorDelegate => {\n const method = member !== undefined && attribute !== undefined ? args.methodByName.get(attribute) : undefined;\n const canDelegate = method === undefined || isDelegatable(method);\n\n return canDelegate ? { member, method } : { member: undefined, method: undefined };\n};\n\nconst resolveGetterDelegate = (args: PropertyAccessorArgs, jsName: string): AccessorDelegate => {\n const { context, property, claimedNames } = args;\n const member = delegateMember(property.getter, jsName, claimedNames);\n\n return resolveDelegate(\n args,\n property.getter,\n member,\n (method) =>\n inputParameters(context.library, method).length === 0 &&\n !renderMethodReturnType(context, method).startsWith(\"[\"),\n );\n};\n\nconst resolveSetterDelegate = (args: PropertyAccessorArgs, jsName: string, isWritable: boolean): AccessorDelegate => {\n const { context, property, claimedNames } = args;\n const member = isWritable ? delegateMember(property.setter, jsName, claimedNames) : undefined;\n\n return resolveDelegate(\n args,\n property.setter,\n member,\n (method) => inputParameters(context.library, method).length === 1,\n );\n};\n\nconst resolveOwnType = (\n context: ModuleContext,\n property: GirProperty,\n getterMethod: GirFunction | undefined,\n setterMethod: GirFunction | undefined,\n): string => {\n const setterParam = setterMethod?.parameters[0];\n\n if (setterParam !== undefined) {\n return renderTsType(context, setterParam.type, setterParam.nullable || setterParam.optional);\n }\n\n if (getterMethod !== undefined) {\n return renderMethodReturnType(context, getterMethod);\n }\n\n return renderTsType(context, property.type, isNullablePropertyType(context, property.type));\n};\n\nconst isSkippedAccessor = (property: GirProperty, jsName: string, claimedNames: Set<string>): boolean =>\n !property.introspectable || claimedNames.has(jsName) || jsName === \"constructor\";\n\nconst resolveTsType = (inheritedType: string | undefined, ownType: string): string =>\n inheritedType !== undefined && inheritedType !== ownType ? inheritedType : ownType;\n\nconst resolveAccessor = (args: PropertyAccessorArgs): ResolvedAccessor | undefined => {\n const { context, property, claimedNames } = args;\n const jsName = toCamelIdentifier(property.name);\n\n if (isSkippedAccessor(property, jsName, claimedNames)) {\n return undefined;\n }\n\n const isWritable = isConstructableProperty(property) && !property.constructOnly;\n const { member: getterMember, method: getterMethod } = resolveGetterDelegate(args, jsName);\n const { member: setterMember, method: setterMethod } = resolveSetterDelegate(args, jsName, isWritable);\n const hasGetter = property.readable || getterMember !== undefined;\n\n if (!hasGetter && !isWritable) {\n return undefined;\n }\n\n const ownType = resolveOwnType(context, property, getterMethod, setterMethod);\n const tsType = resolveTsType(args.inheritedType, ownType);\n\n return { jsName, tsType, hasGetter, isWritable, getterMember, getterMethod, setterMember };\n};\n\nconst resolveOwnerAccessor = (\n context: ModuleContext,\n property: GirProperty,\n methods: GirFunction[],\n): ResolvedAccessor | undefined => {\n const methodByName: Map<string, GirFunction> = new Map();\n const claimedNames: Set<string> = new Set();\n\n for (const method of methods) {\n if (!isEmittableCallable(context, method)) {\n continue;\n }\n\n methodByName.set(method.name, method);\n claimedNames.add(methodExportName(method));\n }\n\n return resolveAccessor({ context, property, claimedNames, methodByName });\n};\n\nconst resolveAccessorType = (\n context: ModuleContext,\n property: GirProperty,\n methods: GirFunction[],\n): string | undefined => resolveOwnerAccessor(context, property, methods)?.tsType;\n\nconst withAccessor = (\n args: PropertyAccessorArgs,\n render: (accessor: ResolvedAccessor) => string,\n): string | undefined => {\n const accessor = resolveAccessor(args);\n\n if (accessor === undefined) {\n return undefined;\n }\n\n return render(accessor);\n};\n\nconst renderResolvedPropertyAccessor = (\n context: ModuleContext,\n property: GirProperty,\n accessor: ResolvedAccessor,\n): string => {\n const { jsName, tsType, hasGetter, isWritable, getterMember, getterMethod, setterMember } = accessor;\n const blocks: string[] = [];\n\n if (hasGetter) {\n const getterBody = renderGetterBody({ context, property, getterMember, getterMethod, tsType });\n blocks.push(renderBlock(`get ${jsName}(): ${tsType}`, getterBody));\n }\n\n if (isWritable) {\n const setterBody =\n setterMember === undefined ? renderGenericSetBody(context, property) : `this.${setterMember}(value);`;\n\n blocks.push(renderBlock(`set ${jsName}(value: ${tsType})`, setterBody));\n }\n\n return `${renderJsDoc(property.doc)}${blocks.join(\"\\n\\n\")}`;\n};\n\nconst renderPropertyAccessor = (args: PropertyAccessorArgs): string | undefined =>\n withAccessor(args, (accessor) => renderResolvedPropertyAccessor(args.context, args.property, accessor));\n\nconst renderPropertyAccessorSignature = (args: PropertyAccessorArgs): string | undefined =>\n withAccessor(args, ({ jsName, tsType, hasGetter, isWritable }) => {\n const doc = renderJsDoc(args.property.doc);\n\n if (hasGetter && isWritable) {\n return `${doc}${jsName}: ${tsType};`;\n }\n\n if (hasGetter) {\n return `${doc}get ${jsName}(): ${tsType};`;\n }\n\n return `${doc}set ${jsName}(value: ${tsType});`;\n });\n\nconst renderPropertyDescriptor = (context: ModuleContext, property: GirProperty): string =>\n renderDescriptor(context, property.type, property.transferOwnership);\n\nconst renderGenericGetBody = (context: ModuleContext, property: GirProperty, tsType: string): string => {\n context.addRuntimeImport(\"getObjectProperty\");\n context.addRuntimeImport(\"t\");\n const descriptor = renderPropertyDescriptor(context, property);\n\n return `return getObjectProperty(this, ${sourceStringLiteral(property.name)}, ${descriptor}) as ${tsType};`;\n};\n\nconst renderGenericSetBody = (context: ModuleContext, property: GirProperty): string => {\n context.addRuntimeImport(\"setObjectProperty\");\n context.addRuntimeImport(\"t\");\n const descriptor = renderPropertyDescriptor(context, property);\n\n return `setObjectProperty(this, ${sourceStringLiteral(property.name)}, ${descriptor}, value);`;\n};\n\nconst renderGetterBody = (options: GetterBodyOptions): string => {\n const { context, property, getterMember, getterMethod, tsType } = options;\n\n if (getterMember === undefined) {\n return renderGenericGetBody(context, property, tsType);\n }\n\n if (getterMethod === undefined) {\n return `return this.${getterMember}() as ${tsType};`;\n }\n\n const getterType = renderMethodReturnType(context, getterMethod);\n\n return getterType === tsType ? `return this.${getterMember}();` : `return this.${getterMember}() as ${tsType};`;\n};\n\nconst delegateMember = (\n attribute: string | undefined,\n accessorName: string,\n claimedNames: Set<string>,\n): string | undefined => {\n if (attribute === undefined) {\n return undefined;\n }\n\n const member = camelCase(attribute);\n\n if (member === accessorName) {\n return undefined;\n }\n\n if (!claimedNames.has(member)) {\n return undefined;\n }\n\n return member;\n};\n\nexport {\n resolveAccessor,\n resolveOwnerAccessor,\n resolveAccessorType,\n renderResolvedPropertyAccessor,\n renderPropertyAccessor,\n renderPropertyAccessorSignature,\n type ResolvedAccessor,\n type PropertyAccessorArgs,\n};\n"]}
1
+ {"version":3,"file":"property-accessor.js","sourceRoot":"","sources":["../../../src/store/gi/property-accessor.ts"],"names":[],"mappings":"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","sourcesContent":["import { camelCase, sourceStringLiteral, toCamelIdentifier } from \"@gtkx/utils\";\nimport type { GirFunction } from \"../../gir/function.js\";\nimport type { TypeId } from \"../../gir/type-id.js\";\nimport type { ModuleContext } from \"../../writer/context.js\";\nimport { renderDescriptor } from \"../../analysis/descriptor-render.js\";\nimport { inputParameters } from \"../../analysis/param-structure.js\";\nimport { renderTsType } from \"../../analysis/ts-type.js\";\nimport { type GirProperty, isConstructableProperty } from \"../../gir/property.js\";\nimport { renderBlock } from \"../../writer/emit.js\";\nimport { isEmittableCallable } from \"./callables.js\";\nimport { getDoc } from \"./doc-spec.js\";\nimport { methodExportName, renderMethodReturnType } from \"./method.js\";\n\ntype ResolvedAccessor = {\n property: GirProperty;\n jsName: string;\n tsType: string;\n hasGetter: boolean;\n isWritable: boolean;\n getterMember: string | undefined;\n getterMethod: GirFunction | undefined;\n setterMember: string | undefined;\n};\n\ntype PropertyAccessorArgs = {\n context: ModuleContext;\n property: GirProperty;\n claimedNames: Set<string>;\n methodByName: Map<string, GirFunction>;\n inheritedType?: string | undefined;\n};\n\ntype AccessorDelegate = { member: string | undefined; method: GirFunction | undefined };\n\ntype GetterBodyOptions = {\n context: ModuleContext;\n property: GirProperty;\n getterMember: string | undefined;\n getterMethod: GirFunction | undefined;\n tsType: string;\n};\n\nconst isNullablePropertyType = (context: ModuleContext, type: TypeId | undefined): boolean => {\n if (type === undefined) {\n return false;\n }\n\n const resolved = context.library.typeFor(type);\n\n if (resolved === undefined) {\n return true;\n }\n\n if (resolved.kind === \"primitive\") {\n return false;\n }\n\n if (resolved.kind === \"enum\") {\n return false;\n }\n\n if (resolved.kind === \"alias\") {\n return isNullablePropertyType(context, resolved.value.target);\n }\n\n return true;\n};\n\nconst resolveDelegate = (\n args: PropertyAccessorArgs,\n attribute: string | undefined,\n member: string | undefined,\n isDelegatable: (method: GirFunction) => boolean,\n): AccessorDelegate => {\n const method = member !== undefined && attribute !== undefined ? args.methodByName.get(attribute) : undefined;\n const canDelegate = method === undefined || isDelegatable(method);\n\n return canDelegate ? { member, method } : { member: undefined, method: undefined };\n};\n\nconst resolveGetterDelegate = (args: PropertyAccessorArgs, jsName: string): AccessorDelegate => {\n const { context, property, claimedNames } = args;\n const member = delegateMember(property.getter, jsName, claimedNames);\n\n return resolveDelegate(\n args,\n property.getter,\n member,\n (method) =>\n inputParameters(context.library, method).length === 0 &&\n !renderMethodReturnType(context, method).startsWith(\"[\"),\n );\n};\n\nconst resolveSetterDelegate = (args: PropertyAccessorArgs, jsName: string, isWritable: boolean): AccessorDelegate => {\n const { context, property, claimedNames } = args;\n const member = isWritable ? delegateMember(property.setter, jsName, claimedNames) : undefined;\n\n return resolveDelegate(\n args,\n property.setter,\n member,\n (method) => inputParameters(context.library, method).length === 1,\n );\n};\n\nconst resolveOwnType = (\n context: ModuleContext,\n property: GirProperty,\n getterMethod: GirFunction | undefined,\n setterMethod: GirFunction | undefined,\n): string => {\n const setterParam = setterMethod?.parameters[0];\n\n if (setterParam !== undefined) {\n return renderTsType(context, setterParam.type, setterParam.nullable || setterParam.optional);\n }\n\n if (getterMethod !== undefined) {\n return renderMethodReturnType(context, getterMethod);\n }\n\n return renderTsType(context, property.type, isNullablePropertyType(context, property.type));\n};\n\nconst isSkippedAccessor = (property: GirProperty, jsName: string, claimedNames: Set<string>): boolean =>\n !property.introspectable || claimedNames.has(jsName) || jsName === \"constructor\";\n\nconst resolveTsType = (inheritedType: string | undefined, ownType: string): string =>\n inheritedType !== undefined && inheritedType !== ownType ? inheritedType : ownType;\n\nconst resolveAccessor = (args: PropertyAccessorArgs): ResolvedAccessor | undefined => {\n const { context, property, claimedNames } = args;\n const jsName = toCamelIdentifier(property.name);\n\n if (isSkippedAccessor(property, jsName, claimedNames)) {\n return undefined;\n }\n\n const isWritable = isConstructableProperty(property) && !property.constructOnly;\n const { member: getterMember, method: getterMethod } = resolveGetterDelegate(args, jsName);\n const { member: setterMember, method: setterMethod } = resolveSetterDelegate(args, jsName, isWritable);\n const hasGetter = property.readable || getterMember !== undefined;\n\n if (!hasGetter && !isWritable) {\n return undefined;\n }\n\n const ownType = resolveOwnType(context, property, getterMethod, setterMethod);\n const tsType = resolveTsType(args.inheritedType, ownType);\n\n return { property, jsName, tsType, hasGetter, isWritable, getterMember, getterMethod, setterMember };\n};\n\nconst resolveOwnerAccessor = (\n context: ModuleContext,\n property: GirProperty,\n methods: GirFunction[],\n): ResolvedAccessor | undefined => {\n const methodByName: Map<string, GirFunction> = new Map();\n const claimedNames: Set<string> = new Set();\n\n for (const method of methods) {\n if (!isEmittableCallable(context, method)) {\n continue;\n }\n\n methodByName.set(method.name, method);\n claimedNames.add(methodExportName(method));\n }\n\n return resolveAccessor({ context, property, claimedNames, methodByName });\n};\n\nconst resolveAccessorType = (\n context: ModuleContext,\n property: GirProperty,\n methods: GirFunction[],\n): string | undefined => resolveOwnerAccessor(context, property, methods)?.tsType;\n\nconst withAccessor = (\n args: PropertyAccessorArgs,\n render: (accessor: ResolvedAccessor) => string,\n): string | undefined => {\n const accessor = resolveAccessor(args);\n\n if (accessor === undefined) {\n return undefined;\n }\n\n return render(accessor);\n};\n\nconst renderResolvedPropertyAccessor = (\n context: ModuleContext,\n property: GirProperty,\n accessor: ResolvedAccessor,\n): string => {\n const { jsName, tsType, hasGetter, isWritable, getterMember, getterMethod, setterMember } = accessor;\n const blocks: string[] = [];\n\n if (hasGetter) {\n const getterBody = renderGetterBody({ context, property, getterMember, getterMethod, tsType });\n blocks.push(renderBlock(`get ${jsName}(): ${tsType}`, getterBody));\n }\n\n if (isWritable) {\n const setterBody =\n setterMember === undefined ? renderGenericSetBody(context, property) : `this.${setterMember}(value);`;\n\n blocks.push(renderBlock(`set ${jsName}(value: ${tsType})`, setterBody));\n }\n\n return `${propertyDoc(property)}${blocks.join(\"\\n\\n\")}`;\n};\n\nconst propertyDoc = (property: GirProperty): string =>\n getDoc(property);\n\nconst renderPropertyAccessor = (args: PropertyAccessorArgs): string | undefined =>\n withAccessor(args, (accessor) => renderResolvedPropertyAccessor(args.context, args.property, accessor));\n\nconst renderPropertyAccessorSignature = (args: PropertyAccessorArgs): string | undefined =>\n withAccessor(args, ({ jsName, tsType, hasGetter, isWritable }) => {\n const doc = propertyDoc(args.property);\n\n if (hasGetter && isWritable) {\n return `${doc}${jsName}: ${tsType};`;\n }\n\n if (hasGetter) {\n return `${doc}get ${jsName}(): ${tsType};`;\n }\n\n return `${doc}set ${jsName}(value: ${tsType});`;\n });\n\nconst renderPropertyDescriptor = (context: ModuleContext, property: GirProperty): string =>\n renderDescriptor(context, property.type, property.transferOwnership);\n\nconst renderGenericGetBody = (context: ModuleContext, property: GirProperty, tsType: string): string => {\n context.addRuntimeImport(\"getObjectProperty\");\n context.addRuntimeImport(\"t\");\n const descriptor = renderPropertyDescriptor(context, property);\n\n return `return getObjectProperty(this, ${sourceStringLiteral(property.name)}, ${descriptor}) as ${tsType};`;\n};\n\nconst renderGenericSetBody = (context: ModuleContext, property: GirProperty): string => {\n context.addRuntimeImport(\"setObjectProperty\");\n context.addRuntimeImport(\"t\");\n const descriptor = renderPropertyDescriptor(context, property);\n\n return `setObjectProperty(this, ${sourceStringLiteral(property.name)}, ${descriptor}, value);`;\n};\n\nconst renderGetterBody = (options: GetterBodyOptions): string => {\n const { context, property, getterMember, getterMethod, tsType } = options;\n\n if (getterMember === undefined) {\n return renderGenericGetBody(context, property, tsType);\n }\n\n if (getterMethod === undefined) {\n return `return this.${getterMember}() as ${tsType};`;\n }\n\n const getterType = renderMethodReturnType(context, getterMethod);\n\n return getterType === tsType ? `return this.${getterMember}();` : `return this.${getterMember}() as ${tsType};`;\n};\n\nconst delegateMember = (\n attribute: string | undefined,\n accessorName: string,\n claimedNames: Set<string>,\n): string | undefined => {\n if (attribute === undefined) {\n return undefined;\n }\n\n const member = camelCase(attribute);\n\n if (member === accessorName) {\n return undefined;\n }\n\n if (!claimedNames.has(member)) {\n return undefined;\n }\n\n return member;\n};\n\nexport {\n propertyDoc,\n resolveAccessor,\n resolveOwnerAccessor,\n resolveAccessorType,\n renderResolvedPropertyAccessor,\n renderPropertyAccessor,\n renderPropertyAccessorSignature,\n type ResolvedAccessor,\n type PropertyAccessorArgs,\n};\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"record-constructor.d.ts","sourceRoot":"","sources":["../../../src/store/gi/record-constructor.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAErD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAgB7D,QAAA,MAAM,qCAAqC,GACvC,SAAS,aAAa,EACtB,QAAQ,SAAS,EACjB,WAAW,MAAM,KAClB,MAcF,CAAC;AAyBF,QAAA,MAAM,uBAAuB,GACzB,SAAS,aAAa,EACtB,QAAQ,SAAS,EACjB,WAAW,MAAM,EACjB,yBAAuB,KACxB,MAwBF,CAAC;AA+BF,OAAO,EAAE,qCAAqC,EAAE,uBAAuB,EAAE,CAAC"}
1
+ {"version":3,"file":"record-constructor.d.ts","sourceRoot":"","sources":["../../../src/store/gi/record-constructor.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAErD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAiB7D,QAAA,MAAM,qCAAqC,GACvC,SAAS,aAAa,EACtB,QAAQ,SAAS,EACjB,WAAW,MAAM,KAClB,MAkBF,CAAC;AAyBF,QAAA,MAAM,uBAAuB,GACzB,SAAS,aAAa,EACtB,QAAQ,SAAS,EACjB,WAAW,MAAM,EACjB,yBAAuB,KACxB,MAwBF,CAAC;AA+BF,OAAO,EAAE,qCAAqC,EAAE,uBAAuB,EAAE,CAAC"}
@@ -2,6 +2,7 @@ import { sourceStringLiteral, toCamelIdentifier } from "@gtkx/utils";
2
2
  import { renderDescriptor } from "../../analysis/descriptor-render.js";
3
3
  import { renderTsType } from "../../analysis/ts-type.js";
4
4
  import { renderBlock, renderBracedOrEmpty } from "../../writer/emit.js";
5
+ import { getDoc } from "./doc-spec.js";
5
6
  import { renderSourceGtype } from "./gtype-binding.js";
6
7
  import { emitFieldWrite, isEmittableField, isInlineField } from "./record-field-accessor.js";
7
8
  import { computeRecordFieldSlots } from "./record-layout.js";
@@ -16,7 +17,8 @@ const renderRecordConstructorPropsInterface = (context, record, className) => {
16
17
  const { slots } = computeRecordFieldSlots(context, record.fields, record.isUnion);
17
18
  const lines = slots
18
19
  .filter((entry) => isWritableFieldSlot(context, entry))
19
- .map((entry) => `${toCamelIdentifier(entry.field.name)}?: ${renderTsType(context, entry.field.type, true)};`);
20
+ .map((entry) => `${getDoc(entry.field)}${toCamelIdentifier(entry.field.name)}?: ` +
21
+ `${renderTsType(context, entry.field.type, true)};`);
20
22
  return renderBracedOrEmpty(head, lines.join("\n"));
21
23
  };
22
24
  const renderOpaqueConstructor = (className, superCall) => {
@@ -1 +1 @@
1
- {"version":3,"file":"record-constructor.js","sourceRoot":"","sources":["../../../src/store/gi/record-constructor.ts"],"names":[],"mappings":"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","sourcesContent":["import { sourceStringLiteral, toCamelIdentifier } from \"@gtkx/utils\";\nimport type { GirField } from \"../../gir/field.js\";\nimport type { GirRecord } from \"../../gir/record.js\";\nimport type { TypeId } from \"../../gir/type-id.js\";\nimport type { ModuleContext } from \"../../writer/context.js\";\nimport { renderDescriptor } from \"../../analysis/descriptor-render.js\";\nimport { renderTsType } from \"../../analysis/ts-type.js\";\nimport { renderBlock, renderBracedOrEmpty } from \"../../writer/emit.js\";\nimport { renderSourceGtype } from \"./gtype-binding.js\";\nimport { emitFieldWrite, isEmittableField, isInlineField } from \"./record-field-accessor.js\";\nimport { computeRecordFieldSlots, type RecordFieldSlot } from \"./record-layout.js\";\nimport { isConstructibleRecord } from \"./value-marshalable.js\";\n\ntype WritableFieldSlot = RecordFieldSlot & { field: GirField & { type: TypeId } };\n\nconst isWritableFieldSlot = (context: ModuleContext, entry: RecordFieldSlot): entry is WritableFieldSlot =>\n entry.field.writable && isEmittableField(context, entry.field);\n\nconst isOpaque = (record: GirRecord): boolean => record.opaque || record.disguised;\n\nconst renderRecordConstructorPropsInterface = (\n context: ModuleContext,\n record: GirRecord,\n className: string,\n): string => {\n const head = `export interface ${className}ConstructorProps`;\n\n if (isOpaque(record) || !isConstructibleRecord(context, context.namespace.name, record)) {\n return renderBracedOrEmpty(head, \"\");\n }\n\n const { slots } = computeRecordFieldSlots(context, record.fields, record.isUnion);\n\n const lines = slots\n .filter((entry): entry is WritableFieldSlot => isWritableFieldSlot(context, entry))\n .map((entry) => `${toCamelIdentifier(entry.field.name)}?: ${renderTsType(context, entry.field.type, true)};`);\n\n return renderBracedOrEmpty(head, lines.join(\"\\n\"));\n};\n\nconst renderOpaqueConstructor = (className: string, superCall: string[]): string => {\n const message = sourceStringLiteral(`Cannot construct ${className}: opaque boxed type with no known layout`);\n\n return renderBlock(\"constructor()\", [...superCall, `throw new globalThis.Error(${message});`].join(\"\\n\"));\n};\n\nconst renderEmptyConstructor = (className: string, isErrorSubclass: boolean): string =>\n isErrorSubclass\n ? renderBlock(`constructor(props: ${className}ConstructorProps = {})`, \"super();\")\n : `constructor(props: ${className}ConstructorProps = {}) {}`;\n\nconst renderFieldWrites = (context: ModuleContext, slots: RecordFieldSlot[]): string[] => {\n const statements: string[] = [];\n\n for (const entry of slots) {\n if (isWritableFieldSlot(context, entry)) {\n statements.push(renderFieldWrite(context, entry));\n }\n }\n\n return statements;\n};\n\nconst renderRecordConstructor = (\n context: ModuleContext,\n record: GirRecord,\n className: string,\n isErrorSubclass = false,\n): string => {\n const superCall = isErrorSubclass ? [\"super();\"] : [];\n\n if (isOpaque(record) || !isConstructibleRecord(context, context.namespace.name, record)) {\n return renderOpaqueConstructor(className, superCall);\n }\n\n const { slots, size } = computeRecordFieldSlots(context, record.fields, record.isUnion);\n\n if (size === 0) {\n return renderEmptyConstructor(className, isErrorSubclass);\n }\n\n context.addRuntimeImport(\"alloc\");\n context.addRuntimeImport(\"setHandle\");\n\n const statements = [\n ...superCall,\n `const handle = alloc(${allocArgs(context, record, size).join(\", \")});`,\n ...renderFieldWrites(context, slots),\n \"setHandle(this, handle);\",\n ];\n\n return renderBlock(`constructor(props: ${className}ConstructorProps = {})`, statements.join(\"\\n\"));\n};\n\nconst allocArgs = (context: ModuleContext, record: GirRecord, size: number): string[] => {\n const args = [String(size)];\n\n if (renderSourceGtype(context, record) !== undefined) {\n args.push(\"this.__type__\");\n }\n\n return args;\n};\n\nconst renderFieldWrite = (context: ModuleContext, entry: WritableFieldSlot): string => {\n context.addRuntimeImport(\"t\");\n\n const descriptor = context.hoistDescriptor(\n renderDescriptor(context, entry.field.type, \"none\", { isInline: isInlineField(context, entry.field) }),\n );\n\n const name = toCamelIdentifier(entry.field.name);\n\n const write = emitFieldWrite(context, {\n descriptor,\n slot: entry.slot,\n targetExpr: \"handle\",\n valueExpr: `props.${name}`,\n });\n\n return `if (props.${name} !== undefined) ${write}`;\n};\n\nexport { renderRecordConstructorPropsInterface, renderRecordConstructor };\n"]}
1
+ {"version":3,"file":"record-constructor.js","sourceRoot":"","sources":["../../../src/store/gi/record-constructor.ts"],"names":[],"mappings":"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","sourcesContent":["import { sourceStringLiteral, toCamelIdentifier } from \"@gtkx/utils\";\nimport type { GirField } from \"../../gir/field.js\";\nimport type { GirRecord } from \"../../gir/record.js\";\nimport type { TypeId } from \"../../gir/type-id.js\";\nimport type { ModuleContext } from \"../../writer/context.js\";\nimport { renderDescriptor } from \"../../analysis/descriptor-render.js\";\nimport { renderTsType } from \"../../analysis/ts-type.js\";\nimport { renderBlock, renderBracedOrEmpty } from \"../../writer/emit.js\";\nimport { getDoc } from \"./doc-spec.js\";\nimport { renderSourceGtype } from \"./gtype-binding.js\";\nimport { emitFieldWrite, isEmittableField, isInlineField } from \"./record-field-accessor.js\";\nimport { computeRecordFieldSlots, type RecordFieldSlot } from \"./record-layout.js\";\nimport { isConstructibleRecord } from \"./value-marshalable.js\";\n\ntype WritableFieldSlot = RecordFieldSlot & { field: GirField & { type: TypeId } };\n\nconst isWritableFieldSlot = (context: ModuleContext, entry: RecordFieldSlot): entry is WritableFieldSlot =>\n entry.field.writable && isEmittableField(context, entry.field);\n\nconst isOpaque = (record: GirRecord): boolean => record.opaque || record.disguised;\n\nconst renderRecordConstructorPropsInterface = (\n context: ModuleContext,\n record: GirRecord,\n className: string,\n): string => {\n const head = `export interface ${className}ConstructorProps`;\n\n if (isOpaque(record) || !isConstructibleRecord(context, context.namespace.name, record)) {\n return renderBracedOrEmpty(head, \"\");\n }\n\n const { slots } = computeRecordFieldSlots(context, record.fields, record.isUnion);\n\n const lines = slots\n .filter((entry): entry is WritableFieldSlot => isWritableFieldSlot(context, entry))\n .map(\n (entry) =>\n `${getDoc(entry.field)}${toCamelIdentifier(entry.field.name)}?: ` +\n `${renderTsType(context, entry.field.type, true)};`,\n );\n\n return renderBracedOrEmpty(head, lines.join(\"\\n\"));\n};\n\nconst renderOpaqueConstructor = (className: string, superCall: string[]): string => {\n const message = sourceStringLiteral(`Cannot construct ${className}: opaque boxed type with no known layout`);\n\n return renderBlock(\"constructor()\", [...superCall, `throw new globalThis.Error(${message});`].join(\"\\n\"));\n};\n\nconst renderEmptyConstructor = (className: string, isErrorSubclass: boolean): string =>\n isErrorSubclass\n ? renderBlock(`constructor(props: ${className}ConstructorProps = {})`, \"super();\")\n : `constructor(props: ${className}ConstructorProps = {}) {}`;\n\nconst renderFieldWrites = (context: ModuleContext, slots: RecordFieldSlot[]): string[] => {\n const statements: string[] = [];\n\n for (const entry of slots) {\n if (isWritableFieldSlot(context, entry)) {\n statements.push(renderFieldWrite(context, entry));\n }\n }\n\n return statements;\n};\n\nconst renderRecordConstructor = (\n context: ModuleContext,\n record: GirRecord,\n className: string,\n isErrorSubclass = false,\n): string => {\n const superCall = isErrorSubclass ? [\"super();\"] : [];\n\n if (isOpaque(record) || !isConstructibleRecord(context, context.namespace.name, record)) {\n return renderOpaqueConstructor(className, superCall);\n }\n\n const { slots, size } = computeRecordFieldSlots(context, record.fields, record.isUnion);\n\n if (size === 0) {\n return renderEmptyConstructor(className, isErrorSubclass);\n }\n\n context.addRuntimeImport(\"alloc\");\n context.addRuntimeImport(\"setHandle\");\n\n const statements = [\n ...superCall,\n `const handle = alloc(${allocArgs(context, record, size).join(\", \")});`,\n ...renderFieldWrites(context, slots),\n \"setHandle(this, handle);\",\n ];\n\n return renderBlock(`constructor(props: ${className}ConstructorProps = {})`, statements.join(\"\\n\"));\n};\n\nconst allocArgs = (context: ModuleContext, record: GirRecord, size: number): string[] => {\n const args = [String(size)];\n\n if (renderSourceGtype(context, record) !== undefined) {\n args.push(\"this.__type__\");\n }\n\n return args;\n};\n\nconst renderFieldWrite = (context: ModuleContext, entry: WritableFieldSlot): string => {\n context.addRuntimeImport(\"t\");\n\n const descriptor = context.hoistDescriptor(\n renderDescriptor(context, entry.field.type, \"none\", { isInline: isInlineField(context, entry.field) }),\n );\n\n const name = toCamelIdentifier(entry.field.name);\n\n const write = emitFieldWrite(context, {\n descriptor,\n slot: entry.slot,\n targetExpr: \"handle\",\n valueExpr: `props.${name}`,\n });\n\n return `if (props.${name} !== undefined) ${write}`;\n};\n\nexport { renderRecordConstructorPropsInterface, renderRecordConstructor };\n"]}
@@ -1,3 +1,4 @@
1
+ import type { GirAnnotations } from "../../gir/annotations.js";
1
2
  import type { GirField } from "../../gir/field.js";
2
3
  import type { FieldSlot } from "../../gir/size.js";
3
4
  import type { TypeId } from "../../gir/type-id.js";
@@ -14,6 +15,7 @@ type RecordFieldEntry = {
14
15
  tsType: string;
15
16
  isWritable: boolean;
16
17
  doc: string | undefined;
18
+ annotations: GirAnnotations;
17
19
  };
18
20
  declare const isEmittableField: (context: ModuleContext, field: GirField) => field is GirField & {
19
21
  type: TypeId;
@@ -22,5 +24,5 @@ declare const emitFieldWrite: (context: ModuleContext, spec: FieldWriteSpec) =>
22
24
  declare const resolveRecordFieldEntry: (context: ModuleContext, slot: RecordFieldSlot, claimedNames: Set<string>) => RecordFieldEntry | undefined;
23
25
  declare const renderRecordFieldAccessor: (context: ModuleContext, slot: RecordFieldSlot, claimedNames: Set<string>, siblingFields: GirField[]) => string | undefined;
24
26
  declare const isInlineField: (context: ModuleContext, field: GirField) => boolean;
25
- export { isEmittableField, isInlineField, emitFieldWrite, resolveRecordFieldEntry, renderRecordFieldAccessor, type RecordFieldEntry, };
27
+ export { isEmittableField, isInlineField, emitFieldWrite, resolveRecordFieldEntry, renderRecordFieldAccessor, };
26
28
  //# sourceMappingURL=record-field-accessor.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"record-field-accessor.d.ts","sourceRoot":"","sources":["../../../src/store/gi/record-field-accessor.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAEnD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAM7D,OAAO,EAAmD,KAAK,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAI3G,KAAK,cAAc,GAAG;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,SAAS,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;CACrB,CAAC;AAOF,KAAK,gBAAgB,GAAG;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,OAAO,CAAC;IACpB,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC;CAC3B,CAAC;AA2EF,QAAA,MAAM,gBAAgB,GAAI,SAAS,aAAa,EAAE,OAAO,QAAQ,KAAG,KAAK,IAAI,QAAQ,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAIhE,CAAC;AAEvC,QAAA,MAAM,cAAc,GAAI,SAAS,aAAa,EAAE,MAAM,cAAc,KAAG,MAuBtE,CAAC;AA8BF,QAAA,MAAM,uBAAuB,GACzB,SAAS,aAAa,EACtB,MAAM,eAAe,EACrB,cAAc,GAAG,CAAC,MAAM,CAAC,KAC1B,gBAAgB,GAAG,SAarB,CAAC;AAEF,QAAA,MAAM,yBAAyB,GAC3B,SAAS,aAAa,EACtB,MAAM,eAAe,EACrB,cAAc,GAAG,CAAC,MAAM,CAAC,EACzB,eAAe,QAAQ,EAAE,KAC1B,MAAM,GAAG,SA2CX,CAAC;AAkCF,QAAA,MAAM,aAAa,GAAI,SAAS,aAAa,EAAE,OAAO,QAAQ,KAAG,OACwC,CAAC;AAwW1G,OAAO,EACH,gBAAgB,EAChB,aAAa,EACb,cAAc,EACd,uBAAuB,EACvB,yBAAyB,EACzB,KAAK,gBAAgB,GACxB,CAAC"}
1
+ {"version":3,"file":"record-field-accessor.d.ts","sourceRoot":"","sources":["../../../src/store/gi/record-field-accessor.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAEnD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAM7D,OAAO,EAAmD,KAAK,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAI3G,KAAK,cAAc,GAAG;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,SAAS,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;CACrB,CAAC;AAOF,KAAK,gBAAgB,GAAG;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,OAAO,CAAC;IACpB,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC;IACxB,WAAW,EAAE,cAAc,CAAC;CAC/B,CAAC;AA2EF,QAAA,MAAM,gBAAgB,GAAI,SAAS,aAAa,EAAE,OAAO,QAAQ,KAAG,KAAK,IAAI,QAAQ,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAIhE,CAAC;AAEvC,QAAA,MAAM,cAAc,GAAI,SAAS,aAAa,EAAE,MAAM,cAAc,KAAG,MAuBtE,CAAC;AA8BF,QAAA,MAAM,uBAAuB,GACzB,SAAS,aAAa,EACtB,MAAM,eAAe,EACrB,cAAc,GAAG,CAAC,MAAM,CAAC,KAC1B,gBAAgB,GAAG,SAcrB,CAAC;AAEF,QAAA,MAAM,yBAAyB,GAC3B,SAAS,aAAa,EACtB,MAAM,eAAe,EACrB,cAAc,GAAG,CAAC,MAAM,CAAC,EACzB,eAAe,QAAQ,EAAE,KAC1B,MAAM,GAAG,SA2CX,CAAC;AAkCF,QAAA,MAAM,aAAa,GAAI,SAAS,aAAa,EAAE,OAAO,QAAQ,KAAG,OACwC,CAAC;AAwW1G,OAAO,EACH,gBAAgB,EAChB,aAAa,EACb,cAAc,EACd,uBAAuB,EACvB,yBAAyB,GAC5B,CAAC"}
@@ -2,8 +2,8 @@ import { toCamelIdentifier } from "@gtkx/utils";
2
2
  import { isInlineCallbackRef, renderDescriptor } from "../../analysis/descriptor-render.js";
3
3
  import { tStruct } from "../../analysis/descriptor.js";
4
4
  import { renderTsType } from "../../analysis/ts-type.js";
5
- import { renderJsDoc } from "../../writer/doc.js";
6
5
  import { indent, renderBlock } from "../../writer/emit.js";
6
+ import { getDoc } from "./doc-spec.js";
7
7
  import { bitMask, computeRecordFieldSlots, mergeBitfield } from "./record-layout.js";
8
8
  import { wrapReturnValue } from "./return-wrap.js";
9
9
  import { isValueMarshalable } from "./value-marshalable.js";
@@ -60,6 +60,7 @@ const resolveRecordFieldEntry = (context, slot, claimedNames) => {
60
60
  tsType: renderTsType(context, admitted.field.type, false),
61
61
  isWritable: admitted.field.writable,
62
62
  doc: admitted.field.doc,
63
+ annotations: admitted.field.annotations,
63
64
  };
64
65
  };
65
66
  const renderRecordFieldAccessor = (context, slot, claimedNames, siblingFields) => {
@@ -68,7 +69,7 @@ const renderRecordFieldAccessor = (context, slot, claimedNames, siblingFields) =
68
69
  return undefined;
69
70
  }
70
71
  const { field, jsName } = admitted;
71
- const doc = renderJsDoc(field.doc);
72
+ const doc = getDoc(field);
72
73
  const structArray = renderStructArrayAccessor(context, { field, jsName, slot: slot.slot, siblingFields });
73
74
  if (structArray !== undefined) {
74
75
  return `${doc}${structArray}`;
@@ -1 +1 @@
1
- {"version":3,"file":"record-field-accessor.js","sourceRoot":"","sources":["../../../src/store/gi/record-field-accessor.ts"],"names":[],"mappings":"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","sourcesContent":["import { toCamelIdentifier } from \"@gtkx/utils\";\nimport type { GirField } from \"../../gir/field.js\";\nimport type { FieldSlot } from \"../../gir/size.js\";\nimport type { TypeId } from \"../../gir/type-id.js\";\nimport type { GirType } from \"../../gir/type.js\";\nimport type { ModuleContext } from \"../../writer/context.js\";\nimport { isInlineCallbackRef, renderDescriptor } from \"../../analysis/descriptor-render.js\";\nimport { tStruct } from \"../../analysis/descriptor.js\";\nimport { renderTsType } from \"../../analysis/ts-type.js\";\nimport { renderJsDoc } from \"../../writer/doc.js\";\nimport { indent, renderBlock } from \"../../writer/emit.js\";\nimport { bitMask, computeRecordFieldSlots, mergeBitfield, type RecordFieldSlot } from \"./record-layout.js\";\nimport { wrapReturnValue } from \"./return-wrap.js\";\nimport { isValueMarshalable } from \"./value-marshalable.js\";\n\ntype FieldWriteSpec = {\n descriptor: string;\n slot: FieldSlot;\n targetExpr: string;\n valueExpr: string;\n};\n\ntype AdmittedField = {\n field: GirField & { type: TypeId };\n jsName: string;\n};\n\ntype RecordFieldEntry = {\n jsName: string;\n tsType: string;\n isWritable: boolean;\n doc: string | undefined;\n};\n\ntype InlineFieldVisit = {\n jsName: string;\n descriptor: string;\n offset: number;\n slot: FieldSlot;\n type: TypeId;\n};\n\ntype InlineFieldVisitors = {\n leaf: (visit: InlineFieldVisit) => void;\n nested: (jsName: string, nested: GirField[], offset: number) => void;\n};\n\ntype ElementWriteOptions = {\n fields: GirField[];\n baseOffset: number;\n valuePath: string;\n out: string[];\n};\n\ntype StructArrayTarget = {\n field: GirField;\n jsName: string;\n slot: FieldSlot;\n siblingFields: GirField[];\n};\n\ntype StructArrayAccessorOptions = {\n context: ModuleContext;\n jsName: string;\n tsType: string;\n elementDescriptor: string;\n offset: number;\n lengthExpr: string;\n elementSize: number;\n elementFields: GirField[];\n};\n\ntype StructArrayResolution = {\n fieldType: TypeId;\n elementFields: GirField[];\n lengthExpr: string;\n elementSize: number;\n};\n\ntype StructArrayElements = {\n arrayType: Extract<GirType, { kind: \"carray\" }>;\n elementFields: GirField[];\n};\n\ntype AccessorOptions = {\n context: ModuleContext;\n jsName: string;\n tsType: string;\n descriptor: string;\n slot: FieldSlot;\n fieldType: TypeId;\n};\n\nconst isMarshalableField = (context: ModuleContext, field: GirField): boolean => {\n if (field.cType?.endsWith(\"*\") === true) {\n return true;\n }\n\n const type = field.type === undefined ? undefined : context.library.typeFor(field.type);\n\n if (type?.kind !== \"record\") {\n return true;\n }\n\n return isValueMarshalable(context, type.namespace.name, type.value);\n};\n\nconst isEmittableField = (context: ModuleContext, field: GirField): field is GirField & { type: TypeId } =>\n !field.private &&\n field.type !== undefined &&\n !isInlineCallbackRef(context.library, field.type) &&\n isMarshalableField(context, field);\n\nconst emitFieldWrite = (context: ModuleContext, spec: FieldWriteSpec): string => {\n const { descriptor, slot, targetExpr, valueExpr } = spec;\n context.addRuntimeImport(\"write\");\n\n if (slot.bitWidth === undefined) {\n context.addRuntimeImport(\"toNative\");\n\n return (\n `write(${targetExpr}, ${descriptor}, ${String(slot.byteOffset)}, ` +\n `toNative(${descriptor}, ${valueExpr}));`\n );\n }\n\n context.addRuntimeImport(\"read\");\n\n const merged = mergeBitfield(\n `(read(${targetExpr}, ${descriptor}, ${String(slot.byteOffset)}) as number)`,\n valueExpr,\n bitMask(slot.bitWidth),\n slot.bitOffset ?? 0,\n );\n\n return `write(${targetExpr}, ${descriptor}, ${String(slot.byteOffset)}, ${merged});`;\n};\n\nconst admitField = (\n context: ModuleContext,\n slot: RecordFieldSlot,\n claimedNames: Set<string>,\n): AdmittedField | undefined => {\n const { field } = slot;\n\n if (!field.readable && !field.writable) {\n return undefined;\n }\n\n if (!isEmittableField(context, field)) {\n return undefined;\n }\n\n const jsName = toCamelIdentifier(field.name);\n\n if (claimedNames.has(jsName)) {\n return undefined;\n }\n\n if (jsName === \"constructor\") {\n return undefined;\n }\n\n return { field, jsName };\n};\n\nconst resolveRecordFieldEntry = (\n context: ModuleContext,\n slot: RecordFieldSlot,\n claimedNames: Set<string>,\n): RecordFieldEntry | undefined => {\n const admitted = admitField(context, slot, claimedNames);\n\n if (admitted === undefined) {\n return undefined;\n }\n\n return {\n jsName: admitted.jsName,\n tsType: renderTsType(context, admitted.field.type, false),\n isWritable: admitted.field.writable,\n doc: admitted.field.doc,\n };\n};\n\nconst renderRecordFieldAccessor = (\n context: ModuleContext,\n slot: RecordFieldSlot,\n claimedNames: Set<string>,\n siblingFields: GirField[],\n): string | undefined => {\n const admitted = admitField(context, slot, claimedNames);\n\n if (admitted === undefined) {\n return undefined;\n }\n\n const { field, jsName } = admitted;\n const doc = renderJsDoc(field.doc);\n const structArray = renderStructArrayAccessor(context, { field, jsName, slot: slot.slot, siblingFields });\n\n if (structArray !== undefined) {\n return `${doc}${structArray}`;\n }\n\n if (!isAccessorEligibleType(context, field.type)) {\n const tsType = renderTsType(context, field.type, false);\n\n return `${doc}declare ${jsName}: ${tsType};`;\n }\n\n const descriptor = context.hoistDescriptor(\n renderDescriptor(context, field.type, \"none\", { isInline: isInlineField(context, field) }),\n );\n\n const tsType = renderTsType(context, field.type, false);\n\n const accessorOptions: AccessorOptions = {\n context,\n jsName,\n tsType,\n descriptor,\n slot: slot.slot,\n fieldType: field.type,\n };\n\n const blocks: string[] = [getterBlock(accessorOptions)];\n\n if (field.writable) {\n blocks.push(setterBlock(accessorOptions));\n }\n\n return `${doc}${blocks.join(\"\\n\\n\")}`;\n};\n\nconst isAccessorEligibleType = (context: ModuleContext, ref: TypeId): boolean => {\n const type = context.library.typeFor(ref);\n\n if (type === undefined) {\n return true;\n }\n\n switch (type.kind) {\n case \"primitive\": {\n return type.category !== \"void\" && type.category !== \"unichar\";\n }\n case \"class\":\n case \"interface\":\n case \"record\":\n case \"enum\":\n case \"alias\": {\n return true;\n }\n case \"callback\": {\n return context.library.nameFor(ref) !== undefined;\n }\n case \"carray\": {\n return type.fixedSize !== undefined;\n }\n case \"list\":\n case \"hashtable\":\n case \"varargs\": {\n return false;\n }\n }\n};\n\nconst isInlineField = (context: ModuleContext, field: GirField): boolean =>\n field.type !== undefined && resolveInlineStructFields(context, field.type, field.cType) !== undefined;\n\nconst resolveInlineStructFields = (\n context: ModuleContext,\n ref: TypeId | undefined,\n occurrenceCType: string | undefined,\n): GirField[] | undefined => {\n if (ref === undefined) {\n return undefined;\n }\n\n if (occurrenceCType?.endsWith(\"*\") === true) {\n return undefined;\n }\n\n const type = context.library.typeFor(ref);\n\n if (type?.kind !== \"record\") {\n return undefined;\n }\n\n if (type.value.cType?.endsWith(\"*\") === true) {\n return undefined;\n }\n\n if (type.value.fields.length === 0) {\n return undefined;\n }\n\n return type.value.fields;\n};\n\nconst arrayLengthExpression = (\n arrayRef: Extract<GirType, { kind: \"carray\" }>,\n siblingFields: GirField[],\n): string | undefined => {\n if (arrayRef.fixedSize !== undefined) {\n return String(arrayRef.fixedSize);\n }\n\n if (arrayRef.lengthParameterIndex === undefined) {\n return undefined;\n }\n\n const lengthField = siblingFields.filter((field) => !field.private)[arrayRef.lengthParameterIndex];\n\n if (lengthField === undefined) {\n return undefined;\n }\n\n return `this.${toCamelIdentifier(lengthField.name)}`;\n};\n\nconst visitInlineStructSlot = (\n context: ModuleContext,\n entry: RecordFieldSlot,\n baseOffset: number,\n visitors: InlineFieldVisitors,\n): void => {\n const { field, slot } = entry;\n\n if (field.private || field.type === undefined || isInlineCallbackRef(context.library, field.type)) {\n return;\n }\n\n const jsName = toCamelIdentifier(field.name);\n const offset = baseOffset + slot.byteOffset;\n const nested = resolveInlineStructFields(context, field.type, field.cType);\n\n if (nested !== undefined) {\n visitors.nested(jsName, nested, offset);\n\n return;\n }\n\n if (!isAccessorEligibleType(context, field.type)) {\n return;\n }\n\n const descriptor = context.hoistDescriptor(renderDescriptor(context, field.type, \"none\"));\n visitors.leaf({ jsName, descriptor, offset, slot, type: field.type });\n};\n\nconst visitInlineStructFields = (\n context: ModuleContext,\n fields: GirField[],\n baseOffset: number,\n visitors: InlineFieldVisitors,\n): void => {\n const { slots } = computeRecordFieldSlots(context, fields);\n\n for (const entry of slots) {\n visitInlineStructSlot(context, entry, baseOffset, visitors);\n }\n};\n\nconst elementAccessExpr = (descriptor: string, offset: number): string =>\n `read(__array, ${descriptor}, __base + ${String(offset)})`;\n\nconst renderElementReadEntry = (context: ModuleContext, visit: InlineFieldVisit): string => {\n const { jsName, descriptor, offset, slot, type } = visit;\n const access = elementAccessExpr(descriptor, offset);\n\n if (slot.bitWidth === undefined) {\n return `${jsName}: ${access} as ${renderTsType(context, type, false)}`;\n }\n\n const shift = slot.bitOffset ?? 0;\n\n return `${jsName}: (((${access} as number) >>> ${String(shift)}) & ${String(bitMask(slot.bitWidth))})`;\n};\n\nconst renderElementReadObject = (context: ModuleContext, fields: GirField[], baseOffset: number): string => {\n const entries: string[] = [];\n\n visitInlineStructFields(context, fields, baseOffset, {\n leaf: (visit) => {\n entries.push(renderElementReadEntry(context, visit));\n },\n nested: (jsName, nested, offset) => {\n entries.push(`${jsName}: ${renderElementReadObject(context, nested, offset)}`);\n },\n });\n\n return `{ ${entries.join(\", \")} }`;\n};\n\nconst renderElementWriteStatement = (visit: InlineFieldVisit, valuePath: string): string => {\n const { jsName, descriptor, offset, slot } = visit;\n const valueExpr = `${valuePath}.${jsName}`;\n\n if (slot.bitWidth === undefined) {\n return `write(__array, ${descriptor}, __base + ${String(offset)}, ${valueExpr});`;\n }\n\n const merged = mergeBitfield(\n `(${elementAccessExpr(descriptor, offset)} as number)`,\n valueExpr,\n bitMask(slot.bitWidth),\n slot.bitOffset ?? 0,\n );\n\n return `write(__array, ${descriptor}, __base + ${String(offset)}, ${merged});`;\n};\n\nconst appendElementWriteStatements = (context: ModuleContext, options: ElementWriteOptions): void => {\n const { fields, baseOffset, valuePath, out } = options;\n\n visitInlineStructFields(context, fields, baseOffset, {\n leaf: (visit) => {\n out.push(renderElementWriteStatement(visit, valuePath));\n },\n nested: (jsName, nested, offset) => {\n appendElementWriteStatements(context, {\n fields: nested,\n baseOffset: offset,\n valuePath: `${valuePath}.${jsName}`,\n out,\n });\n },\n });\n};\n\nconst structArrayGetterBlock = (options: StructArrayAccessorOptions): string => {\n const { context, jsName, tsType, elementDescriptor, offset, lengthExpr, elementSize, elementFields } = options;\n const element = renderElementReadObject(context, elementFields, 0);\n const loop = [`const __base = __index * ${String(elementSize)};`, `__result.push(${element});`].join(\"\\n\");\n const handleType = \"ReturnType<typeof getHandle>\";\n\n const body = [\n `const __array = read(getHandle(this), ${elementDescriptor}, ${String(offset)}) as ${handleType};`,\n `const __result: ${tsType} = [];`,\n `for (let __index = 0; __index < ${lengthExpr}; __index++) {`,\n indent(loop, 1),\n \"}\",\n \"return __result;\",\n ].join(\"\\n\");\n\n return renderBlock(`get ${jsName}(): ${tsType}`, body);\n};\n\nconst structArraySetterStatements = (context: ModuleContext, options: StructArrayAccessorOptions): string => {\n const { elementDescriptor, offset, elementSize, elementFields } = options;\n const writes: string[] = [];\n\n appendElementWriteStatements(context, {\n fields: elementFields,\n baseOffset: 0,\n valuePath: \"__element\",\n out: writes,\n });\n\n const loop = [`const __base = __index * ${String(elementSize)};`, ...writes].join(\"\\n\");\n\n return [\n `const __descriptor = ${elementDescriptor};`,\n `const __array = read(getHandle(this), __descriptor, ${String(offset)}) as ReturnType<typeof getHandle>;`,\n \"for (const [__index, __element] of __value.entries()) {\",\n indent(loop, 1),\n \"}\",\n `write(getHandle(this), __descriptor, ${String(offset)}, __array);`,\n ].join(\"\\n\");\n};\n\nconst structArraySetterBlock = (options: StructArrayAccessorOptions): string =>\n renderBlock(\n `set ${options.jsName}(__value: ${options.tsType})`,\n structArraySetterStatements(options.context, options),\n );\n\nconst resolveStructArrayElements = (context: ModuleContext, fieldType: TypeId): StructArrayElements | undefined => {\n const arrayType = context.library.typeFor(fieldType);\n\n if (arrayType?.kind !== \"carray\") {\n return undefined;\n }\n\n const elementType = context.library.typeFor(arrayType.element);\n\n if (elementType?.kind === \"record\" && elementType.value.glibGetType !== undefined) {\n return undefined;\n }\n\n const elementFields = resolveInlineStructFields(context, arrayType.element, arrayType.elementCType);\n\n if (elementFields === undefined) {\n return undefined;\n }\n\n return { arrayType, elementFields };\n};\n\nconst resolveStructArrayShape = (\n context: ModuleContext,\n elements: StructArrayElements,\n siblingFields: GirField[],\n): { lengthExpr: string; elementSize: number } | undefined => {\n const lengthExpr = arrayLengthExpression(elements.arrayType, siblingFields);\n\n if (lengthExpr === undefined) {\n return undefined;\n }\n\n const elementSize = computeRecordFieldSlots(context, elements.elementFields).size;\n\n if (elementSize === 0) {\n return undefined;\n }\n\n return { lengthExpr, elementSize };\n};\n\nconst resolveStructArray = (context: ModuleContext, target: StructArrayTarget): StructArrayResolution | undefined => {\n const { field, slot, siblingFields } = target;\n\n if (field.type === undefined || slot.bitWidth !== undefined) {\n return undefined;\n }\n\n const elements = resolveStructArrayElements(context, field.type);\n\n if (elements === undefined) {\n return undefined;\n }\n\n const shape = resolveStructArrayShape(context, elements, siblingFields);\n\n if (shape === undefined) {\n return undefined;\n }\n\n return {\n fieldType: field.type,\n elementFields: elements.elementFields,\n lengthExpr: shape.lengthExpr,\n elementSize: shape.elementSize,\n };\n};\n\nconst renderStructArrayAccessor = (context: ModuleContext, target: StructArrayTarget): string | undefined => {\n const resolution = resolveStructArray(context, target);\n\n if (resolution === undefined) {\n return undefined;\n }\n\n const { field, jsName, slot } = target;\n const { fieldType, elementFields, lengthExpr, elementSize } = resolution;\n context.addRuntimeImport(\"read\");\n context.addRuntimeImport(\"getHandle\");\n context.addRuntimeImport(\"t\");\n\n const options: StructArrayAccessorOptions = {\n context,\n jsName,\n tsType: renderTsType(context, fieldType, false),\n elementDescriptor: tStruct(\"borrowed\", {\n size: `${lengthExpr} * ${String(elementSize)}`,\n wrapperClass: undefined,\n isCallerAllocated: false,\n }),\n offset: slot.byteOffset,\n lengthExpr,\n elementSize,\n elementFields,\n };\n\n const blocks: string[] = [];\n\n if (field.readable) {\n blocks.push(structArrayGetterBlock(options));\n }\n\n if (field.writable) {\n context.addRuntimeImport(\"write\");\n blocks.push(structArraySetterBlock(options));\n }\n\n return blocks.length === 0 ? undefined : blocks.join(\"\\n\\n\");\n};\n\nconst getterBlock = (options: AccessorOptions): string => {\n const { context, jsName, tsType, descriptor, slot, fieldType } = options;\n context.addRuntimeImport(\"read\");\n context.addRuntimeImport(\"getHandle\");\n\n if (slot.bitWidth === undefined) {\n const valueExpression = `read(getHandle(this), ${descriptor}, ${String(slot.byteOffset)})`;\n\n const wrapped = wrapReturnValue(context, {\n ref: fieldType,\n isNullable: false,\n valueExpression,\n });\n\n const body = `return ${wrapped};`;\n\n return renderBlock(`get ${jsName}(): ${tsType}`, body);\n }\n\n const mask = bitMask(slot.bitWidth);\n const shift = slot.bitOffset ?? 0;\n const readUnit = `const __unit = read(getHandle(this), ${descriptor}, ${String(slot.byteOffset)}) as number;`;\n const body = `${readUnit}\\nreturn (((__unit >>> ${String(shift)}) & ${String(mask)}) >>> 0) as ${tsType};`;\n\n return renderBlock(`get ${jsName}(): ${tsType}`, body);\n};\n\nconst setterBody = (context: ModuleContext, descriptor: string, slot: FieldSlot): string => {\n context.addRuntimeImport(\"getHandle\");\n\n return emitFieldWrite(context, { descriptor, slot, targetExpr: \"getHandle(this)\", valueExpr: \"value\" });\n};\n\nconst setterBlock = (options: AccessorOptions): string =>\n renderBlock(\n `set ${options.jsName}(value: ${options.tsType})`,\n setterBody(options.context, options.descriptor, options.slot),\n );\n\nexport {\n isEmittableField,\n isInlineField,\n emitFieldWrite,\n resolveRecordFieldEntry,\n renderRecordFieldAccessor,\n type RecordFieldEntry,\n};\n"]}
1
+ {"version":3,"file":"record-field-accessor.js","sourceRoot":"","sources":["../../../src/store/gi/record-field-accessor.ts"],"names":[],"mappings":"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","sourcesContent":["import { toCamelIdentifier } from \"@gtkx/utils\";\nimport type { GirAnnotations } from \"../../gir/annotations.js\";\nimport type { GirField } from \"../../gir/field.js\";\nimport type { FieldSlot } from \"../../gir/size.js\";\nimport type { TypeId } from \"../../gir/type-id.js\";\nimport type { GirType } from \"../../gir/type.js\";\nimport type { ModuleContext } from \"../../writer/context.js\";\nimport { isInlineCallbackRef, renderDescriptor } from \"../../analysis/descriptor-render.js\";\nimport { tStruct } from \"../../analysis/descriptor.js\";\nimport { renderTsType } from \"../../analysis/ts-type.js\";\nimport { indent, renderBlock } from \"../../writer/emit.js\";\nimport { getDoc } from \"./doc-spec.js\";\nimport { bitMask, computeRecordFieldSlots, mergeBitfield, type RecordFieldSlot } from \"./record-layout.js\";\nimport { wrapReturnValue } from \"./return-wrap.js\";\nimport { isValueMarshalable } from \"./value-marshalable.js\";\n\ntype FieldWriteSpec = {\n descriptor: string;\n slot: FieldSlot;\n targetExpr: string;\n valueExpr: string;\n};\n\ntype AdmittedField = {\n field: GirField & { type: TypeId };\n jsName: string;\n};\n\ntype RecordFieldEntry = {\n jsName: string;\n tsType: string;\n isWritable: boolean;\n doc: string | undefined;\n annotations: GirAnnotations;\n};\n\ntype InlineFieldVisit = {\n jsName: string;\n descriptor: string;\n offset: number;\n slot: FieldSlot;\n type: TypeId;\n};\n\ntype InlineFieldVisitors = {\n leaf: (visit: InlineFieldVisit) => void;\n nested: (jsName: string, nested: GirField[], offset: number) => void;\n};\n\ntype ElementWriteOptions = {\n fields: GirField[];\n baseOffset: number;\n valuePath: string;\n out: string[];\n};\n\ntype StructArrayTarget = {\n field: GirField;\n jsName: string;\n slot: FieldSlot;\n siblingFields: GirField[];\n};\n\ntype StructArrayAccessorOptions = {\n context: ModuleContext;\n jsName: string;\n tsType: string;\n elementDescriptor: string;\n offset: number;\n lengthExpr: string;\n elementSize: number;\n elementFields: GirField[];\n};\n\ntype StructArrayResolution = {\n fieldType: TypeId;\n elementFields: GirField[];\n lengthExpr: string;\n elementSize: number;\n};\n\ntype StructArrayElements = {\n arrayType: Extract<GirType, { kind: \"carray\" }>;\n elementFields: GirField[];\n};\n\ntype AccessorOptions = {\n context: ModuleContext;\n jsName: string;\n tsType: string;\n descriptor: string;\n slot: FieldSlot;\n fieldType: TypeId;\n};\n\nconst isMarshalableField = (context: ModuleContext, field: GirField): boolean => {\n if (field.cType?.endsWith(\"*\") === true) {\n return true;\n }\n\n const type = field.type === undefined ? undefined : context.library.typeFor(field.type);\n\n if (type?.kind !== \"record\") {\n return true;\n }\n\n return isValueMarshalable(context, type.namespace.name, type.value);\n};\n\nconst isEmittableField = (context: ModuleContext, field: GirField): field is GirField & { type: TypeId } =>\n !field.private &&\n field.type !== undefined &&\n !isInlineCallbackRef(context.library, field.type) &&\n isMarshalableField(context, field);\n\nconst emitFieldWrite = (context: ModuleContext, spec: FieldWriteSpec): string => {\n const { descriptor, slot, targetExpr, valueExpr } = spec;\n context.addRuntimeImport(\"write\");\n\n if (slot.bitWidth === undefined) {\n context.addRuntimeImport(\"toNative\");\n\n return (\n `write(${targetExpr}, ${descriptor}, ${String(slot.byteOffset)}, ` +\n `toNative(${descriptor}, ${valueExpr}));`\n );\n }\n\n context.addRuntimeImport(\"read\");\n\n const merged = mergeBitfield(\n `(read(${targetExpr}, ${descriptor}, ${String(slot.byteOffset)}) as number)`,\n valueExpr,\n bitMask(slot.bitWidth),\n slot.bitOffset ?? 0,\n );\n\n return `write(${targetExpr}, ${descriptor}, ${String(slot.byteOffset)}, ${merged});`;\n};\n\nconst admitField = (\n context: ModuleContext,\n slot: RecordFieldSlot,\n claimedNames: Set<string>,\n): AdmittedField | undefined => {\n const { field } = slot;\n\n if (!field.readable && !field.writable) {\n return undefined;\n }\n\n if (!isEmittableField(context, field)) {\n return undefined;\n }\n\n const jsName = toCamelIdentifier(field.name);\n\n if (claimedNames.has(jsName)) {\n return undefined;\n }\n\n if (jsName === \"constructor\") {\n return undefined;\n }\n\n return { field, jsName };\n};\n\nconst resolveRecordFieldEntry = (\n context: ModuleContext,\n slot: RecordFieldSlot,\n claimedNames: Set<string>,\n): RecordFieldEntry | undefined => {\n const admitted = admitField(context, slot, claimedNames);\n\n if (admitted === undefined) {\n return undefined;\n }\n\n return {\n jsName: admitted.jsName,\n tsType: renderTsType(context, admitted.field.type, false),\n isWritable: admitted.field.writable,\n doc: admitted.field.doc,\n annotations: admitted.field.annotations,\n };\n};\n\nconst renderRecordFieldAccessor = (\n context: ModuleContext,\n slot: RecordFieldSlot,\n claimedNames: Set<string>,\n siblingFields: GirField[],\n): string | undefined => {\n const admitted = admitField(context, slot, claimedNames);\n\n if (admitted === undefined) {\n return undefined;\n }\n\n const { field, jsName } = admitted;\n const doc = getDoc(field);\n const structArray = renderStructArrayAccessor(context, { field, jsName, slot: slot.slot, siblingFields });\n\n if (structArray !== undefined) {\n return `${doc}${structArray}`;\n }\n\n if (!isAccessorEligibleType(context, field.type)) {\n const tsType = renderTsType(context, field.type, false);\n\n return `${doc}declare ${jsName}: ${tsType};`;\n }\n\n const descriptor = context.hoistDescriptor(\n renderDescriptor(context, field.type, \"none\", { isInline: isInlineField(context, field) }),\n );\n\n const tsType = renderTsType(context, field.type, false);\n\n const accessorOptions: AccessorOptions = {\n context,\n jsName,\n tsType,\n descriptor,\n slot: slot.slot,\n fieldType: field.type,\n };\n\n const blocks: string[] = [getterBlock(accessorOptions)];\n\n if (field.writable) {\n blocks.push(setterBlock(accessorOptions));\n }\n\n return `${doc}${blocks.join(\"\\n\\n\")}`;\n};\n\nconst isAccessorEligibleType = (context: ModuleContext, ref: TypeId): boolean => {\n const type = context.library.typeFor(ref);\n\n if (type === undefined) {\n return true;\n }\n\n switch (type.kind) {\n case \"primitive\": {\n return type.category !== \"void\" && type.category !== \"unichar\";\n }\n case \"class\":\n case \"interface\":\n case \"record\":\n case \"enum\":\n case \"alias\": {\n return true;\n }\n case \"callback\": {\n return context.library.nameFor(ref) !== undefined;\n }\n case \"carray\": {\n return type.fixedSize !== undefined;\n }\n case \"list\":\n case \"hashtable\":\n case \"varargs\": {\n return false;\n }\n }\n};\n\nconst isInlineField = (context: ModuleContext, field: GirField): boolean =>\n field.type !== undefined && resolveInlineStructFields(context, field.type, field.cType) !== undefined;\n\nconst resolveInlineStructFields = (\n context: ModuleContext,\n ref: TypeId | undefined,\n occurrenceCType: string | undefined,\n): GirField[] | undefined => {\n if (ref === undefined) {\n return undefined;\n }\n\n if (occurrenceCType?.endsWith(\"*\") === true) {\n return undefined;\n }\n\n const type = context.library.typeFor(ref);\n\n if (type?.kind !== \"record\") {\n return undefined;\n }\n\n if (type.value.cType?.endsWith(\"*\") === true) {\n return undefined;\n }\n\n if (type.value.fields.length === 0) {\n return undefined;\n }\n\n return type.value.fields;\n};\n\nconst arrayLengthExpression = (\n arrayRef: Extract<GirType, { kind: \"carray\" }>,\n siblingFields: GirField[],\n): string | undefined => {\n if (arrayRef.fixedSize !== undefined) {\n return String(arrayRef.fixedSize);\n }\n\n if (arrayRef.lengthParameterIndex === undefined) {\n return undefined;\n }\n\n const lengthField = siblingFields.filter((field) => !field.private)[arrayRef.lengthParameterIndex];\n\n if (lengthField === undefined) {\n return undefined;\n }\n\n return `this.${toCamelIdentifier(lengthField.name)}`;\n};\n\nconst visitInlineStructSlot = (\n context: ModuleContext,\n entry: RecordFieldSlot,\n baseOffset: number,\n visitors: InlineFieldVisitors,\n): void => {\n const { field, slot } = entry;\n\n if (field.private || field.type === undefined || isInlineCallbackRef(context.library, field.type)) {\n return;\n }\n\n const jsName = toCamelIdentifier(field.name);\n const offset = baseOffset + slot.byteOffset;\n const nested = resolveInlineStructFields(context, field.type, field.cType);\n\n if (nested !== undefined) {\n visitors.nested(jsName, nested, offset);\n\n return;\n }\n\n if (!isAccessorEligibleType(context, field.type)) {\n return;\n }\n\n const descriptor = context.hoistDescriptor(renderDescriptor(context, field.type, \"none\"));\n visitors.leaf({ jsName, descriptor, offset, slot, type: field.type });\n};\n\nconst visitInlineStructFields = (\n context: ModuleContext,\n fields: GirField[],\n baseOffset: number,\n visitors: InlineFieldVisitors,\n): void => {\n const { slots } = computeRecordFieldSlots(context, fields);\n\n for (const entry of slots) {\n visitInlineStructSlot(context, entry, baseOffset, visitors);\n }\n};\n\nconst elementAccessExpr = (descriptor: string, offset: number): string =>\n `read(__array, ${descriptor}, __base + ${String(offset)})`;\n\nconst renderElementReadEntry = (context: ModuleContext, visit: InlineFieldVisit): string => {\n const { jsName, descriptor, offset, slot, type } = visit;\n const access = elementAccessExpr(descriptor, offset);\n\n if (slot.bitWidth === undefined) {\n return `${jsName}: ${access} as ${renderTsType(context, type, false)}`;\n }\n\n const shift = slot.bitOffset ?? 0;\n\n return `${jsName}: (((${access} as number) >>> ${String(shift)}) & ${String(bitMask(slot.bitWidth))})`;\n};\n\nconst renderElementReadObject = (context: ModuleContext, fields: GirField[], baseOffset: number): string => {\n const entries: string[] = [];\n\n visitInlineStructFields(context, fields, baseOffset, {\n leaf: (visit) => {\n entries.push(renderElementReadEntry(context, visit));\n },\n nested: (jsName, nested, offset) => {\n entries.push(`${jsName}: ${renderElementReadObject(context, nested, offset)}`);\n },\n });\n\n return `{ ${entries.join(\", \")} }`;\n};\n\nconst renderElementWriteStatement = (visit: InlineFieldVisit, valuePath: string): string => {\n const { jsName, descriptor, offset, slot } = visit;\n const valueExpr = `${valuePath}.${jsName}`;\n\n if (slot.bitWidth === undefined) {\n return `write(__array, ${descriptor}, __base + ${String(offset)}, ${valueExpr});`;\n }\n\n const merged = mergeBitfield(\n `(${elementAccessExpr(descriptor, offset)} as number)`,\n valueExpr,\n bitMask(slot.bitWidth),\n slot.bitOffset ?? 0,\n );\n\n return `write(__array, ${descriptor}, __base + ${String(offset)}, ${merged});`;\n};\n\nconst appendElementWriteStatements = (context: ModuleContext, options: ElementWriteOptions): void => {\n const { fields, baseOffset, valuePath, out } = options;\n\n visitInlineStructFields(context, fields, baseOffset, {\n leaf: (visit) => {\n out.push(renderElementWriteStatement(visit, valuePath));\n },\n nested: (jsName, nested, offset) => {\n appendElementWriteStatements(context, {\n fields: nested,\n baseOffset: offset,\n valuePath: `${valuePath}.${jsName}`,\n out,\n });\n },\n });\n};\n\nconst structArrayGetterBlock = (options: StructArrayAccessorOptions): string => {\n const { context, jsName, tsType, elementDescriptor, offset, lengthExpr, elementSize, elementFields } = options;\n const element = renderElementReadObject(context, elementFields, 0);\n const loop = [`const __base = __index * ${String(elementSize)};`, `__result.push(${element});`].join(\"\\n\");\n const handleType = \"ReturnType<typeof getHandle>\";\n\n const body = [\n `const __array = read(getHandle(this), ${elementDescriptor}, ${String(offset)}) as ${handleType};`,\n `const __result: ${tsType} = [];`,\n `for (let __index = 0; __index < ${lengthExpr}; __index++) {`,\n indent(loop, 1),\n \"}\",\n \"return __result;\",\n ].join(\"\\n\");\n\n return renderBlock(`get ${jsName}(): ${tsType}`, body);\n};\n\nconst structArraySetterStatements = (context: ModuleContext, options: StructArrayAccessorOptions): string => {\n const { elementDescriptor, offset, elementSize, elementFields } = options;\n const writes: string[] = [];\n\n appendElementWriteStatements(context, {\n fields: elementFields,\n baseOffset: 0,\n valuePath: \"__element\",\n out: writes,\n });\n\n const loop = [`const __base = __index * ${String(elementSize)};`, ...writes].join(\"\\n\");\n\n return [\n `const __descriptor = ${elementDescriptor};`,\n `const __array = read(getHandle(this), __descriptor, ${String(offset)}) as ReturnType<typeof getHandle>;`,\n \"for (const [__index, __element] of __value.entries()) {\",\n indent(loop, 1),\n \"}\",\n `write(getHandle(this), __descriptor, ${String(offset)}, __array);`,\n ].join(\"\\n\");\n};\n\nconst structArraySetterBlock = (options: StructArrayAccessorOptions): string =>\n renderBlock(\n `set ${options.jsName}(__value: ${options.tsType})`,\n structArraySetterStatements(options.context, options),\n );\n\nconst resolveStructArrayElements = (context: ModuleContext, fieldType: TypeId): StructArrayElements | undefined => {\n const arrayType = context.library.typeFor(fieldType);\n\n if (arrayType?.kind !== \"carray\") {\n return undefined;\n }\n\n const elementType = context.library.typeFor(arrayType.element);\n\n if (elementType?.kind === \"record\" && elementType.value.glibGetType !== undefined) {\n return undefined;\n }\n\n const elementFields = resolveInlineStructFields(context, arrayType.element, arrayType.elementCType);\n\n if (elementFields === undefined) {\n return undefined;\n }\n\n return { arrayType, elementFields };\n};\n\nconst resolveStructArrayShape = (\n context: ModuleContext,\n elements: StructArrayElements,\n siblingFields: GirField[],\n): { lengthExpr: string; elementSize: number } | undefined => {\n const lengthExpr = arrayLengthExpression(elements.arrayType, siblingFields);\n\n if (lengthExpr === undefined) {\n return undefined;\n }\n\n const elementSize = computeRecordFieldSlots(context, elements.elementFields).size;\n\n if (elementSize === 0) {\n return undefined;\n }\n\n return { lengthExpr, elementSize };\n};\n\nconst resolveStructArray = (context: ModuleContext, target: StructArrayTarget): StructArrayResolution | undefined => {\n const { field, slot, siblingFields } = target;\n\n if (field.type === undefined || slot.bitWidth !== undefined) {\n return undefined;\n }\n\n const elements = resolveStructArrayElements(context, field.type);\n\n if (elements === undefined) {\n return undefined;\n }\n\n const shape = resolveStructArrayShape(context, elements, siblingFields);\n\n if (shape === undefined) {\n return undefined;\n }\n\n return {\n fieldType: field.type,\n elementFields: elements.elementFields,\n lengthExpr: shape.lengthExpr,\n elementSize: shape.elementSize,\n };\n};\n\nconst renderStructArrayAccessor = (context: ModuleContext, target: StructArrayTarget): string | undefined => {\n const resolution = resolveStructArray(context, target);\n\n if (resolution === undefined) {\n return undefined;\n }\n\n const { field, jsName, slot } = target;\n const { fieldType, elementFields, lengthExpr, elementSize } = resolution;\n context.addRuntimeImport(\"read\");\n context.addRuntimeImport(\"getHandle\");\n context.addRuntimeImport(\"t\");\n\n const options: StructArrayAccessorOptions = {\n context,\n jsName,\n tsType: renderTsType(context, fieldType, false),\n elementDescriptor: tStruct(\"borrowed\", {\n size: `${lengthExpr} * ${String(elementSize)}`,\n wrapperClass: undefined,\n isCallerAllocated: false,\n }),\n offset: slot.byteOffset,\n lengthExpr,\n elementSize,\n elementFields,\n };\n\n const blocks: string[] = [];\n\n if (field.readable) {\n blocks.push(structArrayGetterBlock(options));\n }\n\n if (field.writable) {\n context.addRuntimeImport(\"write\");\n blocks.push(structArraySetterBlock(options));\n }\n\n return blocks.length === 0 ? undefined : blocks.join(\"\\n\\n\");\n};\n\nconst getterBlock = (options: AccessorOptions): string => {\n const { context, jsName, tsType, descriptor, slot, fieldType } = options;\n context.addRuntimeImport(\"read\");\n context.addRuntimeImport(\"getHandle\");\n\n if (slot.bitWidth === undefined) {\n const valueExpression = `read(getHandle(this), ${descriptor}, ${String(slot.byteOffset)})`;\n\n const wrapped = wrapReturnValue(context, {\n ref: fieldType,\n isNullable: false,\n valueExpression,\n });\n\n const body = `return ${wrapped};`;\n\n return renderBlock(`get ${jsName}(): ${tsType}`, body);\n }\n\n const mask = bitMask(slot.bitWidth);\n const shift = slot.bitOffset ?? 0;\n const readUnit = `const __unit = read(getHandle(this), ${descriptor}, ${String(slot.byteOffset)}) as number;`;\n const body = `${readUnit}\\nreturn (((__unit >>> ${String(shift)}) & ${String(mask)}) >>> 0) as ${tsType};`;\n\n return renderBlock(`get ${jsName}(): ${tsType}`, body);\n};\n\nconst setterBody = (context: ModuleContext, descriptor: string, slot: FieldSlot): string => {\n context.addRuntimeImport(\"getHandle\");\n\n return emitFieldWrite(context, { descriptor, slot, targetExpr: \"getHandle(this)\", valueExpr: \"value\" });\n};\n\nconst setterBlock = (options: AccessorOptions): string =>\n renderBlock(\n `set ${options.jsName}(value: ${options.tsType})`,\n setterBody(options.context, options.descriptor, options.slot),\n );\n\nexport {\n isEmittableField,\n isInlineField,\n emitFieldWrite,\n resolveRecordFieldEntry,\n renderRecordFieldAccessor,\n};\n"]}
@@ -31,7 +31,7 @@ const mergeBitfield = (readExpr, valueExpr, mask, shift) => {
31
31
  };
32
32
  const fieldLayoutInput = (context, field, visited) => {
33
33
  if (field.inlineMembers !== undefined) {
34
- const layout = inlineMemberLayout(context, field.inlineMembers, field.inlineIsUnion, visited);
34
+ const layout = inlineMemberLayout(context, field.inlineMembers, field.isInlineUnion, visited);
35
35
  return { layout, bits: undefined };
36
36
  }
37
37
  if (field.type === undefined) {
@@ -1 +1 @@
1
- {"version":3,"file":"record-layout.js","sourceRoot":"","sources":["../../../src/store/gi/record-layout.ts"],"names":[],"mappings":"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","sourcesContent":["import type { GirField } from \"../../gir/field.js\";\nimport type { TypeId } from \"../../gir/type-id.js\";\nimport type { EntityType, GirType } from \"../../gir/type.js\";\nimport type { ModuleContext } from \"../../writer/context.js\";\nimport {\n computeFieldSlots,\n type FieldLayout,\n type FieldLayoutInput,\n type FieldSlot,\n layoutOfPrimitive,\n} from \"../../gir/size.js\";\n\ntype ResolvedRecordValue = Extract<EntityType, { kind: \"record\" }>[\"value\"];\n\ntype RecordFieldSlot = {\n field: GirField;\n slot: FieldSlot;\n};\n\nconst POINTER_LAYOUT: FieldLayout = { size: 8, align: 8 };\nconst recordLayoutCache: Map<string, FieldLayout> = new Map();\n\nconst ALIGNMENT_OVERRIDES: Map<string, FieldLayout> = new Map([\n [\"graphene_simd4f_t\", { size: 16, align: 16 }],\n [\"graphene_simd4x4f_t\", { size: 64, align: 16 }],\n]);\n\nconst computeRecordFieldSlots = (\n context: ModuleContext,\n fields: GirField[],\n isUnion = false,\n): { slots: RecordFieldSlot[]; size: number } => {\n const inputs: FieldLayoutInput[] = Array.from(fields, (field) => fieldLayoutInput(context, field, new Set()));\n const result = computeFieldSlots(inputs, isUnion);\n\n const slots = result.slots.map((slot, index) => {\n const field = fields[index];\n\n if (field === undefined) {\n throw new Error(\"computeRecordFieldSlots: parallel arrays diverged\");\n }\n\n return { field, slot };\n });\n\n return { slots, size: result.size };\n};\n\nconst bitMask = (width: number): number => {\n if (width >= 32) {\n return 0xFF_FF_FF_FF;\n }\n\n return (1 << width) - 1;\n};\n\nconst mergeBitfield = (readExpr: string, valueExpr: string, mask: number, shift: number): string => {\n const maskExpr = String(mask);\n const shiftExpr = String(shift);\n\n return (\n `((${readExpr} & ~(${maskExpr} << ${shiftExpr})) | ` +\n `((Number(${valueExpr}) & ${maskExpr}) << ${shiftExpr})) >>> 0`\n );\n};\n\nconst fieldLayoutInput = (context: ModuleContext, field: GirField, visited: Set<string>): FieldLayoutInput => {\n if (field.inlineMembers !== undefined) {\n const layout = inlineMemberLayout(context, field.inlineMembers, field.inlineIsUnion, visited);\n\n return { layout, bits: undefined };\n }\n\n if (field.type === undefined) {\n return { layout: POINTER_LAYOUT, bits: undefined };\n }\n\n return { layout: layoutOfType(context, field.type, field.cType, visited), bits: field.bits };\n};\n\nconst inlineMemberLayout = (\n context: ModuleContext,\n members: GirField[],\n isUnion: boolean,\n visited: Set<string>,\n): FieldLayout => {\n const inputs = Array.from(members, (member) => fieldLayoutInput(context, member, visited));\n\n if (inputs.length === 0) {\n return { size: 0, align: 1 };\n }\n\n const { size } = computeFieldSlots(inputs, isUnion);\n\n return { size, align: Math.max(1, ...inputs.map((input) => input.layout.align)) };\n};\n\nconst pointerOr = (occurrenceCType: string | undefined, otherwise: () => FieldLayout): FieldLayout =>\n occurrenceCType?.endsWith(\"*\") === true ? POINTER_LAYOUT : otherwise();\n\nconst layoutOfType = (\n context: ModuleContext,\n ref: TypeId,\n occurrenceCType: string | undefined,\n visited: Set<string>,\n): FieldLayout => {\n const type = context.library.typeFor(ref);\n\n if (type === undefined) {\n return POINTER_LAYOUT;\n }\n\n switch (type.kind) {\n case \"primitive\": {\n return pointerOr(occurrenceCType, () => layoutOfPrimitive(type.category));\n }\n case \"carray\": {\n return arrayLayout(context, type, visited);\n }\n case \"list\":\n case \"hashtable\":\n case \"callback\":\n case \"varargs\":\n case \"class\":\n case \"interface\": {\n return POINTER_LAYOUT;\n }\n case \"enum\": {\n return pointerOr(occurrenceCType, () => layoutOfPrimitive(\"int32\"));\n }\n case \"record\": {\n return pointerOr(occurrenceCType, () => layoutOfRecord(context, type, visited));\n }\n case \"alias\": {\n return pointerOr(occurrenceCType, () => resolveAliasLayout(context, type, visited));\n }\n }\n};\n\nconst arrayLayout = (\n context: ModuleContext,\n ref: Extract<GirType, { kind: \"carray\" }>,\n visited: Set<string>,\n): FieldLayout => {\n if (ref.fixedSize === undefined) {\n return POINTER_LAYOUT;\n }\n\n const elementLayout = layoutOfType(context, ref.element, ref.elementCType, visited);\n\n return { size: elementLayout.size * ref.fixedSize, align: elementLayout.align };\n};\n\nconst declaredLayout = (record: ResolvedRecordValue): FieldLayout | undefined => {\n if (record.cType?.endsWith(\"*\") === true) {\n return POINTER_LAYOUT;\n }\n\n return record.cType === undefined ? undefined : ALIGNMENT_OVERRIDES.get(record.cType);\n};\n\nconst layoutOfRecord = (\n context: ModuleContext,\n resolved: Extract<EntityType, { kind: \"record\" }>,\n visited: Set<string>,\n): FieldLayout => {\n const declared = declaredLayout(resolved.value);\n\n if (declared !== undefined) {\n return declared;\n }\n\n const key = `${resolved.namespace.name}.${resolved.value.name}`;\n\n if (visited.has(key)) {\n return POINTER_LAYOUT;\n }\n\n const cached = recordLayoutCache.get(key);\n\n if (cached !== undefined) {\n return cached;\n }\n\n const nextVisited = new Set(visited);\n nextVisited.add(key);\n\n const inputs: FieldLayoutInput[] = Array.from(resolved.value.fields, (field) =>\n fieldLayoutInput(context, field, nextVisited));\n\n if (inputs.length === 0) {\n return POINTER_LAYOUT;\n }\n\n const { size } = computeFieldSlots(inputs, resolved.value.isUnion);\n const align = Math.max(1, ...inputs.map((input) => input.layout.align));\n const layout: FieldLayout = { size, align };\n recordLayoutCache.set(key, layout);\n\n return layout;\n};\n\nconst resolveAliasLayout = (\n context: ModuleContext,\n resolved: Extract<EntityType, { kind: \"alias\" }>,\n visited: Set<string>,\n): FieldLayout => {\n const ref = resolved.value.target;\n\n if (ref === undefined) {\n return POINTER_LAYOUT;\n }\n\n return layoutOfType(context, ref, resolved.value.targetCType, visited);\n};\n\nexport { computeRecordFieldSlots, bitMask, mergeBitfield, type RecordFieldSlot };\n"]}
1
+ {"version":3,"file":"record-layout.js","sourceRoot":"","sources":["../../../src/store/gi/record-layout.ts"],"names":[],"mappings":"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","sourcesContent":["import type { GirField } from \"../../gir/field.js\";\nimport type { TypeId } from \"../../gir/type-id.js\";\nimport type { EntityType, GirType } from \"../../gir/type.js\";\nimport type { ModuleContext } from \"../../writer/context.js\";\nimport {\n computeFieldSlots,\n type FieldLayout,\n type FieldLayoutInput,\n type FieldSlot,\n layoutOfPrimitive,\n} from \"../../gir/size.js\";\n\ntype ResolvedRecordValue = Extract<EntityType, { kind: \"record\" }>[\"value\"];\n\ntype RecordFieldSlot = {\n field: GirField;\n slot: FieldSlot;\n};\n\nconst POINTER_LAYOUT: FieldLayout = { size: 8, align: 8 };\nconst recordLayoutCache: Map<string, FieldLayout> = new Map();\n\nconst ALIGNMENT_OVERRIDES: Map<string, FieldLayout> = new Map([\n [\"graphene_simd4f_t\", { size: 16, align: 16 }],\n [\"graphene_simd4x4f_t\", { size: 64, align: 16 }],\n]);\n\nconst computeRecordFieldSlots = (\n context: ModuleContext,\n fields: GirField[],\n isUnion = false,\n): { slots: RecordFieldSlot[]; size: number } => {\n const inputs: FieldLayoutInput[] = Array.from(fields, (field) => fieldLayoutInput(context, field, new Set()));\n const result = computeFieldSlots(inputs, isUnion);\n\n const slots = result.slots.map((slot, index) => {\n const field = fields[index];\n\n if (field === undefined) {\n throw new Error(\"computeRecordFieldSlots: parallel arrays diverged\");\n }\n\n return { field, slot };\n });\n\n return { slots, size: result.size };\n};\n\nconst bitMask = (width: number): number => {\n if (width >= 32) {\n return 0xFF_FF_FF_FF;\n }\n\n return (1 << width) - 1;\n};\n\nconst mergeBitfield = (readExpr: string, valueExpr: string, mask: number, shift: number): string => {\n const maskExpr = String(mask);\n const shiftExpr = String(shift);\n\n return (\n `((${readExpr} & ~(${maskExpr} << ${shiftExpr})) | ` +\n `((Number(${valueExpr}) & ${maskExpr}) << ${shiftExpr})) >>> 0`\n );\n};\n\nconst fieldLayoutInput = (context: ModuleContext, field: GirField, visited: Set<string>): FieldLayoutInput => {\n if (field.inlineMembers !== undefined) {\n const layout = inlineMemberLayout(context, field.inlineMembers, field.isInlineUnion, visited);\n\n return { layout, bits: undefined };\n }\n\n if (field.type === undefined) {\n return { layout: POINTER_LAYOUT, bits: undefined };\n }\n\n return { layout: layoutOfType(context, field.type, field.cType, visited), bits: field.bits };\n};\n\nconst inlineMemberLayout = (\n context: ModuleContext,\n members: GirField[],\n isUnion: boolean,\n visited: Set<string>,\n): FieldLayout => {\n const inputs = Array.from(members, (member) => fieldLayoutInput(context, member, visited));\n\n if (inputs.length === 0) {\n return { size: 0, align: 1 };\n }\n\n const { size } = computeFieldSlots(inputs, isUnion);\n\n return { size, align: Math.max(1, ...inputs.map((input) => input.layout.align)) };\n};\n\nconst pointerOr = (occurrenceCType: string | undefined, otherwise: () => FieldLayout): FieldLayout =>\n occurrenceCType?.endsWith(\"*\") === true ? POINTER_LAYOUT : otherwise();\n\nconst layoutOfType = (\n context: ModuleContext,\n ref: TypeId,\n occurrenceCType: string | undefined,\n visited: Set<string>,\n): FieldLayout => {\n const type = context.library.typeFor(ref);\n\n if (type === undefined) {\n return POINTER_LAYOUT;\n }\n\n switch (type.kind) {\n case \"primitive\": {\n return pointerOr(occurrenceCType, () => layoutOfPrimitive(type.category));\n }\n case \"carray\": {\n return arrayLayout(context, type, visited);\n }\n case \"list\":\n case \"hashtable\":\n case \"callback\":\n case \"varargs\":\n case \"class\":\n case \"interface\": {\n return POINTER_LAYOUT;\n }\n case \"enum\": {\n return pointerOr(occurrenceCType, () => layoutOfPrimitive(\"int32\"));\n }\n case \"record\": {\n return pointerOr(occurrenceCType, () => layoutOfRecord(context, type, visited));\n }\n case \"alias\": {\n return pointerOr(occurrenceCType, () => resolveAliasLayout(context, type, visited));\n }\n }\n};\n\nconst arrayLayout = (\n context: ModuleContext,\n ref: Extract<GirType, { kind: \"carray\" }>,\n visited: Set<string>,\n): FieldLayout => {\n if (ref.fixedSize === undefined) {\n return POINTER_LAYOUT;\n }\n\n const elementLayout = layoutOfType(context, ref.element, ref.elementCType, visited);\n\n return { size: elementLayout.size * ref.fixedSize, align: elementLayout.align };\n};\n\nconst declaredLayout = (record: ResolvedRecordValue): FieldLayout | undefined => {\n if (record.cType?.endsWith(\"*\") === true) {\n return POINTER_LAYOUT;\n }\n\n return record.cType === undefined ? undefined : ALIGNMENT_OVERRIDES.get(record.cType);\n};\n\nconst layoutOfRecord = (\n context: ModuleContext,\n resolved: Extract<EntityType, { kind: \"record\" }>,\n visited: Set<string>,\n): FieldLayout => {\n const declared = declaredLayout(resolved.value);\n\n if (declared !== undefined) {\n return declared;\n }\n\n const key = `${resolved.namespace.name}.${resolved.value.name}`;\n\n if (visited.has(key)) {\n return POINTER_LAYOUT;\n }\n\n const cached = recordLayoutCache.get(key);\n\n if (cached !== undefined) {\n return cached;\n }\n\n const nextVisited = new Set(visited);\n nextVisited.add(key);\n\n const inputs: FieldLayoutInput[] = Array.from(resolved.value.fields, (field) =>\n fieldLayoutInput(context, field, nextVisited));\n\n if (inputs.length === 0) {\n return POINTER_LAYOUT;\n }\n\n const { size } = computeFieldSlots(inputs, resolved.value.isUnion);\n const align = Math.max(1, ...inputs.map((input) => input.layout.align));\n const layout: FieldLayout = { size, align };\n recordLayoutCache.set(key, layout);\n\n return layout;\n};\n\nconst resolveAliasLayout = (\n context: ModuleContext,\n resolved: Extract<EntityType, { kind: \"alias\" }>,\n visited: Set<string>,\n): FieldLayout => {\n const ref = resolved.value.target;\n\n if (ref === undefined) {\n return POINTER_LAYOUT;\n }\n\n return layoutOfType(context, ref, resolved.value.targetCType, visited);\n};\n\nexport { computeRecordFieldSlots, bitMask, mergeBitfield, type RecordFieldSlot };\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"record.d.ts","sourceRoot":"","sources":["../../../src/store/gi/record.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAa7D,QAAA,MAAM,cAAc,GAAI,SAAS,aAAa,EAAE,QAAQ,SAAS,KAAG,IA8BnE,CAAC;AAmCF,OAAO,EAAE,cAAc,EAAE,CAAC"}
1
+ {"version":3,"file":"record.d.ts","sourceRoot":"","sources":["../../../src/store/gi/record.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAa7D,QAAA,MAAM,cAAc,GAAI,SAAS,aAAa,EAAE,QAAQ,SAAS,KAAG,IAoCnE,CAAC;AAmCF,OAAO,EAAE,cAAc,EAAE,CAAC"}
@@ -1,6 +1,6 @@
1
- import { renderJsDoc } from "../../writer/doc.js";
2
1
  import { indentMembers } from "../../writer/emit.js";
3
2
  import { dedupeCallables, generateBindings, renderPlainTypeMembers } from "./callables.js";
3
+ import { getDoc } from "./doc-spec.js";
4
4
  import { renderSourceGtype } from "./gtype-binding.js";
5
5
  import { renderRecordConstructor, renderRecordConstructorPropsInterface } from "./record-constructor.js";
6
6
  import { renderRecordFieldAccessor } from "./record-field-accessor.js";
@@ -25,7 +25,8 @@ const generateRecord = (context, record) => {
25
25
  const members = renderRecordMembers(context, record, className, callables);
26
26
  const body = indentMembers(members);
27
27
  const heritage = isErrorSubclass ? " extends globalThis.Error" : "";
28
- context.module.appendDeclaration(`${renderJsDoc(record.doc)}export class ${className}${heritage} {\n${body}\n}`);
28
+ const doc = getDoc(record);
29
+ context.module.appendDeclaration(`${doc}export class ${className}${heritage} {\n${body}\n}`, context.declaredType(className));
29
30
  context.module.appendDeclaration(renderRecordConstructorPropsInterface(context, record, className));
30
31
  const gtypeExpr = renderSourceGtype(context, record);
31
32
  appendWrapperClassRegistration(context, {
@@ -1 +1 @@
1
- {"version":3,"file":"record.js","sourceRoot":"","sources":["../../../src/store/gi/record.ts"],"names":[],"mappings":"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","sourcesContent":["import type { GirRecord } from \"../../gir/record.js\";\nimport type { ModuleContext } from \"../../writer/context.js\";\nimport { renderJsDoc } from \"../../writer/doc.js\";\nimport { indentMembers } from \"../../writer/emit.js\";\nimport { type Callables, dedupeCallables, generateBindings, renderPlainTypeMembers } from \"./callables.js\";\nimport { renderSourceGtype } from \"./gtype-binding.js\";\nimport { renderRecordConstructor, renderRecordConstructorPropsInterface } from \"./record-constructor.js\";\nimport { renderRecordFieldAccessor } from \"./record-field-accessor.js\";\nimport { computeRecordFieldSlots } from \"./record-layout.js\";\nimport { appendWrapperClassRegistration } from \"./registration.js\";\n\nconst isGErrorRecord = (context: ModuleContext, record: GirRecord): boolean =>\n context.namespace.name === \"GLib\" && record.glibGetType === \"g_error_get_type\";\n\nconst generateRecord = (context: ModuleContext, record: GirRecord): void => {\n if (!record.introspectable) {\n return;\n }\n\n if (record.name.length === 0) {\n return;\n }\n\n const className = record.name;\n const isErrorSubclass = isGErrorRecord(context, record);\n\n const callables: Callables = {\n constructors: dedupeCallables(record.constructors),\n functions: dedupeCallables(record.functions),\n methods: dedupeCallables(record.methods),\n };\n\n generateBindings(context, callables);\n const members = renderRecordMembers(context, record, className, callables);\n const body = indentMembers(members);\n const heritage = isErrorSubclass ? \" extends globalThis.Error\" : \"\";\n context.module.appendDeclaration(`${renderJsDoc(record.doc)}export class ${className}${heritage} {\\n${body}\\n}`);\n context.module.appendDeclaration(renderRecordConstructorPropsInterface(context, record, className));\n const gtypeExpr = renderSourceGtype(context, record);\n\n appendWrapperClassRegistration(context, {\n className,\n gtypeExpr,\n });\n};\n\nconst renderRecordMembers = (\n context: ModuleContext,\n record: GirRecord,\n className: string,\n callables: Callables,\n): string[] => {\n const isErrorSubclass = isGErrorRecord(context, record);\n\n const { members, claimedNames } = renderPlainTypeMembers({\n context,\n className,\n callables,\n hasGtype: record.glibGetType !== undefined,\n });\n\n members.unshift(renderRecordConstructor(context, record, className, isErrorSubclass));\n const { slots } = computeRecordFieldSlots(context, record.fields, record.isUnion);\n\n for (const slot of slots) {\n const block = renderRecordFieldAccessor(context, slot, claimedNames, record.fields);\n\n if (block !== undefined) {\n members.push(block);\n }\n }\n\n if (isErrorSubclass) {\n members.push('get name(): string {\\n return \"GLib.Error\";\\n}');\n }\n\n return members;\n};\n\nexport { generateRecord };\n"]}
1
+ {"version":3,"file":"record.js","sourceRoot":"","sources":["../../../src/store/gi/record.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAkB,eAAe,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAC3G,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AACvC,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,uBAAuB,EAAE,qCAAqC,EAAE,MAAM,yBAAyB,CAAC;AACzG,OAAO,EAAE,yBAAyB,EAAE,MAAM,4BAA4B,CAAC;AACvE,OAAO,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,EAAE,8BAA8B,EAAE,MAAM,mBAAmB,CAAC;AAEnE,MAAM,cAAc,GAAG,CAAC,OAAsB,EAAE,MAAiB,EAAW,EAAE,CAC1E,OAAO,CAAC,SAAS,CAAC,IAAI,KAAK,MAAM,IAAI,MAAM,CAAC,WAAW,KAAK,kBAAkB,CAAC;AAEnF,MAAM,cAAc,GAAG,CAAC,OAAsB,EAAE,MAAiB,EAAQ,EAAE;IACvE,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;QACzB,OAAO;IACX,CAAC;IAED,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3B,OAAO;IACX,CAAC;IAED,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC;IAC9B,MAAM,eAAe,GAAG,cAAc,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAExD,MAAM,SAAS,GAAc;QACzB,YAAY,EAAE,eAAe,CAAC,MAAM,CAAC,YAAY,CAAC;QAClD,SAAS,EAAE,eAAe,CAAC,MAAM,CAAC,SAAS,CAAC;QAC5C,OAAO,EAAE,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC;KAC3C,CAAC;IAEF,gBAAgB,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IACrC,MAAM,OAAO,GAAG,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;IAC3E,MAAM,IAAI,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;IACpC,MAAM,QAAQ,GAAG,eAAe,CAAC,CAAC,CAAC,2BAA2B,CAAC,CAAC,CAAC,EAAE,CAAC;IACpE,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;IAE3B,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAC5B,GAAG,GAAG,gBAAgB,SAAS,GAAG,QAAQ,OAAO,IAAI,KAAK,EAC1D,OAAO,CAAC,YAAY,CAAC,SAAS,CAAC,CAClC,CAAC;IAEF,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAAC,qCAAqC,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC;IACpG,MAAM,SAAS,GAAG,iBAAiB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAErD,8BAA8B,CAAC,OAAO,EAAE;QACpC,SAAS;QACT,SAAS;KACZ,CAAC,CAAC;AACP,CAAC,CAAC;AAEF,MAAM,mBAAmB,GAAG,CACxB,OAAsB,EACtB,MAAiB,EACjB,SAAiB,EACjB,SAAoB,EACZ,EAAE;IACV,MAAM,eAAe,GAAG,cAAc,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAExD,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,GAAG,sBAAsB,CAAC;QACrD,OAAO;QACP,SAAS;QACT,SAAS;QACT,QAAQ,EAAE,MAAM,CAAC,WAAW,KAAK,SAAS;KAC7C,CAAC,CAAC;IAEH,OAAO,CAAC,OAAO,CAAC,uBAAuB,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,eAAe,CAAC,CAAC,CAAC;IACtF,MAAM,EAAE,KAAK,EAAE,GAAG,uBAAuB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IAElF,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACvB,MAAM,KAAK,GAAG,yBAAyB,CAAC,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;QAEpF,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACtB,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACxB,CAAC;IACL,CAAC;IAED,IAAI,eAAe,EAAE,CAAC;QAClB,OAAO,CAAC,IAAI,CAAC,mDAAmD,CAAC,CAAC;IACtE,CAAC;IAED,OAAO,OAAO,CAAC;AACnB,CAAC,CAAC;AAEF,OAAO,EAAE,cAAc,EAAE,CAAC","sourcesContent":["import type { GirRecord } from \"../../gir/record.js\";\nimport type { ModuleContext } from \"../../writer/context.js\";\nimport { indentMembers } from \"../../writer/emit.js\";\nimport { type Callables, dedupeCallables, generateBindings, renderPlainTypeMembers } from \"./callables.js\";\nimport { getDoc } from \"./doc-spec.js\";\nimport { renderSourceGtype } from \"./gtype-binding.js\";\nimport { renderRecordConstructor, renderRecordConstructorPropsInterface } from \"./record-constructor.js\";\nimport { renderRecordFieldAccessor } from \"./record-field-accessor.js\";\nimport { computeRecordFieldSlots } from \"./record-layout.js\";\nimport { appendWrapperClassRegistration } from \"./registration.js\";\n\nconst isGErrorRecord = (context: ModuleContext, record: GirRecord): boolean =>\n context.namespace.name === \"GLib\" && record.glibGetType === \"g_error_get_type\";\n\nconst generateRecord = (context: ModuleContext, record: GirRecord): void => {\n if (!record.introspectable) {\n return;\n }\n\n if (record.name.length === 0) {\n return;\n }\n\n const className = record.name;\n const isErrorSubclass = isGErrorRecord(context, record);\n\n const callables: Callables = {\n constructors: dedupeCallables(record.constructors),\n functions: dedupeCallables(record.functions),\n methods: dedupeCallables(record.methods),\n };\n\n generateBindings(context, callables);\n const members = renderRecordMembers(context, record, className, callables);\n const body = indentMembers(members);\n const heritage = isErrorSubclass ? \" extends globalThis.Error\" : \"\";\n const doc = getDoc(record);\n\n context.module.appendDeclaration(\n `${doc}export class ${className}${heritage} {\\n${body}\\n}`,\n context.declaredType(className),\n );\n\n context.module.appendDeclaration(renderRecordConstructorPropsInterface(context, record, className));\n const gtypeExpr = renderSourceGtype(context, record);\n\n appendWrapperClassRegistration(context, {\n className,\n gtypeExpr,\n });\n};\n\nconst renderRecordMembers = (\n context: ModuleContext,\n record: GirRecord,\n className: string,\n callables: Callables,\n): string[] => {\n const isErrorSubclass = isGErrorRecord(context, record);\n\n const { members, claimedNames } = renderPlainTypeMembers({\n context,\n className,\n callables,\n hasGtype: record.glibGetType !== undefined,\n });\n\n members.unshift(renderRecordConstructor(context, record, className, isErrorSubclass));\n const { slots } = computeRecordFieldSlots(context, record.fields, record.isUnion);\n\n for (const slot of slots) {\n const block = renderRecordFieldAccessor(context, slot, claimedNames, record.fields);\n\n if (block !== undefined) {\n members.push(block);\n }\n }\n\n if (isErrorSubclass) {\n members.push('get name(): string {\\n return \"GLib.Error\";\\n}');\n }\n\n return members;\n};\n\nexport { generateRecord };\n"]}
@@ -8,7 +8,7 @@ type InterfaceRegistration = {
8
8
  className: string;
9
9
  makerName: string;
10
10
  gtypeExpr?: string | undefined;
11
- vfuncs?: string | undefined;
11
+ layout?: string | undefined;
12
12
  };
13
13
  declare const appendWrapperClassRegistration: (context: ModuleContext, registration: WrapperClassRegistration) => void;
14
14
  declare const appendInterfaceRegistration: (context: ModuleContext, registration: InterfaceRegistration) => void;
@@ -8,13 +8,13 @@ const appendWrapperClassRegistration = (context, registration) => {
8
8
  context.module.appendRegistration(`registerWrapperClass(${className}, ${args});`);
9
9
  };
10
10
  const appendInterfaceRegistration = (context, registration) => {
11
- const { className, makerName, gtypeExpr, vfuncs } = registration;
11
+ const { className, makerName, gtypeExpr, layout } = registration;
12
12
  if (gtypeExpr === undefined) {
13
13
  return;
14
14
  }
15
15
  context.addRuntimeImport("registerInterface");
16
16
  const base = `${className}, ${gtypeExpr}, ${makerName}`;
17
- const args = vfuncs === undefined ? base : `${base}, ${vfuncs}`;
17
+ const args = layout === undefined ? base : `${base}, ${layout}`;
18
18
  context.module.appendRegistration(`registerInterface(${args});`);
19
19
  };
20
20
  export { appendWrapperClassRegistration, appendInterfaceRegistration };