@gtkx/codegen 1.0.0 → 1.2.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 (347) hide show
  1. package/README.md +1 -1
  2. package/dist/analysis/descriptor-render.d.ts +12 -15
  3. package/dist/analysis/descriptor-render.d.ts.map +1 -1
  4. package/dist/analysis/descriptor-render.js +59 -38
  5. package/dist/analysis/descriptor-render.js.map +1 -1
  6. package/dist/analysis/descriptor.d.ts +25 -10
  7. package/dist/analysis/descriptor.d.ts.map +1 -1
  8. package/dist/analysis/descriptor.js +37 -9
  9. package/dist/analysis/descriptor.js.map +1 -1
  10. package/dist/analysis/inheritance.d.ts +4 -2
  11. package/dist/analysis/inheritance.d.ts.map +1 -1
  12. package/dist/analysis/inheritance.js +80 -38
  13. package/dist/analysis/inheritance.js.map +1 -1
  14. package/dist/analysis/interface-conflicts.d.ts +25 -0
  15. package/dist/analysis/interface-conflicts.d.ts.map +1 -0
  16. package/dist/analysis/interface-conflicts.js +139 -0
  17. package/dist/analysis/interface-conflicts.js.map +1 -0
  18. package/dist/analysis/param-capability.d.ts.map +1 -1
  19. package/dist/analysis/param-capability.js +3 -4
  20. package/dist/analysis/param-capability.js.map +1 -1
  21. package/dist/analysis/param-structure.js +2 -2
  22. package/dist/analysis/param-structure.js.map +1 -1
  23. package/dist/analysis/ts-type.d.ts +3 -2
  24. package/dist/analysis/ts-type.d.ts.map +1 -1
  25. package/dist/analysis/ts-type.js +26 -26
  26. package/dist/analysis/ts-type.js.map +1 -1
  27. package/dist/analysis/type-key.d.ts +5 -0
  28. package/dist/analysis/type-key.d.ts.map +1 -0
  29. package/dist/analysis/type-key.js +9 -0
  30. package/dist/analysis/type-key.js.map +1 -0
  31. package/dist/analysis/type-shape.d.ts +3 -2
  32. package/dist/analysis/type-shape.d.ts.map +1 -1
  33. package/dist/analysis/type-shape.js +2 -1
  34. package/dist/analysis/type-shape.js.map +1 -1
  35. package/dist/compile.d.ts +14 -6
  36. package/dist/compile.d.ts.map +1 -1
  37. package/dist/compile.js +125 -24
  38. package/dist/compile.js.map +1 -1
  39. package/dist/docs/api-reference.d.ts +2 -0
  40. package/dist/docs/api-reference.d.ts.map +1 -1
  41. package/dist/docs/api-reference.js +11 -10
  42. package/dist/docs/api-reference.js.map +1 -1
  43. package/dist/docs/element-page.d.ts.map +1 -1
  44. package/dist/docs/element-page.js +5 -3
  45. package/dist/docs/element-page.js.map +1 -1
  46. package/dist/docs/pipeline.d.ts +1 -0
  47. package/dist/docs/pipeline.d.ts.map +1 -1
  48. package/dist/docs/pipeline.js +93 -19
  49. package/dist/docs/pipeline.js.map +1 -1
  50. package/dist/docs/render.d.ts +2 -1
  51. package/dist/docs/render.d.ts.map +1 -1
  52. package/dist/docs/render.js +5 -4
  53. package/dist/docs/render.js.map +1 -1
  54. package/dist/docs/symbol-page.d.ts.map +1 -1
  55. package/dist/docs/symbol-page.js +10 -9
  56. package/dist/docs/symbol-page.js.map +1 -1
  57. package/dist/fingerprint.d.ts +20 -3
  58. package/dist/fingerprint.d.ts.map +1 -1
  59. package/dist/fingerprint.js +56 -37
  60. package/dist/fingerprint.js.map +1 -1
  61. package/dist/gi.d.ts +1 -0
  62. package/dist/gi.d.ts.map +1 -1
  63. package/dist/gi.js +8 -2
  64. package/dist/gi.js.map +1 -1
  65. package/dist/gir/ancestry.d.ts +7 -1
  66. package/dist/gir/ancestry.d.ts.map +1 -1
  67. package/dist/gir/ancestry.js +9 -1
  68. package/dist/gir/ancestry.js.map +1 -1
  69. package/dist/gir/annotations.d.ts +1 -2
  70. package/dist/gir/annotations.d.ts.map +1 -1
  71. package/dist/gir/annotations.js +1 -1
  72. package/dist/gir/annotations.js.map +1 -1
  73. package/dist/gir/cursor-overrides.d.ts +8 -0
  74. package/dist/gir/cursor-overrides.d.ts.map +1 -0
  75. package/dist/gir/cursor-overrides.js +6 -0
  76. package/dist/gir/cursor-overrides.js.map +1 -0
  77. package/dist/gir/emittable.d.ts +7 -0
  78. package/dist/gir/emittable.d.ts.map +1 -0
  79. package/dist/gir/emittable.js +3 -0
  80. package/dist/gir/emittable.js.map +1 -0
  81. package/dist/gir/function.d.ts.map +1 -1
  82. package/dist/gir/function.js +28 -2
  83. package/dist/gir/function.js.map +1 -1
  84. package/dist/gir/gir-path.d.ts +1 -1
  85. package/dist/gir/gir-path.js +1 -1
  86. package/dist/gir/gir-path.js.map +1 -1
  87. package/dist/gir/library.d.ts +5 -1
  88. package/dist/gir/library.d.ts.map +1 -1
  89. package/dist/gir/library.js +9 -2
  90. package/dist/gir/library.js.map +1 -1
  91. package/dist/gir/namespace.d.ts +5 -1
  92. package/dist/gir/namespace.d.ts.map +1 -1
  93. package/dist/gir/namespace.js +4 -2
  94. package/dist/gir/namespace.js.map +1 -1
  95. package/dist/gir/parameter.d.ts +13 -1
  96. package/dist/gir/parameter.d.ts.map +1 -1
  97. package/dist/gir/parameter.js +1 -0
  98. package/dist/gir/parameter.js.map +1 -1
  99. package/dist/gir/parse.d.ts.map +1 -1
  100. package/dist/gir/parse.js +6 -6
  101. package/dist/gir/parse.js.map +1 -1
  102. package/dist/gir/primitives.js +1 -1
  103. package/dist/gir/primitives.js.map +1 -1
  104. package/dist/guards.d.ts +16 -0
  105. package/dist/guards.d.ts.map +1 -0
  106. package/dist/guards.js +11 -0
  107. package/dist/guards.js.map +1 -0
  108. package/dist/internal.d.ts +2 -0
  109. package/dist/internal.d.ts.map +1 -1
  110. package/dist/internal.js +2 -0
  111. package/dist/internal.js.map +1 -1
  112. package/dist/json.d.ts +3 -0
  113. package/dist/json.d.ts.map +1 -0
  114. package/dist/json.js +11 -0
  115. package/dist/json.js.map +1 -0
  116. package/dist/khronos/args.d.ts.map +1 -1
  117. package/dist/khronos/args.js +8 -6
  118. package/dist/khronos/args.js.map +1 -1
  119. package/dist/khronos/modules.d.ts.map +1 -1
  120. package/dist/khronos/modules.js +22 -7
  121. package/dist/khronos/modules.js.map +1 -1
  122. package/dist/khronos/parse.d.ts.map +1 -1
  123. package/dist/khronos/parse.js +3 -4
  124. package/dist/khronos/parse.js.map +1 -1
  125. package/dist/khronos/pipeline.d.ts +1 -1
  126. package/dist/khronos/pipeline.d.ts.map +1 -1
  127. package/dist/khronos/pipeline.js.map +1 -1
  128. package/dist/khronos/plan.d.ts +1 -7
  129. package/dist/khronos/plan.d.ts.map +1 -1
  130. package/dist/khronos/plan.js +1 -1
  131. package/dist/khronos/plan.js.map +1 -1
  132. package/dist/khronos/render.d.ts.map +1 -1
  133. package/dist/khronos/render.js +8 -4
  134. package/dist/khronos/render.js.map +1 -1
  135. package/dist/runner.d.ts +7 -1
  136. package/dist/runner.d.ts.map +1 -1
  137. package/dist/runner.js +21 -3
  138. package/dist/runner.js.map +1 -1
  139. package/dist/staging.d.ts +5 -0
  140. package/dist/staging.d.ts.map +1 -0
  141. package/dist/staging.js +57 -0
  142. package/dist/staging.js.map +1 -0
  143. package/dist/store/compile-store.d.ts +0 -1
  144. package/dist/store/compile-store.d.ts.map +1 -1
  145. package/dist/store/compile-store.js +7 -32
  146. package/dist/store/compile-store.js.map +1 -1
  147. package/dist/store/gi/callables.d.ts +6 -3
  148. package/dist/store/gi/callables.d.ts.map +1 -1
  149. package/dist/store/gi/callables.js +40 -30
  150. package/dist/store/gi/callables.js.map +1 -1
  151. package/dist/store/gi/callback.d.ts.map +1 -1
  152. package/dist/store/gi/callback.js +9 -5
  153. package/dist/store/gi/callback.js.map +1 -1
  154. package/dist/store/gi/class.d.ts.map +1 -1
  155. package/dist/store/gi/class.js +104 -44
  156. package/dist/store/gi/class.js.map +1 -1
  157. package/dist/store/gi/companion.d.ts.map +1 -1
  158. package/dist/store/gi/companion.js +6 -6
  159. package/dist/store/gi/companion.js.map +1 -1
  160. package/dist/store/gi/constant.d.ts.map +1 -1
  161. package/dist/store/gi/constant.js +11 -3
  162. package/dist/store/gi/constant.js.map +1 -1
  163. package/dist/store/gi/constructor-props.js +1 -1
  164. package/dist/store/gi/constructor-props.js.map +1 -1
  165. package/dist/store/gi/enum.d.ts.map +1 -1
  166. package/dist/store/gi/enum.js +29 -12
  167. package/dist/store/gi/enum.js.map +1 -1
  168. package/dist/store/gi/function.d.ts +1 -3
  169. package/dist/store/gi/function.d.ts.map +1 -1
  170. package/dist/store/gi/function.js +24 -18
  171. package/dist/store/gi/function.js.map +1 -1
  172. package/dist/store/gi/gtype-binding.d.ts.map +1 -1
  173. package/dist/store/gi/gtype-binding.js +4 -1
  174. package/dist/store/gi/gtype-binding.js.map +1 -1
  175. package/dist/store/gi/interface.d.ts.map +1 -1
  176. package/dist/store/gi/interface.js +34 -19
  177. package/dist/store/gi/interface.js.map +1 -1
  178. package/dist/store/gi/method.d.ts +7 -6
  179. package/dist/store/gi/method.d.ts.map +1 -1
  180. package/dist/store/gi/method.js +13 -24
  181. package/dist/store/gi/method.js.map +1 -1
  182. package/dist/store/gi/param-marshal.d.ts +3 -2
  183. package/dist/store/gi/param-marshal.d.ts.map +1 -1
  184. package/dist/store/gi/param-marshal.js +50 -5
  185. package/dist/store/gi/param-marshal.js.map +1 -1
  186. package/dist/store/gi/pipeline.d.ts.map +1 -1
  187. package/dist/store/gi/pipeline.js +21 -10
  188. package/dist/store/gi/pipeline.js.map +1 -1
  189. package/dist/store/gi/properties.d.ts +2 -1
  190. package/dist/store/gi/properties.d.ts.map +1 -1
  191. package/dist/store/gi/properties.js +6 -3
  192. package/dist/store/gi/properties.js.map +1 -1
  193. package/dist/store/gi/property-accessor.d.ts +10 -8
  194. package/dist/store/gi/property-accessor.d.ts.map +1 -1
  195. package/dist/store/gi/property-accessor.js +49 -91
  196. package/dist/store/gi/property-accessor.js.map +1 -1
  197. package/dist/store/gi/record-constructor.d.ts +8 -1
  198. package/dist/store/gi/record-constructor.d.ts.map +1 -1
  199. package/dist/store/gi/record-constructor.js +34 -13
  200. package/dist/store/gi/record-constructor.js.map +1 -1
  201. package/dist/store/gi/record-field-accessor.d.ts.map +1 -1
  202. package/dist/store/gi/record-field-accessor.js +20 -4
  203. package/dist/store/gi/record-field-accessor.js.map +1 -1
  204. package/dist/store/gi/record-layout.d.ts +6 -1
  205. package/dist/store/gi/record-layout.d.ts.map +1 -1
  206. package/dist/store/gi/record-layout.js +8 -1
  207. package/dist/store/gi/record-layout.js.map +1 -1
  208. package/dist/store/gi/record.d.ts.map +1 -1
  209. package/dist/store/gi/record.js +19 -8
  210. package/dist/store/gi/record.js.map +1 -1
  211. package/dist/store/gi/registration.js +2 -2
  212. package/dist/store/gi/registration.js.map +1 -1
  213. package/dist/store/gi/return-wrap.js +1 -1
  214. package/dist/store/gi/return-wrap.js.map +1 -1
  215. package/dist/store/gi/signal.d.ts +2 -1
  216. package/dist/store/gi/signal.d.ts.map +1 -1
  217. package/dist/store/gi/signal.js +55 -28
  218. package/dist/store/gi/signal.js.map +1 -1
  219. package/dist/store/gi/value-marshalable.d.ts.map +1 -1
  220. package/dist/store/gi/value-marshalable.js +2 -1
  221. package/dist/store/gi/value-marshalable.js.map +1 -1
  222. package/dist/store/gi/vtable.d.ts +4 -1
  223. package/dist/store/gi/vtable.d.ts.map +1 -1
  224. package/dist/store/gi/vtable.js +60 -17
  225. package/dist/store/gi/vtable.js.map +1 -1
  226. package/dist/store/gi-store.d.ts +1 -0
  227. package/dist/store/gi-store.d.ts.map +1 -1
  228. package/dist/store/gi-store.js +15 -20
  229. package/dist/store/gi-store.js.map +1 -1
  230. package/dist/store/jsx/generated-elements.d.ts +2 -1
  231. package/dist/store/jsx/generated-elements.d.ts.map +1 -1
  232. package/dist/store/jsx/generated-elements.js +13 -7
  233. package/dist/store/jsx/generated-elements.js.map +1 -1
  234. package/dist/store/jsx/jsx.js +3 -3
  235. package/dist/store/jsx/jsx.js.map +1 -1
  236. package/dist/store/jsx/metadata.d.ts.map +1 -1
  237. package/dist/store/jsx/metadata.js +3 -1
  238. package/dist/store/jsx/metadata.js.map +1 -1
  239. package/dist/store/jsx-store.d.ts.map +1 -1
  240. package/dist/store/jsx-store.js +3 -4
  241. package/dist/store/jsx-store.js.map +1 -1
  242. package/dist/store/resolve-store.d.ts +14 -3
  243. package/dist/store/resolve-store.d.ts.map +1 -1
  244. package/dist/store/resolve-store.js +98 -15
  245. package/dist/store/resolve-store.js.map +1 -1
  246. package/dist/store/store-fs.d.ts +9 -7
  247. package/dist/store/store-fs.d.ts.map +1 -1
  248. package/dist/store/store-fs.js +54 -25
  249. package/dist/store/store-fs.js.map +1 -1
  250. package/dist/store/store-links.d.ts +3 -0
  251. package/dist/store/store-links.d.ts.map +1 -0
  252. package/dist/store/store-links.js +39 -0
  253. package/dist/store/store-links.js.map +1 -0
  254. package/dist/writer/comparison-context.d.ts +4 -0
  255. package/dist/writer/comparison-context.d.ts.map +1 -0
  256. package/dist/writer/comparison-context.js +13 -0
  257. package/dist/writer/comparison-context.js.map +1 -0
  258. package/dist/writer/context.d.ts +3 -3
  259. package/dist/writer/context.d.ts.map +1 -1
  260. package/dist/writer/context.js +11 -6
  261. package/dist/writer/context.js.map +1 -1
  262. package/dist/writer/module.d.ts +13 -5
  263. package/dist/writer/module.d.ts.map +1 -1
  264. package/dist/writer/module.js +68 -11
  265. package/dist/writer/module.js.map +1 -1
  266. package/dist/xml.d.ts +8 -1
  267. package/dist/xml.d.ts.map +1 -1
  268. package/dist/xml.js +70 -1
  269. package/dist/xml.js.map +1 -1
  270. package/overrides/gobject/object.ts.ejs +2 -0
  271. package/package.json +14 -3
  272. package/src/analysis/descriptor-render.ts +106 -52
  273. package/src/analysis/descriptor.ts +76 -15
  274. package/src/analysis/inheritance.ts +134 -44
  275. package/src/analysis/interface-conflicts.ts +235 -0
  276. package/src/analysis/param-capability.ts +3 -6
  277. package/src/analysis/param-structure.ts +2 -2
  278. package/src/analysis/ts-type.ts +43 -28
  279. package/src/analysis/type-key.ts +14 -0
  280. package/src/analysis/type-shape.ts +5 -2
  281. package/src/compile.ts +192 -27
  282. package/src/docs/api-reference.ts +13 -10
  283. package/src/docs/element-page.ts +5 -2
  284. package/src/docs/pipeline.ts +140 -24
  285. package/src/docs/render.ts +7 -3
  286. package/src/docs/symbol-page.ts +12 -11
  287. package/src/fingerprint.ts +95 -47
  288. package/src/gi.ts +10 -2
  289. package/src/gir/ancestry.ts +17 -1
  290. package/src/gir/annotations.ts +1 -1
  291. package/src/gir/cursor-overrides.ts +12 -0
  292. package/src/gir/emittable.ts +8 -0
  293. package/src/gir/function.ts +45 -9
  294. package/src/gir/gir-path.ts +1 -1
  295. package/src/gir/library.ts +10 -2
  296. package/src/gir/namespace.ts +8 -2
  297. package/src/gir/parameter.ts +15 -0
  298. package/src/gir/parse.ts +10 -7
  299. package/src/gir/primitives.ts +1 -1
  300. package/src/guards.ts +23 -0
  301. package/src/internal.ts +2 -0
  302. package/src/json.ts +11 -0
  303. package/src/khronos/args.ts +9 -6
  304. package/src/khronos/modules.ts +25 -9
  305. package/src/khronos/parse.ts +3 -4
  306. package/src/khronos/pipeline.ts +1 -1
  307. package/src/khronos/plan.ts +0 -1
  308. package/src/khronos/render.ts +8 -6
  309. package/src/runner.ts +26 -4
  310. package/src/staging.ts +67 -0
  311. package/src/store/compile-store.ts +7 -38
  312. package/src/store/gi/callables.ts +60 -33
  313. package/src/store/gi/callback.ts +9 -9
  314. package/src/store/gi/class.ts +140 -53
  315. package/src/store/gi/companion.ts +7 -6
  316. package/src/store/gi/constant.ts +13 -3
  317. package/src/store/gi/constructor-props.ts +1 -1
  318. package/src/store/gi/enum.ts +36 -26
  319. package/src/store/gi/function.ts +30 -24
  320. package/src/store/gi/gtype-binding.ts +7 -2
  321. package/src/store/gi/interface.ts +39 -20
  322. package/src/store/gi/method.ts +26 -32
  323. package/src/store/gi/param-marshal.ts +77 -6
  324. package/src/store/gi/pipeline.ts +25 -15
  325. package/src/store/gi/properties.ts +8 -4
  326. package/src/store/gi/property-accessor.ts +73 -161
  327. package/src/store/gi/record-constructor.ts +53 -21
  328. package/src/store/gi/record-field-accessor.ts +26 -4
  329. package/src/store/gi/record-layout.ts +11 -1
  330. package/src/store/gi/record.ts +20 -12
  331. package/src/store/gi/registration.ts +2 -2
  332. package/src/store/gi/return-wrap.ts +1 -1
  333. package/src/store/gi/signal.ts +66 -42
  334. package/src/store/gi/value-marshalable.ts +3 -1
  335. package/src/store/gi/vtable.ts +97 -20
  336. package/src/store/gi-store.ts +26 -31
  337. package/src/store/jsx/generated-elements.ts +17 -8
  338. package/src/store/jsx/jsx.ts +3 -3
  339. package/src/store/jsx/metadata.ts +4 -1
  340. package/src/store/jsx-store.ts +3 -4
  341. package/src/store/resolve-store.ts +133 -18
  342. package/src/store/store-fs.ts +82 -35
  343. package/src/store/store-links.ts +49 -0
  344. package/src/writer/comparison-context.ts +18 -0
  345. package/src/writer/context.ts +12 -6
  346. package/src/writer/module.ts +101 -14
  347. package/src/xml.ts +103 -1
@@ -1,4 +1,7 @@
1
+ import { sanitizeTypeIdentifier } from "@gtkx/utils";
1
2
  import { isInoutParameter } from "../../gir/parameter.js";
3
+ import { recordInlineSize } from "./record-layout.js";
4
+ import { isConstructibleRecord } from "./value-marshalable.js";
2
5
  const isHandlePassedInPlace = (context, parameter) => {
3
6
  if (parameter.direction !== "out" && parameter.direction !== "inout") {
4
7
  return false;
@@ -15,11 +18,53 @@ const underlyingType = (context, ref) => {
15
18
  return type.value.target === undefined ? undefined : underlyingType(context, type.value.target);
16
19
  };
17
20
  const underlyingParamKind = (context, parameter) => parameter.type === undefined ? undefined : underlyingType(context, parameter.type)?.kind;
18
- const isCollectibleCallerOut = (context, parameter) => {
19
- const kind = underlyingParamKind(context, parameter);
20
- return kind === "record" || kind === "class";
21
+ const resolvedTypeName = (context, ref) => {
22
+ let current = ref;
23
+ while (current !== undefined) {
24
+ const resolved = context.library.typeFor(current);
25
+ if (resolved?.kind === "alias" && resolved.value.target !== undefined) {
26
+ current = resolved.value.target;
27
+ continue;
28
+ }
29
+ return context.library.nameFor(current);
30
+ }
31
+ return undefined;
32
+ };
33
+ const recordCallerOutAllocation = (context, name, type) => {
34
+ const size = recordInlineSize(context, type.value);
35
+ if (size === undefined) {
36
+ return undefined;
37
+ }
38
+ return isConstructibleRecord(context, type.namespace.name, type.value)
39
+ ? { ...name, strategy: "construct" }
40
+ : { ...name, strategy: "allocate", size };
41
+ };
42
+ const callerOutAllocation = (context, parameter) => {
43
+ const name = resolvedTypeName(context, parameter.type);
44
+ const type = parameter.type === undefined ? undefined : underlyingType(context, parameter.type);
45
+ if (name === undefined || type === undefined) {
46
+ return undefined;
47
+ }
48
+ if (type.kind === "class") {
49
+ return { ...name, strategy: "construct" };
50
+ }
51
+ return type.kind === "record" ? recordCallerOutAllocation(context, name, type) : undefined;
52
+ };
53
+ const renderCallerOutInstance = (context, parameter) => {
54
+ const allocation = callerOutAllocation(context, parameter);
55
+ if (allocation === undefined) {
56
+ throw new Error("renderCallerOutInstance: expected a caller-allocated out-parameter with a known layout");
57
+ }
58
+ const classExpression = context.qualify(allocation.namespaceName, sanitizeTypeIdentifier(allocation.typeName));
59
+ if (allocation.strategy === "construct") {
60
+ return `new ${classExpression}()`;
61
+ }
62
+ context.addRuntimeImport("alloc");
63
+ context.addRuntimeImport("wrapHandle");
64
+ return `wrapHandle(alloc(${String(allocation.size)}), ${classExpression})`;
21
65
  };
22
- const isRecordCallerOut = (context, parameter) => underlyingParamKind(context, parameter) === "record";
66
+ const isCollectibleCallerOut = (context, parameter) => callerOutAllocation(context, parameter) !== undefined;
67
+ const isAllocatableCallerOut = (context, parameter) => underlyingParamKind(context, parameter) === "record" && isCollectibleCallerOut(context, parameter);
23
68
  const isRecordInout = (context, parameter) => isInoutParameter(parameter) && underlyingParamKind(context, parameter) === "record";
24
69
  const isHandlePassing = (context, ref) => {
25
70
  const type = context.library.typeFor(ref);
@@ -50,5 +95,5 @@ const isClosureType = (context, ref) => {
50
95
  const name = context.library.nameFor(ref);
51
96
  return name?.namespaceName === "GObject" && name.typeName === "Closure";
52
97
  };
53
- export { isClosureType, isHandlePassedInPlace, isCollectibleCallerOut, isRecordCallerOut, isRecordInout, isHandlePassing, underlyingType, };
98
+ export { isAllocatableCallerOut, isClosureType, isHandlePassedInPlace, isCollectibleCallerOut, isRecordInout, isHandlePassing, renderCallerOutInstance, underlyingType, };
54
99
  //# sourceMappingURL=param-marshal.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"param-marshal.js","sourceRoot":"","sources":["../../../src/store/gi/param-marshal.ts"],"names":[],"mappings":"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","sourcesContent":["import type { TypeId } from \"../../gir/type-id.js\";\nimport type { GirType } from \"../../gir/type.js\";\nimport type { ModuleContext } from \"../../writer/context.js\";\nimport { type GirParameter, isInoutParameter } from \"../../gir/parameter.js\";\n\nconst isHandlePassedInPlace = (context: ModuleContext, parameter: GirParameter): boolean => {\n if (parameter.direction !== \"out\" && parameter.direction !== \"inout\") {\n return false;\n }\n\n return (\n (parameter.callerAllocates || parameter.direction === \"inout\") &&\n parameter.type !== undefined &&\n isHandlePassing(context, parameter.type)\n );\n};\n\nconst underlyingType = (context: ModuleContext, ref: TypeId): GirType | undefined => {\n const type = context.library.typeFor(ref);\n\n if (type?.kind !== \"alias\") {\n return type;\n }\n\n return type.value.target === undefined ? undefined : underlyingType(context, type.value.target);\n};\n\nconst underlyingParamKind = (context: ModuleContext, parameter: GirParameter): GirType[\"kind\"] | undefined =>\n parameter.type === undefined ? undefined : underlyingType(context, parameter.type)?.kind;\n\nconst isCollectibleCallerOut = (context: ModuleContext, parameter: GirParameter): boolean => {\n const kind = underlyingParamKind(context, parameter);\n\n return kind === \"record\" || kind === \"class\";\n};\n\nconst isRecordCallerOut = (context: ModuleContext, parameter: GirParameter): boolean =>\n underlyingParamKind(context, parameter) === \"record\";\n\nconst isRecordInout = (context: ModuleContext, parameter: GirParameter): boolean =>\n isInoutParameter(parameter) && underlyingParamKind(context, parameter) === \"record\";\n\nconst isHandlePassing = (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 \"class\":\n case \"interface\":\n case \"record\": {\n return true;\n }\n case \"alias\": {\n return type.value.target !== undefined && isHandlePassing(context, type.value.target);\n }\n case \"callback\":\n case \"carray\":\n case \"enum\":\n case \"hashtable\":\n case \"list\":\n case \"primitive\":\n case \"varargs\": {\n return false;\n }\n }\n};\n\nconst isClosureType = (context: ModuleContext, ref: TypeId): boolean => {\n const name = context.library.nameFor(ref);\n\n return name?.namespaceName === \"GObject\" && name.typeName === \"Closure\";\n};\n\nexport {\n isClosureType,\n isHandlePassedInPlace,\n isCollectibleCallerOut,\n isRecordCallerOut,\n isRecordInout,\n isHandlePassing,\n underlyingType,\n};\n"]}
1
+ {"version":3,"file":"param-marshal.js","sourceRoot":"","sources":["../../../src/store/gi/param-marshal.ts"],"names":[],"mappings":"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","sourcesContent":["import { sanitizeTypeIdentifier } from \"@gtkx/utils\";\nimport type { TypeId } from \"../../gir/type-id.js\";\nimport type { GirType } from \"../../gir/type.js\";\nimport type { ModuleContext } from \"../../writer/context.js\";\nimport { type GirParameter, isInoutParameter } from \"../../gir/parameter.js\";\nimport { recordInlineSize } from \"./record-layout.js\";\nimport { isConstructibleRecord } from \"./value-marshalable.js\";\n\ntype TypeName = { namespaceName: string; typeName: string };\ntype CallerOutAllocation = TypeName & ({ strategy: \"construct\" } | { strategy: \"allocate\"; size: number });\n\nconst isHandlePassedInPlace = (context: ModuleContext, parameter: GirParameter): boolean => {\n if (parameter.direction !== \"out\" && parameter.direction !== \"inout\") {\n return false;\n }\n\n return (\n (parameter.callerAllocates || parameter.direction === \"inout\") &&\n parameter.type !== undefined &&\n isHandlePassing(context, parameter.type)\n );\n};\n\nconst underlyingType = (context: ModuleContext, ref: TypeId): GirType | undefined => {\n const type = context.library.typeFor(ref);\n\n if (type?.kind !== \"alias\") {\n return type;\n }\n\n return type.value.target === undefined ? undefined : underlyingType(context, type.value.target);\n};\n\nconst underlyingParamKind = (context: ModuleContext, parameter: GirParameter): GirType[\"kind\"] | undefined =>\n parameter.type === undefined ? undefined : underlyingType(context, parameter.type)?.kind;\n\nconst resolvedTypeName = (context: ModuleContext, ref: TypeId | undefined): TypeName | undefined => {\n let current = ref;\n\n while (current !== undefined) {\n const resolved = context.library.typeFor(current);\n\n if (resolved?.kind === \"alias\" && resolved.value.target !== undefined) {\n current = resolved.value.target;\n continue;\n }\n\n return context.library.nameFor(current);\n }\n\n return undefined;\n};\n\nconst recordCallerOutAllocation = (\n context: ModuleContext,\n name: TypeName,\n type: Extract<GirType, { kind: \"record\" }>,\n): CallerOutAllocation | undefined => {\n const size = recordInlineSize(context, type.value);\n\n if (size === undefined) {\n return undefined;\n }\n\n return isConstructibleRecord(context, type.namespace.name, type.value)\n ? { ...name, strategy: \"construct\" }\n : { ...name, strategy: \"allocate\", size };\n};\n\nconst callerOutAllocation = (context: ModuleContext, parameter: GirParameter): CallerOutAllocation | undefined => {\n const name = resolvedTypeName(context, parameter.type);\n const type = parameter.type === undefined ? undefined : underlyingType(context, parameter.type);\n\n if (name === undefined || type === undefined) {\n return undefined;\n }\n\n if (type.kind === \"class\") {\n return { ...name, strategy: \"construct\" };\n }\n\n return type.kind === \"record\" ? recordCallerOutAllocation(context, name, type) : undefined;\n};\n\nconst renderCallerOutInstance = (context: ModuleContext, parameter: GirParameter): string => {\n const allocation = callerOutAllocation(context, parameter);\n\n if (allocation === undefined) {\n throw new Error(\"renderCallerOutInstance: expected a caller-allocated out-parameter with a known layout\");\n }\n\n const classExpression = context.qualify(allocation.namespaceName, sanitizeTypeIdentifier(allocation.typeName));\n\n if (allocation.strategy === \"construct\") {\n return `new ${classExpression}()`;\n }\n\n context.addRuntimeImport(\"alloc\");\n context.addRuntimeImport(\"wrapHandle\");\n\n return `wrapHandle(alloc(${String(allocation.size)}), ${classExpression})`;\n};\n\nconst isCollectibleCallerOut = (context: ModuleContext, parameter: GirParameter): boolean =>\n callerOutAllocation(context, parameter) !== undefined;\n\nconst isAllocatableCallerOut = (context: ModuleContext, parameter: GirParameter): boolean =>\n underlyingParamKind(context, parameter) === \"record\" && isCollectibleCallerOut(context, parameter);\n\nconst isRecordInout = (context: ModuleContext, parameter: GirParameter): boolean =>\n isInoutParameter(parameter) && underlyingParamKind(context, parameter) === \"record\";\n\nconst isHandlePassing = (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 \"class\":\n case \"interface\":\n case \"record\": {\n return true;\n }\n case \"alias\": {\n return type.value.target !== undefined && isHandlePassing(context, type.value.target);\n }\n case \"callback\":\n case \"carray\":\n case \"enum\":\n case \"hashtable\":\n case \"list\":\n case \"primitive\":\n case \"varargs\": {\n return false;\n }\n }\n};\n\nconst isClosureType = (context: ModuleContext, ref: TypeId): boolean => {\n const name = context.library.nameFor(ref);\n\n return name?.namespaceName === \"GObject\" && name.typeName === \"Closure\";\n};\n\nexport {\n isAllocatableCallerOut,\n isClosureType,\n isHandlePassedInPlace,\n isCollectibleCallerOut,\n isRecordInout,\n isHandlePassing,\n renderCallerOutInstance,\n underlyingType,\n};\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"pipeline.d.ts","sourceRoot":"","sources":["../../../src/store/gi/pipeline.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,KAAK,EAAY,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAsBrE,QAAA,MAAM,uBAAuB,GAAI,WAAW,YAAY,EAAE,SAAS,OAAO,KAAG,MAO5E,CAAC;AA4GF,OAAO,EAAE,uBAAuB,EAAE,CAAC"}
1
+ {"version":3,"file":"pipeline.d.ts","sourceRoot":"","sources":["../../../src/store/gi/pipeline.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,KAAK,EAAY,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAuBrE,QAAA,MAAM,uBAAuB,GAAI,WAAW,YAAY,EAAE,SAAS,OAAO,KAAG,MAe5E,CAAC;AA4GF,OAAO,EAAE,uBAAuB,EAAE,CAAC"}
@@ -1,13 +1,15 @@
1
+ import { sanitizeTypeIdentifier } from "@gtkx/utils";
1
2
  import { renderTsType } from "../../analysis/ts-type.js";
3
+ import { getParentRef } from "../../gir/ancestry.js";
4
+ import { isEmittableEntity } from "../../gir/emittable.js";
2
5
  import { PRIMITIVE_TS_TYPE, primitiveCategory } from "../../gir/primitives.js";
3
- import { splitOptionalNamespace } from "../../gir/type-ref.js";
4
6
  import { ModuleContext } from "../../writer/context.js";
5
7
  import { generateCallback } from "./callback.js";
6
8
  import { generateClass } from "./class.js";
7
9
  import { generateConstant } from "./constant.js";
8
10
  import { getDoc } from "./doc-spec.js";
9
11
  import { generateEnum } from "./enum.js";
10
- import { generateNamespaceBootstrap, generateNamespaceFunction } from "./function.js";
12
+ import { generateNamespaceFunction } from "./function.js";
11
13
  import { generateInterface } from "./interface.js";
12
14
  import { generateRecord } from "./record.js";
13
15
  const generateNamespaceModule = (namespace, library) => {
@@ -15,6 +17,11 @@ const generateNamespaceModule = (namespace, library) => {
15
17
  context.addGObjectBootstrapImports();
16
18
  generateNamespaceTypes(context, namespace);
17
19
  generateNamespaceMembers(context, namespace);
20
+ if (!context.module.hasExports()) {
21
+ throw new Error(`GIR file at ${namespace.girFile} has nothing to generate: its ${namespace.name} namespace produces a ` +
22
+ "module with no exports, so the file is empty, truncated, or declares only entries GIR marks as not " +
23
+ "introspectable");
24
+ }
18
25
  return context.module.toSource();
19
26
  };
20
27
  const generateNamespaceTypes = (context, namespace) => {
@@ -38,7 +45,6 @@ const generateNamespaceMembers = (context, namespace) => {
38
45
  for (const fn of namespace.functions) {
39
46
  generateNamespaceFunction(context, fn);
40
47
  }
41
- generateNamespaceBootstrap(context, namespace);
42
48
  for (const constant of namespace.constants) {
43
49
  generateConstant(context, constant);
44
50
  }
@@ -47,10 +53,18 @@ const generateNamespaceMembers = (context, namespace) => {
47
53
  }
48
54
  };
49
55
  const generateAlias = (context, alias) => {
56
+ if (!isEmittableEntity(alias)) {
57
+ return;
58
+ }
50
59
  const category = alias.cType === undefined ? undefined : primitiveCategory(alias.cType);
51
60
  const targetType = category === "gtype" ? PRIMITIVE_TS_TYPE.gtype : renderTsType(context, alias.target);
52
61
  const doc = getDoc(alias);
53
- context.module.appendDeclaration(`${doc}export type ${alias.name} = ${targetType};`, context.declaredType(alias.name));
62
+ const name = sanitizeTypeIdentifier(alias.name);
63
+ context.declare({
64
+ name,
65
+ code: `${doc}export type ${name} = ${targetType};`,
66
+ owner: alias.name,
67
+ });
54
68
  };
55
69
  const visitClass = (state, klass) => {
56
70
  if (state.placed.has(klass) || state.visiting.has(klass)) {
@@ -83,14 +97,11 @@ const topologicalClassOrder = (classes, namespaceName) => {
83
97
  return state.result;
84
98
  };
85
99
  const sameNamespaceParent = (klass, namespaceName, byLocalName) => {
86
- if (klass.parent === undefined) {
87
- return undefined;
88
- }
89
- const [parentNamespace, typeName] = splitOptionalNamespace(klass.parent);
90
- if (parentNamespace !== undefined && parentNamespace !== namespaceName) {
100
+ const parent = getParentRef(klass);
101
+ if (parent === undefined || (parent.namespaceName !== undefined && parent.namespaceName !== namespaceName)) {
91
102
  return undefined;
92
103
  }
93
- return byLocalName.get(typeName);
104
+ return byLocalName.get(parent.typeName);
94
105
  };
95
106
  export { generateNamespaceModule };
96
107
  //# sourceMappingURL=pipeline.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"pipeline.js","sourceRoot":"","sources":["../../../src/store/gi/pipeline.ts"],"names":[],"mappings":"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","sourcesContent":["import type { GirClass } from \"../../gir/class.js\";\nimport type { Library } from \"../../gir/library.js\";\nimport type { GirAlias, GirNamespace } from \"../../gir/namespace.js\";\nimport { renderTsType } from \"../../analysis/ts-type.js\";\nimport { PRIMITIVE_TS_TYPE, primitiveCategory } from \"../../gir/primitives.js\";\nimport { splitOptionalNamespace } from \"../../gir/type-ref.js\";\nimport { ModuleContext } from \"../../writer/context.js\";\nimport { generateCallback } from \"./callback.js\";\nimport { generateClass } from \"./class.js\";\nimport { generateConstant } from \"./constant.js\";\nimport { getDoc } from \"./doc-spec.js\";\nimport { generateEnum } from \"./enum.js\";\nimport { generateNamespaceBootstrap, generateNamespaceFunction } from \"./function.js\";\nimport { generateInterface } from \"./interface.js\";\nimport { generateRecord } from \"./record.js\";\n\ntype TopologicalState = {\n namespaceName: string;\n byLocalName: Map<string, GirClass>;\n placed: Set<GirClass>;\n visiting: Set<GirClass>;\n result: GirClass[];\n};\n\nconst generateNamespaceModule = (namespace: GirNamespace, library: Library): string => {\n const context = new ModuleContext(namespace, library);\n context.addGObjectBootstrapImports();\n generateNamespaceTypes(context, namespace);\n generateNamespaceMembers(context, namespace);\n\n return context.module.toSource();\n};\n\nconst generateNamespaceTypes = (context: ModuleContext, namespace: GirNamespace): void => {\n for (const enumeration of namespace.enums) {\n generateEnum(context, enumeration);\n }\n\n for (const record of namespace.records) {\n generateRecord(context, record);\n }\n\n for (const klass of topologicalClassOrder(namespace.classes, namespace.name)) {\n generateClass(context, klass);\n }\n\n for (const iface of namespace.interfaces) {\n generateInterface(context, iface);\n }\n};\n\nconst generateNamespaceMembers = (context: ModuleContext, namespace: GirNamespace): void => {\n for (const callback of namespace.callbacks) {\n generateCallback(context, callback);\n }\n\n for (const fn of namespace.functions) {\n generateNamespaceFunction(context, fn);\n }\n\n generateNamespaceBootstrap(context, namespace);\n\n for (const constant of namespace.constants) {\n generateConstant(context, constant);\n }\n\n for (const alias of namespace.aliases) {\n generateAlias(context, alias);\n }\n};\n\nconst generateAlias = (context: ModuleContext, alias: GirAlias): void => {\n const category = alias.cType === undefined ? undefined : primitiveCategory(alias.cType);\n const targetType = category === \"gtype\" ? PRIMITIVE_TS_TYPE.gtype : renderTsType(context, alias.target);\n const doc = getDoc(alias);\n\n context.module.appendDeclaration(\n `${doc}export type ${alias.name} = ${targetType};`,\n context.declaredType(alias.name),\n );\n};\n\nconst visitClass = (state: TopologicalState, klass: GirClass): void => {\n if (state.placed.has(klass) || state.visiting.has(klass)) {\n return;\n }\n\n state.visiting.add(klass);\n const parent = sameNamespaceParent(klass, state.namespaceName, state.byLocalName);\n\n if (parent !== undefined) {\n visitClass(state, parent);\n }\n\n state.visiting.delete(klass);\n state.placed.add(klass);\n state.result.push(klass);\n};\n\nconst topologicalClassOrder = (classes: GirClass[], namespaceName: string): GirClass[] => {\n const byLocalName: Map<string, GirClass> = new Map();\n\n for (const klass of classes) {\n byLocalName.set(klass.name, klass);\n }\n\n const state: TopologicalState = {\n namespaceName,\n byLocalName,\n placed: new Set<GirClass>(),\n visiting: new Set<GirClass>(),\n result: [],\n };\n\n for (const klass of classes) {\n visitClass(state, klass);\n }\n\n return state.result;\n};\n\nconst sameNamespaceParent = (\n klass: GirClass,\n namespaceName: string,\n byLocalName: Map<string, GirClass>,\n): GirClass | undefined => {\n if (klass.parent === undefined) {\n return undefined;\n }\n\n const [parentNamespace, typeName] = splitOptionalNamespace(klass.parent);\n\n if (parentNamespace !== undefined && parentNamespace !== namespaceName) {\n return undefined;\n }\n\n return byLocalName.get(typeName);\n};\n\nexport { generateNamespaceModule };\n"]}
1
+ {"version":3,"file":"pipeline.js","sourceRoot":"","sources":["../../../src/store/gi/pipeline.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAIrD,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC/E,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,yBAAyB,EAAE,MAAM,eAAe,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAU7C,MAAM,uBAAuB,GAAG,CAAC,SAAuB,EAAE,OAAgB,EAAU,EAAE;IAClF,MAAM,OAAO,GAAG,IAAI,aAAa,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IACtD,OAAO,CAAC,0BAA0B,EAAE,CAAC;IACrC,sBAAsB,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IAC3C,wBAAwB,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IAE7C,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CACX,eAAe,SAAS,CAAC,OAAO,iCAAiC,SAAS,CAAC,IAAI,wBAAwB;YACvG,qGAAqG;YACrG,gBAAgB,CACnB,CAAC;IACN,CAAC;IAED,OAAO,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;AACrC,CAAC,CAAC;AAEF,MAAM,sBAAsB,GAAG,CAAC,OAAsB,EAAE,SAAuB,EAAQ,EAAE;IACrF,KAAK,MAAM,WAAW,IAAI,SAAS,CAAC,KAAK,EAAE,CAAC;QACxC,YAAY,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;IACvC,CAAC;IAED,KAAK,MAAM,MAAM,IAAI,SAAS,CAAC,OAAO,EAAE,CAAC;QACrC,cAAc,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IACpC,CAAC;IAED,KAAK,MAAM,KAAK,IAAI,qBAAqB,CAAC,SAAS,CAAC,OAAO,EAAE,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;QAC3E,aAAa,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAClC,CAAC;IAED,KAAK,MAAM,KAAK,IAAI,SAAS,CAAC,UAAU,EAAE,CAAC;QACvC,iBAAiB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IACtC,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,wBAAwB,GAAG,CAAC,OAAsB,EAAE,SAAuB,EAAQ,EAAE;IACvF,KAAK,MAAM,QAAQ,IAAI,SAAS,CAAC,SAAS,EAAE,CAAC;QACzC,gBAAgB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IACxC,CAAC;IAED,KAAK,MAAM,EAAE,IAAI,SAAS,CAAC,SAAS,EAAE,CAAC;QACnC,yBAAyB,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IAC3C,CAAC;IAED,KAAK,MAAM,QAAQ,IAAI,SAAS,CAAC,SAAS,EAAE,CAAC;QACzC,gBAAgB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IACxC,CAAC;IAED,KAAK,MAAM,KAAK,IAAI,SAAS,CAAC,OAAO,EAAE,CAAC;QACpC,aAAa,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAClC,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,aAAa,GAAG,CAAC,OAAsB,EAAE,KAAe,EAAQ,EAAE;IACpE,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5B,OAAO;IACX,CAAC;IAED,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,iBAAiB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACxF,MAAM,UAAU,GAAG,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC,YAAY,CAAC,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IACxG,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC1B,MAAM,IAAI,GAAG,sBAAsB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAEhD,OAAO,CAAC,OAAO,CAAC;QACZ,IAAI;QACJ,IAAI,EAAE,GAAG,GAAG,eAAe,IAAI,MAAM,UAAU,GAAG;QAClD,KAAK,EAAE,KAAK,CAAC,IAAI;KACpB,CAAC,CAAC;AACP,CAAC,CAAC;AAEF,MAAM,UAAU,GAAG,CAAC,KAAuB,EAAE,KAAe,EAAQ,EAAE;IAClE,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;QACvD,OAAO;IACX,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAC1B,MAAM,MAAM,GAAG,mBAAmB,CAAC,KAAK,EAAE,KAAK,CAAC,aAAa,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC;IAElF,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACvB,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAC9B,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC7B,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACxB,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC7B,CAAC,CAAC;AAEF,MAAM,qBAAqB,GAAG,CAAC,OAAmB,EAAE,aAAqB,EAAc,EAAE;IACrF,MAAM,WAAW,GAA0B,IAAI,GAAG,EAAE,CAAC;IAErD,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC1B,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACvC,CAAC;IAED,MAAM,KAAK,GAAqB;QAC5B,aAAa;QACb,WAAW;QACX,MAAM,EAAE,IAAI,GAAG,EAAY;QAC3B,QAAQ,EAAE,IAAI,GAAG,EAAY;QAC7B,MAAM,EAAE,EAAE;KACb,CAAC;IAEF,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC1B,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAC7B,CAAC;IAED,OAAO,KAAK,CAAC,MAAM,CAAC;AACxB,CAAC,CAAC;AAEF,MAAM,mBAAmB,GAAG,CACxB,KAAe,EACf,aAAqB,EACrB,WAAkC,EACd,EAAE;IACtB,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;IAEnC,IAAI,MAAM,KAAK,SAAS,IAAI,CAAC,MAAM,CAAC,aAAa,KAAK,SAAS,IAAI,MAAM,CAAC,aAAa,KAAK,aAAa,CAAC,EAAE,CAAC;QACzG,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,OAAO,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;AAC5C,CAAC,CAAC;AAEF,OAAO,EAAE,uBAAuB,EAAE,CAAC","sourcesContent":["import { sanitizeTypeIdentifier } from \"@gtkx/utils\";\nimport type { GirClass } from \"../../gir/class.js\";\nimport type { Library } from \"../../gir/library.js\";\nimport type { GirAlias, GirNamespace } from \"../../gir/namespace.js\";\nimport { renderTsType } from \"../../analysis/ts-type.js\";\nimport { getParentRef } from \"../../gir/ancestry.js\";\nimport { isEmittableEntity } from \"../../gir/emittable.js\";\nimport { PRIMITIVE_TS_TYPE, primitiveCategory } from \"../../gir/primitives.js\";\nimport { ModuleContext } from \"../../writer/context.js\";\nimport { generateCallback } from \"./callback.js\";\nimport { generateClass } from \"./class.js\";\nimport { generateConstant } from \"./constant.js\";\nimport { getDoc } from \"./doc-spec.js\";\nimport { generateEnum } from \"./enum.js\";\nimport { generateNamespaceFunction } from \"./function.js\";\nimport { generateInterface } from \"./interface.js\";\nimport { generateRecord } from \"./record.js\";\n\ntype TopologicalState = {\n namespaceName: string;\n byLocalName: Map<string, GirClass>;\n placed: Set<GirClass>;\n visiting: Set<GirClass>;\n result: GirClass[];\n};\n\nconst generateNamespaceModule = (namespace: GirNamespace, library: Library): string => {\n const context = new ModuleContext(namespace, library);\n context.addGObjectBootstrapImports();\n generateNamespaceTypes(context, namespace);\n generateNamespaceMembers(context, namespace);\n\n if (!context.module.hasExports()) {\n throw new Error(\n `GIR file at ${namespace.girFile} has nothing to generate: its ${namespace.name} namespace produces a ` +\n \"module with no exports, so the file is empty, truncated, or declares only entries GIR marks as not \" +\n \"introspectable\",\n );\n }\n\n return context.module.toSource();\n};\n\nconst generateNamespaceTypes = (context: ModuleContext, namespace: GirNamespace): void => {\n for (const enumeration of namespace.enums) {\n generateEnum(context, enumeration);\n }\n\n for (const record of namespace.records) {\n generateRecord(context, record);\n }\n\n for (const klass of topologicalClassOrder(namespace.classes, namespace.name)) {\n generateClass(context, klass);\n }\n\n for (const iface of namespace.interfaces) {\n generateInterface(context, iface);\n }\n};\n\nconst generateNamespaceMembers = (context: ModuleContext, namespace: GirNamespace): void => {\n for (const callback of namespace.callbacks) {\n generateCallback(context, callback);\n }\n\n for (const fn of namespace.functions) {\n generateNamespaceFunction(context, fn);\n }\n\n for (const constant of namespace.constants) {\n generateConstant(context, constant);\n }\n\n for (const alias of namespace.aliases) {\n generateAlias(context, alias);\n }\n};\n\nconst generateAlias = (context: ModuleContext, alias: GirAlias): void => {\n if (!isEmittableEntity(alias)) {\n return;\n }\n\n const category = alias.cType === undefined ? undefined : primitiveCategory(alias.cType);\n const targetType = category === \"gtype\" ? PRIMITIVE_TS_TYPE.gtype : renderTsType(context, alias.target);\n const doc = getDoc(alias);\n const name = sanitizeTypeIdentifier(alias.name);\n\n context.declare({\n name,\n code: `${doc}export type ${name} = ${targetType};`,\n owner: alias.name,\n });\n};\n\nconst visitClass = (state: TopologicalState, klass: GirClass): void => {\n if (state.placed.has(klass) || state.visiting.has(klass)) {\n return;\n }\n\n state.visiting.add(klass);\n const parent = sameNamespaceParent(klass, state.namespaceName, state.byLocalName);\n\n if (parent !== undefined) {\n visitClass(state, parent);\n }\n\n state.visiting.delete(klass);\n state.placed.add(klass);\n state.result.push(klass);\n};\n\nconst topologicalClassOrder = (classes: GirClass[], namespaceName: string): GirClass[] => {\n const byLocalName: Map<string, GirClass> = new Map();\n\n for (const klass of classes) {\n byLocalName.set(klass.name, klass);\n }\n\n const state: TopologicalState = {\n namespaceName,\n byLocalName,\n placed: new Set<GirClass>(),\n visiting: new Set<GirClass>(),\n result: [],\n };\n\n for (const klass of classes) {\n visitClass(state, klass);\n }\n\n return state.result;\n};\n\nconst sameNamespaceParent = (\n klass: GirClass,\n namespaceName: string,\n byLocalName: Map<string, GirClass>,\n): GirClass | undefined => {\n const parent = getParentRef(klass);\n\n if (parent === undefined || (parent.namespaceName !== undefined && parent.namespaceName !== namespaceName)) {\n return undefined;\n }\n\n return byLocalName.get(parent.typeName);\n};\n\nexport { generateNamespaceModule };\n"]}
@@ -1,6 +1,7 @@
1
1
  import type { GirClass } from "../../gir/class.js";
2
2
  import type { ModuleContext } from "../../writer/context.js";
3
+ import type { Declaration } from "../../writer/module.js";
3
4
  import { type ResolvedAccessor } from "./property-accessor.js";
4
- declare const renderPropertyDeclarations: (context: ModuleContext, klass: GirClass, className: string, accessors: ResolvedAccessor[]) => string[];
5
+ declare const renderPropertyDeclarations: (context: ModuleContext, klass: GirClass, className: string, accessors: ResolvedAccessor[]) => Declaration[];
5
6
  export { renderPropertyDeclarations };
6
7
  //# sourceMappingURL=properties.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"properties.d.ts","sourceRoot":"","sources":["../../../src/store/gi/properties.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAI7D,OAAO,EAAe,KAAK,gBAAgB,EAAwB,MAAM,wBAAwB,CAAC;AAuBlG,QAAA,MAAM,0BAA0B,GAC5B,SAAS,aAAa,EACtB,OAAO,QAAQ,EACf,WAAW,MAAM,EACjB,WAAW,gBAAgB,EAAE,KAC9B,MAAM,EAeR,CAAC;AAEF,OAAO,EAAE,0BAA0B,EAAE,CAAC"}
1
+ {"version":3,"file":"properties.d.ts","sourceRoot":"","sources":["../../../src/store/gi/properties.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAI1D,OAAO,EAAe,KAAK,gBAAgB,EAAwB,MAAM,wBAAwB,CAAC;AAuBlG,QAAA,MAAM,0BAA0B,GAC5B,SAAS,aAAa,EACtB,OAAO,QAAQ,EACf,WAAW,MAAM,EACjB,WAAW,gBAAgB,EAAE,KAC9B,WAAW,EAkBb,CAAC;AAEF,OAAO,EAAE,0BAA0B,EAAE,CAAC"}
@@ -3,7 +3,7 @@ import { renderBracedOrEmpty } from "../../writer/emit.js";
3
3
  import { parentCompanionRef } from "./companion.js";
4
4
  import { propertyDoc, resolveOwnerAccessor } from "./property-accessor.js";
5
5
  const PROPERTIES_SUFFIX = "Properties";
6
- const propertyEntry = (accessor) => `${propertyDoc(accessor.property)}${accessor.jsName}: ${accessor.tsType};`;
6
+ const propertyEntry = (accessor) => `${propertyDoc(accessor.property)}${accessor.jsName}: ${accessor.readType};`;
7
7
  const interfaceEntries = (context, klass) => {
8
8
  const entries = [];
9
9
  for (const { owner, property } of collectInterfaceProperties(context, klass)) {
@@ -24,8 +24,11 @@ const renderPropertyDeclarations = (context, klass, className, accessors) => {
24
24
  ];
25
25
  const map = `${className}${PROPERTIES_SUFFIX}`;
26
26
  return [
27
- renderBracedOrEmpty(`export interface ${map}${extendsClause}`, entries.join("\n")),
28
- renderBracedOrEmpty(`export interface ${className}`, `__properties__: ${map};`),
27
+ { name: map, code: renderBracedOrEmpty(`export interface ${map}${extendsClause}`, entries.join("\n")) },
28
+ {
29
+ name: className,
30
+ code: renderBracedOrEmpty(`export interface ${className}`, `__properties__: ${map};`),
31
+ },
29
32
  ];
30
33
  };
31
34
  export { renderPropertyDeclarations };
@@ -1 +1 @@
1
- {"version":3,"file":"properties.js","sourceRoot":"","sources":["../../../src/store/gi/properties.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,0BAA0B,EAAE,MAAM,+BAA+B,CAAC;AAC3E,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAyB,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAElG,MAAM,iBAAiB,GAAG,YAAY,CAAC;AAEvC,MAAM,aAAa,GAAG,CAAC,QAA0B,EAAU,EAAE,CACzD,GAAG,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,QAAQ,CAAC,MAAM,KAAK,QAAQ,CAAC,MAAM,GAAG,CAAC;AAE/E,MAAM,gBAAgB,GAAG,CAAC,OAAsB,EAAE,KAAe,EAAY,EAAE;IAC3E,MAAM,OAAO,GAAa,EAAE,CAAC;IAE7B,KAAK,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,0BAA0B,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC;QAC3E,MAAM,QAAQ,GAAG,oBAAoB,CAAC,OAAO,EAAE,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;QAExE,IAAI,CAAC,QAAQ,EAAE,SAAS,EAAE,CAAC;YACvB,SAAS;QACb,CAAC;QAED,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC1C,CAAC;IAED,OAAO,OAAO,CAAC;AACnB,CAAC,CAAC;AAEF,MAAM,0BAA0B,GAAG,CAC/B,OAAsB,EACtB,KAAe,EACf,SAAiB,EACjB,SAA6B,EACrB,EAAE;IACV,MAAM,SAAS,GAAG,kBAAkB,CAAC,OAAO,EAAE,KAAK,EAAE,iBAAiB,CAAC,CAAC;IACxE,MAAM,aAAa,GAAG,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY,SAAS,EAAE,CAAC;IAE7E,MAAM,OAAO,GAAG;QACZ,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QAChG,GAAG,gBAAgB,CAAC,OAAO,EAAE,KAAK,CAAC;KACtC,CAAC;IAEF,MAAM,GAAG,GAAG,GAAG,SAAS,GAAG,iBAAiB,EAAE,CAAC;IAE/C,OAAO;QACH,mBAAmB,CAAC,oBAAoB,GAAG,GAAG,aAAa,EAAE,EAAE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClF,mBAAmB,CAAC,oBAAoB,SAAS,EAAE,EAAE,mBAAmB,GAAG,GAAG,CAAC;KAClF,CAAC;AACN,CAAC,CAAC;AAEF,OAAO,EAAE,0BAA0B,EAAE,CAAC","sourcesContent":["import type { GirClass } from \"../../gir/class.js\";\nimport type { ModuleContext } from \"../../writer/context.js\";\nimport { collectInterfaceProperties } from \"../../analysis/inheritance.js\";\nimport { renderBracedOrEmpty } from \"../../writer/emit.js\";\nimport { parentCompanionRef } from \"./companion.js\";\nimport { propertyDoc, type ResolvedAccessor, resolveOwnerAccessor } from \"./property-accessor.js\";\n\nconst PROPERTIES_SUFFIX = \"Properties\";\n\nconst propertyEntry = (accessor: ResolvedAccessor): string =>\n `${propertyDoc(accessor.property)}${accessor.jsName}: ${accessor.tsType};`;\n\nconst interfaceEntries = (context: ModuleContext, klass: GirClass): string[] => {\n const entries: string[] = [];\n\n for (const { owner, property } of collectInterfaceProperties(context, klass)) {\n const accessor = resolveOwnerAccessor(context, property, owner.methods);\n\n if (!accessor?.hasGetter) {\n continue;\n }\n\n entries.push(propertyEntry(accessor));\n }\n\n return entries;\n};\n\nconst renderPropertyDeclarations = (\n context: ModuleContext,\n klass: GirClass,\n className: string,\n accessors: ResolvedAccessor[],\n): string[] => {\n const parentRef = parentCompanionRef(context, klass, PROPERTIES_SUFFIX);\n const extendsClause = parentRef === undefined ? \"\" : ` extends ${parentRef}`;\n\n const entries = [\n ...accessors.filter((accessor) => accessor.hasGetter).map((accessor) => propertyEntry(accessor)),\n ...interfaceEntries(context, klass),\n ];\n\n const map = `${className}${PROPERTIES_SUFFIX}`;\n\n return [\n renderBracedOrEmpty(`export interface ${map}${extendsClause}`, entries.join(\"\\n\")),\n renderBracedOrEmpty(`export interface ${className}`, `__properties__: ${map};`),\n ];\n};\n\nexport { renderPropertyDeclarations };\n"]}
1
+ {"version":3,"file":"properties.js","sourceRoot":"","sources":["../../../src/store/gi/properties.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,0BAA0B,EAAE,MAAM,+BAA+B,CAAC;AAC3E,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAyB,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAElG,MAAM,iBAAiB,GAAG,YAAY,CAAC;AAEvC,MAAM,aAAa,GAAG,CAAC,QAA0B,EAAU,EAAE,CACzD,GAAG,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,QAAQ,CAAC,MAAM,KAAK,QAAQ,CAAC,QAAQ,GAAG,CAAC;AAEjF,MAAM,gBAAgB,GAAG,CAAC,OAAsB,EAAE,KAAe,EAAY,EAAE;IAC3E,MAAM,OAAO,GAAa,EAAE,CAAC;IAE7B,KAAK,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,0BAA0B,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC;QAC3E,MAAM,QAAQ,GAAG,oBAAoB,CAAC,OAAO,EAAE,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;QAExE,IAAI,CAAC,QAAQ,EAAE,SAAS,EAAE,CAAC;YACvB,SAAS;QACb,CAAC;QAED,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC1C,CAAC;IAED,OAAO,OAAO,CAAC;AACnB,CAAC,CAAC;AAEF,MAAM,0BAA0B,GAAG,CAC/B,OAAsB,EACtB,KAAe,EACf,SAAiB,EACjB,SAA6B,EAChB,EAAE;IACf,MAAM,SAAS,GAAG,kBAAkB,CAAC,OAAO,EAAE,KAAK,EAAE,iBAAiB,CAAC,CAAC;IACxE,MAAM,aAAa,GAAG,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY,SAAS,EAAE,CAAC;IAE7E,MAAM,OAAO,GAAG;QACZ,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QAChG,GAAG,gBAAgB,CAAC,OAAO,EAAE,KAAK,CAAC;KACtC,CAAC;IAEF,MAAM,GAAG,GAAG,GAAG,SAAS,GAAG,iBAAiB,EAAE,CAAC;IAE/C,OAAO;QACH,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,mBAAmB,CAAC,oBAAoB,GAAG,GAAG,aAAa,EAAE,EAAE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE;QACvG;YACI,IAAI,EAAE,SAAS;YACf,IAAI,EAAE,mBAAmB,CAAC,oBAAoB,SAAS,EAAE,EAAE,mBAAmB,GAAG,GAAG,CAAC;SACxF;KACJ,CAAC;AACN,CAAC,CAAC;AAEF,OAAO,EAAE,0BAA0B,EAAE,CAAC","sourcesContent":["import type { GirClass } from \"../../gir/class.js\";\nimport type { ModuleContext } from \"../../writer/context.js\";\nimport type { Declaration } from \"../../writer/module.js\";\nimport { collectInterfaceProperties } from \"../../analysis/inheritance.js\";\nimport { renderBracedOrEmpty } from \"../../writer/emit.js\";\nimport { parentCompanionRef } from \"./companion.js\";\nimport { propertyDoc, type ResolvedAccessor, resolveOwnerAccessor } from \"./property-accessor.js\";\n\nconst PROPERTIES_SUFFIX = \"Properties\";\n\nconst propertyEntry = (accessor: ResolvedAccessor): string =>\n `${propertyDoc(accessor.property)}${accessor.jsName}: ${accessor.readType};`;\n\nconst interfaceEntries = (context: ModuleContext, klass: GirClass): string[] => {\n const entries: string[] = [];\n\n for (const { owner, property } of collectInterfaceProperties(context, klass)) {\n const accessor = resolveOwnerAccessor(context, property, owner.methods);\n\n if (!accessor?.hasGetter) {\n continue;\n }\n\n entries.push(propertyEntry(accessor));\n }\n\n return entries;\n};\n\nconst renderPropertyDeclarations = (\n context: ModuleContext,\n klass: GirClass,\n className: string,\n accessors: ResolvedAccessor[],\n): Declaration[] => {\n const parentRef = parentCompanionRef(context, klass, PROPERTIES_SUFFIX);\n const extendsClause = parentRef === undefined ? \"\" : ` extends ${parentRef}`;\n\n const entries = [\n ...accessors.filter((accessor) => accessor.hasGetter).map((accessor) => propertyEntry(accessor)),\n ...interfaceEntries(context, klass),\n ];\n\n const map = `${className}${PROPERTIES_SUFFIX}`;\n\n return [\n { name: map, code: renderBracedOrEmpty(`export interface ${map}${extendsClause}`, entries.join(\"\\n\")) },\n {\n name: className,\n code: renderBracedOrEmpty(`export interface ${className}`, `__properties__: ${map};`),\n },\n ];\n};\n\nexport { renderPropertyDeclarations };\n"]}
@@ -1,29 +1,31 @@
1
1
  import type { GirFunction } from "../../gir/function.js";
2
2
  import type { ModuleContext } from "../../writer/context.js";
3
3
  import { type GirProperty } from "../../gir/property.js";
4
+ type InheritedAccessorTypes = {
5
+ readType: string | undefined;
6
+ writeType: string | undefined;
7
+ };
4
8
  type ResolvedAccessor = {
5
9
  property: GirProperty;
6
10
  jsName: string;
7
- tsType: string;
11
+ readType: string;
12
+ writeType: string;
8
13
  hasGetter: boolean;
9
14
  isWritable: boolean;
10
- getterMember: string | undefined;
11
- getterMethod: GirFunction | undefined;
12
- setterMember: string | undefined;
13
15
  };
14
16
  type PropertyAccessorArgs = {
15
17
  context: ModuleContext;
16
18
  property: GirProperty;
17
19
  claimedNames: Set<string>;
18
- methodByName: Map<string, GirFunction>;
19
- inheritedType?: string | undefined;
20
+ inheritedTypes?: InheritedAccessorTypes | undefined;
21
+ inheritedNames?: Set<string> | undefined;
20
22
  };
21
23
  declare const resolveAccessor: (args: PropertyAccessorArgs) => ResolvedAccessor | undefined;
22
24
  declare const resolveOwnerAccessor: (context: ModuleContext, property: GirProperty, methods: GirFunction[]) => ResolvedAccessor | undefined;
23
- declare const resolveAccessorType: (context: ModuleContext, property: GirProperty, methods: GirFunction[]) => string | undefined;
25
+ declare const resolveAccessorTypes: (context: ModuleContext, property: GirProperty, methods: GirFunction[]) => InheritedAccessorTypes | undefined;
24
26
  declare const renderResolvedPropertyAccessor: (context: ModuleContext, property: GirProperty, accessor: ResolvedAccessor) => string;
25
27
  declare const propertyDoc: (property: GirProperty) => string;
26
28
  declare const renderPropertyAccessor: (args: PropertyAccessorArgs) => string | undefined;
27
29
  declare const renderPropertyAccessorSignature: (args: PropertyAccessorArgs) => string | undefined;
28
- export { propertyDoc, resolveAccessor, resolveOwnerAccessor, resolveAccessorType, renderResolvedPropertyAccessor, renderPropertyAccessor, renderPropertyAccessorSignature, type ResolvedAccessor, type PropertyAccessorArgs, };
30
+ export { propertyDoc, resolveAccessor, resolveOwnerAccessor, resolveAccessorTypes, renderResolvedPropertyAccessor, renderPropertyAccessor, renderPropertyAccessorSignature, type InheritedAccessorTypes, type ResolvedAccessor, type PropertyAccessorArgs, };
29
31
  //# sourceMappingURL=property-accessor.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"property-accessor.d.ts","sourceRoot":"","sources":["../../../src/store/gi/property-accessor.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEzD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAI7D,OAAO,EAAE,KAAK,WAAW,EAA2B,MAAM,uBAAuB,CAAC;AAMlF,KAAK,gBAAgB,GAAG;IACpB,QAAQ,EAAE,WAAW,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,OAAO,CAAC;IACpB,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,YAAY,EAAE,WAAW,GAAG,SAAS,CAAC;IACtC,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;CACpC,CAAC;AAEF,KAAK,oBAAoB,GAAG;IACxB,OAAO,EAAE,aAAa,CAAC;IACvB,QAAQ,EAAE,WAAW,CAAC;IACtB,YAAY,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC1B,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACvC,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACtC,CAAC;AAqGF,QAAA,MAAM,eAAe,GAAI,MAAM,oBAAoB,KAAG,gBAAgB,GAAG,SAqBxE,CAAC;AAEF,QAAA,MAAM,oBAAoB,GACtB,SAAS,aAAa,EACtB,UAAU,WAAW,EACrB,SAAS,WAAW,EAAE,KACvB,gBAAgB,GAAG,SAcrB,CAAC;AAEF,QAAA,MAAM,mBAAmB,GACrB,SAAS,aAAa,EACtB,UAAU,WAAW,EACrB,SAAS,WAAW,EAAE,KACvB,MAAM,GAAG,SAAqE,CAAC;AAelF,QAAA,MAAM,8BAA8B,GAChC,SAAS,aAAa,EACtB,UAAU,WAAW,EACrB,UAAU,gBAAgB,KAC3B,MAiBF,CAAC;AAEF,QAAA,MAAM,WAAW,GAAI,UAAU,WAAW,KAAG,MACzB,CAAC;AAErB,QAAA,MAAM,sBAAsB,GAAI,MAAM,oBAAoB,KAAG,MAAM,GAAG,SACqC,CAAC;AAE5G,QAAA,MAAM,+BAA+B,GAAI,MAAM,oBAAoB,KAAG,MAAM,GAAG,SAazE,CAAC;AA2DP,OAAO,EACH,WAAW,EACX,eAAe,EACf,oBAAoB,EACpB,mBAAmB,EACnB,8BAA8B,EAC9B,sBAAsB,EACtB,+BAA+B,EAC/B,KAAK,gBAAgB,EACrB,KAAK,oBAAoB,GAC5B,CAAC"}
1
+ {"version":3,"file":"property-accessor.d.ts","sourceRoot":"","sources":["../../../src/store/gi/property-accessor.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEzD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAG7D,OAAO,EAAE,KAAK,WAAW,EAA2B,MAAM,uBAAuB,CAAC;AAMlF,KAAK,sBAAsB,GAAG;IAC1B,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;CACjC,CAAC;AAEF,KAAK,gBAAgB,GAAG;IACpB,QAAQ,EAAE,WAAW,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,OAAO,CAAC;CACvB,CAAC;AAEF,KAAK,oBAAoB,GAAG;IACxB,OAAO,EAAE,aAAa,CAAC;IACvB,QAAQ,EAAE,WAAW,CAAC;IACtB,YAAY,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC1B,cAAc,CAAC,EAAE,sBAAsB,GAAG,SAAS,CAAC;IACpD,cAAc,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,SAAS,CAAC;CAC5C,CAAC;AAsCF,QAAA,MAAM,eAAe,GAAI,MAAM,oBAAoB,KAAG,gBAAgB,GAAG,SAoBxE,CAAC;AAEF,QAAA,MAAM,oBAAoB,GACtB,SAAS,aAAa,EACtB,UAAU,WAAW,EACrB,SAAS,WAAW,EAAE,KACvB,gBAAgB,GAAG,SAYrB,CAAC;AAEF,QAAA,MAAM,oBAAoB,GACtB,SAAS,aAAa,EACtB,UAAU,WAAW,EACrB,SAAS,WAAW,EAAE,KACvB,sBAAsB,GAAG,SAW3B,CAAC;AAeF,QAAA,MAAM,8BAA8B,GAChC,SAAS,aAAa,EACtB,UAAU,WAAW,EACrB,UAAU,gBAAgB,KAC3B,MAaF,CAAC;AAEF,QAAA,MAAM,WAAW,GAAI,UAAU,WAAW,KAAG,MACzB,CAAC;AAErB,QAAA,MAAM,sBAAsB,GAAI,MAAM,oBAAoB,KAAG,MAAM,GAAG,SACqC,CAAC;AAoB5G,QAAA,MAAM,+BAA+B,GAAI,MAAM,oBAAoB,KAAG,MAAM,GAAG,SAC8B,CAAC;AAqB9G,OAAO,EACH,WAAW,EACX,eAAe,EACf,oBAAoB,EACpB,oBAAoB,EACpB,8BAA8B,EAC9B,sBAAsB,EACtB,+BAA+B,EAC/B,KAAK,sBAAsB,EAC3B,KAAK,gBAAgB,EACrB,KAAK,oBAAoB,GAC5B,CAAC"}
@@ -1,12 +1,12 @@
1
- import { camelCase, sourceStringLiteral, toCamelIdentifier } from "@gtkx/utils";
1
+ import { sourceStringLiteral, toCamelIdentifier } from "@gtkx/utils";
2
2
  import { renderDescriptor } from "../../analysis/descriptor-render.js";
3
- import { inputParameters } from "../../analysis/param-structure.js";
4
3
  import { renderTsType } from "../../analysis/ts-type.js";
5
4
  import { isConstructableProperty } from "../../gir/property.js";
6
5
  import { renderBlock } from "../../writer/emit.js";
7
6
  import { isEmittableCallable } from "./callables.js";
8
7
  import { getDoc } from "./doc-spec.js";
9
- import { methodExportName, renderMethodReturnType } from "./method.js";
8
+ import { methodExportName } from "./method.js";
9
+ const NON_NULLABLE_KINDS = new Set(["primitive", "enum"]);
10
10
  const isNullablePropertyType = (context, type) => {
11
11
  if (type === undefined) {
12
12
  return false;
@@ -15,75 +15,55 @@ const isNullablePropertyType = (context, type) => {
15
15
  if (resolved === undefined) {
16
16
  return true;
17
17
  }
18
- if (resolved.kind === "primitive") {
19
- return false;
20
- }
21
- if (resolved.kind === "enum") {
22
- return false;
23
- }
24
18
  if (resolved.kind === "alias") {
25
19
  return isNullablePropertyType(context, resolved.value.target);
26
20
  }
27
- return true;
21
+ return !NON_NULLABLE_KINDS.has(resolved.kind);
28
22
  };
29
- const resolveDelegate = (args, attribute, member, isDelegatable) => {
30
- const method = member !== undefined && attribute !== undefined ? args.methodByName.get(attribute) : undefined;
31
- const canDelegate = method === undefined || isDelegatable(method);
32
- return canDelegate ? { member, method } : { member: undefined, method: undefined };
33
- };
34
- const resolveGetterDelegate = (args, jsName) => {
35
- const { context, property, claimedNames } = args;
36
- const member = delegateMember(property.getter, jsName, claimedNames);
37
- return resolveDelegate(args, property.getter, member, (method) => inputParameters(context.library, method).length === 0 &&
38
- !renderMethodReturnType(context, method).startsWith("["));
39
- };
40
- const resolveSetterDelegate = (args, jsName, isWritable) => {
41
- const { context, property, claimedNames } = args;
42
- const member = isWritable ? delegateMember(property.setter, jsName, claimedNames) : undefined;
43
- return resolveDelegate(args, property.setter, member, (method) => inputParameters(context.library, method).length === 1);
44
- };
45
- const resolveOwnType = (context, property, getterMethod, setterMethod) => {
46
- const setterParam = setterMethod?.parameters[0];
47
- if (setterParam !== undefined) {
48
- return renderTsType(context, setterParam.type, setterParam.nullable || setterParam.optional);
49
- }
50
- if (getterMethod !== undefined) {
51
- return renderMethodReturnType(context, getterMethod);
52
- }
53
- return renderTsType(context, property.type, isNullablePropertyType(context, property.type));
54
- };
55
- const isSkippedAccessor = (property, jsName, claimedNames) => !property.introspectable || claimedNames.has(jsName) || jsName === "constructor";
56
- const resolveTsType = (inheritedType, ownType) => inheritedType !== undefined && inheritedType !== ownType ? inheritedType : ownType;
23
+ const declaredPropertyType = (context, property) => renderTsType(context, property.type, property.defaultValue === "NULL" || isNullablePropertyType(context, property.type));
24
+ const isSkippedAccessor = (args, jsName) => !args.property.introspectable ||
25
+ args.claimedNames.has(jsName) ||
26
+ args.inheritedNames?.has(jsName) === true ||
27
+ jsName === "constructor";
28
+ const isAccessorEmittable = (args, jsName, isWritable) => !isSkippedAccessor(args, jsName) && (args.property.readable || isWritable);
57
29
  const resolveAccessor = (args) => {
58
- const { context, property, claimedNames } = args;
30
+ const { property } = args;
59
31
  const jsName = toCamelIdentifier(property.name);
60
- if (isSkippedAccessor(property, jsName, claimedNames)) {
61
- return undefined;
62
- }
63
32
  const isWritable = isConstructableProperty(property) && !property.constructOnly;
64
- const { member: getterMember, method: getterMethod } = resolveGetterDelegate(args, jsName);
65
- const { member: setterMember, method: setterMethod } = resolveSetterDelegate(args, jsName, isWritable);
66
- const hasGetter = property.readable || getterMember !== undefined;
67
- if (!hasGetter && !isWritable) {
33
+ if (!isAccessorEmittable(args, jsName, isWritable)) {
68
34
  return undefined;
69
35
  }
70
- const ownType = resolveOwnType(context, property, getterMethod, setterMethod);
71
- const tsType = resolveTsType(args.inheritedType, ownType);
72
- return { property, jsName, tsType, hasGetter, isWritable, getterMember, getterMethod, setterMember };
36
+ const declared = declaredPropertyType(args.context, property);
37
+ const hasGetter = property.readable;
38
+ return {
39
+ property,
40
+ jsName,
41
+ readType: args.inheritedTypes?.readType ?? declared,
42
+ writeType: args.inheritedTypes?.writeType ?? declared,
43
+ hasGetter,
44
+ isWritable,
45
+ };
73
46
  };
74
47
  const resolveOwnerAccessor = (context, property, methods) => {
75
- const methodByName = new Map();
76
48
  const claimedNames = new Set();
77
49
  for (const method of methods) {
78
50
  if (!isEmittableCallable(context, method)) {
79
51
  continue;
80
52
  }
81
- methodByName.set(method.name, method);
82
53
  claimedNames.add(methodExportName(method));
83
54
  }
84
- return resolveAccessor({ context, property, claimedNames, methodByName });
55
+ return resolveAccessor({ context, property, claimedNames });
56
+ };
57
+ const resolveAccessorTypes = (context, property, methods) => {
58
+ const accessor = resolveOwnerAccessor(context, property, methods);
59
+ if (accessor === undefined) {
60
+ return undefined;
61
+ }
62
+ return {
63
+ readType: accessor.hasGetter ? accessor.readType : undefined,
64
+ writeType: accessor.isWritable ? accessor.writeType : undefined,
65
+ };
85
66
  };
86
- const resolveAccessorType = (context, property, methods) => resolveOwnerAccessor(context, property, methods)?.tsType;
87
67
  const withAccessor = (args, render) => {
88
68
  const accessor = resolveAccessor(args);
89
69
  if (accessor === undefined) {
@@ -92,30 +72,32 @@ const withAccessor = (args, render) => {
92
72
  return render(accessor);
93
73
  };
94
74
  const renderResolvedPropertyAccessor = (context, property, accessor) => {
95
- const { jsName, tsType, hasGetter, isWritable, getterMember, getterMethod, setterMember } = accessor;
75
+ const { jsName, readType, writeType, hasGetter, isWritable } = accessor;
96
76
  const blocks = [];
97
77
  if (hasGetter) {
98
- const getterBody = renderGetterBody({ context, property, getterMember, getterMethod, tsType });
99
- blocks.push(renderBlock(`get ${jsName}(): ${tsType}`, getterBody));
78
+ blocks.push(renderBlock(`get ${jsName}(): ${readType}`, renderGenericGetBody(context, property, readType)));
100
79
  }
101
80
  if (isWritable) {
102
- const setterBody = setterMember === undefined ? renderGenericSetBody(context, property) : `this.${setterMember}(value);`;
103
- blocks.push(renderBlock(`set ${jsName}(value: ${tsType})`, setterBody));
81
+ blocks.push(renderBlock(`set ${jsName}(value: ${writeType})`, renderGenericSetBody(context, property)));
104
82
  }
105
83
  return `${propertyDoc(property)}${blocks.join("\n\n")}`;
106
84
  };
107
85
  const propertyDoc = (property) => getDoc(property);
108
86
  const renderPropertyAccessor = (args) => withAccessor(args, (accessor) => renderResolvedPropertyAccessor(args.context, args.property, accessor));
109
- const renderPropertyAccessorSignature = (args) => withAccessor(args, ({ jsName, tsType, hasGetter, isWritable }) => {
110
- const doc = propertyDoc(args.property);
111
- if (hasGetter && isWritable) {
112
- return `${doc}${jsName}: ${tsType};`;
87
+ const renderAccessorPairSignature = (accessor) => {
88
+ const { jsName, readType, writeType, hasGetter, isWritable } = accessor;
89
+ if (!hasGetter) {
90
+ return `set ${jsName}(value: ${writeType});`;
113
91
  }
114
- if (hasGetter) {
115
- return `${doc}get ${jsName}(): ${tsType};`;
92
+ if (!isWritable) {
93
+ return `get ${jsName}(): ${readType};`;
116
94
  }
117
- return `${doc}set ${jsName}(value: ${tsType});`;
118
- });
95
+ if (readType === writeType) {
96
+ return `${jsName}: ${readType};`;
97
+ }
98
+ return `get ${jsName}(): ${readType};\nset ${jsName}(value: ${writeType});`;
99
+ };
100
+ const renderPropertyAccessorSignature = (args) => withAccessor(args, (accessor) => `${propertyDoc(args.property)}${renderAccessorPairSignature(accessor)}`);
119
101
  const renderPropertyDescriptor = (context, property) => renderDescriptor(context, property.type, property.transferOwnership);
120
102
  const renderGenericGetBody = (context, property, tsType) => {
121
103
  context.addRuntimeImport("getObjectProperty");
@@ -129,29 +111,5 @@ const renderGenericSetBody = (context, property) => {
129
111
  const descriptor = renderPropertyDescriptor(context, property);
130
112
  return `setObjectProperty(this, ${sourceStringLiteral(property.name)}, ${descriptor}, value);`;
131
113
  };
132
- const renderGetterBody = (options) => {
133
- const { context, property, getterMember, getterMethod, tsType } = options;
134
- if (getterMember === undefined) {
135
- return renderGenericGetBody(context, property, tsType);
136
- }
137
- if (getterMethod === undefined) {
138
- return `return this.${getterMember}() as ${tsType};`;
139
- }
140
- const getterType = renderMethodReturnType(context, getterMethod);
141
- return getterType === tsType ? `return this.${getterMember}();` : `return this.${getterMember}() as ${tsType};`;
142
- };
143
- const delegateMember = (attribute, accessorName, claimedNames) => {
144
- if (attribute === undefined) {
145
- return undefined;
146
- }
147
- const member = camelCase(attribute);
148
- if (member === accessorName) {
149
- return undefined;
150
- }
151
- if (!claimedNames.has(member)) {
152
- return undefined;
153
- }
154
- return member;
155
- };
156
- export { propertyDoc, resolveAccessor, resolveOwnerAccessor, resolveAccessorType, renderResolvedPropertyAccessor, renderPropertyAccessor, renderPropertyAccessorSignature, };
114
+ export { propertyDoc, resolveAccessor, resolveOwnerAccessor, resolveAccessorTypes, renderResolvedPropertyAccessor, renderPropertyAccessor, renderPropertyAccessorSignature, };
157
115
  //# sourceMappingURL=property-accessor.js.map