@gtkx/cli 2.0.0-beta.1 → 2.0.0-beta.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (501) hide show
  1. package/README.md +43 -40
  2. package/bin/gtkx-dev-runner.js +5 -1
  3. package/bin/gtkx.js +5 -1
  4. package/dist/builder.d.ts +1 -0
  5. package/dist/builder.d.ts.map +1 -1
  6. package/dist/builder.js +44 -12
  7. package/dist/builder.js.map +1 -1
  8. package/dist/cli.d.ts +1 -1
  9. package/dist/cli.d.ts.map +1 -1
  10. package/dist/cli.js +14 -2
  11. package/dist/cli.js.map +1 -1
  12. package/dist/codegen/config-dependencies.d.ts +3 -0
  13. package/dist/codegen/config-dependencies.d.ts.map +1 -0
  14. package/dist/codegen/config-dependencies.js +355 -0
  15. package/dist/codegen/config-dependencies.js.map +1 -0
  16. package/dist/codegen/freshness.d.ts.map +1 -1
  17. package/dist/codegen/freshness.js +5 -1
  18. package/dist/codegen/freshness.js.map +1 -1
  19. package/dist/codegen/reference.d.ts.map +1 -1
  20. package/dist/codegen/reference.js +1 -0
  21. package/dist/codegen/reference.js.map +1 -1
  22. package/dist/codegen/run-codegen.d.ts +6 -3
  23. package/dist/codegen/run-codegen.d.ts.map +1 -1
  24. package/dist/codegen/run-codegen.js +42 -18
  25. package/dist/codegen/run-codegen.js.map +1 -1
  26. package/dist/codegen/store-resolver.d.ts +3 -1
  27. package/dist/codegen/store-resolver.d.ts.map +1 -1
  28. package/dist/codegen/store-resolver.js +7 -4
  29. package/dist/codegen/store-resolver.js.map +1 -1
  30. package/dist/commands/build.d.ts +5 -0
  31. package/dist/commands/build.d.ts.map +1 -1
  32. package/dist/commands/build.js +83 -10
  33. package/dist/commands/build.js.map +1 -1
  34. package/dist/commands/cleanup.d.ts +9 -0
  35. package/dist/commands/cleanup.d.ts.map +1 -0
  36. package/dist/commands/cleanup.js +42 -0
  37. package/dist/commands/cleanup.js.map +1 -0
  38. package/dist/commands/codegen.d.ts +1 -0
  39. package/dist/commands/codegen.d.ts.map +1 -1
  40. package/dist/commands/codegen.js +6 -5
  41. package/dist/commands/codegen.js.map +1 -1
  42. package/dist/commands/deploy.d.ts +5 -0
  43. package/dist/commands/deploy.d.ts.map +1 -1
  44. package/dist/commands/deploy.js +10 -2
  45. package/dist/commands/deploy.js.map +1 -1
  46. package/dist/commands/dev.d.ts +9 -0
  47. package/dist/commands/dev.d.ts.map +1 -1
  48. package/dist/commands/dev.js +31 -4
  49. package/dist/commands/dev.js.map +1 -1
  50. package/dist/commands/docs.d.ts.map +1 -1
  51. package/dist/commands/docs.js +1 -0
  52. package/dist/commands/docs.js.map +1 -1
  53. package/dist/deploy/depends.d.ts.map +1 -1
  54. package/dist/deploy/depends.js +24 -2
  55. package/dist/deploy/depends.js.map +1 -1
  56. package/dist/deploy/download.d.ts +7 -3
  57. package/dist/deploy/download.d.ts.map +1 -1
  58. package/dist/deploy/download.js +19 -20
  59. package/dist/deploy/download.js.map +1 -1
  60. package/dist/deploy/freedesktop/metainfo.d.ts.map +1 -1
  61. package/dist/deploy/freedesktop/metainfo.js +41 -2
  62. package/dist/deploy/freedesktop/metainfo.js.map +1 -1
  63. package/dist/deploy/freedesktop/validate.d.ts.map +1 -1
  64. package/dist/deploy/freedesktop/validate.js +58 -14
  65. package/dist/deploy/freedesktop/validate.js.map +1 -1
  66. package/dist/deploy/native-addon.d.ts +5 -0
  67. package/dist/deploy/native-addon.d.ts.map +1 -0
  68. package/dist/deploy/native-addon.js +134 -0
  69. package/dist/deploy/native-addon.js.map +1 -0
  70. package/dist/deploy/nfpm/config.d.ts +3 -2
  71. package/dist/deploy/nfpm/config.d.ts.map +1 -1
  72. package/dist/deploy/nfpm/config.js +7 -4
  73. package/dist/deploy/nfpm/config.js.map +1 -1
  74. package/dist/deploy/nfpm/contents.d.ts.map +1 -1
  75. package/dist/deploy/nfpm/contents.js +8 -0
  76. package/dist/deploy/nfpm/contents.js.map +1 -1
  77. package/dist/deploy/node-runtime/download.js +2 -2
  78. package/dist/deploy/node-runtime/download.js.map +1 -1
  79. package/dist/deploy/node-runtime/elf.d.ts +4 -1
  80. package/dist/deploy/node-runtime/elf.d.ts.map +1 -1
  81. package/dist/deploy/node-runtime/elf.js +34 -5
  82. package/dist/deploy/node-runtime/elf.js.map +1 -1
  83. package/dist/deploy/node-runtime/guard.d.ts.map +1 -1
  84. package/dist/deploy/node-runtime/guard.js +7 -14
  85. package/dist/deploy/node-runtime/guard.js.map +1 -1
  86. package/dist/deploy/node-runtime/index.d.ts +3 -1
  87. package/dist/deploy/node-runtime/index.d.ts.map +1 -1
  88. package/dist/deploy/node-runtime/index.js +103 -10
  89. package/dist/deploy/node-runtime/index.js.map +1 -1
  90. package/dist/deploy/node-runtime/sonames.d.ts +5 -0
  91. package/dist/deploy/node-runtime/sonames.d.ts.map +1 -0
  92. package/dist/deploy/node-runtime/sonames.js +13 -0
  93. package/dist/deploy/node-runtime/sonames.js.map +1 -0
  94. package/dist/deploy/notices/node-runtime.js +2 -2
  95. package/dist/deploy/notices/node-runtime.js.map +1 -1
  96. package/dist/deploy/payload/launcher.d.ts.map +1 -1
  97. package/dist/deploy/payload/launcher.js +14 -1
  98. package/dist/deploy/payload/launcher.js.map +1 -1
  99. package/dist/deploy/payload/stage.d.ts +2 -1
  100. package/dist/deploy/payload/stage.d.ts.map +1 -1
  101. package/dist/deploy/payload/stage.js +46 -5
  102. package/dist/deploy/payload/stage.js.map +1 -1
  103. package/dist/deploy/run-deploy.d.ts +2 -0
  104. package/dist/deploy/run-deploy.d.ts.map +1 -1
  105. package/dist/deploy/run-deploy.js +197 -52
  106. package/dist/deploy/run-deploy.js.map +1 -1
  107. package/dist/deploy/settings/arch.d.ts +9 -3
  108. package/dist/deploy/settings/arch.d.ts.map +1 -1
  109. package/dist/deploy/settings/arch.js +27 -6
  110. package/dist/deploy/settings/arch.js.map +1 -1
  111. package/dist/deploy/settings/build-manifest.d.ts +6 -1
  112. package/dist/deploy/settings/build-manifest.d.ts.map +1 -1
  113. package/dist/deploy/settings/build-manifest.js +15 -4
  114. package/dist/deploy/settings/build-manifest.js.map +1 -1
  115. package/dist/deploy/settings/extra-files.d.ts +1 -1
  116. package/dist/deploy/settings/extra-files.d.ts.map +1 -1
  117. package/dist/deploy/settings/extra-files.js +25 -3
  118. package/dist/deploy/settings/extra-files.js.map +1 -1
  119. package/dist/deploy/settings/index.d.ts +3 -1
  120. package/dist/deploy/settings/index.d.ts.map +1 -1
  121. package/dist/deploy/settings/index.js +4 -2
  122. package/dist/deploy/settings/index.js.map +1 -1
  123. package/dist/deploy/settings/libraries.d.ts.map +1 -1
  124. package/dist/deploy/settings/libraries.js +2 -1
  125. package/dist/deploy/settings/libraries.js.map +1 -1
  126. package/dist/deploy/settings/paths.d.ts +4 -2
  127. package/dist/deploy/settings/paths.d.ts.map +1 -1
  128. package/dist/deploy/settings/paths.js +121 -12
  129. package/dist/deploy/settings/paths.js.map +1 -1
  130. package/dist/deploy/targets/appimage.d.ts.map +1 -1
  131. package/dist/deploy/targets/appimage.js +1 -0
  132. package/dist/deploy/targets/appimage.js.map +1 -1
  133. package/dist/deploy/targets/flatpak-pnpm.js +4 -4
  134. package/dist/deploy/targets/flatpak-pnpm.js.map +1 -1
  135. package/dist/deploy/targets/flatpak-source.d.ts.map +1 -1
  136. package/dist/deploy/targets/flatpak-source.js +13 -2
  137. package/dist/deploy/targets/flatpak-source.js.map +1 -1
  138. package/dist/deploy/targets/flatpak.d.ts.map +1 -1
  139. package/dist/deploy/targets/flatpak.js +1 -0
  140. package/dist/deploy/targets/flatpak.js.map +1 -1
  141. package/dist/deploy/targets/nfpm-target.d.ts.map +1 -1
  142. package/dist/deploy/targets/nfpm-target.js +13 -7
  143. package/dist/deploy/targets/nfpm-target.js.map +1 -1
  144. package/dist/deploy/types.d.ts +5 -2
  145. package/dist/deploy/types.d.ts.map +1 -1
  146. package/dist/deploy/types.js.map +1 -1
  147. package/dist/deploy/vendored/appimagetool.js +2 -2
  148. package/dist/deploy/vendored/appimagetool.js.map +1 -1
  149. package/dist/deploy/vendored/nfpm.js +1 -1
  150. package/dist/deploy/vendored/nfpm.js.map +1 -1
  151. package/dist/dev/catalog-writes.d.ts +8 -0
  152. package/dist/dev/catalog-writes.d.ts.map +1 -0
  153. package/dist/dev/catalog-writes.js +26 -0
  154. package/dist/dev/catalog-writes.js.map +1 -0
  155. package/dist/dev/entry-env.d.ts +2 -1
  156. package/dist/dev/entry-env.d.ts.map +1 -1
  157. package/dist/dev/entry-env.js +2 -1
  158. package/dist/dev/entry-env.js.map +1 -1
  159. package/dist/dev/font-dir.d.ts +3 -0
  160. package/dist/dev/font-dir.d.ts.map +1 -0
  161. package/dist/dev/font-dir.js +9 -0
  162. package/dist/dev/font-dir.js.map +1 -0
  163. package/dist/dev/headless.d.ts +3 -0
  164. package/dist/dev/headless.d.ts.map +1 -0
  165. package/dist/dev/headless.js +35 -0
  166. package/dist/dev/headless.js.map +1 -0
  167. package/dist/dev/runner-deps.d.ts +1 -1
  168. package/dist/dev/runner-deps.d.ts.map +1 -1
  169. package/dist/dev/runner-deps.js +12 -7
  170. package/dist/dev/runner-deps.js.map +1 -1
  171. package/dist/dev/runner-main.d.ts.map +1 -1
  172. package/dist/dev/runner-main.js +10 -3
  173. package/dist/dev/runner-main.js.map +1 -1
  174. package/dist/dev/runner.d.ts +2 -0
  175. package/dist/dev/runner.d.ts.map +1 -1
  176. package/dist/dev/runner.js +26 -7
  177. package/dist/dev/runner.js.map +1 -1
  178. package/dist/dev/supervisor.d.ts +3 -1
  179. package/dist/dev/supervisor.d.ts.map +1 -1
  180. package/dist/dev/supervisor.js +132 -29
  181. package/dist/dev/supervisor.js.map +1 -1
  182. package/dist/dev/vite-dev-server.d.ts +1 -1
  183. package/dist/dev/vite-dev-server.d.ts.map +1 -1
  184. package/dist/dev/vite-dev-server.js +14 -2
  185. package/dist/dev/vite-dev-server.js.map +1 -1
  186. package/dist/dev/watch-ignore.d.ts +3 -0
  187. package/dist/dev/watch-ignore.d.ts.map +1 -0
  188. package/dist/dev/watch-ignore.js +11 -0
  189. package/dist/dev/watch-ignore.js.map +1 -0
  190. package/dist/i18n/catalogs.d.ts +6 -2
  191. package/dist/i18n/catalogs.d.ts.map +1 -1
  192. package/dist/i18n/catalogs.js +10 -7
  193. package/dist/i18n/catalogs.js.map +1 -1
  194. package/dist/i18n/source-messages.d.ts +3 -1
  195. package/dist/i18n/source-messages.d.ts.map +1 -1
  196. package/dist/i18n/source-messages.js +973 -9
  197. package/dist/i18n/source-messages.js.map +1 -1
  198. package/dist/internal/agent-rules.d.ts.map +1 -1
  199. package/dist/internal/agent-rules.js +7 -2
  200. package/dist/internal/agent-rules.js.map +1 -1
  201. package/dist/internal/banner.d.ts +4 -2
  202. package/dist/internal/banner.d.ts.map +1 -1
  203. package/dist/internal/banner.js +19 -5
  204. package/dist/internal/banner.js.map +1 -1
  205. package/dist/internal/build-manifest.d.ts +5 -2
  206. package/dist/internal/build-manifest.d.ts.map +1 -1
  207. package/dist/internal/build-manifest.js +15 -2
  208. package/dist/internal/build-manifest.js.map +1 -1
  209. package/dist/internal/build-output.d.ts +8 -0
  210. package/dist/internal/build-output.d.ts.map +1 -0
  211. package/dist/internal/build-output.js +116 -0
  212. package/dist/internal/build-output.js.map +1 -0
  213. package/dist/internal/cache-root.d.ts +3 -0
  214. package/dist/internal/cache-root.d.ts.map +1 -0
  215. package/dist/internal/cache-root.js +9 -0
  216. package/dist/internal/cache-root.js.map +1 -0
  217. package/dist/internal/compile-cache-store.d.ts +4 -0
  218. package/dist/internal/compile-cache-store.d.ts.map +1 -0
  219. package/dist/internal/compile-cache-store.js +41 -0
  220. package/dist/internal/compile-cache-store.js.map +1 -0
  221. package/dist/internal/compile-cache.d.ts +4 -0
  222. package/dist/internal/compile-cache.d.ts.map +1 -0
  223. package/dist/internal/compile-cache.js +16 -0
  224. package/dist/internal/compile-cache.js.map +1 -0
  225. package/dist/internal/deploy-out-dir.d.ts +4 -0
  226. package/dist/internal/deploy-out-dir.d.ts.map +1 -0
  227. package/dist/internal/deploy-out-dir.js +5 -0
  228. package/dist/internal/deploy-out-dir.js.map +1 -0
  229. package/dist/internal/docs-elements.d.ts +1 -0
  230. package/dist/internal/docs-elements.d.ts.map +1 -1
  231. package/dist/internal/docs-elements.js +5 -4
  232. package/dist/internal/docs-elements.js.map +1 -1
  233. package/dist/internal/entry-arg.d.ts +4 -1
  234. package/dist/internal/entry-arg.d.ts.map +1 -1
  235. package/dist/internal/entry-arg.js +7 -1
  236. package/dist/internal/entry-arg.js.map +1 -1
  237. package/dist/internal/errors.d.ts +2 -1
  238. package/dist/internal/errors.d.ts.map +1 -1
  239. package/dist/internal/errors.js +1 -1
  240. package/dist/internal/errors.js.map +1 -1
  241. package/dist/internal/font-path.d.ts +4 -0
  242. package/dist/internal/font-path.d.ts.map +1 -0
  243. package/dist/internal/font-path.js +12 -0
  244. package/dist/internal/font-path.js.map +1 -0
  245. package/dist/internal/font-staging.d.ts +6 -0
  246. package/dist/internal/font-staging.d.ts.map +1 -0
  247. package/dist/internal/font-staging.js +94 -0
  248. package/dist/internal/font-staging.js.map +1 -0
  249. package/dist/internal/icon-staging.d.ts +3 -0
  250. package/dist/internal/icon-staging.d.ts.map +1 -0
  251. package/dist/internal/icon-staging.js +40 -0
  252. package/dist/internal/icon-staging.js.map +1 -0
  253. package/dist/internal/import-scan.d.ts +4 -0
  254. package/dist/internal/import-scan.d.ts.map +1 -0
  255. package/dist/internal/import-scan.js +138 -0
  256. package/dist/internal/import-scan.js.map +1 -0
  257. package/dist/internal/module-hash.d.ts +3 -0
  258. package/dist/internal/module-hash.d.ts.map +1 -0
  259. package/dist/internal/module-hash.js +19 -0
  260. package/dist/internal/module-hash.js.map +1 -0
  261. package/dist/internal/output-directory.d.ts +15 -0
  262. package/dist/internal/output-directory.d.ts.map +1 -0
  263. package/dist/internal/output-directory.js +490 -0
  264. package/dist/internal/output-directory.js.map +1 -0
  265. package/dist/internal/parent-process.d.ts +12 -0
  266. package/dist/internal/parent-process.d.ts.map +1 -0
  267. package/dist/internal/parent-process.js +74 -0
  268. package/dist/internal/parent-process.js.map +1 -0
  269. package/dist/internal/prepare-project.d.ts +3 -0
  270. package/dist/internal/prepare-project.d.ts.map +1 -1
  271. package/dist/internal/prepare-project.js +9 -3
  272. package/dist/internal/prepare-project.js.map +1 -1
  273. package/dist/internal/react-compiler-cache.d.ts +13 -0
  274. package/dist/internal/react-compiler-cache.d.ts.map +1 -0
  275. package/dist/internal/react-compiler-cache.js +182 -0
  276. package/dist/internal/react-compiler-cache.js.map +1 -0
  277. package/dist/internal/source-imports.d.ts +7 -2
  278. package/dist/internal/source-imports.d.ts.map +1 -1
  279. package/dist/internal/source-imports.js +31 -11
  280. package/dist/internal/source-imports.js.map +1 -1
  281. package/dist/internal/staging-file.d.ts +5 -0
  282. package/dist/internal/staging-file.d.ts.map +1 -0
  283. package/dist/internal/staging-file.js +35 -0
  284. package/dist/internal/staging-file.js.map +1 -0
  285. package/dist/internal/xdg-banner.d.ts +4 -0
  286. package/dist/internal/xdg-banner.d.ts.map +1 -0
  287. package/dist/internal/xdg-banner.js +11 -0
  288. package/dist/internal/xdg-banner.js.map +1 -0
  289. package/dist/internal/xdg-data-dirs.d.ts +2 -1
  290. package/dist/internal/xdg-data-dirs.d.ts.map +1 -1
  291. package/dist/internal/xdg-data-dirs.js +1 -1
  292. package/dist/internal/xdg-data-dirs.js.map +1 -1
  293. package/dist/mcp/client.js +2 -2
  294. package/dist/mcp/client.js.map +1 -1
  295. package/dist/settings/schema.d.ts.map +1 -1
  296. package/dist/settings/schema.js +3 -8
  297. package/dist/settings/schema.js.map +1 -1
  298. package/dist/vite-plugins/asset-extensions.d.ts.map +1 -1
  299. package/dist/vite-plugins/asset-extensions.js +2 -0
  300. package/dist/vite-plugins/asset-extensions.js.map +1 -1
  301. package/dist/vite-plugins/asset-imports.d.ts.map +1 -1
  302. package/dist/vite-plugins/asset-imports.js +20 -6
  303. package/dist/vite-plugins/asset-imports.js.map +1 -1
  304. package/dist/vite-plugins/asset-specifier.d.ts +5 -1
  305. package/dist/vite-plugins/asset-specifier.d.ts.map +1 -1
  306. package/dist/vite-plugins/asset-specifier.js +10 -1
  307. package/dist/vite-plugins/asset-specifier.js.map +1 -1
  308. package/dist/vite-plugins/build-manifest.d.ts +5 -1
  309. package/dist/vite-plugins/build-manifest.d.ts.map +1 -1
  310. package/dist/vite-plugins/build-manifest.js +2 -1
  311. package/dist/vite-plugins/build-manifest.js.map +1 -1
  312. package/dist/vite-plugins/built-url.d.ts.map +1 -1
  313. package/dist/vite-plugins/built-url.js +5 -2
  314. package/dist/vite-plugins/built-url.js.map +1 -1
  315. package/dist/vite-plugins/css.d.ts.map +1 -1
  316. package/dist/vite-plugins/css.js +13 -5
  317. package/dist/vite-plugins/css.js.map +1 -1
  318. package/dist/vite-plugins/ensure-store.d.ts +1 -1
  319. package/dist/vite-plugins/ensure-store.d.ts.map +1 -1
  320. package/dist/vite-plugins/ensure-store.js +2 -2
  321. package/dist/vite-plugins/ensure-store.js.map +1 -1
  322. package/dist/vite-plugins/fast-refresh/refresh-filter.d.ts +6 -1
  323. package/dist/vite-plugins/fast-refresh/refresh-filter.d.ts.map +1 -1
  324. package/dist/vite-plugins/fast-refresh/refresh-filter.js +3 -1
  325. package/dist/vite-plugins/fast-refresh/refresh-filter.js.map +1 -1
  326. package/dist/vite-plugins/fast-refresh/swc-refresh.d.ts.map +1 -1
  327. package/dist/vite-plugins/fast-refresh/swc-refresh.js +23 -14
  328. package/dist/vite-plugins/fast-refresh/swc-refresh.js.map +1 -1
  329. package/dist/vite-plugins/font-name.d.ts +3 -0
  330. package/dist/vite-plugins/font-name.d.ts.map +1 -0
  331. package/dist/vite-plugins/font-name.js +406 -0
  332. package/dist/vite-plugins/font-name.js.map +1 -0
  333. package/dist/vite-plugins/font-worker-env.d.ts +4 -0
  334. package/dist/vite-plugins/font-worker-env.d.ts.map +1 -0
  335. package/dist/vite-plugins/font-worker-env.js +19 -0
  336. package/dist/vite-plugins/font-worker-env.js.map +1 -0
  337. package/dist/vite-plugins/font.d.ts +4 -0
  338. package/dist/vite-plugins/font.d.ts.map +1 -0
  339. package/dist/vite-plugins/font.js +111 -0
  340. package/dist/vite-plugins/font.js.map +1 -0
  341. package/dist/vite-plugins/i18n.d.ts +11 -2
  342. package/dist/vite-plugins/i18n.d.ts.map +1 -1
  343. package/dist/vite-plugins/i18n.js +74 -8
  344. package/dist/vite-plugins/i18n.js.map +1 -1
  345. package/dist/vite-plugins/icon-worker-env.d.ts +4 -0
  346. package/dist/vite-plugins/icon-worker-env.d.ts.map +1 -0
  347. package/dist/vite-plugins/icon-worker-env.js +23 -0
  348. package/dist/vite-plugins/icon-worker-env.js.map +1 -0
  349. package/dist/vite-plugins/icons.d.ts.map +1 -1
  350. package/dist/vite-plugins/icons.js +4 -9
  351. package/dist/vite-plugins/icons.js.map +1 -1
  352. package/dist/vite-plugins/index.d.ts +10 -1
  353. package/dist/vite-plugins/index.d.ts.map +1 -1
  354. package/dist/vite-plugins/index.js +17 -3
  355. package/dist/vite-plugins/index.js.map +1 -1
  356. package/dist/vite-plugins/native.d.ts.map +1 -1
  357. package/dist/vite-plugins/native.js +0 -4
  358. package/dist/vite-plugins/native.js.map +1 -1
  359. package/dist/vite-plugins/react-compiler.d.ts.map +1 -1
  360. package/dist/vite-plugins/react-compiler.js +57 -18
  361. package/dist/vite-plugins/react-compiler.js.map +1 -1
  362. package/dist/vite-plugins/resource-shared.d.ts +3 -1
  363. package/dist/vite-plugins/resource-shared.d.ts.map +1 -1
  364. package/dist/vite-plugins/resource-shared.js +3 -1
  365. package/dist/vite-plugins/resource-shared.js.map +1 -1
  366. package/dist/vite-plugins/resources.d.ts.map +1 -1
  367. package/dist/vite-plugins/resources.js +9 -6
  368. package/dist/vite-plugins/resources.js.map +1 -1
  369. package/dist/vite-plugins/self-contained.d.ts.map +1 -1
  370. package/dist/vite-plugins/self-contained.js +159 -158
  371. package/dist/vite-plugins/self-contained.js.map +1 -1
  372. package/dist/vite-plugins/settings-worker-env.d.ts +1 -1
  373. package/dist/vite-plugins/settings-worker-env.d.ts.map +1 -1
  374. package/dist/vite-plugins/settings-worker-env.js +4 -4
  375. package/dist/vite-plugins/settings-worker-env.js.map +1 -1
  376. package/dist/vite-plugins/settings.d.ts.map +1 -1
  377. package/dist/vite-plugins/settings.js +25 -14
  378. package/dist/vite-plugins/settings.js.map +1 -1
  379. package/dist/vite-plugins/store-links.d.ts.map +1 -1
  380. package/dist/vite-plugins/store-links.js +9 -5
  381. package/dist/vite-plugins/store-links.js.map +1 -1
  382. package/dist/vite-plugins/undeclared-library.d.ts.map +1 -1
  383. package/dist/vite-plugins/undeclared-library.js +18 -15
  384. package/dist/vite-plugins/undeclared-library.js.map +1 -1
  385. package/dist/vite-plugins/worker.d.ts.map +1 -1
  386. package/dist/vite-plugins/worker.js +21 -13
  387. package/dist/vite-plugins/worker.js.map +1 -1
  388. package/dist/vitest-plugin.d.ts +4 -3
  389. package/dist/vitest-plugin.d.ts.map +1 -1
  390. package/dist/vitest-plugin.js +12 -8
  391. package/dist/vitest-plugin.js.map +1 -1
  392. package/env.d.ts +9 -0
  393. package/package.json +18 -13
  394. package/src/builder.ts +45 -12
  395. package/src/cli.ts +15 -2
  396. package/src/codegen/config-dependencies.ts +470 -0
  397. package/src/codegen/freshness.ts +5 -1
  398. package/src/codegen/reference.ts +1 -0
  399. package/src/codegen/run-codegen.ts +51 -21
  400. package/src/codegen/store-resolver.ts +9 -4
  401. package/src/commands/build.ts +13 -2
  402. package/src/commands/cleanup.ts +48 -0
  403. package/src/commands/codegen.ts +6 -5
  404. package/src/commands/deploy.ts +10 -2
  405. package/src/commands/dev.ts +45 -4
  406. package/src/commands/docs.ts +1 -0
  407. package/src/deploy/depends.ts +30 -3
  408. package/src/deploy/download.ts +33 -24
  409. package/src/deploy/freedesktop/metainfo.ts +73 -21
  410. package/src/deploy/freedesktop/validate.ts +80 -15
  411. package/src/deploy/native-addon.ts +183 -0
  412. package/src/deploy/nfpm/config.ts +13 -4
  413. package/src/deploy/nfpm/contents.ts +8 -0
  414. package/src/deploy/node-runtime/download.ts +2 -2
  415. package/src/deploy/node-runtime/elf.ts +46 -5
  416. package/src/deploy/node-runtime/guard.ts +10 -14
  417. package/src/deploy/node-runtime/index.ts +148 -12
  418. package/src/deploy/node-runtime/sonames.ts +17 -0
  419. package/src/deploy/notices/node-runtime.ts +2 -2
  420. package/src/deploy/payload/launcher.ts +20 -1
  421. package/src/deploy/payload/stage.ts +76 -5
  422. package/src/deploy/run-deploy.ts +227 -72
  423. package/src/deploy/settings/arch.ts +40 -8
  424. package/src/deploy/settings/build-manifest.ts +28 -3
  425. package/src/deploy/settings/extra-files.ts +30 -4
  426. package/src/deploy/settings/index.ts +7 -2
  427. package/src/deploy/settings/libraries.ts +2 -1
  428. package/src/deploy/settings/paths.ts +80 -13
  429. package/src/deploy/targets/appimage.ts +1 -0
  430. package/src/deploy/targets/flatpak-pnpm.ts +4 -4
  431. package/src/deploy/targets/flatpak-source.ts +15 -2
  432. package/src/deploy/targets/flatpak.ts +1 -0
  433. package/src/deploy/targets/nfpm-target.ts +14 -6
  434. package/src/deploy/types.ts +5 -1
  435. package/src/deploy/vendored/appimagetool.ts +2 -2
  436. package/src/deploy/vendored/nfpm.ts +1 -1
  437. package/src/dev/catalog-writes.ts +35 -0
  438. package/src/dev/entry-env.ts +2 -1
  439. package/src/dev/font-dir.ts +11 -0
  440. package/src/dev/headless.ts +40 -0
  441. package/src/dev/runner-deps.ts +20 -7
  442. package/src/dev/runner-main.ts +12 -3
  443. package/src/dev/runner.ts +37 -7
  444. package/src/dev/supervisor.ts +183 -32
  445. package/src/dev/vite-dev-server.ts +20 -2
  446. package/src/dev/watch-ignore.ts +16 -0
  447. package/src/i18n/catalogs.ts +21 -8
  448. package/src/i18n/source-messages.ts +1446 -29
  449. package/src/internal/agent-rules.ts +7 -2
  450. package/src/internal/banner.ts +27 -6
  451. package/src/internal/build-manifest.ts +25 -1
  452. package/src/internal/build-output.ts +171 -0
  453. package/src/internal/cache-root.ts +12 -0
  454. package/src/internal/compile-cache-store.ts +50 -0
  455. package/src/internal/compile-cache.ts +20 -0
  456. package/src/internal/deploy-out-dir.ts +8 -0
  457. package/src/internal/docs-elements.ts +10 -4
  458. package/src/internal/entry-arg.ts +8 -1
  459. package/src/internal/errors.ts +1 -1
  460. package/src/internal/font-path.ts +15 -0
  461. package/src/internal/font-staging.ts +131 -0
  462. package/src/internal/icon-staging.ts +58 -0
  463. package/src/internal/import-scan.ts +206 -0
  464. package/src/internal/module-hash.ts +22 -0
  465. package/src/internal/output-directory.ts +699 -0
  466. package/src/internal/parent-process.ts +110 -0
  467. package/src/internal/prepare-project.ts +11 -5
  468. package/src/internal/react-compiler-cache.ts +246 -0
  469. package/src/internal/source-imports.ts +57 -12
  470. package/src/internal/staging-file.ts +42 -0
  471. package/src/internal/xdg-banner.ts +13 -0
  472. package/src/internal/xdg-data-dirs.ts +1 -1
  473. package/src/mcp/client.ts +2 -2
  474. package/src/settings/schema.ts +4 -10
  475. package/src/vite-plugins/asset-extensions.ts +2 -0
  476. package/src/vite-plugins/asset-imports.ts +23 -5
  477. package/src/vite-plugins/asset-specifier.ts +17 -0
  478. package/src/vite-plugins/build-manifest.ts +7 -1
  479. package/src/vite-plugins/built-url.ts +6 -2
  480. package/src/vite-plugins/css.ts +16 -5
  481. package/src/vite-plugins/ensure-store.ts +2 -2
  482. package/src/vite-plugins/fast-refresh/refresh-filter.ts +10 -1
  483. package/src/vite-plugins/fast-refresh/swc-refresh.ts +33 -14
  484. package/src/vite-plugins/font-name.ts +582 -0
  485. package/src/vite-plugins/font-worker-env.ts +25 -0
  486. package/src/vite-plugins/font.ts +180 -0
  487. package/src/vite-plugins/i18n.ts +122 -11
  488. package/src/vite-plugins/icon-worker-env.ts +36 -0
  489. package/src/vite-plugins/icons.ts +4 -10
  490. package/src/vite-plugins/index.ts +34 -9
  491. package/src/vite-plugins/native.ts +0 -5
  492. package/src/vite-plugins/react-compiler.ts +83 -19
  493. package/src/vite-plugins/resource-shared.ts +4 -0
  494. package/src/vite-plugins/resources.ts +11 -5
  495. package/src/vite-plugins/self-contained.ts +184 -185
  496. package/src/vite-plugins/settings-worker-env.ts +4 -4
  497. package/src/vite-plugins/settings.ts +36 -16
  498. package/src/vite-plugins/store-links.ts +10 -5
  499. package/src/vite-plugins/undeclared-library.ts +19 -15
  500. package/src/vite-plugins/worker.ts +31 -15
  501. package/src/vitest-plugin.ts +12 -8
@@ -1,9 +1,9 @@
1
1
  import { error, exitCodeForSignal, info, installGracefulShutdown } from "@gtkx/utils";
2
2
  import { fork as nodeFork } from "node:child_process";
3
- import { type FSWatcher, watch as watchFs } from "node:fs";
4
- import { basename, dirname } from "node:path";
3
+ import { type FSWatcher, statSync, watch as watchFs } from "node:fs";
4
+ import { basename, dirname, join, relative } from "node:path";
5
5
  import { fileURLToPath } from "node:url";
6
- import { DEV_ENTRY_ENV } from "./entry-env.js";
6
+ import { DEV_CONFIG_ENV, DEV_ENTRY_ENV } from "./entry-env.js";
7
7
 
8
8
  type SupervisedChild = {
9
9
  killed: boolean;
@@ -18,25 +18,31 @@ type ForkRunner = (modulePath: string, args: string[], env: NodeJS.ProcessEnv, c
18
18
 
19
19
  type DevWatch = {
20
20
  paths: string[];
21
- regenerate: () => Promise<void>;
21
+ resolvePaths: () => string[];
22
+ regenerate: () => Promise<string[]>;
22
23
  };
23
24
 
24
25
  type SupervisorState = {
25
26
  runnerPath: string;
26
27
  entryPath: string;
28
+ configFile: string;
27
29
  cwd: string;
28
30
  args: string[];
29
31
  watch: DevWatch | undefined;
30
32
  watchers: FSWatcher[];
33
+ changedPaths: Set<string>;
34
+ restartTimer: DebounceTimer;
31
35
  fork: ForkRunner;
32
36
  child: SupervisedChild | null;
33
37
  isShuttingDown: boolean;
34
38
  isRestarting: boolean;
39
+ isRestartPending: boolean;
35
40
  capturedChildExit: number | undefined;
36
41
  };
37
42
 
38
43
  type DevSupervisorOptions = {
39
44
  entryPath: string;
45
+ configFile: string;
40
46
  cwd: string;
41
47
  args?: string[] | undefined;
42
48
  watch?: DevWatch | undefined;
@@ -128,7 +134,7 @@ const launch = (state: SupervisorState): void => {
128
134
  const child = state.fork(
129
135
  state.runnerPath,
130
136
  state.args,
131
- { ...process.env, [DEV_ENTRY_ENV]: state.entryPath },
137
+ { ...process.env, [DEV_CONFIG_ENV]: state.configFile, [DEV_ENTRY_ENV]: state.entryPath },
132
138
  state.cwd,
133
139
  );
134
140
 
@@ -139,39 +145,94 @@ const launch = (state: SupervisorState): void => {
139
145
  });
140
146
  };
141
147
 
142
- const isRestartBlocked = (state: SupervisorState): boolean => state.isRestarting || state.isShuttingDown;
143
-
144
- const relaunchAfterExit = (state: SupervisorState): void => {
148
+ const runPendingRestart = (state: SupervisorState): void => {
145
149
  state.isRestarting = false;
146
150
 
151
+ if (!state.isRestartPending || state.isShuttingDown) {
152
+ return;
153
+ }
154
+
155
+ state.isRestartPending = false;
156
+ void restart(state);
157
+ };
158
+
159
+ const relaunchAfterExit = (state: SupervisorState): void => {
147
160
  if (state.isShuttingDown) {
161
+ state.isRestarting = false;
162
+
148
163
  return;
149
164
  }
150
165
 
151
166
  info("Restarting dev runner...");
152
167
  launch(state);
168
+ runPendingRestart(state);
169
+ };
170
+
171
+ const isSupervisorShuttingDown = (state: SupervisorState): boolean => state.isShuttingDown;
172
+
173
+ const reconcileConfigWatchers = (
174
+ state: SupervisorState,
175
+ paths: string[],
176
+ previous: ReadonlyMap<string, string | null>,
177
+ ): void => {
178
+ const changed = changedWatchPaths(previous, paths);
179
+
180
+ closeWatchers(state);
181
+
182
+ if (state.watch !== undefined) {
183
+ state.watch.paths = paths;
184
+ }
185
+
186
+ if (state.isShuttingDown) {
187
+ return;
188
+ }
189
+
190
+ installConfigWatchers(state);
191
+
192
+ if (changed.length > 0 && !state.isRestartPending) {
193
+ scheduleRestart(state, changed);
194
+ }
195
+ };
196
+
197
+ const consumeChangedPaths = (state: SupervisorState): string => {
198
+ const changed = [...state.changedPaths].map((path) => relative(state.cwd, path));
199
+ state.changedPaths.clear();
200
+
201
+ return changed.length === 0 ? basename(state.configFile) : changed.join(", ");
153
202
  };
154
203
 
155
204
  const restart = async (state: SupervisorState): Promise<void> => {
156
205
  const watch = state.watch;
157
206
 
158
- if (watch === undefined || isRestartBlocked(state)) {
207
+ if (watch === undefined || state.isShuttingDown) {
208
+ return;
209
+ }
210
+
211
+ if (state.isRestarting) {
212
+ state.isRestartPending = true;
213
+
159
214
  return;
160
215
  }
161
216
 
162
217
  state.isRestarting = true;
163
- info("gtkx.config.ts changed; regenerating bindings...");
218
+ info(`${consumeChangedPaths(state)} changed; regenerating bindings...`);
219
+ closeWatchers(state);
220
+ watch.paths = watch.resolvePaths();
221
+ const previous = snapshotWatchPaths(watch.paths);
222
+ installConfigWatchers(state);
164
223
 
165
224
  try {
166
- await watch.regenerate();
225
+ const paths = await watch.regenerate();
226
+ reconcileConfigWatchers(state, paths, previous);
167
227
  } catch (error_) {
228
+ reconcileConfigWatchers(state, watch.resolvePaths(), previous);
168
229
  error("Codegen failed; keeping the current dev runner. Fix the error and save again.", error_);
169
- state.isRestarting = false;
230
+ runPendingRestart(state);
170
231
 
171
232
  return;
172
233
  }
173
234
 
174
- if (state.isShuttingDown) {
235
+ if (isSupervisorShuttingDown(state)) {
175
236
  state.isRestarting = false;
176
237
 
177
238
  return;
@@ -180,8 +241,8 @@ const restart = async (state: SupervisorState): Promise<void> => {
180
241
  const current = state.child;
181
242
 
182
243
  if (current === null) {
183
- state.isRestarting = false;
184
244
  launch(state);
245
+ runPendingRestart(state);
185
246
 
186
247
  return;
187
248
  }
@@ -193,29 +254,103 @@ const restart = async (state: SupervisorState): Promise<void> => {
193
254
  forwardSignal(current, "SIGTERM");
194
255
  };
195
256
 
196
- const scheduleRestart = (state: SupervisorState, timer: DebounceTimer): void => {
257
+ const scheduleRestart = (state: SupervisorState, changedPaths: string[] = []): void => {
258
+ const timer = state.restartTimer;
259
+
260
+ for (const path of changedPaths) {
261
+ state.changedPaths.add(path);
262
+ }
263
+
197
264
  if (timer.handle !== null) {
198
265
  clearTimeout(timer.handle);
199
266
  }
200
267
 
201
- timer.handle = setTimeout(() => void restart(state), CONFIG_DEBOUNCE_MS);
268
+ timer.handle = setTimeout(() => {
269
+ timer.handle = null;
270
+ void restart(state);
271
+ }, CONFIG_DEBOUNCE_MS);
202
272
  };
203
273
 
204
- const isWatchedChange = (state: SupervisorState, names: Set<string>, filename: string | Buffer | null): boolean => {
274
+ const watchedChangePath = (
275
+ state: SupervisorState,
276
+ directory: string,
277
+ names: Set<string>,
278
+ filename: string | Buffer | null,
279
+ ): string | undefined => {
205
280
  if (filename === null || state.isShuttingDown) {
281
+ return undefined;
282
+ }
283
+
284
+ const name = basename(filename.toString());
285
+
286
+ return names.has(name) ? join(directory, name) : undefined;
287
+ };
288
+
289
+ const isDirectory = (path: string): boolean => {
290
+ try {
291
+ return statSync(path, { throwIfNoEntry: false })?.isDirectory() === true;
292
+ } catch {
206
293
  return false;
207
294
  }
295
+ };
208
296
 
209
- return names.has(basename(filename.toString()));
297
+ const nearestWatchTarget = (path: string): { directory: string; name: string } => {
298
+ let directory = dirname(path);
299
+ let name = basename(path);
300
+
301
+ while (!isDirectory(directory)) {
302
+ const parent = dirname(directory);
303
+
304
+ if (parent === directory) {
305
+ break;
306
+ }
307
+
308
+ name = basename(directory);
309
+ directory = parent;
310
+ }
311
+
312
+ return { directory, name };
210
313
  };
211
314
 
315
+ const watchTargets = (paths: string[]): Set<string> =>
316
+ new Set(paths.flatMap((path) => {
317
+ const { directory, name } = nearestWatchTarget(path);
318
+
319
+ return [path, join(directory, name)];
320
+ }));
321
+
322
+ const watchPathState = (path: string): string | null => {
323
+ try {
324
+ const stat = statSync(path, { bigint: true, throwIfNoEntry: false });
325
+
326
+ return stat === undefined
327
+ ? null
328
+ : [stat.dev, stat.ino, stat.mode, stat.size, stat.mtimeNs, stat.ctimeNs].join(":");
329
+ } catch {
330
+ return null;
331
+ }
332
+ };
333
+
334
+ const snapshotWatchPaths = (paths: string[]): Map<string, string | null> =>
335
+ new Map([...watchTargets(paths)].map((path) => [path, watchPathState(path)]));
336
+
337
+ const changedWatchPaths = (
338
+ previous: ReadonlyMap<string, string | null>,
339
+ paths: string[],
340
+ ): string[] =>
341
+ [...watchTargets(paths)].filter((path) => {
342
+ const current = watchPathState(path);
343
+
344
+ return previous.has(path) ? previous.get(path) !== current : current !== null;
345
+ });
346
+
212
347
  const groupWatchNamesByDirectory = (paths: string[]): Map<string, Set<string>> => {
213
348
  const namesByDirectory: Map<string, Set<string>> = new Map();
214
349
 
215
350
  for (const path of paths) {
216
- const directory = dirname(path);
351
+ const { directory, name } = nearestWatchTarget(path);
217
352
  const names = namesByDirectory.get(directory) ?? new Set<string>();
218
- names.add(basename(path));
353
+ names.add(name);
219
354
  namesByDirectory.set(directory, names);
220
355
  }
221
356
 
@@ -226,16 +361,23 @@ const watchConfigDirectory = (
226
361
  state: SupervisorState,
227
362
  directory: string,
228
363
  names: Set<string>,
229
- timer: DebounceTimer,
230
364
  ): void => {
231
- const watcher = watchFs(directory, (_event, filename) => {
232
- if (isWatchedChange(state, names, filename)) {
233
- scheduleRestart(state, timer);
234
- }
235
- });
365
+ try {
366
+ const watcher = watchFs(directory, (_event, filename) => {
367
+ const changed = watchedChangePath(state, directory, names, filename);
368
+
369
+ if (changed !== undefined) {
370
+ scheduleRestart(state, [changed]);
371
+ }
372
+ });
236
373
 
237
- watcher.on("error", (): void => undefined);
238
- state.watchers.push(watcher);
374
+ watcher.on("error", (cause) => {
375
+ error(`Configuration watch failed for ${directory}`, cause);
376
+ });
377
+ state.watchers.push(watcher);
378
+ } catch (error_) {
379
+ error(`Configuration watch failed for ${directory}`, error_);
380
+ }
239
381
  };
240
382
 
241
383
  const installConfigWatchers = (state: SupervisorState): void => {
@@ -245,10 +387,8 @@ const installConfigWatchers = (state: SupervisorState): void => {
245
387
  return;
246
388
  }
247
389
 
248
- const timer: DebounceTimer = { handle: null };
249
-
250
390
  for (const [directory, names] of groupWatchNamesByDirectory(watch.paths)) {
251
- watchConfigDirectory(state, directory, names, timer);
391
+ watchConfigDirectory(state, directory, names);
252
392
  }
253
393
  };
254
394
 
@@ -256,6 +396,8 @@ const closeWatchers = (state: SupervisorState): void => {
256
396
  for (const watcher of state.watchers) {
257
397
  watcher.close();
258
398
  }
399
+
400
+ state.watchers = [];
259
401
  };
260
402
 
261
403
  const shutdownOnSignal = (state: SupervisorState, signal: NodeJS.Signals): Promise<void> =>
@@ -263,6 +405,11 @@ const shutdownOnSignal = (state: SupervisorState, signal: NodeJS.Signals): Promi
263
405
  state.isShuttingDown = true;
264
406
  closeWatchers(state);
265
407
 
408
+ if (state.restartTimer.handle !== null) {
409
+ clearTimeout(state.restartTimer.handle);
410
+ state.restartTimer.handle = null;
411
+ }
412
+
266
413
  if (!state.child) {
267
414
  resolve();
268
415
 
@@ -286,19 +433,23 @@ const installShutdown = (state: SupervisorState): void => {
286
433
  };
287
434
 
288
435
  const runDevSupervisor = async (options: DevSupervisorOptions): Promise<never> => {
289
- const { entryPath, cwd, args = [], watch, fork = defaultForkRunner } = options;
436
+ const { entryPath, configFile, cwd, args = [], watch, fork = defaultForkRunner } = options;
290
437
 
291
438
  const state: SupervisorState = {
292
439
  runnerPath: fileURLToPath(DEV_RUNNER_URL),
293
440
  entryPath,
441
+ configFile,
294
442
  cwd,
295
443
  args,
296
444
  watch,
297
445
  watchers: [],
446
+ changedPaths: new Set(),
447
+ restartTimer: { handle: null },
298
448
  fork,
299
449
  child: null,
300
450
  isShuttingDown: false,
301
451
  isRestarting: false,
452
+ isRestartPending: false,
302
453
  capturedChildExit: undefined,
303
454
  };
304
455
 
@@ -1,5 +1,7 @@
1
1
  import type { InlineConfig, Plugin } from "vite";
2
+ import { warn } from "@gtkx/utils";
2
3
  import { join } from "node:path";
4
+ import { createWatchIgnore } from "./watch-ignore.js";
3
5
 
4
6
  type DevServerModule = object;
5
7
  type DevServerWatchEvent = "add" | "change" | "unlink";
@@ -59,13 +61,29 @@ const isServerConfigFile = (config: DevServerConfig, changedPath: string): boole
59
61
  return envFilesForMode(config).includes(changedPath);
60
62
  };
61
63
 
62
- const createDevServerConfig = (root: string, plugins: Plugin[]): InlineConfig => ({
64
+ const watchErrorPlugin = (): Plugin => ({
65
+ name: "gtkx:watch-errors",
66
+ enforce: "pre",
67
+
68
+ configureServer(server) {
69
+ server.watcher.on("error", (cause) => {
70
+ warn("File watch error; the dev server keeps watching.", cause);
71
+ });
72
+ },
73
+ });
74
+
75
+ const createDevServerConfig = (
76
+ root: string,
77
+ deployOutDir: string | undefined,
78
+ plugins: Plugin[],
79
+ ): InlineConfig => ({
63
80
  root,
64
81
  appType: "custom",
65
- plugins,
82
+ plugins: [watchErrorPlugin(), ...plugins],
66
83
  server: {
67
84
  middlewareMode: true,
68
85
  watch: {
86
+ ignored: createWatchIgnore(root, deployOutDir),
69
87
  awaitWriteFinish: {
70
88
  stabilityThreshold: WRITE_STABILITY_THRESHOLD_MS,
71
89
  pollInterval: WRITE_POLL_INTERVAL_MS,
@@ -0,0 +1,16 @@
1
+ import { isPathInside, isPathWithin } from "@gtkx/utils";
2
+ import { resolve } from "node:path";
3
+ import { deployOutDirFor } from "../internal/deploy-out-dir.js";
4
+
5
+ const REFERENCE_DIR = ".gtkx";
6
+
7
+ const createWatchIgnore = (root: string, deployOutDir: string | undefined): ((path: string) => boolean) => {
8
+ const projectRoot = resolve(root);
9
+ const generated = [deployOutDirFor(projectRoot, deployOutDir), resolve(projectRoot, REFERENCE_DIR)].filter(
10
+ (directory) => isPathInside(projectRoot, directory),
11
+ );
12
+
13
+ return (path) => generated.some((directory) => isPathWithin(directory, resolve(path)));
14
+ };
15
+
16
+ export { createWatchIgnore };
@@ -28,11 +28,17 @@ type CatalogProject = {
28
28
  };
29
29
 
30
30
  type PreparedCatalog = {
31
+ content: Buffer;
31
32
  isChanged: boolean;
32
33
  output: string;
33
34
  target: string;
34
35
  };
35
36
 
37
+ type WrittenCatalog = {
38
+ content: Buffer;
39
+ path: string;
40
+ };
41
+
36
42
  const PO_DIRNAME = "po";
37
43
  const LOCALE_DIRNAME = "locale";
38
44
  const LINGUAS_FILENAME = "LINGUAS";
@@ -133,6 +139,7 @@ const initializeCatalog = (catalog: Catalog, template: string, output: string):
133
139
  `--input=${template}`,
134
140
  `--output-file=${output}`,
135
141
  ],
142
+ options: { stdio: "pipe" },
136
143
  target: catalog.path,
137
144
  });
138
145
  };
@@ -164,16 +171,25 @@ const prepareCatalog = (
164
171
  initializeCatalog(catalog, template, output);
165
172
  }
166
173
 
174
+ const content = readFileSync(output);
175
+
167
176
  return {
168
- isChanged: !isExisting || !readFileSync(output).equals(readFileSync(catalog.path)),
177
+ content,
178
+ isChanged: !isExisting || !content.equals(readFileSync(catalog.path)),
169
179
  output,
170
180
  target: catalog.path,
171
181
  };
172
182
  };
173
183
 
174
- const synchronizeCatalogs = (project: CatalogProject): void => {
184
+ const replaceCatalog = (catalog: PreparedCatalog): WrittenCatalog => {
185
+ renameSync(catalog.output, catalog.target);
186
+
187
+ return { content: catalog.content, path: catalog.target };
188
+ };
189
+
190
+ const synchronizeCatalogs = (project: CatalogProject): WrittenCatalog[] => {
175
191
  if (project.catalogs.length === 0) {
176
- return;
192
+ return [];
177
193
  }
178
194
 
179
195
  const template = join(project.poDir, `${project.domain}.pot`);
@@ -184,11 +200,7 @@ const synchronizeCatalogs = (project: CatalogProject): void => {
184
200
  const merged = project.catalogs.map((catalog, index) =>
185
201
  prepareCatalog(catalog, index, template, stagingDir));
186
202
 
187
- for (const catalog of merged) {
188
- if (catalog.isChanged) {
189
- renameSync(catalog.output, catalog.target);
190
- }
191
- }
203
+ return merged.filter((catalog) => catalog.isChanged).map((catalog) => replaceCatalog(catalog));
192
204
  } finally {
193
205
  rmSync(stagingDir, { recursive: true, force: true });
194
206
  }
@@ -214,4 +226,5 @@ export {
214
226
  requiresCatalogInitialization,
215
227
  resolveCatalogProject,
216
228
  synchronizeCatalogs,
229
+ type WrittenCatalog,
217
230
  };