@gtkx/cli 1.0.0-rc.4 → 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 (520) hide show
  1. package/README.md +5 -5
  2. package/dist/builder.d.ts +2 -2
  3. package/dist/builder.d.ts.map +1 -1
  4. package/dist/builder.js +21 -3
  5. package/dist/builder.js.map +1 -1
  6. package/dist/cli.js +9 -3
  7. package/dist/cli.js.map +1 -1
  8. package/dist/codegen/freshness.d.ts.map +1 -1
  9. package/dist/codegen/freshness.js +2 -4
  10. package/dist/codegen/freshness.js.map +1 -1
  11. package/dist/codegen/run-codegen.d.ts +8 -5
  12. package/dist/codegen/run-codegen.d.ts.map +1 -1
  13. package/dist/codegen/run-codegen.js +25 -19
  14. package/dist/codegen/run-codegen.js.map +1 -1
  15. package/dist/codegen/store-resolver.d.ts +1 -1
  16. package/dist/codegen/store-resolver.d.ts.map +1 -1
  17. package/dist/codegen/store-resolver.js.map +1 -1
  18. package/dist/commands/build.d.ts.map +1 -1
  19. package/dist/commands/build.js +5 -6
  20. package/dist/commands/build.js.map +1 -1
  21. package/dist/commands/codegen.d.ts.map +1 -1
  22. package/dist/commands/codegen.js +11 -1
  23. package/dist/commands/codegen.js.map +1 -1
  24. package/dist/commands/deploy.d.ts +22 -0
  25. package/dist/commands/deploy.d.ts.map +1 -0
  26. package/dist/commands/deploy.js +44 -0
  27. package/dist/commands/deploy.js.map +1 -0
  28. package/dist/commands/dev.d.ts.map +1 -1
  29. package/dist/commands/dev.js +7 -5
  30. package/dist/commands/dev.js.map +1 -1
  31. package/dist/commands/docs.d.ts +2 -2
  32. package/dist/commands/docs.d.ts.map +1 -1
  33. package/dist/commands/docs.js +27 -4
  34. package/dist/commands/docs.js.map +1 -1
  35. package/dist/deploy/depends.d.ts +8 -0
  36. package/dist/deploy/depends.d.ts.map +1 -0
  37. package/dist/deploy/depends.js +27 -0
  38. package/dist/deploy/depends.js.map +1 -0
  39. package/dist/deploy/download.d.ts +20 -0
  40. package/dist/deploy/download.d.ts.map +1 -0
  41. package/dist/deploy/download.js +98 -0
  42. package/dist/deploy/download.js.map +1 -0
  43. package/dist/deploy/freedesktop/copyright.d.ts +4 -0
  44. package/dist/deploy/freedesktop/copyright.d.ts.map +1 -0
  45. package/dist/deploy/freedesktop/copyright.js +33 -0
  46. package/dist/deploy/freedesktop/copyright.js.map +1 -0
  47. package/dist/deploy/freedesktop/dbus-service.d.ts +4 -0
  48. package/dist/deploy/freedesktop/dbus-service.d.ts.map +1 -0
  49. package/dist/deploy/freedesktop/dbus-service.js +15 -0
  50. package/dist/deploy/freedesktop/dbus-service.js.map +1 -0
  51. package/dist/deploy/freedesktop/desktop-entry.d.ts +4 -0
  52. package/dist/deploy/freedesktop/desktop-entry.d.ts.map +1 -0
  53. package/dist/deploy/freedesktop/desktop-entry.js +73 -0
  54. package/dist/deploy/freedesktop/desktop-entry.js.map +1 -0
  55. package/dist/deploy/freedesktop/ini.d.ts +7 -0
  56. package/dist/deploy/freedesktop/ini.d.ts.map +1 -0
  57. package/dist/deploy/freedesktop/ini.js +22 -0
  58. package/dist/deploy/freedesktop/ini.js.map +1 -0
  59. package/dist/deploy/freedesktop/metainfo-sections.d.ts +13 -0
  60. package/dist/deploy/freedesktop/metainfo-sections.d.ts.map +1 -0
  61. package/dist/deploy/freedesktop/metainfo-sections.js +73 -0
  62. package/dist/deploy/freedesktop/metainfo-sections.js.map +1 -0
  63. package/dist/deploy/freedesktop/metainfo.d.ts +4 -0
  64. package/dist/deploy/freedesktop/metainfo.d.ts.map +1 -0
  65. package/dist/deploy/freedesktop/metainfo.js +29 -0
  66. package/dist/deploy/freedesktop/metainfo.js.map +1 -0
  67. package/dist/deploy/freedesktop/mime-package.d.ts +4 -0
  68. package/dist/deploy/freedesktop/mime-package.d.ts.map +1 -0
  69. package/dist/deploy/freedesktop/mime-package.js +16 -0
  70. package/dist/deploy/freedesktop/mime-package.js.map +1 -0
  71. package/dist/deploy/freedesktop/validate.d.ts +4 -0
  72. package/dist/deploy/freedesktop/validate.d.ts.map +1 -0
  73. package/dist/deploy/freedesktop/validate.js +81 -0
  74. package/dist/deploy/freedesktop/validate.js.map +1 -0
  75. package/dist/deploy/freedesktop/xml.d.ts +11 -0
  76. package/dist/deploy/freedesktop/xml.d.ts.map +1 -0
  77. package/dist/deploy/freedesktop/xml.js +33 -0
  78. package/dist/deploy/freedesktop/xml.js.map +1 -0
  79. package/dist/deploy/git.d.ts +4 -0
  80. package/dist/deploy/git.d.ts.map +1 -0
  81. package/dist/deploy/git.js +17 -0
  82. package/dist/deploy/git.js.map +1 -0
  83. package/dist/deploy/install-hints.d.ts +5 -0
  84. package/dist/deploy/install-hints.d.ts.map +1 -0
  85. package/dist/deploy/install-hints.js +85 -0
  86. package/dist/deploy/install-hints.js.map +1 -0
  87. package/dist/deploy/nfpm/config.d.ts +8 -0
  88. package/dist/deploy/nfpm/config.d.ts.map +1 -0
  89. package/dist/deploy/nfpm/config.js +119 -0
  90. package/dist/deploy/nfpm/config.js.map +1 -0
  91. package/dist/deploy/nfpm/contents.d.ts +12 -0
  92. package/dist/deploy/nfpm/contents.d.ts.map +1 -0
  93. package/dist/deploy/nfpm/contents.js +48 -0
  94. package/dist/deploy/nfpm/contents.js.map +1 -0
  95. package/dist/deploy/nfpm/description.d.ts +5 -0
  96. package/dist/deploy/nfpm/description.d.ts.map +1 -0
  97. package/dist/deploy/nfpm/description.js +5 -0
  98. package/dist/deploy/nfpm/description.js.map +1 -0
  99. package/dist/deploy/nfpm/optional.d.ts +5 -0
  100. package/dist/deploy/nfpm/optional.d.ts.map +1 -0
  101. package/dist/deploy/nfpm/optional.js +4 -0
  102. package/dist/deploy/nfpm/optional.js.map +1 -0
  103. package/dist/deploy/nfpm/pack.d.ts +5 -0
  104. package/dist/deploy/nfpm/pack.d.ts.map +1 -0
  105. package/dist/deploy/nfpm/pack.js +32 -0
  106. package/dist/deploy/nfpm/pack.js.map +1 -0
  107. package/dist/deploy/node-runtime/download.d.ts +3 -0
  108. package/dist/deploy/node-runtime/download.d.ts.map +1 -0
  109. package/dist/deploy/node-runtime/download.js +39 -0
  110. package/dist/deploy/node-runtime/download.js.map +1 -0
  111. package/dist/deploy/node-runtime/elf.d.ts +7 -0
  112. package/dist/deploy/node-runtime/elf.d.ts.map +1 -0
  113. package/dist/deploy/node-runtime/elf.js +100 -0
  114. package/dist/deploy/node-runtime/elf.js.map +1 -0
  115. package/dist/deploy/node-runtime/guard.d.ts +4 -0
  116. package/dist/deploy/node-runtime/guard.d.ts.map +1 -0
  117. package/dist/deploy/node-runtime/guard.js +22 -0
  118. package/dist/deploy/node-runtime/guard.js.map +1 -0
  119. package/dist/deploy/node-runtime/index.d.ts +4 -0
  120. package/dist/deploy/node-runtime/index.d.ts.map +1 -0
  121. package/dist/deploy/node-runtime/index.js +61 -0
  122. package/dist/deploy/node-runtime/index.js.map +1 -0
  123. package/dist/deploy/payload/copy-tree.d.ts +7 -0
  124. package/dist/deploy/payload/copy-tree.d.ts.map +1 -0
  125. package/dist/deploy/payload/copy-tree.js +36 -0
  126. package/dist/deploy/payload/copy-tree.js.map +1 -0
  127. package/dist/deploy/payload/icons.d.ts +6 -0
  128. package/dist/deploy/payload/icons.d.ts.map +1 -0
  129. package/dist/deploy/payload/icons.js +53 -0
  130. package/dist/deploy/payload/icons.js.map +1 -0
  131. package/dist/deploy/payload/launcher.d.ts +5 -0
  132. package/dist/deploy/payload/launcher.d.ts.map +1 -0
  133. package/dist/deploy/payload/launcher.js +22 -0
  134. package/dist/deploy/payload/launcher.js.map +1 -0
  135. package/dist/deploy/payload/schemas.d.ts +4 -0
  136. package/dist/deploy/payload/schemas.d.ts.map +1 -0
  137. package/dist/deploy/payload/schemas.js +17 -0
  138. package/dist/deploy/payload/schemas.js.map +1 -0
  139. package/dist/deploy/payload/stage.d.ts +15 -0
  140. package/dist/deploy/payload/stage.d.ts.map +1 -0
  141. package/dist/deploy/payload/stage.js +100 -0
  142. package/dist/deploy/payload/stage.js.map +1 -0
  143. package/dist/deploy/registry.d.ts +7 -0
  144. package/dist/deploy/registry.d.ts.map +1 -0
  145. package/dist/deploy/registry.js +30 -0
  146. package/dist/deploy/registry.js.map +1 -0
  147. package/dist/deploy/run-deploy.d.ts +11 -0
  148. package/dist/deploy/run-deploy.d.ts.map +1 -0
  149. package/dist/deploy/run-deploy.js +153 -0
  150. package/dist/deploy/run-deploy.js.map +1 -0
  151. package/dist/deploy/settings/arch.d.ts +4 -0
  152. package/dist/deploy/settings/arch.d.ts.map +1 -0
  153. package/dist/deploy/settings/arch.js +13 -0
  154. package/dist/deploy/settings/arch.js.map +1 -0
  155. package/dist/deploy/settings/categories.d.ts +4 -0
  156. package/dist/deploy/settings/categories.d.ts.map +1 -0
  157. package/dist/deploy/settings/categories.js +29 -0
  158. package/dist/deploy/settings/categories.js.map +1 -0
  159. package/dist/deploy/settings/exec.d.ts +6 -0
  160. package/dist/deploy/settings/exec.d.ts.map +1 -0
  161. package/dist/deploy/settings/exec.js +20 -0
  162. package/dist/deploy/settings/exec.js.map +1 -0
  163. package/dist/deploy/settings/identity.d.ts +18 -0
  164. package/dist/deploy/settings/identity.d.ts.map +1 -0
  165. package/dist/deploy/settings/identity.js +73 -0
  166. package/dist/deploy/settings/identity.js.map +1 -0
  167. package/dist/deploy/settings/index.d.ts +11 -0
  168. package/dist/deploy/settings/index.d.ts.map +1 -0
  169. package/dist/deploy/settings/index.js +103 -0
  170. package/dist/deploy/settings/index.js.map +1 -0
  171. package/dist/deploy/settings/package-manifest.d.ts +15 -0
  172. package/dist/deploy/settings/package-manifest.d.ts.map +1 -0
  173. package/dist/deploy/settings/package-manifest.js +41 -0
  174. package/dist/deploy/settings/package-manifest.js.map +1 -0
  175. package/dist/deploy/settings/paths.d.ts +9 -0
  176. package/dist/deploy/settings/paths.d.ts.map +1 -0
  177. package/dist/deploy/settings/paths.js +82 -0
  178. package/dist/deploy/settings/paths.js.map +1 -0
  179. package/dist/deploy/settings/screenshots.d.ts +8 -0
  180. package/dist/deploy/settings/screenshots.d.ts.map +1 -0
  181. package/dist/deploy/settings/screenshots.js +79 -0
  182. package/dist/deploy/settings/screenshots.js.map +1 -0
  183. package/dist/deploy/settings/starter.d.ts +4 -0
  184. package/dist/deploy/settings/starter.d.ts.map +1 -0
  185. package/dist/deploy/settings/starter.js +28 -0
  186. package/dist/deploy/settings/starter.js.map +1 -0
  187. package/dist/deploy/settings/version.d.ts +9 -0
  188. package/dist/deploy/settings/version.d.ts.map +1 -0
  189. package/dist/deploy/settings/version.js +37 -0
  190. package/dist/deploy/settings/version.js.map +1 -0
  191. package/dist/deploy/targets/appimage.d.ts +4 -0
  192. package/dist/deploy/targets/appimage.d.ts.map +1 -0
  193. package/dist/deploy/targets/appimage.js +105 -0
  194. package/dist/deploy/targets/appimage.js.map +1 -0
  195. package/dist/deploy/targets/deb.d.ts +4 -0
  196. package/dist/deploy/targets/deb.d.ts.map +1 -0
  197. package/dist/deploy/targets/deb.js +4 -0
  198. package/dist/deploy/targets/deb.js.map +1 -0
  199. package/dist/deploy/targets/flatpak-manifest.d.ts +6 -0
  200. package/dist/deploy/targets/flatpak-manifest.d.ts.map +1 -0
  201. package/dist/deploy/targets/flatpak-manifest.js +48 -0
  202. package/dist/deploy/targets/flatpak-manifest.js.map +1 -0
  203. package/dist/deploy/targets/flatpak-prebuilt.d.ts +8 -0
  204. package/dist/deploy/targets/flatpak-prebuilt.d.ts.map +1 -0
  205. package/dist/deploy/targets/flatpak-prebuilt.js +43 -0
  206. package/dist/deploy/targets/flatpak-prebuilt.js.map +1 -0
  207. package/dist/deploy/targets/flatpak-source.d.ts +5 -0
  208. package/dist/deploy/targets/flatpak-source.d.ts.map +1 -0
  209. package/dist/deploy/targets/flatpak-source.js +110 -0
  210. package/dist/deploy/targets/flatpak-source.js.map +1 -0
  211. package/dist/deploy/targets/flatpak-sources.d.ts +17 -0
  212. package/dist/deploy/targets/flatpak-sources.d.ts.map +1 -0
  213. package/dist/deploy/targets/flatpak-sources.js +108 -0
  214. package/dist/deploy/targets/flatpak-sources.js.map +1 -0
  215. package/dist/deploy/targets/flatpak.d.ts +4 -0
  216. package/dist/deploy/targets/flatpak.d.ts.map +1 -0
  217. package/dist/deploy/targets/flatpak.js +112 -0
  218. package/dist/deploy/targets/flatpak.js.map +1 -0
  219. package/dist/deploy/targets/nfpm-target.d.ts +5 -0
  220. package/dist/deploy/targets/nfpm-target.d.ts.map +1 -0
  221. package/dist/deploy/targets/nfpm-target.js +26 -0
  222. package/dist/deploy/targets/nfpm-target.js.map +1 -0
  223. package/dist/deploy/targets/rpm.d.ts +4 -0
  224. package/dist/deploy/targets/rpm.d.ts.map +1 -0
  225. package/dist/deploy/targets/rpm.js +4 -0
  226. package/dist/deploy/targets/rpm.js.map +1 -0
  227. package/dist/deploy/tools.d.ts +18 -0
  228. package/dist/deploy/tools.d.ts.map +1 -0
  229. package/dist/deploy/tools.js +92 -0
  230. package/dist/deploy/tools.js.map +1 -0
  231. package/dist/deploy/types.d.ts +140 -0
  232. package/dist/deploy/types.d.ts.map +1 -0
  233. package/dist/deploy/types.js +2 -0
  234. package/dist/deploy/types.js.map +1 -0
  235. package/dist/deploy/vendored/appimagetool.d.ts +7 -0
  236. package/dist/deploy/vendored/appimagetool.d.ts.map +1 -0
  237. package/dist/deploy/vendored/appimagetool.js +42 -0
  238. package/dist/deploy/vendored/appimagetool.js.map +1 -0
  239. package/dist/deploy/vendored/nfpm.d.ts +3 -0
  240. package/dist/deploy/vendored/nfpm.d.ts.map +1 -0
  241. package/dist/deploy/vendored/nfpm.js +60 -0
  242. package/dist/deploy/vendored/nfpm.js.map +1 -0
  243. package/dist/dev/change-queue.d.ts +11 -0
  244. package/dist/dev/change-queue.d.ts.map +1 -0
  245. package/dist/dev/change-queue.js +34 -0
  246. package/dist/dev/change-queue.js.map +1 -0
  247. package/dist/dev/entry-env.d.ts +3 -0
  248. package/dist/dev/entry-env.d.ts.map +1 -0
  249. package/dist/dev/entry-env.js +3 -0
  250. package/dist/dev/entry-env.js.map +1 -0
  251. package/dist/dev/failure-tracker.d.ts +10 -0
  252. package/dist/dev/failure-tracker.d.ts.map +1 -0
  253. package/dist/dev/failure-tracker.js +61 -0
  254. package/dist/dev/failure-tracker.js.map +1 -0
  255. package/dist/dev/missing-import.d.ts +4 -0
  256. package/dist/dev/missing-import.d.ts.map +1 -0
  257. package/dist/dev/missing-import.js +23 -0
  258. package/dist/dev/missing-import.js.map +1 -0
  259. package/dist/dev/runner-deps.d.ts.map +1 -1
  260. package/dist/dev/runner-deps.js +25 -5
  261. package/dist/dev/runner-deps.js.map +1 -1
  262. package/dist/dev/runner-main.d.ts.map +1 -1
  263. package/dist/dev/runner-main.js +3 -3
  264. package/dist/dev/runner-main.js.map +1 -1
  265. package/dist/dev/runner.d.ts +8 -3
  266. package/dist/dev/runner.d.ts.map +1 -1
  267. package/dist/dev/runner.js +343 -65
  268. package/dist/dev/runner.js.map +1 -1
  269. package/dist/dev/supervisor.d.ts +10 -4
  270. package/dist/dev/supervisor.d.ts.map +1 -1
  271. package/dist/dev/supervisor.js +23 -4
  272. package/dist/dev/supervisor.js.map +1 -1
  273. package/dist/dev/vite-dev-server.d.ts +13 -2
  274. package/dist/dev/vite-dev-server.d.ts.map +1 -1
  275. package/dist/dev/vite-dev-server.js +30 -2
  276. package/dist/dev/vite-dev-server.js.map +1 -1
  277. package/dist/internal/application-args.d.ts +6 -0
  278. package/dist/internal/application-args.d.ts.map +1 -0
  279. package/dist/internal/application-args.js +10 -0
  280. package/dist/internal/application-args.js.map +1 -0
  281. package/dist/internal/entry-arg.d.ts +1 -7
  282. package/dist/internal/entry-arg.d.ts.map +1 -1
  283. package/dist/internal/entry-arg.js +18 -11
  284. package/dist/internal/entry-arg.js.map +1 -1
  285. package/dist/internal/errors.d.ts +1 -2
  286. package/dist/internal/errors.d.ts.map +1 -1
  287. package/dist/internal/errors.js +1 -1
  288. package/dist/internal/errors.js.map +1 -1
  289. package/dist/internal/module-loads.d.ts +7 -0
  290. package/dist/internal/module-loads.d.ts.map +1 -0
  291. package/dist/internal/module-loads.js +21 -0
  292. package/dist/internal/module-loads.js.map +1 -0
  293. package/dist/internal/prepare-project.d.ts +16 -0
  294. package/dist/internal/prepare-project.d.ts.map +1 -0
  295. package/dist/internal/prepare-project.js +15 -0
  296. package/dist/internal/prepare-project.js.map +1 -0
  297. package/dist/internal/run-cli-tool.d.ts +11 -0
  298. package/dist/internal/run-cli-tool.d.ts.map +1 -0
  299. package/dist/internal/run-cli-tool.js +24 -0
  300. package/dist/internal/run-cli-tool.js.map +1 -0
  301. package/dist/internal/staging-dir.d.ts +8 -1
  302. package/dist/internal/staging-dir.d.ts.map +1 -1
  303. package/dist/internal/staging-dir.js +38 -2
  304. package/dist/internal/staging-dir.js.map +1 -1
  305. package/dist/mcp/client.d.ts +1 -1
  306. package/dist/mcp/client.d.ts.map +1 -1
  307. package/dist/mcp/client.js.map +1 -1
  308. package/dist/mcp/handlers.d.ts +1 -1
  309. package/dist/mcp/handlers.d.ts.map +1 -1
  310. package/dist/mcp/handlers.js +78 -41
  311. package/dist/mcp/handlers.js.map +1 -1
  312. package/dist/mcp/index.d.ts.map +1 -1
  313. package/dist/mcp/index.js +1 -0
  314. package/dist/mcp/index.js.map +1 -1
  315. package/dist/mcp/serialize-widget.d.ts +4 -3
  316. package/dist/mcp/serialize-widget.d.ts.map +1 -1
  317. package/dist/mcp/serialize-widget.js +47 -17
  318. package/dist/mcp/serialize-widget.js.map +1 -1
  319. package/dist/mcp/testing-loader.d.ts +5 -2
  320. package/dist/mcp/testing-loader.d.ts.map +1 -1
  321. package/dist/mcp/testing-loader.js +7 -3
  322. package/dist/mcp/testing-loader.js.map +1 -1
  323. package/dist/mcp/widget-properties.d.ts +6 -0
  324. package/dist/mcp/widget-properties.d.ts.map +1 -0
  325. package/dist/mcp/widget-properties.js +102 -0
  326. package/dist/mcp/widget-properties.js.map +1 -0
  327. package/dist/refresh-runtime.d.ts +2 -1
  328. package/dist/refresh-runtime.d.ts.map +1 -1
  329. package/dist/refresh-runtime.js +32 -2
  330. package/dist/refresh-runtime.js.map +1 -1
  331. package/dist/settings/compile.d.ts.map +1 -1
  332. package/dist/settings/compile.js +8 -12
  333. package/dist/settings/compile.js.map +1 -1
  334. package/dist/settings/schema.d.ts +1 -2
  335. package/dist/settings/schema.d.ts.map +1 -1
  336. package/dist/settings/schema.js +1 -1
  337. package/dist/settings/schema.js.map +1 -1
  338. package/dist/vite-plugins/asset-emitter.d.ts +9 -0
  339. package/dist/vite-plugins/asset-emitter.d.ts.map +1 -0
  340. package/dist/vite-plugins/asset-emitter.js +2 -0
  341. package/dist/vite-plugins/asset-emitter.js.map +1 -0
  342. package/dist/vite-plugins/asset-extensions.d.ts +2 -2
  343. package/dist/vite-plugins/asset-extensions.d.ts.map +1 -1
  344. package/dist/vite-plugins/asset-extensions.js +2 -1
  345. package/dist/vite-plugins/asset-extensions.js.map +1 -1
  346. package/dist/vite-plugins/asset-imports.d.ts +4 -0
  347. package/dist/vite-plugins/asset-imports.d.ts.map +1 -0
  348. package/dist/vite-plugins/asset-imports.js +88 -0
  349. package/dist/vite-plugins/asset-imports.js.map +1 -0
  350. package/dist/vite-plugins/asset-specifier.d.ts +5 -0
  351. package/dist/vite-plugins/asset-specifier.d.ts.map +1 -0
  352. package/dist/vite-plugins/asset-specifier.js +7 -0
  353. package/dist/vite-plugins/asset-specifier.js.map +1 -0
  354. package/dist/vite-plugins/built-url.d.ts.map +1 -1
  355. package/dist/vite-plugins/built-url.js +14 -10
  356. package/dist/vite-plugins/built-url.js.map +1 -1
  357. package/dist/vite-plugins/ensure-store.d.ts +4 -0
  358. package/dist/vite-plugins/ensure-store.d.ts.map +1 -0
  359. package/dist/vite-plugins/ensure-store.js +10 -0
  360. package/dist/vite-plugins/ensure-store.js.map +1 -0
  361. package/dist/vite-plugins/esm-extension.d.ts +4 -0
  362. package/dist/vite-plugins/esm-extension.d.ts.map +1 -0
  363. package/dist/vite-plugins/esm-extension.js +4 -0
  364. package/dist/vite-plugins/esm-extension.js.map +1 -0
  365. package/dist/vite-plugins/fast-refresh/swc-refresh.d.ts +1 -3
  366. package/dist/vite-plugins/fast-refresh/swc-refresh.d.ts.map +1 -1
  367. package/dist/vite-plugins/fast-refresh/swc-refresh.js +1 -1
  368. package/dist/vite-plugins/fast-refresh/swc-refresh.js.map +1 -1
  369. package/dist/vite-plugins/icons.d.ts.map +1 -1
  370. package/dist/vite-plugins/icons.js.map +1 -1
  371. package/dist/vite-plugins/index.d.ts.map +1 -1
  372. package/dist/vite-plugins/index.js +4 -0
  373. package/dist/vite-plugins/index.js.map +1 -1
  374. package/dist/vite-plugins/react-compiler.d.ts +1 -1
  375. package/dist/vite-plugins/react-compiler.d.ts.map +1 -1
  376. package/dist/vite-plugins/react-compiler.js.map +1 -1
  377. package/dist/vite-plugins/resource-shared.d.ts +2 -1
  378. package/dist/vite-plugins/resource-shared.d.ts.map +1 -1
  379. package/dist/vite-plugins/resource-shared.js +2 -1
  380. package/dist/vite-plugins/resource-shared.js.map +1 -1
  381. package/dist/vite-plugins/resources.d.ts +1 -1
  382. package/dist/vite-plugins/resources.d.ts.map +1 -1
  383. package/dist/vite-plugins/resources.js +36 -44
  384. package/dist/vite-plugins/resources.js.map +1 -1
  385. package/dist/vite-plugins/self-contained.d.ts +4 -0
  386. package/dist/vite-plugins/self-contained.d.ts.map +1 -0
  387. package/dist/vite-plugins/self-contained.js +244 -0
  388. package/dist/vite-plugins/self-contained.js.map +1 -0
  389. package/dist/vite-plugins/settings.d.ts.map +1 -1
  390. package/dist/vite-plugins/settings.js +19 -40
  391. package/dist/vite-plugins/settings.js.map +1 -1
  392. package/dist/vite-plugins/store-links.d.ts +4 -0
  393. package/dist/vite-plugins/store-links.d.ts.map +1 -0
  394. package/dist/vite-plugins/store-links.js +19 -0
  395. package/dist/vite-plugins/store-links.js.map +1 -0
  396. package/dist/vite-plugins/undeclared-library.d.ts +1 -1
  397. package/dist/vite-plugins/undeclared-library.d.ts.map +1 -1
  398. package/dist/vite-plugins/undeclared-library.js +51 -12
  399. package/dist/vite-plugins/undeclared-library.js.map +1 -1
  400. package/dist/vite-plugins/worker.d.ts +4 -0
  401. package/dist/vite-plugins/worker.d.ts.map +1 -0
  402. package/dist/vite-plugins/worker.js +138 -0
  403. package/dist/vite-plugins/worker.js.map +1 -0
  404. package/dist/vitest-plugin.d.ts +7 -0
  405. package/dist/vitest-plugin.d.ts.map +1 -1
  406. package/dist/vitest-plugin.js +14 -1
  407. package/dist/vitest-plugin.js.map +1 -1
  408. package/env.d.ts +106 -25
  409. package/package.json +23 -12
  410. package/src/builder.ts +24 -5
  411. package/src/cli.ts +10 -3
  412. package/src/codegen/freshness.ts +2 -4
  413. package/src/codegen/run-codegen.ts +37 -23
  414. package/src/codegen/store-resolver.ts +1 -1
  415. package/src/commands/build.ts +5 -6
  416. package/src/commands/codegen.ts +14 -1
  417. package/src/commands/deploy.ts +47 -0
  418. package/src/commands/dev.ts +7 -5
  419. package/src/commands/docs.ts +39 -4
  420. package/src/deploy/depends.ts +42 -0
  421. package/src/deploy/download.ts +148 -0
  422. package/src/deploy/freedesktop/copyright.ts +41 -0
  423. package/src/deploy/freedesktop/dbus-service.ts +19 -0
  424. package/src/deploy/freedesktop/desktop-entry.ts +102 -0
  425. package/src/deploy/freedesktop/ini.ts +39 -0
  426. package/src/deploy/freedesktop/metainfo-sections.ts +116 -0
  427. package/src/deploy/freedesktop/metainfo.ts +46 -0
  428. package/src/deploy/freedesktop/mime-package.ts +28 -0
  429. package/src/deploy/freedesktop/validate.ts +124 -0
  430. package/src/deploy/freedesktop/xml.ts +53 -0
  431. package/src/deploy/git.ts +20 -0
  432. package/src/deploy/install-hints.ts +108 -0
  433. package/src/deploy/nfpm/config.ts +153 -0
  434. package/src/deploy/nfpm/contents.ts +69 -0
  435. package/src/deploy/nfpm/description.ts +11 -0
  436. package/src/deploy/nfpm/optional.ts +8 -0
  437. package/src/deploy/nfpm/pack.ts +44 -0
  438. package/src/deploy/node-runtime/download.ts +48 -0
  439. package/src/deploy/node-runtime/elf.ts +145 -0
  440. package/src/deploy/node-runtime/guard.ts +29 -0
  441. package/src/deploy/node-runtime/index.ts +80 -0
  442. package/src/deploy/payload/copy-tree.ts +51 -0
  443. package/src/deploy/payload/icons.ts +80 -0
  444. package/src/deploy/payload/launcher.ts +27 -0
  445. package/src/deploy/payload/schemas.ts +27 -0
  446. package/src/deploy/payload/stage.ts +145 -0
  447. package/src/deploy/registry.ts +40 -0
  448. package/src/deploy/run-deploy.ts +235 -0
  449. package/src/deploy/settings/arch.ts +18 -0
  450. package/src/deploy/settings/categories.ts +39 -0
  451. package/src/deploy/settings/exec.ts +29 -0
  452. package/src/deploy/settings/identity.ts +133 -0
  453. package/src/deploy/settings/index.ts +189 -0
  454. package/src/deploy/settings/package-manifest.ts +66 -0
  455. package/src/deploy/settings/paths.ts +115 -0
  456. package/src/deploy/settings/screenshots.ts +125 -0
  457. package/src/deploy/settings/starter.ts +41 -0
  458. package/src/deploy/settings/version.ts +59 -0
  459. package/src/deploy/targets/appimage.ts +140 -0
  460. package/src/deploy/targets/deb.ts +6 -0
  461. package/src/deploy/targets/flatpak-manifest.ts +61 -0
  462. package/src/deploy/targets/flatpak-prebuilt.ts +59 -0
  463. package/src/deploy/targets/flatpak-source.ts +168 -0
  464. package/src/deploy/targets/flatpak-sources.ts +171 -0
  465. package/src/deploy/targets/flatpak.ts +143 -0
  466. package/src/deploy/targets/nfpm-target.ts +33 -0
  467. package/src/deploy/targets/rpm.ts +6 -0
  468. package/src/deploy/tools.ts +135 -0
  469. package/src/deploy/types.ts +174 -0
  470. package/src/deploy/vendored/appimagetool.ts +57 -0
  471. package/src/deploy/vendored/nfpm.ts +79 -0
  472. package/src/dev/change-queue.ts +59 -0
  473. package/src/dev/entry-env.ts +3 -0
  474. package/src/dev/failure-tracker.ts +92 -0
  475. package/src/dev/missing-import.ts +32 -0
  476. package/src/dev/runner-deps.ts +34 -5
  477. package/src/dev/runner-main.ts +3 -4
  478. package/src/dev/runner.ts +524 -89
  479. package/src/dev/supervisor.ts +51 -11
  480. package/src/dev/vite-dev-server.ts +54 -3
  481. package/src/internal/application-args.ts +13 -0
  482. package/src/internal/entry-arg.ts +25 -11
  483. package/src/internal/errors.ts +1 -1
  484. package/src/internal/module-loads.ts +32 -0
  485. package/src/internal/prepare-project.ts +23 -0
  486. package/src/internal/run-cli-tool.ts +38 -0
  487. package/src/internal/staging-dir.ts +57 -2
  488. package/src/mcp/client.ts +1 -1
  489. package/src/mcp/handlers.ts +123 -56
  490. package/src/mcp/index.ts +1 -0
  491. package/src/mcp/serialize-widget.ts +73 -22
  492. package/src/mcp/testing-loader.ts +19 -4
  493. package/src/mcp/widget-properties.ts +153 -0
  494. package/src/refresh-runtime.ts +48 -2
  495. package/src/settings/compile.ts +8 -11
  496. package/src/settings/schema.ts +0 -1
  497. package/src/vite-plugins/asset-emitter.ts +5 -0
  498. package/src/vite-plugins/asset-extensions.ts +2 -1
  499. package/src/vite-plugins/asset-imports.ts +134 -0
  500. package/src/vite-plugins/asset-specifier.ts +9 -0
  501. package/src/vite-plugins/built-url.ts +19 -13
  502. package/src/vite-plugins/ensure-store.ts +14 -0
  503. package/src/vite-plugins/esm-extension.ts +4 -0
  504. package/src/vite-plugins/fast-refresh/swc-refresh.ts +1 -1
  505. package/src/vite-plugins/icons.ts +2 -5
  506. package/src/vite-plugins/index.ts +4 -0
  507. package/src/vite-plugins/react-compiler.ts +2 -1
  508. package/src/vite-plugins/resource-shared.ts +2 -0
  509. package/src/vite-plugins/resources.ts +43 -52
  510. package/src/vite-plugins/self-contained.ts +352 -0
  511. package/src/vite-plugins/settings.ts +23 -50
  512. package/src/vite-plugins/store-links.ts +25 -0
  513. package/src/vite-plugins/undeclared-library.ts +75 -13
  514. package/src/vite-plugins/worker.ts +238 -0
  515. package/src/vitest-plugin.ts +15 -1
  516. package/dist/internal/resolve-cli-tool.d.ts +0 -3
  517. package/dist/internal/resolve-cli-tool.d.ts.map +0 -1
  518. package/dist/internal/resolve-cli-tool.js +0 -27
  519. package/dist/internal/resolve-cli-tool.js.map +0 -1
  520. package/src/internal/resolve-cli-tool.ts +0 -37
@@ -0,0 +1,22 @@
1
+ declare const deploy: import("citty").CommandDef<{
2
+ readonly target: {
3
+ readonly type: "string";
4
+ readonly description: `Comma-separated package formats to build (${string})`;
5
+ };
6
+ readonly out: {
7
+ readonly type: "string";
8
+ readonly description: "Output directory relative to the project root (default: build)";
9
+ };
10
+ readonly "print-manifests": {
11
+ readonly type: "boolean";
12
+ readonly description: "Write the generated manifests and metadata, then stop without packaging";
13
+ };
14
+ readonly "skip-build": {
15
+ readonly type: "boolean";
16
+ readonly description: "Package what is already in dist/ instead of rebuilding";
17
+ };
18
+ readonly entry: import("citty").PositionalArgDef;
19
+ readonly cwd: import("citty").StringArgDef;
20
+ }>;
21
+ export { deploy };
22
+ //# sourceMappingURL=deploy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deploy.d.ts","sourceRoot":"","sources":["../../src/commands/deploy.ts"],"names":[],"mappings":"AAQA,QAAA,MAAM,MAAM;;;;;;;;;;;;;;;;;;;EAoCV,CAAC;AAEH,OAAO,EAAE,MAAM,EAAE,CAAC"}
@@ -0,0 +1,44 @@
1
+ import { defineCommand } from "citty";
2
+ import { KNOWN_NAMES } from "../deploy/registry.js";
3
+ import { runDeploy } from "../deploy/run-deploy.js";
4
+ import { entryArg } from "../internal/entry-arg.js";
5
+ import { resolveProject } from "../internal/prepare-project.js";
6
+ const DEPLOY_MODE = "production";
7
+ const deploy = defineCommand({
8
+ meta: {
9
+ name: "deploy",
10
+ description: "Package the application for distribution",
11
+ },
12
+ args: {
13
+ ...entryArg,
14
+ target: {
15
+ type: "string",
16
+ description: `Comma-separated package formats to build (${KNOWN_NAMES})`,
17
+ },
18
+ out: {
19
+ type: "string",
20
+ description: "Output directory relative to the project root (default: build)",
21
+ },
22
+ "print-manifests": {
23
+ type: "boolean",
24
+ description: "Write the generated manifests and metadata, then stop without packaging",
25
+ },
26
+ "skip-build": {
27
+ type: "boolean",
28
+ description: "Package what is already in dist/ instead of rebuilding",
29
+ },
30
+ },
31
+ async run({ args }) {
32
+ const { cwd, entry } = await resolveProject(args, DEPLOY_MODE);
33
+ await runDeploy({
34
+ entry,
35
+ cwd,
36
+ targets: args.target,
37
+ outDir: args.out,
38
+ shouldPrintManifests: args["print-manifests"] === true,
39
+ shouldSkipBuild: args["skip-build"] === true,
40
+ });
41
+ },
42
+ });
43
+ export { deploy };
44
+ //# sourceMappingURL=deploy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deploy.js","sourceRoot":"","sources":["../../src/commands/deploy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AACtC,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAEhE,MAAM,WAAW,GAAG,YAAY,CAAC;AAEjC,MAAM,MAAM,GAAG,aAAa,CAAC;IACzB,IAAI,EAAE;QACF,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,0CAA0C;KAC1D;IACD,IAAI,EAAE;QACF,GAAG,QAAQ;QACX,MAAM,EAAE;YACJ,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,6CAA6C,WAAW,GAAG;SAC3E;QACD,GAAG,EAAE;YACD,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,gEAAgE;SAChF;QACD,iBAAiB,EAAE;YACf,IAAI,EAAE,SAAS;YACf,WAAW,EAAE,yEAAyE;SACzF;QACD,YAAY,EAAE;YACV,IAAI,EAAE,SAAS;YACf,WAAW,EAAE,wDAAwD;SACxE;KACJ;IACD,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE;QACd,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,MAAM,cAAc,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QAE/D,MAAM,SAAS,CAAC;YACZ,KAAK;YACL,GAAG;YACH,OAAO,EAAE,IAAI,CAAC,MAAM;YACpB,MAAM,EAAE,IAAI,CAAC,GAAG;YAChB,oBAAoB,EAAE,IAAI,CAAC,iBAAiB,CAAC,KAAK,IAAI;YACtD,eAAe,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK,IAAI;SAC/C,CAAC,CAAC;IACP,CAAC;CACJ,CAAC,CAAC;AAEH,OAAO,EAAE,MAAM,EAAE,CAAC","sourcesContent":["import { defineCommand } from \"citty\";\nimport { KNOWN_NAMES } from \"../deploy/registry.js\";\nimport { runDeploy } from \"../deploy/run-deploy.js\";\nimport { entryArg } from \"../internal/entry-arg.js\";\nimport { resolveProject } from \"../internal/prepare-project.js\";\n\nconst DEPLOY_MODE = \"production\";\n\nconst deploy = defineCommand({\n meta: {\n name: \"deploy\",\n description: \"Package the application for distribution\",\n },\n args: {\n ...entryArg,\n target: {\n type: \"string\",\n description: `Comma-separated package formats to build (${KNOWN_NAMES})`,\n },\n out: {\n type: \"string\",\n description: \"Output directory relative to the project root (default: build)\",\n },\n \"print-manifests\": {\n type: \"boolean\",\n description: \"Write the generated manifests and metadata, then stop without packaging\",\n },\n \"skip-build\": {\n type: \"boolean\",\n description: \"Package what is already in dist/ instead of rebuilding\",\n },\n },\n async run({ args }) {\n const { cwd, entry } = await resolveProject(args, DEPLOY_MODE);\n\n await runDeploy({\n entry,\n cwd,\n targets: args.target,\n outDir: args.out,\n shouldPrintManifests: args[\"print-manifests\"] === true,\n shouldSkipBuild: args[\"skip-build\"] === true,\n });\n },\n});\n\nexport { deploy };\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"dev.d.ts","sourceRoot":"","sources":["../../src/commands/dev.ts"],"names":[],"mappings":"AAOA,QAAA,MAAM,GAAG;;;EAcP,CAAC;AAEH,OAAO,EAAE,GAAG,EAAE,CAAC"}
1
+ {"version":3,"file":"dev.d.ts","sourceRoot":"","sources":["../../src/commands/dev.ts"],"names":[],"mappings":"AASA,QAAA,MAAM,GAAG;;;EAcP,CAAC;AAEH,OAAO,EAAE,GAAG,EAAE,CAAC"}
@@ -1,7 +1,9 @@
1
1
  import { defineCommand } from "citty";
2
- import { ensureGenerated, resolveConfigWatch } from "../codegen/run-codegen.js";
2
+ import { resolveConfigWatch } from "../codegen/run-codegen.js";
3
3
  import { runDevSupervisor } from "../dev/supervisor.js";
4
- import { entryArg, resolveEntry } from "../internal/entry-arg.js";
4
+ import { splitApplicationArgs } from "../internal/application-args.js";
5
+ import { entryArg } from "../internal/entry-arg.js";
6
+ import { prepareProject } from "../internal/prepare-project.js";
5
7
  const DEV_MODE = "development";
6
8
  const dev = defineCommand({
7
9
  meta: {
@@ -12,10 +14,10 @@ const dev = defineCommand({
12
14
  ...entryArg,
13
15
  },
14
16
  async run({ args }) {
15
- const { cwd, entry: entryPath } = resolveEntry(args);
16
- await ensureGenerated(cwd, { shouldAnnounce: true, mode: DEV_MODE });
17
+ const { cwd, entry: entryPath } = await prepareProject(args, DEV_MODE);
17
18
  const watch = await resolveConfigWatch(cwd, DEV_MODE);
18
- await runDevSupervisor(entryPath, cwd, watch);
19
+ const { applicationArgs } = splitApplicationArgs(process.argv.slice(2));
20
+ await runDevSupervisor({ entryPath, cwd, args: applicationArgs, watch });
19
21
  },
20
22
  });
21
23
  export { dev };
@@ -1 +1 @@
1
- {"version":3,"file":"dev.js","sourceRoot":"","sources":["../../src/commands/dev.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AACtC,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAChF,OAAO,EAAiB,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACvE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAElE,MAAM,QAAQ,GAAG,aAAa,CAAC;AAE/B,MAAM,GAAG,GAAG,aAAa,CAAC;IACtB,IAAI,EAAE;QACF,IAAI,EAAE,KAAK;QACX,WAAW,EAAE,mCAAmC;KACnD;IACD,IAAI,EAAE;QACF,GAAG,QAAQ;KACd;IACD,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE;QACd,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;QACrD,MAAM,eAAe,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;QACrE,MAAM,KAAK,GAAyB,MAAM,kBAAkB,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QAC5E,MAAM,gBAAgB,CAAC,SAAS,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;IAClD,CAAC;CACJ,CAAC,CAAC;AAEH,OAAO,EAAE,GAAG,EAAE,CAAC","sourcesContent":["import { defineCommand } from \"citty\";\nimport { ensureGenerated, resolveConfigWatch } from \"../codegen/run-codegen.js\";\nimport { type DevWatch, runDevSupervisor } from \"../dev/supervisor.js\";\nimport { entryArg, resolveEntry } from \"../internal/entry-arg.js\";\n\nconst DEV_MODE = \"development\";\n\nconst dev = defineCommand({\n meta: {\n name: \"dev\",\n description: \"Start development server with HMR\",\n },\n args: {\n ...entryArg,\n },\n async run({ args }) {\n const { cwd, entry: entryPath } = resolveEntry(args);\n await ensureGenerated(cwd, { shouldAnnounce: true, mode: DEV_MODE });\n const watch: DevWatch | undefined = await resolveConfigWatch(cwd, DEV_MODE);\n await runDevSupervisor(entryPath, cwd, watch);\n },\n});\n\nexport { dev };\n"]}
1
+ {"version":3,"file":"dev.js","sourceRoot":"","sources":["../../src/commands/dev.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AACtC,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAiB,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACvE,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AACvE,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAEhE,MAAM,QAAQ,GAAG,aAAa,CAAC;AAE/B,MAAM,GAAG,GAAG,aAAa,CAAC;IACtB,IAAI,EAAE;QACF,IAAI,EAAE,KAAK;QACX,WAAW,EAAE,mCAAmC;KACnD;IACD,IAAI,EAAE;QACF,GAAG,QAAQ;KACd;IACD,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE;QACd,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,MAAM,cAAc,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QACvE,MAAM,KAAK,GAAyB,MAAM,kBAAkB,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QAC5E,MAAM,EAAE,eAAe,EAAE,GAAG,oBAAoB,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACxE,MAAM,gBAAgB,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,CAAC,CAAC;IAC7E,CAAC;CACJ,CAAC,CAAC;AAEH,OAAO,EAAE,GAAG,EAAE,CAAC","sourcesContent":["import { defineCommand } from \"citty\";\nimport { resolveConfigWatch } from \"../codegen/run-codegen.js\";\nimport { type DevWatch, runDevSupervisor } from \"../dev/supervisor.js\";\nimport { splitApplicationArgs } from \"../internal/application-args.js\";\nimport { entryArg } from \"../internal/entry-arg.js\";\nimport { prepareProject } from \"../internal/prepare-project.js\";\n\nconst DEV_MODE = \"development\";\n\nconst dev = defineCommand({\n meta: {\n name: \"dev\",\n description: \"Start development server with HMR\",\n },\n args: {\n ...entryArg,\n },\n async run({ args }) {\n const { cwd, entry: entryPath } = await prepareProject(args, DEV_MODE);\n const watch: DevWatch | undefined = await resolveConfigWatch(cwd, DEV_MODE);\n const { applicationArgs } = splitApplicationArgs(process.argv.slice(2));\n await runDevSupervisor({ entryPath, cwd, args: applicationArgs, watch });\n },\n});\n\nexport { dev };\n"]}
@@ -2,7 +2,7 @@ declare const docs: import("citty").CommandDef<{
2
2
  readonly cwd: import("citty").StringArgDef;
3
3
  readonly out: {
4
4
  readonly type: "string";
5
- readonly description: "Output directory for the generated markdown pages, relative to the project root";
5
+ readonly description: string;
6
6
  readonly default: "docs/reference";
7
7
  };
8
8
  readonly "base-path": {
@@ -12,7 +12,7 @@ declare const docs: import("citty").CommandDef<{
12
12
  };
13
13
  readonly force: {
14
14
  readonly type: "boolean";
15
- readonly description: "Regenerate even when the pages are up to date with the GIR libraries";
15
+ readonly description: string;
16
16
  readonly default: false;
17
17
  };
18
18
  }>;
@@ -1 +1 @@
1
- {"version":3,"file":"docs.d.ts","sourceRoot":"","sources":["../../src/commands/docs.ts"],"names":[],"mappings":"AAkBA,QAAA,MAAM,IAAI;;;;;;;;;;;;;;;;;EAyER,CAAC;AAcH,OAAO,EAAE,IAAI,EAAE,CAAC"}
1
+ {"version":3,"file":"docs.d.ts","sourceRoot":"","sources":["../../src/commands/docs.ts"],"names":[],"mappings":"AAkBA,QAAA,MAAM,IAAI;;;;;;;;;;;;;;;;;EA6ER,CAAC;AA6CH,OAAO,EAAE,IAAI,EAAE,CAAC"}
@@ -5,7 +5,7 @@ import { resolveOmittedProps } from "@gtkx/config/internal";
5
5
  import { info } from "@gtkx/utils";
6
6
  import { defineCommand } from "citty";
7
7
  import { existsSync } from "node:fs";
8
- import { resolve } from "node:path";
8
+ import { isAbsolute, relative, resolve, sep } from "node:path";
9
9
  import { cwdArg, resolveCwd } from "../internal/entry-arg.js";
10
10
  const docs = defineCommand({
11
11
  meta: {
@@ -15,7 +15,8 @@ const docs = defineCommand({
15
15
  args: {
16
16
  out: {
17
17
  type: "string",
18
- description: "Output directory for the generated markdown pages, relative to the project root",
18
+ description: "Output directory for the generated markdown pages, below the project root. It must be empty " +
19
+ "or hold an earlier `gtkx docs` run, whose pages are replaced",
19
20
  default: "docs/reference",
20
21
  },
21
22
  "base-path": {
@@ -25,7 +26,8 @@ const docs = defineCommand({
25
26
  },
26
27
  force: {
27
28
  type: "boolean",
28
- description: "Regenerate even when the pages are up to date with the GIR libraries",
29
+ description: "Regenerate even when the pages are up to date with the GIR libraries, the base path, " +
30
+ "and the element props the project configures",
29
31
  default: false,
30
32
  },
31
33
  ...cwdArg,
@@ -45,7 +47,7 @@ const docs = defineCommand({
45
47
  }
46
48
  const libraries = resolveLibraries(config.libraries, girPath);
47
49
  const startedAt = Date.now();
48
- const outDir = resolve(cwd, args.out);
50
+ const outDir = resolveOutDir(cwd, args.out);
49
51
  const builtin = await resolveDocsElements(cwd);
50
52
  const { isRegenerated, namespaces } = writeDocs({
51
53
  libraries,
@@ -65,6 +67,27 @@ const docs = defineCommand({
65
67
  `to ${outDir} in ${String(Date.now() - startedAt)}ms`);
66
68
  },
67
69
  });
70
+ const isBelow = (parent, child) => {
71
+ const path = relative(parent, child);
72
+ return path !== "" && path !== ".." && !path.startsWith(`..${sep}`) && !isAbsolute(path);
73
+ };
74
+ const outDirReason = (cwd, out, outDir) => {
75
+ if (out.trim() === "") {
76
+ return "it was empty, which names the project root itself";
77
+ }
78
+ if (outDir === cwd) {
79
+ return "it names the project root itself";
80
+ }
81
+ return `${outDir} is outside it`;
82
+ };
83
+ const resolveOutDir = (cwd, out) => {
84
+ const outDir = out.trim() === "" ? cwd : resolve(cwd, out);
85
+ if (isBelow(cwd, outDir)) {
86
+ return outDir;
87
+ }
88
+ throw new Error(`--out must name a directory below the project root ${cwd}, and ${outDirReason(cwd, out, outDir)}. ` +
89
+ "Pass a path such as --out=docs/reference.");
90
+ };
68
91
  const resolveDocsElements = async (cwd) => {
69
92
  const { gi, reactSubexports } = resolveStore(cwd);
70
93
  if (!existsSync(gi.storeDir)) {
@@ -1 +1 @@
1
- {"version":3,"file":"docs.js","sourceRoot":"","sources":["../../src/commands/docs.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n type ElementProps,\n mergeOmittedProps,\n type OmittedProps,\n readBuiltinElements,\n resolveGirPath,\n resolveLibraries,\n resolveStore,\n} from \"@gtkx/codegen\";\nimport { writeDocs } from \"@gtkx/codegen/internal\";\nimport { loadConfig } from \"@gtkx/config\";\nimport { resolveOmittedProps } from \"@gtkx/config/internal\";\nimport { info } from \"@gtkx/utils\";\nimport { defineCommand } from \"citty\";\nimport { existsSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\nimport { cwdArg, resolveCwd } from \"../internal/entry-arg.js\";\n\nconst docs = defineCommand({\n meta: {\n name: \"docs\",\n description:\n \"Generate markdown reference pages for the JSX elements of the GIR libraries declared in gtkx.config.ts\",\n },\n args: {\n out: {\n type: \"string\",\n description: \"Output directory for the generated markdown pages, relative to the project root\",\n default: \"docs/reference\",\n },\n \"base-path\": {\n type: \"string\",\n description: \"URL base path used for links between generated pages\",\n default: \"/reference\",\n },\n force: {\n type: \"boolean\",\n description: \"Regenerate even when the pages are up to date with the GIR libraries\",\n default: false,\n },\n ...cwdArg,\n },\n async run({ args }) {\n const cwd = resolveCwd(args);\n const { config } = await loadConfig(cwd);\n\n if (config.codegen === false) {\n throw new Error(\n \"codegen is disabled for this project, so there are no GIR libraries to document. \" +\n \"Remove `codegen: false` from gtkx.config.ts to use `gtkx docs`.\",\n );\n }\n\n const girPath = resolveGirPath(config.girPath);\n\n if (girPath.length === 0) {\n throw new Error(\n \"No GIR search paths available. Install gobject-introspection \" +\n \"(Linux: `sudo dnf install gobject-introspection-devel` or \" +\n \"`sudo apt install libgirepository1.0-dev`), or set `girPath` in gtkx.config.ts.\",\n );\n }\n\n const libraries = resolveLibraries(config.libraries, girPath);\n const startedAt = Date.now();\n const outDir = resolve(cwd, args.out);\n const builtin = await resolveDocsElements(cwd);\n\n const { isRegenerated, namespaces } = writeDocs({\n libraries,\n girPath,\n outDir,\n basePath: args[\"base-path\"],\n props: builtin.props,\n omittedProps: mergeOmittedProps(builtin.omittedProps, resolveOmittedProps(config.elements)),\n isForced: args.force,\n });\n\n if (!isRegenerated) {\n info(`docs: pages in ${outDir} are up to date`);\n\n return;\n }\n\n const count = namespaces.reduce((total, namespace) => total + namespace.elements.length, 0);\n\n info(\n `docs: wrote ${String(count)} element pages across ${String(namespaces.length)} namespaces ` +\n `to ${outDir} in ${String(Date.now() - startedAt)}ms`,\n );\n },\n});\n\nconst resolveDocsElements = async (cwd: string): Promise<{ props: ElementProps; omittedProps: OmittedProps }> => {\n const { gi, reactSubexports } = resolveStore(cwd);\n\n if (!existsSync(gi.storeDir)) {\n return { props: {}, omittedProps: {} };\n }\n\n const { props, omittedProps } = await readBuiltinElements(reactSubexports, gi.storeDir);\n\n return { props, omittedProps };\n};\n\nexport { docs };\n"]}
1
+ {"version":3,"file":"docs.js","sourceRoot":"","sources":["../../src/commands/docs.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n type ElementProps,\n mergeOmittedProps,\n type OmittedProps,\n readBuiltinElements,\n resolveGirPath,\n resolveLibraries,\n resolveStore,\n} from \"@gtkx/codegen\";\nimport { writeDocs } from \"@gtkx/codegen/internal\";\nimport { loadConfig } from \"@gtkx/config\";\nimport { resolveOmittedProps } from \"@gtkx/config/internal\";\nimport { info } from \"@gtkx/utils\";\nimport { defineCommand } from \"citty\";\nimport { existsSync } from \"node:fs\";\nimport { isAbsolute, relative, resolve, sep } from \"node:path\";\nimport { cwdArg, resolveCwd } from \"../internal/entry-arg.js\";\n\nconst docs = defineCommand({\n meta: {\n name: \"docs\",\n description:\n \"Generate markdown reference pages for the JSX elements of the GIR libraries declared in gtkx.config.ts\",\n },\n args: {\n out: {\n type: \"string\",\n description:\n \"Output directory for the generated markdown pages, below the project root. It must be empty \" +\n \"or hold an earlier `gtkx docs` run, whose pages are replaced\",\n default: \"docs/reference\",\n },\n \"base-path\": {\n type: \"string\",\n description: \"URL base path used for links between generated pages\",\n default: \"/reference\",\n },\n force: {\n type: \"boolean\",\n description:\n \"Regenerate even when the pages are up to date with the GIR libraries, the base path, \" +\n \"and the element props the project configures\",\n default: false,\n },\n ...cwdArg,\n },\n async run({ args }) {\n const cwd = resolveCwd(args);\n const { config } = await loadConfig(cwd);\n\n if (config.codegen === false) {\n throw new Error(\n \"codegen is disabled for this project, so there are no GIR libraries to document. \" +\n \"Remove `codegen: false` from gtkx.config.ts to use `gtkx docs`.\",\n );\n }\n\n const girPath = resolveGirPath(config.girPath);\n\n if (girPath.length === 0) {\n throw new Error(\n \"No GIR search paths available. Install gobject-introspection \" +\n \"(Linux: `sudo dnf install gobject-introspection-devel` or \" +\n \"`sudo apt install libgirepository1.0-dev`), or set `girPath` in gtkx.config.ts.\",\n );\n }\n\n const libraries = resolveLibraries(config.libraries, girPath);\n const startedAt = Date.now();\n const outDir = resolveOutDir(cwd, args.out);\n const builtin = await resolveDocsElements(cwd);\n\n const { isRegenerated, namespaces } = writeDocs({\n libraries,\n girPath,\n outDir,\n basePath: args[\"base-path\"],\n props: builtin.props,\n omittedProps: mergeOmittedProps(builtin.omittedProps, resolveOmittedProps(config.elements)),\n isForced: args.force,\n });\n\n if (!isRegenerated) {\n info(`docs: pages in ${outDir} are up to date`);\n\n return;\n }\n\n const count = namespaces.reduce((total, namespace) => total + namespace.elements.length, 0);\n\n info(\n `docs: wrote ${String(count)} element pages across ${String(namespaces.length)} namespaces ` +\n `to ${outDir} in ${String(Date.now() - startedAt)}ms`,\n );\n },\n});\n\nconst isBelow = (parent: string, child: string): boolean => {\n const path = relative(parent, child);\n\n return path !== \"\" && path !== \"..\" && !path.startsWith(`..${sep}`) && !isAbsolute(path);\n};\n\nconst outDirReason = (cwd: string, out: string, outDir: string): string => {\n if (out.trim() === \"\") {\n return \"it was empty, which names the project root itself\";\n }\n\n if (outDir === cwd) {\n return \"it names the project root itself\";\n }\n\n return `${outDir} is outside it`;\n};\n\nconst resolveOutDir = (cwd: string, out: string): string => {\n const outDir = out.trim() === \"\" ? cwd : resolve(cwd, out);\n\n if (isBelow(cwd, outDir)) {\n return outDir;\n }\n\n throw new Error(\n `--out must name a directory below the project root ${cwd}, and ${outDirReason(cwd, out, outDir)}. ` +\n \"Pass a path such as --out=docs/reference.\",\n );\n};\n\nconst resolveDocsElements = async (cwd: string): Promise<{ props: ElementProps; omittedProps: OmittedProps }> => {\n const { gi, reactSubexports } = resolveStore(cwd);\n\n if (!existsSync(gi.storeDir)) {\n return { props: {}, omittedProps: {} };\n }\n\n const { props, omittedProps } = await readBuiltinElements(reactSubexports, gi.storeDir);\n\n return { props, omittedProps };\n};\n\nexport { docs };\n"]}
@@ -0,0 +1,8 @@
1
+ import type { DeployConfig } from "./types.js";
2
+ type Relations = {
3
+ deb: string[];
4
+ rpm: string[];
5
+ };
6
+ declare const resolveDepends: (deploy: DeployConfig, libraries: string[], glibcFloor: string | null) => Relations;
7
+ export { resolveDepends };
8
+ //# sourceMappingURL=depends.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"depends.d.ts","sourceRoot":"","sources":["../../src/deploy/depends.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C,KAAK,SAAS,GAAG;IACb,GAAG,EAAE,MAAM,EAAE,CAAC;IACd,GAAG,EAAE,MAAM,EAAE,CAAC;CACjB,CAAC;AA0BF,QAAA,MAAM,cAAc,GAAI,QAAQ,YAAY,EAAE,WAAW,MAAM,EAAE,EAAE,YAAY,MAAM,GAAG,IAAI,KAAG,SAQ9F,CAAC;AAEF,OAAO,EAAE,cAAc,EAAE,CAAC"}
@@ -0,0 +1,27 @@
1
+ const GLES_SONAME = "libGLESv2.so.2()(64bit)";
2
+ const BASE_DEPENDS = {
3
+ deb: ["hicolor-icon-theme", "adwaita-icon-theme", "gsettings-desktop-schemas"],
4
+ rpm: ["hicolor-icon-theme", "adwaita-icon-theme", "gsettings-desktop-schemas"],
5
+ };
6
+ const DEPENDS_BY_LIBRARY = {
7
+ "Adw-1": { deb: ["libadwaita-1-0"], rpm: ["libadwaita"] },
8
+ "Gtk-4.0": { deb: ["libgtk-4-1"], rpm: ["gtk4", GLES_SONAME] },
9
+ "GtkSource-5": { deb: ["libgtksourceview-5-0"], rpm: ["gtksourceview5"] },
10
+ "WebKit-6.0": { deb: ["libwebkitgtk-6.0-4"], rpm: ["webkitgtk6.0"] },
11
+ };
12
+ const libraryDepends = (libraries) => ({
13
+ deb: libraries.flatMap((library) => DEPENDS_BY_LIBRARY[library]?.deb ?? []),
14
+ rpm: libraries.flatMap((library) => DEPENDS_BY_LIBRARY[library]?.rpm ?? []),
15
+ });
16
+ const glibcDepends = (glibcFloor) => glibcFloor === null ? { deb: [], rpm: [] } : { deb: [`libc6 (>= ${glibcFloor})`], rpm: [`glibc >= ${glibcFloor}`] };
17
+ const dedupe = (entries) => [...new Set(entries)];
18
+ const resolveDepends = (deploy, libraries, glibcFloor) => {
19
+ const fromLibraries = libraryDepends(libraries);
20
+ const fromGlibc = glibcDepends(glibcFloor);
21
+ return {
22
+ deb: dedupe([...fromLibraries.deb, ...BASE_DEPENDS.deb, ...fromGlibc.deb, ...(deploy.depends?.deb ?? [])]),
23
+ rpm: dedupe([...fromLibraries.rpm, ...BASE_DEPENDS.rpm, ...fromGlibc.rpm, ...(deploy.depends?.rpm ?? [])]),
24
+ };
25
+ };
26
+ export { resolveDepends };
27
+ //# sourceMappingURL=depends.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"depends.js","sourceRoot":"","sources":["../../src/deploy/depends.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,GAAG,yBAAyB,CAAC;AAE9C,MAAM,YAAY,GAAc;IAC5B,GAAG,EAAE,CAAC,oBAAoB,EAAE,oBAAoB,EAAE,2BAA2B,CAAC;IAC9E,GAAG,EAAE,CAAC,oBAAoB,EAAE,oBAAoB,EAAE,2BAA2B,CAAC;CACjF,CAAC;AAEF,MAAM,kBAAkB,GAA8B;IAClD,OAAO,EAAE,EAAE,GAAG,EAAE,CAAC,gBAAgB,CAAC,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,EAAE;IACzD,SAAS,EAAE,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,EAAE,GAAG,EAAE,CAAC,MAAM,EAAE,WAAW,CAAC,EAAE;IAC9D,aAAa,EAAE,EAAE,GAAG,EAAE,CAAC,sBAAsB,CAAC,EAAE,GAAG,EAAE,CAAC,gBAAgB,CAAC,EAAE;IACzE,YAAY,EAAE,EAAE,GAAG,EAAE,CAAC,oBAAoB,CAAC,EAAE,GAAG,EAAE,CAAC,cAAc,CAAC,EAAE;CACvE,CAAC;AAEF,MAAM,cAAc,GAAG,CAAC,SAAmB,EAAa,EAAE,CAAC,CAAC;IACxD,GAAG,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,kBAAkB,CAAC,OAAO,CAAC,EAAE,GAAG,IAAI,EAAE,CAAC;IAC3E,GAAG,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,kBAAkB,CAAC,OAAO,CAAC,EAAE,GAAG,IAAI,EAAE,CAAC;CAC9E,CAAC,CAAC;AAEH,MAAM,YAAY,GAAG,CAAC,UAAyB,EAAa,EAAE,CAC1D,UAAU,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,aAAa,UAAU,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,YAAY,UAAU,EAAE,CAAC,EAAE,CAAC;AAExH,MAAM,MAAM,GAAG,CAAC,OAAiB,EAAY,EAAE,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;AAEtE,MAAM,cAAc,GAAG,CAAC,MAAoB,EAAE,SAAmB,EAAE,UAAyB,EAAa,EAAE;IACvG,MAAM,aAAa,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC;IAChD,MAAM,SAAS,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC;IAE3C,OAAO;QACH,GAAG,EAAE,MAAM,CAAC,CAAC,GAAG,aAAa,CAAC,GAAG,EAAE,GAAG,YAAY,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,GAAG,EAAE,GAAG,CAAC,MAAM,CAAC,OAAO,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC;QAC1G,GAAG,EAAE,MAAM,CAAC,CAAC,GAAG,aAAa,CAAC,GAAG,EAAE,GAAG,YAAY,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,GAAG,EAAE,GAAG,CAAC,MAAM,CAAC,OAAO,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC;KAC7G,CAAC;AACN,CAAC,CAAC;AAEF,OAAO,EAAE,cAAc,EAAE,CAAC","sourcesContent":["import type { DeployConfig } from \"./types.js\";\n\ntype Relations = {\n deb: string[];\n rpm: string[];\n};\n\nconst GLES_SONAME = \"libGLESv2.so.2()(64bit)\";\n\nconst BASE_DEPENDS: Relations = {\n deb: [\"hicolor-icon-theme\", \"adwaita-icon-theme\", \"gsettings-desktop-schemas\"],\n rpm: [\"hicolor-icon-theme\", \"adwaita-icon-theme\", \"gsettings-desktop-schemas\"],\n};\n\nconst DEPENDS_BY_LIBRARY: Record<string, Relations> = {\n \"Adw-1\": { deb: [\"libadwaita-1-0\"], rpm: [\"libadwaita\"] },\n \"Gtk-4.0\": { deb: [\"libgtk-4-1\"], rpm: [\"gtk4\", GLES_SONAME] },\n \"GtkSource-5\": { deb: [\"libgtksourceview-5-0\"], rpm: [\"gtksourceview5\"] },\n \"WebKit-6.0\": { deb: [\"libwebkitgtk-6.0-4\"], rpm: [\"webkitgtk6.0\"] },\n};\n\nconst libraryDepends = (libraries: string[]): Relations => ({\n deb: libraries.flatMap((library) => DEPENDS_BY_LIBRARY[library]?.deb ?? []),\n rpm: libraries.flatMap((library) => DEPENDS_BY_LIBRARY[library]?.rpm ?? []),\n});\n\nconst glibcDepends = (glibcFloor: string | null): Relations =>\n glibcFloor === null ? { deb: [], rpm: [] } : { deb: [`libc6 (>= ${glibcFloor})`], rpm: [`glibc >= ${glibcFloor}`] };\n\nconst dedupe = (entries: string[]): string[] => [...new Set(entries)];\n\nconst resolveDepends = (deploy: DeployConfig, libraries: string[], glibcFloor: string | null): Relations => {\n const fromLibraries = libraryDepends(libraries);\n const fromGlibc = glibcDepends(glibcFloor);\n\n return {\n deb: dedupe([...fromLibraries.deb, ...BASE_DEPENDS.deb, ...fromGlibc.deb, ...(deploy.depends?.deb ?? [])]),\n rpm: dedupe([...fromLibraries.rpm, ...BASE_DEPENDS.rpm, ...fromGlibc.rpm, ...(deploy.depends?.rpm ?? [])]),\n };\n};\n\nexport { resolveDepends };\n"]}
@@ -0,0 +1,20 @@
1
+ type DigestRequest = {
2
+ url: string;
3
+ dest: string;
4
+ assetName: string;
5
+ subject: string;
6
+ };
7
+ type DownloadRequest = {
8
+ url: string;
9
+ dest: string;
10
+ label: string;
11
+ sha256: string;
12
+ freshSha256?: (() => Promise<string>) | undefined;
13
+ mode?: number | undefined;
14
+ };
15
+ declare const cacheDir: (segments: string[]) => string;
16
+ declare const publishedDigest: (request: DigestRequest) => Promise<string>;
17
+ declare const cachedDigest: (request: DigestRequest) => Promise<string>;
18
+ declare const downloadFile: (request: DownloadRequest) => Promise<string>;
19
+ export { cacheDir, cachedDigest, type DigestRequest, downloadFile, publishedDigest };
20
+ //# sourceMappingURL=download.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"download.d.ts","sourceRoot":"","sources":["../../src/deploy/download.ts"],"names":[],"mappings":"AAMA,KAAK,aAAa,GAAG;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,KAAK,eAAe,GAAG;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,CAAC,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,SAAS,CAAC;IAClD,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC7B,CAAC;AAWF,QAAA,MAAM,QAAQ,GAAI,UAAU,MAAM,EAAE,KAAG,MAKtC,CAAC;AA4CF,QAAA,MAAM,eAAe,GAAU,SAAS,aAAa,KAAG,OAAO,CAAC,MAAM,CAWrE,CAAC;AAEF,QAAA,MAAM,YAAY,GAAU,SAAS,aAAa,KAAG,OAAO,CAAC,MAAM,CAIlE,CAAC;AAgBF,QAAA,MAAM,YAAY,GAAU,SAAS,eAAe,KAAG,OAAO,CAAC,MAAM,CAqBpE,CAAC;AAaF,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,KAAK,aAAa,EAAE,YAAY,EAAE,eAAe,EAAE,CAAC"}
@@ -0,0 +1,98 @@
1
+ import { info, warn } from "@gtkx/utils";
2
+ import { createHash } from "node:crypto";
3
+ import { chmodSync, existsSync, mkdirSync, readFileSync, renameSync, writeFileSync } from "node:fs";
4
+ import { homedir } from "node:os";
5
+ import { join } from "node:path";
6
+ const CACHE_NAMESPACE = "gtkx";
7
+ const DIGEST_PATTERN = /^[\da-f]{64}$/;
8
+ const cacheRoot = () => {
9
+ const base = process.env.XDG_CACHE_HOME;
10
+ return join(base !== undefined && base.length > 0 ? base : join(homedir(), ".cache"), CACHE_NAMESPACE);
11
+ };
12
+ const cacheDir = (segments) => {
13
+ const dir = join(cacheRoot(), ...segments);
14
+ mkdirSync(dir, { recursive: true });
15
+ return dir;
16
+ };
17
+ const getDigest = (contents) => createHash("sha256").update(contents).digest("hex");
18
+ const assertDigest = (url, contents, expected) => {
19
+ const actual = getDigest(contents);
20
+ if (actual !== expected) {
21
+ throw new Error(`Checksum mismatch for ${url}\n expected ${expected}\n received ${actual}`);
22
+ }
23
+ };
24
+ const fetchBytes = async (url) => {
25
+ const response = await fetch(url);
26
+ if (!response.ok) {
27
+ throw new Error(`Cannot download ${url}: HTTP ${String(response.status)} ${response.statusText}`);
28
+ }
29
+ return Buffer.from(await response.arrayBuffer());
30
+ };
31
+ const fetchText = async (url) => {
32
+ const bytes = await fetchBytes(url);
33
+ return bytes.toString("utf8");
34
+ };
35
+ const readCachedDigest = (dest) => {
36
+ try {
37
+ const cached = readFileSync(dest, "utf8").trim();
38
+ return DIGEST_PATTERN.test(cached) ? cached : undefined;
39
+ }
40
+ catch {
41
+ return undefined;
42
+ }
43
+ };
44
+ const writeAtomically = (dest, contents) => {
45
+ const staging = `${dest}.partial`;
46
+ writeFileSync(staging, contents);
47
+ renameSync(staging, dest);
48
+ };
49
+ const publishedDigest = async (request) => {
50
+ const checksums = await fetchText(request.url);
51
+ const digest = digestFromChecksums(checksums, request.assetName, request.subject);
52
+ if (!DIGEST_PATTERN.test(digest)) {
53
+ throw new Error(`${request.subject} published a malformed checksum for ${request.assetName}: "${digest}"`);
54
+ }
55
+ writeAtomically(request.dest, digest);
56
+ return digest;
57
+ };
58
+ const cachedDigest = async (request) => {
59
+ const cached = readCachedDigest(request.dest);
60
+ return cached ?? publishedDigest(request);
61
+ };
62
+ const isCacheUsable = (dest, sha256) => {
63
+ if (!existsSync(dest)) {
64
+ return false;
65
+ }
66
+ if (getDigest(readFileSync(dest)) === sha256) {
67
+ return true;
68
+ }
69
+ warn(`Discarding the cached ${dest}: its checksum no longer matches`);
70
+ return false;
71
+ };
72
+ const downloadFile = async (request) => {
73
+ const { url, dest, label, sha256, mode } = request;
74
+ if (isCacheUsable(dest, sha256)) {
75
+ return dest;
76
+ }
77
+ info(`Downloading ${label}`);
78
+ const expected = request.freshSha256 === undefined ? sha256 : await request.freshSha256();
79
+ const contents = await fetchBytes(url);
80
+ assertDigest(url, contents, expected);
81
+ const staging = `${dest}.partial`;
82
+ writeFileSync(staging, contents);
83
+ if (mode !== undefined) {
84
+ chmodSync(staging, mode);
85
+ }
86
+ renameSync(staging, dest);
87
+ return dest;
88
+ };
89
+ const digestFromChecksums = (checksums, assetName, subject) => {
90
+ const line = checksums.split("\n").find((entry) => entry.trim().endsWith(` ${assetName}`));
91
+ const digest = line?.trim().split(/\s+/, 1)[0];
92
+ if (digest === undefined) {
93
+ throw new Error(`${subject} publishes no checksum for ${assetName}`);
94
+ }
95
+ return digest;
96
+ };
97
+ export { cacheDir, cachedDigest, downloadFile, publishedDigest };
98
+ //# sourceMappingURL=download.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"download.js","sourceRoot":"","sources":["../../src/deploy/download.ts"],"names":[],"mappings":"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","sourcesContent":["import { info, warn } from \"@gtkx/utils\";\nimport { createHash } from \"node:crypto\";\nimport { chmodSync, existsSync, mkdirSync, readFileSync, renameSync, writeFileSync } from \"node:fs\";\nimport { homedir } from \"node:os\";\nimport { join } from \"node:path\";\n\ntype DigestRequest = {\n url: string;\n dest: string;\n assetName: string;\n subject: string;\n};\n\ntype DownloadRequest = {\n url: string;\n dest: string;\n label: string;\n sha256: string;\n freshSha256?: (() => Promise<string>) | undefined;\n mode?: number | undefined;\n};\n\nconst CACHE_NAMESPACE = \"gtkx\";\nconst DIGEST_PATTERN = /^[\\da-f]{64}$/;\n\nconst cacheRoot = (): string => {\n const base = process.env.XDG_CACHE_HOME;\n\n return join(base !== undefined && base.length > 0 ? base : join(homedir(), \".cache\"), CACHE_NAMESPACE);\n};\n\nconst cacheDir = (segments: string[]): string => {\n const dir = join(cacheRoot(), ...segments);\n mkdirSync(dir, { recursive: true });\n\n return dir;\n};\n\nconst getDigest = (contents: Buffer): string => createHash(\"sha256\").update(contents).digest(\"hex\");\n\nconst assertDigest = (url: string, contents: Buffer, expected: string): void => {\n const actual = getDigest(contents);\n\n if (actual !== expected) {\n throw new Error(`Checksum mismatch for ${url}\\n expected ${expected}\\n received ${actual}`);\n }\n};\n\nconst fetchBytes = async (url: string): Promise<Buffer> => {\n const response = await fetch(url);\n\n if (!response.ok) {\n throw new Error(`Cannot download ${url}: HTTP ${String(response.status)} ${response.statusText}`);\n }\n\n return Buffer.from(await response.arrayBuffer());\n};\n\nconst fetchText = async (url: string): Promise<string> => {\n const bytes = await fetchBytes(url);\n\n return bytes.toString(\"utf8\");\n};\n\nconst readCachedDigest = (dest: string): string | undefined => {\n try {\n const cached = readFileSync(dest, \"utf8\").trim();\n\n return DIGEST_PATTERN.test(cached) ? cached : undefined;\n } catch {\n return undefined;\n }\n};\n\nconst writeAtomically = (dest: string, contents: string): void => {\n const staging = `${dest}.partial`;\n writeFileSync(staging, contents);\n renameSync(staging, dest);\n};\n\nconst publishedDigest = async (request: DigestRequest): Promise<string> => {\n const checksums = await fetchText(request.url);\n const digest = digestFromChecksums(checksums, request.assetName, request.subject);\n\n if (!DIGEST_PATTERN.test(digest)) {\n throw new Error(`${request.subject} published a malformed checksum for ${request.assetName}: \"${digest}\"`);\n }\n\n writeAtomically(request.dest, digest);\n\n return digest;\n};\n\nconst cachedDigest = async (request: DigestRequest): Promise<string> => {\n const cached = readCachedDigest(request.dest);\n\n return cached ?? publishedDigest(request);\n};\n\nconst isCacheUsable = (dest: string, sha256: string): boolean => {\n if (!existsSync(dest)) {\n return false;\n }\n\n if (getDigest(readFileSync(dest)) === sha256) {\n return true;\n }\n\n warn(`Discarding the cached ${dest}: its checksum no longer matches`);\n\n return false;\n};\n\nconst downloadFile = async (request: DownloadRequest): Promise<string> => {\n const { url, dest, label, sha256, mode } = request;\n\n if (isCacheUsable(dest, sha256)) {\n return dest;\n }\n\n info(`Downloading ${label}`);\n const expected = request.freshSha256 === undefined ? sha256 : await request.freshSha256();\n const contents = await fetchBytes(url);\n assertDigest(url, contents, expected);\n const staging = `${dest}.partial`;\n writeFileSync(staging, contents);\n\n if (mode !== undefined) {\n chmodSync(staging, mode);\n }\n\n renameSync(staging, dest);\n\n return dest;\n};\n\nconst digestFromChecksums = (checksums: string, assetName: string, subject: string): string => {\n const line = checksums.split(\"\\n\").find((entry) => entry.trim().endsWith(` ${assetName}`));\n const digest = line?.trim().split(/\\s+/, 1)[0];\n\n if (digest === undefined) {\n throw new Error(`${subject} publishes no checksum for ${assetName}`);\n }\n\n return digest;\n};\n\nexport { cacheDir, cachedDigest, type DigestRequest, downloadFile, publishedDigest };\n"]}
@@ -0,0 +1,4 @@
1
+ import type { DeploySettings } from "../types.js";
2
+ declare const renderCopyright: (settings: DeploySettings) => string;
3
+ export { renderCopyright };
4
+ //# sourceMappingURL=copyright.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"copyright.d.ts","sourceRoot":"","sources":["../../../src/deploy/freedesktop/copyright.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AA4BlD,QAAA,MAAM,eAAe,GAAI,UAAU,cAAc,KAAG,MASpC,CAAC;AAEjB,OAAO,EAAE,eAAe,EAAE,CAAC"}
@@ -0,0 +1,33 @@
1
+ import { readFileSync } from "node:fs";
2
+ const FORMAT_URL = "https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/";
3
+ const CONTINUATION_BLANK = " .";
4
+ const indentLicenseBody = (body) => body
5
+ .split("\n")
6
+ .map((line) => (line.trim().length === 0 ? CONTINUATION_BLANK : ` ${line}`));
7
+ const licenseBody = (licenseFile) => {
8
+ if (licenseFile === null) {
9
+ return [];
10
+ }
11
+ try {
12
+ return indentLicenseBody(readFileSync(licenseFile, "utf8").trimEnd());
13
+ }
14
+ catch {
15
+ return [];
16
+ }
17
+ };
18
+ const headerLines = (settings) => [
19
+ `Format: ${FORMAT_URL}`,
20
+ `Upstream-Name: ${settings.name}`,
21
+ ...(settings.homepage === null ? [] : [`Source: ${settings.homepage}`]),
22
+ ];
23
+ const renderCopyright = (settings) => [
24
+ ...headerLines(settings),
25
+ "",
26
+ "Files: *",
27
+ `Copyright: ${settings.copyright}`,
28
+ `License: ${settings.license}`,
29
+ ...licenseBody(settings.paths.licenseFile),
30
+ "",
31
+ ].join("\n");
32
+ export { renderCopyright };
33
+ //# sourceMappingURL=copyright.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"copyright.js","sourceRoot":"","sources":["../../../src/deploy/freedesktop/copyright.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAGvC,MAAM,UAAU,GAAG,oEAAoE,CAAC;AACxF,MAAM,kBAAkB,GAAG,IAAI,CAAC;AAEhC,MAAM,iBAAiB,GAAG,CAAC,IAAY,EAAY,EAAE,CACjD,IAAI;KACC,KAAK,CAAC,IAAI,CAAC;KACX,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC;AAErF,MAAM,WAAW,GAAG,CAAC,WAA0B,EAAY,EAAE;IACzD,IAAI,WAAW,KAAK,IAAI,EAAE,CAAC;QACvB,OAAO,EAAE,CAAC;IACd,CAAC;IAED,IAAI,CAAC;QACD,OAAO,iBAAiB,CAAC,YAAY,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;IAC1E,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,EAAE,CAAC;IACd,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,WAAW,GAAG,CAAC,QAAwB,EAAY,EAAE,CAAC;IACxD,WAAW,UAAU,EAAE;IACvB,kBAAkB,QAAQ,CAAC,IAAI,EAAE;IACjC,GAAG,CAAC,QAAQ,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,WAAW,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC;CAC1E,CAAC;AAEF,MAAM,eAAe,GAAG,CAAC,QAAwB,EAAU,EAAE,CACzD;IACI,GAAG,WAAW,CAAC,QAAQ,CAAC;IACxB,EAAE;IACF,UAAU;IACV,cAAc,QAAQ,CAAC,SAAS,EAAE;IAClC,YAAY,QAAQ,CAAC,OAAO,EAAE;IAC9B,GAAG,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAW,CAAC;IAC1C,EAAE;CACL,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAEjB,OAAO,EAAE,eAAe,EAAE,CAAC","sourcesContent":["import { readFileSync } from \"node:fs\";\nimport type { DeploySettings } from \"../types.js\";\n\nconst FORMAT_URL = \"https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/\";\nconst CONTINUATION_BLANK = \" .\";\n\nconst indentLicenseBody = (body: string): string[] =>\n body\n .split(\"\\n\")\n .map((line) => (line.trim().length === 0 ? CONTINUATION_BLANK : ` ${line}`));\n\nconst licenseBody = (licenseFile: string | null): string[] => {\n if (licenseFile === null) {\n return [];\n }\n\n try {\n return indentLicenseBody(readFileSync(licenseFile, \"utf8\").trimEnd());\n } catch {\n return [];\n }\n};\n\nconst headerLines = (settings: DeploySettings): string[] => [\n `Format: ${FORMAT_URL}`,\n `Upstream-Name: ${settings.name}`,\n ...(settings.homepage === null ? [] : [`Source: ${settings.homepage}`]),\n];\n\nconst renderCopyright = (settings: DeploySettings): string =>\n [\n ...headerLines(settings),\n \"\",\n \"Files: *\",\n `Copyright: ${settings.copyright}`,\n `License: ${settings.license}`,\n ...licenseBody(settings.paths.licenseFile),\n \"\",\n ].join(\"\\n\");\n\nexport { renderCopyright };\n"]}
@@ -0,0 +1,4 @@
1
+ import type { DeploySettings } from "../types.js";
2
+ declare const renderDbusService: (settings: DeploySettings, prefix: string) => string;
3
+ export { renderDbusService };
4
+ //# sourceMappingURL=dbus-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dbus-service.d.ts","sourceRoot":"","sources":["../../../src/deploy/freedesktop/dbus-service.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAMlD,QAAA,MAAM,iBAAiB,GAAI,UAAU,cAAc,EAAE,QAAQ,MAAM,KAAG,MAShE,CAAC;AAEP,OAAO,EAAE,iBAAiB,EAAE,CAAC"}
@@ -0,0 +1,15 @@
1
+ import { posix } from "node:path";
2
+ import { renderIni } from "./ini.js";
3
+ const SERVICE_GROUP = "D-BUS Service";
4
+ const SERVICE_FLAG = "--gapplication-service";
5
+ const renderDbusService = (settings, prefix) => renderIni([
6
+ {
7
+ name: SERVICE_GROUP,
8
+ entries: [
9
+ ["Name", settings.applicationId],
10
+ ["Exec", `${posix.join(prefix, "bin", settings.binaryName)} ${SERVICE_FLAG}`],
11
+ ],
12
+ },
13
+ ]);
14
+ export { renderDbusService };
15
+ //# sourceMappingURL=dbus-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dbus-service.js","sourceRoot":"","sources":["../../../src/deploy/freedesktop/dbus-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AAElC,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAErC,MAAM,aAAa,GAAG,eAAe,CAAC;AACtC,MAAM,YAAY,GAAG,wBAAwB,CAAC;AAE9C,MAAM,iBAAiB,GAAG,CAAC,QAAwB,EAAE,MAAc,EAAU,EAAE,CAC3E,SAAS,CAAC;IACN;QACI,IAAI,EAAE,aAAa;QACnB,OAAO,EAAE;YACL,CAAC,MAAM,EAAE,QAAQ,CAAC,aAAa,CAAC;YAChC,CAAC,MAAM,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,QAAQ,CAAC,UAAU,CAAC,IAAI,YAAY,EAAE,CAAC;SAChF;KACJ;CACJ,CAAC,CAAC;AAEP,OAAO,EAAE,iBAAiB,EAAE,CAAC","sourcesContent":["import { posix } from \"node:path\";\nimport type { DeploySettings } from \"../types.js\";\nimport { renderIni } from \"./ini.js\";\n\nconst SERVICE_GROUP = \"D-BUS Service\";\nconst SERVICE_FLAG = \"--gapplication-service\";\n\nconst renderDbusService = (settings: DeploySettings, prefix: string): string =>\n renderIni([\n {\n name: SERVICE_GROUP,\n entries: [\n [\"Name\", settings.applicationId],\n [\"Exec\", `${posix.join(prefix, \"bin\", settings.binaryName)} ${SERVICE_FLAG}`],\n ],\n },\n ]);\n\nexport { renderDbusService };\n"]}
@@ -0,0 +1,4 @@
1
+ import type { DeploySettings } from "../types.js";
2
+ declare const renderDesktopEntry: (settings: DeploySettings) => string;
3
+ export { renderDesktopEntry };
4
+ //# sourceMappingURL=desktop-entry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"desktop-entry.d.ts","sourceRoot":"","sources":["../../../src/deploy/freedesktop/desktop-entry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAuB,cAAc,EAAE,MAAM,aAAa,CAAC;AAuFvE,QAAA,MAAM,kBAAkB,GAAI,UAAU,cAAc,KAAG,MAYtD,CAAC;AAEF,OAAO,EAAE,kBAAkB,EAAE,CAAC"}
@@ -0,0 +1,73 @@
1
+ import { renderIni } from "./ini.js";
2
+ const DESKTOP_ENTRY_GROUP = "Desktop Entry";
3
+ const EXEC_QUOTED_CHARACTERS = /["`$\\]/g;
4
+ const EXEC_RESERVED_CHARACTERS = /[\s"'\\><~|&;$*?#()`]/;
5
+ const RESERVED_KEYS = new Map([
6
+ ["DBusActivatable", "use `deploy.isDbusActivatable` instead"],
7
+ ["Version", "it names the desktop entry spec version, not the application's"],
8
+ ]);
9
+ const quoteExecToken = (token) => {
10
+ const escaped = token.replaceAll("%", "%%");
11
+ if (!EXEC_RESERVED_CHARACTERS.test(escaped)) {
12
+ return escaped;
13
+ }
14
+ const quoted = escaped.replaceAll(EXEC_QUOTED_CHARACTERS, (character) => `\\${character}`);
15
+ return `"${quoted}"`;
16
+ };
17
+ const execLine = (settings) => [
18
+ ...[settings.binaryName, ...settings.execArgs].map((part) => quoteExecToken(part)),
19
+ settings.execToken ?? "",
20
+ ]
21
+ .filter((part) => part.length > 0)
22
+ .join(" ");
23
+ const optionalEntry = (key, value) => (value === null ? [] : [[key, value]]);
24
+ const listEntry = (key, values) => (values.length === 0 ? [] : [[key, values]]);
25
+ const assertNoReservedOverrides = (settings) => {
26
+ for (const key of Object.keys(settings.desktopEntry)) {
27
+ const remedy = RESERVED_KEYS.get(key);
28
+ if (remedy !== undefined) {
29
+ throw new Error(`Cannot set "${key}" through \`deploy.desktopEntry\`: gtkx deploy writes it, ${remedy}`);
30
+ }
31
+ }
32
+ };
33
+ const baseEntries = (settings) => [
34
+ ["Type", "Application"],
35
+ ["Name", settings.name],
36
+ ...optionalEntry("GenericName", settings.genericName),
37
+ ["Comment", settings.summary],
38
+ ["Exec", execLine(settings)],
39
+ ["Icon", settings.applicationId],
40
+ ["Terminal", "false"],
41
+ ...listEntry("Categories", settings.categories),
42
+ ...listEntry("Keywords", settings.keywords),
43
+ ...listEntry("MimeType", settings.mimeTypes),
44
+ ["StartupNotify", "true"],
45
+ ["StartupWMClass", settings.applicationId],
46
+ ];
47
+ const actionEntries = (settings) => settings.desktopActions.length === 0 ? [] : [["Actions", settings.desktopActions.map((action) => action.id)]];
48
+ const activationEntries = (settings) => settings.isDbusActivatable ? [["DBusActivatable", "true"]] : [];
49
+ const actionGroup = (settings, action) => ({
50
+ name: `Desktop Action ${action.id}`,
51
+ entries: [
52
+ ["Name", action.name],
53
+ ["Exec", [settings.binaryName, ...action.args].map((part) => quoteExecToken(part)).join(" ")],
54
+ ...optionalEntry("Icon", action.icon),
55
+ ],
56
+ });
57
+ const mergeEntries = (entries, overrides) => {
58
+ const merged = new Map(entries);
59
+ for (const [key, value] of overrides) {
60
+ merged.set(key, value);
61
+ }
62
+ return merged.entries().toArray();
63
+ };
64
+ const renderDesktopEntry = (settings) => {
65
+ assertNoReservedOverrides(settings);
66
+ const main = {
67
+ name: DESKTOP_ENTRY_GROUP,
68
+ entries: mergeEntries([...baseEntries(settings), ...actionEntries(settings), ...activationEntries(settings)], Object.entries(settings.desktopEntry)),
69
+ };
70
+ return renderIni([main, ...settings.desktopActions.map((action) => actionGroup(settings, action))]);
71
+ };
72
+ export { renderDesktopEntry };
73
+ //# sourceMappingURL=desktop-entry.js.map