@gtkx/cli 1.0.0 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (449) hide show
  1. package/README.md +1 -1
  2. package/dist/builder.d.ts +1 -1
  3. package/dist/builder.d.ts.map +1 -1
  4. package/dist/builder.js +20 -3
  5. package/dist/builder.js.map +1 -1
  6. package/dist/cli.js +6 -2
  7. package/dist/cli.js.map +1 -1
  8. package/dist/codegen/freshness.js +2 -2
  9. package/dist/codegen/freshness.js.map +1 -1
  10. package/dist/codegen/run-codegen.d.ts +8 -5
  11. package/dist/codegen/run-codegen.d.ts.map +1 -1
  12. package/dist/codegen/run-codegen.js +24 -19
  13. package/dist/codegen/run-codegen.js.map +1 -1
  14. package/dist/codegen/store-resolver.d.ts +1 -1
  15. package/dist/codegen/store-resolver.d.ts.map +1 -1
  16. package/dist/codegen/store-resolver.js.map +1 -1
  17. package/dist/commands/build.d.ts.map +1 -1
  18. package/dist/commands/build.js +5 -6
  19. package/dist/commands/build.js.map +1 -1
  20. package/dist/commands/codegen.d.ts.map +1 -1
  21. package/dist/commands/codegen.js +11 -1
  22. package/dist/commands/codegen.js.map +1 -1
  23. package/dist/commands/deploy.d.ts +22 -0
  24. package/dist/commands/deploy.d.ts.map +1 -0
  25. package/dist/commands/deploy.js +44 -0
  26. package/dist/commands/deploy.js.map +1 -0
  27. package/dist/commands/dev.d.ts.map +1 -1
  28. package/dist/commands/dev.js +4 -4
  29. package/dist/commands/dev.js.map +1 -1
  30. package/dist/commands/docs.d.ts +2 -2
  31. package/dist/commands/docs.d.ts.map +1 -1
  32. package/dist/commands/docs.js +27 -4
  33. package/dist/commands/docs.js.map +1 -1
  34. package/dist/deploy/depends.d.ts +8 -0
  35. package/dist/deploy/depends.d.ts.map +1 -0
  36. package/dist/deploy/depends.js +27 -0
  37. package/dist/deploy/depends.js.map +1 -0
  38. package/dist/deploy/download.d.ts +20 -0
  39. package/dist/deploy/download.d.ts.map +1 -0
  40. package/dist/deploy/download.js +98 -0
  41. package/dist/deploy/download.js.map +1 -0
  42. package/dist/deploy/freedesktop/copyright.d.ts +4 -0
  43. package/dist/deploy/freedesktop/copyright.d.ts.map +1 -0
  44. package/dist/deploy/freedesktop/copyright.js +33 -0
  45. package/dist/deploy/freedesktop/copyright.js.map +1 -0
  46. package/dist/deploy/freedesktop/dbus-service.d.ts +4 -0
  47. package/dist/deploy/freedesktop/dbus-service.d.ts.map +1 -0
  48. package/dist/deploy/freedesktop/dbus-service.js +15 -0
  49. package/dist/deploy/freedesktop/dbus-service.js.map +1 -0
  50. package/dist/deploy/freedesktop/desktop-entry.d.ts +4 -0
  51. package/dist/deploy/freedesktop/desktop-entry.d.ts.map +1 -0
  52. package/dist/deploy/freedesktop/desktop-entry.js +73 -0
  53. package/dist/deploy/freedesktop/desktop-entry.js.map +1 -0
  54. package/dist/deploy/freedesktop/ini.d.ts +7 -0
  55. package/dist/deploy/freedesktop/ini.d.ts.map +1 -0
  56. package/dist/deploy/freedesktop/ini.js +22 -0
  57. package/dist/deploy/freedesktop/ini.js.map +1 -0
  58. package/dist/deploy/freedesktop/metainfo-sections.d.ts +13 -0
  59. package/dist/deploy/freedesktop/metainfo-sections.d.ts.map +1 -0
  60. package/dist/deploy/freedesktop/metainfo-sections.js +73 -0
  61. package/dist/deploy/freedesktop/metainfo-sections.js.map +1 -0
  62. package/dist/deploy/freedesktop/metainfo.d.ts +4 -0
  63. package/dist/deploy/freedesktop/metainfo.d.ts.map +1 -0
  64. package/dist/deploy/freedesktop/metainfo.js +29 -0
  65. package/dist/deploy/freedesktop/metainfo.js.map +1 -0
  66. package/dist/deploy/freedesktop/mime-package.d.ts +4 -0
  67. package/dist/deploy/freedesktop/mime-package.d.ts.map +1 -0
  68. package/dist/deploy/freedesktop/mime-package.js +16 -0
  69. package/dist/deploy/freedesktop/mime-package.js.map +1 -0
  70. package/dist/deploy/freedesktop/validate.d.ts +4 -0
  71. package/dist/deploy/freedesktop/validate.d.ts.map +1 -0
  72. package/dist/deploy/freedesktop/validate.js +81 -0
  73. package/dist/deploy/freedesktop/validate.js.map +1 -0
  74. package/dist/deploy/freedesktop/xml.d.ts +11 -0
  75. package/dist/deploy/freedesktop/xml.d.ts.map +1 -0
  76. package/dist/deploy/freedesktop/xml.js +33 -0
  77. package/dist/deploy/freedesktop/xml.js.map +1 -0
  78. package/dist/deploy/git.d.ts +4 -0
  79. package/dist/deploy/git.d.ts.map +1 -0
  80. package/dist/deploy/git.js +17 -0
  81. package/dist/deploy/git.js.map +1 -0
  82. package/dist/deploy/install-hints.d.ts +5 -0
  83. package/dist/deploy/install-hints.d.ts.map +1 -0
  84. package/dist/deploy/install-hints.js +85 -0
  85. package/dist/deploy/install-hints.js.map +1 -0
  86. package/dist/deploy/nfpm/config.d.ts +8 -0
  87. package/dist/deploy/nfpm/config.d.ts.map +1 -0
  88. package/dist/deploy/nfpm/config.js +119 -0
  89. package/dist/deploy/nfpm/config.js.map +1 -0
  90. package/dist/deploy/nfpm/contents.d.ts +12 -0
  91. package/dist/deploy/nfpm/contents.d.ts.map +1 -0
  92. package/dist/deploy/nfpm/contents.js +48 -0
  93. package/dist/deploy/nfpm/contents.js.map +1 -0
  94. package/dist/deploy/nfpm/description.d.ts +5 -0
  95. package/dist/deploy/nfpm/description.d.ts.map +1 -0
  96. package/dist/deploy/nfpm/description.js +5 -0
  97. package/dist/deploy/nfpm/description.js.map +1 -0
  98. package/dist/deploy/nfpm/optional.d.ts +5 -0
  99. package/dist/deploy/nfpm/optional.d.ts.map +1 -0
  100. package/dist/deploy/nfpm/optional.js +4 -0
  101. package/dist/deploy/nfpm/optional.js.map +1 -0
  102. package/dist/deploy/nfpm/pack.d.ts +5 -0
  103. package/dist/deploy/nfpm/pack.d.ts.map +1 -0
  104. package/dist/deploy/nfpm/pack.js +32 -0
  105. package/dist/deploy/nfpm/pack.js.map +1 -0
  106. package/dist/deploy/node-runtime/download.d.ts +3 -0
  107. package/dist/deploy/node-runtime/download.d.ts.map +1 -0
  108. package/dist/deploy/node-runtime/download.js +39 -0
  109. package/dist/deploy/node-runtime/download.js.map +1 -0
  110. package/dist/deploy/node-runtime/elf.d.ts +7 -0
  111. package/dist/deploy/node-runtime/elf.d.ts.map +1 -0
  112. package/dist/deploy/node-runtime/elf.js +100 -0
  113. package/dist/deploy/node-runtime/elf.js.map +1 -0
  114. package/dist/deploy/node-runtime/guard.d.ts +4 -0
  115. package/dist/deploy/node-runtime/guard.d.ts.map +1 -0
  116. package/dist/deploy/node-runtime/guard.js +22 -0
  117. package/dist/deploy/node-runtime/guard.js.map +1 -0
  118. package/dist/deploy/node-runtime/index.d.ts +4 -0
  119. package/dist/deploy/node-runtime/index.d.ts.map +1 -0
  120. package/dist/deploy/node-runtime/index.js +61 -0
  121. package/dist/deploy/node-runtime/index.js.map +1 -0
  122. package/dist/deploy/payload/copy-tree.d.ts +7 -0
  123. package/dist/deploy/payload/copy-tree.d.ts.map +1 -0
  124. package/dist/deploy/payload/copy-tree.js +36 -0
  125. package/dist/deploy/payload/copy-tree.js.map +1 -0
  126. package/dist/deploy/payload/icons.d.ts +6 -0
  127. package/dist/deploy/payload/icons.d.ts.map +1 -0
  128. package/dist/deploy/payload/icons.js +53 -0
  129. package/dist/deploy/payload/icons.js.map +1 -0
  130. package/dist/deploy/payload/launcher.d.ts +5 -0
  131. package/dist/deploy/payload/launcher.d.ts.map +1 -0
  132. package/dist/deploy/payload/launcher.js +22 -0
  133. package/dist/deploy/payload/launcher.js.map +1 -0
  134. package/dist/deploy/payload/schemas.d.ts +4 -0
  135. package/dist/deploy/payload/schemas.d.ts.map +1 -0
  136. package/dist/deploy/payload/schemas.js +17 -0
  137. package/dist/deploy/payload/schemas.js.map +1 -0
  138. package/dist/deploy/payload/stage.d.ts +15 -0
  139. package/dist/deploy/payload/stage.d.ts.map +1 -0
  140. package/dist/deploy/payload/stage.js +100 -0
  141. package/dist/deploy/payload/stage.js.map +1 -0
  142. package/dist/deploy/registry.d.ts +7 -0
  143. package/dist/deploy/registry.d.ts.map +1 -0
  144. package/dist/deploy/registry.js +30 -0
  145. package/dist/deploy/registry.js.map +1 -0
  146. package/dist/deploy/run-deploy.d.ts +11 -0
  147. package/dist/deploy/run-deploy.d.ts.map +1 -0
  148. package/dist/deploy/run-deploy.js +153 -0
  149. package/dist/deploy/run-deploy.js.map +1 -0
  150. package/dist/deploy/settings/arch.d.ts +4 -0
  151. package/dist/deploy/settings/arch.d.ts.map +1 -0
  152. package/dist/deploy/settings/arch.js +13 -0
  153. package/dist/deploy/settings/arch.js.map +1 -0
  154. package/dist/deploy/settings/categories.d.ts +4 -0
  155. package/dist/deploy/settings/categories.d.ts.map +1 -0
  156. package/dist/deploy/settings/categories.js +29 -0
  157. package/dist/deploy/settings/categories.js.map +1 -0
  158. package/dist/deploy/settings/exec.d.ts +6 -0
  159. package/dist/deploy/settings/exec.d.ts.map +1 -0
  160. package/dist/deploy/settings/exec.js +20 -0
  161. package/dist/deploy/settings/exec.js.map +1 -0
  162. package/dist/deploy/settings/identity.d.ts +18 -0
  163. package/dist/deploy/settings/identity.d.ts.map +1 -0
  164. package/dist/deploy/settings/identity.js +73 -0
  165. package/dist/deploy/settings/identity.js.map +1 -0
  166. package/dist/deploy/settings/index.d.ts +11 -0
  167. package/dist/deploy/settings/index.d.ts.map +1 -0
  168. package/dist/deploy/settings/index.js +103 -0
  169. package/dist/deploy/settings/index.js.map +1 -0
  170. package/dist/deploy/settings/package-manifest.d.ts +15 -0
  171. package/dist/deploy/settings/package-manifest.d.ts.map +1 -0
  172. package/dist/deploy/settings/package-manifest.js +41 -0
  173. package/dist/deploy/settings/package-manifest.js.map +1 -0
  174. package/dist/deploy/settings/paths.d.ts +9 -0
  175. package/dist/deploy/settings/paths.d.ts.map +1 -0
  176. package/dist/deploy/settings/paths.js +82 -0
  177. package/dist/deploy/settings/paths.js.map +1 -0
  178. package/dist/deploy/settings/screenshots.d.ts +8 -0
  179. package/dist/deploy/settings/screenshots.d.ts.map +1 -0
  180. package/dist/deploy/settings/screenshots.js +79 -0
  181. package/dist/deploy/settings/screenshots.js.map +1 -0
  182. package/dist/deploy/settings/starter.d.ts +4 -0
  183. package/dist/deploy/settings/starter.d.ts.map +1 -0
  184. package/dist/deploy/settings/starter.js +28 -0
  185. package/dist/deploy/settings/starter.js.map +1 -0
  186. package/dist/deploy/settings/version.d.ts +9 -0
  187. package/dist/deploy/settings/version.d.ts.map +1 -0
  188. package/dist/deploy/settings/version.js +37 -0
  189. package/dist/deploy/settings/version.js.map +1 -0
  190. package/dist/deploy/targets/appimage.d.ts +4 -0
  191. package/dist/deploy/targets/appimage.d.ts.map +1 -0
  192. package/dist/deploy/targets/appimage.js +105 -0
  193. package/dist/deploy/targets/appimage.js.map +1 -0
  194. package/dist/deploy/targets/deb.d.ts +4 -0
  195. package/dist/deploy/targets/deb.d.ts.map +1 -0
  196. package/dist/deploy/targets/deb.js +4 -0
  197. package/dist/deploy/targets/deb.js.map +1 -0
  198. package/dist/deploy/targets/flatpak-manifest.d.ts +6 -0
  199. package/dist/deploy/targets/flatpak-manifest.d.ts.map +1 -0
  200. package/dist/deploy/targets/flatpak-manifest.js +48 -0
  201. package/dist/deploy/targets/flatpak-manifest.js.map +1 -0
  202. package/dist/deploy/targets/flatpak-prebuilt.d.ts +8 -0
  203. package/dist/deploy/targets/flatpak-prebuilt.d.ts.map +1 -0
  204. package/dist/deploy/targets/flatpak-prebuilt.js +43 -0
  205. package/dist/deploy/targets/flatpak-prebuilt.js.map +1 -0
  206. package/dist/deploy/targets/flatpak-source.d.ts +5 -0
  207. package/dist/deploy/targets/flatpak-source.d.ts.map +1 -0
  208. package/dist/deploy/targets/flatpak-source.js +110 -0
  209. package/dist/deploy/targets/flatpak-source.js.map +1 -0
  210. package/dist/deploy/targets/flatpak-sources.d.ts +17 -0
  211. package/dist/deploy/targets/flatpak-sources.d.ts.map +1 -0
  212. package/dist/deploy/targets/flatpak-sources.js +108 -0
  213. package/dist/deploy/targets/flatpak-sources.js.map +1 -0
  214. package/dist/deploy/targets/flatpak.d.ts +4 -0
  215. package/dist/deploy/targets/flatpak.d.ts.map +1 -0
  216. package/dist/deploy/targets/flatpak.js +112 -0
  217. package/dist/deploy/targets/flatpak.js.map +1 -0
  218. package/dist/deploy/targets/nfpm-target.d.ts +5 -0
  219. package/dist/deploy/targets/nfpm-target.d.ts.map +1 -0
  220. package/dist/deploy/targets/nfpm-target.js +26 -0
  221. package/dist/deploy/targets/nfpm-target.js.map +1 -0
  222. package/dist/deploy/targets/rpm.d.ts +4 -0
  223. package/dist/deploy/targets/rpm.d.ts.map +1 -0
  224. package/dist/deploy/targets/rpm.js +4 -0
  225. package/dist/deploy/targets/rpm.js.map +1 -0
  226. package/dist/deploy/tools.d.ts +18 -0
  227. package/dist/deploy/tools.d.ts.map +1 -0
  228. package/dist/deploy/tools.js +92 -0
  229. package/dist/deploy/tools.js.map +1 -0
  230. package/dist/deploy/types.d.ts +140 -0
  231. package/dist/deploy/types.d.ts.map +1 -0
  232. package/dist/deploy/types.js +2 -0
  233. package/dist/deploy/types.js.map +1 -0
  234. package/dist/deploy/vendored/appimagetool.d.ts +7 -0
  235. package/dist/deploy/vendored/appimagetool.d.ts.map +1 -0
  236. package/dist/deploy/vendored/appimagetool.js +42 -0
  237. package/dist/deploy/vendored/appimagetool.js.map +1 -0
  238. package/dist/deploy/vendored/nfpm.d.ts +3 -0
  239. package/dist/deploy/vendored/nfpm.d.ts.map +1 -0
  240. package/dist/deploy/vendored/nfpm.js +60 -0
  241. package/dist/deploy/vendored/nfpm.js.map +1 -0
  242. package/dist/dev/change-queue.d.ts +11 -0
  243. package/dist/dev/change-queue.d.ts.map +1 -0
  244. package/dist/dev/change-queue.js +34 -0
  245. package/dist/dev/change-queue.js.map +1 -0
  246. package/dist/dev/failure-tracker.d.ts +10 -0
  247. package/dist/dev/failure-tracker.d.ts.map +1 -0
  248. package/dist/dev/failure-tracker.js +61 -0
  249. package/dist/dev/failure-tracker.js.map +1 -0
  250. package/dist/dev/missing-import.d.ts +4 -0
  251. package/dist/dev/missing-import.d.ts.map +1 -0
  252. package/dist/dev/missing-import.js +23 -0
  253. package/dist/dev/missing-import.js.map +1 -0
  254. package/dist/dev/runner-deps.d.ts.map +1 -1
  255. package/dist/dev/runner-deps.js +25 -6
  256. package/dist/dev/runner-deps.js.map +1 -1
  257. package/dist/dev/runner.d.ts +8 -4
  258. package/dist/dev/runner.d.ts.map +1 -1
  259. package/dist/dev/runner.js +334 -66
  260. package/dist/dev/runner.js.map +1 -1
  261. package/dist/dev/supervisor.d.ts +1 -2
  262. package/dist/dev/supervisor.d.ts.map +1 -1
  263. package/dist/dev/supervisor.js +1 -1
  264. package/dist/dev/supervisor.js.map +1 -1
  265. package/dist/dev/vite-dev-server.d.ts +13 -2
  266. package/dist/dev/vite-dev-server.d.ts.map +1 -1
  267. package/dist/dev/vite-dev-server.js +30 -2
  268. package/dist/dev/vite-dev-server.js.map +1 -1
  269. package/dist/internal/entry-arg.d.ts +1 -7
  270. package/dist/internal/entry-arg.d.ts.map +1 -1
  271. package/dist/internal/entry-arg.js +18 -11
  272. package/dist/internal/entry-arg.js.map +1 -1
  273. package/dist/internal/module-loads.d.ts +7 -0
  274. package/dist/internal/module-loads.d.ts.map +1 -0
  275. package/dist/internal/module-loads.js +21 -0
  276. package/dist/internal/module-loads.js.map +1 -0
  277. package/dist/internal/prepare-project.d.ts +16 -0
  278. package/dist/internal/prepare-project.d.ts.map +1 -0
  279. package/dist/internal/prepare-project.js +15 -0
  280. package/dist/internal/prepare-project.js.map +1 -0
  281. package/dist/internal/run-cli-tool.d.ts +2 -1
  282. package/dist/internal/run-cli-tool.d.ts.map +1 -1
  283. package/dist/internal/run-cli-tool.js +15 -6
  284. package/dist/internal/run-cli-tool.js.map +1 -1
  285. package/dist/internal/staging-dir.d.ts +8 -1
  286. package/dist/internal/staging-dir.d.ts.map +1 -1
  287. package/dist/internal/staging-dir.js +38 -2
  288. package/dist/internal/staging-dir.js.map +1 -1
  289. package/dist/mcp/serialize-widget.d.ts +2 -1
  290. package/dist/mcp/serialize-widget.d.ts.map +1 -1
  291. package/dist/mcp/serialize-widget.js +1 -1
  292. package/dist/mcp/serialize-widget.js.map +1 -1
  293. package/dist/mcp/testing-loader.d.ts +5 -2
  294. package/dist/mcp/testing-loader.d.ts.map +1 -1
  295. package/dist/mcp/testing-loader.js +7 -3
  296. package/dist/mcp/testing-loader.js.map +1 -1
  297. package/dist/refresh-runtime.d.ts +2 -1
  298. package/dist/refresh-runtime.d.ts.map +1 -1
  299. package/dist/refresh-runtime.js +32 -2
  300. package/dist/refresh-runtime.js.map +1 -1
  301. package/dist/settings/schema.d.ts +1 -2
  302. package/dist/settings/schema.d.ts.map +1 -1
  303. package/dist/settings/schema.js +1 -1
  304. package/dist/settings/schema.js.map +1 -1
  305. package/dist/vite-plugins/asset-extensions.d.ts +2 -1
  306. package/dist/vite-plugins/asset-extensions.d.ts.map +1 -1
  307. package/dist/vite-plugins/asset-extensions.js +2 -1
  308. package/dist/vite-plugins/asset-extensions.js.map +1 -1
  309. package/dist/vite-plugins/asset-imports.d.ts +4 -0
  310. package/dist/vite-plugins/asset-imports.d.ts.map +1 -0
  311. package/dist/vite-plugins/asset-imports.js +88 -0
  312. package/dist/vite-plugins/asset-imports.js.map +1 -0
  313. package/dist/vite-plugins/asset-specifier.d.ts +5 -0
  314. package/dist/vite-plugins/asset-specifier.d.ts.map +1 -0
  315. package/dist/vite-plugins/asset-specifier.js +7 -0
  316. package/dist/vite-plugins/asset-specifier.js.map +1 -0
  317. package/dist/vite-plugins/esm-extension.d.ts +4 -0
  318. package/dist/vite-plugins/esm-extension.d.ts.map +1 -0
  319. package/dist/vite-plugins/esm-extension.js +4 -0
  320. package/dist/vite-plugins/esm-extension.js.map +1 -0
  321. package/dist/vite-plugins/fast-refresh/swc-refresh.d.ts +1 -3
  322. package/dist/vite-plugins/fast-refresh/swc-refresh.d.ts.map +1 -1
  323. package/dist/vite-plugins/fast-refresh/swc-refresh.js +1 -1
  324. package/dist/vite-plugins/fast-refresh/swc-refresh.js.map +1 -1
  325. package/dist/vite-plugins/index.d.ts.map +1 -1
  326. package/dist/vite-plugins/index.js +4 -0
  327. package/dist/vite-plugins/index.js.map +1 -1
  328. package/dist/vite-plugins/resource-shared.d.ts +2 -1
  329. package/dist/vite-plugins/resource-shared.d.ts.map +1 -1
  330. package/dist/vite-plugins/resource-shared.js +2 -1
  331. package/dist/vite-plugins/resource-shared.js.map +1 -1
  332. package/dist/vite-plugins/resources.d.ts.map +1 -1
  333. package/dist/vite-plugins/resources.js +30 -29
  334. package/dist/vite-plugins/resources.js.map +1 -1
  335. package/dist/vite-plugins/self-contained.d.ts +4 -0
  336. package/dist/vite-plugins/self-contained.d.ts.map +1 -0
  337. package/dist/vite-plugins/self-contained.js +244 -0
  338. package/dist/vite-plugins/self-contained.js.map +1 -0
  339. package/dist/vite-plugins/settings.d.ts.map +1 -1
  340. package/dist/vite-plugins/settings.js +19 -40
  341. package/dist/vite-plugins/settings.js.map +1 -1
  342. package/dist/vite-plugins/store-links.d.ts +4 -0
  343. package/dist/vite-plugins/store-links.d.ts.map +1 -0
  344. package/dist/vite-plugins/store-links.js +19 -0
  345. package/dist/vite-plugins/store-links.js.map +1 -0
  346. package/dist/vite-plugins/undeclared-library.d.ts.map +1 -1
  347. package/dist/vite-plugins/undeclared-library.js +51 -12
  348. package/dist/vite-plugins/undeclared-library.js.map +1 -1
  349. package/dist/vite-plugins/worker.d.ts.map +1 -1
  350. package/dist/vite-plugins/worker.js +3 -1
  351. package/dist/vite-plugins/worker.js.map +1 -1
  352. package/env.d.ts +106 -25
  353. package/package.json +20 -13
  354. package/src/builder.ts +22 -4
  355. package/src/cli.ts +7 -2
  356. package/src/codegen/freshness.ts +2 -2
  357. package/src/codegen/run-codegen.ts +37 -23
  358. package/src/codegen/store-resolver.ts +1 -1
  359. package/src/commands/build.ts +5 -6
  360. package/src/commands/codegen.ts +14 -1
  361. package/src/commands/deploy.ts +47 -0
  362. package/src/commands/dev.ts +4 -4
  363. package/src/commands/docs.ts +39 -4
  364. package/src/deploy/depends.ts +42 -0
  365. package/src/deploy/download.ts +148 -0
  366. package/src/deploy/freedesktop/copyright.ts +41 -0
  367. package/src/deploy/freedesktop/dbus-service.ts +19 -0
  368. package/src/deploy/freedesktop/desktop-entry.ts +102 -0
  369. package/src/deploy/freedesktop/ini.ts +39 -0
  370. package/src/deploy/freedesktop/metainfo-sections.ts +116 -0
  371. package/src/deploy/freedesktop/metainfo.ts +46 -0
  372. package/src/deploy/freedesktop/mime-package.ts +28 -0
  373. package/src/deploy/freedesktop/validate.ts +124 -0
  374. package/src/deploy/freedesktop/xml.ts +53 -0
  375. package/src/deploy/git.ts +20 -0
  376. package/src/deploy/install-hints.ts +108 -0
  377. package/src/deploy/nfpm/config.ts +153 -0
  378. package/src/deploy/nfpm/contents.ts +69 -0
  379. package/src/deploy/nfpm/description.ts +11 -0
  380. package/src/deploy/nfpm/optional.ts +8 -0
  381. package/src/deploy/nfpm/pack.ts +44 -0
  382. package/src/deploy/node-runtime/download.ts +48 -0
  383. package/src/deploy/node-runtime/elf.ts +145 -0
  384. package/src/deploy/node-runtime/guard.ts +29 -0
  385. package/src/deploy/node-runtime/index.ts +80 -0
  386. package/src/deploy/payload/copy-tree.ts +51 -0
  387. package/src/deploy/payload/icons.ts +80 -0
  388. package/src/deploy/payload/launcher.ts +27 -0
  389. package/src/deploy/payload/schemas.ts +27 -0
  390. package/src/deploy/payload/stage.ts +145 -0
  391. package/src/deploy/registry.ts +40 -0
  392. package/src/deploy/run-deploy.ts +235 -0
  393. package/src/deploy/settings/arch.ts +18 -0
  394. package/src/deploy/settings/categories.ts +39 -0
  395. package/src/deploy/settings/exec.ts +29 -0
  396. package/src/deploy/settings/identity.ts +133 -0
  397. package/src/deploy/settings/index.ts +189 -0
  398. package/src/deploy/settings/package-manifest.ts +66 -0
  399. package/src/deploy/settings/paths.ts +115 -0
  400. package/src/deploy/settings/screenshots.ts +125 -0
  401. package/src/deploy/settings/starter.ts +41 -0
  402. package/src/deploy/settings/version.ts +59 -0
  403. package/src/deploy/targets/appimage.ts +140 -0
  404. package/src/deploy/targets/deb.ts +6 -0
  405. package/src/deploy/targets/flatpak-manifest.ts +61 -0
  406. package/src/deploy/targets/flatpak-prebuilt.ts +59 -0
  407. package/src/deploy/targets/flatpak-source.ts +168 -0
  408. package/src/deploy/targets/flatpak-sources.ts +171 -0
  409. package/src/deploy/targets/flatpak.ts +143 -0
  410. package/src/deploy/targets/nfpm-target.ts +33 -0
  411. package/src/deploy/targets/rpm.ts +6 -0
  412. package/src/deploy/tools.ts +135 -0
  413. package/src/deploy/types.ts +174 -0
  414. package/src/deploy/vendored/appimagetool.ts +57 -0
  415. package/src/deploy/vendored/nfpm.ts +79 -0
  416. package/src/dev/change-queue.ts +59 -0
  417. package/src/dev/failure-tracker.ts +92 -0
  418. package/src/dev/missing-import.ts +32 -0
  419. package/src/dev/runner-deps.ts +34 -6
  420. package/src/dev/runner.ts +506 -102
  421. package/src/dev/supervisor.ts +0 -3
  422. package/src/dev/vite-dev-server.ts +54 -3
  423. package/src/internal/entry-arg.ts +25 -11
  424. package/src/internal/module-loads.ts +32 -0
  425. package/src/internal/prepare-project.ts +23 -0
  426. package/src/internal/run-cli-tool.ts +22 -6
  427. package/src/internal/staging-dir.ts +57 -2
  428. package/src/mcp/serialize-widget.ts +3 -2
  429. package/src/mcp/testing-loader.ts +19 -4
  430. package/src/refresh-runtime.ts +48 -2
  431. package/src/settings/schema.ts +0 -1
  432. package/src/vite-plugins/asset-extensions.ts +2 -1
  433. package/src/vite-plugins/asset-imports.ts +134 -0
  434. package/src/vite-plugins/asset-specifier.ts +9 -0
  435. package/src/vite-plugins/esm-extension.ts +4 -0
  436. package/src/vite-plugins/fast-refresh/swc-refresh.ts +1 -1
  437. package/src/vite-plugins/index.ts +4 -0
  438. package/src/vite-plugins/resource-shared.ts +2 -0
  439. package/src/vite-plugins/resources.ts +33 -33
  440. package/src/vite-plugins/self-contained.ts +352 -0
  441. package/src/vite-plugins/settings.ts +21 -48
  442. package/src/vite-plugins/store-links.ts +25 -0
  443. package/src/vite-plugins/undeclared-library.ts +74 -12
  444. package/src/vite-plugins/worker.ts +4 -1
  445. package/dist/internal.d.ts +0 -3
  446. package/dist/internal.d.ts.map +0 -1
  447. package/dist/internal.js +0 -3
  448. package/dist/internal.js.map +0 -1
  449. package/src/internal.ts +0 -2
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flatpak-manifest.js","sourceRoot":"","sources":["../../../src/deploy/targets/flatpak-manifest.ts"],"names":[],"mappings":"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","sourcesContent":["import type { DeployPayload, DeploySettings } from \"../types.js\";\nimport { optional } from \"../nfpm/optional.js\";\nimport { flatpakPrebuiltModule } from \"./flatpak-prebuilt.js\";\nimport { flatpakSourceModule } from \"./flatpak-source.js\";\nimport { nodeExtensionFor } from \"./flatpak-sources.js\";\n\ntype FlatpakManifest = Record<string, unknown>;\n\nconst DEFAULT_BRANCH = \"stable\";\nconst DEFAULT_RUNTIME = \"org.gnome.Platform\";\nconst DEFAULT_RUNTIME_VERSION = \"50\";\nconst DEFAULT_SDK = \"org.gnome.Sdk\";\nconst DEFAULT_FINISH_ARGS = [\"--share=ipc\", \"--socket=wayland\", \"--socket=fallback-x11\", \"--device=dri\"];\nconst DEFAULT_CLEANUP = [\"/include\", \"/share/pkgconfig\", \"*.la\", \"*.a\"];\n\nconst branchFor = (settings: DeploySettings): string => settings.deploy.flatpak?.branch ?? DEFAULT_BRANCH;\nconst isSourceMode = (settings: DeploySettings): boolean => settings.deploy.flatpak?.mode === \"source\";\n\nconst sdkExtensionsFor = (settings: DeploySettings): string[] => {\n const flatpak = settings.deploy.flatpak ?? {};\n const nodeExtension = isSourceMode(settings) ? [nodeExtensionFor(settings)] : [];\n\n return [...nodeExtension, ...(flatpak.sdkExtensions ?? [])];\n};\n\nconst modulesFor = (payload: DeployPayload): unknown[] => {\n const settings = payload.settings;\n const own = isSourceMode(settings) ? flatpakSourceModule(payload) : flatpakPrebuiltModule(payload);\n\n return [...(settings.deploy.flatpak?.modules ?? []), own];\n};\n\nconst runtimeKeys = (settings: DeploySettings): FlatpakManifest => {\n const flatpak = settings.deploy.flatpak ?? {};\n const extensions = sdkExtensionsFor(settings);\n\n return {\n runtime: flatpak.runtime ?? DEFAULT_RUNTIME,\n \"runtime-version\": flatpak.runtimeVersion ?? DEFAULT_RUNTIME_VERSION,\n sdk: flatpak.sdk ?? DEFAULT_SDK,\n ...optional(\"base\", flatpak.base),\n ...optional(\"base-version\", flatpak.baseVersion),\n ...optional(\"sdk-extensions\", extensions.length === 0 ? undefined : extensions),\n };\n};\n\nconst renderFlatpakManifest = (payload: DeployPayload): FlatpakManifest => {\n const settings = payload.settings;\n const flatpak = settings.deploy.flatpak ?? {};\n\n return {\n id: settings.applicationId,\n ...runtimeKeys(settings),\n command: settings.binaryName,\n \"finish-args\": flatpak.finishArgs ?? DEFAULT_FINISH_ARGS,\n cleanup: flatpak.cleanup ?? DEFAULT_CLEANUP,\n modules: modulesFor(payload),\n };\n};\n\nexport { branchFor, renderFlatpakManifest };\n"]}
@@ -0,0 +1,8 @@
1
+ import type { DeployPayload, DeploySettings } from "../types.js";
2
+ type FlatpakModule = Record<string, unknown>;
3
+ declare const DESTINATION = "${FLATPAK_DEST}";
4
+ declare const validationCommands: (settings: DeploySettings) => string[];
5
+ declare const postInstallCommands: (payload: DeployPayload) => string[];
6
+ declare const flatpakPrebuiltModule: (payload: DeployPayload) => FlatpakModule;
7
+ export { DESTINATION, type FlatpakModule, flatpakPrebuiltModule, postInstallCommands, validationCommands };
8
+ //# sourceMappingURL=flatpak-prebuilt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flatpak-prebuilt.d.ts","sourceRoot":"","sources":["../../../src/deploy/targets/flatpak-prebuilt.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAGjE,KAAK,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAE7C,QAAA,MAAM,WAAW,oBAAoB,CAAC;AAItC,QAAA,MAAM,kBAAkB,GAAI,UAAU,cAAc,KAAG,MAAM,EAW5D,CAAC;AAaF,QAAA,MAAM,mBAAmB,GAAI,SAAS,aAAa,KAAG,MAAM,EAGY,CAAC;AAEzE,QAAA,MAAM,qBAAqB,GAAI,SAAS,aAAa,KAAG,aAkBvD,CAAC;AAEF,OAAO,EAAE,WAAW,EAAE,KAAK,aAAa,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,CAAC"}
@@ -0,0 +1,43 @@
1
+ import { optional } from "../nfpm/optional.js";
2
+ const DESTINATION = "${FLATPAK_DEST}";
3
+ const STAGE_SOURCE_PATH = "../../stage";
4
+ const OVERLAY_SOURCE_PATH = "../../overlay/flatpak";
5
+ const validationCommands = (settings) => {
6
+ if (settings.deploy.flatpak?.mode !== "source") {
7
+ return [];
8
+ }
9
+ const metainfo = `${DESTINATION}/share/metainfo/${settings.applicationId}.metainfo.xml`;
10
+ return [
11
+ `desktop-file-validate ${DESTINATION}/share/applications/${settings.applicationId}.desktop`,
12
+ `appstreamcli validate --no-net --explain ${metainfo}`,
13
+ ];
14
+ };
15
+ const permissionCommands = (settings) => [
16
+ `chmod 755 ${DESTINATION}/bin/${settings.binaryName} ${DESTINATION}/lib/${settings.binaryName}/node`,
17
+ `find ${DESTINATION}/lib/${settings.binaryName} -name '*.node' -exec chmod 755 {} +`,
18
+ ];
19
+ const overlaySources = (payload) => payload.overlays.flatpak.length === 0 ? [] : [{ type: "dir", path: OVERLAY_SOURCE_PATH, dest: "overlay" }];
20
+ const overlayCommands = (payload) => payload.overlays.flatpak.length === 0 ? [] : [`cp -a overlay/. ${DESTINATION}/`];
21
+ const postInstallCommands = (payload) => payload.settings.paths.schemaFiles.length === 0
22
+ ? []
23
+ : [`glib-compile-schemas ${DESTINATION}/share/glib-2.0/schemas`];
24
+ const flatpakPrebuiltModule = (payload) => {
25
+ const settings = payload.settings;
26
+ const postInstall = postInstallCommands(payload);
27
+ return {
28
+ name: settings.binaryName,
29
+ buildsystem: "simple",
30
+ "build-options": { strip: false, "no-debuginfo": true },
31
+ sources: [{ type: "dir", path: STAGE_SOURCE_PATH, dest: "stage" }, ...overlaySources(payload)],
32
+ "build-commands": [
33
+ `cp -a stage/. ${DESTINATION}/`,
34
+ ...overlayCommands(payload),
35
+ ...permissionCommands(settings),
36
+ ...(settings.deploy.flatpak?.buildCommands ?? []),
37
+ ...validationCommands(settings),
38
+ ],
39
+ ...optional("post-install", postInstall.length === 0 ? undefined : postInstall),
40
+ };
41
+ };
42
+ export { DESTINATION, flatpakPrebuiltModule, postInstallCommands, validationCommands };
43
+ //# sourceMappingURL=flatpak-prebuilt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flatpak-prebuilt.js","sourceRoot":"","sources":["../../../src/deploy/targets/flatpak-prebuilt.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAI/C,MAAM,WAAW,GAAG,iBAAiB,CAAC;AACtC,MAAM,iBAAiB,GAAG,aAAa,CAAC;AACxC,MAAM,mBAAmB,GAAG,uBAAuB,CAAC;AAEpD,MAAM,kBAAkB,GAAG,CAAC,QAAwB,EAAY,EAAE;IAC9D,IAAI,QAAQ,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC7C,OAAO,EAAE,CAAC;IACd,CAAC;IAED,MAAM,QAAQ,GAAG,GAAG,WAAW,mBAAmB,QAAQ,CAAC,aAAa,eAAe,CAAC;IAExF,OAAO;QACH,yBAAyB,WAAW,uBAAuB,QAAQ,CAAC,aAAa,UAAU;QAC3F,4CAA4C,QAAQ,EAAE;KACzD,CAAC;AACN,CAAC,CAAC;AAEF,MAAM,kBAAkB,GAAG,CAAC,QAAwB,EAAY,EAAE,CAAC;IAC/D,aAAa,WAAW,QAAQ,QAAQ,CAAC,UAAU,IAAI,WAAW,QAAQ,QAAQ,CAAC,UAAU,OAAO;IACpG,QAAQ,WAAW,QAAQ,QAAQ,CAAC,UAAU,sCAAsC;CACvF,CAAC;AAEF,MAAM,cAAc,GAAG,CAAC,OAAsB,EAAmB,EAAE,CAC/D,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,mBAAmB,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;AAE/G,MAAM,eAAe,GAAG,CAAC,OAAsB,EAAY,EAAE,CACzD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,mBAAmB,WAAW,GAAG,CAAC,CAAC;AAErF,MAAM,mBAAmB,GAAG,CAAC,OAAsB,EAAY,EAAE,CAC7D,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC;IAC3C,CAAC,CAAC,EAAE;IACJ,CAAC,CAAC,CAAC,wBAAwB,WAAW,yBAAyB,CAAC,CAAC;AAEzE,MAAM,qBAAqB,GAAG,CAAC,OAAsB,EAAiB,EAAE;IACpE,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;IAClC,MAAM,WAAW,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;IAEjD,OAAO;QACH,IAAI,EAAE,QAAQ,CAAC,UAAU;QACzB,WAAW,EAAE,QAAQ;QACrB,eAAe,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE;QACvD,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;QAC9F,gBAAgB,EAAE;YACd,iBAAiB,WAAW,GAAG;YAC/B,GAAG,eAAe,CAAC,OAAO,CAAC;YAC3B,GAAG,kBAAkB,CAAC,QAAQ,CAAC;YAC/B,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,EAAE,aAAa,IAAI,EAAE,CAAC;YACjD,GAAG,kBAAkB,CAAC,QAAQ,CAAC;SAClC;QACD,GAAG,QAAQ,CAAC,cAAc,EAAE,WAAW,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC;KAClF,CAAC;AACN,CAAC,CAAC;AAEF,OAAO,EAAE,WAAW,EAAsB,qBAAqB,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,CAAC","sourcesContent":["import type { DeployPayload, DeploySettings } from \"../types.js\";\nimport { optional } from \"../nfpm/optional.js\";\n\ntype FlatpakModule = Record<string, unknown>;\n\nconst DESTINATION = \"${FLATPAK_DEST}\";\nconst STAGE_SOURCE_PATH = \"../../stage\";\nconst OVERLAY_SOURCE_PATH = \"../../overlay/flatpak\";\n\nconst validationCommands = (settings: DeploySettings): string[] => {\n if (settings.deploy.flatpak?.mode !== \"source\") {\n return [];\n }\n\n const metainfo = `${DESTINATION}/share/metainfo/${settings.applicationId}.metainfo.xml`;\n\n return [\n `desktop-file-validate ${DESTINATION}/share/applications/${settings.applicationId}.desktop`,\n `appstreamcli validate --no-net --explain ${metainfo}`,\n ];\n};\n\nconst permissionCommands = (settings: DeploySettings): string[] => [\n `chmod 755 ${DESTINATION}/bin/${settings.binaryName} ${DESTINATION}/lib/${settings.binaryName}/node`,\n `find ${DESTINATION}/lib/${settings.binaryName} -name '*.node' -exec chmod 755 {} +`,\n];\n\nconst overlaySources = (payload: DeployPayload): FlatpakModule[] =>\n payload.overlays.flatpak.length === 0 ? [] : [{ type: \"dir\", path: OVERLAY_SOURCE_PATH, dest: \"overlay\" }];\n\nconst overlayCommands = (payload: DeployPayload): string[] =>\n payload.overlays.flatpak.length === 0 ? [] : [`cp -a overlay/. ${DESTINATION}/`];\n\nconst postInstallCommands = (payload: DeployPayload): string[] =>\n payload.settings.paths.schemaFiles.length === 0\n ? []\n : [`glib-compile-schemas ${DESTINATION}/share/glib-2.0/schemas`];\n\nconst flatpakPrebuiltModule = (payload: DeployPayload): FlatpakModule => {\n const settings = payload.settings;\n const postInstall = postInstallCommands(payload);\n\n return {\n name: settings.binaryName,\n buildsystem: \"simple\",\n \"build-options\": { strip: false, \"no-debuginfo\": true },\n sources: [{ type: \"dir\", path: STAGE_SOURCE_PATH, dest: \"stage\" }, ...overlaySources(payload)],\n \"build-commands\": [\n `cp -a stage/. ${DESTINATION}/`,\n ...overlayCommands(payload),\n ...permissionCommands(settings),\n ...(settings.deploy.flatpak?.buildCommands ?? []),\n ...validationCommands(settings),\n ],\n ...optional(\"post-install\", postInstall.length === 0 ? undefined : postInstall),\n };\n};\n\nexport { DESTINATION, type FlatpakModule, flatpakPrebuiltModule, postInstallCommands, validationCommands };\n"]}
@@ -0,0 +1,5 @@
1
+ import type { DeployPayload } from "../types.js";
2
+ import { type FlatpakModule } from "./flatpak-prebuilt.js";
3
+ declare const flatpakSourceModule: (payload: DeployPayload) => FlatpakModule;
4
+ export { flatpakSourceModule };
5
+ //# sourceMappingURL=flatpak-source.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flatpak-source.d.ts","sourceRoot":"","sources":["../../../src/deploy/targets/flatpak-source.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAkB,MAAM,aAAa,CAAC;AASjE,OAAO,EAAe,KAAK,aAAa,EAA2C,MAAM,uBAAuB,CAAC;AAwHjH,QAAA,MAAM,mBAAmB,GAAI,SAAS,aAAa,KAAG,aAmCrD,CAAC;AAEF,OAAO,EAAE,mBAAmB,EAAE,CAAC"}
@@ -0,0 +1,110 @@
1
+ import { posix, relative } from "node:path";
2
+ import { listFilesRecursive } from "../../internal/list-files.js";
3
+ import { BUNDLE_FILENAME } from "../../vite-plugins/esm-extension.js";
4
+ import { renderDbusService } from "../freedesktop/dbus-service.js";
5
+ import { renderDesktopEntry } from "../freedesktop/desktop-entry.js";
6
+ import { renderMetainfo } from "../freedesktop/metainfo.js";
7
+ import { optional } from "../nfpm/optional.js";
8
+ import { iconPathFor } from "../payload/icons.js";
9
+ import { renderLauncher } from "../payload/launcher.js";
10
+ import { DESTINATION, postInstallCommands, validationCommands } from "./flatpak-prebuilt.js";
11
+ import { detectPackageManager, GENERATED_SOURCES, installCommandFor, nodeExtensionPathFor, resolveGitSource, } from "./flatpak-sources.js";
12
+ const LAUNCHER_FILENAME = "launcher.sh";
13
+ const MODULE_BUILD_ROOT = "/run/build";
14
+ const RUNTIME_PREFIX = "/app";
15
+ const NPM_CACHE_DIR = "flatpak-node/npm-cache";
16
+ const YARN_MIRROR_DIR = "flatpak-node/yarn-mirror";
17
+ const PLAIN_ARGUMENT = /^[\w./-]+$/;
18
+ const QUOTE_ESCAPE = String.raw `'\''`;
19
+ const inlineSource = (fileName, contents) => ({
20
+ type: "inline",
21
+ "dest-filename": fileName,
22
+ contents,
23
+ });
24
+ const projectRelative = (settings, path) => relative(settings.paths.root, path).replaceAll("\\", "/");
25
+ const shellArgument = (value) => PLAIN_ARGUMENT.test(value) ? value : `'${value.split("'").join(QUOTE_ESCAPE)}'`;
26
+ const pathArgument = (value) => shellArgument(value.startsWith("-") ? `./${value}` : value);
27
+ const installCommand = (source, destination, mode) => `install -D${mode} ${pathArgument(source)} ${destination}`;
28
+ const runtimeInstallCommands = (settings, nodeExtensionPath) => {
29
+ const lib = `${DESTINATION}/lib/${settings.binaryName}`;
30
+ return [
31
+ installCommand(`${nodeExtensionPath}/bin/node`, `${lib}/node`, "m755"),
32
+ installCommand(`dist/${BUNDLE_FILENAME}`, `${lib}/${BUNDLE_FILENAME}`, "m644"),
33
+ installCommand("dist/gtkx.node", `${lib}/gtkx.node`, "m755"),
34
+ "test ! -f dist/gtkx.gresource || " + installCommand("dist/gtkx.gresource", `${lib}/gtkx.gresource`, "m644"),
35
+ "test ! -f dist/gschemas.compiled || " +
36
+ installCommand("dist/gschemas.compiled", `${lib}/gschemas.compiled`, "m644"),
37
+ `test ! -d dist/assets || cp -a dist/assets ${lib}/assets`,
38
+ installCommand(LAUNCHER_FILENAME, `${DESTINATION}/bin/${settings.binaryName}`, "m755"),
39
+ ];
40
+ };
41
+ const activationSource = (settings) => settings.isDbusActivatable
42
+ ? [inlineSource(`${settings.applicationId}.service`, renderDbusService(settings, RUNTIME_PREFIX))]
43
+ : [];
44
+ const activationInstallCommands = (settings) => settings.isDbusActivatable
45
+ ? [installCommand(`${settings.applicationId}.service`, `${DESTINATION}/share/dbus-1/services/${settings.applicationId}.service`, "m644")]
46
+ : [];
47
+ const metadataInstallCommands = (settings) => [
48
+ installCommand(`${settings.applicationId}.desktop`, `${DESTINATION}/share/applications/${settings.applicationId}.desktop`, "m644"),
49
+ installCommand(`${settings.applicationId}.metainfo.xml`, `${DESTINATION}/share/metainfo/${settings.applicationId}.metainfo.xml`, "m644"),
50
+ ...activationInstallCommands(settings),
51
+ ];
52
+ const schemaInstallCommands = (settings) => settings.paths.schemaFiles.map((file) => {
53
+ const name = posix.basename(file);
54
+ return installCommand(projectRelative(settings, file), `${DESTINATION}/share/glib-2.0/schemas/${shellArgument(name)}`, "m644");
55
+ });
56
+ const iconInstallCommand = (settings, source, rel) => installCommand(projectRelative(settings, source), `${DESTINATION}/share/icons/${shellArgument(rel.replaceAll("\\", "/"))}`, "m644");
57
+ const iconInstallCommands = (settings) => {
58
+ const { iconsDir, iconFile } = settings.paths;
59
+ if (iconFile !== null) {
60
+ return [iconInstallCommand(settings, iconFile, iconPathFor(settings, iconFile))];
61
+ }
62
+ if (iconsDir === null) {
63
+ return [];
64
+ }
65
+ return listFilesRecursive(iconsDir).map((icon) => iconInstallCommand(settings, icon.absPath, icon.rel));
66
+ };
67
+ const offlineEnvFor = (manager, settings) => {
68
+ const moduleDir = `${MODULE_BUILD_ROOT}/${settings.binaryName}`;
69
+ if (manager === "yarn") {
70
+ return { YARN_OFFLINE_MIRROR: `${moduleDir}/${YARN_MIRROR_DIR}` };
71
+ }
72
+ return { npm_config_cache: `${moduleDir}/${NPM_CACHE_DIR}`, npm_config_offline: "true" };
73
+ };
74
+ const flatpakSourceModule = (payload) => {
75
+ const settings = payload.settings;
76
+ const manager = detectPackageManager(settings);
77
+ const postInstall = postInstallCommands(payload);
78
+ const nodeExtensionPath = nodeExtensionPathFor(settings);
79
+ return {
80
+ name: settings.binaryName,
81
+ buildsystem: "simple",
82
+ "build-options": {
83
+ "append-path": `${nodeExtensionPath}/bin`,
84
+ env: { npm_config_nodedir: nodeExtensionPath, ...offlineEnvFor(manager, settings) },
85
+ strip: false,
86
+ "no-debuginfo": true,
87
+ },
88
+ sources: [
89
+ resolveGitSource(settings),
90
+ GENERATED_SOURCES,
91
+ inlineSource(`${settings.applicationId}.desktop`, renderDesktopEntry(settings)),
92
+ inlineSource(`${settings.applicationId}.metainfo.xml`, renderMetainfo(settings)),
93
+ inlineSource(LAUNCHER_FILENAME, renderLauncher(settings)),
94
+ ...activationSource(settings),
95
+ ],
96
+ "build-commands": [
97
+ installCommandFor(manager),
98
+ "npx gtkx build",
99
+ ...runtimeInstallCommands(settings, nodeExtensionPath),
100
+ ...metadataInstallCommands(settings),
101
+ ...schemaInstallCommands(settings),
102
+ ...iconInstallCommands(settings),
103
+ ...(settings.deploy.flatpak?.buildCommands ?? []),
104
+ ...validationCommands(settings),
105
+ ],
106
+ ...optional("post-install", postInstall.length === 0 ? undefined : postInstall),
107
+ };
108
+ };
109
+ export { flatpakSourceModule };
110
+ //# sourceMappingURL=flatpak-source.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flatpak-source.js","sourceRoot":"","sources":["../../../src/deploy/targets/flatpak-source.ts"],"names":[],"mappings":"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","sourcesContent":["import { posix, relative } from \"node:path\";\nimport type { DeployPayload, DeploySettings } from \"../types.js\";\nimport { listFilesRecursive } from \"../../internal/list-files.js\";\nimport { BUNDLE_FILENAME } from \"../../vite-plugins/esm-extension.js\";\nimport { renderDbusService } from \"../freedesktop/dbus-service.js\";\nimport { renderDesktopEntry } from \"../freedesktop/desktop-entry.js\";\nimport { renderMetainfo } from \"../freedesktop/metainfo.js\";\nimport { optional } from \"../nfpm/optional.js\";\nimport { iconPathFor } from \"../payload/icons.js\";\nimport { renderLauncher } from \"../payload/launcher.js\";\nimport { DESTINATION, type FlatpakModule, postInstallCommands, validationCommands } from \"./flatpak-prebuilt.js\";\nimport {\n detectPackageManager,\n GENERATED_SOURCES,\n installCommandFor,\n nodeExtensionPathFor,\n type PackageManager,\n resolveGitSource,\n} from \"./flatpak-sources.js\";\n\nconst LAUNCHER_FILENAME = \"launcher.sh\";\nconst MODULE_BUILD_ROOT = \"/run/build\";\nconst RUNTIME_PREFIX = \"/app\";\nconst NPM_CACHE_DIR = \"flatpak-node/npm-cache\";\nconst YARN_MIRROR_DIR = \"flatpak-node/yarn-mirror\";\nconst PLAIN_ARGUMENT = /^[\\w./-]+$/;\nconst QUOTE_ESCAPE = String.raw`'\\''`;\n\nconst inlineSource = (fileName: string, contents: string): FlatpakModule => ({\n type: \"inline\",\n \"dest-filename\": fileName,\n contents,\n});\n\nconst projectRelative = (settings: DeploySettings, path: string): string =>\n relative(settings.paths.root, path).replaceAll(\"\\\\\", \"/\");\n\nconst shellArgument = (value: string): string =>\n PLAIN_ARGUMENT.test(value) ? value : `'${value.split(\"'\").join(QUOTE_ESCAPE)}'`;\n\nconst pathArgument = (value: string): string => shellArgument(value.startsWith(\"-\") ? `./${value}` : value);\n\nconst installCommand = (source: string, destination: string, mode: string): string =>\n `install -D${mode} ${pathArgument(source)} ${destination}`;\n\nconst runtimeInstallCommands = (settings: DeploySettings, nodeExtensionPath: string): string[] => {\n const lib = `${DESTINATION}/lib/${settings.binaryName}`;\n\n return [\n installCommand(`${nodeExtensionPath}/bin/node`, `${lib}/node`, \"m755\"),\n installCommand(`dist/${BUNDLE_FILENAME}`, `${lib}/${BUNDLE_FILENAME}`, \"m644\"),\n installCommand(\"dist/gtkx.node\", `${lib}/gtkx.node`, \"m755\"),\n \"test ! -f dist/gtkx.gresource || \" + installCommand(\"dist/gtkx.gresource\", `${lib}/gtkx.gresource`, \"m644\"),\n \"test ! -f dist/gschemas.compiled || \" +\n installCommand(\"dist/gschemas.compiled\", `${lib}/gschemas.compiled`, \"m644\"),\n `test ! -d dist/assets || cp -a dist/assets ${lib}/assets`,\n installCommand(LAUNCHER_FILENAME, `${DESTINATION}/bin/${settings.binaryName}`, \"m755\"),\n ];\n};\n\nconst activationSource = (settings: DeploySettings): FlatpakModule[] =>\n settings.isDbusActivatable\n ? [inlineSource(`${settings.applicationId}.service`, renderDbusService(settings, RUNTIME_PREFIX))]\n : [];\n\nconst activationInstallCommands = (settings: DeploySettings): string[] =>\n settings.isDbusActivatable\n ? [installCommand(\n `${settings.applicationId}.service`,\n `${DESTINATION}/share/dbus-1/services/${settings.applicationId}.service`,\n \"m644\",\n )]\n : [];\n\nconst metadataInstallCommands = (settings: DeploySettings): string[] => [\n installCommand(\n `${settings.applicationId}.desktop`,\n `${DESTINATION}/share/applications/${settings.applicationId}.desktop`,\n \"m644\",\n ),\n installCommand(\n `${settings.applicationId}.metainfo.xml`,\n `${DESTINATION}/share/metainfo/${settings.applicationId}.metainfo.xml`,\n \"m644\",\n ),\n ...activationInstallCommands(settings),\n];\n\nconst schemaInstallCommands = (settings: DeploySettings): string[] =>\n settings.paths.schemaFiles.map((file) => {\n const name = posix.basename(file);\n\n return installCommand(\n projectRelative(settings, file),\n `${DESTINATION}/share/glib-2.0/schemas/${shellArgument(name)}`,\n \"m644\",\n );\n });\n\nconst iconInstallCommand = (settings: DeploySettings, source: string, rel: string): string =>\n installCommand(\n projectRelative(settings, source),\n `${DESTINATION}/share/icons/${shellArgument(rel.replaceAll(\"\\\\\", \"/\"))}`,\n \"m644\",\n );\n\nconst iconInstallCommands = (settings: DeploySettings): string[] => {\n const { iconsDir, iconFile } = settings.paths;\n\n if (iconFile !== null) {\n return [iconInstallCommand(settings, iconFile, iconPathFor(settings, iconFile))];\n }\n\n if (iconsDir === null) {\n return [];\n }\n\n return listFilesRecursive(iconsDir).map((icon) => iconInstallCommand(settings, icon.absPath, icon.rel));\n};\n\nconst offlineEnvFor = (manager: PackageManager, settings: DeploySettings): Record<string, string> => {\n const moduleDir = `${MODULE_BUILD_ROOT}/${settings.binaryName}`;\n\n if (manager === \"yarn\") {\n return { YARN_OFFLINE_MIRROR: `${moduleDir}/${YARN_MIRROR_DIR}` };\n }\n\n return { npm_config_cache: `${moduleDir}/${NPM_CACHE_DIR}`, npm_config_offline: \"true\" };\n};\n\nconst flatpakSourceModule = (payload: DeployPayload): FlatpakModule => {\n const settings = payload.settings;\n const manager = detectPackageManager(settings);\n const postInstall = postInstallCommands(payload);\n const nodeExtensionPath = nodeExtensionPathFor(settings);\n\n return {\n name: settings.binaryName,\n buildsystem: \"simple\",\n \"build-options\": {\n \"append-path\": `${nodeExtensionPath}/bin`,\n env: { npm_config_nodedir: nodeExtensionPath, ...offlineEnvFor(manager, settings) },\n strip: false,\n \"no-debuginfo\": true,\n },\n sources: [\n resolveGitSource(settings),\n GENERATED_SOURCES,\n inlineSource(`${settings.applicationId}.desktop`, renderDesktopEntry(settings)),\n inlineSource(`${settings.applicationId}.metainfo.xml`, renderMetainfo(settings)),\n inlineSource(LAUNCHER_FILENAME, renderLauncher(settings)),\n ...activationSource(settings),\n ],\n \"build-commands\": [\n installCommandFor(manager),\n \"npx gtkx build\",\n ...runtimeInstallCommands(settings, nodeExtensionPath),\n ...metadataInstallCommands(settings),\n ...schemaInstallCommands(settings),\n ...iconInstallCommands(settings),\n ...(settings.deploy.flatpak?.buildCommands ?? []),\n ...validationCommands(settings),\n ],\n ...optional(\"post-install\", postInstall.length === 0 ? undefined : postInstall),\n };\n};\n\nexport { flatpakSourceModule };\n"]}
@@ -0,0 +1,17 @@
1
+ import type { DeploySettings } from "../types.js";
2
+ type PackageManager = "npm" | "pnpm" | "yarn";
3
+ type GitSource = {
4
+ type: "git";
5
+ url: string;
6
+ tag?: string;
7
+ commit?: string;
8
+ };
9
+ declare const GENERATED_SOURCES = "generated-sources.json";
10
+ declare const detectPackageManager: (settings: DeploySettings) => PackageManager;
11
+ declare const installCommandFor: (manager: PackageManager) => string;
12
+ declare const nodeExtensionFor: (settings: DeploySettings) => string;
13
+ declare const nodeExtensionPathFor: (settings: DeploySettings) => string;
14
+ declare const resolveGitSource: (settings: DeploySettings) => GitSource;
15
+ declare const generateNodeSources: (settings: DeploySettings, manager: PackageManager) => void;
16
+ export { detectPackageManager, GENERATED_SOURCES, generateNodeSources, installCommandFor, nodeExtensionFor, nodeExtensionPathFor, type PackageManager, resolveGitSource, };
17
+ //# sourceMappingURL=flatpak-sources.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flatpak-sources.d.ts","sourceRoot":"","sources":["../../../src/deploy/targets/flatpak-sources.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAKlD,KAAK,cAAc,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,CAAC;AAE9C,KAAK,SAAS,GAAG;IACb,IAAI,EAAE,KAAK,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAOF,QAAA,MAAM,iBAAiB,2BAA2B,CAAC;AAmBnD,QAAA,MAAM,oBAAoB,GAAI,UAAU,cAAc,KAAG,cAkBxD,CAAC;AAEF,QAAA,MAAM,iBAAiB,GAAI,SAAS,cAAc,KAAG,MAAkC,CAAC;AAExF,QAAA,MAAM,gBAAgB,GAAI,UAAU,cAAc,KAAG,MACe,CAAC;AAErE,QAAA,MAAM,oBAAoB,GAAI,UAAU,cAAc,KAAG,MAWxD,CAAC;AA0CF,QAAA,MAAM,gBAAgB,GAAI,UAAU,cAAc,KAAG,SAInD,CAAC;AAoBH,QAAA,MAAM,mBAAmB,GAAI,UAAU,cAAc,EAAE,SAAS,cAAc,KAAG,IAgBhF,CAAC;AAEF,OAAO,EACH,oBAAoB,EACpB,iBAAiB,EACjB,mBAAmB,EACnB,iBAAiB,EACjB,gBAAgB,EAChB,oBAAoB,EACpB,KAAK,cAAc,EACnB,gBAAgB,GACnB,CAAC"}
@@ -0,0 +1,108 @@
1
+ import { copyFileSync, existsSync, mkdirSync, mkdtempSync, rmSync } from "node:fs";
2
+ import { tmpdir } from "node:os";
3
+ import { basename, dirname, join } from "node:path";
4
+ import { runCliTool } from "../../internal/run-cli-tool.js";
5
+ import { gitRemoteUrl, runGit } from "../git.js";
6
+ import { optional } from "../nfpm/optional.js";
7
+ const GENERATED_SOURCES = "generated-sources.json";
8
+ const GENERATOR = "flatpak-node-generator";
9
+ const FETCHABLE_URL = /^https?:\/\//;
10
+ const DEFAULT_NODE_EXTENSION = "org.freedesktop.Sdk.Extension.node24";
11
+ const NODE_EXTENSION_PREFIX = "org.freedesktop.Sdk.Extension.";
12
+ const SDK_EXTENSION_ROOT = "/usr/lib/sdk";
13
+ const LOCKFILE_BY_MANAGER = {
14
+ npm: "package-lock.json",
15
+ pnpm: "pnpm-lock.yaml",
16
+ yarn: "yarn.lock",
17
+ };
18
+ const INSTALL_COMMAND = {
19
+ npm: "npm ci --offline",
20
+ pnpm: "pnpm install --offline --frozen-lockfile",
21
+ yarn: "yarn install --offline",
22
+ };
23
+ const detectPackageManager = (settings) => {
24
+ const configured = settings.deploy.flatpak?.packageManager;
25
+ if (configured !== undefined) {
26
+ return configured;
27
+ }
28
+ const found = ["pnpm", "yarn", "npm"]
29
+ .find((manager) => existsSync(join(settings.paths.root, LOCKFILE_BY_MANAGER[manager])));
30
+ if (found === undefined) {
31
+ throw new Error("Cannot build a Flathub-ready manifest without a lockfile: the sandbox installs dependencies offline. " +
32
+ "Commit a package-lock.json, pnpm-lock.yaml, or yarn.lock, or set `deploy.flatpak.packageManager`.");
33
+ }
34
+ return found;
35
+ };
36
+ const installCommandFor = (manager) => INSTALL_COMMAND[manager];
37
+ const nodeExtensionFor = (settings) => settings.deploy.flatpak?.nodeExtension ?? DEFAULT_NODE_EXTENSION;
38
+ const nodeExtensionPathFor = (settings) => {
39
+ const extension = nodeExtensionFor(settings);
40
+ if (!extension.startsWith(NODE_EXTENSION_PREFIX)) {
41
+ throw new Error(`Cannot resolve where "${extension}" mounts: the sandbox installs Node SDK extensions under ` +
42
+ `${SDK_EXTENSION_ROOT}, so \`deploy.flatpak.nodeExtension\` has to be an ${NODE_EXTENSION_PREFIX}* id.`);
43
+ }
44
+ return `${SDK_EXTENSION_ROOT}/${extension.slice(NODE_EXTENSION_PREFIX.length)}`;
45
+ };
46
+ const resolveSourceUrl = (settings) => {
47
+ const url = settings.deploy.flatpak?.source?.url ?? gitRemoteUrl(settings.paths.root);
48
+ if (url === null) {
49
+ throw new Error("Cannot build a Flathub-ready manifest without a public source: Flathub builds from a fetchable " +
50
+ "repository, not from your working tree. Set `deploy.flatpak.source.url`.");
51
+ }
52
+ if (!FETCHABLE_URL.test(url)) {
53
+ throw new Error(`Cannot build a Flathub-ready manifest from "${url}": Flathub's builders clone over HTTPS and have no ` +
54
+ "credentials, so an SSH remote never resolves there. Set `deploy.flatpak.source.url` to the " +
55
+ "repository's https:// URL.");
56
+ }
57
+ return url;
58
+ };
59
+ const configuredRevision = (settings) => {
60
+ const source = settings.deploy.flatpak?.source ?? {};
61
+ if (source.commit !== undefined) {
62
+ return { ...optional("tag", source.tag), commit: source.commit };
63
+ }
64
+ return source.tag === undefined ? null : { tag: source.tag };
65
+ };
66
+ const workingTreeRevision = (settings) => {
67
+ const root = settings.paths.root;
68
+ return {
69
+ ...optional("tag", runGit(root, ["describe", "--tags", "--exact-match"]) ?? undefined),
70
+ ...optional("commit", runGit(root, ["rev-parse", "HEAD"]) ?? undefined),
71
+ };
72
+ };
73
+ const resolveGitSource = (settings) => ({
74
+ type: "git",
75
+ url: resolveSourceUrl(settings),
76
+ ...(configuredRevision(settings) ?? workingTreeRevision(settings)),
77
+ });
78
+ const generatedSourcesPath = (settings) => join(settings.paths.targets, "flatpak", GENERATED_SOURCES);
79
+ const isolateLockfile = (root, lockfile) => {
80
+ const source = join(root, lockfile);
81
+ if (!existsSync(source)) {
82
+ throw new Error(`Cannot vendor the offline sources: no ${lockfile} under ${root}`);
83
+ }
84
+ const manifest = join(dirname(source), "package.json");
85
+ const dir = mkdtempSync(join(tmpdir(), "gtkx-lockfile-"));
86
+ copyFileSync(existsSync(manifest) ? manifest : join(root, "package.json"), join(dir, "package.json"));
87
+ copyFileSync(source, join(dir, basename(lockfile)));
88
+ return dir;
89
+ };
90
+ const generateNodeSources = (settings, manager) => {
91
+ const lockfile = settings.deploy.flatpak?.lockfile ?? LOCKFILE_BY_MANAGER[manager];
92
+ const output = generatedSourcesPath(settings);
93
+ mkdirSync(dirname(output), { recursive: true });
94
+ const isolated = isolateLockfile(settings.paths.root, lockfile);
95
+ try {
96
+ runCliTool({
97
+ tool: GENERATOR,
98
+ args: [manager, join(isolated, basename(lockfile)), "-o", output],
99
+ target: "the offline npm sources",
100
+ shouldStream: true,
101
+ });
102
+ }
103
+ finally {
104
+ rmSync(isolated, { recursive: true, force: true, maxRetries: 5 });
105
+ }
106
+ };
107
+ export { detectPackageManager, GENERATED_SOURCES, generateNodeSources, installCommandFor, nodeExtensionFor, nodeExtensionPathFor, resolveGitSource, };
108
+ //# sourceMappingURL=flatpak-sources.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flatpak-sources.js","sourceRoot":"","sources":["../../../src/deploy/targets/flatpak-sources.ts"],"names":[],"mappings":"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","sourcesContent":["import { copyFileSync, existsSync, mkdirSync, mkdtempSync, rmSync } from \"node:fs\";\nimport { tmpdir } from \"node:os\";\nimport { basename, dirname, join } from \"node:path\";\nimport type { DeploySettings } from \"../types.js\";\nimport { runCliTool } from \"../../internal/run-cli-tool.js\";\nimport { gitRemoteUrl, runGit } from \"../git.js\";\nimport { optional } from \"../nfpm/optional.js\";\n\ntype PackageManager = \"npm\" | \"pnpm\" | \"yarn\";\n\ntype GitSource = {\n type: \"git\";\n url: string;\n tag?: string;\n commit?: string;\n};\n\ntype GitRevision = {\n tag?: string;\n commit?: string;\n};\n\nconst GENERATED_SOURCES = \"generated-sources.json\";\nconst GENERATOR = \"flatpak-node-generator\";\nconst FETCHABLE_URL = /^https?:\\/\\//;\nconst DEFAULT_NODE_EXTENSION = \"org.freedesktop.Sdk.Extension.node24\";\nconst NODE_EXTENSION_PREFIX = \"org.freedesktop.Sdk.Extension.\";\nconst SDK_EXTENSION_ROOT = \"/usr/lib/sdk\";\n\nconst LOCKFILE_BY_MANAGER: Record<PackageManager, string> = {\n npm: \"package-lock.json\",\n pnpm: \"pnpm-lock.yaml\",\n yarn: \"yarn.lock\",\n};\n\nconst INSTALL_COMMAND: Record<PackageManager, string> = {\n npm: \"npm ci --offline\",\n pnpm: \"pnpm install --offline --frozen-lockfile\",\n yarn: \"yarn install --offline\",\n};\n\nconst detectPackageManager = (settings: DeploySettings): PackageManager => {\n const configured = settings.deploy.flatpak?.packageManager;\n\n if (configured !== undefined) {\n return configured;\n }\n\n const found = ([\"pnpm\", \"yarn\", \"npm\"] as const)\n .find((manager) => existsSync(join(settings.paths.root, LOCKFILE_BY_MANAGER[manager])));\n\n if (found === undefined) {\n throw new Error(\n \"Cannot build a Flathub-ready manifest without a lockfile: the sandbox installs dependencies offline. \" +\n \"Commit a package-lock.json, pnpm-lock.yaml, or yarn.lock, or set `deploy.flatpak.packageManager`.\",\n );\n }\n\n return found;\n};\n\nconst installCommandFor = (manager: PackageManager): string => INSTALL_COMMAND[manager];\n\nconst nodeExtensionFor = (settings: DeploySettings): string =>\n settings.deploy.flatpak?.nodeExtension ?? DEFAULT_NODE_EXTENSION;\n\nconst nodeExtensionPathFor = (settings: DeploySettings): string => {\n const extension = nodeExtensionFor(settings);\n\n if (!extension.startsWith(NODE_EXTENSION_PREFIX)) {\n throw new Error(\n `Cannot resolve where \"${extension}\" mounts: the sandbox installs Node SDK extensions under ` +\n `${SDK_EXTENSION_ROOT}, so \\`deploy.flatpak.nodeExtension\\` has to be an ${NODE_EXTENSION_PREFIX}* id.`,\n );\n }\n\n return `${SDK_EXTENSION_ROOT}/${extension.slice(NODE_EXTENSION_PREFIX.length)}`;\n};\n\nconst resolveSourceUrl = (settings: DeploySettings): string => {\n const url = settings.deploy.flatpak?.source?.url ?? gitRemoteUrl(settings.paths.root);\n\n if (url === null) {\n throw new Error(\n \"Cannot build a Flathub-ready manifest without a public source: Flathub builds from a fetchable \" +\n \"repository, not from your working tree. Set `deploy.flatpak.source.url`.\",\n );\n }\n\n if (!FETCHABLE_URL.test(url)) {\n throw new Error(\n `Cannot build a Flathub-ready manifest from \"${url}\": Flathub's builders clone over HTTPS and have no ` +\n \"credentials, so an SSH remote never resolves there. Set `deploy.flatpak.source.url` to the \" +\n \"repository's https:// URL.\",\n );\n }\n\n return url;\n};\n\nconst configuredRevision = (settings: DeploySettings): GitRevision | null => {\n const source = settings.deploy.flatpak?.source ?? {};\n\n if (source.commit !== undefined) {\n return { ...optional(\"tag\", source.tag), commit: source.commit };\n }\n\n return source.tag === undefined ? null : { tag: source.tag };\n};\n\nconst workingTreeRevision = (settings: DeploySettings): GitRevision => {\n const root = settings.paths.root;\n\n return {\n ...optional(\"tag\", runGit(root, [\"describe\", \"--tags\", \"--exact-match\"]) ?? undefined),\n ...optional(\"commit\", runGit(root, [\"rev-parse\", \"HEAD\"]) ?? undefined),\n };\n};\n\nconst resolveGitSource = (settings: DeploySettings): GitSource => ({\n type: \"git\",\n url: resolveSourceUrl(settings),\n ...(configuredRevision(settings) ?? workingTreeRevision(settings)),\n});\n\nconst generatedSourcesPath = (settings: DeploySettings): string =>\n join(settings.paths.targets, \"flatpak\", GENERATED_SOURCES);\n\nconst isolateLockfile = (root: string, lockfile: string): string => {\n const source = join(root, lockfile);\n\n if (!existsSync(source)) {\n throw new Error(`Cannot vendor the offline sources: no ${lockfile} under ${root}`);\n }\n\n const manifest = join(dirname(source), \"package.json\");\n const dir = mkdtempSync(join(tmpdir(), \"gtkx-lockfile-\"));\n copyFileSync(existsSync(manifest) ? manifest : join(root, \"package.json\"), join(dir, \"package.json\"));\n copyFileSync(source, join(dir, basename(lockfile)));\n\n return dir;\n};\n\nconst generateNodeSources = (settings: DeploySettings, manager: PackageManager): void => {\n const lockfile = settings.deploy.flatpak?.lockfile ?? LOCKFILE_BY_MANAGER[manager];\n const output = generatedSourcesPath(settings);\n mkdirSync(dirname(output), { recursive: true });\n const isolated = isolateLockfile(settings.paths.root, lockfile);\n\n try {\n runCliTool({\n tool: GENERATOR,\n args: [manager, join(isolated, basename(lockfile)), \"-o\", output],\n target: \"the offline npm sources\",\n shouldStream: true,\n });\n } finally {\n rmSync(isolated, { recursive: true, force: true, maxRetries: 5 });\n }\n};\n\nexport {\n detectPackageManager,\n GENERATED_SOURCES,\n generateNodeSources,\n installCommandFor,\n nodeExtensionFor,\n nodeExtensionPathFor,\n type PackageManager,\n resolveGitSource,\n};\n"]}
@@ -0,0 +1,4 @@
1
+ import type { DeployTarget } from "../types.js";
2
+ declare const flatpakTarget: DeployTarget;
3
+ export { flatpakTarget };
4
+ //# sourceMappingURL=flatpak.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flatpak.d.ts","sourceRoot":"","sources":["../../../src/deploy/targets/flatpak.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAiE,YAAY,EAAE,MAAM,aAAa,CAAC;AAgB/G,QAAA,MAAM,aAAa,EAAE,YAMpB,CAAC;AAoHF,OAAO,EAAE,aAAa,EAAE,CAAC"}
@@ -0,0 +1,112 @@
1
+ import { errorMessage, info, tryResolveExecutable } from "@gtkx/utils";
2
+ import { existsSync, mkdirSync, statSync } from "node:fs";
3
+ import { join } from "node:path";
4
+ import { stringify } from "yaml";
5
+ import { runCliTool } from "../../internal/run-cli-tool.js";
6
+ import { APPSTREAMCLI, DESKTOP_FILE_VALIDATE, FLATPAK, FLATPAK_BUILDER } from "../tools.js";
7
+ import { branchFor, renderFlatpakManifest } from "./flatpak-manifest.js";
8
+ import { detectPackageManager, generateNodeSources } from "./flatpak-sources.js";
9
+ const PREFIX = "/app";
10
+ const TARGET_DIR = "flatpak";
11
+ const FLATHUB_REPO = "https://dl.flathub.org/repo/flathub.flatpakrepo";
12
+ const BUILDER_REF = "org.flatpak.Builder";
13
+ const flatpakTarget = {
14
+ name: "flatpak",
15
+ prefix: PREFIX,
16
+ tools: [FLATPAK, FLATPAK_BUILDER, DESKTOP_FILE_VALIDATE, APPSTREAMCLI],
17
+ render: (payload) => renderManifests(payload),
18
+ pack: (payload) => Promise.try(() => packFlatpak(payload)),
19
+ };
20
+ const flatpakDir = (settings) => join(settings.paths.targets, TARGET_DIR);
21
+ const manifestPathFor = (settings) => join(flatpakDir(settings), `${settings.applicationId}.yml`);
22
+ const resolveBuilder = () => {
23
+ if (tryResolveExecutable(FLATPAK_BUILDER.command) !== undefined) {
24
+ return { tool: FLATPAK_BUILDER.command, prefix: [] };
25
+ }
26
+ return { tool: FLATPAK.command, prefix: ["run", BUILDER_REF] };
27
+ };
28
+ const isSourceMode = (settings) => settings.deploy.flatpak?.mode === "source";
29
+ const renderManifests = (payload) => {
30
+ const settings = payload.settings;
31
+ if (isSourceMode(settings)) {
32
+ generateNodeSources(settings, detectPackageManager(settings));
33
+ }
34
+ return [{
35
+ path: manifestPathFor(settings),
36
+ contents: stringify(renderFlatpakManifest(payload), { lineWidth: 0 }),
37
+ }];
38
+ };
39
+ const builderArgsFor = (settings, dir) => [
40
+ "--force-clean",
41
+ "--user",
42
+ "--install-deps-from=flathub",
43
+ `--default-branch=${branchFor(settings)}`,
44
+ ...(settings.deploy.flatpak?.shouldUseRofilesFuse === false ? ["--disable-rofiles-fuse"] : []),
45
+ `--state-dir=${join(dir, "state")}`,
46
+ `--repo=${join(dir, "repo")}`,
47
+ join(dir, "build"),
48
+ manifestPathFor(settings),
49
+ ];
50
+ const buildFlatpak = (settings) => {
51
+ const dir = flatpakDir(settings);
52
+ const builder = resolveBuilder();
53
+ info("flatpak: running flatpak-builder, this can take several minutes");
54
+ try {
55
+ runCliTool({
56
+ tool: builder.tool,
57
+ args: [...builder.prefix, ...builderArgsFor(settings, dir)],
58
+ target: "the flatpak",
59
+ shouldStream: true,
60
+ });
61
+ }
62
+ catch (error) {
63
+ throw new Error(`${errorMessage(error)}\n\nIf it stopped at "Failure spawning rofiles-fuse", the build is running ` +
64
+ "somewhere FUSE is unavailable, such as a container. Set `deploy.flatpak.shouldUseRofilesFuse: false` " +
65
+ "to build without it.", { cause: error });
66
+ }
67
+ };
68
+ const bundleArgsFor = (settings, target) => {
69
+ const signing = settings.deploy.signing?.flatpak;
70
+ const runtimeRepo = settings.deploy.flatpak?.runtimeRepo ?? FLATHUB_REPO;
71
+ return [
72
+ "build-bundle",
73
+ join(flatpakDir(settings), "repo"),
74
+ target,
75
+ settings.applicationId,
76
+ branchFor(settings),
77
+ `--arch=${settings.arch.flatpak}`,
78
+ `--runtime-repo=${runtimeRepo}`,
79
+ ...(signing === undefined ? [] : [`--gpg-sign=${signing.gpgKeyId}`]),
80
+ ...(signing?.gpgHomeDir === undefined ? [] : [`--gpg-homedir=${signing.gpgHomeDir}`]),
81
+ ];
82
+ };
83
+ const bundleFlatpak = (settings) => {
84
+ const output = settings.paths.output;
85
+ mkdirSync(output, { recursive: true });
86
+ const version = settings.versions.packageVersion;
87
+ const target = join(output, `${settings.applicationId}-${version}-${settings.arch.flatpak}.flatpak`);
88
+ runCliTool({ tool: FLATPAK.command, args: bundleArgsFor(settings, target), target: "the flatpak bundle" });
89
+ if (!existsSync(target)) {
90
+ throw new Error(`flatpak build-bundle reported success but wrote no bundle at ${target}`);
91
+ }
92
+ return { path: target, size: statSync(target).size };
93
+ };
94
+ const installFlatpak = (settings) => {
95
+ runCliTool({
96
+ tool: FLATPAK.command,
97
+ args: ["install", "--user", "--noninteractive", "--reinstall", join(flatpakDir(settings), "repo"),
98
+ settings.applicationId],
99
+ target: "the flatpak",
100
+ shouldStream: true,
101
+ });
102
+ };
103
+ const packFlatpak = (payload) => {
104
+ const settings = payload.settings;
105
+ buildFlatpak(settings);
106
+ if (settings.deploy.flatpak?.shouldInstall === true) {
107
+ installFlatpak(settings);
108
+ }
109
+ return settings.deploy.flatpak?.shouldEmitBundle === false ? [] : [bundleFlatpak(settings)];
110
+ };
111
+ export { flatpakTarget };
112
+ //# sourceMappingURL=flatpak.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flatpak.js","sourceRoot":"","sources":["../../../src/deploy/targets/flatpak.ts"],"names":[],"mappings":"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","sourcesContent":["import { errorMessage, info, tryResolveExecutable } from \"@gtkx/utils\";\nimport { existsSync, mkdirSync, statSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { stringify } from \"yaml\";\nimport type { DeployArtifact, DeployManifest, DeployPayload, DeploySettings, DeployTarget } from \"../types.js\";\nimport { runCliTool } from \"../../internal/run-cli-tool.js\";\nimport { APPSTREAMCLI, DESKTOP_FILE_VALIDATE, FLATPAK, FLATPAK_BUILDER } from \"../tools.js\";\nimport { branchFor, renderFlatpakManifest } from \"./flatpak-manifest.js\";\nimport { detectPackageManager, generateNodeSources } from \"./flatpak-sources.js\";\n\ntype BuilderInvocation = {\n tool: string;\n prefix: string[];\n};\n\nconst PREFIX = \"/app\";\nconst TARGET_DIR = \"flatpak\";\nconst FLATHUB_REPO = \"https://dl.flathub.org/repo/flathub.flatpakrepo\";\nconst BUILDER_REF = \"org.flatpak.Builder\";\n\nconst flatpakTarget: DeployTarget = {\n name: \"flatpak\",\n prefix: PREFIX,\n tools: [FLATPAK, FLATPAK_BUILDER, DESKTOP_FILE_VALIDATE, APPSTREAMCLI],\n render: (payload) => renderManifests(payload),\n pack: (payload) => Promise.try(() => packFlatpak(payload)),\n};\n\nconst flatpakDir = (settings: DeploySettings): string => join(settings.paths.targets, TARGET_DIR);\n\nconst manifestPathFor = (settings: DeploySettings): string =>\n join(flatpakDir(settings), `${settings.applicationId}.yml`);\n\nconst resolveBuilder = (): BuilderInvocation => {\n if (tryResolveExecutable(FLATPAK_BUILDER.command) !== undefined) {\n return { tool: FLATPAK_BUILDER.command, prefix: [] };\n }\n\n return { tool: FLATPAK.command, prefix: [\"run\", BUILDER_REF] };\n};\n\nconst isSourceMode = (settings: DeploySettings): boolean => settings.deploy.flatpak?.mode === \"source\";\n\nconst renderManifests = (payload: DeployPayload): DeployManifest[] => {\n const settings = payload.settings;\n\n if (isSourceMode(settings)) {\n generateNodeSources(settings, detectPackageManager(settings));\n }\n\n return [{\n path: manifestPathFor(settings),\n contents: stringify(renderFlatpakManifest(payload), { lineWidth: 0 }),\n }];\n};\n\nconst builderArgsFor = (settings: DeploySettings, dir: string): string[] => [\n \"--force-clean\",\n \"--user\",\n \"--install-deps-from=flathub\",\n `--default-branch=${branchFor(settings)}`,\n ...(settings.deploy.flatpak?.shouldUseRofilesFuse === false ? [\"--disable-rofiles-fuse\"] : []),\n `--state-dir=${join(dir, \"state\")}`,\n `--repo=${join(dir, \"repo\")}`,\n join(dir, \"build\"),\n manifestPathFor(settings),\n];\n\nconst buildFlatpak = (settings: DeploySettings): void => {\n const dir = flatpakDir(settings);\n const builder = resolveBuilder();\n info(\"flatpak: running flatpak-builder, this can take several minutes\");\n\n try {\n runCliTool({\n tool: builder.tool,\n args: [...builder.prefix, ...builderArgsFor(settings, dir)],\n target: \"the flatpak\",\n shouldStream: true,\n });\n } catch (error) {\n throw new Error(\n `${errorMessage(error)}\\n\\nIf it stopped at \"Failure spawning rofiles-fuse\", the build is running ` +\n \"somewhere FUSE is unavailable, such as a container. Set `deploy.flatpak.shouldUseRofilesFuse: false` \" +\n \"to build without it.\",\n { cause: error },\n );\n }\n};\n\nconst bundleArgsFor = (settings: DeploySettings, target: string): string[] => {\n const signing = settings.deploy.signing?.flatpak;\n const runtimeRepo = settings.deploy.flatpak?.runtimeRepo ?? FLATHUB_REPO;\n\n return [\n \"build-bundle\",\n join(flatpakDir(settings), \"repo\"),\n target,\n settings.applicationId,\n branchFor(settings),\n `--arch=${settings.arch.flatpak}`,\n `--runtime-repo=${runtimeRepo}`,\n ...(signing === undefined ? [] : [`--gpg-sign=${signing.gpgKeyId}`]),\n ...(signing?.gpgHomeDir === undefined ? [] : [`--gpg-homedir=${signing.gpgHomeDir}`]),\n ];\n};\n\nconst bundleFlatpak = (settings: DeploySettings): DeployArtifact => {\n const output = settings.paths.output;\n mkdirSync(output, { recursive: true });\n const version = settings.versions.packageVersion;\n const target = join(output, `${settings.applicationId}-${version}-${settings.arch.flatpak}.flatpak`);\n runCliTool({ tool: FLATPAK.command, args: bundleArgsFor(settings, target), target: \"the flatpak bundle\" });\n\n if (!existsSync(target)) {\n throw new Error(`flatpak build-bundle reported success but wrote no bundle at ${target}`);\n }\n\n return { path: target, size: statSync(target).size };\n};\n\nconst installFlatpak = (settings: DeploySettings): void => {\n runCliTool({\n tool: FLATPAK.command,\n args: [\"install\", \"--user\", \"--noninteractive\", \"--reinstall\", join(flatpakDir(settings), \"repo\"),\n settings.applicationId],\n target: \"the flatpak\",\n shouldStream: true,\n });\n};\n\nconst packFlatpak = (payload: DeployPayload): DeployArtifact[] => {\n const settings = payload.settings;\n buildFlatpak(settings);\n\n if (settings.deploy.flatpak?.shouldInstall === true) {\n installFlatpak(settings);\n }\n\n return settings.deploy.flatpak?.shouldEmitBundle === false ? [] : [bundleFlatpak(settings)];\n};\n\nexport { flatpakTarget };\n"]}
@@ -0,0 +1,5 @@
1
+ import type { DeployTarget } from "../types.js";
2
+ import { type NfpmPackager } from "../nfpm/config.js";
3
+ declare const nfpmTarget: (packager: NfpmPackager) => DeployTarget;
4
+ export { nfpmTarget };
5
+ //# sourceMappingURL=nfpm-target.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nfpm-target.d.ts","sourceRoot":"","sources":["../../../src/deploy/targets/nfpm-target.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAiD,YAAY,EAAE,MAAM,aAAa,CAAC;AAC/F,OAAO,EAAE,KAAK,YAAY,EAAoB,MAAM,mBAAmB,CAAC;AAqBxE,QAAA,MAAM,UAAU,GAAI,UAAU,YAAY,KAAG,YAM3C,CAAC;AAEH,OAAO,EAAE,UAAU,EAAE,CAAC"}
@@ -0,0 +1,26 @@
1
+ import { join } from "node:path";
2
+ import { stringify } from "yaml";
3
+ import { renderNfpmConfig } from "../nfpm/config.js";
4
+ import { packWithNfpm } from "../nfpm/pack.js";
5
+ import { TAR } from "../tools.js";
6
+ const MANIFEST_FILENAME = "nfpm.yaml";
7
+ const PREFIX = "/usr";
8
+ const manifestPathFor = (payload, packager) => join(payload.settings.paths.targets, packager, MANIFEST_FILENAME);
9
+ const renderManifests = (payload, packager) => [
10
+ {
11
+ path: manifestPathFor(payload, packager),
12
+ contents: stringify(renderNfpmConfig(payload, packager), { lineWidth: 0 }),
13
+ },
14
+ ];
15
+ const packPackage = async (payload, packager) => [
16
+ await packWithNfpm(payload, packager, manifestPathFor(payload, packager)),
17
+ ];
18
+ const nfpmTarget = (packager) => ({
19
+ name: packager,
20
+ prefix: PREFIX,
21
+ tools: [TAR],
22
+ render: (payload) => renderManifests(payload, packager),
23
+ pack: (payload) => packPackage(payload, packager),
24
+ });
25
+ export { nfpmTarget };
26
+ //# sourceMappingURL=nfpm-target.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nfpm-target.js","sourceRoot":"","sources":["../../../src/deploy/targets/nfpm-target.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AAEjC,OAAO,EAAqB,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACxE,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAElC,MAAM,iBAAiB,GAAG,WAAW,CAAC;AACtC,MAAM,MAAM,GAAG,MAAM,CAAC;AAEtB,MAAM,eAAe,GAAG,CAAC,OAAsB,EAAE,QAAsB,EAAU,EAAE,CAC/E,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,EAAE,QAAQ,EAAE,iBAAiB,CAAC,CAAC;AAEtE,MAAM,eAAe,GAAG,CAAC,OAAsB,EAAE,QAAsB,EAAoB,EAAE,CAAC;IAC1F;QACI,IAAI,EAAE,eAAe,CAAC,OAAO,EAAE,QAAQ,CAAC;QACxC,QAAQ,EAAE,SAAS,CAAC,gBAAgB,CAAC,OAAO,EAAE,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC;KAC7E;CACJ,CAAC;AAEF,MAAM,WAAW,GAAG,KAAK,EAAE,OAAsB,EAAE,QAAsB,EAA6B,EAAE,CAAC;IACrG,MAAM,YAAY,CAAC,OAAO,EAAE,QAAQ,EAAE,eAAe,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;CAC5E,CAAC;AAEF,MAAM,UAAU,GAAG,CAAC,QAAsB,EAAgB,EAAE,CAAC,CAAC;IAC1D,IAAI,EAAE,QAAQ;IACd,MAAM,EAAE,MAAM;IACd,KAAK,EAAE,CAAC,GAAG,CAAC;IACZ,MAAM,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,eAAe,CAAC,OAAO,EAAE,QAAQ,CAAC;IACvD,IAAI,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,WAAW,CAAC,OAAO,EAAE,QAAQ,CAAC;CACpD,CAAC,CAAC;AAEH,OAAO,EAAE,UAAU,EAAE,CAAC","sourcesContent":["import { join } from \"node:path\";\nimport { stringify } from \"yaml\";\nimport type { DeployArtifact, DeployManifest, DeployPayload, DeployTarget } from \"../types.js\";\nimport { type NfpmPackager, renderNfpmConfig } from \"../nfpm/config.js\";\nimport { packWithNfpm } from \"../nfpm/pack.js\";\nimport { TAR } from \"../tools.js\";\n\nconst MANIFEST_FILENAME = \"nfpm.yaml\";\nconst PREFIX = \"/usr\";\n\nconst manifestPathFor = (payload: DeployPayload, packager: NfpmPackager): string =>\n join(payload.settings.paths.targets, packager, MANIFEST_FILENAME);\n\nconst renderManifests = (payload: DeployPayload, packager: NfpmPackager): DeployManifest[] => [\n {\n path: manifestPathFor(payload, packager),\n contents: stringify(renderNfpmConfig(payload, packager), { lineWidth: 0 }),\n },\n];\n\nconst packPackage = async (payload: DeployPayload, packager: NfpmPackager): Promise<DeployArtifact[]> => [\n await packWithNfpm(payload, packager, manifestPathFor(payload, packager)),\n];\n\nconst nfpmTarget = (packager: NfpmPackager): DeployTarget => ({\n name: packager,\n prefix: PREFIX,\n tools: [TAR],\n render: (payload) => renderManifests(payload, packager),\n pack: (payload) => packPackage(payload, packager),\n});\n\nexport { nfpmTarget };\n"]}
@@ -0,0 +1,4 @@
1
+ import type { DeployTarget } from "../types.js";
2
+ declare const rpmTarget: DeployTarget;
3
+ export { rpmTarget };
4
+ //# sourceMappingURL=rpm.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rpm.d.ts","sourceRoot":"","sources":["../../../src/deploy/targets/rpm.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAGhD,QAAA,MAAM,SAAS,EAAE,YAAgC,CAAC;AAElD,OAAO,EAAE,SAAS,EAAE,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { nfpmTarget } from "./nfpm-target.js";
2
+ const rpmTarget = nfpmTarget("rpm");
3
+ export { rpmTarget };
4
+ //# sourceMappingURL=rpm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rpm.js","sourceRoot":"","sources":["../../../src/deploy/targets/rpm.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,MAAM,SAAS,GAAiB,UAAU,CAAC,KAAK,CAAC,CAAC;AAElD,OAAO,EAAE,SAAS,EAAE,CAAC","sourcesContent":["import type { DeployTarget } from \"../types.js\";\nimport { nfpmTarget } from \"./nfpm-target.js\";\n\nconst rpmTarget: DeployTarget = nfpmTarget(\"rpm\");\n\nexport { rpmTarget };\n"]}