@gtkx/cli 1.6.0 → 2.0.0-beta.10

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 (578) hide show
  1. package/README.md +47 -44
  2. package/bin/gtkx-dev-runner.js +5 -1
  3. package/bin/gtkx.js +5 -1
  4. package/dist/builder.d.ts +1 -0
  5. package/dist/builder.d.ts.map +1 -1
  6. package/dist/builder.js +44 -12
  7. package/dist/builder.js.map +1 -1
  8. package/dist/cli.d.ts +1 -1
  9. package/dist/cli.d.ts.map +1 -1
  10. package/dist/cli.js +14 -2
  11. package/dist/cli.js.map +1 -1
  12. package/dist/codegen/config-dependencies.d.ts +3 -0
  13. package/dist/codegen/config-dependencies.d.ts.map +1 -0
  14. package/dist/codegen/config-dependencies.js +355 -0
  15. package/dist/codegen/config-dependencies.js.map +1 -0
  16. package/dist/codegen/freshness.d.ts.map +1 -1
  17. package/dist/codegen/freshness.js +49 -16
  18. package/dist/codegen/freshness.js.map +1 -1
  19. package/dist/codegen/reference.d.ts.map +1 -1
  20. package/dist/codegen/reference.js +2 -7
  21. package/dist/codegen/reference.js.map +1 -1
  22. package/dist/codegen/report.d.ts.map +1 -1
  23. package/dist/codegen/report.js +5 -16
  24. package/dist/codegen/report.js.map +1 -1
  25. package/dist/codegen/run-codegen.d.ts +9 -8
  26. package/dist/codegen/run-codegen.d.ts.map +1 -1
  27. package/dist/codegen/run-codegen.js +60 -113
  28. package/dist/codegen/run-codegen.js.map +1 -1
  29. package/dist/codegen/store-resolver.d.ts +3 -2
  30. package/dist/codegen/store-resolver.d.ts.map +1 -1
  31. package/dist/codegen/store-resolver.js +14 -20
  32. package/dist/codegen/store-resolver.js.map +1 -1
  33. package/dist/commands/build.d.ts +5 -0
  34. package/dist/commands/build.d.ts.map +1 -1
  35. package/dist/commands/build.js +83 -10
  36. package/dist/commands/build.js.map +1 -1
  37. package/dist/commands/cleanup.d.ts +9 -0
  38. package/dist/commands/cleanup.d.ts.map +1 -0
  39. package/dist/commands/cleanup.js +42 -0
  40. package/dist/commands/cleanup.js.map +1 -0
  41. package/dist/commands/codegen.d.ts +1 -0
  42. package/dist/commands/codegen.d.ts.map +1 -1
  43. package/dist/commands/codegen.js +6 -5
  44. package/dist/commands/codegen.js.map +1 -1
  45. package/dist/commands/deploy.d.ts +5 -0
  46. package/dist/commands/deploy.d.ts.map +1 -1
  47. package/dist/commands/deploy.js +10 -2
  48. package/dist/commands/deploy.js.map +1 -1
  49. package/dist/commands/dev.d.ts +9 -0
  50. package/dist/commands/dev.d.ts.map +1 -1
  51. package/dist/commands/dev.js +31 -4
  52. package/dist/commands/dev.js.map +1 -1
  53. package/dist/commands/docs.d.ts.map +1 -1
  54. package/dist/commands/docs.js +6 -15
  55. package/dist/commands/docs.js.map +1 -1
  56. package/dist/deploy/depends.d.ts.map +1 -1
  57. package/dist/deploy/depends.js +24 -2
  58. package/dist/deploy/depends.js.map +1 -1
  59. package/dist/deploy/download.d.ts +7 -3
  60. package/dist/deploy/download.d.ts.map +1 -1
  61. package/dist/deploy/download.js +19 -20
  62. package/dist/deploy/download.js.map +1 -1
  63. package/dist/deploy/freedesktop/copyright.d.ts.map +1 -1
  64. package/dist/deploy/freedesktop/copyright.js +2 -13
  65. package/dist/deploy/freedesktop/copyright.js.map +1 -1
  66. package/dist/deploy/freedesktop/metainfo.d.ts.map +1 -1
  67. package/dist/deploy/freedesktop/metainfo.js +41 -2
  68. package/dist/deploy/freedesktop/metainfo.js.map +1 -1
  69. package/dist/deploy/freedesktop/validate.d.ts.map +1 -1
  70. package/dist/deploy/freedesktop/validate.js +58 -14
  71. package/dist/deploy/freedesktop/validate.js.map +1 -1
  72. package/dist/deploy/freedesktop/xml.d.ts.map +1 -1
  73. package/dist/deploy/freedesktop/xml.js +21 -25
  74. package/dist/deploy/freedesktop/xml.js.map +1 -1
  75. package/dist/deploy/native-addon.d.ts +5 -0
  76. package/dist/deploy/native-addon.d.ts.map +1 -0
  77. package/dist/deploy/native-addon.js +134 -0
  78. package/dist/deploy/native-addon.js.map +1 -0
  79. package/dist/deploy/nfpm/config.d.ts +3 -2
  80. package/dist/deploy/nfpm/config.d.ts.map +1 -1
  81. package/dist/deploy/nfpm/config.js +7 -4
  82. package/dist/deploy/nfpm/config.js.map +1 -1
  83. package/dist/deploy/nfpm/contents.d.ts.map +1 -1
  84. package/dist/deploy/nfpm/contents.js +8 -0
  85. package/dist/deploy/nfpm/contents.js.map +1 -1
  86. package/dist/deploy/node-runtime/download.js +2 -2
  87. package/dist/deploy/node-runtime/download.js.map +1 -1
  88. package/dist/deploy/node-runtime/elf.d.ts +4 -1
  89. package/dist/deploy/node-runtime/elf.d.ts.map +1 -1
  90. package/dist/deploy/node-runtime/elf.js +34 -5
  91. package/dist/deploy/node-runtime/elf.js.map +1 -1
  92. package/dist/deploy/node-runtime/guard.d.ts.map +1 -1
  93. package/dist/deploy/node-runtime/guard.js +7 -14
  94. package/dist/deploy/node-runtime/guard.js.map +1 -1
  95. package/dist/deploy/node-runtime/index.d.ts +3 -1
  96. package/dist/deploy/node-runtime/index.d.ts.map +1 -1
  97. package/dist/deploy/node-runtime/index.js +103 -10
  98. package/dist/deploy/node-runtime/index.js.map +1 -1
  99. package/dist/deploy/node-runtime/license.d.ts.map +1 -1
  100. package/dist/deploy/node-runtime/license.js +2 -9
  101. package/dist/deploy/node-runtime/license.js.map +1 -1
  102. package/dist/deploy/node-runtime/sonames.d.ts +5 -0
  103. package/dist/deploy/node-runtime/sonames.d.ts.map +1 -0
  104. package/dist/deploy/node-runtime/sonames.js +13 -0
  105. package/dist/deploy/node-runtime/sonames.js.map +1 -0
  106. package/dist/deploy/notices/node-runtime.js +2 -2
  107. package/dist/deploy/notices/node-runtime.js.map +1 -1
  108. package/dist/deploy/notices/packages.d.ts.map +1 -1
  109. package/dist/deploy/notices/packages.js +3 -10
  110. package/dist/deploy/notices/packages.js.map +1 -1
  111. package/dist/deploy/payload/copy-tree.d.ts.map +1 -1
  112. package/dist/deploy/payload/copy-tree.js +3 -3
  113. package/dist/deploy/payload/copy-tree.js.map +1 -1
  114. package/dist/deploy/payload/launcher.d.ts.map +1 -1
  115. package/dist/deploy/payload/launcher.js +14 -1
  116. package/dist/deploy/payload/launcher.js.map +1 -1
  117. package/dist/deploy/payload/stage.d.ts +2 -1
  118. package/dist/deploy/payload/stage.d.ts.map +1 -1
  119. package/dist/deploy/payload/stage.js +47 -8
  120. package/dist/deploy/payload/stage.js.map +1 -1
  121. package/dist/deploy/run-deploy.d.ts +2 -0
  122. package/dist/deploy/run-deploy.d.ts.map +1 -1
  123. package/dist/deploy/run-deploy.js +197 -52
  124. package/dist/deploy/run-deploy.js.map +1 -1
  125. package/dist/deploy/settings/arch.d.ts +9 -3
  126. package/dist/deploy/settings/arch.d.ts.map +1 -1
  127. package/dist/deploy/settings/arch.js +27 -6
  128. package/dist/deploy/settings/arch.js.map +1 -1
  129. package/dist/deploy/settings/build-manifest.d.ts +6 -1
  130. package/dist/deploy/settings/build-manifest.d.ts.map +1 -1
  131. package/dist/deploy/settings/build-manifest.js +17 -17
  132. package/dist/deploy/settings/build-manifest.js.map +1 -1
  133. package/dist/deploy/settings/extra-files.d.ts +1 -1
  134. package/dist/deploy/settings/extra-files.d.ts.map +1 -1
  135. package/dist/deploy/settings/extra-files.js +25 -3
  136. package/dist/deploy/settings/extra-files.js.map +1 -1
  137. package/dist/deploy/settings/index.d.ts +3 -1
  138. package/dist/deploy/settings/index.d.ts.map +1 -1
  139. package/dist/deploy/settings/index.js +4 -2
  140. package/dist/deploy/settings/index.js.map +1 -1
  141. package/dist/deploy/settings/libraries.d.ts.map +1 -1
  142. package/dist/deploy/settings/libraries.js +3 -19
  143. package/dist/deploy/settings/libraries.js.map +1 -1
  144. package/dist/deploy/settings/paths.d.ts +4 -3
  145. package/dist/deploy/settings/paths.d.ts.map +1 -1
  146. package/dist/deploy/settings/paths.js +118 -19
  147. package/dist/deploy/settings/paths.js.map +1 -1
  148. package/dist/deploy/settings/screenshots.d.ts.map +1 -1
  149. package/dist/deploy/settings/screenshots.js +6 -31
  150. package/dist/deploy/settings/screenshots.js.map +1 -1
  151. package/dist/deploy/targets/appimage.d.ts.map +1 -1
  152. package/dist/deploy/targets/appimage.js +1 -0
  153. package/dist/deploy/targets/appimage.js.map +1 -1
  154. package/dist/deploy/targets/flatpak-pnpm.js +4 -4
  155. package/dist/deploy/targets/flatpak-pnpm.js.map +1 -1
  156. package/dist/deploy/targets/flatpak-source.d.ts.map +1 -1
  157. package/dist/deploy/targets/flatpak-source.js +17 -6
  158. package/dist/deploy/targets/flatpak-source.js.map +1 -1
  159. package/dist/deploy/targets/flatpak-sources.js +1 -1
  160. package/dist/deploy/targets/flatpak-sources.js.map +1 -1
  161. package/dist/deploy/targets/flatpak.d.ts.map +1 -1
  162. package/dist/deploy/targets/flatpak.js +1 -0
  163. package/dist/deploy/targets/flatpak.js.map +1 -1
  164. package/dist/deploy/targets/nfpm-target.d.ts.map +1 -1
  165. package/dist/deploy/targets/nfpm-target.js +13 -7
  166. package/dist/deploy/targets/nfpm-target.js.map +1 -1
  167. package/dist/deploy/types.d.ts +5 -2
  168. package/dist/deploy/types.d.ts.map +1 -1
  169. package/dist/deploy/types.js.map +1 -1
  170. package/dist/deploy/vendored/appimagetool.js +2 -2
  171. package/dist/deploy/vendored/appimagetool.js.map +1 -1
  172. package/dist/deploy/vendored/nfpm.js +1 -1
  173. package/dist/deploy/vendored/nfpm.js.map +1 -1
  174. package/dist/dev/catalog-writes.d.ts +8 -0
  175. package/dist/dev/catalog-writes.d.ts.map +1 -0
  176. package/dist/dev/catalog-writes.js +26 -0
  177. package/dist/dev/catalog-writes.js.map +1 -0
  178. package/dist/dev/entry-env.d.ts +2 -1
  179. package/dist/dev/entry-env.d.ts.map +1 -1
  180. package/dist/dev/entry-env.js +2 -1
  181. package/dist/dev/entry-env.js.map +1 -1
  182. package/dist/dev/font-dir.d.ts +3 -0
  183. package/dist/dev/font-dir.d.ts.map +1 -0
  184. package/dist/dev/font-dir.js +9 -0
  185. package/dist/dev/font-dir.js.map +1 -0
  186. package/dist/dev/headless.d.ts +3 -0
  187. package/dist/dev/headless.d.ts.map +1 -0
  188. package/dist/dev/headless.js +35 -0
  189. package/dist/dev/headless.js.map +1 -0
  190. package/dist/dev/runner-deps.d.ts +1 -1
  191. package/dist/dev/runner-deps.d.ts.map +1 -1
  192. package/dist/dev/runner-deps.js +12 -7
  193. package/dist/dev/runner-deps.js.map +1 -1
  194. package/dist/dev/runner-main.d.ts.map +1 -1
  195. package/dist/dev/runner-main.js +11 -5
  196. package/dist/dev/runner-main.js.map +1 -1
  197. package/dist/dev/runner.d.ts +2 -0
  198. package/dist/dev/runner.d.ts.map +1 -1
  199. package/dist/dev/runner.js +26 -7
  200. package/dist/dev/runner.js.map +1 -1
  201. package/dist/dev/schema-dir.d.ts +1 -1
  202. package/dist/dev/schema-dir.d.ts.map +1 -1
  203. package/dist/dev/schema-dir.js +2 -4
  204. package/dist/dev/schema-dir.js.map +1 -1
  205. package/dist/dev/supervisor.d.ts +3 -1
  206. package/dist/dev/supervisor.d.ts.map +1 -1
  207. package/dist/dev/supervisor.js +132 -29
  208. package/dist/dev/supervisor.js.map +1 -1
  209. package/dist/dev/vite-dev-server.d.ts +1 -1
  210. package/dist/dev/vite-dev-server.d.ts.map +1 -1
  211. package/dist/dev/vite-dev-server.js +14 -2
  212. package/dist/dev/vite-dev-server.js.map +1 -1
  213. package/dist/dev/watch-ignore.d.ts +3 -0
  214. package/dist/dev/watch-ignore.d.ts.map +1 -0
  215. package/dist/dev/watch-ignore.js +11 -0
  216. package/dist/dev/watch-ignore.js.map +1 -0
  217. package/dist/i18n/catalogs.d.ts +6 -2
  218. package/dist/i18n/catalogs.d.ts.map +1 -1
  219. package/dist/i18n/catalogs.js +12 -8
  220. package/dist/i18n/catalogs.js.map +1 -1
  221. package/dist/i18n/metadata-templates.d.ts.map +1 -1
  222. package/dist/i18n/metadata-templates.js +2 -1
  223. package/dist/i18n/metadata-templates.js.map +1 -1
  224. package/dist/i18n/source-messages.d.ts +5 -21
  225. package/dist/i18n/source-messages.d.ts.map +1 -1
  226. package/dist/i18n/source-messages.js +1037 -92
  227. package/dist/i18n/source-messages.js.map +1 -1
  228. package/dist/i18n/types.d.ts +6 -7
  229. package/dist/i18n/types.d.ts.map +1 -1
  230. package/dist/i18n/types.js +83 -96
  231. package/dist/i18n/types.js.map +1 -1
  232. package/dist/internal/agent-rules.d.ts.map +1 -1
  233. package/dist/internal/agent-rules.js +7 -2
  234. package/dist/internal/agent-rules.js.map +1 -1
  235. package/dist/internal/banner.d.ts +4 -2
  236. package/dist/internal/banner.d.ts.map +1 -1
  237. package/dist/internal/banner.js +19 -5
  238. package/dist/internal/banner.js.map +1 -1
  239. package/dist/internal/build-manifest.d.ts +5 -2
  240. package/dist/internal/build-manifest.d.ts.map +1 -1
  241. package/dist/internal/build-manifest.js +15 -2
  242. package/dist/internal/build-manifest.js.map +1 -1
  243. package/dist/internal/build-output.d.ts +8 -0
  244. package/dist/internal/build-output.d.ts.map +1 -0
  245. package/dist/internal/build-output.js +116 -0
  246. package/dist/internal/build-output.js.map +1 -0
  247. package/dist/internal/cache-root.d.ts +3 -0
  248. package/dist/internal/cache-root.d.ts.map +1 -0
  249. package/dist/internal/cache-root.js +9 -0
  250. package/dist/internal/cache-root.js.map +1 -0
  251. package/dist/internal/compile-cache-store.d.ts +4 -0
  252. package/dist/internal/compile-cache-store.d.ts.map +1 -0
  253. package/dist/internal/compile-cache-store.js +41 -0
  254. package/dist/internal/compile-cache-store.js.map +1 -0
  255. package/dist/internal/compile-cache.d.ts +4 -0
  256. package/dist/internal/compile-cache.d.ts.map +1 -0
  257. package/dist/internal/compile-cache.js +16 -0
  258. package/dist/internal/compile-cache.js.map +1 -0
  259. package/dist/internal/deploy-out-dir.d.ts +4 -0
  260. package/dist/internal/deploy-out-dir.d.ts.map +1 -0
  261. package/dist/internal/deploy-out-dir.js +5 -0
  262. package/dist/internal/deploy-out-dir.js.map +1 -0
  263. package/dist/internal/docs-elements.d.ts +1 -0
  264. package/dist/internal/docs-elements.d.ts.map +1 -1
  265. package/dist/internal/docs-elements.js +6 -5
  266. package/dist/internal/docs-elements.js.map +1 -1
  267. package/dist/internal/entry-arg.d.ts +4 -1
  268. package/dist/internal/entry-arg.d.ts.map +1 -1
  269. package/dist/internal/entry-arg.js +7 -1
  270. package/dist/internal/entry-arg.js.map +1 -1
  271. package/dist/internal/errors.d.ts +2 -1
  272. package/dist/internal/errors.d.ts.map +1 -1
  273. package/dist/internal/errors.js +1 -1
  274. package/dist/internal/errors.js.map +1 -1
  275. package/dist/internal/font-path.d.ts +4 -0
  276. package/dist/internal/font-path.d.ts.map +1 -0
  277. package/dist/internal/font-path.js +12 -0
  278. package/dist/internal/font-path.js.map +1 -0
  279. package/dist/internal/font-staging.d.ts +6 -0
  280. package/dist/internal/font-staging.d.ts.map +1 -0
  281. package/dist/internal/font-staging.js +94 -0
  282. package/dist/internal/font-staging.js.map +1 -0
  283. package/dist/internal/icon-path.d.ts.map +1 -1
  284. package/dist/internal/icon-path.js +5 -16
  285. package/dist/internal/icon-path.js.map +1 -1
  286. package/dist/internal/icon-staging.d.ts +3 -0
  287. package/dist/internal/icon-staging.d.ts.map +1 -0
  288. package/dist/internal/icon-staging.js +40 -0
  289. package/dist/internal/icon-staging.js.map +1 -0
  290. package/dist/internal/import-scan.d.ts +4 -0
  291. package/dist/internal/import-scan.d.ts.map +1 -0
  292. package/dist/internal/import-scan.js +138 -0
  293. package/dist/internal/import-scan.js.map +1 -0
  294. package/dist/internal/module-hash.d.ts +3 -0
  295. package/dist/internal/module-hash.d.ts.map +1 -0
  296. package/dist/internal/module-hash.js +19 -0
  297. package/dist/internal/module-hash.js.map +1 -0
  298. package/dist/internal/output-directory.d.ts +15 -0
  299. package/dist/internal/output-directory.d.ts.map +1 -0
  300. package/dist/internal/output-directory.js +490 -0
  301. package/dist/internal/output-directory.js.map +1 -0
  302. package/dist/internal/parent-process.d.ts +12 -0
  303. package/dist/internal/parent-process.d.ts.map +1 -0
  304. package/dist/internal/parent-process.js +74 -0
  305. package/dist/internal/parent-process.js.map +1 -0
  306. package/dist/internal/prepare-project.d.ts +3 -0
  307. package/dist/internal/prepare-project.d.ts.map +1 -1
  308. package/dist/internal/prepare-project.js +9 -3
  309. package/dist/internal/prepare-project.js.map +1 -1
  310. package/dist/internal/react-compiler-cache.d.ts +13 -0
  311. package/dist/internal/react-compiler-cache.d.ts.map +1 -0
  312. package/dist/internal/react-compiler-cache.js +182 -0
  313. package/dist/internal/react-compiler-cache.js.map +1 -0
  314. package/dist/internal/source-imports.d.ts +7 -2
  315. package/dist/internal/source-imports.d.ts.map +1 -1
  316. package/dist/internal/source-imports.js +38 -49
  317. package/dist/internal/source-imports.js.map +1 -1
  318. package/dist/internal/staging-file.d.ts +5 -0
  319. package/dist/internal/staging-file.d.ts.map +1 -0
  320. package/dist/internal/staging-file.js +35 -0
  321. package/dist/internal/staging-file.js.map +1 -0
  322. package/dist/internal/xdg-banner.d.ts +4 -0
  323. package/dist/internal/xdg-banner.d.ts.map +1 -0
  324. package/dist/internal/xdg-banner.js +11 -0
  325. package/dist/internal/xdg-banner.js.map +1 -0
  326. package/dist/internal/xdg-data-dirs.d.ts +2 -1
  327. package/dist/internal/xdg-data-dirs.d.ts.map +1 -1
  328. package/dist/internal/xdg-data-dirs.js +1 -1
  329. package/dist/internal/xdg-data-dirs.js.map +1 -1
  330. package/dist/mcp/client.js +2 -2
  331. package/dist/mcp/client.js.map +1 -1
  332. package/dist/settings/render.d.ts +0 -1
  333. package/dist/settings/render.d.ts.map +1 -1
  334. package/dist/settings/render.js +1 -11
  335. package/dist/settings/render.js.map +1 -1
  336. package/dist/settings/schema.d.ts +2 -2
  337. package/dist/settings/schema.d.ts.map +1 -1
  338. package/dist/settings/schema.js +24 -70
  339. package/dist/settings/schema.js.map +1 -1
  340. package/dist/vite-plugins/asset-extensions.d.ts.map +1 -1
  341. package/dist/vite-plugins/asset-extensions.js +2 -0
  342. package/dist/vite-plugins/asset-extensions.js.map +1 -1
  343. package/dist/vite-plugins/asset-imports.d.ts +1 -2
  344. package/dist/vite-plugins/asset-imports.d.ts.map +1 -1
  345. package/dist/vite-plugins/asset-imports.js +36 -35
  346. package/dist/vite-plugins/asset-imports.js.map +1 -1
  347. package/dist/vite-plugins/asset-specifier.d.ts +5 -3
  348. package/dist/vite-plugins/asset-specifier.d.ts.map +1 -1
  349. package/dist/vite-plugins/asset-specifier.js +10 -4
  350. package/dist/vite-plugins/asset-specifier.js.map +1 -1
  351. package/dist/vite-plugins/build-manifest.d.ts +5 -1
  352. package/dist/vite-plugins/build-manifest.d.ts.map +1 -1
  353. package/dist/vite-plugins/build-manifest.js +2 -1
  354. package/dist/vite-plugins/build-manifest.js.map +1 -1
  355. package/dist/vite-plugins/built-url.d.ts.map +1 -1
  356. package/dist/vite-plugins/built-url.js +5 -2
  357. package/dist/vite-plugins/built-url.js.map +1 -1
  358. package/dist/vite-plugins/css.d.ts.map +1 -1
  359. package/dist/vite-plugins/css.js +13 -5
  360. package/dist/vite-plugins/css.js.map +1 -1
  361. package/dist/vite-plugins/ensure-store.d.ts +1 -1
  362. package/dist/vite-plugins/ensure-store.d.ts.map +1 -1
  363. package/dist/vite-plugins/ensure-store.js +2 -2
  364. package/dist/vite-plugins/ensure-store.js.map +1 -1
  365. package/dist/vite-plugins/fast-refresh/refresh-filter.d.ts +6 -1
  366. package/dist/vite-plugins/fast-refresh/refresh-filter.d.ts.map +1 -1
  367. package/dist/vite-plugins/fast-refresh/refresh-filter.js +3 -1
  368. package/dist/vite-plugins/fast-refresh/refresh-filter.js.map +1 -1
  369. package/dist/vite-plugins/fast-refresh/swc-refresh.d.ts.map +1 -1
  370. package/dist/vite-plugins/fast-refresh/swc-refresh.js +23 -14
  371. package/dist/vite-plugins/fast-refresh/swc-refresh.js.map +1 -1
  372. package/dist/vite-plugins/font-name.d.ts +3 -0
  373. package/dist/vite-plugins/font-name.d.ts.map +1 -0
  374. package/dist/vite-plugins/font-name.js +406 -0
  375. package/dist/vite-plugins/font-name.js.map +1 -0
  376. package/dist/vite-plugins/font-worker-env.d.ts +4 -0
  377. package/dist/vite-plugins/font-worker-env.d.ts.map +1 -0
  378. package/dist/vite-plugins/font-worker-env.js +19 -0
  379. package/dist/vite-plugins/font-worker-env.js.map +1 -0
  380. package/dist/vite-plugins/font.d.ts +4 -0
  381. package/dist/vite-plugins/font.d.ts.map +1 -0
  382. package/dist/vite-plugins/font.js +111 -0
  383. package/dist/vite-plugins/font.js.map +1 -0
  384. package/dist/vite-plugins/i18n.d.ts +11 -2
  385. package/dist/vite-plugins/i18n.d.ts.map +1 -1
  386. package/dist/vite-plugins/i18n.js +75 -8
  387. package/dist/vite-plugins/i18n.js.map +1 -1
  388. package/dist/vite-plugins/icon-worker-env.d.ts +4 -0
  389. package/dist/vite-plugins/icon-worker-env.d.ts.map +1 -0
  390. package/dist/vite-plugins/icon-worker-env.js +23 -0
  391. package/dist/vite-plugins/icon-worker-env.js.map +1 -0
  392. package/dist/vite-plugins/icons.d.ts.map +1 -1
  393. package/dist/vite-plugins/icons.js +4 -9
  394. package/dist/vite-plugins/icons.js.map +1 -1
  395. package/dist/vite-plugins/index.d.ts +10 -1
  396. package/dist/vite-plugins/index.d.ts.map +1 -1
  397. package/dist/vite-plugins/index.js +19 -7
  398. package/dist/vite-plugins/index.js.map +1 -1
  399. package/dist/vite-plugins/native.d.ts.map +1 -1
  400. package/dist/vite-plugins/native.js +0 -4
  401. package/dist/vite-plugins/native.js.map +1 -1
  402. package/dist/vite-plugins/react-compiler.d.ts.map +1 -1
  403. package/dist/vite-plugins/react-compiler.js +57 -18
  404. package/dist/vite-plugins/react-compiler.js.map +1 -1
  405. package/dist/vite-plugins/resource-shared.d.ts +3 -1
  406. package/dist/vite-plugins/resource-shared.d.ts.map +1 -1
  407. package/dist/vite-plugins/resource-shared.js +3 -1
  408. package/dist/vite-plugins/resource-shared.js.map +1 -1
  409. package/dist/vite-plugins/resources.d.ts.map +1 -1
  410. package/dist/vite-plugins/resources.js +40 -102
  411. package/dist/vite-plugins/resources.js.map +1 -1
  412. package/dist/vite-plugins/self-contained.d.ts.map +1 -1
  413. package/dist/vite-plugins/self-contained.js +159 -158
  414. package/dist/vite-plugins/self-contained.js.map +1 -1
  415. package/dist/vite-plugins/settings-worker-env.d.ts +1 -1
  416. package/dist/vite-plugins/settings-worker-env.d.ts.map +1 -1
  417. package/dist/vite-plugins/settings-worker-env.js +5 -7
  418. package/dist/vite-plugins/settings-worker-env.js.map +1 -1
  419. package/dist/vite-plugins/settings.d.ts +1 -2
  420. package/dist/vite-plugins/settings.d.ts.map +1 -1
  421. package/dist/vite-plugins/settings.js +32 -27
  422. package/dist/vite-plugins/settings.js.map +1 -1
  423. package/dist/vite-plugins/store-links.d.ts.map +1 -1
  424. package/dist/vite-plugins/store-links.js +9 -5
  425. package/dist/vite-plugins/store-links.js.map +1 -1
  426. package/dist/vite-plugins/undeclared-library.d.ts.map +1 -1
  427. package/dist/vite-plugins/undeclared-library.js +25 -25
  428. package/dist/vite-plugins/undeclared-library.js.map +1 -1
  429. package/dist/vite-plugins/worker.d.ts.map +1 -1
  430. package/dist/vite-plugins/worker.js +21 -14
  431. package/dist/vite-plugins/worker.js.map +1 -1
  432. package/dist/vitest-plugin.d.ts +4 -3
  433. package/dist/vitest-plugin.d.ts.map +1 -1
  434. package/dist/vitest-plugin.js +12 -8
  435. package/dist/vitest-plugin.js.map +1 -1
  436. package/env.d.ts +9 -0
  437. package/package.json +28 -17
  438. package/src/builder.ts +45 -12
  439. package/src/cli.ts +15 -2
  440. package/src/codegen/config-dependencies.ts +470 -0
  441. package/src/codegen/freshness.ts +70 -17
  442. package/src/codegen/reference.ts +2 -8
  443. package/src/codegen/report.ts +5 -21
  444. package/src/codegen/run-codegen.ts +73 -160
  445. package/src/codegen/store-resolver.ts +16 -27
  446. package/src/commands/build.ts +13 -2
  447. package/src/commands/cleanup.ts +48 -0
  448. package/src/commands/codegen.ts +6 -5
  449. package/src/commands/deploy.ts +10 -2
  450. package/src/commands/dev.ts +45 -4
  451. package/src/commands/docs.ts +6 -17
  452. package/src/deploy/depends.ts +30 -3
  453. package/src/deploy/download.ts +33 -24
  454. package/src/deploy/freedesktop/copyright.ts +2 -14
  455. package/src/deploy/freedesktop/metainfo.ts +73 -21
  456. package/src/deploy/freedesktop/validate.ts +80 -15
  457. package/src/deploy/freedesktop/xml.ts +24 -32
  458. package/src/deploy/native-addon.ts +183 -0
  459. package/src/deploy/nfpm/config.ts +13 -4
  460. package/src/deploy/nfpm/contents.ts +8 -0
  461. package/src/deploy/node-runtime/download.ts +2 -2
  462. package/src/deploy/node-runtime/elf.ts +46 -5
  463. package/src/deploy/node-runtime/guard.ts +10 -14
  464. package/src/deploy/node-runtime/index.ts +148 -12
  465. package/src/deploy/node-runtime/license.ts +2 -8
  466. package/src/deploy/node-runtime/sonames.ts +17 -0
  467. package/src/deploy/notices/node-runtime.ts +2 -2
  468. package/src/deploy/notices/packages.ts +3 -11
  469. package/src/deploy/payload/copy-tree.ts +3 -4
  470. package/src/deploy/payload/launcher.ts +20 -1
  471. package/src/deploy/payload/stage.ts +78 -11
  472. package/src/deploy/run-deploy.ts +227 -72
  473. package/src/deploy/settings/arch.ts +40 -8
  474. package/src/deploy/settings/build-manifest.ts +30 -17
  475. package/src/deploy/settings/extra-files.ts +30 -4
  476. package/src/deploy/settings/index.ts +7 -2
  477. package/src/deploy/settings/libraries.ts +2 -22
  478. package/src/deploy/settings/paths.ts +78 -21
  479. package/src/deploy/settings/screenshots.ts +8 -46
  480. package/src/deploy/targets/appimage.ts +1 -0
  481. package/src/deploy/targets/flatpak-pnpm.ts +4 -4
  482. package/src/deploy/targets/flatpak-source.ts +19 -6
  483. package/src/deploy/targets/flatpak-sources.ts +1 -1
  484. package/src/deploy/targets/flatpak.ts +1 -0
  485. package/src/deploy/targets/nfpm-target.ts +14 -6
  486. package/src/deploy/types.ts +5 -1
  487. package/src/deploy/vendored/appimagetool.ts +2 -2
  488. package/src/deploy/vendored/nfpm.ts +1 -1
  489. package/src/dev/catalog-writes.ts +35 -0
  490. package/src/dev/entry-env.ts +2 -1
  491. package/src/dev/font-dir.ts +11 -0
  492. package/src/dev/headless.ts +40 -0
  493. package/src/dev/runner-deps.ts +20 -7
  494. package/src/dev/runner-main.ts +13 -5
  495. package/src/dev/runner.ts +37 -7
  496. package/src/dev/schema-dir.ts +2 -4
  497. package/src/dev/supervisor.ts +183 -32
  498. package/src/dev/vite-dev-server.ts +20 -2
  499. package/src/dev/watch-ignore.ts +16 -0
  500. package/src/i18n/catalogs.ts +23 -9
  501. package/src/i18n/metadata-templates.ts +2 -1
  502. package/src/i18n/source-messages.ts +1641 -262
  503. package/src/i18n/types.ts +97 -131
  504. package/src/internal/agent-rules.ts +7 -2
  505. package/src/internal/banner.ts +27 -6
  506. package/src/internal/build-manifest.ts +25 -1
  507. package/src/internal/build-output.ts +171 -0
  508. package/src/internal/cache-root.ts +12 -0
  509. package/src/internal/compile-cache-store.ts +50 -0
  510. package/src/internal/compile-cache.ts +20 -0
  511. package/src/internal/deploy-out-dir.ts +8 -0
  512. package/src/internal/docs-elements.ts +11 -5
  513. package/src/internal/entry-arg.ts +8 -1
  514. package/src/internal/errors.ts +1 -1
  515. package/src/internal/font-path.ts +15 -0
  516. package/src/internal/font-staging.ts +131 -0
  517. package/src/internal/icon-path.ts +6 -19
  518. package/src/internal/icon-staging.ts +58 -0
  519. package/src/internal/import-scan.ts +206 -0
  520. package/src/internal/module-hash.ts +22 -0
  521. package/src/internal/output-directory.ts +699 -0
  522. package/src/internal/parent-process.ts +110 -0
  523. package/src/internal/prepare-project.ts +11 -5
  524. package/src/internal/react-compiler-cache.ts +246 -0
  525. package/src/internal/source-imports.ts +64 -55
  526. package/src/internal/staging-file.ts +42 -0
  527. package/src/internal/xdg-banner.ts +13 -0
  528. package/src/internal/xdg-data-dirs.ts +1 -1
  529. package/src/mcp/client.ts +2 -2
  530. package/src/settings/render.ts +1 -13
  531. package/src/settings/schema.ts +23 -91
  532. package/src/vite-plugins/asset-extensions.ts +2 -0
  533. package/src/vite-plugins/asset-imports.ts +39 -45
  534. package/src/vite-plugins/asset-specifier.ts +17 -5
  535. package/src/vite-plugins/build-manifest.ts +7 -1
  536. package/src/vite-plugins/built-url.ts +6 -2
  537. package/src/vite-plugins/css.ts +16 -5
  538. package/src/vite-plugins/ensure-store.ts +2 -2
  539. package/src/vite-plugins/fast-refresh/refresh-filter.ts +10 -1
  540. package/src/vite-plugins/fast-refresh/swc-refresh.ts +33 -14
  541. package/src/vite-plugins/font-name.ts +582 -0
  542. package/src/vite-plugins/font-worker-env.ts +25 -0
  543. package/src/vite-plugins/font.ts +180 -0
  544. package/src/vite-plugins/i18n.ts +123 -11
  545. package/src/vite-plugins/icon-worker-env.ts +36 -0
  546. package/src/vite-plugins/icons.ts +4 -10
  547. package/src/vite-plugins/index.ts +36 -13
  548. package/src/vite-plugins/native.ts +0 -5
  549. package/src/vite-plugins/react-compiler.ts +83 -19
  550. package/src/vite-plugins/resource-shared.ts +4 -0
  551. package/src/vite-plugins/resources.ts +47 -144
  552. package/src/vite-plugins/self-contained.ts +184 -185
  553. package/src/vite-plugins/settings-worker-env.ts +5 -7
  554. package/src/vite-plugins/settings.ts +44 -33
  555. package/src/vite-plugins/store-links.ts +10 -5
  556. package/src/vite-plugins/undeclared-library.ts +30 -32
  557. package/src/vite-plugins/worker.ts +31 -16
  558. package/src/vitest-plugin.ts +12 -8
  559. package/dist/i18n/binding-extractor.d.ts +0 -30
  560. package/dist/i18n/binding-extractor.d.ts.map +0 -1
  561. package/dist/i18n/binding-extractor.js +0 -1324
  562. package/dist/i18n/binding-extractor.js.map +0 -1
  563. package/dist/i18n/extractor-plugin.d.ts +0 -8
  564. package/dist/i18n/extractor-plugin.d.ts.map +0 -1
  565. package/dist/i18n/extractor-plugin.js +0 -247
  566. package/dist/i18n/extractor-plugin.js.map +0 -1
  567. package/dist/internal/data-dir.d.ts +0 -4
  568. package/dist/internal/data-dir.d.ts.map +0 -1
  569. package/dist/internal/data-dir.js +0 -52
  570. package/dist/internal/data-dir.js.map +0 -1
  571. package/dist/vite-plugins/animated.d.ts +0 -5
  572. package/dist/vite-plugins/animated.d.ts.map +0 -1
  573. package/dist/vite-plugins/animated.js +0 -325
  574. package/dist/vite-plugins/animated.js.map +0 -1
  575. package/src/i18n/binding-extractor.ts +0 -1969
  576. package/src/i18n/extractor-plugin.ts +0 -413
  577. package/src/internal/data-dir.ts +0 -70
  578. package/src/vite-plugins/animated.ts +0 -486
@@ -1,5 +1,6 @@
1
1
  import type { Config } from "@gtkx/config";
2
2
  import type {
3
+ DeployArchName,
3
4
  DeployConfig,
4
5
  DeployDesktopAction,
5
6
  DeployDeveloper,
@@ -31,6 +32,8 @@ import { resolveVersions } from "./version.js";
31
32
  type SettingsRequest = {
32
33
  root: string;
33
34
  config: Config;
35
+ configFile: string;
36
+ arch: DeployArchName;
34
37
  outDirOverride?: string | undefined;
35
38
  now?: Date | undefined;
36
39
  };
@@ -174,18 +177,20 @@ const resolveDeploySettings = (request: SettingsRequest): DeploySettings => {
174
177
  const deploy = core.identity.deploy;
175
178
 
176
179
  return {
180
+ configFile: request.configFile,
177
181
  ...identitySlice(core),
178
182
  ...metadataSlice(request.root, core),
179
183
  ...desktopSlice(deploy),
180
- extraFiles: resolveExtraFiles(deploy),
184
+ extraFiles: resolveExtraFiles(request.root, deploy),
181
185
  versions: core.versions,
182
- arch: resolveArch(),
186
+ arch: resolveArch(request.arch),
183
187
  paths: resolvePaths({
184
188
  root: request.root,
185
189
  deploy,
186
190
  applicationIcon: request.config.applicationIcon,
187
191
  applicationId: request.config.applicationId,
188
192
  outDirOverride: request.outDirOverride,
193
+ arch: request.arch,
189
194
  }),
190
195
  ...resolveLibraries(request.root, request.config),
191
196
  deploy,
@@ -3,10 +3,9 @@ import {
3
3
  resolveLibraries as expandLibraries,
4
4
  type GeneratedLibraries,
5
5
  readGeneratedLibraries,
6
- resolveGirPath,
7
6
  resolveStore,
8
7
  } from "@gtkx/codegen";
9
- import { resolveFuture } from "@gtkx/config/internal";
8
+ import { resolveBoundLibraries } from "@gtkx/codegen/internal";
10
9
 
11
10
  type ResolvedLibraries = {
12
11
  libraries: string[];
@@ -21,28 +20,9 @@ const generatedLibraries = (root: string): GeneratedLibraries | null => {
21
20
  }
22
21
  };
23
22
 
24
- const discoveredLibraries = (config: Config, isAdwaitaDefault: boolean): string[] | null => {
25
- try {
26
- return expandLibraries(config.libraries, resolveGirPath(config.girPath), isAdwaitaDefault);
27
- } catch {
28
- return null;
29
- }
30
- };
31
-
32
- const configLibraries = (config: Config): string[] => {
33
- const { isAdwaitaDefault } = resolveFuture(config.future);
34
- const libraries = config.libraries;
35
-
36
- if (Array.isArray(libraries)) {
37
- return expandLibraries(libraries, [], isAdwaitaDefault);
38
- }
39
-
40
- return discoveredLibraries(config, isAdwaitaDefault) ?? expandLibraries(undefined, [], isAdwaitaDefault);
41
- };
42
-
43
23
  const resolveLibraries = (root: string, config: Config): ResolvedLibraries => {
44
24
  const generated = generatedLibraries(root);
45
- const libraries = generated?.libraries ?? configLibraries(config);
25
+ const libraries = resolveBoundLibraries(generated?.libraries ?? expandLibraries(config.libraries));
46
26
  const deploy = config.deploy ?? {};
47
27
 
48
28
  return {
@@ -1,8 +1,11 @@
1
1
  import type { Config } from "@gtkx/config";
2
- import { statSync } from "node:fs";
3
- import { isAbsolute, join, relative, resolve } from "node:path";
4
- import type { DeployConfig, DeployPaths } from "../types.js";
2
+ import { isPathInside } from "@gtkx/utils";
3
+ import { lstatSync, readdirSync, statSync, writeFileSync } from "node:fs";
4
+ import { join, relative, resolve, sep } from "node:path";
5
+ import type { DeployArchName, DeployConfig, DeployPaths } from "../types.js";
6
+ import { DEFAULT_DEPLOY_OUT_DIR } from "../../internal/deploy-out-dir.js";
5
7
  import { resolveApplicationIcon } from "../../internal/icon-path.js";
8
+ import { prepareOutputDirectory, readRegularFile } from "../../internal/output-directory.js";
6
9
 
7
10
  type PathsRequest = {
8
11
  root: string;
@@ -10,37 +13,90 @@ type PathsRequest = {
10
13
  applicationIcon: Config["applicationIcon"];
11
14
  applicationId: Config["applicationId"];
12
15
  outDirOverride: string | undefined;
16
+ arch: DeployArchName;
13
17
  };
14
18
 
15
- const DEFAULT_OUT_DIR = "build";
16
19
  const DIST_DIR = "dist";
20
+ const DEPLOY_MARKER_FILENAME = ".gtkx-deploy.json";
21
+ const DEPLOY_MARKER = `${JSON.stringify({ generator: "gtkx-deploy", formatVersion: 1 })}\n`;
17
22
  const LICENSE_CANDIDATES = ["LICENSE", "LICENSE.md", "LICENSE.txt", "COPYING", "COPYING.md"];
18
23
 
19
- const isInside = (parent: string, candidate: string): boolean => {
20
- const rel = relative(parent, candidate);
24
+ const hasSymlinkComponent = (root: string, target: string): boolean => {
25
+ let current = root;
21
26
 
22
- return rel.length > 0 && !rel.startsWith("..") && !isAbsolute(rel);
27
+ for (const segment of relative(root, target).split(sep)) {
28
+ current = join(current, segment);
29
+
30
+ if (lstatSync(current, { throwIfNoEntry: false })?.isSymbolicLink() === true) {
31
+ return true;
32
+ }
33
+ }
34
+
35
+ return false;
36
+ };
37
+
38
+ const isDeployMarker = (path: string): boolean => {
39
+ return readRegularFile(path) === DEPLOY_MARKER;
40
+ };
41
+
42
+ const isReusableDeployDirectory = (path: string): boolean => {
43
+ const entry = lstatSync(path, { throwIfNoEntry: false });
44
+
45
+ if (entry === undefined) {
46
+ return true;
47
+ }
48
+
49
+ return entry.isDirectory() &&
50
+ (readdirSync(path).length === 0 || isDeployMarker(join(path, DEPLOY_MARKER_FILENAME)));
51
+ };
52
+
53
+ const deployOutputError = (root: string, configured: string): Error =>
54
+ new Error(
55
+ `Cannot use "${configured}" as the deploy output directory: choose an empty directory or an ` +
56
+ `earlier GTKX deploy directory below ${root}`,
57
+ );
58
+
59
+ const assertSafeDeployOutDir = (root: string, outDir: string, configured: string): void => {
60
+ const dist = join(root, DIST_DIR);
61
+
62
+ if (
63
+ outDir === dist ||
64
+ !isPathInside(root, outDir) ||
65
+ isPathInside(dist, outDir) ||
66
+ hasSymlinkComponent(root, outDir)
67
+ ) {
68
+ throw deployOutputError(root, configured);
69
+ }
23
70
  };
24
71
 
25
72
  const resolveOutDir = ({ root, deploy, outDirOverride }: PathsRequest): string => {
26
- const configured = outDirOverride ?? deploy.outDir ?? DEFAULT_OUT_DIR;
73
+ const configured = outDirOverride ?? deploy.outDir ?? DEFAULT_DEPLOY_OUT_DIR;
27
74
  const outDir = resolve(root, configured);
75
+ assertSafeDeployOutDir(root, outDir, configured);
28
76
 
29
- if (!isInside(root, outDir)) {
30
- throw new Error(`Cannot use "${configured}" as the deploy output directory: it is outside ${root}`);
77
+ if (!isReusableDeployDirectory(outDir)) {
78
+ throw deployOutputError(root, configured);
31
79
  }
32
80
 
33
81
  return outDir;
34
82
  };
35
83
 
36
- const existingFile = (path: string): string | null => {
37
- try {
38
- return statSync(path, { throwIfNoEntry: false })?.isFile() === true ? path : null;
39
- } catch {
40
- return null;
84
+ const prepareDeployOutDir = (root: string, outDir: string): void => {
85
+ assertSafeDeployOutDir(root, outDir, outDir);
86
+ const prepared = prepareOutputDirectory(root, outDir, isReusableDeployDirectory);
87
+
88
+ if (prepared.status === "unsafe") {
89
+ throw deployOutputError(root, outDir);
41
90
  }
91
+
92
+ using transaction = prepared.transaction;
93
+ transaction.commit();
94
+ writeFileSync(join(outDir, DEPLOY_MARKER_FILENAME), DEPLOY_MARKER, { flag: "wx" });
42
95
  };
43
96
 
97
+ const existingFile = (path: string): string | null =>
98
+ statSync(path, { throwIfNoEntry: false })?.isFile() === true ? path : null;
99
+
44
100
  const resolveLicenseFile = (root: string, configured: string | undefined): string | null => {
45
101
  if (configured !== undefined) {
46
102
  const path = resolve(root, configured);
@@ -58,16 +114,17 @@ const resolveLicenseFile = (root: string, configured: string | undefined): strin
58
114
  const resolvePaths = (request: PathsRequest): DeployPaths => {
59
115
  const { root, deploy } = request;
60
116
  const outDir = resolveOutDir(request);
117
+ const archDir = join(outDir, request.arch);
61
118
 
62
119
  return {
63
120
  root,
64
121
  dist: join(root, DIST_DIR),
65
122
  outDir,
66
- metadata: join(outDir, "metadata"),
67
- runtime: join(outDir, "runtime"),
68
- stage: join(outDir, "stage"),
69
- overlay: join(outDir, "overlay"),
70
- targets: join(outDir, "targets"),
123
+ metadata: join(archDir, "metadata"),
124
+ runtime: join(archDir, "runtime"),
125
+ stage: join(archDir, "stage"),
126
+ overlay: join(archDir, "overlay"),
127
+ targets: join(archDir, "targets"),
71
128
  output: join(outDir, "out"),
72
129
  applicationIcon: resolveApplicationIcon(root, request.applicationId, request.applicationIcon),
73
130
  licenseFile: resolveLicenseFile(root, deploy.licenseFile),
@@ -75,4 +132,4 @@ const resolvePaths = (request: PathsRequest): DeployPaths => {
75
132
  };
76
133
  };
77
134
 
78
- export { isInside, resolvePaths };
135
+ export { prepareDeployOutDir, resolvePaths };
@@ -1,3 +1,4 @@
1
+ import hostedGitInfo from "hosted-git-info";
1
2
  import type { DeployConfig, DeployScreenshot } from "../types.js";
2
3
  import { gitRemoteUrl, runGit } from "../git.js";
3
4
 
@@ -6,23 +7,9 @@ type ScreenshotRequest = {
6
7
  deploy: DeployConfig;
7
8
  };
8
9
 
9
- type RemoteParts = {
10
- host: string;
11
- owner: string;
12
- repo: string;
13
- };
14
-
15
10
  const DEFAULT_BRANCH = "main";
16
- const GIT_SUFFIX = ".git";
17
- const PORTED_HOST = /^([^/]*):\d+(?=\/|$)/;
18
- const SCHEME_SEPARATOR = "://";
19
11
  const TRAILING_SLASH = "/";
20
12
 
21
- const RAW_BASE_BY_HOST: Record<string, (owner: string, repo: string, branch: string) => string> = {
22
- "github.com": (owner, repo, branch) => `https://raw.githubusercontent.com/${owner}/${repo}/${branch}`,
23
- "gitlab.com": (owner, repo, branch) => `https://gitlab.com/${owner}/${repo}/-/raw/${branch}`,
24
- };
25
-
26
13
  const readRepositoryPrefix = (root: string): string =>
27
14
  trimTrailingSlash(runGit(root, ["rev-parse", "--show-prefix"]) ?? "");
28
15
 
@@ -35,29 +22,6 @@ const trimLeadingSlash = (value: string): string => {
35
22
  return withoutDot.startsWith(TRAILING_SLASH) ? withoutDot.slice(1) : withoutDot;
36
23
  };
37
24
 
38
- const afterMarker = (value: string, marker: string): string => {
39
- const index = value.indexOf(marker);
40
-
41
- return index === -1 ? value : value.slice(index + marker.length);
42
- };
43
-
44
- const normalizeLocation = (trimmed: string): string => {
45
- const location = afterMarker(afterMarker(trimmed, SCHEME_SEPARATOR), "@");
46
-
47
- return trimmed.includes(SCHEME_SEPARATOR) ? location.replace(PORTED_HOST, "$1") : location.replace(":", "/");
48
- };
49
-
50
- const parseRemote = (remote: string): RemoteParts | null => {
51
- const trimmed = remote.endsWith(GIT_SUFFIX) ? remote.slice(0, -GIT_SUFFIX.length) : remote;
52
- const [host, owner, repo, ...extra] = normalizeLocation(trimmed).split("/");
53
-
54
- if (repo === undefined || extra.length > 0) {
55
- return null;
56
- }
57
-
58
- return { host: host ?? "", owner: owner ?? "", repo };
59
- };
60
-
61
25
  const readDefaultBranch = (root: string): string => {
62
26
  const head = runGit(root, ["symbolic-ref", "--short", "refs/remotes/origin/HEAD"]);
63
27
 
@@ -70,16 +34,16 @@ const readDefaultBranch = (root: string): string => {
70
34
  return separator === -1 ? head : head.slice(separator + 1);
71
35
  };
72
36
 
73
- const baseForRemote = (remote: string, branch: string): string | null => {
74
- const parts = parseRemote(remote);
37
+ const baseForRemote = (root: string, remote: string): string | null => {
38
+ const repository = hostedGitInfo.fromUrl(remote);
75
39
 
76
- if (parts === null) {
40
+ if (repository === undefined || (repository.type !== "github" && repository.type !== "gitlab")) {
77
41
  return null;
78
42
  }
79
43
 
80
- const build = RAW_BASE_BY_HOST[parts.host];
81
-
82
- return build === undefined ? null : build(parts.owner, parts.repo, branch);
44
+ return trimTrailingSlash(
45
+ repository.file(readRepositoryPrefix(root), { committish: readDefaultBranch(root) }),
46
+ );
83
47
  };
84
48
 
85
49
  const resolveScreenshotBaseUrl = ({ root, deploy }: ScreenshotRequest): string | null => {
@@ -88,10 +52,8 @@ const resolveScreenshotBaseUrl = ({ root, deploy }: ScreenshotRequest): string |
88
52
  }
89
53
 
90
54
  const remote = gitRemoteUrl(root);
91
- const base = remote === null ? null : baseForRemote(remote, readDefaultBranch(root));
92
- const prefix = base === null ? "" : readRepositoryPrefix(root);
93
55
 
94
- return base === null || prefix.length === 0 ? base : `${base}/${prefix}`;
56
+ return remote === null ? null : baseForRemote(root, remote);
95
57
  };
96
58
 
97
59
  const urlForScreenshot = (file: string, baseUrl: string | null): string => {
@@ -29,6 +29,7 @@ const EXTRACT_AND_RUN = "APPIMAGE_EXTRACT_AND_RUN";
29
29
  const appimageTarget: DeployTarget = {
30
30
  name: "appimage",
31
31
  prefix: PREFIX,
32
+ isHostOnly: true,
32
33
  tools: [FILE_TOOL],
33
34
  render: (payload) => renderManifests(payload),
34
35
  pack: (payload) => packAppImage(payload),
@@ -9,12 +9,12 @@ type PnpmPin = {
9
9
  sha512: string;
10
10
  };
11
11
 
12
- const PNPM_VERSION = "11.22.0";
12
+ const PNPM_VERSION = "11.26.0";
13
13
  const PNPM_MAJOR = 11;
14
- const PNPM_MINOR = 22;
14
+ const PNPM_MINOR = 26;
15
15
 
16
- const PNPM_SHA512 = "1ff870c4c6133dfd88fb2afc46dd13d47f09c9794b438c6fdb47ca98caf3bc16381ee0be9" +
17
- "3a091b8e3824cf01f889f46d7d9e20910fb0be1ab0fb5baa80dd621";
16
+ const PNPM_SHA512 = "fc0e2bf890b9f983611f1ab68c0637bce914390653699f83c1a78b005ed25f2c81e77920c8" +
17
+ "fd8eee2ecf0b58b28cdcb00a84d97f69bcf7c56b2f344710238664";
18
18
 
19
19
  const PNPM_DIR = "flatpak-pnpm";
20
20
  const PNPM_COMMAND = "pnpm";
@@ -1,7 +1,9 @@
1
+ import { isPathInside, toPosixPath } from "@gtkx/utils";
1
2
  import { existsSync, readFileSync, realpathSync } from "node:fs";
2
3
  import { posix, relative, resolve } from "node:path";
3
4
  import type { DeployPayload, DeploySettings } from "../types.js";
4
5
  import { LOCALE_DIRNAME } from "../../i18n/catalogs.js";
6
+ import { FONTS_DIR } from "../../internal/font-path.js";
5
7
  import { listFilesRecursive } from "../../internal/list-files.js";
6
8
  import { BUNDLE_FILENAME } from "../../vite-plugins/esm-extension.js";
7
9
  import { renderDbusService } from "../freedesktop/dbus-service.js";
@@ -11,7 +13,6 @@ import { executableModeFor } from "../payload/copy-tree.js";
11
13
  import { iconPathFor } from "../payload/icons.js";
12
14
  import { renderLauncher } from "../payload/launcher.js";
13
15
  import { licenseDestination, nodeLicenseDestination, NOTICES_FILENAME, noticesDestination } from "../payload/stage.js";
14
- import { isInside } from "../settings/paths.js";
15
16
  import { pnpmPathFor, type PnpmPin, pnpmSources } from "./flatpak-pnpm.js";
16
17
  import { DESTINATION, type FlatpakModule, postInstallCommands, validationCommands } from "./flatpak-prebuilt.js";
17
18
  import {
@@ -46,7 +47,7 @@ const inlineSource = (fileName: string, contents: string): FlatpakModule => ({
46
47
  });
47
48
 
48
49
  const projectRelative = (settings: DeploySettings, path: string): string =>
49
- relative(settings.paths.root, path).replaceAll("\\", "/");
50
+ toPosixPath(relative(settings.paths.root, path));
50
51
 
51
52
  const shellArgument = (value: string): string =>
52
53
  PLAIN_ARGUMENT.test(value) ? value : `'${value.split("'").join(QUOTE_ESCAPE)}'`;
@@ -68,6 +69,7 @@ const runtimeInstallCommands = (settings: DeploySettings, nodeExtensionPath: str
68
69
  "test ! -f dist/gschemas.compiled || " +
69
70
  installCommand("dist/gschemas.compiled", `${lib}/gschemas.compiled`, "m644"),
70
71
  `test ! -d dist/assets || cp -a dist/assets ${lib}/assets`,
72
+ `test ! -d dist/${FONTS_DIR} || cp -a dist/${FONTS_DIR} ${lib}/${FONTS_DIR}`,
71
73
  `test ! -d dist/${LOCALE_DIRNAME} || { mkdir -p ${locale} && cp -a dist/${LOCALE_DIRNAME}/. ${locale}/; }`,
72
74
  installCommand(LAUNCHER_FILENAME, `${DESTINATION}/bin/${settings.binaryName}`, "m755"),
73
75
  ];
@@ -155,7 +157,7 @@ const schemaInstallCommands = (settings: DeploySettings): string[] =>
155
157
  const iconInstallCommand = (settings: DeploySettings, source: string, rel: string): string =>
156
158
  installCommand(
157
159
  projectRelative(settings, source),
158
- `${DESTINATION}/share/icons/${shellArgument(rel.replaceAll("\\", "/"))}`,
160
+ `${DESTINATION}/share/icons/${shellArgument(toPosixPath(rel))}`,
159
161
  "m644",
160
162
  );
161
163
 
@@ -177,7 +179,7 @@ const assertInsideProject = (settings: DeploySettings, installed: InstalledFile)
177
179
  const { resolved } = installed;
178
180
  const target = existsSync(resolved) ? realpathSync(resolved) : resolved;
179
181
 
180
- if (isInside(settings.paths.root, target)) {
182
+ if (isPathInside(settings.paths.root, target)) {
181
183
  return;
182
184
  }
183
185
 
@@ -244,6 +246,17 @@ const appendPathFor = (settings: DeploySettings, pin: PnpmPin | null, nodeExtens
244
246
  ? `${nodeExtensionPath}/bin`
245
247
  : `${pnpmPathFor(moduleDirFor(settings))}:${nodeExtensionPath}/bin`;
246
248
 
249
+ const sourceBuildCommand = (settings: DeploySettings): string => {
250
+ const configFile = projectRelative(settings, settings.configFile);
251
+ assertInsideProject(settings, {
252
+ destination: "the Flatpak build configuration",
253
+ source: configFile,
254
+ resolved: settings.configFile,
255
+ });
256
+
257
+ return `npx gtkx build --config ${pathArgument(configFile)}`;
258
+ };
259
+
247
260
  const flatpakSourceModule = (payload: DeployPayload): FlatpakModule => {
248
261
  const settings = payload.settings;
249
262
  const manager = detectPackageManager(settings);
@@ -271,14 +284,14 @@ const flatpakSourceModule = (payload: DeployPayload): FlatpakModule => {
271
284
  ],
272
285
  "build-commands": [
273
286
  installCommandFor(settings, manager),
274
- "npx gtkx build",
287
+ sourceBuildCommand(settings),
275
288
  ...runtimeInstallCommands(settings, nodeExtensionPath),
289
+ ...extraFileInstallCommands(settings),
276
290
  ...metadataInstallCommands(settings),
277
291
  ...schemaInstallCommands(settings),
278
292
  ...iconInstallCommands(settings),
279
293
  ...licenseInstallCommands(settings),
280
294
  ...noticesInstallCommands(settings),
281
- ...extraFileInstallCommands(settings),
282
295
  ...(settings.deploy.flatpak?.buildCommands ?? []),
283
296
  ...validationCommands(settings),
284
297
  ],
@@ -26,7 +26,7 @@ type GitRevision = {
26
26
  const GENERATED_SOURCES = "generated-sources.json";
27
27
  const COMMIT_PEEL = "^{commit}";
28
28
  const FETCHABLE_URL = /^https?:\/\//;
29
- const DEFAULT_NODE_EXTENSION = "org.freedesktop.Sdk.Extension.node24";
29
+ const DEFAULT_NODE_EXTENSION = "org.freedesktop.Sdk.Extension.node26";
30
30
  const NODE_EXTENSION_PREFIX = "org.freedesktop.Sdk.Extension.";
31
31
  const SDK_EXTENSION_ROOT = "/usr/lib/sdk";
32
32
 
@@ -21,6 +21,7 @@ const BUILDER_REF = "org.flatpak.Builder";
21
21
  const flatpakTarget: DeployTarget = {
22
22
  name: "flatpak",
23
23
  prefix: PREFIX,
24
+ isHostOnly: true,
24
25
  tools: [FLATPAK, FLATPAK_BUILDER, DESKTOP_FILE_VALIDATE, APPSTREAMCLI],
25
26
  render: (payload) => renderManifests(payload),
26
27
  pack: (payload) => Promise.try(() => packFlatpak(payload)),
@@ -1,7 +1,8 @@
1
+ import { info } from "@gtkx/utils";
1
2
  import { join } from "node:path";
2
3
  import { stringify } from "yaml";
3
4
  import type { DeployArtifact, DeployManifest, DeployPayload, DeployTarget } from "../types.js";
4
- import { type NfpmPackager, renderNfpmConfig } from "../nfpm/config.js";
5
+ import { glibcMinimumForPackage, type NfpmPackager, renderNfpmConfig } from "../nfpm/config.js";
5
6
  import { packWithNfpm } from "../nfpm/pack.js";
6
7
  import { TAR } from "../tools.js";
7
8
 
@@ -11,12 +12,18 @@ const PREFIX = "/usr";
11
12
  const manifestPathFor = (payload: DeployPayload, packager: NfpmPackager): string =>
12
13
  join(payload.settings.paths.targets, packager, MANIFEST_FILENAME);
13
14
 
14
- const renderManifests = (payload: DeployPayload, packager: NfpmPackager): DeployManifest[] => [
15
- {
15
+ const renderManifests = (payload: DeployPayload, packager: NfpmPackager): DeployManifest[] => {
16
+ const glibcMinimum = glibcMinimumForPackage(payload, packager);
17
+
18
+ if (glibcMinimum !== null) {
19
+ info(`${packager} package requires glibc >= ${glibcMinimum}`);
20
+ }
21
+
22
+ return [{
16
23
  path: manifestPathFor(payload, packager),
17
- contents: stringify(renderNfpmConfig(payload, packager), { lineWidth: 0 }),
18
- },
19
- ];
24
+ contents: stringify(renderNfpmConfig(payload, packager, glibcMinimum), { lineWidth: 0 }),
25
+ }];
26
+ };
20
27
 
21
28
  const packPackage = async (payload: DeployPayload, packager: NfpmPackager): Promise<DeployArtifact[]> => [
22
29
  await packWithNfpm(payload, packager, manifestPathFor(payload, packager)),
@@ -25,6 +32,7 @@ const packPackage = async (payload: DeployPayload, packager: NfpmPackager): Prom
25
32
  const nfpmTarget = (packager: NfpmPackager): DeployTarget => ({
26
33
  name: packager,
27
34
  prefix: PREFIX,
35
+ isHostOnly: false,
28
36
  tools: [TAR],
29
37
  render: (payload) => renderManifests(payload, packager),
30
38
  pack: (payload) => packPackage(payload, packager),
@@ -2,6 +2,7 @@ import type { Config } from "@gtkx/config";
2
2
  import type { ResolvedApplicationIcon } from "../internal/icon-path.js";
3
3
 
4
4
  type DeployConfig = NonNullable<Config["deploy"]>;
5
+ type DeployArchName = NonNullable<DeployConfig["architectures"]>[number];
5
6
  type DeployTargetName = NonNullable<DeployConfig["targets"]>[number];
6
7
  type PackageFamily = "arch" | "debian" | "fedora" | "suse" | "unknown";
7
8
 
@@ -94,7 +95,7 @@ type DeployArch = {
94
95
  rpm: string;
95
96
  flatpak: string;
96
97
  appimage: string;
97
- node: string;
98
+ node: DeployArchName;
98
99
  };
99
100
 
100
101
  type DeployPaths = {
@@ -114,6 +115,7 @@ type DeployPaths = {
114
115
 
115
116
  type DeploySettings = {
116
117
  applicationId: string;
118
+ configFile: string;
117
119
  binaryName: string;
118
120
  name: string;
119
121
  genericName: string | null;
@@ -169,6 +171,7 @@ type DeployArtifact = {
169
171
  type DeployTarget = {
170
172
  name: DeployTargetName;
171
173
  prefix: string;
174
+ isHostOnly: boolean;
172
175
  tools: DeployTool[];
173
176
  render: (payload: DeployPayload) => DeployManifest[];
174
177
  pack: (payload: DeployPayload, manifests: DeployManifest[]) => Promise<DeployArtifact[]>;
@@ -176,6 +179,7 @@ type DeployTarget = {
176
179
 
177
180
  export type {
178
181
  DeployArch,
182
+ DeployArchName,
179
183
  DeployArtifact,
180
184
  DeployConfig,
181
185
  DeployDesktopAction,
@@ -39,7 +39,7 @@ const resolveAppimageTooling = async (arch: string): Promise<AppimageTooling> =>
39
39
  url: `${APPIMAGETOOL_URL}/appimagetool-${arch}.AppImage`,
40
40
  dest: join(dir, `appimagetool-${arch}`),
41
41
  label: `appimagetool ${APPIMAGETOOL_VERSION}`,
42
- sha256: digestFor(APPIMAGETOOL_DIGESTS, arch, "appimagetool"),
42
+ digest: digestFor(APPIMAGETOOL_DIGESTS, arch, "appimagetool"),
43
43
  mode: EXECUTABLE_MODE,
44
44
  });
45
45
 
@@ -47,7 +47,7 @@ const resolveAppimageTooling = async (arch: string): Promise<AppimageTooling> =>
47
47
  url: `${RUNTIME_URL}/runtime-${arch}`,
48
48
  dest: join(dir, `runtime-${arch}`),
49
49
  label: `the AppImage runtime ${RUNTIME_VERSION}`,
50
- sha256: digestFor(RUNTIME_DIGESTS, arch, "the AppImage runtime"),
50
+ digest: digestFor(RUNTIME_DIGESTS, arch, "the AppImage runtime"),
51
51
  mode: EXECUTABLE_MODE,
52
52
  });
53
53
 
@@ -56,7 +56,7 @@ const downloadNfpm = async (dir: string, binary: string): Promise<string> => {
56
56
  url: `${NFPM_BASE_URL}/${assetName}`,
57
57
  dest: join(dir, assetName),
58
58
  label: `nfpm ${NFPM_VERSION}`,
59
- sha256: digestFor(process.arch),
59
+ digest: digestFor(process.arch),
60
60
  });
61
61
 
62
62
  extractNfpm(archive, binary);
@@ -0,0 +1,35 @@
1
+ import { readFileSync } from "node:fs";
2
+ import { resolve } from "node:path";
3
+ import type { WrittenCatalog } from "../i18n/catalogs.js";
4
+
5
+ type CatalogWrites = {
6
+ record: (catalogs: WrittenCatalog[]) => void;
7
+ hasWritten: (path: string) => boolean;
8
+ };
9
+
10
+ const hasContent = (path: string, content: Buffer): boolean => {
11
+ try {
12
+ return readFileSync(path).equals(content);
13
+ } catch {
14
+ return false;
15
+ }
16
+ };
17
+
18
+ const createCatalogWrites = (): CatalogWrites => {
19
+ const contents: Map<string, Buffer> = new Map();
20
+
21
+ return {
22
+ record: (catalogs) => {
23
+ for (const catalog of catalogs) {
24
+ contents.set(resolve(catalog.path), catalog.content);
25
+ }
26
+ },
27
+ hasWritten: (path) => {
28
+ const content = contents.get(resolve(path));
29
+
30
+ return content !== undefined && hasContent(path, content);
31
+ },
32
+ };
33
+ };
34
+
35
+ export { type CatalogWrites, createCatalogWrites };
@@ -1,3 +1,4 @@
1
1
  const DEV_ENTRY_ENV = "GTKX_DEV_ENTRY";
2
+ const DEV_CONFIG_ENV = "GTKX_DEV_CONFIG";
2
3
 
3
- export { DEV_ENTRY_ENV };
4
+ export { DEV_CONFIG_ENV, DEV_ENTRY_ENV };
@@ -0,0 +1,11 @@
1
+ import { stageProjectFonts } from "../internal/font-staging.js";
2
+ import { prependXdgDataDir } from "../internal/xdg-data-dirs.js";
3
+
4
+ const prepareDevFontDir = (root: string): string => {
5
+ const shareDir = stageProjectFonts(root);
6
+ process.env.XDG_DATA_DIRS = prependXdgDataDir(shareDir, process.env.XDG_DATA_DIRS);
7
+
8
+ return shareDir;
9
+ };
10
+
11
+ export { prepareDevFontDir };
@@ -0,0 +1,40 @@
1
+ import { MCP_SOCKET_PATH_ENV, resolveMcpSocketPath } from "@gtkx/mcp/internal";
2
+ import { resolveHeadlessOptions, startHeadlessDisplay } from "@gtkx/vitest/headless";
3
+
4
+ const restoreEnvironment = (name: string, value: string | undefined): void => {
5
+ if (value === undefined) {
6
+ Reflect.deleteProperty(process.env, name);
7
+ } else {
8
+ process.env[name] = value;
9
+ }
10
+ };
11
+
12
+ const startHeadlessDevDisplay = async (size?: string): Promise<() => void> => {
13
+ const previousSocketPath = process.env[MCP_SOCKET_PATH_ENV];
14
+ process.env[MCP_SOCKET_PATH_ENV] = resolveMcpSocketPath();
15
+
16
+ try {
17
+ const stopDisplay = await startHeadlessDisplay(resolveHeadlessOptions({ ...(size !== undefined && { size }) }));
18
+ let isStopped = false;
19
+
20
+ const stop = (): void => {
21
+ if (isStopped) {
22
+ return;
23
+ }
24
+
25
+ isStopped = true;
26
+ process.removeListener("exit", stop);
27
+ stopDisplay();
28
+ restoreEnvironment(MCP_SOCKET_PATH_ENV, previousSocketPath);
29
+ };
30
+
31
+ process.once("exit", stop);
32
+
33
+ return stop;
34
+ } catch (error) {
35
+ restoreEnvironment(MCP_SOCKET_PATH_ENV, previousSocketPath);
36
+ throw error;
37
+ }
38
+ };
39
+
40
+ export { startHeadlessDevDisplay };