@gtkx/cli 1.6.0 → 2.0.0-beta.2

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 (309) hide show
  1. package/README.md +5 -5
  2. package/dist/builder.d.ts +1 -0
  3. package/dist/builder.d.ts.map +1 -1
  4. package/dist/builder.js +17 -5
  5. package/dist/builder.js.map +1 -1
  6. package/dist/cli.js +2 -0
  7. package/dist/cli.js.map +1 -1
  8. package/dist/codegen/freshness.d.ts.map +1 -1
  9. package/dist/codegen/freshness.js +45 -16
  10. package/dist/codegen/freshness.js.map +1 -1
  11. package/dist/codegen/reference.d.ts.map +1 -1
  12. package/dist/codegen/reference.js +1 -7
  13. package/dist/codegen/reference.js.map +1 -1
  14. package/dist/codegen/report.d.ts.map +1 -1
  15. package/dist/codegen/report.js +5 -16
  16. package/dist/codegen/report.js.map +1 -1
  17. package/dist/codegen/run-codegen.d.ts +7 -7
  18. package/dist/codegen/run-codegen.d.ts.map +1 -1
  19. package/dist/codegen/run-codegen.js +35 -107
  20. package/dist/codegen/run-codegen.js.map +1 -1
  21. package/dist/codegen/store-resolver.d.ts +1 -2
  22. package/dist/codegen/store-resolver.d.ts.map +1 -1
  23. package/dist/codegen/store-resolver.js +10 -19
  24. package/dist/codegen/store-resolver.js.map +1 -1
  25. package/dist/commands/build.d.ts +5 -0
  26. package/dist/commands/build.d.ts.map +1 -1
  27. package/dist/commands/build.js +83 -10
  28. package/dist/commands/build.js.map +1 -1
  29. package/dist/commands/codegen.d.ts +1 -0
  30. package/dist/commands/codegen.d.ts.map +1 -1
  31. package/dist/commands/codegen.js +6 -5
  32. package/dist/commands/codegen.js.map +1 -1
  33. package/dist/commands/deploy.d.ts +1 -0
  34. package/dist/commands/deploy.d.ts.map +1 -1
  35. package/dist/commands/deploy.js +4 -2
  36. package/dist/commands/deploy.js.map +1 -1
  37. package/dist/commands/dev.d.ts +8 -0
  38. package/dist/commands/dev.d.ts.map +1 -1
  39. package/dist/commands/dev.js +19 -1
  40. package/dist/commands/dev.js.map +1 -1
  41. package/dist/commands/docs.d.ts.map +1 -1
  42. package/dist/commands/docs.js +5 -15
  43. package/dist/commands/docs.js.map +1 -1
  44. package/dist/deploy/freedesktop/copyright.d.ts.map +1 -1
  45. package/dist/deploy/freedesktop/copyright.js +2 -13
  46. package/dist/deploy/freedesktop/copyright.js.map +1 -1
  47. package/dist/deploy/freedesktop/metainfo.d.ts.map +1 -1
  48. package/dist/deploy/freedesktop/metainfo.js +41 -2
  49. package/dist/deploy/freedesktop/metainfo.js.map +1 -1
  50. package/dist/deploy/freedesktop/xml.d.ts.map +1 -1
  51. package/dist/deploy/freedesktop/xml.js +21 -25
  52. package/dist/deploy/freedesktop/xml.js.map +1 -1
  53. package/dist/deploy/nfpm/config.d.ts.map +1 -1
  54. package/dist/deploy/nfpm/config.js +5 -2
  55. package/dist/deploy/nfpm/config.js.map +1 -1
  56. package/dist/deploy/nfpm/contents.d.ts.map +1 -1
  57. package/dist/deploy/nfpm/contents.js +8 -0
  58. package/dist/deploy/nfpm/contents.js.map +1 -1
  59. package/dist/deploy/node-runtime/elf.d.ts +2 -1
  60. package/dist/deploy/node-runtime/elf.d.ts.map +1 -1
  61. package/dist/deploy/node-runtime/elf.js +32 -5
  62. package/dist/deploy/node-runtime/elf.js.map +1 -1
  63. package/dist/deploy/node-runtime/index.d.ts +2 -1
  64. package/dist/deploy/node-runtime/index.d.ts.map +1 -1
  65. package/dist/deploy/node-runtime/index.js +73 -4
  66. package/dist/deploy/node-runtime/index.js.map +1 -1
  67. package/dist/deploy/node-runtime/license.d.ts.map +1 -1
  68. package/dist/deploy/node-runtime/license.js +2 -9
  69. package/dist/deploy/node-runtime/license.js.map +1 -1
  70. package/dist/deploy/notices/node-runtime.js +2 -2
  71. package/dist/deploy/notices/node-runtime.js.map +1 -1
  72. package/dist/deploy/notices/packages.d.ts.map +1 -1
  73. package/dist/deploy/notices/packages.js +3 -10
  74. package/dist/deploy/notices/packages.js.map +1 -1
  75. package/dist/deploy/payload/copy-tree.d.ts.map +1 -1
  76. package/dist/deploy/payload/copy-tree.js +3 -3
  77. package/dist/deploy/payload/copy-tree.js.map +1 -1
  78. package/dist/deploy/payload/launcher.d.ts.map +1 -1
  79. package/dist/deploy/payload/launcher.js +14 -1
  80. package/dist/deploy/payload/launcher.js.map +1 -1
  81. package/dist/deploy/payload/stage.d.ts.map +1 -1
  82. package/dist/deploy/payload/stage.js +2 -4
  83. package/dist/deploy/payload/stage.js.map +1 -1
  84. package/dist/deploy/run-deploy.d.ts +1 -0
  85. package/dist/deploy/run-deploy.d.ts.map +1 -1
  86. package/dist/deploy/run-deploy.js +100 -14
  87. package/dist/deploy/run-deploy.js.map +1 -1
  88. package/dist/deploy/settings/build-manifest.d.ts +6 -1
  89. package/dist/deploy/settings/build-manifest.d.ts.map +1 -1
  90. package/dist/deploy/settings/build-manifest.js +17 -17
  91. package/dist/deploy/settings/build-manifest.js.map +1 -1
  92. package/dist/deploy/settings/extra-files.d.ts +1 -1
  93. package/dist/deploy/settings/extra-files.d.ts.map +1 -1
  94. package/dist/deploy/settings/extra-files.js +22 -1
  95. package/dist/deploy/settings/extra-files.js.map +1 -1
  96. package/dist/deploy/settings/index.d.ts +1 -0
  97. package/dist/deploy/settings/index.d.ts.map +1 -1
  98. package/dist/deploy/settings/index.js +2 -1
  99. package/dist/deploy/settings/index.js.map +1 -1
  100. package/dist/deploy/settings/libraries.d.ts.map +1 -1
  101. package/dist/deploy/settings/libraries.js +2 -19
  102. package/dist/deploy/settings/libraries.js.map +1 -1
  103. package/dist/deploy/settings/paths.d.ts +2 -2
  104. package/dist/deploy/settings/paths.d.ts.map +1 -1
  105. package/dist/deploy/settings/paths.js +110 -12
  106. package/dist/deploy/settings/paths.js.map +1 -1
  107. package/dist/deploy/settings/screenshots.d.ts.map +1 -1
  108. package/dist/deploy/settings/screenshots.js +6 -31
  109. package/dist/deploy/settings/screenshots.js.map +1 -1
  110. package/dist/deploy/targets/flatpak-pnpm.js +4 -4
  111. package/dist/deploy/targets/flatpak-pnpm.js.map +1 -1
  112. package/dist/deploy/targets/flatpak-source.d.ts.map +1 -1
  113. package/dist/deploy/targets/flatpak-source.js +15 -6
  114. package/dist/deploy/targets/flatpak-source.js.map +1 -1
  115. package/dist/deploy/targets/flatpak-sources.js +1 -1
  116. package/dist/deploy/targets/flatpak-sources.js.map +1 -1
  117. package/dist/deploy/types.d.ts +1 -0
  118. package/dist/deploy/types.d.ts.map +1 -1
  119. package/dist/deploy/types.js.map +1 -1
  120. package/dist/dev/headless.d.ts +3 -0
  121. package/dist/dev/headless.d.ts.map +1 -0
  122. package/dist/dev/headless.js +35 -0
  123. package/dist/dev/headless.js.map +1 -0
  124. package/dist/dev/runner-deps.js +1 -1
  125. package/dist/dev/runner-deps.js.map +1 -1
  126. package/dist/dev/runner-main.d.ts.map +1 -1
  127. package/dist/dev/runner-main.js +1 -2
  128. package/dist/dev/runner-main.js.map +1 -1
  129. package/dist/dev/schema-dir.d.ts +1 -1
  130. package/dist/dev/schema-dir.d.ts.map +1 -1
  131. package/dist/dev/schema-dir.js +2 -4
  132. package/dist/dev/schema-dir.js.map +1 -1
  133. package/dist/i18n/catalogs.d.ts.map +1 -1
  134. package/dist/i18n/catalogs.js +2 -1
  135. package/dist/i18n/catalogs.js.map +1 -1
  136. package/dist/i18n/metadata-templates.d.ts.map +1 -1
  137. package/dist/i18n/metadata-templates.js +2 -1
  138. package/dist/i18n/metadata-templates.js.map +1 -1
  139. package/dist/i18n/source-messages.d.ts +3 -21
  140. package/dist/i18n/source-messages.d.ts.map +1 -1
  141. package/dist/i18n/source-messages.js +900 -85
  142. package/dist/i18n/source-messages.js.map +1 -1
  143. package/dist/i18n/types.d.ts +6 -7
  144. package/dist/i18n/types.d.ts.map +1 -1
  145. package/dist/i18n/types.js +83 -96
  146. package/dist/i18n/types.js.map +1 -1
  147. package/dist/internal/build-manifest.d.ts +5 -2
  148. package/dist/internal/build-manifest.d.ts.map +1 -1
  149. package/dist/internal/build-manifest.js +15 -2
  150. package/dist/internal/build-manifest.js.map +1 -1
  151. package/dist/internal/build-output.d.ts +8 -0
  152. package/dist/internal/build-output.d.ts.map +1 -0
  153. package/dist/internal/build-output.js +69 -0
  154. package/dist/internal/build-output.js.map +1 -0
  155. package/dist/internal/docs-elements.js +2 -2
  156. package/dist/internal/docs-elements.js.map +1 -1
  157. package/dist/internal/entry-arg.d.ts +4 -1
  158. package/dist/internal/entry-arg.d.ts.map +1 -1
  159. package/dist/internal/entry-arg.js +7 -1
  160. package/dist/internal/entry-arg.js.map +1 -1
  161. package/dist/internal/icon-path.d.ts.map +1 -1
  162. package/dist/internal/icon-path.js +5 -16
  163. package/dist/internal/icon-path.js.map +1 -1
  164. package/dist/internal/output-directory.d.ts +15 -0
  165. package/dist/internal/output-directory.d.ts.map +1 -0
  166. package/dist/internal/output-directory.js +490 -0
  167. package/dist/internal/output-directory.js.map +1 -0
  168. package/dist/internal/prepare-project.d.ts +2 -0
  169. package/dist/internal/prepare-project.d.ts.map +1 -1
  170. package/dist/internal/prepare-project.js +3 -3
  171. package/dist/internal/prepare-project.js.map +1 -1
  172. package/dist/internal/source-imports.d.ts.map +1 -1
  173. package/dist/internal/source-imports.js +10 -41
  174. package/dist/internal/source-imports.js.map +1 -1
  175. package/dist/mcp/client.js +2 -2
  176. package/dist/mcp/client.js.map +1 -1
  177. package/dist/settings/render.d.ts +0 -1
  178. package/dist/settings/render.d.ts.map +1 -1
  179. package/dist/settings/render.js +1 -11
  180. package/dist/settings/render.js.map +1 -1
  181. package/dist/settings/schema.d.ts +2 -2
  182. package/dist/settings/schema.d.ts.map +1 -1
  183. package/dist/settings/schema.js +21 -62
  184. package/dist/settings/schema.js.map +1 -1
  185. package/dist/vite-plugins/asset-imports.d.ts +1 -2
  186. package/dist/vite-plugins/asset-imports.d.ts.map +1 -1
  187. package/dist/vite-plugins/asset-imports.js +19 -32
  188. package/dist/vite-plugins/asset-imports.js.map +1 -1
  189. package/dist/vite-plugins/asset-specifier.d.ts +1 -3
  190. package/dist/vite-plugins/asset-specifier.d.ts.map +1 -1
  191. package/dist/vite-plugins/asset-specifier.js +1 -4
  192. package/dist/vite-plugins/asset-specifier.js.map +1 -1
  193. package/dist/vite-plugins/build-manifest.d.ts +5 -1
  194. package/dist/vite-plugins/build-manifest.d.ts.map +1 -1
  195. package/dist/vite-plugins/build-manifest.js +2 -1
  196. package/dist/vite-plugins/build-manifest.js.map +1 -1
  197. package/dist/vite-plugins/i18n.d.ts.map +1 -1
  198. package/dist/vite-plugins/i18n.js +59 -6
  199. package/dist/vite-plugins/i18n.js.map +1 -1
  200. package/dist/vite-plugins/index.d.ts +8 -1
  201. package/dist/vite-plugins/index.d.ts.map +1 -1
  202. package/dist/vite-plugins/index.js +8 -6
  203. package/dist/vite-plugins/index.js.map +1 -1
  204. package/dist/vite-plugins/resources.d.ts.map +1 -1
  205. package/dist/vite-plugins/resources.js +32 -97
  206. package/dist/vite-plugins/resources.js.map +1 -1
  207. package/dist/vite-plugins/self-contained.d.ts.map +1 -1
  208. package/dist/vite-plugins/self-contained.js +159 -158
  209. package/dist/vite-plugins/self-contained.js.map +1 -1
  210. package/dist/vite-plugins/settings-worker-env.d.ts.map +1 -1
  211. package/dist/vite-plugins/settings-worker-env.js +2 -4
  212. package/dist/vite-plugins/settings-worker-env.js.map +1 -1
  213. package/dist/vite-plugins/settings.d.ts +1 -2
  214. package/dist/vite-plugins/settings.d.ts.map +1 -1
  215. package/dist/vite-plugins/settings.js +8 -14
  216. package/dist/vite-plugins/settings.js.map +1 -1
  217. package/dist/vite-plugins/undeclared-library.d.ts.map +1 -1
  218. package/dist/vite-plugins/undeclared-library.js +10 -13
  219. package/dist/vite-plugins/undeclared-library.js.map +1 -1
  220. package/dist/vite-plugins/worker.d.ts.map +1 -1
  221. package/dist/vite-plugins/worker.js +0 -1
  222. package/dist/vite-plugins/worker.js.map +1 -1
  223. package/package.json +21 -15
  224. package/src/builder.ts +18 -5
  225. package/src/cli.ts +3 -0
  226. package/src/codegen/freshness.ts +66 -17
  227. package/src/codegen/reference.ts +1 -8
  228. package/src/codegen/report.ts +5 -21
  229. package/src/codegen/run-codegen.ts +42 -151
  230. package/src/codegen/store-resolver.ts +10 -26
  231. package/src/commands/build.ts +13 -2
  232. package/src/commands/codegen.ts +6 -5
  233. package/src/commands/deploy.ts +4 -2
  234. package/src/commands/dev.ts +20 -1
  235. package/src/commands/docs.ts +5 -17
  236. package/src/deploy/freedesktop/copyright.ts +2 -14
  237. package/src/deploy/freedesktop/metainfo.ts +73 -21
  238. package/src/deploy/freedesktop/xml.ts +24 -32
  239. package/src/deploy/nfpm/config.ts +5 -2
  240. package/src/deploy/nfpm/contents.ts +8 -0
  241. package/src/deploy/node-runtime/elf.ts +43 -5
  242. package/src/deploy/node-runtime/index.ts +105 -5
  243. package/src/deploy/node-runtime/license.ts +2 -8
  244. package/src/deploy/notices/node-runtime.ts +2 -2
  245. package/src/deploy/notices/packages.ts +3 -11
  246. package/src/deploy/payload/copy-tree.ts +3 -4
  247. package/src/deploy/payload/launcher.ts +20 -1
  248. package/src/deploy/payload/stage.ts +3 -7
  249. package/src/deploy/run-deploy.ts +56 -16
  250. package/src/deploy/settings/build-manifest.ts +30 -17
  251. package/src/deploy/settings/extra-files.ts +26 -2
  252. package/src/deploy/settings/index.ts +3 -1
  253. package/src/deploy/settings/libraries.ts +1 -22
  254. package/src/deploy/settings/paths.ts +68 -13
  255. package/src/deploy/settings/screenshots.ts +8 -46
  256. package/src/deploy/targets/flatpak-pnpm.ts +4 -4
  257. package/src/deploy/targets/flatpak-source.ts +17 -6
  258. package/src/deploy/targets/flatpak-sources.ts +1 -1
  259. package/src/deploy/types.ts +1 -0
  260. package/src/dev/headless.ts +40 -0
  261. package/src/dev/runner-deps.ts +1 -1
  262. package/src/dev/runner-main.ts +1 -2
  263. package/src/dev/schema-dir.ts +2 -4
  264. package/src/i18n/catalogs.ts +2 -1
  265. package/src/i18n/metadata-templates.ts +2 -1
  266. package/src/i18n/source-messages.ts +1442 -262
  267. package/src/i18n/types.ts +97 -131
  268. package/src/internal/build-manifest.ts +25 -1
  269. package/src/internal/build-output.ts +99 -0
  270. package/src/internal/docs-elements.ts +2 -2
  271. package/src/internal/entry-arg.ts +8 -1
  272. package/src/internal/icon-path.ts +6 -19
  273. package/src/internal/output-directory.ts +699 -0
  274. package/src/internal/prepare-project.ts +5 -5
  275. package/src/internal/source-imports.ts +14 -50
  276. package/src/mcp/client.ts +2 -2
  277. package/src/settings/render.ts +1 -13
  278. package/src/settings/schema.ts +19 -81
  279. package/src/vite-plugins/asset-imports.ts +20 -44
  280. package/src/vite-plugins/asset-specifier.ts +0 -5
  281. package/src/vite-plugins/build-manifest.ts +7 -1
  282. package/src/vite-plugins/i18n.ts +87 -5
  283. package/src/vite-plugins/index.ts +16 -11
  284. package/src/vite-plugins/resources.ts +37 -140
  285. package/src/vite-plugins/self-contained.ts +184 -185
  286. package/src/vite-plugins/settings-worker-env.ts +2 -4
  287. package/src/vite-plugins/settings.ts +11 -20
  288. package/src/vite-plugins/undeclared-library.ts +14 -20
  289. package/src/vite-plugins/worker.ts +0 -1
  290. package/dist/i18n/binding-extractor.d.ts +0 -30
  291. package/dist/i18n/binding-extractor.d.ts.map +0 -1
  292. package/dist/i18n/binding-extractor.js +0 -1324
  293. package/dist/i18n/binding-extractor.js.map +0 -1
  294. package/dist/i18n/extractor-plugin.d.ts +0 -8
  295. package/dist/i18n/extractor-plugin.d.ts.map +0 -1
  296. package/dist/i18n/extractor-plugin.js +0 -247
  297. package/dist/i18n/extractor-plugin.js.map +0 -1
  298. package/dist/internal/data-dir.d.ts +0 -4
  299. package/dist/internal/data-dir.d.ts.map +0 -1
  300. package/dist/internal/data-dir.js +0 -52
  301. package/dist/internal/data-dir.js.map +0 -1
  302. package/dist/vite-plugins/animated.d.ts +0 -5
  303. package/dist/vite-plugins/animated.d.ts.map +0 -1
  304. package/dist/vite-plugins/animated.js +0 -325
  305. package/dist/vite-plugins/animated.js.map +0 -1
  306. package/src/i18n/binding-extractor.ts +0 -1969
  307. package/src/i18n/extractor-plugin.ts +0 -413
  308. package/src/internal/data-dir.ts +0 -70
  309. package/src/vite-plugins/animated.ts +0 -486
@@ -1 +0,0 @@
1
- {"version":3,"file":"data-dir.js","sourceRoot":"","sources":["../../src/internal/data-dir.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,MAAM,kBAAkB,GAAG,OAAO,CAAC;AACnC,MAAM,eAAe,GAAG,GAAG,kBAAkB,IAAI,CAAC;AAClD,MAAM,kBAAkB,GAAG,CAAC,SAAS,EAAE,QAAQ,EAAE,MAAM,CAAU,CAAC;AAClE,MAAM,mBAAmB,GAAG,mBAAmB,CAAC;AAEhD,MAAM,cAAc,GAAG,CAAC,KAAc,EAAoC,EAAE,CACxE,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAEzE,MAAM,eAAe,GAAG,CAAC,UAAmC,EAAiB,EAAE;IAC3E,KAAK,MAAM,SAAS,IAAI,kBAAkB,EAAE,CAAC;QACzC,MAAM,KAAK,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;QAEpC,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC5B,OAAO,KAAK,CAAC;QACjB,CAAC;IACL,CAAC;IAED,OAAO,IAAI,CAAC;AAChB,CAAC,CAAC;AAEF,MAAM,YAAY,GAAG,CAAC,KAAc,EAAiB,EAAE;IACnD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC5B,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,IAAI,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,eAAe,CAAC,KAAK,CAAC,CAAC;IAClC,CAAC;IAED,OAAO,IAAI,CAAC;AAChB,CAAC,CAAC;AAEF,MAAM,mBAAmB,GAAG,CAAC,MAAc,EAAiB,EAAE;IAC1D,MAAM,KAAK,GAAG,mBAAmB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAE/C,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;AAC9B,CAAC,CAAC;AAEF,MAAM,cAAc,GAAG,CAAC,IAAY,EAAiB,EAAE;IACnD,IAAI,QAAiB,CAAC;IAEtB,IAAI,CAAC;QACD,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,cAAc,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;IAC5E,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC5B,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC;IAEjC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3B,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC;IAEtD,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QAClB,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,OAAO,mBAAmB,CAAC,MAAM,CAAC,CAAC;AACvC,CAAC,CAAC;AAEF,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,CAAC","sourcesContent":["import { readFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\n\nconst DATA_IMPORT_PREFIX = \"#data\";\nconst DATA_IMPORT_KEY = `${DATA_IMPORT_PREFIX}/*`;\nconst CONDITION_PRIORITY = [\"default\", \"import\", \"node\"] as const;\nconst DATA_TARGET_PATTERN = /^\\.?\\/?(.+?)\\/\\*$/;\n\nconst isConditionMap = (entry: unknown): entry is Record<string, unknown> =>\n entry !== null && typeof entry === \"object\" && !Array.isArray(entry);\n\nconst conditionTarget = (conditions: Record<string, unknown>): string | null => {\n for (const condition of CONDITION_PRIORITY) {\n const value = conditions[condition];\n\n if (typeof value === \"string\") {\n return value;\n }\n }\n\n return null;\n};\n\nconst targetString = (entry: unknown): string | null => {\n if (typeof entry === \"string\") {\n return entry;\n }\n\n if (isConditionMap(entry)) {\n return conditionTarget(entry);\n }\n\n return null;\n};\n\nconst directoryFromTarget = (target: string): string | null => {\n const match = DATA_TARGET_PATTERN.exec(target);\n\n return match?.[1] ?? null;\n};\n\nconst resolveDataDir = (root: string): string | null => {\n let manifest: unknown;\n\n try {\n manifest = JSON.parse(readFileSync(join(root, \"package.json\"), \"utf8\"));\n } catch {\n return null;\n }\n\n if (!isConditionMap(manifest)) {\n return null;\n }\n\n const imports = manifest.imports;\n\n if (!isConditionMap(imports)) {\n return null;\n }\n\n const target = targetString(imports[DATA_IMPORT_KEY]);\n\n if (target === null) {\n return null;\n }\n\n return directoryFromTarget(target);\n};\n\nexport { DATA_IMPORT_PREFIX, resolveDataDir };\n"]}
@@ -1,5 +0,0 @@
1
- import type { ConfigLoader } from "@gtkx/config";
2
- import type { Plugin } from "vite";
3
- declare function gtkxAnimated(loadConfig?: ConfigLoader): Plugin;
4
- export { gtkxAnimated };
5
- //# sourceMappingURL=animated.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"animated.d.ts","sourceRoot":"","sources":["../../src/vite-plugins/animated.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,KAAK,EAAE,MAAM,EAAc,MAAM,MAAM,CAAC;AA8b/C,iBAAS,YAAY,CAAC,UAAU,GAAE,YAAmC,GAAG,MAAM,CAoC7E;AAED,OAAO,EAAE,YAAY,EAAE,CAAC"}
@@ -1,325 +0,0 @@
1
- import { readGeneratedElements } from "@gtkx/codegen";
2
- import { createConfigLoader } from "@gtkx/config/internal";
3
- import { createRequire } from "node:module";
4
- import { dirname, join } from "node:path";
5
- import { parseSync } from "vite";
6
- import { sourceLanguage } from "../internal/source-imports.js";
7
- import { stripQuery } from "./strip-query.js";
8
- const ANIMATED_PACKAGE = "@gtkx/animated";
9
- const INTERNAL_SPECIFIER = "@gtkx/animated/internal";
10
- const VIRTUAL_ID = "virtual:gtkx-animated";
11
- const RESOLVED_VIRTUAL_ID = `\0${VIRTUAL_ID}`;
12
- const NAMESPACE_HELPER = "__gtkxAnimated";
13
- const CALL_HELPER = "__gtkxWithAnimated";
14
- const BINDING_PARENT_KEYS = {
15
- VariableDeclarator: "id",
16
- ImportSpecifier: "local",
17
- ImportDefaultSpecifier: "local",
18
- ImportNamespaceSpecifier: "local",
19
- FunctionDeclaration: "id",
20
- ClassDeclaration: "id",
21
- CatchClause: "param",
22
- AssignmentPattern: "left",
23
- RestElement: "argument",
24
- Property: "value",
25
- };
26
- const BINDING_PARENT_ARRAY_KEYS = {
27
- ArrowFunctionExpression: "params",
28
- FunctionDeclaration: "params",
29
- FunctionExpression: "params",
30
- ArrayPattern: "elements",
31
- };
32
- const isAstNode = (value) => typeof value === "object" &&
33
- value !== null &&
34
- typeof value.type === "string" &&
35
- typeof value.start === "number" &&
36
- typeof value.end === "number";
37
- const walkChildren = (node, visit) => {
38
- for (const [key, child] of Object.entries(node)) {
39
- if (key !== "type") {
40
- walk(child, node, visit);
41
- }
42
- }
43
- };
44
- const walk = (value, parent, visit) => {
45
- if (Array.isArray(value)) {
46
- for (const item of value) {
47
- walk(item, parent, visit);
48
- }
49
- return;
50
- }
51
- if (!isAstNode(value)) {
52
- return;
53
- }
54
- visit(value, parent);
55
- walkChildren(value, visit);
56
- };
57
- const identifierName = (node) => {
58
- if (!isAstNode(node)) {
59
- return undefined;
60
- }
61
- if (node.type !== "Identifier" && node.type !== "JSXIdentifier") {
62
- return undefined;
63
- }
64
- return typeof node.name === "string" ? node.name : undefined;
65
- };
66
- const isValueImportSpecifier = (specifier) => isAstNode(specifier) && specifier.type === "ImportSpecifier" && specifier.importKind !== "type";
67
- const animatedSpecifierLocal = (node) => {
68
- const specifiers = node.specifiers ?? [];
69
- let local;
70
- for (const specifier of specifiers) {
71
- if (isValueImportSpecifier(specifier) && identifierName(specifier.imported) === "animated") {
72
- local ??= identifierName(specifier.local);
73
- }
74
- }
75
- return local;
76
- };
77
- const animatedLocalName = (program) => {
78
- let local;
79
- walk(program, null, (node) => {
80
- if (node.type !== "ImportDeclaration" || node.source?.value !== ANIMATED_PACKAGE) {
81
- return;
82
- }
83
- if (node.importKind === "type") {
84
- return;
85
- }
86
- local ??= animatedSpecifierLocal(node);
87
- });
88
- return local;
89
- };
90
- const isBindingSlot = (node, parent) => {
91
- const key = BINDING_PARENT_KEYS[parent.type];
92
- return key !== undefined && parent[key] === node;
93
- };
94
- const isBindingListEntry = (node, parent) => {
95
- const arrayKey = BINDING_PARENT_ARRAY_KEYS[parent.type];
96
- const entries = arrayKey === undefined ? undefined : parent[arrayKey];
97
- return Array.isArray(entries) && entries.includes(node);
98
- };
99
- const isBindingParent = (node, parent) => isBindingSlot(node, parent) || isBindingListEntry(node, parent);
100
- const isBindingNamed = (node, parent, name) => node.type === "Identifier" &&
101
- node.name === name &&
102
- isBindingParent(node, parent);
103
- const countDeclarations = (program, name) => {
104
- const spans = new Set();
105
- walk(program, null, (node, parent) => {
106
- if (parent !== null && isBindingNamed(node, parent, name)) {
107
- spans.add(node.start);
108
- }
109
- });
110
- return spans.size;
111
- };
112
- const isRewritableJsxMember = (node, local) => node.type === "JSXMemberExpression" && identifierName(node.object) === local;
113
- const isRewritableObjectMember = (node, local) => node.type === "MemberExpression" &&
114
- node.computed !== true &&
115
- node.optional !== true &&
116
- identifierName(node.object) === local;
117
- const isForbiddenTarget = (node, parent) => parent !== null &&
118
- ((parent.type === "AssignmentExpression" && parent.left === node) ||
119
- (parent.type === "UpdateExpression" && parent.argument === node) ||
120
- (parent.type === "UnaryExpression" && parent.operator === "delete" && parent.argument === node));
121
- const isRewritableMember = (node, parent, local) => {
122
- if (isRewritableJsxMember(node, local)) {
123
- return true;
124
- }
125
- return isRewritableObjectMember(node, local) && !isForbiddenTarget(node, parent);
126
- };
127
- const collectMemberEdit = (rewrite, claimed, node, elements) => {
128
- const property = identifierName(node.property);
129
- if (property !== undefined && elements.get(property)?.isMountable === true) {
130
- const object = node.object;
131
- rewrite.edits.push({ start: object.start, end: object.end, replacement: NAMESPACE_HELPER });
132
- rewrite.hasMemberEdits = true;
133
- claimed.add(object.start);
134
- }
135
- };
136
- const collectCallEdit = (rewrite, claimed, node) => {
137
- const callee = node.callee;
138
- rewrite.edits.push({ start: callee.start, end: callee.end, replacement: CALL_HELPER });
139
- rewrite.hasCallEdits = true;
140
- claimed.add(callee.start);
141
- };
142
- const isPropertyReference = (node, parent) => parent?.type === "ImportSpecifier" ||
143
- (parent?.type === "MemberExpression" && parent.property === node) ||
144
- (parent?.type === "JSXMemberExpression" && parent.property === node);
145
- const hasDynamicUse = (program, local, claimed) => {
146
- let isFound = false;
147
- walk(program, null, (node, parent) => {
148
- if (identifierName(node) === local && !claimed.has(node.start) && !isPropertyReference(node, parent)) {
149
- isFound = true;
150
- }
151
- });
152
- return isFound;
153
- };
154
- const collectRewrite = (program, local, elements) => {
155
- const rewrite = { edits: [], hasMemberEdits: false, hasCallEdits: false, hasDynamicUses: false };
156
- const claimed = new Set();
157
- walk(program, null, (node, parent) => {
158
- if (isRewritableMember(node, parent, local)) {
159
- collectMemberEdit(rewrite, claimed, node, elements);
160
- return;
161
- }
162
- if (node.type === "CallExpression" && identifierName(node.callee) === local) {
163
- collectCallEdit(rewrite, claimed, node);
164
- }
165
- });
166
- rewrite.hasDynamicUses = hasDynamicUse(program, local, claimed);
167
- return rewrite;
168
- };
169
- const lastImportEnd = (program) => {
170
- const statements = program.body ?? [];
171
- let end = 0;
172
- for (const statement of statements) {
173
- if (isAstNode(statement) && statement.type === "ImportDeclaration") {
174
- end = Math.max(end, statement.end);
175
- }
176
- }
177
- return end;
178
- };
179
- const helperImports = (rewrite) => {
180
- const lines = [];
181
- if (rewrite.hasMemberEdits) {
182
- lines.push(`import * as ${NAMESPACE_HELPER} from ${JSON.stringify(VIRTUAL_ID)};`);
183
- }
184
- if (rewrite.hasCallEdits) {
185
- lines.push(`import { withAnimated as ${CALL_HELPER} } from ${JSON.stringify(INTERNAL_SPECIFIER)};`);
186
- }
187
- return lines.join("\n");
188
- };
189
- const applyEdits = (code, edits) => {
190
- const ordered = edits.toSorted((a, b) => b.start - a.start);
191
- let result = code;
192
- for (const edit of ordered) {
193
- result = `${result.slice(0, edit.start)}${edit.replacement}${result.slice(edit.end)}`;
194
- }
195
- return result;
196
- };
197
- const parseProgram = (path, code) => {
198
- const lang = sourceLanguage(path);
199
- if (lang === undefined) {
200
- return undefined;
201
- }
202
- const parsed = parseSync(path, code, { lang });
203
- return parsed.errors.length > 0 ? undefined : parsed.program;
204
- };
205
- const unchangedRewrite = (code, rewrite) => rewrite.hasDynamicUses ? { code, hasDynamicUses: true, hasMemberEdits: false } : undefined;
206
- const hasHelperCollision = (code) => code.includes(NAMESPACE_HELPER) || code.includes(CALL_HELPER);
207
- const rewriteModule = (code, id, elements) => {
208
- if (hasHelperCollision(code)) {
209
- return undefined;
210
- }
211
- const program = parseProgram(stripQuery(id), code);
212
- if (program === undefined) {
213
- return undefined;
214
- }
215
- const local = animatedLocalName(program);
216
- if (local === undefined || countDeclarations(program, local) > 1) {
217
- return undefined;
218
- }
219
- const rewrite = collectRewrite(program, local, elements);
220
- if (rewrite.edits.length === 0) {
221
- return unchangedRewrite(code, rewrite);
222
- }
223
- const insertAt = lastImportEnd(program);
224
- const helperEdit = { start: insertAt, end: insertAt, replacement: `\n${helperImports(rewrite)}` };
225
- const withHelpers = applyEdits(code, [...rewrite.edits, helperEdit]);
226
- return { code: withHelpers, hasDynamicUses: rewrite.hasDynamicUses, hasMemberEdits: rewrite.hasMemberEdits };
227
- };
228
- const renderVirtualModule = (elements) => {
229
- const mountable = elements.values().filter((element) => element.isMountable).toArray();
230
- const imports = mountable.map((element) => `${element.glibName} as $${element.glibName}`);
231
- const consts = mountable.map((element) => `export const ${element.glibName} = /* @__PURE__ */ withAnimated($${element.glibName});`);
232
- return (`import { ${imports.join(", ")} } from "@gtkx/jsx";\n` +
233
- `import { withAnimated } from ${JSON.stringify(INTERNAL_SPECIFIER)};\n` +
234
- `${consts.join("\n")}\n`);
235
- };
236
- const loadElements = (state) => {
237
- if (state.elements !== null) {
238
- return state.elements;
239
- }
240
- try {
241
- const requireFromRoot = createRequire(join(state.root, "package.json"));
242
- const jsxStoreDir = dirname(requireFromRoot.resolve("@gtkx/jsx/package.json"));
243
- state.elements = new Map(readGeneratedElements(jsxStoreDir).map((element) => [element.glibName, element]));
244
- }
245
- catch {
246
- return null;
247
- }
248
- return state.elements;
249
- };
250
- const resolveVirtualId = (state, source) => {
251
- if (source === VIRTUAL_ID && state.isEnabled) {
252
- return RESOLVED_VIRTUAL_ID;
253
- }
254
- return undefined;
255
- };
256
- const loadVirtualModule = (state, id) => {
257
- if (id !== RESOLVED_VIRTUAL_ID || !state.isEnabled) {
258
- return undefined;
259
- }
260
- const elements = loadElements(state);
261
- return elements === null ? undefined : renderVirtualModule(elements);
262
- };
263
- const dynamicUseWarning = (id, hasDynamicUses) => hasDynamicUses
264
- ? [
265
- `${stripQuery(id)} uses the animated binding dynamically, which keeps the whole generated ` +
266
- "widget namespace in the bundle; use animated(Component) calls to let unused widgets be dropped",
267
- ]
268
- : [];
269
- const memberUseWarning = (id, hasMemberEdits) => hasMemberEdits
270
- ? [
271
- `${stripQuery(id)} reads widget components off the animated binding, which GTKX 2.0 removes; ` +
272
- "import the component and call animated(Component) instead",
273
- ]
274
- : [];
275
- const warningsFor = (state, id, rewritten) => state.isBuild
276
- ? [
277
- ...dynamicUseWarning(id, rewritten.hasDynamicUses),
278
- ...memberUseWarning(id, rewritten.hasMemberEdits),
279
- ]
280
- : [];
281
- const transformCode = (state, code, id) => {
282
- if (!state.isEnabled || id.startsWith("\0") || !code.includes(ANIMATED_PACKAGE)) {
283
- return undefined;
284
- }
285
- const elements = loadElements(state);
286
- if (elements === null) {
287
- return undefined;
288
- }
289
- const rewritten = rewriteModule(code, id, elements);
290
- if (rewritten === undefined) {
291
- return undefined;
292
- }
293
- return { code: rewritten.code, warnings: warningsFor(state, id, rewritten) };
294
- };
295
- function gtkxAnimated(loadConfig = createConfigLoader()) {
296
- const state = { isEnabled: false, isBuild: false, root: process.cwd(), elements: null };
297
- return {
298
- name: "gtkx:animated",
299
- enforce: "pre",
300
- async config(config) {
301
- const loaded = await loadConfig.load(config.root ?? process.cwd());
302
- state.isEnabled = loaded.config.future?.v2TreeShaking === true;
303
- },
304
- configResolved(config) {
305
- state.root = config.root;
306
- state.isBuild = config.command === "build";
307
- },
308
- resolveId(source) {
309
- return resolveVirtualId(state, source);
310
- },
311
- load(id) {
312
- return loadVirtualModule(state, id);
313
- },
314
- transform(code, id) {
315
- const result = transformCode(state, code, id);
316
- const warnings = result?.warnings ?? [];
317
- for (const warning of warnings) {
318
- this.warn(warning);
319
- }
320
- return result?.code;
321
- },
322
- };
323
- }
324
- export { gtkxAnimated };
325
- //# sourceMappingURL=animated.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"animated.js","sourceRoot":"","sources":["../../src/vite-plugins/animated.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ConfigLoader } from \"@gtkx/config\";\nimport type { Plugin, UserConfig } from \"vite\";\nimport { type GeneratedElement, readGeneratedElements } from \"@gtkx/codegen\";\nimport { createConfigLoader } from \"@gtkx/config/internal\";\nimport { createRequire } from \"node:module\";\nimport { dirname, join } from \"node:path\";\nimport { parseSync } from \"vite\";\nimport { sourceLanguage } from \"../internal/source-imports.js\";\nimport { stripQuery } from \"./strip-query.js\";\n\ntype AstNode = {\n type: string;\n start: number;\n end: number;\n} & Record<string, unknown>;\n\ntype Edit = {\n start: number;\n end: number;\n replacement: string;\n};\n\ntype Rewrite = {\n edits: Edit[];\n hasMemberEdits: boolean;\n hasCallEdits: boolean;\n hasDynamicUses: boolean;\n};\n\ntype RewrittenModule = { code: string; hasDynamicUses: boolean; hasMemberEdits: boolean };\n\ntype PluginState = {\n isEnabled: boolean;\n isBuild: boolean;\n root: string;\n elements: Map<string, GeneratedElement> | null;\n};\n\nconst ANIMATED_PACKAGE = \"@gtkx/animated\";\nconst INTERNAL_SPECIFIER = \"@gtkx/animated/internal\";\nconst VIRTUAL_ID = \"virtual:gtkx-animated\";\nconst RESOLVED_VIRTUAL_ID = `\\0${VIRTUAL_ID}`;\nconst NAMESPACE_HELPER = \"__gtkxAnimated\";\nconst CALL_HELPER = \"__gtkxWithAnimated\";\n\nconst BINDING_PARENT_KEYS: Record<string, string> = {\n VariableDeclarator: \"id\",\n ImportSpecifier: \"local\",\n ImportDefaultSpecifier: \"local\",\n ImportNamespaceSpecifier: \"local\",\n FunctionDeclaration: \"id\",\n ClassDeclaration: \"id\",\n CatchClause: \"param\",\n AssignmentPattern: \"left\",\n RestElement: \"argument\",\n Property: \"value\",\n};\n\nconst BINDING_PARENT_ARRAY_KEYS: Record<string, string> = {\n ArrowFunctionExpression: \"params\",\n FunctionDeclaration: \"params\",\n FunctionExpression: \"params\",\n ArrayPattern: \"elements\",\n};\n\nconst isAstNode = (value: unknown): value is AstNode =>\n typeof value === \"object\" &&\n value !== null &&\n typeof (value as AstNode).type === \"string\" &&\n typeof (value as AstNode).start === \"number\" &&\n typeof (value as AstNode).end === \"number\";\n\nconst walkChildren = (node: AstNode, visit: (node: AstNode, parent: AstNode | null) => void): void => {\n for (const [key, child] of Object.entries(node)) {\n if (key !== \"type\") {\n walk(child, node, visit);\n }\n }\n};\n\nconst walk = (value: unknown, parent: AstNode | null, visit: (node: AstNode, parent: AstNode | null) => void): void => {\n if (Array.isArray(value)) {\n for (const item of value) {\n walk(item, parent, visit);\n }\n\n return;\n }\n\n if (!isAstNode(value)) {\n return;\n }\n\n visit(value, parent);\n walkChildren(value, visit);\n};\n\nconst identifierName = (node: unknown): string | undefined => {\n if (!isAstNode(node)) {\n return undefined;\n }\n\n if (node.type !== \"Identifier\" && node.type !== \"JSXIdentifier\") {\n return undefined;\n }\n\n return typeof node.name === \"string\" ? node.name : undefined;\n};\n\nconst isValueImportSpecifier = (specifier: unknown): specifier is AstNode =>\n isAstNode(specifier) && specifier.type === \"ImportSpecifier\" && specifier.importKind !== \"type\";\n\nconst animatedSpecifierLocal = (node: AstNode): string | undefined => {\n const specifiers = (node.specifiers as unknown[] | undefined) ?? [];\n let local: string | undefined;\n\n for (const specifier of specifiers) {\n if (isValueImportSpecifier(specifier) && identifierName(specifier.imported) === \"animated\") {\n local ??= identifierName(specifier.local);\n }\n }\n\n return local;\n};\n\nconst animatedLocalName = (program: AstNode): string | undefined => {\n let local: string | undefined;\n\n walk(program, null, (node) => {\n if (node.type !== \"ImportDeclaration\" || (node.source as AstNode | undefined)?.value !== ANIMATED_PACKAGE) {\n return;\n }\n\n if (node.importKind === \"type\") {\n return;\n }\n\n local ??= animatedSpecifierLocal(node);\n });\n\n return local;\n};\n\nconst isBindingSlot = (node: AstNode, parent: AstNode): boolean => {\n const key = BINDING_PARENT_KEYS[parent.type];\n\n return key !== undefined && parent[key] === node;\n};\n\nconst isBindingListEntry = (node: AstNode, parent: AstNode): boolean => {\n const arrayKey = BINDING_PARENT_ARRAY_KEYS[parent.type];\n const entries = arrayKey === undefined ? undefined : parent[arrayKey];\n\n return Array.isArray(entries) && entries.includes(node);\n};\n\nconst isBindingParent = (node: AstNode, parent: AstNode): boolean =>\n isBindingSlot(node, parent) || isBindingListEntry(node, parent);\n\nconst isBindingNamed = (node: AstNode, parent: AstNode, name: string): boolean =>\n node.type === \"Identifier\" &&\n node.name === name &&\n isBindingParent(node, parent);\n\nconst countDeclarations = (program: AstNode, name: string): number => {\n const spans: Set<number> = new Set();\n\n walk(program, null, (node, parent) => {\n if (parent !== null && isBindingNamed(node, parent, name)) {\n spans.add(node.start);\n }\n });\n\n return spans.size;\n};\n\nconst isRewritableJsxMember = (node: AstNode, local: string): boolean =>\n node.type === \"JSXMemberExpression\" && identifierName(node.object) === local;\n\nconst isRewritableObjectMember = (node: AstNode, local: string): boolean =>\n node.type === \"MemberExpression\" &&\n node.computed !== true &&\n node.optional !== true &&\n identifierName(node.object) === local;\n\nconst isForbiddenTarget = (node: AstNode, parent: AstNode | null): boolean =>\n parent !== null &&\n ((parent.type === \"AssignmentExpression\" && parent.left === node) ||\n (parent.type === \"UpdateExpression\" && parent.argument === node) ||\n (parent.type === \"UnaryExpression\" && parent.operator === \"delete\" && parent.argument === node));\n\nconst isRewritableMember = (node: AstNode, parent: AstNode | null, local: string): boolean => {\n if (isRewritableJsxMember(node, local)) {\n return true;\n }\n\n return isRewritableObjectMember(node, local) && !isForbiddenTarget(node, parent);\n};\n\nconst collectMemberEdit = (\n rewrite: Rewrite,\n claimed: Set<number>,\n node: AstNode,\n elements: Map<string, GeneratedElement>,\n): void => {\n const property = identifierName(node.property);\n\n if (property !== undefined && elements.get(property)?.isMountable === true) {\n const object = node.object as AstNode;\n rewrite.edits.push({ start: object.start, end: object.end, replacement: NAMESPACE_HELPER });\n rewrite.hasMemberEdits = true;\n claimed.add(object.start);\n }\n};\n\nconst collectCallEdit = (rewrite: Rewrite, claimed: Set<number>, node: AstNode): void => {\n const callee = node.callee as AstNode;\n rewrite.edits.push({ start: callee.start, end: callee.end, replacement: CALL_HELPER });\n rewrite.hasCallEdits = true;\n claimed.add(callee.start);\n};\n\nconst isPropertyReference = (node: AstNode, parent: AstNode | null): boolean =>\n parent?.type === \"ImportSpecifier\" ||\n (parent?.type === \"MemberExpression\" && parent.property === node) ||\n (parent?.type === \"JSXMemberExpression\" && parent.property === node);\n\nconst hasDynamicUse = (program: AstNode, local: string, claimed: Set<number>): boolean => {\n let isFound = false;\n\n walk(program, null, (node, parent) => {\n if (identifierName(node) === local && !claimed.has(node.start) && !isPropertyReference(node, parent)) {\n isFound = true;\n }\n });\n\n return isFound;\n};\n\nconst collectRewrite = (program: AstNode, local: string, elements: Map<string, GeneratedElement>): Rewrite => {\n const rewrite: Rewrite = { edits: [], hasMemberEdits: false, hasCallEdits: false, hasDynamicUses: false };\n const claimed: Set<number> = new Set();\n\n walk(program, null, (node, parent) => {\n if (isRewritableMember(node, parent, local)) {\n collectMemberEdit(rewrite, claimed, node, elements);\n\n return;\n }\n\n if (node.type === \"CallExpression\" && identifierName(node.callee) === local) {\n collectCallEdit(rewrite, claimed, node);\n }\n });\n\n rewrite.hasDynamicUses = hasDynamicUse(program, local, claimed);\n\n return rewrite;\n};\n\nconst lastImportEnd = (program: AstNode): number => {\n const statements = (program.body as unknown[] | undefined) ?? [];\n let end = 0;\n\n for (const statement of statements) {\n if (isAstNode(statement) && statement.type === \"ImportDeclaration\") {\n end = Math.max(end, statement.end);\n }\n }\n\n return end;\n};\n\nconst helperImports = (rewrite: Rewrite): string => {\n const lines: string[] = [];\n\n if (rewrite.hasMemberEdits) {\n lines.push(`import * as ${NAMESPACE_HELPER} from ${JSON.stringify(VIRTUAL_ID)};`);\n }\n\n if (rewrite.hasCallEdits) {\n lines.push(`import { withAnimated as ${CALL_HELPER} } from ${JSON.stringify(INTERNAL_SPECIFIER)};`);\n }\n\n return lines.join(\"\\n\");\n};\n\nconst applyEdits = (code: string, edits: Edit[]): string => {\n const ordered = edits.toSorted((a, b) => b.start - a.start);\n let result = code;\n\n for (const edit of ordered) {\n result = `${result.slice(0, edit.start)}${edit.replacement}${result.slice(edit.end)}`;\n }\n\n return result;\n};\n\nconst parseProgram = (path: string, code: string): AstNode | undefined => {\n const lang = sourceLanguage(path);\n\n if (lang === undefined) {\n return undefined;\n }\n\n const parsed = parseSync(path, code, { lang });\n\n return parsed.errors.length > 0 ? undefined : (parsed.program as unknown as AstNode);\n};\n\nconst unchangedRewrite = (code: string, rewrite: Rewrite): RewrittenModule | undefined =>\n rewrite.hasDynamicUses ? { code, hasDynamicUses: true, hasMemberEdits: false } : undefined;\n\nconst hasHelperCollision = (code: string): boolean =>\n code.includes(NAMESPACE_HELPER) || code.includes(CALL_HELPER);\n\nconst rewriteModule = (\n code: string,\n id: string,\n elements: Map<string, GeneratedElement>,\n): RewrittenModule | undefined => {\n if (hasHelperCollision(code)) {\n return undefined;\n }\n\n const program = parseProgram(stripQuery(id), code);\n\n if (program === undefined) {\n return undefined;\n }\n\n const local = animatedLocalName(program);\n\n if (local === undefined || countDeclarations(program, local) > 1) {\n return undefined;\n }\n\n const rewrite = collectRewrite(program, local, elements);\n\n if (rewrite.edits.length === 0) {\n return unchangedRewrite(code, rewrite);\n }\n\n const insertAt = lastImportEnd(program);\n const helperEdit: Edit = { start: insertAt, end: insertAt, replacement: `\\n${helperImports(rewrite)}` };\n const withHelpers = applyEdits(code, [...rewrite.edits, helperEdit]);\n\n return { code: withHelpers, hasDynamicUses: rewrite.hasDynamicUses, hasMemberEdits: rewrite.hasMemberEdits };\n};\n\nconst renderVirtualModule = (elements: Map<string, GeneratedElement>): string => {\n const mountable = elements.values().filter((element) => element.isMountable).toArray();\n const imports = mountable.map((element) => `${element.glibName} as $${element.glibName}`);\n\n const consts = mountable.map(\n (element) => `export const ${element.glibName} = /* @__PURE__ */ withAnimated($${element.glibName});`,\n );\n\n return (\n `import { ${imports.join(\", \")} } from \"@gtkx/jsx\";\\n` +\n `import { withAnimated } from ${JSON.stringify(INTERNAL_SPECIFIER)};\\n` +\n `${consts.join(\"\\n\")}\\n`\n );\n};\n\nconst loadElements = (state: PluginState): Map<string, GeneratedElement> | null => {\n if (state.elements !== null) {\n return state.elements;\n }\n\n try {\n const requireFromRoot = createRequire(join(state.root, \"package.json\"));\n const jsxStoreDir = dirname(requireFromRoot.resolve(\"@gtkx/jsx/package.json\"));\n state.elements = new Map(readGeneratedElements(jsxStoreDir).map((element) => [element.glibName, element]));\n } catch {\n return null;\n }\n\n return state.elements;\n};\n\nconst resolveVirtualId = (state: PluginState, source: string): string | undefined => {\n if (source === VIRTUAL_ID && state.isEnabled) {\n return RESOLVED_VIRTUAL_ID;\n }\n\n return undefined;\n};\n\nconst loadVirtualModule = (state: PluginState, id: string): string | undefined => {\n if (id !== RESOLVED_VIRTUAL_ID || !state.isEnabled) {\n return undefined;\n }\n\n const elements = loadElements(state);\n\n return elements === null ? undefined : renderVirtualModule(elements);\n};\n\nconst dynamicUseWarning = (id: string, hasDynamicUses: boolean): string[] =>\n hasDynamicUses\n ? [\n `${stripQuery(id)} uses the animated binding dynamically, which keeps the whole generated ` +\n \"widget namespace in the bundle; use animated(Component) calls to let unused widgets be dropped\",\n ]\n : [];\n\nconst memberUseWarning = (id: string, hasMemberEdits: boolean): string[] =>\n hasMemberEdits\n ? [\n `${stripQuery(id)} reads widget components off the animated binding, which GTKX 2.0 removes; ` +\n \"import the component and call animated(Component) instead\",\n ]\n : [];\n\nconst warningsFor = (state: PluginState, id: string, rewritten: RewrittenModule): string[] =>\n state.isBuild\n ? [\n ...dynamicUseWarning(id, rewritten.hasDynamicUses),\n ...memberUseWarning(id, rewritten.hasMemberEdits),\n ]\n : [];\n\nconst transformCode = (\n state: PluginState,\n code: string,\n id: string,\n): { code: string; warnings: string[] } | undefined => {\n if (!state.isEnabled || id.startsWith(\"\\0\") || !code.includes(ANIMATED_PACKAGE)) {\n return undefined;\n }\n\n const elements = loadElements(state);\n\n if (elements === null) {\n return undefined;\n }\n\n const rewritten = rewriteModule(code, id, elements);\n\n if (rewritten === undefined) {\n return undefined;\n }\n\n return { code: rewritten.code, warnings: warningsFor(state, id, rewritten) };\n};\n\nfunction gtkxAnimated(loadConfig: ConfigLoader = createConfigLoader()): Plugin {\n const state: PluginState = { isEnabled: false, isBuild: false, root: process.cwd(), elements: null };\n\n return {\n name: \"gtkx:animated\",\n enforce: \"pre\",\n\n async config(config: UserConfig) {\n const loaded = await loadConfig.load(config.root ?? process.cwd());\n state.isEnabled = loaded.config.future?.v2TreeShaking === true;\n },\n\n configResolved(config) {\n state.root = config.root;\n state.isBuild = config.command === \"build\";\n },\n\n resolveId(source) {\n return resolveVirtualId(state, source);\n },\n\n load(id) {\n return loadVirtualModule(state, id);\n },\n\n transform(code, id) {\n const result = transformCode(state, code, id);\n const warnings = result?.warnings ?? [];\n\n for (const warning of warnings) {\n this.warn(warning);\n }\n\n return result?.code;\n },\n };\n}\n\nexport { gtkxAnimated };\n"]}