@gtkx/codegen 1.0.0 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (316) 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 +48 -31
  5. package/dist/analysis/descriptor-render.js.map +1 -1
  6. package/dist/analysis/descriptor.d.ts +16 -7
  7. package/dist/analysis/descriptor.d.ts.map +1 -1
  8. package/dist/analysis/descriptor.js +15 -3
  9. package/dist/analysis/descriptor.js.map +1 -1
  10. package/dist/analysis/inheritance.d.ts +4 -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 +23 -0
  15. package/dist/analysis/interface-conflicts.d.ts.map +1 -0
  16. package/dist/analysis/interface-conflicts.js +144 -0
  17. package/dist/analysis/interface-conflicts.js.map +1 -0
  18. package/dist/analysis/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.map +1 -1
  24. package/dist/analysis/ts-type.js +10 -17
  25. package/dist/analysis/ts-type.js.map +1 -1
  26. package/dist/analysis/type-key.d.ts +5 -0
  27. package/dist/analysis/type-key.d.ts.map +1 -0
  28. package/dist/analysis/type-key.js +9 -0
  29. package/dist/analysis/type-key.js.map +1 -0
  30. package/dist/compile.d.ts +12 -3
  31. package/dist/compile.d.ts.map +1 -1
  32. package/dist/compile.js +73 -24
  33. package/dist/compile.js.map +1 -1
  34. package/dist/docs/api-reference.d.ts.map +1 -1
  35. package/dist/docs/api-reference.js +10 -9
  36. package/dist/docs/api-reference.js.map +1 -1
  37. package/dist/docs/element-page.d.ts.map +1 -1
  38. package/dist/docs/element-page.js +5 -3
  39. package/dist/docs/element-page.js.map +1 -1
  40. package/dist/docs/pipeline.d.ts.map +1 -1
  41. package/dist/docs/pipeline.js +85 -18
  42. package/dist/docs/pipeline.js.map +1 -1
  43. package/dist/docs/render.d.ts +2 -1
  44. package/dist/docs/render.d.ts.map +1 -1
  45. package/dist/docs/render.js +5 -4
  46. package/dist/docs/render.js.map +1 -1
  47. package/dist/docs/symbol-page.d.ts.map +1 -1
  48. package/dist/docs/symbol-page.js +9 -6
  49. package/dist/docs/symbol-page.js.map +1 -1
  50. package/dist/fingerprint.d.ts +12 -1
  51. package/dist/fingerprint.d.ts.map +1 -1
  52. package/dist/fingerprint.js +44 -28
  53. package/dist/fingerprint.js.map +1 -1
  54. package/dist/gi.d.ts.map +1 -1
  55. package/dist/gi.js +1 -0
  56. package/dist/gi.js.map +1 -1
  57. package/dist/gir/ancestry.d.ts +7 -1
  58. package/dist/gir/ancestry.d.ts.map +1 -1
  59. package/dist/gir/ancestry.js +9 -1
  60. package/dist/gir/ancestry.js.map +1 -1
  61. package/dist/gir/annotations.d.ts +1 -2
  62. package/dist/gir/annotations.d.ts.map +1 -1
  63. package/dist/gir/annotations.js +1 -1
  64. package/dist/gir/annotations.js.map +1 -1
  65. package/dist/gir/cursor-overrides.d.ts +8 -0
  66. package/dist/gir/cursor-overrides.d.ts.map +1 -0
  67. package/dist/gir/cursor-overrides.js +6 -0
  68. package/dist/gir/cursor-overrides.js.map +1 -0
  69. package/dist/gir/emittable.d.ts +7 -0
  70. package/dist/gir/emittable.d.ts.map +1 -0
  71. package/dist/gir/emittable.js +3 -0
  72. package/dist/gir/emittable.js.map +1 -0
  73. package/dist/gir/function.d.ts.map +1 -1
  74. package/dist/gir/function.js +28 -2
  75. package/dist/gir/function.js.map +1 -1
  76. package/dist/gir/library.js +1 -1
  77. package/dist/gir/library.js.map +1 -1
  78. package/dist/gir/namespace.d.ts +5 -1
  79. package/dist/gir/namespace.d.ts.map +1 -1
  80. package/dist/gir/namespace.js +4 -2
  81. package/dist/gir/namespace.js.map +1 -1
  82. package/dist/gir/parameter.d.ts +13 -1
  83. package/dist/gir/parameter.d.ts.map +1 -1
  84. package/dist/gir/parameter.js +1 -0
  85. package/dist/gir/parameter.js.map +1 -1
  86. package/dist/gir/parse.d.ts.map +1 -1
  87. package/dist/gir/parse.js +3 -6
  88. package/dist/gir/parse.js.map +1 -1
  89. package/dist/guards.d.ts +16 -0
  90. package/dist/guards.d.ts.map +1 -0
  91. package/dist/guards.js +11 -0
  92. package/dist/guards.js.map +1 -0
  93. package/dist/internal.d.ts +2 -0
  94. package/dist/internal.d.ts.map +1 -1
  95. package/dist/internal.js +2 -0
  96. package/dist/internal.js.map +1 -1
  97. package/dist/json.d.ts +3 -0
  98. package/dist/json.d.ts.map +1 -0
  99. package/dist/json.js +11 -0
  100. package/dist/json.js.map +1 -0
  101. package/dist/khronos/modules.d.ts.map +1 -1
  102. package/dist/khronos/modules.js +22 -7
  103. package/dist/khronos/modules.js.map +1 -1
  104. package/dist/khronos/parse.d.ts.map +1 -1
  105. package/dist/khronos/parse.js +3 -4
  106. package/dist/khronos/parse.js.map +1 -1
  107. package/dist/khronos/pipeline.d.ts +1 -1
  108. package/dist/khronos/pipeline.d.ts.map +1 -1
  109. package/dist/khronos/pipeline.js.map +1 -1
  110. package/dist/khronos/plan.d.ts +1 -7
  111. package/dist/khronos/plan.d.ts.map +1 -1
  112. package/dist/khronos/plan.js +1 -1
  113. package/dist/khronos/plan.js.map +1 -1
  114. package/dist/runner.d.ts +5 -1
  115. package/dist/runner.d.ts.map +1 -1
  116. package/dist/runner.js +16 -0
  117. package/dist/runner.js.map +1 -1
  118. package/dist/staging.d.ts +5 -0
  119. package/dist/staging.d.ts.map +1 -0
  120. package/dist/staging.js +57 -0
  121. package/dist/staging.js.map +1 -0
  122. package/dist/store/compile-store.d.ts.map +1 -1
  123. package/dist/store/compile-store.js +4 -2
  124. package/dist/store/compile-store.js.map +1 -1
  125. package/dist/store/gi/callables.d.ts +7 -2
  126. package/dist/store/gi/callables.d.ts.map +1 -1
  127. package/dist/store/gi/callables.js +25 -30
  128. package/dist/store/gi/callables.js.map +1 -1
  129. package/dist/store/gi/callback.d.ts.map +1 -1
  130. package/dist/store/gi/callback.js +9 -5
  131. package/dist/store/gi/callback.js.map +1 -1
  132. package/dist/store/gi/class.d.ts.map +1 -1
  133. package/dist/store/gi/class.js +59 -38
  134. package/dist/store/gi/class.js.map +1 -1
  135. package/dist/store/gi/companion.d.ts.map +1 -1
  136. package/dist/store/gi/companion.js +6 -6
  137. package/dist/store/gi/companion.js.map +1 -1
  138. package/dist/store/gi/constant.d.ts.map +1 -1
  139. package/dist/store/gi/constant.js +10 -2
  140. package/dist/store/gi/constant.js.map +1 -1
  141. package/dist/store/gi/constructor-props.js +1 -1
  142. package/dist/store/gi/constructor-props.js.map +1 -1
  143. package/dist/store/gi/enum.d.ts.map +1 -1
  144. package/dist/store/gi/enum.js +28 -8
  145. package/dist/store/gi/enum.js.map +1 -1
  146. package/dist/store/gi/function.d.ts +1 -3
  147. package/dist/store/gi/function.d.ts.map +1 -1
  148. package/dist/store/gi/function.js +24 -18
  149. package/dist/store/gi/function.js.map +1 -1
  150. package/dist/store/gi/gtype-binding.d.ts.map +1 -1
  151. package/dist/store/gi/gtype-binding.js +4 -1
  152. package/dist/store/gi/gtype-binding.js.map +1 -1
  153. package/dist/store/gi/interface.d.ts.map +1 -1
  154. package/dist/store/gi/interface.js +32 -17
  155. package/dist/store/gi/interface.js.map +1 -1
  156. package/dist/store/gi/method.d.ts +7 -6
  157. package/dist/store/gi/method.d.ts.map +1 -1
  158. package/dist/store/gi/method.js +13 -21
  159. package/dist/store/gi/method.js.map +1 -1
  160. package/dist/store/gi/param-marshal.d.ts +3 -2
  161. package/dist/store/gi/param-marshal.d.ts.map +1 -1
  162. package/dist/store/gi/param-marshal.js +50 -5
  163. package/dist/store/gi/param-marshal.js.map +1 -1
  164. package/dist/store/gi/pipeline.d.ts.map +1 -1
  165. package/dist/store/gi/pipeline.js +21 -10
  166. package/dist/store/gi/pipeline.js.map +1 -1
  167. package/dist/store/gi/properties.d.ts +2 -1
  168. package/dist/store/gi/properties.d.ts.map +1 -1
  169. package/dist/store/gi/properties.js +6 -3
  170. package/dist/store/gi/properties.js.map +1 -1
  171. package/dist/store/gi/property-accessor.d.ts +10 -5
  172. package/dist/store/gi/property-accessor.d.ts.map +1 -1
  173. package/dist/store/gi/property-accessor.js +95 -44
  174. package/dist/store/gi/property-accessor.js.map +1 -1
  175. package/dist/store/gi/record-constructor.d.ts +8 -1
  176. package/dist/store/gi/record-constructor.d.ts.map +1 -1
  177. package/dist/store/gi/record-constructor.js +31 -10
  178. package/dist/store/gi/record-constructor.js.map +1 -1
  179. package/dist/store/gi/record-field-accessor.d.ts.map +1 -1
  180. package/dist/store/gi/record-field-accessor.js +5 -1
  181. package/dist/store/gi/record-field-accessor.js.map +1 -1
  182. package/dist/store/gi/record-layout.d.ts +6 -1
  183. package/dist/store/gi/record-layout.d.ts.map +1 -1
  184. package/dist/store/gi/record-layout.js +8 -1
  185. package/dist/store/gi/record-layout.js.map +1 -1
  186. package/dist/store/gi/record.d.ts.map +1 -1
  187. package/dist/store/gi/record.js +19 -8
  188. package/dist/store/gi/record.js.map +1 -1
  189. package/dist/store/gi/registration.js +2 -2
  190. package/dist/store/gi/registration.js.map +1 -1
  191. package/dist/store/gi/signal.d.ts +2 -1
  192. package/dist/store/gi/signal.d.ts.map +1 -1
  193. package/dist/store/gi/signal.js +30 -24
  194. package/dist/store/gi/signal.js.map +1 -1
  195. package/dist/store/gi/value-marshalable.d.ts.map +1 -1
  196. package/dist/store/gi/value-marshalable.js +2 -1
  197. package/dist/store/gi/value-marshalable.js.map +1 -1
  198. package/dist/store/gi/vtable.d.ts +4 -1
  199. package/dist/store/gi/vtable.d.ts.map +1 -1
  200. package/dist/store/gi/vtable.js +60 -17
  201. package/dist/store/gi/vtable.js.map +1 -1
  202. package/dist/store/gi-store.d.ts +1 -0
  203. package/dist/store/gi-store.d.ts.map +1 -1
  204. package/dist/store/gi-store.js +15 -20
  205. package/dist/store/gi-store.js.map +1 -1
  206. package/dist/store/jsx/generated-elements.d.ts +2 -1
  207. package/dist/store/jsx/generated-elements.d.ts.map +1 -1
  208. package/dist/store/jsx/generated-elements.js +13 -7
  209. package/dist/store/jsx/generated-elements.js.map +1 -1
  210. package/dist/store/jsx/jsx.js +3 -3
  211. package/dist/store/jsx/jsx.js.map +1 -1
  212. package/dist/store/jsx/metadata.d.ts.map +1 -1
  213. package/dist/store/jsx/metadata.js +3 -1
  214. package/dist/store/jsx/metadata.js.map +1 -1
  215. package/dist/store/jsx-store.d.ts.map +1 -1
  216. package/dist/store/jsx-store.js +3 -3
  217. package/dist/store/jsx-store.js.map +1 -1
  218. package/dist/store/resolve-store.d.ts +14 -3
  219. package/dist/store/resolve-store.d.ts.map +1 -1
  220. package/dist/store/resolve-store.js +98 -15
  221. package/dist/store/resolve-store.js.map +1 -1
  222. package/dist/store/store-fs.d.ts +9 -6
  223. package/dist/store/store-fs.d.ts.map +1 -1
  224. package/dist/store/store-fs.js +59 -25
  225. package/dist/store/store-fs.js.map +1 -1
  226. package/dist/store/store-links.d.ts +3 -0
  227. package/dist/store/store-links.d.ts.map +1 -0
  228. package/dist/store/store-links.js +39 -0
  229. package/dist/store/store-links.js.map +1 -0
  230. package/dist/writer/comparison-context.d.ts +4 -0
  231. package/dist/writer/comparison-context.d.ts.map +1 -0
  232. package/dist/writer/comparison-context.js +13 -0
  233. package/dist/writer/comparison-context.js.map +1 -0
  234. package/dist/writer/context.d.ts +3 -3
  235. package/dist/writer/context.d.ts.map +1 -1
  236. package/dist/writer/context.js +11 -6
  237. package/dist/writer/context.js.map +1 -1
  238. package/dist/writer/module.d.ts +13 -5
  239. package/dist/writer/module.d.ts.map +1 -1
  240. package/dist/writer/module.js +68 -11
  241. package/dist/writer/module.js.map +1 -1
  242. package/dist/xml.d.ts +7 -1
  243. package/dist/xml.d.ts.map +1 -1
  244. package/dist/xml.js +43 -1
  245. package/dist/xml.js.map +1 -1
  246. package/package.json +14 -3
  247. package/src/analysis/descriptor-render.ts +90 -45
  248. package/src/analysis/descriptor.ts +35 -8
  249. package/src/analysis/inheritance.ts +134 -44
  250. package/src/analysis/interface-conflicts.ts +237 -0
  251. package/src/analysis/param-capability.ts +3 -6
  252. package/src/analysis/param-structure.ts +2 -2
  253. package/src/analysis/ts-type.ts +13 -17
  254. package/src/analysis/type-key.ts +14 -0
  255. package/src/compile.ts +110 -26
  256. package/src/docs/api-reference.ts +10 -9
  257. package/src/docs/element-page.ts +5 -2
  258. package/src/docs/pipeline.ts +129 -19
  259. package/src/docs/render.ts +7 -3
  260. package/src/docs/symbol-page.ts +12 -7
  261. package/src/fingerprint.ts +86 -31
  262. package/src/gi.ts +1 -0
  263. package/src/gir/ancestry.ts +17 -1
  264. package/src/gir/annotations.ts +1 -1
  265. package/src/gir/cursor-overrides.ts +12 -0
  266. package/src/gir/emittable.ts +8 -0
  267. package/src/gir/function.ts +45 -9
  268. package/src/gir/library.ts +1 -1
  269. package/src/gir/namespace.ts +8 -2
  270. package/src/gir/parameter.ts +15 -0
  271. package/src/gir/parse.ts +5 -7
  272. package/src/guards.ts +23 -0
  273. package/src/internal.ts +2 -0
  274. package/src/json.ts +11 -0
  275. package/src/khronos/modules.ts +25 -9
  276. package/src/khronos/parse.ts +3 -4
  277. package/src/khronos/pipeline.ts +1 -1
  278. package/src/khronos/plan.ts +0 -1
  279. package/src/runner.ts +19 -1
  280. package/src/staging.ts +69 -0
  281. package/src/store/compile-store.ts +6 -4
  282. package/src/store/gi/callables.ts +41 -33
  283. package/src/store/gi/callback.ts +9 -9
  284. package/src/store/gi/class.ts +79 -48
  285. package/src/store/gi/companion.ts +7 -6
  286. package/src/store/gi/constant.ts +12 -2
  287. package/src/store/gi/constructor-props.ts +1 -1
  288. package/src/store/gi/enum.ts +35 -21
  289. package/src/store/gi/function.ts +30 -24
  290. package/src/store/gi/gtype-binding.ts +7 -2
  291. package/src/store/gi/interface.ts +37 -18
  292. package/src/store/gi/method.ts +28 -29
  293. package/src/store/gi/param-marshal.ts +77 -6
  294. package/src/store/gi/pipeline.ts +25 -15
  295. package/src/store/gi/properties.ts +8 -4
  296. package/src/store/gi/property-accessor.ts +156 -73
  297. package/src/store/gi/record-constructor.ts +50 -18
  298. package/src/store/gi/record-field-accessor.ts +8 -1
  299. package/src/store/gi/record-layout.ts +11 -1
  300. package/src/store/gi/record.ts +20 -12
  301. package/src/store/gi/registration.ts +2 -2
  302. package/src/store/gi/signal.ts +36 -38
  303. package/src/store/gi/value-marshalable.ts +3 -1
  304. package/src/store/gi/vtable.ts +97 -20
  305. package/src/store/gi-store.ts +26 -31
  306. package/src/store/jsx/generated-elements.ts +17 -8
  307. package/src/store/jsx/jsx.ts +3 -3
  308. package/src/store/jsx/metadata.ts +4 -1
  309. package/src/store/jsx-store.ts +3 -3
  310. package/src/store/resolve-store.ts +133 -18
  311. package/src/store/store-fs.ts +87 -34
  312. package/src/store/store-links.ts +49 -0
  313. package/src/writer/comparison-context.ts +18 -0
  314. package/src/writer/context.ts +12 -6
  315. package/src/writer/module.ts +101 -14
  316. package/src/xml.ts +61 -1
@@ -1 +1 @@
1
- {"version":3,"file":"gi-store.js","sourceRoot":"","sources":["../../src/store/gi-store.ts"],"names":[],"mappings":"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","sourcesContent":["import { existsSync, readdirSync, readFileSync } from \"node:fs\";\nimport { dirname, join, resolve } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { FINGERPRINT_FILENAME, type GiFingerprint } from \"../fingerprint.js\";\nimport { buildManifest, type StoreOptions, subpathExport, writeStore } from \"./store-fs.js\";\n\ntype GiNamespaceInput = {\n directory: string;\n rawSource: string;\n};\n\ntype CollectedFile = {\n fileName: string;\n source: string;\n};\n\nconst OVERRIDES_ROOT = resolve(dirname(fileURLToPath(import.meta.url)), \"..\", \"..\", \"overrides\");\n\nconst overrideFiles = (directory: string): string[] => {\n const dir = join(OVERRIDES_ROOT, directory);\n\n if (!existsSync(dir)) {\n return [];\n }\n\n return readdirSync(dir).filter((name) => name.endsWith(\".ejs\") && name !== \"index.ts.ejs\");\n};\n\nconst barrelSource = (directory: string): string => {\n const overrideIndex = join(OVERRIDES_ROOT, directory, \"index.ts.ejs\");\n\n if (!existsSync(overrideIndex)) {\n return `export * from \"./${directory}.js\";\\n`;\n }\n\n return readFileSync(overrideIndex, \"utf8\");\n};\n\nconst collectStoreSources = (\n namespaces: GiNamespaceInput[],\n): { collected: CollectedFile[]; exportsMap: Record<string, unknown> } => {\n const exportsMap: Record<string, unknown> = {};\n const collected: CollectedFile[] = [];\n\n for (const { directory, rawSource } of namespaces) {\n collected.push({\n fileName: `${directory}/${directory}.ts`,\n source: rawSource,\n });\n\n for (const file of overrideFiles(directory)) {\n collected.push({\n fileName: `${directory}/overrides/${file.replace(/\\.ejs$/, \"\")}`,\n source: readFileSync(join(OVERRIDES_ROOT, directory, file), \"utf8\"),\n });\n }\n\n collected.push({\n fileName: `${directory}/index.ts`,\n source: barrelSource(directory),\n });\n\n exportsMap[`./${directory}`] = subpathExport(`${directory}/index`);\n }\n\n return { collected, exportsMap };\n};\n\nconst writeGiStore = (\n options: StoreOptions,\n namespaces: GiNamespaceInput[],\n fingerprint: GiFingerprint,\n): void => {\n const { collected, exportsMap } = collectStoreSources(namespaces);\n\n writeStore({\n storeDir: options.storeDir,\n linkDir: options.linkDir,\n files: collected,\n manifest: buildManifest({\n name: \"@gtkx/gi\",\n version: options.version,\n exports: exportsMap,\n peerDependencies: { \"@gtkx/runtime\": \"*\" },\n }),\n rawFiles: [{ relativePath: FINGERPRINT_FILENAME, content: `${JSON.stringify(fingerprint, null, 2)}\\n` }],\n });\n};\n\nexport { writeGiStore, type GiNamespaceInput };\n"]}
1
+ {"version":3,"file":"gi-store.js","sourceRoot":"","sources":["../../src/store/gi-store.ts"],"names":[],"mappings":"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","sourcesContent":["import { existsSync, readdirSync, readFileSync } from \"node:fs\";\nimport { dirname, join, resolve } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport type { SourceModule } from \"../compile.js\";\nimport { FINGERPRINT_FILENAME, type GiFingerprint } from \"../fingerprint.js\";\nimport { buildManifest, namespaceBarrel, type StoreOptions, subpathExport, writeStore } from \"./store-fs.js\";\n\ntype GiNamespaceInput = {\n directory: string;\n rawSource: string;\n girFile: string;\n};\n\nconst OVERRIDES_ROOT = resolve(dirname(fileURLToPath(import.meta.url)), \"..\", \"..\", \"overrides\");\n\nconst overrideFiles = (directory: string): SourceModule[] => {\n const dir = join(OVERRIDES_ROOT, directory);\n\n if (!existsSync(dir)) {\n return [];\n }\n\n return readdirSync(dir)\n .filter((name) => name.endsWith(\".ejs\") && name !== \"index.ts.ejs\")\n .map((name) => overrideModule(`${directory}/overrides/${name.replace(/\\.ejs$/, \"\")}`, join(dir, name)));\n};\n\nconst overrideModule = (fileName: string, overridePath: string): SourceModule => ({\n fileName,\n source: readFileSync(overridePath, \"utf8\"),\n origin: overridePath,\n});\n\nconst barrelFile = (directory: string, girFile: string): SourceModule => {\n const barrel = namespaceBarrel(directory);\n const overrideIndex = join(OVERRIDES_ROOT, directory, \"index.ts.ejs\");\n\n if (!existsSync(overrideIndex)) {\n return { ...barrel, origin: girFile };\n }\n\n return overrideModule(barrel.fileName, overrideIndex);\n};\n\nconst collectStoreSources = (\n namespaces: GiNamespaceInput[],\n): { collected: SourceModule[]; exportsMap: Record<string, unknown> } => {\n const exportsMap: Record<string, unknown> = {};\n const collected: SourceModule[] = [];\n\n for (const { directory, rawSource, girFile } of namespaces) {\n collected.push(\n { fileName: `${directory}/${directory}.ts`, source: rawSource, origin: girFile },\n ...overrideFiles(directory),\n barrelFile(directory, girFile),\n );\n\n exportsMap[`./${directory}`] = subpathExport(`${directory}/index`);\n }\n\n return { collected, exportsMap };\n};\n\nconst writeGiStore = (\n options: StoreOptions,\n namespaces: GiNamespaceInput[],\n fingerprint: GiFingerprint,\n): void => {\n const { collected, exportsMap } = collectStoreSources(namespaces);\n\n writeStore({\n storeDir: options.storeDir,\n linkDir: options.linkDir,\n files: collected,\n manifest: buildManifest({\n name: \"@gtkx/gi\",\n version: options.version,\n exports: exportsMap,\n peerDependencies: { \"@gtkx/runtime\": \"*\" },\n }),\n rawFiles: [{ relativePath: FINGERPRINT_FILENAME, content: `${JSON.stringify(fingerprint, null, 2)}\\n` }],\n });\n};\n\nexport { writeGiStore, type GiNamespaceInput };\n"]}
@@ -22,7 +22,8 @@ declare const renderGeneratedElements: (elements: GeneratedElement[]) => string;
22
22
  * that only exist inside a Vite or Vitest build.
23
23
  *
24
24
  * @param jsxStoreDir The jsx store directory, as given by `resolveStore(projectRoot).jsx.storeDir`.
25
- * @returns Every bound element, sorted by GLib type name, or an empty array when the store has no inventory.
25
+ * @returns Every bound element, sorted by GLib type name, or an empty array when the store holds no inventory
26
+ * codegen wrote, which covers an absent, unreadable, unparseable and structurally foreign store file alike.
26
27
  */
27
28
  declare const readGeneratedElements: (jsxStoreDir: string) => GeneratedElement[];
28
29
  export { ELEMENTS_FILENAME, collectGeneratedElements, readGeneratedElements, renderGeneratedElements, type GeneratedElement, };
@@ -1 +1 @@
1
- {"version":3,"file":"generated-elements.d.ts","sourceRoot":"","sources":["../../../src/store/jsx/generated-elements.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAG9D,+CAA+C;AAC/C,KAAK,gBAAgB,GAAG;IACpB,2CAA2C;IAC3C,SAAS,EAAE,MAAM,CAAC;IAClB,sFAAsF;IACtF,SAAS,EAAE,MAAM,CAAC;IAClB,6EAA6E;IAC7E,QAAQ,EAAE,MAAM,CAAC;IACjB;;;OAGG;IACH,WAAW,EAAE,OAAO,CAAC;CACxB,CAAC;AAEF,QAAA,MAAM,iBAAiB,kBAAkB,CAAC;AAE1C,QAAA,MAAM,wBAAwB,GAAI,mBAAmB,cAAc,EAAE,KAAG,gBAAgB,EAQvB,CAAC;AAElE,QAAA,MAAM,uBAAuB,GAAI,UAAU,gBAAgB,EAAE,KAAG,MACpB,CAAC;AAE7C;;;;;;;GAOG;AACH,QAAA,MAAM,qBAAqB,GAAI,aAAa,MAAM,KAAG,gBAAgB,EAQpE,CAAC;AAEF,OAAO,EACH,iBAAiB,EACjB,wBAAwB,EACxB,qBAAqB,EACrB,uBAAuB,EACvB,KAAK,gBAAgB,GACxB,CAAC"}
1
+ {"version":3,"file":"generated-elements.d.ts","sourceRoot":"","sources":["../../../src/store/jsx/generated-elements.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAK9D,+CAA+C;AAC/C,KAAK,gBAAgB,GAAG;IACpB,2CAA2C;IAC3C,SAAS,EAAE,MAAM,CAAC;IAClB,sFAAsF;IACtF,SAAS,EAAE,MAAM,CAAC;IAClB,6EAA6E;IAC7E,QAAQ,EAAE,MAAM,CAAC;IACjB;;;OAGG;IACH,WAAW,EAAE,OAAO,CAAC;CACxB,CAAC;AAEF,QAAA,MAAM,iBAAiB,kBAAkB,CAAC;AAE1C,QAAA,MAAM,wBAAwB,GAAI,mBAAmB,cAAc,EAAE,KAAG,gBAAgB,EAQvB,CAAC;AAElE,QAAA,MAAM,uBAAuB,GAAI,UAAU,gBAAgB,EAAE,KAAG,MACpB,CAAC;AAa7C;;;;;;;;GAQG;AACH,QAAA,MAAM,qBAAqB,GAAI,aAAa,MAAM,KAAG,gBAAgB,EAIpE,CAAC;AAEF,OAAO,EACH,iBAAiB,EACjB,wBAAwB,EACxB,qBAAqB,EACrB,uBAAuB,EACvB,KAAK,gBAAgB,GACxB,CAAC"}
@@ -1,6 +1,7 @@
1
- import { existsSync, readFileSync } from "node:fs";
2
1
  import { join } from "node:path";
3
2
  import { namespaceDirectory } from "../../gir/namespace.js";
3
+ import { arrayGuard, hasFields, isBoolean, isString } from "../../guards.js";
4
+ import { readJsonFile } from "../../json.js";
4
5
  const ELEMENTS_FILENAME = "elements.json";
5
6
  const collectGeneratedElements = (intrinsicElements) => intrinsicElements
6
7
  .map((entry) => ({
@@ -11,20 +12,25 @@ const collectGeneratedElements = (intrinsicElements) => intrinsicElements
11
12
  }))
12
13
  .toSorted((a, b) => a.glibName.localeCompare(b.glibName));
13
14
  const renderGeneratedElements = (elements) => `${JSON.stringify(elements, null, 2)}\n`;
15
+ const isGeneratedElement = (value) => hasFields(value, {
16
+ namespace: isString,
17
+ directory: isString,
18
+ glibName: isString,
19
+ isMountable: isBoolean,
20
+ });
21
+ const isGeneratedInventory = (value) => arrayGuard(isGeneratedElement)(value);
14
22
  /**
15
23
  * Reads the inventory of elements the `@gtkx/jsx` store binds, written into the store by codegen. Answers
16
24
  * "what does this project's JSX layer cover" without loading the store, which resolves `virtual:` specifiers
17
25
  * that only exist inside a Vite or Vitest build.
18
26
  *
19
27
  * @param jsxStoreDir The jsx store directory, as given by `resolveStore(projectRoot).jsx.storeDir`.
20
- * @returns Every bound element, sorted by GLib type name, or an empty array when the store has no inventory.
28
+ * @returns Every bound element, sorted by GLib type name, or an empty array when the store holds no inventory
29
+ * codegen wrote, which covers an absent, unreadable, unparseable and structurally foreign store file alike.
21
30
  */
22
31
  const readGeneratedElements = (jsxStoreDir) => {
23
- const path = join(jsxStoreDir, ELEMENTS_FILENAME);
24
- if (!existsSync(path)) {
25
- return [];
26
- }
27
- return JSON.parse(readFileSync(path, "utf8"));
32
+ const parsed = readJsonFile(join(jsxStoreDir, ELEMENTS_FILENAME));
33
+ return isGeneratedInventory(parsed) ? parsed : [];
28
34
  };
29
35
  export { ELEMENTS_FILENAME, collectGeneratedElements, readGeneratedElements, renderGeneratedElements, };
30
36
  //# sourceMappingURL=generated-elements.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"generated-elements.js","sourceRoot":"","sources":["../../../src/store/jsx/generated-elements.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAiB5D,MAAM,iBAAiB,GAAG,eAAe,CAAC;AAE1C,MAAM,wBAAwB,GAAG,CAAC,iBAAmC,EAAsB,EAAE,CACzF,iBAAiB;KACZ,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACb,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,IAAI;IAC/B,SAAS,EAAE,kBAAkB,CAAC,KAAK,CAAC,SAAS,CAAC;IAC9C,QAAQ,EAAE,KAAK,CAAC,QAAQ;IACxB,WAAW,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU;CACvC,CAAC,CAAC;KACF,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;AAElE,MAAM,uBAAuB,GAAG,CAAC,QAA4B,EAAU,EAAE,CACrE,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC;AAE7C;;;;;;;GAOG;AACH,MAAM,qBAAqB,GAAG,CAAC,WAAmB,EAAsB,EAAE;IACtE,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,iBAAiB,CAAC,CAAC;IAElD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACpB,OAAO,EAAE,CAAC;IACd,CAAC;IAED,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAuB,CAAC;AACxE,CAAC,CAAC;AAEF,OAAO,EACH,iBAAiB,EACjB,wBAAwB,EACxB,qBAAqB,EACrB,uBAAuB,GAE1B,CAAC","sourcesContent":["import { existsSync, readFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport type { GlibNamedClass } from \"./intrinsic-elements.js\";\nimport { namespaceDirectory } from \"../../gir/namespace.js\";\n\n/** One element the `@gtkx/jsx` store binds. */\ntype GeneratedElement = {\n /** GIR namespace name, such as `\"Gtk\"`. */\n namespace: string;\n /** Subexport the element is reachable through, such as `\"gtk\"` in `@gtkx/jsx/gtk`. */\n directory: string;\n /** GLib type name, which is also the JSX tag name, such as `\"GtkButton\"`. */\n glibName: string;\n /**\n * Whether the element can be rendered. An abstract GType is bound for its props and metadata but\n * exports no component, because `g_object_new` on one is a fatal GObject error.\n */\n isMountable: boolean;\n};\n\nconst ELEMENTS_FILENAME = \"elements.json\";\n\nconst collectGeneratedElements = (intrinsicElements: GlibNamedClass[]): GeneratedElement[] =>\n intrinsicElements\n .map((entry) => ({\n namespace: entry.namespace.name,\n directory: namespaceDirectory(entry.namespace),\n glibName: entry.glibName,\n isMountable: !entry.klass.isAbstract,\n }))\n .toSorted((a, b) => a.glibName.localeCompare(b.glibName));\n\nconst renderGeneratedElements = (elements: GeneratedElement[]): string =>\n `${JSON.stringify(elements, null, 2)}\\n`;\n\n/**\n * Reads the inventory of elements the `@gtkx/jsx` store binds, written into the store by codegen. Answers\n * \"what does this project's JSX layer cover\" without loading the store, which resolves `virtual:` specifiers\n * that only exist inside a Vite or Vitest build.\n *\n * @param jsxStoreDir The jsx store directory, as given by `resolveStore(projectRoot).jsx.storeDir`.\n * @returns Every bound element, sorted by GLib type name, or an empty array when the store has no inventory.\n */\nconst readGeneratedElements = (jsxStoreDir: string): GeneratedElement[] => {\n const path = join(jsxStoreDir, ELEMENTS_FILENAME);\n\n if (!existsSync(path)) {\n return [];\n }\n\n return JSON.parse(readFileSync(path, \"utf8\")) as GeneratedElement[];\n};\n\nexport {\n ELEMENTS_FILENAME,\n collectGeneratedElements,\n readGeneratedElements,\n renderGeneratedElements,\n type GeneratedElement,\n};\n"]}
1
+ {"version":3,"file":"generated-elements.js","sourceRoot":"","sources":["../../../src/store/jsx/generated-elements.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC7E,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAiB7C,MAAM,iBAAiB,GAAG,eAAe,CAAC;AAE1C,MAAM,wBAAwB,GAAG,CAAC,iBAAmC,EAAsB,EAAE,CACzF,iBAAiB;KACZ,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACb,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,IAAI;IAC/B,SAAS,EAAE,kBAAkB,CAAC,KAAK,CAAC,SAAS,CAAC;IAC9C,QAAQ,EAAE,KAAK,CAAC,QAAQ;IACxB,WAAW,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU;CACvC,CAAC,CAAC;KACF,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;AAElE,MAAM,uBAAuB,GAAG,CAAC,QAA4B,EAAU,EAAE,CACrE,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC;AAE7C,MAAM,kBAAkB,GAAG,CAAC,KAAc,EAA6B,EAAE,CACrE,SAAS,CAAmB,KAAK,EAAE;IAC/B,SAAS,EAAE,QAAQ;IACnB,SAAS,EAAE,QAAQ;IACnB,QAAQ,EAAE,QAAQ;IAClB,WAAW,EAAE,SAAS;CACzB,CAAC,CAAC;AAEP,MAAM,oBAAoB,GAAG,CAAC,KAAc,EAA+B,EAAE,CACzE,UAAU,CAAC,kBAAkB,CAAC,CAAC,KAAK,CAAC,CAAC;AAE1C;;;;;;;;GAQG;AACH,MAAM,qBAAqB,GAAG,CAAC,WAAmB,EAAsB,EAAE;IACtE,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE,iBAAiB,CAAC,CAAC,CAAC;IAElE,OAAO,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;AACtD,CAAC,CAAC;AAEF,OAAO,EACH,iBAAiB,EACjB,wBAAwB,EACxB,qBAAqB,EACrB,uBAAuB,GAE1B,CAAC","sourcesContent":["import { join } from \"node:path\";\nimport type { GlibNamedClass } from \"./intrinsic-elements.js\";\nimport { namespaceDirectory } from \"../../gir/namespace.js\";\nimport { arrayGuard, hasFields, isBoolean, isString } from \"../../guards.js\";\nimport { readJsonFile } from \"../../json.js\";\n\n/** One element the `@gtkx/jsx` store binds. */\ntype GeneratedElement = {\n /** GIR namespace name, such as `\"Gtk\"`. */\n namespace: string;\n /** Subexport the element is reachable through, such as `\"gtk\"` in `@gtkx/jsx/gtk`. */\n directory: string;\n /** GLib type name, which is also the JSX tag name, such as `\"GtkButton\"`. */\n glibName: string;\n /**\n * Whether the element can be rendered. An abstract GType is bound for its props and metadata but\n * exports no component, because `g_object_new` on one is a fatal GObject error.\n */\n isMountable: boolean;\n};\n\nconst ELEMENTS_FILENAME = \"elements.json\";\n\nconst collectGeneratedElements = (intrinsicElements: GlibNamedClass[]): GeneratedElement[] =>\n intrinsicElements\n .map((entry) => ({\n namespace: entry.namespace.name,\n directory: namespaceDirectory(entry.namespace),\n glibName: entry.glibName,\n isMountable: !entry.klass.isAbstract,\n }))\n .toSorted((a, b) => a.glibName.localeCompare(b.glibName));\n\nconst renderGeneratedElements = (elements: GeneratedElement[]): string =>\n `${JSON.stringify(elements, null, 2)}\\n`;\n\nconst isGeneratedElement = (value: unknown): value is GeneratedElement =>\n hasFields<GeneratedElement>(value, {\n namespace: isString,\n directory: isString,\n glibName: isString,\n isMountable: isBoolean,\n });\n\nconst isGeneratedInventory = (value: unknown): value is GeneratedElement[] =>\n arrayGuard(isGeneratedElement)(value);\n\n/**\n * Reads the inventory of elements the `@gtkx/jsx` store binds, written into the store by codegen. Answers\n * \"what does this project's JSX layer cover\" without loading the store, which resolves `virtual:` specifiers\n * that only exist inside a Vite or Vitest build.\n *\n * @param jsxStoreDir The jsx store directory, as given by `resolveStore(projectRoot).jsx.storeDir`.\n * @returns Every bound element, sorted by GLib type name, or an empty array when the store holds no inventory\n * codegen wrote, which covers an absent, unreadable, unparseable and structurally foreign store file alike.\n */\nconst readGeneratedElements = (jsxStoreDir: string): GeneratedElement[] => {\n const parsed = readJsonFile(join(jsxStoreDir, ELEMENTS_FILENAME));\n\n return isGeneratedInventory(parsed) ? parsed : [];\n};\n\nexport {\n ELEMENTS_FILENAME,\n collectGeneratedElements,\n readGeneratedElements,\n renderGeneratedElements,\n type GeneratedElement,\n};\n"]}
@@ -1,4 +1,4 @@
1
- import { sourceStringLiteral } from "@gtkx/utils";
1
+ import { sanitizeTypeIdentifier, sourceStringLiteral } from "@gtkx/utils";
2
2
  import { renderBlock } from "../../writer/emit.js";
3
3
  import { getDoc } from "../gi/doc-spec.js";
4
4
  import { elementPropTypeFor } from "./element-prop-imports.js";
@@ -158,7 +158,7 @@ const renderInterfacePropsBlock = (iface, glib, context) => {
158
158
  }
159
159
  const extendsClause = prerequisiteExtends.length === 0 ? "" : ` extends ${prerequisiteExtends.join(", ")}`;
160
160
  addGiNamespace(imports, iface.namespace.name, giNamespaceAlias(iface.namespace.name));
161
- const selfDefault = `${giNamespaceAlias(iface.namespace.name)}.${iface.klass.name}`;
161
+ const selfDefault = `${giNamespaceAlias(iface.namespace.name)}.${sanitizeTypeIdentifier(iface.klass.name)}`;
162
162
  const signature = `export interface ${glib}Props<Self = ${selfDefault}>${extendsClause}`;
163
163
  const block = `${getDoc(iface.klass)}${renderBlock(signature, ownerLines.join("\n"))}`;
164
164
  return { block, objectPropNames };
@@ -186,7 +186,7 @@ const renderPropBlock = (library, entry, context) => {
186
186
  const ownerLines = dedupePropLines(["ref?: Ref<Self | null> | undefined;", ...propLines]);
187
187
  const extendsList = resolveElementExtends(library, entry, context);
188
188
  const extendsClause = extendsList.length === 0 ? "" : ` extends ${extendsList.join(", ")}`;
189
- const selfDefault = `${giNamespaceAlias(entry.namespace.name)}.${entry.klass.name}`;
189
+ const selfDefault = `${giNamespaceAlias(entry.namespace.name)}.${sanitizeTypeIdentifier(entry.klass.name)}`;
190
190
  const block = `${getDoc(entry.klass)}${renderBlock(`export interface ${entry.glibName}Props<Self = ${selfDefault}>${extendsClause}`, ownerLines.join("\n"))}`;
191
191
  return { block, objectPropNames };
192
192
  };
@@ -1 +1 @@
1
- {"version":3,"file":"jsx.js","sourceRoot":"","sources":["../../../src/store/jsx/jsx.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAKlD,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EACH,4BAA4B,EAC5B,WAAW,EACX,gBAAgB,EAGhB,qBAAqB,EACrB,0BAA0B,GAE7B,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,wBAAwB,EAAE,0BAA0B,EAAE,MAAM,YAAY,CAAC;AAwBlF,MAAM,8BAA8B,GAAG,eAAe,CAAC;AACvD,MAAM,qBAAqB,GAAG,iBAAiB,CAAC;AAEhD,MAAM,cAAc,GAAG,CAAC,OAAuB,EAAE,aAAqB,EAAE,KAAa,EAAQ,EAAE;IAC3F,IAAI,aAAa,KAAK,EAAE,EAAE,CAAC;QACvB,OAAO;IACX,CAAC;IAED,OAAO,CAAC,YAAY,CAAC,YAAY,aAAa,CAAC,WAAW,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;AACjF,CAAC,CAAC;AAEF,MAAM,eAAe,GAAG,CAAC,OAAuB,EAAE,IAAY,EAAQ,EAAE;IACpE,OAAO,CAAC,QAAQ,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AAC1C,CAAC,CAAC;AAEF,MAAM,YAAY,GAAG,CAAC,IAAY,EAAsB,EAAE;IACtD,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3D,MAAM,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC;IAErD,OAAO,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;AAChE,CAAC,CAAC;AAEF,MAAM,cAAc,GAAG,CAAC,IAAY,EAAE,IAAiB,EAAE,MAAgB,EAAQ,EAAE;IAC/E,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IAEhC,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;QACvC,OAAO;IACX,CAAC;IAED,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACrB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACnB,CAAC;IAED,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACtB,CAAC,CAAC;AAEF,MAAM,eAAe,GAAG,CAAC,KAAe,EAAY,EAAE;IAClD,MAAM,IAAI,GAAgB,IAAI,GAAG,EAAE,CAAC;IACpC,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACvB,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IACvC,CAAC;IAED,OAAO,MAAM,CAAC;AAClB,CAAC,CAAC;AAEF,MAAM,kBAAkB,GAAG,CACvB,eAA6B,EAC7B,OAAgB,EAChB,OAA2B,EACe,EAAE;IAC5C,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,iBAAiB,EAAE,0BAA0B,EAAE,GAAG,OAAO,CAAC;IACzF,MAAM,iBAAiB,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,KAAK,eAAe,CAAC,IAAI,CAAC,CAAC;IAC7G,MAAM,sBAAsB,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEtG,MAAM,UAAU,GAAG,sBAAsB,CAAC,GAAG,CACzC,CAAC,KAAK,EAAE,EAAE,CACN,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,gBAAgB,KAAK,CAAC,QAAQ,KAAK;QACzD,GAAG,mBAAmB,CAAC,KAAK,CAAC,QAAQ,CAAC,YAAY,CACzD,CAAC;IAEF,MAAM,0BAA0B,GAAG,CAAC,SAAmB,EAAW,EAAE;QAChE,MAAM,aAAa,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC;QAE7C,OAAO,aAAa,KAAK,SAAS,IAAI,0BAA0B,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IACxF,CAAC,CAAC;IAEF,eAAe,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;IACtC,eAAe,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAChC,MAAM,eAAe,GAAG,yBAAyB,CAAC,OAAO,EAAE,eAAe,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC1F,IAAI,oBAAoB,GAAG,eAAe,CAAC,oBAAoB,CAAC;IAChE,MAAM,UAAU,GAAa,CAAC,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;IAEzD,MAAM,YAAY,GAA2B;QACzC,0BAA0B;QAC1B,0BAA0B;QAC1B,mBAAmB,EAAE,eAAe,CAAC,IAAI;QACzC,OAAO;QACP,iBAAiB,EAAE,eAAe,CAAC,iBAAiB;KACvD,CAAC;IAEF,KAAK,MAAM,KAAK,IAAI,iBAAiB,EAAE,CAAC;QACpC,MAAM,EAAE,KAAK,EAAE,eAAe,EAAE,GAAG,eAAe,CAAC,OAAO,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC;QAEjF,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7B,oBAAoB,GAAG,IAAI,CAAC;QAChC,CAAC;QAED,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC3B,CAAC;IAED,IAAI,oBAAoB,EAAE,CAAC;QACvB,eAAe,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;IAC7C,CAAC;IAED,MAAM,MAAM,GAAG;QACX,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC;QACvB,EAAE;QACF,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC;QACvB,EAAE;QACF,qBAAqB,CAAC,iBAAiB,CAAC;KAC3C,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEb,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,sBAAsB,CAAC,MAAM,EAAE,CAAC;AACrE,CAAC,CAAC;AAEF,MAAM,iBAAiB,GAAsB,CAAC,QAAQ,EAAE,EAAE,CACtD,QAAQ,KAAK,SAAS,IAAI,kBAAkB,CAAC,QAAQ,CAAC,KAAK,SAAS,CAAC;AAEzE,MAAM,yBAAyB,GAAG,CAC9B,OAAgB,EAChB,mBAA2B,EAC3B,OAA2B,EAC8D,EAAE;IAC3F,MAAM,EAAE,OAAO,EAAE,iBAAiB,EAAE,GAAG,OAAO,CAAC;IAC/C,MAAM,OAAO,GAA0B,EAAE,OAAO,EAAE,mBAAmB,EAAE,OAAO,EAAE,iBAAiB,EAAE,CAAC;IACpG,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,oBAAoB,GAAG,KAAK,CAAC;IAEjC,KAAK,MAAM,KAAK,IAAI,4BAA4B,CAC5C,OAAO,EACP,iBAAiB,EACjB,mBAAmB,EACnB,iBAAiB,CACpB,EAAE,CAAC;QACA,MAAM,QAAQ,GAAG,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAE1C,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YACzB,SAAS;QACb,CAAC;QAED,MAAM,EAAE,KAAK,EAAE,eAAe,EAAE,GAAG,yBAAyB,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;QAEvF,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7B,oBAAoB,GAAG,IAAI,CAAC;QAChC,CAAC;QAED,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,CAAC;AAC/D,CAAC,CAAC;AAEF,MAAM,oBAAoB,GAAG,CACzB,OAAuB,EACvB,mBAA2B,EAC3B,aAAqB,EACrB,SAAiB,EACb,EAAE;IACN,IAAI,aAAa,KAAK,mBAAmB,EAAE,CAAC;QACxC,OAAO;IACX,CAAC;IAED,MAAM,EAAE,GAAG,aAAa,CAAC,WAAW,EAAE,CAAC;IACvC,OAAO,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;AAC3D,CAAC,CAAC;AAEF,MAAM,iBAAiB,GAAG,CACtB,KAAiC,EACjC,mBAA2B,EAC3B,OAAuB,EACL,EAAE;IACpB,MAAM,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAEtC,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACrB,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,oBAAoB,CAAC,OAAO,EAAE,mBAAmB,EAAE,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,GAAG,IAAI,OAAO,CAAC,CAAC;IAEzF,OAAO,GAAG,IAAI,aAAa,CAAC;AAChC,CAAC,CAAC;AAEF,MAAM,qBAAqB,GAAG,CAC1B,gBAAwB,EACxB,KAAiC,EACjC,OAA8B,EACZ,EAAE;IACpB,MAAM,EAAE,OAAO,EAAE,mBAAmB,EAAE,OAAO,EAAE,iBAAiB,EAAE,GAAG,OAAO,CAAC;IAC7E,MAAM,QAAQ,GAAG,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC;IAE7E,IAAI,QAAQ,EAAE,IAAI,KAAK,WAAW,EAAE,CAAC;QACjC,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC,KAAK,EAAE,iBAAiB,CAAC,EAAE,CAAC;QAC5D,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,OAAO,iBAAiB,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,CAAC,SAAS,EAAE,EAAE,mBAAmB,EAAE,OAAO,CAAC,CAAC;AACrH,CAAC,CAAC;AAEF,MAAM,4BAA4B,GAAG,CAAC,KAAiC,EAAE,OAA8B,EAAY,EAAE;IACjH,MAAM,IAAI,GAAa,EAAE,CAAC;IAE1B,KAAK,MAAM,gBAAgB,IAAI,KAAK,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;QACvD,MAAM,GAAG,GAAG,qBAAqB,CAAC,gBAAgB,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;QAEpE,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YACpB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACnB,CAAC;IACL,CAAC;IAED,OAAO,IAAI,CAAC;AAChB,CAAC,CAAC;AAEF,MAAM,yBAAyB,GAAG,CAC9B,KAAiC,EACjC,IAAY,EACZ,OAA8B,EACc,EAAE;IAC9C,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;IAErC,MAAM,EACF,SAAS,EACT,OAAO,EAAE,WAAW,EACpB,eAAe,GAClB,GAAG,0BAA0B,CAAC;QAC3B,OAAO;QACP,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,SAAS,EAAE,KAAK,CAAC,SAAS;KAC7B,CAAC,CAAC;IAEH,KAAK,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,WAAW,EAAE,CAAC;QAC3C,cAAc,CAAC,OAAO,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;IAC9C,CAAC;IAED,MAAM,UAAU,GAAG,eAAe,CAAC,SAAS,CAAC,CAAC;IAC9C,MAAM,mBAAmB,GAAG,4BAA4B,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACzE,MAAM,QAAQ,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;IAE1C,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QACzB,MAAM,KAAK,GAAG,GAAG,QAAQ,CAAC,MAAM,MAAM,CAAC;QACvC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;QAChE,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC;IAED,IAAI,IAAI,KAAK,8BAA8B,EAAE,CAAC;QAC1C,OAAO,CAAC,QAAQ,CAAC,aAAa,EAAE,qBAAqB,EAAE,IAAI,CAAC,CAAC;QAC7D,mBAAmB,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;IACpD,CAAC;IAED,MAAM,aAAa,GAAG,mBAAmB,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;IAC3G,cAAc,CAAC,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,gBAAgB,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;IACtF,MAAM,WAAW,GAAG,GAAG,gBAAgB,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;IACpF,MAAM,SAAS,GAAG,oBAAoB,IAAI,gBAAgB,WAAW,IAAI,aAAa,EAAE,CAAC;IACzF,MAAM,KAAK,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,WAAW,CAAC,SAAS,EAAE,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;IAEvF,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,CAAC;AACtC,CAAC,CAAC;AAEF,MAAM,qBAAqB,GAAG,CAAC,iBAAmC,EAAU,EAAE;IAC1E,MAAM,YAAY,GAAG,iBAAiB;SACjC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC;SAC1C,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,QAAQ,KAAK,KAAK,CAAC,QAAQ,QAAQ,CAAC;SAClF,IAAI,CAAC,IAAI,CAAC,CAAC;IAEhB,MAAM,kBAAkB,GAAG,WAAW,CAAC,6BAA6B,EAAE,YAAY,CAAC,CAAC;IACpF,MAAM,iBAAiB,GAAG,WAAW,CAAC,qBAAqB,EAAE,kBAAkB,CAAC,CAAC;IAEjF,OAAO,WAAW,CAAC,gBAAgB,EAAE,iBAAiB,CAAC,CAAC;AAC5D,CAAC,CAAC;AAEF,MAAM,eAAe,GAAG,CACpB,OAAgB,EAChB,KAAqB,EACrB,OAA+B,EACa,EAAE;IAC9C,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,eAAe,EAAE,GAAG,wBAAwB,CAAC;QACrE,OAAO;QACP,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,0BAA0B,EAAE,OAAO,CAAC,0BAA0B;KACjE,CAAC,CAAC;IAEH,KAAK,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,OAAO,EAAE,CAAC;QACvC,cAAc,CAAC,OAAO,CAAC,OAAO,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;IACtD,CAAC;IAED,cAAc,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,gBAAgB,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;IAC9F,MAAM,UAAU,GAAG,eAAe,CAAC,CAAC,qCAAqC,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC;IAC1F,MAAM,WAAW,GAAG,qBAAqB,CAAC,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;IACnE,MAAM,aAAa,GAAG,WAAW,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;IAC3F,MAAM,WAAW,GAAG,GAAG,gBAAgB,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;IAEpF,MAAM,KAAK,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,WAAW,CAC9C,oBAAoB,KAAK,CAAC,QAAQ,gBAAgB,WAAW,IAAI,aAAa,EAAE,EAChF,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CACxB,EAAE,CAAC;IAEJ,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,CAAC;AACtC,CAAC,CAAC;AAEF,MAAM,qBAAqB,GAAG,CAAC,OAAgB,EAAE,KAAqB,EAAE,OAA+B,EAAY,EAAE;IACjH,MAAM,WAAW,GAAa,EAAE,CAAC;IACjC,MAAM,QAAQ,GAAG,kBAAkB,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAEpD,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QACzB,MAAM,KAAK,GAAG,GAAG,QAAQ,CAAC,MAAM,MAAM,CAAC;QACvC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;QACxE,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC5B,CAAC;IAED,MAAM,SAAS,GAAG,qBAAqB,CAAC,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;IAEjE,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;QAC1B,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAChC,CAAC;IAED,KAAK,MAAM,KAAK,IAAI,0BAA0B,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC,iBAAiB,CAAC,EAAE,CAAC;QAC/G,MAAM,GAAG,GAAG,iBAAiB,CAAC,KAAK,EAAE,OAAO,CAAC,mBAAmB,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;QAEnF,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YACpB,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC1B,CAAC;IACL,CAAC;IAED,OAAO,WAAW,CAAC;AACvB,CAAC,CAAC;AAEF,MAAM,sBAAsB,GAAG,CAAC,OAAgB,EAAE,aAAqB,EAAE,MAAc,EAAE,EAAE;IACvF,MAAM,QAAQ,GAAG,OAAO,CAAC,WAAW,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;IAE5D,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QACzB,OAAO;IACX,CAAC;IAED,IAAI,QAAQ,CAAC,IAAI,KAAK,OAAO,IAAI,QAAQ,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;QAC7D,OAAO;IACX,CAAC;IAED,OAAO,QAAQ,CAAC;AACpB,CAAC,CAAC;AAEF,MAAM,qBAAqB,GAAG,CAC1B,OAAgB,EAChB,KAAqB,EACrB,OAA+B,EACb,EAAE;IACpB,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC;IAElC,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACvB,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,MAAM,QAAQ,GAAG,sBAAsB,CAAC,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAE/E,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QACzB,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,MAAM,UAAU,GAAG,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAE/C,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;QAC3B,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,0BAA0B,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;QACtD,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,oBAAoB,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,mBAAmB,EAAE,QAAQ,CAAC,SAAS,CAAC,IAAI,EAAE,GAAG,UAAU,OAAO,CAAC,CAAC;IAElH,OAAO,GAAG,UAAU,aAAa,CAAC;AACtC,CAAC,CAAC;AAEF,OAAO,EAAE,kBAAkB,EAAE,CAAC","sourcesContent":["import { sourceStringLiteral } from \"@gtkx/utils\";\nimport type { GirClass } from \"../../gir/class.js\";\nimport type { Library } from \"../../gir/library.js\";\nimport type { GirNamespace } from \"../../gir/namespace.js\";\nimport type { ImportsBuilder } from \"../../writer/imports.js\";\nimport { renderBlock } from \"../../writer/emit.js\";\nimport { getDoc } from \"../gi/doc-spec.js\";\nimport { elementPropTypeFor } from \"./element-prop-imports.js\";\nimport {\n collectInterfacePropsClasses,\n getGlibName,\n giNamespaceAlias,\n type GlibNamedClass,\n type HasContainerProps,\n hasInterfacePropsBody,\n newlyImplementedInterfaces,\n type ResolvedQualifiedInterface,\n} from \"./intrinsic-elements.js\";\nimport { buildElementPropsEntries, buildInterfacePropsEntries } from \"./props.js\";\n\ntype GenerateJsxOptions = {\n excludeNames: Set<string>;\n imports: ImportsBuilder;\n intrinsicElements: GlibNamedClass[];\n intrinsicElementByGlibName: Map<string, GlibNamedClass>;\n};\n\ntype InterfaceBlockContext = {\n library: Library;\n targetNamespaceName: string;\n imports: ImportsBuilder;\n hasContainerProps: HasContainerProps;\n};\n\ntype RenderPropBlockContext = {\n isIntrinsicElementAncestor: (candidate: GirClass) => boolean;\n intrinsicElementByGlibName: Map<string, GlibNamedClass>;\n targetNamespaceName: string;\n imports: ImportsBuilder;\n hasContainerProps: (glibName: string | undefined) => boolean;\n};\n\nconst ACCESSIBLE_INTERFACE_GLIB_NAME = \"GtkAccessible\";\nconst ACCESSIBLE_PROPS_NAME = \"AccessibleProps\";\n\nconst addGiNamespace = (imports: ImportsBuilder, namespaceName: string, alias: string): void => {\n if (namespaceName === \"\") {\n return;\n }\n\n imports.addNamespace(`@gtkx/gi/${namespaceName.toLowerCase()}`, alias, true);\n};\n\nconst addReactBuiltin = (imports: ImportsBuilder, name: string): void => {\n imports.addNamed(\"react\", name, true);\n};\n\nconst propLineName = (line: string): string | undefined => {\n const declaration = line.slice(line.lastIndexOf(\"\\n\") + 1);\n const name = declaration.split(/[?:]/, 1)[0]?.trim();\n\n return name === undefined || name === \"\" ? undefined : name;\n};\n\nconst acceptPropLine = (line: string, seen: Set<string>, result: string[]): void => {\n const name = propLineName(line);\n\n if (name !== undefined && seen.has(name)) {\n return;\n }\n\n if (name !== undefined) {\n seen.add(name);\n }\n\n result.push(line);\n};\n\nconst dedupePropLines = (lines: string[]): string[] => {\n const seen: Set<string> = new Set();\n const result: string[] = [];\n\n for (const line of lines) {\n acceptPropLine(line, seen, result);\n }\n\n return result;\n};\n\nconst generateJsxSection = (\n targetNamespace: GirNamespace,\n library: Library,\n options: GenerateJsxOptions,\n): { source: string; intrinsicCount: number } => {\n const { excludeNames, imports, intrinsicElements, intrinsicElementByGlibName } = options;\n const namespaceElements = intrinsicElements.filter((entry) => entry.namespace.name === targetNamespace.name);\n const intrinsicElementConsts = namespaceElements.filter((entry) => !excludeNames.has(entry.glibName));\n\n const constLines = intrinsicElementConsts.map(\n (entry) =>\n `${getDoc(entry.klass)}export const ${entry.glibName} = ` +\n `${sourceStringLiteral(entry.glibName)} as const;`,\n );\n\n const isIntrinsicElementAncestor = (candidate: GirClass): boolean => {\n const candidateGlib = getGlibName(candidate);\n\n return candidateGlib !== undefined && intrinsicElementByGlibName.has(candidateGlib);\n };\n\n addReactBuiltin(imports, \"ReactNode\");\n addReactBuiltin(imports, \"Ref\");\n const interfaceResult = renderInterfacePropBlocks(library, targetNamespace.name, options);\n let requiresReactElement = interfaceResult.requiresReactElement;\n const propBlocks: string[] = [...interfaceResult.blocks];\n\n const blockContext: RenderPropBlockContext = {\n isIntrinsicElementAncestor,\n intrinsicElementByGlibName,\n targetNamespaceName: targetNamespace.name,\n imports,\n hasContainerProps: interfaceResult.hasContainerProps,\n };\n\n for (const entry of namespaceElements) {\n const { block, objectPropNames } = renderPropBlock(library, entry, blockContext);\n\n if (objectPropNames.length > 0) {\n requiresReactElement = true;\n }\n\n propBlocks.push(block);\n }\n\n if (requiresReactElement) {\n addReactBuiltin(imports, \"ReactElement\");\n }\n\n const source = [\n constLines.join(\"\\n\\n\"),\n \"\",\n propBlocks.join(\"\\n\\n\"),\n \"\",\n renderJsxAugmentation(namespaceElements),\n ].join(\"\\n\");\n\n return { source, intrinsicCount: intrinsicElementConsts.length };\n};\n\nconst hasContainerProps: HasContainerProps = (glibName) =>\n glibName !== undefined && elementPropTypeFor(glibName) !== undefined;\n\nconst renderInterfacePropBlocks = (\n library: Library,\n targetNamespaceName: string,\n options: GenerateJsxOptions,\n): { blocks: string[]; requiresReactElement: boolean; hasContainerProps: HasContainerProps } => {\n const { imports, intrinsicElements } = options;\n const context: InterfaceBlockContext = { library, targetNamespaceName, imports, hasContainerProps };\n const blocks: string[] = [];\n let requiresReactElement = false;\n\n for (const iface of collectInterfacePropsClasses(\n library,\n intrinsicElements,\n targetNamespaceName,\n hasContainerProps,\n )) {\n const glibName = getGlibName(iface.klass);\n\n if (glibName === undefined) {\n continue;\n }\n\n const { block, objectPropNames } = renderInterfacePropsBlock(iface, glibName, context);\n\n if (objectPropNames.length > 0) {\n requiresReactElement = true;\n }\n\n blocks.push(block);\n }\n\n return { blocks, requiresReactElement, hasContainerProps };\n};\n\nconst registerCrossNsProps = (\n imports: ImportsBuilder,\n targetNamespaceName: string,\n namespaceName: string,\n propsName: string,\n): void => {\n if (namespaceName === targetNamespaceName) {\n return;\n }\n\n const ns = namespaceName.toLowerCase();\n imports.addNamed(`../${ns}/${ns}.js`, propsName, true);\n};\n\nconst interfacePropsRef = (\n iface: ResolvedQualifiedInterface,\n targetNamespaceName: string,\n imports: ImportsBuilder,\n): string | undefined => {\n const glib = getGlibName(iface.klass);\n\n if (glib === undefined) {\n return undefined;\n }\n\n registerCrossNsProps(imports, targetNamespaceName, iface.namespace.name, `${glib}Props`);\n\n return `${glib}Props<Self>`;\n};\n\nconst prerequisiteExtendRef = (\n prerequisiteName: string,\n iface: ResolvedQualifiedInterface,\n context: InterfaceBlockContext,\n): string | undefined => {\n const { library, targetNamespaceName, imports, hasContainerProps } = context;\n const resolved = library.resolveType(iface.namespace.name, prerequisiteName);\n\n if (resolved?.kind !== \"interface\") {\n return undefined;\n }\n\n if (!hasInterfacePropsBody(resolved.value, hasContainerProps)) {\n return undefined;\n }\n\n return interfacePropsRef({ klass: resolved.value, namespace: resolved.namespace }, targetNamespaceName, imports);\n};\n\nconst interfacePrerequisiteExtends = (iface: ResolvedQualifiedInterface, context: InterfaceBlockContext): string[] => {\n const refs: string[] = [];\n\n for (const prerequisiteName of iface.klass.prerequisites) {\n const ref = prerequisiteExtendRef(prerequisiteName, iface, context);\n\n if (ref !== undefined) {\n refs.push(ref);\n }\n }\n\n return refs;\n};\n\nconst renderInterfacePropsBlock = (\n iface: ResolvedQualifiedInterface,\n glib: string,\n context: InterfaceBlockContext,\n): { block: string; objectPropNames: string[] } => {\n const { library, imports } = context;\n\n const {\n propLines,\n imports: propImports,\n objectPropNames,\n } = buildInterfacePropsEntries({\n library,\n iface: iface.klass,\n namespace: iface.namespace,\n });\n\n for (const [namespace, alias] of propImports) {\n addGiNamespace(imports, namespace, alias);\n }\n\n const ownerLines = dedupePropLines(propLines);\n const prerequisiteExtends = interfacePrerequisiteExtends(iface, context);\n const declared = elementPropTypeFor(glib);\n\n if (declared !== undefined) {\n const alias = `${declared.export}Base`;\n imports.addNamed(declared.module, declared.export, true, alias);\n prerequisiteExtends.push(alias);\n }\n\n if (glib === ACCESSIBLE_INTERFACE_GLIB_NAME) {\n imports.addNamed(\"@gtkx/react\", ACCESSIBLE_PROPS_NAME, true);\n prerequisiteExtends.push(ACCESSIBLE_PROPS_NAME);\n }\n\n const extendsClause = prerequisiteExtends.length === 0 ? \"\" : ` extends ${prerequisiteExtends.join(\", \")}`;\n addGiNamespace(imports, iface.namespace.name, giNamespaceAlias(iface.namespace.name));\n const selfDefault = `${giNamespaceAlias(iface.namespace.name)}.${iface.klass.name}`;\n const signature = `export interface ${glib}Props<Self = ${selfDefault}>${extendsClause}`;\n const block = `${getDoc(iface.klass)}${renderBlock(signature, ownerLines.join(\"\\n\"))}`;\n\n return { block, objectPropNames };\n};\n\nconst renderJsxAugmentation = (namespaceElements: GlibNamedClass[]): string => {\n const elementLines = namespaceElements\n .filter((entry) => !entry.klass.isAbstract)\n .map((entry) => `${getDoc(entry.klass)}${entry.glibName}: ${entry.glibName}Props;`)\n .join(\"\\n\");\n\n const intrinsicInterface = renderBlock(\"interface IntrinsicElements\", elementLines);\n const reactJsxNamespace = renderBlock(\"namespace React.JSX\", intrinsicInterface);\n\n return renderBlock(\"declare global\", reactJsxNamespace);\n};\n\nconst renderPropBlock = (\n library: Library,\n entry: GlibNamedClass,\n context: RenderPropBlockContext,\n): { block: string; objectPropNames: string[] } => {\n const { propLines, imports, objectPropNames } = buildElementPropsEntries({\n library,\n klass: entry.klass,\n namespace: entry.namespace,\n isIntrinsicElementAncestor: context.isIntrinsicElementAncestor,\n });\n\n for (const [namespace, alias] of imports) {\n addGiNamespace(context.imports, namespace, alias);\n }\n\n addGiNamespace(context.imports, entry.namespace.name, giNamespaceAlias(entry.namespace.name));\n const ownerLines = dedupePropLines([\"ref?: Ref<Self | null> | undefined;\", ...propLines]);\n const extendsList = resolveElementExtends(library, entry, context);\n const extendsClause = extendsList.length === 0 ? \"\" : ` extends ${extendsList.join(\", \")}`;\n const selfDefault = `${giNamespaceAlias(entry.namespace.name)}.${entry.klass.name}`;\n\n const block = `${getDoc(entry.klass)}${renderBlock(\n `export interface ${entry.glibName}Props<Self = ${selfDefault}>${extendsClause}`,\n ownerLines.join(\"\\n\"),\n )}`;\n\n return { block, objectPropNames };\n};\n\nconst resolveElementExtends = (library: Library, entry: GlibNamedClass, context: RenderPropBlockContext): string[] => {\n const extendsList: string[] = [];\n const declared = elementPropTypeFor(entry.glibName);\n\n if (declared !== undefined) {\n const alias = `${declared.export}Base`;\n context.imports.addNamed(declared.module, declared.export, true, alias);\n extendsList.push(alias);\n }\n\n const parentRef = resolveParentPropsRef(library, entry, context);\n\n if (parentRef !== undefined) {\n extendsList.push(parentRef);\n }\n\n for (const iface of newlyImplementedInterfaces(entry.klass, entry.namespace, library, context.hasContainerProps)) {\n const ref = interfacePropsRef(iface, context.targetNamespaceName, context.imports);\n\n if (ref !== undefined) {\n extendsList.push(ref);\n }\n }\n\n return extendsList;\n};\n\nconst resolveParentClassLike = (library: Library, namespaceName: string, parent: string) => {\n const resolved = library.resolveType(namespaceName, parent);\n\n if (resolved === undefined) {\n return;\n }\n\n if (resolved.kind !== \"class\" && resolved.kind !== \"interface\") {\n return;\n }\n\n return resolved;\n};\n\nconst resolveParentPropsRef = (\n library: Library,\n entry: GlibNamedClass,\n context: RenderPropBlockContext,\n): string | undefined => {\n const parent = entry.klass.parent;\n\n if (parent === undefined) {\n return undefined;\n }\n\n const resolved = resolveParentClassLike(library, entry.namespace.name, parent);\n\n if (resolved === undefined) {\n return undefined;\n }\n\n const parentGlib = getGlibName(resolved.value);\n\n if (parentGlib === undefined) {\n return undefined;\n }\n\n if (!context.intrinsicElementByGlibName.has(parentGlib)) {\n return undefined;\n }\n\n registerCrossNsProps(context.imports, context.targetNamespaceName, resolved.namespace.name, `${parentGlib}Props`);\n\n return `${parentGlib}Props<Self>`;\n};\n\nexport { generateJsxSection };\n"]}
1
+ {"version":3,"file":"jsx.js","sourceRoot":"","sources":["../../../src/store/jsx/jsx.ts"],"names":[],"mappings":"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","sourcesContent":["import { sanitizeTypeIdentifier, sourceStringLiteral } from \"@gtkx/utils\";\nimport type { GirClass } from \"../../gir/class.js\";\nimport type { Library } from \"../../gir/library.js\";\nimport type { GirNamespace } from \"../../gir/namespace.js\";\nimport type { ImportsBuilder } from \"../../writer/imports.js\";\nimport { renderBlock } from \"../../writer/emit.js\";\nimport { getDoc } from \"../gi/doc-spec.js\";\nimport { elementPropTypeFor } from \"./element-prop-imports.js\";\nimport {\n collectInterfacePropsClasses,\n getGlibName,\n giNamespaceAlias,\n type GlibNamedClass,\n type HasContainerProps,\n hasInterfacePropsBody,\n newlyImplementedInterfaces,\n type ResolvedQualifiedInterface,\n} from \"./intrinsic-elements.js\";\nimport { buildElementPropsEntries, buildInterfacePropsEntries } from \"./props.js\";\n\ntype GenerateJsxOptions = {\n excludeNames: Set<string>;\n imports: ImportsBuilder;\n intrinsicElements: GlibNamedClass[];\n intrinsicElementByGlibName: Map<string, GlibNamedClass>;\n};\n\ntype InterfaceBlockContext = {\n library: Library;\n targetNamespaceName: string;\n imports: ImportsBuilder;\n hasContainerProps: HasContainerProps;\n};\n\ntype RenderPropBlockContext = {\n isIntrinsicElementAncestor: (candidate: GirClass) => boolean;\n intrinsicElementByGlibName: Map<string, GlibNamedClass>;\n targetNamespaceName: string;\n imports: ImportsBuilder;\n hasContainerProps: (glibName: string | undefined) => boolean;\n};\n\nconst ACCESSIBLE_INTERFACE_GLIB_NAME = \"GtkAccessible\";\nconst ACCESSIBLE_PROPS_NAME = \"AccessibleProps\";\n\nconst addGiNamespace = (imports: ImportsBuilder, namespaceName: string, alias: string): void => {\n if (namespaceName === \"\") {\n return;\n }\n\n imports.addNamespace(`@gtkx/gi/${namespaceName.toLowerCase()}`, alias, true);\n};\n\nconst addReactBuiltin = (imports: ImportsBuilder, name: string): void => {\n imports.addNamed(\"react\", name, true);\n};\n\nconst propLineName = (line: string): string | undefined => {\n const declaration = line.slice(line.lastIndexOf(\"\\n\") + 1);\n const name = declaration.split(/[?:]/, 1)[0]?.trim();\n\n return name === undefined || name === \"\" ? undefined : name;\n};\n\nconst acceptPropLine = (line: string, seen: Set<string>, result: string[]): void => {\n const name = propLineName(line);\n\n if (name !== undefined && seen.has(name)) {\n return;\n }\n\n if (name !== undefined) {\n seen.add(name);\n }\n\n result.push(line);\n};\n\nconst dedupePropLines = (lines: string[]): string[] => {\n const seen: Set<string> = new Set();\n const result: string[] = [];\n\n for (const line of lines) {\n acceptPropLine(line, seen, result);\n }\n\n return result;\n};\n\nconst generateJsxSection = (\n targetNamespace: GirNamespace,\n library: Library,\n options: GenerateJsxOptions,\n): { source: string; intrinsicCount: number } => {\n const { excludeNames, imports, intrinsicElements, intrinsicElementByGlibName } = options;\n const namespaceElements = intrinsicElements.filter((entry) => entry.namespace.name === targetNamespace.name);\n const intrinsicElementConsts = namespaceElements.filter((entry) => !excludeNames.has(entry.glibName));\n\n const constLines = intrinsicElementConsts.map(\n (entry) =>\n `${getDoc(entry.klass)}export const ${entry.glibName} = ` +\n `${sourceStringLiteral(entry.glibName)} as const;`,\n );\n\n const isIntrinsicElementAncestor = (candidate: GirClass): boolean => {\n const candidateGlib = getGlibName(candidate);\n\n return candidateGlib !== undefined && intrinsicElementByGlibName.has(candidateGlib);\n };\n\n addReactBuiltin(imports, \"ReactNode\");\n addReactBuiltin(imports, \"Ref\");\n const interfaceResult = renderInterfacePropBlocks(library, targetNamespace.name, options);\n let requiresReactElement = interfaceResult.requiresReactElement;\n const propBlocks: string[] = [...interfaceResult.blocks];\n\n const blockContext: RenderPropBlockContext = {\n isIntrinsicElementAncestor,\n intrinsicElementByGlibName,\n targetNamespaceName: targetNamespace.name,\n imports,\n hasContainerProps: interfaceResult.hasContainerProps,\n };\n\n for (const entry of namespaceElements) {\n const { block, objectPropNames } = renderPropBlock(library, entry, blockContext);\n\n if (objectPropNames.length > 0) {\n requiresReactElement = true;\n }\n\n propBlocks.push(block);\n }\n\n if (requiresReactElement) {\n addReactBuiltin(imports, \"ReactElement\");\n }\n\n const source = [\n constLines.join(\"\\n\\n\"),\n \"\",\n propBlocks.join(\"\\n\\n\"),\n \"\",\n renderJsxAugmentation(namespaceElements),\n ].join(\"\\n\");\n\n return { source, intrinsicCount: intrinsicElementConsts.length };\n};\n\nconst hasContainerProps: HasContainerProps = (glibName) =>\n glibName !== undefined && elementPropTypeFor(glibName) !== undefined;\n\nconst renderInterfacePropBlocks = (\n library: Library,\n targetNamespaceName: string,\n options: GenerateJsxOptions,\n): { blocks: string[]; requiresReactElement: boolean; hasContainerProps: HasContainerProps } => {\n const { imports, intrinsicElements } = options;\n const context: InterfaceBlockContext = { library, targetNamespaceName, imports, hasContainerProps };\n const blocks: string[] = [];\n let requiresReactElement = false;\n\n for (const iface of collectInterfacePropsClasses(\n library,\n intrinsicElements,\n targetNamespaceName,\n hasContainerProps,\n )) {\n const glibName = getGlibName(iface.klass);\n\n if (glibName === undefined) {\n continue;\n }\n\n const { block, objectPropNames } = renderInterfacePropsBlock(iface, glibName, context);\n\n if (objectPropNames.length > 0) {\n requiresReactElement = true;\n }\n\n blocks.push(block);\n }\n\n return { blocks, requiresReactElement, hasContainerProps };\n};\n\nconst registerCrossNsProps = (\n imports: ImportsBuilder,\n targetNamespaceName: string,\n namespaceName: string,\n propsName: string,\n): void => {\n if (namespaceName === targetNamespaceName) {\n return;\n }\n\n const ns = namespaceName.toLowerCase();\n imports.addNamed(`../${ns}/${ns}.js`, propsName, true);\n};\n\nconst interfacePropsRef = (\n iface: ResolvedQualifiedInterface,\n targetNamespaceName: string,\n imports: ImportsBuilder,\n): string | undefined => {\n const glib = getGlibName(iface.klass);\n\n if (glib === undefined) {\n return undefined;\n }\n\n registerCrossNsProps(imports, targetNamespaceName, iface.namespace.name, `${glib}Props`);\n\n return `${glib}Props<Self>`;\n};\n\nconst prerequisiteExtendRef = (\n prerequisiteName: string,\n iface: ResolvedQualifiedInterface,\n context: InterfaceBlockContext,\n): string | undefined => {\n const { library, targetNamespaceName, imports, hasContainerProps } = context;\n const resolved = library.resolveType(iface.namespace.name, prerequisiteName);\n\n if (resolved?.kind !== \"interface\") {\n return undefined;\n }\n\n if (!hasInterfacePropsBody(resolved.value, hasContainerProps)) {\n return undefined;\n }\n\n return interfacePropsRef({ klass: resolved.value, namespace: resolved.namespace }, targetNamespaceName, imports);\n};\n\nconst interfacePrerequisiteExtends = (iface: ResolvedQualifiedInterface, context: InterfaceBlockContext): string[] => {\n const refs: string[] = [];\n\n for (const prerequisiteName of iface.klass.prerequisites) {\n const ref = prerequisiteExtendRef(prerequisiteName, iface, context);\n\n if (ref !== undefined) {\n refs.push(ref);\n }\n }\n\n return refs;\n};\n\nconst renderInterfacePropsBlock = (\n iface: ResolvedQualifiedInterface,\n glib: string,\n context: InterfaceBlockContext,\n): { block: string; objectPropNames: string[] } => {\n const { library, imports } = context;\n\n const {\n propLines,\n imports: propImports,\n objectPropNames,\n } = buildInterfacePropsEntries({\n library,\n iface: iface.klass,\n namespace: iface.namespace,\n });\n\n for (const [namespace, alias] of propImports) {\n addGiNamespace(imports, namespace, alias);\n }\n\n const ownerLines = dedupePropLines(propLines);\n const prerequisiteExtends = interfacePrerequisiteExtends(iface, context);\n const declared = elementPropTypeFor(glib);\n\n if (declared !== undefined) {\n const alias = `${declared.export}Base`;\n imports.addNamed(declared.module, declared.export, true, alias);\n prerequisiteExtends.push(alias);\n }\n\n if (glib === ACCESSIBLE_INTERFACE_GLIB_NAME) {\n imports.addNamed(\"@gtkx/react\", ACCESSIBLE_PROPS_NAME, true);\n prerequisiteExtends.push(ACCESSIBLE_PROPS_NAME);\n }\n\n const extendsClause = prerequisiteExtends.length === 0 ? \"\" : ` extends ${prerequisiteExtends.join(\", \")}`;\n addGiNamespace(imports, iface.namespace.name, giNamespaceAlias(iface.namespace.name));\n const selfDefault = `${giNamespaceAlias(iface.namespace.name)}.${sanitizeTypeIdentifier(iface.klass.name)}`;\n const signature = `export interface ${glib}Props<Self = ${selfDefault}>${extendsClause}`;\n const block = `${getDoc(iface.klass)}${renderBlock(signature, ownerLines.join(\"\\n\"))}`;\n\n return { block, objectPropNames };\n};\n\nconst renderJsxAugmentation = (namespaceElements: GlibNamedClass[]): string => {\n const elementLines = namespaceElements\n .filter((entry) => !entry.klass.isAbstract)\n .map((entry) => `${getDoc(entry.klass)}${entry.glibName}: ${entry.glibName}Props;`)\n .join(\"\\n\");\n\n const intrinsicInterface = renderBlock(\"interface IntrinsicElements\", elementLines);\n const reactJsxNamespace = renderBlock(\"namespace React.JSX\", intrinsicInterface);\n\n return renderBlock(\"declare global\", reactJsxNamespace);\n};\n\nconst renderPropBlock = (\n library: Library,\n entry: GlibNamedClass,\n context: RenderPropBlockContext,\n): { block: string; objectPropNames: string[] } => {\n const { propLines, imports, objectPropNames } = buildElementPropsEntries({\n library,\n klass: entry.klass,\n namespace: entry.namespace,\n isIntrinsicElementAncestor: context.isIntrinsicElementAncestor,\n });\n\n for (const [namespace, alias] of imports) {\n addGiNamespace(context.imports, namespace, alias);\n }\n\n addGiNamespace(context.imports, entry.namespace.name, giNamespaceAlias(entry.namespace.name));\n const ownerLines = dedupePropLines([\"ref?: Ref<Self | null> | undefined;\", ...propLines]);\n const extendsList = resolveElementExtends(library, entry, context);\n const extendsClause = extendsList.length === 0 ? \"\" : ` extends ${extendsList.join(\", \")}`;\n const selfDefault = `${giNamespaceAlias(entry.namespace.name)}.${sanitizeTypeIdentifier(entry.klass.name)}`;\n\n const block = `${getDoc(entry.klass)}${renderBlock(\n `export interface ${entry.glibName}Props<Self = ${selfDefault}>${extendsClause}`,\n ownerLines.join(\"\\n\"),\n )}`;\n\n return { block, objectPropNames };\n};\n\nconst resolveElementExtends = (library: Library, entry: GlibNamedClass, context: RenderPropBlockContext): string[] => {\n const extendsList: string[] = [];\n const declared = elementPropTypeFor(entry.glibName);\n\n if (declared !== undefined) {\n const alias = `${declared.export}Base`;\n context.imports.addNamed(declared.module, declared.export, true, alias);\n extendsList.push(alias);\n }\n\n const parentRef = resolveParentPropsRef(library, entry, context);\n\n if (parentRef !== undefined) {\n extendsList.push(parentRef);\n }\n\n for (const iface of newlyImplementedInterfaces(entry.klass, entry.namespace, library, context.hasContainerProps)) {\n const ref = interfacePropsRef(iface, context.targetNamespaceName, context.imports);\n\n if (ref !== undefined) {\n extendsList.push(ref);\n }\n }\n\n return extendsList;\n};\n\nconst resolveParentClassLike = (library: Library, namespaceName: string, parent: string) => {\n const resolved = library.resolveType(namespaceName, parent);\n\n if (resolved === undefined) {\n return;\n }\n\n if (resolved.kind !== \"class\" && resolved.kind !== \"interface\") {\n return;\n }\n\n return resolved;\n};\n\nconst resolveParentPropsRef = (\n library: Library,\n entry: GlibNamedClass,\n context: RenderPropBlockContext,\n): string | undefined => {\n const parent = entry.klass.parent;\n\n if (parent === undefined) {\n return undefined;\n }\n\n const resolved = resolveParentClassLike(library, entry.namespace.name, parent);\n\n if (resolved === undefined) {\n return undefined;\n }\n\n const parentGlib = getGlibName(resolved.value);\n\n if (parentGlib === undefined) {\n return undefined;\n }\n\n if (!context.intrinsicElementByGlibName.has(parentGlib)) {\n return undefined;\n }\n\n registerCrossNsProps(context.imports, context.targetNamespaceName, resolved.namespace.name, `${parentGlib}Props`);\n\n return `${parentGlib}Props<Self>`;\n};\n\nexport { generateJsxSection };\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"metadata.d.ts","sourceRoot":"","sources":["../../../src/store/jsx/metadata.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAoCpD,QAAA,MAAM,gBAAgB,GAAI,SAAS,OAAO,KAAG,MAyB5C,CAAC;AAgUF,OAAO,EAAE,gBAAgB,EAAE,CAAC"}
1
+ {"version":3,"file":"metadata.d.ts","sourceRoot":"","sources":["../../../src/store/jsx/metadata.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAoCpD,QAAA,MAAM,gBAAgB,GAAI,SAAS,OAAO,KAAG,MAyB5C,CAAC;AAmUF,OAAO,EAAE,gBAAgB,EAAE,CAAC"}
@@ -25,10 +25,12 @@ const generateMetadata = (library) => {
25
25
  };
26
26
  const collectIntrinsicElements = (library) => {
27
27
  const entries = [];
28
+ const seen = new Set();
28
29
  for (const { glibName, klass, namespace } of iterateClassesWithGlibName(library)) {
29
- if (!isIntrinsicElementClass(klass, namespace, library)) {
30
+ if (!isIntrinsicElementClass(klass, namespace, library) || seen.has(glibName)) {
30
31
  continue;
31
32
  }
33
+ seen.add(glibName);
32
34
  const sources = [
33
35
  klass,
34
36
  ...implementedInterfaces(klass, namespace, library).map((entry) => entry.klass),
@@ -1 +1 @@
1
- {"version":3,"file":"metadata.js","sourceRoot":"","sources":["../../../src/store/jsx/metadata.ts"],"names":[],"mappings":"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","sourcesContent":["import { sortStringsBy, sourceStringLiteral, toCamelIdentifier } from \"@gtkx/utils\";\nimport type { GirClass } from \"../../gir/class.js\";\nimport type { GirEnum } from \"../../gir/enum.js\";\nimport type { Library } from \"../../gir/library.js\";\nimport type { PrimitiveCategory } from \"../../gir/primitives.js\";\nimport type { TypeId } from \"../../gir/type-id.js\";\nimport type { GirType } from \"../../gir/type.js\";\nimport { inputParameters } from \"../../analysis/param-structure.js\";\nimport { type GirProperty, isConstructableProperty } from \"../../gir/property.js\";\nimport {\n implementedInterfaces,\n isIntrinsicElementClass,\n iterateClassesWithGlibName,\n signalHandlerName,\n} from \"./intrinsic-elements.js\";\n\ntype IntrinsicElementEntry = {\n glibName: string;\n signals: [string, string][];\n constructOnly: string[];\n constructable: string[];\n defaults: [string, string][];\n};\n\ntype PropNameCollector = {\n shouldKeep: (property: GirProperty) => boolean;\n seen: Set<string>;\n names: string[];\n};\n\ntype DefaultPropsCollector = {\n library: Library;\n seen: Set<string>;\n defaults: [string, string][];\n};\n\nconst INTEGER_PATTERN = /^-?\\d+$/;\nconst FLOAT_PATTERN = /^[+-]?(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:e[+-]?\\d+)?$/i;\n\nconst generateMetadata = (library: Library): string => {\n const intrinsicElements = collectIntrinsicElements(library);\n\n const signalsEntries = intrinsicElements.map(\n ({ glibName, signals }) => ` \"${glibName}\": ${renderSignalsObject(signals)},`,\n );\n\n const constructOnlyEntries = intrinsicElements\n .filter(({ constructOnly }) => constructOnly.length > 0)\n .map(({ glibName, constructOnly }) => ` \"${glibName}\": ${renderStringSet(constructOnly)},`);\n\n const constructableEntries = intrinsicElements\n .filter(({ constructable }) => constructable.length > 0)\n .map(({ glibName, constructable }) => ` \"${glibName}\": ${renderStringSet(constructable)},`);\n\n const defaultsEntries = intrinsicElements\n .filter(({ defaults }) => defaults.length > 0)\n .map(({ glibName, defaults }) => ` \"${glibName}\": ${renderDefaultsObject(defaults)},`);\n\n return `${[\n `export const signals: Record<string, Record<string, string>> = {\\n${signalsEntries.join(\"\\n\")}\\n};`,\n `export const constructOnlyProps: Record<string, Set<string>> = {\\n${constructOnlyEntries.join(\"\\n\")}\\n};`,\n `export const constructProps: Record<string, Set<string>> = {\\n${constructableEntries.join(\"\\n\")}\\n};`,\n `export const defaultProps: Record<string, Record<string, unknown>> = {\\n${defaultsEntries.join(\"\\n\")}\\n};`,\n ].join(\"\\n\\n\")}\\n`;\n};\n\nconst collectIntrinsicElements = (library: Library): IntrinsicElementEntry[] => {\n const entries: IntrinsicElementEntry[] = [];\n\n for (const { glibName, klass, namespace } of iterateClassesWithGlibName(library)) {\n if (!isIntrinsicElementClass(klass, namespace, library)) {\n continue;\n }\n\n const sources: GirClass[] = [\n klass,\n ...implementedInterfaces(klass, namespace, library).map((entry) => entry.klass),\n ];\n\n entries.push({\n glibName,\n signals: collectSignals(sources),\n constructOnly: collectConstructOnly(sources),\n constructable: collectConstructable(sources),\n defaults: collectDefaultProps(library, sources),\n });\n }\n\n return sortStringsBy(entries, (entry) => entry.glibName);\n};\n\nconst collectSignalsFromSource = (source: GirClass, seen: Set<string>, signals: [string, string][]): void => {\n for (const signal of source.signals) {\n const handlerName = signalHandlerName(signal.name);\n\n if (seen.has(handlerName)) {\n continue;\n }\n\n seen.add(handlerName);\n signals.push([handlerName, signal.name] as const);\n }\n};\n\nconst collectSignals = (sources: GirClass[]): [string, string][] => {\n const seen: Set<string> = new Set();\n const signals: [string, string][] = [];\n\n for (const source of sources) {\n collectSignalsFromSource(source, seen, signals);\n }\n\n return signals;\n};\n\nconst collectPropNamesFromSource = (source: GirClass, collector: PropNameCollector): void => {\n const { shouldKeep, seen, names } = collector;\n\n for (const property of source.properties) {\n if (!shouldKeep(property)) {\n continue;\n }\n\n const jsName = toCamelIdentifier(property.name);\n\n if (seen.has(jsName)) {\n continue;\n }\n\n seen.add(jsName);\n names.push(jsName);\n }\n};\n\nconst collectPropNames = (sources: GirClass[], shouldKeep: (property: GirProperty) => boolean): string[] => {\n const collector: PropNameCollector = { shouldKeep, seen: new Set<string>(), names: [] };\n\n for (const source of sources) {\n collectPropNamesFromSource(source, collector);\n }\n\n return collector.names;\n};\n\nconst collectConstructOnly = (sources: GirClass[]): string[] =>\n collectPropNames(sources, (property) => property.constructOnly && property.introspectable);\n\nconst collectConstructable = (sources: GirClass[]): string[] =>\n collectPropNames(sources, (property) => isConstructableProperty(property) && property.introspectable);\n\nconst renderObjectLiteral = (entries: [string, string][], renderValue: (value: string) => string): string => {\n if (entries.length === 0) {\n return \"{}\";\n }\n\n const lines = entries.map(([key, value]) => ` ${sourceStringLiteral(key)}: ${renderValue(value)}`);\n\n return `{\\n${lines.join(\",\\n\")}\\n }`;\n};\n\nconst renderStringSet = (names: string[]): string =>\n `new Set([${names.map((name) => sourceStringLiteral(name)).join(\",\")}])`;\n\nconst renderSignalsObject = (entries: [string, string][]): string => renderObjectLiteral(entries, sourceStringLiteral);\n\nconst collectDefaultsFromClass = (klass: GirClass, collector: DefaultPropsCollector): void => {\n for (const property of klass.properties) {\n const entry = defaultPropEntry(collector.library, klass, property, collector.seen);\n\n if (entry !== undefined) {\n collector.defaults.push(entry);\n }\n }\n};\n\nconst collectDefaultProps = (library: Library, sources: GirClass[]): [string, string][] => {\n const collector: DefaultPropsCollector = { library, seen: new Set<string>(), defaults: [] };\n\n for (const klass of sources) {\n collectDefaultsFromClass(klass, collector);\n }\n\n return collector.defaults;\n};\n\nconst isDefaultCandidate = (property: GirProperty): boolean =>\n (property.writable || property.construct) && !property.constructOnly && property.introspectable;\n\nconst defaultPropEntry = (\n library: Library,\n klass: GirClass,\n property: GirProperty,\n seen: Set<string>,\n): [string, string] | undefined => {\n if (!isDefaultCandidate(property)) {\n return undefined;\n }\n\n const jsName = toCamelIdentifier(property.name);\n\n if (seen.has(jsName)) {\n return undefined;\n }\n\n seen.add(jsName);\n const literal = renderDefaultLiteral(library, klass, property);\n\n if (literal === undefined) {\n return undefined;\n }\n\n return [jsName, literal];\n};\n\nconst willSetterRejectNull = (library: Library, klass: GirClass, property: GirProperty): boolean => {\n if (property.setter === undefined) {\n return false;\n }\n\n const setter = klass.methods.find((method) => method.name === property.setter);\n\n if (setter === undefined) {\n return false;\n }\n\n const [value] = inputParameters(library, setter);\n\n return value !== undefined && !value.parameter.nullable && !value.parameter.optional;\n};\n\nconst setterValueRef = (library: Library, klass: GirClass, property: GirProperty): TypeId | undefined => {\n if (property.setter === undefined) {\n return undefined;\n }\n\n const setter = klass.methods.find((method) => method.name === property.setter);\n\n if (setter === undefined) {\n return undefined;\n }\n\n const [value] = inputParameters(library, setter);\n\n return value?.parameter.type;\n};\n\nconst renderDefaultLiteral = (library: Library, klass: GirClass, property: GirProperty): string | undefined => {\n if (property.defaultValue === \"NULL\" && willSetterRejectNull(library, klass, property)) {\n return undefined;\n }\n\n const ref = setterValueRef(library, klass, property) ?? property.type;\n\n return resolveDefaultLiteral(library, ref, property.defaultValue);\n};\n\nconst resolveDefaultLiteral = (\n library: Library,\n ref: TypeId | undefined,\n raw: string | undefined,\n): string | undefined => {\n if (raw === undefined) {\n return undefined;\n }\n\n if (raw === \"NULL\") {\n return \"null\";\n }\n\n if (ref === undefined) {\n return undefined;\n }\n\n const resolved = library.typeFor(ref);\n\n if (resolved === undefined) {\n return undefined;\n }\n\n return resolveTypeDefaultLiteral(library, resolved, raw);\n};\n\nconst resolveTypeDefaultLiteral = (library: Library, resolved: GirType, raw: string): string | undefined => {\n if (resolved.kind === \"primitive\") {\n return primitiveDefaultLiteral(resolved.category, raw);\n }\n\n if (resolved.kind === \"enum\") {\n return enumDefaultLiteral(resolved.value, raw);\n }\n\n if (resolved.kind === \"alias\") {\n return resolveDefaultLiteral(library, resolved.value.target, raw);\n }\n\n return undefined;\n};\n\nconst booleanDefaultLiteral = (raw: string): string | undefined => {\n if (raw === \"TRUE\") {\n return \"true\";\n }\n\n if (raw === \"FALSE\") {\n return \"false\";\n }\n\n return undefined;\n};\n\nconst integerDefaultLiteral = (raw: string): string | undefined => {\n const trimmed = raw.trim();\n\n return INTEGER_PATTERN.test(trimmed) ? trimmed : undefined;\n};\n\nconst floatDefaultLiteral = (raw: string): string | undefined => {\n const trimmed = raw.trim();\n\n if (!FLOAT_PATTERN.test(trimmed)) {\n return undefined;\n }\n\n const value = Number(trimmed);\n\n return Number.isFinite(value) ? String(value) : undefined;\n};\n\nconst primitiveDefaultLiteral = (category: PrimitiveCategory, raw: string): string | undefined => {\n switch (category) {\n case \"boolean\": {\n return booleanDefaultLiteral(raw);\n }\n case \"int8\":\n case \"int16\":\n case \"int32\":\n case \"uint8\":\n case \"uint16\":\n case \"uint32\":\n case \"int64\":\n case \"uint64\":\n case \"unichar\": {\n return integerDefaultLiteral(raw);\n }\n case \"float32\":\n case \"float64\": {\n return floatDefaultLiteral(raw);\n }\n case \"string\": {\n return sourceStringLiteral(raw);\n }\n case \"bigint64\":\n case \"biguint64\":\n case \"gtype\": {\n return bigintDefaultLiteral(raw);\n }\n case \"pointer\":\n case \"void\": {\n return undefined;\n }\n }\n};\n\nconst bigintDefaultLiteral = (raw: string): string | undefined => {\n const integer = integerDefaultLiteral(raw);\n\n return integer === undefined ? undefined : `${integer}n`;\n};\n\nconst enumDefaultLiteral = (enumType: GirEnum, raw: string): string | undefined => {\n const trimmed = raw.trim();\n\n if (INTEGER_PATTERN.test(trimmed)) {\n return trimmed;\n }\n\n const member = enumType.members.find((entry) => entry.cIdentifier === trimmed || entry.name === trimmed);\n\n return member?.value;\n};\n\nconst renderDefaultsObject = (entries: [string, string][]): string =>\n renderObjectLiteral(entries, (literal) => literal);\n\nexport { generateMetadata };\n"]}
1
+ {"version":3,"file":"metadata.js","sourceRoot":"","sources":["../../../src/store/jsx/metadata.ts"],"names":[],"mappings":"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","sourcesContent":["import { sortStringsBy, sourceStringLiteral, toCamelIdentifier } from \"@gtkx/utils\";\nimport type { GirClass } from \"../../gir/class.js\";\nimport type { GirEnum } from \"../../gir/enum.js\";\nimport type { Library } from \"../../gir/library.js\";\nimport type { PrimitiveCategory } from \"../../gir/primitives.js\";\nimport type { TypeId } from \"../../gir/type-id.js\";\nimport type { GirType } from \"../../gir/type.js\";\nimport { inputParameters } from \"../../analysis/param-structure.js\";\nimport { type GirProperty, isConstructableProperty } from \"../../gir/property.js\";\nimport {\n implementedInterfaces,\n isIntrinsicElementClass,\n iterateClassesWithGlibName,\n signalHandlerName,\n} from \"./intrinsic-elements.js\";\n\ntype IntrinsicElementEntry = {\n glibName: string;\n signals: [string, string][];\n constructOnly: string[];\n constructable: string[];\n defaults: [string, string][];\n};\n\ntype PropNameCollector = {\n shouldKeep: (property: GirProperty) => boolean;\n seen: Set<string>;\n names: string[];\n};\n\ntype DefaultPropsCollector = {\n library: Library;\n seen: Set<string>;\n defaults: [string, string][];\n};\n\nconst INTEGER_PATTERN = /^-?\\d+$/;\nconst FLOAT_PATTERN = /^[+-]?(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:e[+-]?\\d+)?$/i;\n\nconst generateMetadata = (library: Library): string => {\n const intrinsicElements = collectIntrinsicElements(library);\n\n const signalsEntries = intrinsicElements.map(\n ({ glibName, signals }) => ` \"${glibName}\": ${renderSignalsObject(signals)},`,\n );\n\n const constructOnlyEntries = intrinsicElements\n .filter(({ constructOnly }) => constructOnly.length > 0)\n .map(({ glibName, constructOnly }) => ` \"${glibName}\": ${renderStringSet(constructOnly)},`);\n\n const constructableEntries = intrinsicElements\n .filter(({ constructable }) => constructable.length > 0)\n .map(({ glibName, constructable }) => ` \"${glibName}\": ${renderStringSet(constructable)},`);\n\n const defaultsEntries = intrinsicElements\n .filter(({ defaults }) => defaults.length > 0)\n .map(({ glibName, defaults }) => ` \"${glibName}\": ${renderDefaultsObject(defaults)},`);\n\n return `${[\n `export const signals: Record<string, Record<string, string>> = {\\n${signalsEntries.join(\"\\n\")}\\n};`,\n `export const constructOnlyProps: Record<string, Set<string>> = {\\n${constructOnlyEntries.join(\"\\n\")}\\n};`,\n `export const constructProps: Record<string, Set<string>> = {\\n${constructableEntries.join(\"\\n\")}\\n};`,\n `export const defaultProps: Record<string, Record<string, unknown>> = {\\n${defaultsEntries.join(\"\\n\")}\\n};`,\n ].join(\"\\n\\n\")}\\n`;\n};\n\nconst collectIntrinsicElements = (library: Library): IntrinsicElementEntry[] => {\n const entries: IntrinsicElementEntry[] = [];\n const seen: Set<string> = new Set();\n\n for (const { glibName, klass, namespace } of iterateClassesWithGlibName(library)) {\n if (!isIntrinsicElementClass(klass, namespace, library) || seen.has(glibName)) {\n continue;\n }\n\n seen.add(glibName);\n\n const sources: GirClass[] = [\n klass,\n ...implementedInterfaces(klass, namespace, library).map((entry) => entry.klass),\n ];\n\n entries.push({\n glibName,\n signals: collectSignals(sources),\n constructOnly: collectConstructOnly(sources),\n constructable: collectConstructable(sources),\n defaults: collectDefaultProps(library, sources),\n });\n }\n\n return sortStringsBy(entries, (entry) => entry.glibName);\n};\n\nconst collectSignalsFromSource = (source: GirClass, seen: Set<string>, signals: [string, string][]): void => {\n for (const signal of source.signals) {\n const handlerName = signalHandlerName(signal.name);\n\n if (seen.has(handlerName)) {\n continue;\n }\n\n seen.add(handlerName);\n signals.push([handlerName, signal.name] as const);\n }\n};\n\nconst collectSignals = (sources: GirClass[]): [string, string][] => {\n const seen: Set<string> = new Set();\n const signals: [string, string][] = [];\n\n for (const source of sources) {\n collectSignalsFromSource(source, seen, signals);\n }\n\n return signals;\n};\n\nconst collectPropNamesFromSource = (source: GirClass, collector: PropNameCollector): void => {\n const { shouldKeep, seen, names } = collector;\n\n for (const property of source.properties) {\n if (!shouldKeep(property)) {\n continue;\n }\n\n const jsName = toCamelIdentifier(property.name);\n\n if (seen.has(jsName)) {\n continue;\n }\n\n seen.add(jsName);\n names.push(jsName);\n }\n};\n\nconst collectPropNames = (sources: GirClass[], shouldKeep: (property: GirProperty) => boolean): string[] => {\n const collector: PropNameCollector = { shouldKeep, seen: new Set<string>(), names: [] };\n\n for (const source of sources) {\n collectPropNamesFromSource(source, collector);\n }\n\n return collector.names;\n};\n\nconst collectConstructOnly = (sources: GirClass[]): string[] =>\n collectPropNames(sources, (property) => property.constructOnly && property.introspectable);\n\nconst collectConstructable = (sources: GirClass[]): string[] =>\n collectPropNames(sources, (property) => isConstructableProperty(property) && property.introspectable);\n\nconst renderObjectLiteral = (entries: [string, string][], renderValue: (value: string) => string): string => {\n if (entries.length === 0) {\n return \"{}\";\n }\n\n const lines = entries.map(([key, value]) => ` ${sourceStringLiteral(key)}: ${renderValue(value)}`);\n\n return `{\\n${lines.join(\",\\n\")}\\n }`;\n};\n\nconst renderStringSet = (names: string[]): string =>\n `new Set([${names.map((name) => sourceStringLiteral(name)).join(\",\")}])`;\n\nconst renderSignalsObject = (entries: [string, string][]): string => renderObjectLiteral(entries, sourceStringLiteral);\n\nconst collectDefaultsFromClass = (klass: GirClass, collector: DefaultPropsCollector): void => {\n for (const property of klass.properties) {\n const entry = defaultPropEntry(collector.library, klass, property, collector.seen);\n\n if (entry !== undefined) {\n collector.defaults.push(entry);\n }\n }\n};\n\nconst collectDefaultProps = (library: Library, sources: GirClass[]): [string, string][] => {\n const collector: DefaultPropsCollector = { library, seen: new Set<string>(), defaults: [] };\n\n for (const klass of sources) {\n collectDefaultsFromClass(klass, collector);\n }\n\n return collector.defaults;\n};\n\nconst isDefaultCandidate = (property: GirProperty): boolean =>\n (property.writable || property.construct) && !property.constructOnly && property.introspectable;\n\nconst defaultPropEntry = (\n library: Library,\n klass: GirClass,\n property: GirProperty,\n seen: Set<string>,\n): [string, string] | undefined => {\n if (!isDefaultCandidate(property)) {\n return undefined;\n }\n\n const jsName = toCamelIdentifier(property.name);\n\n if (seen.has(jsName)) {\n return undefined;\n }\n\n seen.add(jsName);\n const literal = renderDefaultLiteral(library, klass, property);\n\n if (literal === undefined) {\n return undefined;\n }\n\n return [jsName, literal];\n};\n\nconst willSetterRejectNull = (library: Library, klass: GirClass, property: GirProperty): boolean => {\n if (property.setter === undefined) {\n return false;\n }\n\n const setter = klass.methods.find((method) => method.name === property.setter);\n\n if (setter === undefined) {\n return false;\n }\n\n const [value] = inputParameters(library, setter);\n\n return value !== undefined && !value.parameter.nullable && !value.parameter.optional;\n};\n\nconst setterValueRef = (library: Library, klass: GirClass, property: GirProperty): TypeId | undefined => {\n if (property.setter === undefined) {\n return undefined;\n }\n\n const setter = klass.methods.find((method) => method.name === property.setter);\n\n if (setter === undefined) {\n return undefined;\n }\n\n const [value] = inputParameters(library, setter);\n\n return value?.parameter.type;\n};\n\nconst renderDefaultLiteral = (library: Library, klass: GirClass, property: GirProperty): string | undefined => {\n if (property.defaultValue === \"NULL\" && willSetterRejectNull(library, klass, property)) {\n return undefined;\n }\n\n const ref = setterValueRef(library, klass, property) ?? property.type;\n\n return resolveDefaultLiteral(library, ref, property.defaultValue);\n};\n\nconst resolveDefaultLiteral = (\n library: Library,\n ref: TypeId | undefined,\n raw: string | undefined,\n): string | undefined => {\n if (raw === undefined) {\n return undefined;\n }\n\n if (raw === \"NULL\") {\n return \"null\";\n }\n\n if (ref === undefined) {\n return undefined;\n }\n\n const resolved = library.typeFor(ref);\n\n if (resolved === undefined) {\n return undefined;\n }\n\n return resolveTypeDefaultLiteral(library, resolved, raw);\n};\n\nconst resolveTypeDefaultLiteral = (library: Library, resolved: GirType, raw: string): string | undefined => {\n if (resolved.kind === \"primitive\") {\n return primitiveDefaultLiteral(resolved.category, raw);\n }\n\n if (resolved.kind === \"enum\") {\n return enumDefaultLiteral(resolved.value, raw);\n }\n\n if (resolved.kind === \"alias\") {\n return resolveDefaultLiteral(library, resolved.value.target, raw);\n }\n\n return undefined;\n};\n\nconst booleanDefaultLiteral = (raw: string): string | undefined => {\n if (raw === \"TRUE\") {\n return \"true\";\n }\n\n if (raw === \"FALSE\") {\n return \"false\";\n }\n\n return undefined;\n};\n\nconst integerDefaultLiteral = (raw: string): string | undefined => {\n const trimmed = raw.trim();\n\n return INTEGER_PATTERN.test(trimmed) ? trimmed : undefined;\n};\n\nconst floatDefaultLiteral = (raw: string): string | undefined => {\n const trimmed = raw.trim();\n\n if (!FLOAT_PATTERN.test(trimmed)) {\n return undefined;\n }\n\n const value = Number(trimmed);\n\n return Number.isFinite(value) ? String(value) : undefined;\n};\n\nconst primitiveDefaultLiteral = (category: PrimitiveCategory, raw: string): string | undefined => {\n switch (category) {\n case \"boolean\": {\n return booleanDefaultLiteral(raw);\n }\n case \"int8\":\n case \"int16\":\n case \"int32\":\n case \"uint8\":\n case \"uint16\":\n case \"uint32\":\n case \"int64\":\n case \"uint64\":\n case \"unichar\": {\n return integerDefaultLiteral(raw);\n }\n case \"float32\":\n case \"float64\": {\n return floatDefaultLiteral(raw);\n }\n case \"string\": {\n return sourceStringLiteral(raw);\n }\n case \"bigint64\":\n case \"biguint64\":\n case \"gtype\": {\n return bigintDefaultLiteral(raw);\n }\n case \"pointer\":\n case \"void\": {\n return undefined;\n }\n }\n};\n\nconst bigintDefaultLiteral = (raw: string): string | undefined => {\n const integer = integerDefaultLiteral(raw);\n\n return integer === undefined ? undefined : `${integer}n`;\n};\n\nconst enumDefaultLiteral = (enumType: GirEnum, raw: string): string | undefined => {\n const trimmed = raw.trim();\n\n if (INTEGER_PATTERN.test(trimmed)) {\n return trimmed;\n }\n\n const member = enumType.members.find((entry) => entry.cIdentifier === trimmed || entry.name === trimmed);\n\n return member?.value;\n};\n\nconst renderDefaultsObject = (entries: [string, string][]): string =>\n renderObjectLiteral(entries, (literal) => literal);\n\nexport { generateMetadata };\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"jsx-store.d.ts","sourceRoot":"","sources":["../../src/store/jsx-store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAiB,KAAK,YAAY,EAA6B,MAAM,eAAe,CAAC;AAE5F,QAAA,MAAM,aAAa,GACf,SAAS,YAAY,EACrB,YAAY,gBAAgB,EAAE,EAC9B,UAAU,MAAM,EAChB,UAAU,OAAO,EAAE,KACpB,IAyBF,CAAC;AAEF,OAAO,EAAE,aAAa,EAAE,CAAC"}
1
+ {"version":3,"file":"jsx-store.d.ts","sourceRoot":"","sources":["../../src/store/jsx-store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAkC,KAAK,YAAY,EAA6B,MAAM,eAAe,CAAC;AAE7G,QAAA,MAAM,aAAa,GACf,SAAS,YAAY,EACrB,YAAY,gBAAgB,EAAE,EAC9B,UAAU,MAAM,EAChB,UAAU,OAAO,EAAE,KACpB,IAyBF,CAAC;AAEF,OAAO,EAAE,aAAa,EAAE,CAAC"}
@@ -1,12 +1,12 @@
1
- import { buildManifest, subpathExport, writeStore } from "./store-fs.js";
1
+ import { buildManifest, namespaceBarrel, subpathExport, writeStore } from "./store-fs.js";
2
2
  const writeJsxStore = (options, namespaces, metadata, rawFiles) => {
3
3
  const exportsMap = {
4
4
  "./metadata": subpathExport("metadata"),
5
5
  };
6
6
  const files = [{ fileName: "metadata.ts", source: metadata }];
7
7
  for (const { directory, source } of namespaces) {
8
- files.push({ fileName: `${directory}/${directory}.tsx`, source });
9
- exportsMap[`./${directory}`] = subpathExport(`${directory}/${directory}`);
8
+ files.push({ fileName: `${directory}/${directory}.tsx`, source }, namespaceBarrel(directory));
9
+ exportsMap[`./${directory}`] = subpathExport(`${directory}/index`);
10
10
  }
11
11
  writeStore({
12
12
  storeDir: options.storeDir,
@@ -1 +1 @@
1
- {"version":3,"file":"jsx-store.js","sourceRoot":"","sources":["../../src/store/jsx-store.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAqB,aAAa,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE5F,MAAM,aAAa,GAAG,CAClB,OAAqB,EACrB,UAA8B,EAC9B,QAAgB,EAChB,QAAmB,EACf,EAAE;IACN,MAAM,UAAU,GAA4B;QACxC,YAAY,EAAE,aAAa,CAAC,UAAU,CAAC;KAC1C,CAAC;IAEF,MAAM,KAAK,GAAG,CAAC,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;IAE9D,KAAK,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,UAAU,EAAE,CAAC;QAC7C,KAAK,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,GAAG,SAAS,IAAI,SAAS,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QAClE,UAAU,CAAC,KAAK,SAAS,EAAE,CAAC,GAAG,aAAa,CAAC,GAAG,SAAS,IAAI,SAAS,EAAE,CAAC,CAAC;IAC9E,CAAC;IAED,UAAU,CAAC;QACP,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,KAAK;QACL,QAAQ,EAAE,aAAa,CAAC;YACpB,IAAI,EAAE,WAAW;YACjB,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,OAAO,EAAE,UAAU;YACnB,gBAAgB,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,aAAa,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE;SACxE,CAAC;QACF,QAAQ;QACR,oBAAoB,EAAE,IAAI;KAC7B,CAAC,CAAC;AACP,CAAC,CAAC;AAEF,OAAO,EAAE,aAAa,EAAE,CAAC","sourcesContent":["import type { JsxNamespaceFile } from \"./jsx/pipeline.js\";\nimport type { RawFile } from \"./store-fs.js\";\nimport { buildManifest, type StoreOptions, subpathExport, writeStore } from \"./store-fs.js\";\n\nconst writeJsxStore = (\n options: StoreOptions,\n namespaces: JsxNamespaceFile[],\n metadata: string,\n rawFiles: RawFile[],\n): void => {\n const exportsMap: Record<string, unknown> = {\n \"./metadata\": subpathExport(\"metadata\"),\n };\n\n const files = [{ fileName: \"metadata.ts\", source: metadata }];\n\n for (const { directory, source } of namespaces) {\n files.push({ fileName: `${directory}/${directory}.tsx`, source });\n exportsMap[`./${directory}`] = subpathExport(`${directory}/${directory}`);\n }\n\n writeStore({\n storeDir: options.storeDir,\n linkDir: options.linkDir,\n files,\n manifest: buildManifest({\n name: \"@gtkx/jsx\",\n version: options.version,\n exports: exportsMap,\n peerDependencies: { \"@gtkx/gi\": \"*\", \"@gtkx/react\": \"*\", react: \"*\" },\n }),\n rawFiles,\n requiresEnvReference: true,\n });\n};\n\nexport { writeJsxStore };\n"]}
1
+ {"version":3,"file":"jsx-store.js","sourceRoot":"","sources":["../../src/store/jsx-store.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,eAAe,EAAqB,aAAa,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE7G,MAAM,aAAa,GAAG,CAClB,OAAqB,EACrB,UAA8B,EAC9B,QAAgB,EAChB,QAAmB,EACf,EAAE;IACN,MAAM,UAAU,GAA4B;QACxC,YAAY,EAAE,aAAa,CAAC,UAAU,CAAC;KAC1C,CAAC;IAEF,MAAM,KAAK,GAAG,CAAC,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;IAE9D,KAAK,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,UAAU,EAAE,CAAC;QAC7C,KAAK,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,GAAG,SAAS,IAAI,SAAS,MAAM,EAAE,MAAM,EAAE,EAAE,eAAe,CAAC,SAAS,CAAC,CAAC,CAAC;QAC9F,UAAU,CAAC,KAAK,SAAS,EAAE,CAAC,GAAG,aAAa,CAAC,GAAG,SAAS,QAAQ,CAAC,CAAC;IACvE,CAAC;IAED,UAAU,CAAC;QACP,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,KAAK;QACL,QAAQ,EAAE,aAAa,CAAC;YACpB,IAAI,EAAE,WAAW;YACjB,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,OAAO,EAAE,UAAU;YACnB,gBAAgB,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,aAAa,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE;SACxE,CAAC;QACF,QAAQ;QACR,oBAAoB,EAAE,IAAI;KAC7B,CAAC,CAAC;AACP,CAAC,CAAC;AAEF,OAAO,EAAE,aAAa,EAAE,CAAC","sourcesContent":["import type { JsxNamespaceFile } from \"./jsx/pipeline.js\";\nimport type { RawFile } from \"./store-fs.js\";\nimport { buildManifest, namespaceBarrel, type StoreOptions, subpathExport, writeStore } from \"./store-fs.js\";\n\nconst writeJsxStore = (\n options: StoreOptions,\n namespaces: JsxNamespaceFile[],\n metadata: string,\n rawFiles: RawFile[],\n): void => {\n const exportsMap: Record<string, unknown> = {\n \"./metadata\": subpathExport(\"metadata\"),\n };\n\n const files = [{ fileName: \"metadata.ts\", source: metadata }];\n\n for (const { directory, source } of namespaces) {\n files.push({ fileName: `${directory}/${directory}.tsx`, source }, namespaceBarrel(directory));\n exportsMap[`./${directory}`] = subpathExport(`${directory}/index`);\n }\n\n writeStore({\n storeDir: options.storeDir,\n linkDir: options.linkDir,\n files,\n manifest: buildManifest({\n name: \"@gtkx/jsx\",\n version: options.version,\n exports: exportsMap,\n peerDependencies: { \"@gtkx/gi\": \"*\", \"@gtkx/react\": \"*\", react: \"*\" },\n }),\n rawFiles,\n requiresEnvReference: true,\n });\n};\n\nexport { writeJsxStore };\n"]}
@@ -11,18 +11,29 @@ type ResolvedStore = {
11
11
  /** Subexport names of the installed `@gtkx/react`, empty when it is absent. */
12
12
  reactSubexports: string[];
13
13
  };
14
+ declare const getShadowingStorePaths: (projectRoot: string) => string[];
15
+ declare const sweepProjectStaging: (projectRoot: string) => void;
14
16
  /**
15
17
  * Resolves where a project's `@gtkx/gi` and `@gtkx/jsx` stores belong, from the project root alone. The
16
18
  * result supplies every `runCodegen` input except `libraries` and `girPath`, so a caller that has
17
19
  * already resolved those can spread it straight into the call.
18
20
  *
21
+ * Both stores go in one `node_modules`, found by walking the project's `node_modules` chain upwards:
22
+ * the one `@gtkx/react` resolves from, or `@gtkx/runtime`'s when no React is installed. That is the
23
+ * project's own directory when it installs those packages itself, and the workspace root when npm or
24
+ * yarn hoisted them there. Keeping the pair together is what lets the jsx store import the gi store, and
25
+ * anchoring them where the `@gtkx` packages sit is what lets `@gtkx/react`, the CLI, and the project's
26
+ * sources all reach the bindings. A package manager that hoists therefore gives every project sharing
27
+ * that `node_modules` one shared store.
28
+ *
19
29
  * Store versions come from the installed `@gtkx/runtime` and `@gtkx/react`, so a dependency upgrade
20
30
  * invalidates the stores. Pass explicit `gi` or `jsx` options to `runCodegen` to override any of it.
21
31
  *
22
- * @param projectRoot Directory holding the project's `package.json` and `node_modules`.
32
+ * @param projectRoot Directory holding the project's `package.json`, whose `node_modules` chain is walked.
23
33
  * @returns The store locations and the React subexports that shape the jsx store.
24
- * @throws If `@gtkx/runtime` cannot be resolved from the project.
34
+ * @throws If `@gtkx/runtime` cannot be resolved from the project, or a `@gtkx` package that imports the
35
+ * bindings is installed above the `node_modules` the stores would go in, since it could not reach them.
25
36
  */
26
37
  declare const resolveStore: (projectRoot: string) => ResolvedStore;
27
- export { resolveStore, type ResolvedStore };
38
+ export { getShadowingStorePaths, resolveStore, sweepProjectStaging, type ResolvedStore };
28
39
  //# sourceMappingURL=resolve-store.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"resolve-store.d.ts","sourceRoot":"","sources":["../../src/store/resolve-store.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAElD;;;GAGG;AACH,KAAK,aAAa,GAAG;IACjB,mFAAmF;IACnF,EAAE,EAAE,YAAY,CAAC;IACjB,0GAA0G;IAC1G,GAAG,EAAE,YAAY,GAAG,IAAI,CAAC;IACzB,+EAA+E;IAC/E,eAAe,EAAE,MAAM,EAAE,CAAC;CAC7B,CAAC;AAuDF;;;;;;;;;;;GAWG;AACH,QAAA,MAAM,YAAY,GAAI,aAAa,MAAM,KAAG,aAe3C,CAAC;AAEF,OAAO,EAAE,YAAY,EAAE,KAAK,aAAa,EAAE,CAAC"}
1
+ {"version":3,"file":"resolve-store.d.ts","sourceRoot":"","sources":["../../src/store/resolve-store.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAGlD;;;GAGG;AACH,KAAK,aAAa,GAAG;IACjB,mFAAmF;IACnF,EAAE,EAAE,YAAY,CAAC;IACjB,0GAA0G;IAC1G,GAAG,EAAE,YAAY,GAAG,IAAI,CAAC;IACzB,+EAA+E;IAC/E,eAAe,EAAE,MAAM,EAAE,CAAC;CAC7B,CAAC;AA0IF,QAAA,MAAM,sBAAsB,GAAI,aAAa,MAAM,KAAG,MAAM,EAS3D,CAAC;AASF,QAAA,MAAM,mBAAmB,GAAI,aAAa,MAAM,KAAG,IAMlD,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,QAAA,MAAM,YAAY,GAAI,aAAa,MAAM,KAAG,aAW3C,CAAC;AAEF,OAAO,EAAE,sBAAsB,EAAE,YAAY,EAAE,mBAAmB,EAAE,KAAK,aAAa,EAAE,CAAC"}