@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 +1 @@
1
- {"version":3,"file":"source-messages.js","sourceRoot":"","sources":["../../src/i18n/source-messages.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ExtractedKey, ExtractedKeysMap, Logger, Plugin } from \"i18next-cli\";\nimport { isPathInside, isPathWithin, toPosixPath } from \"@gtkx/utils\";\nimport { runExtractor } from \"i18next-cli\";\nimport {\n existsSync,\n mkdirSync,\n mkdtempSync,\n readFileSync,\n rmSync,\n writeFileSync,\n} from \"node:fs\";\nimport { dirname, isAbsolute, join, relative, resolve } from \"node:path\";\nimport type { CatalogProject } from \"./catalogs.js\";\nimport { runCliTool } from \"../internal/run-cli-tool.js\";\nimport { replaceCatalogTemplate } from \"./catalog-template.js\";\nimport { metadataTemplateFiles } from \"./metadata-templates.js\";\nimport { clearI18nResources, i18nToolkitConfig } from \"./types.js\";\n\ntype SourceLocation = {\n file: string;\n line?: number | undefined;\n column?: number | undefined;\n};\n\ntype SourceMessage = {\n context: string | null;\n locations: SourceLocation[];\n namespace: string;\n plural: string | null;\n singular: string;\n sourceKey: string;\n};\n\ntype SyntheticEntry = {\n call: string;\n line: number | undefined;\n};\n\ntype SourceExtraction = {\n messages: SourceMessage[];\n output: string;\n project: CatalogProject;\n workDir: string;\n};\n\ntype CatalogTemplateExtraction = {\n messages: SourceMessage[];\n output?: string | undefined;\n project: CatalogProject;\n shouldPreserveMetadataMessages: boolean;\n};\n\ntype PluralVariant = {\n category: string;\n defaultValue: string;\n locations: SourceLocation[];\n};\n\ntype PluralGroup = {\n baseKey: string;\n namespace: string;\n variants: PluralVariant[];\n};\n\nconst CONTEXT_SEPARATOR = \"\\u{4}\";\nconst DEFAULT_NAMESPACE = \"translation\";\nconst POTFILES_FILENAME = \"POTFILES.in\";\nconst SYNTHETIC_FILENAME = \"messages.js\";\n\nconst quietLogger = (): { logger: Logger; reports: string[] } => {\n const reports: string[] = [];\n\n return {\n reports,\n logger: {\n info() {\n return;\n },\n warn(message, more) {\n const detail = more === undefined ? \"\" : ` ${String(more)}`;\n reports.push(`${message}${detail}`);\n },\n error(message) {\n reports.push(String(message));\n },\n },\n };\n};\n\nconst splitContext = (key: string): { context: string | null; msgid: string } => {\n const index = key.lastIndexOf(CONTEXT_SEPARATOR);\n\n if (index === -1) {\n return { context: null, msgid: key };\n }\n\n return { context: key.slice(index + CONTEXT_SEPARATOR.length), msgid: key.slice(0, index) };\n};\n\nconst namespaceFor = (entry: ExtractedKey): string =>\n typeof entry.ns === \"string\" ? entry.ns : DEFAULT_NAMESPACE;\n\nconst validateIdentity = (context: string | null, msgid: string): void => {\n if (context === \"\" || msgid.length === 0) {\n throw new Error(\"Translation keys and contexts cannot be empty\");\n }\n};\n\nconst compareLocations = (left: SourceLocation, right: SourceLocation): number =>\n left.file.localeCompare(right.file) ||\n (left.line ?? 0) - (right.line ?? 0) ||\n (left.column ?? 0) - (right.column ?? 0);\n\nconst normalizedLocations = (locations: SourceLocation[]): SourceLocation[] => {\n const unique: Map<string, SourceLocation> = new Map();\n\n for (const location of locations) {\n const key = `${location.file}\\0${String(location.line)}\\0${String(location.column)}`;\n unique.set(key, location);\n }\n\n return unique.values().toArray().toSorted(compareLocations);\n};\n\nconst pointSource = (entry: ExtractedKey, msgid: string): string => {\n if (typeof entry.defaultValue !== \"string\") {\n return msgid;\n }\n\n if (entry.explicitDefault === true) {\n return entry.defaultValue;\n }\n\n return entry.defaultValue === msgid || msgid.endsWith(`.${entry.defaultValue}`)\n ? msgid\n : entry.defaultValue;\n};\n\nconst pointMessage = (entry: ExtractedKey): SourceMessage => {\n const { context, msgid } = splitContext(entry.key);\n validateIdentity(context, msgid);\n const singular = pointSource(entry, msgid);\n\n if (singular.length === 0) {\n throw new Error(\"Translation source strings cannot be empty\");\n }\n\n return {\n context,\n locations: normalizedLocations(entry.locations ?? []),\n namespace: namespaceFor(entry),\n plural: null,\n singular,\n sourceKey: msgid,\n };\n};\n\nconst expandedPlural = (entry: ExtractedKey): { baseKey: string; variant: PluralVariant } => {\n if (entry.isOrdinal === true) {\n throw new Error(\"GNU gettext catalogs do not support i18next ordinal plurals\");\n }\n\n const suffix = /_(few|many|one|other|two|zero)$/u.exec(entry.key);\n const defaultValue = entry.defaultValue;\n const category = suffix?.[1];\n\n if (suffix === null || category === undefined || typeof defaultValue !== \"string\") {\n throw new Error(\"Unable to recover an i18next plural source pair\");\n }\n\n return {\n baseKey: entry.key.slice(0, -suffix[0].length),\n variant: {\n category,\n defaultValue,\n locations: entry.locations ?? [],\n },\n };\n};\n\nconst groupedPlurals = (entries: ExtractedKey[]): PluralGroup[] => {\n const groups: Map<string, PluralGroup> = new Map();\n\n for (const entry of entries) {\n const { baseKey, variant } = expandedPlural(entry);\n const namespace = namespaceFor(entry);\n const key = `${namespace}\\0${baseKey}`;\n const group = groups.get(key) ?? { baseKey, namespace, variants: [] };\n group.variants.push(variant);\n groups.set(key, group);\n }\n\n return groups.values().toArray();\n};\n\nconst pairedVariants = (variants: PluralVariant[]): { one: PluralVariant; other: PluralVariant } => {\n const categories = new Map(variants.map((variant) => [variant.category, variant]));\n\n if (categories.size !== 2 || !categories.has(\"one\") || !categories.has(\"other\")) {\n throw new Error(\"GNU gettext requires one singular and one plural source string\");\n }\n\n const one = categories.get(\"one\");\n const other = categories.get(\"other\");\n\n if (one === undefined || other === undefined) {\n throw new Error(\"Unable to recover an i18next plural source pair\");\n }\n\n return { one, other };\n};\n\nconst pluralMessage = ({ baseKey, namespace, variants }: PluralGroup): SourceMessage => {\n const { one, other } = pairedVariants(variants);\n const { context, msgid } = splitContext(baseKey);\n validateIdentity(context, msgid);\n const singular = one.defaultValue;\n const plural = other.defaultValue;\n\n if (singular === plural || singular.length === 0 || plural.length === 0) {\n throw new Error(\"GNU gettext plural source strings must be distinct and non-empty\");\n }\n\n return {\n context,\n locations: normalizedLocations(variants.flatMap((variant) => variant.locations)),\n namespace,\n plural,\n singular,\n sourceKey: msgid,\n };\n};\n\nconst pluralMessages = (entries: ExtractedKey[]): SourceMessage[] =>\n groupedPlurals(entries).map((group) => pluralMessage(group));\n\nconst assertCardinal = (entry: ExtractedKey): void => {\n if (entry.isOrdinal === true) {\n throw new Error(\"GNU gettext catalogs do not support i18next ordinal plurals\");\n }\n};\n\nconst sourceMessages = (entries: ExtractedKey[]): SourceMessage[] => {\n const points: ExtractedKey[] = [];\n const plurals: ExtractedKey[] = [];\n\n for (const entry of entries) {\n assertCardinal(entry);\n\n if (entry.isExpandedPlural === true) {\n plurals.push(entry);\n continue;\n }\n\n if (entry.hasCount === true) {\n throw new Error(\"Count-based translations require an explicit plural source string\");\n }\n\n points.push(entry);\n }\n\n return [...points.map((entry) => pointMessage(entry)), ...pluralMessages(plurals)];\n};\n\nconst compareMessages = (left: SourceMessage, right: SourceMessage): number =>\n left.namespace.localeCompare(right.namespace) ||\n (left.context ?? \"\").localeCompare(right.context ?? \"\") ||\n left.singular.localeCompare(right.singular) ||\n (left.plural ?? \"\").localeCompare(right.plural ?? \"\");\n\nconst inferLocations = (message: SourceMessage, sources: Map<string, string>): SourceMessage => {\n if (message.locations.length > 0) {\n return message;\n }\n\n const locations: SourceLocation[] = [];\n\n for (const [file, source] of sources) {\n const index = source.indexOf(message.sourceKey);\n\n if (index !== -1) {\n locations.push({ file, line: source.slice(0, index).split(\"\\n\").length });\n }\n }\n\n return { ...message, locations };\n};\n\nconst normalizedSourceFiles = (root: string, paths: string[]): string[] => {\n const files = paths\n .map((path) => resolve(root, path))\n .filter((path) => isPathWithin(root, path));\n\n return new Set(files).values().toArray().toSorted((left, right) => left.localeCompare(right));\n};\n\nconst findSourceMessages = async (root: string, sourceFiles: string[]): Promise<SourceMessage[]> => {\n if (sourceFiles.length === 0) {\n clearI18nResources(root);\n\n return [];\n }\n\n let extracted: ExtractedKeysMap | undefined;\n const { logger, reports } = quietLogger();\n\n const capture: Plugin = {\n name: \"gtkx-gettext\",\n onEnd(keys) {\n extracted = keys;\n },\n };\n\n const result = await runExtractor(i18nToolkitConfig(root, sourceFiles, [capture]), {\n logger,\n quiet: true,\n syncPrimaryWithDefaults: true,\n trustDerivedDefaults: true,\n });\n\n if (extracted === undefined || reports.length > 0 || result.hasErrors) {\n throw new Error(reports.join(\"\\n\") || \"i18next extraction failed\");\n }\n\n const sources = new Map(sourceFiles.map((file) => [file, readFileSync(file, \"utf8\")]));\n\n return sourceMessages(extracted.values().toArray())\n .map((message) => inferLocations(message, sources))\n .toSorted(compareMessages);\n};\n\nconst projectPath = (root: string, path: string): string | null => {\n const absolute = isAbsolute(path) ? resolve(path) : resolve(root, path);\n const projectRelative = relative(root, absolute);\n\n if (!isPathInside(root, absolute)) {\n return null;\n }\n\n return toPosixPath(projectRelative);\n};\n\nconst writePotfiles = (project: CatalogProject, sourceFiles: string[]): string => {\n const paths = sourceFiles\n .map((path) => projectPath(project.root, path))\n .filter((path): path is string => path !== null);\n\n const sorted = [...new Set(paths)].toSorted((left, right) => left.localeCompare(right));\n const target = resolve(project.poDir, POTFILES_FILENAME);\n writeFileSync(target, sorted.length === 0 ? \"\" : `${sorted.join(\"\\n\")}\\n`);\n\n return target;\n};\n\nconst renderCatalogCall = (message: SourceMessage): string => {\n const msgid = JSON.stringify(message.singular);\n\n if (message.plural !== null) {\n const plural = JSON.stringify(message.plural);\n\n return message.context === null\n ? `ngettext(${msgid}, ${plural}, 0);`\n : `npgettext(${JSON.stringify(message.context)}, ${msgid}, ${plural}, 0);`;\n }\n\n return message.context === null\n ? `gettext(${msgid});`\n : `pgettext(${JSON.stringify(message.context)}, ${msgid});`;\n};\n\nconst locatedOwners = (\n project: CatalogProject,\n message: SourceMessage,\n): { path: string; line: number | undefined }[] => {\n const owners: { path: string; line: number | undefined }[] = [];\n\n for (const location of message.locations) {\n const path = projectPath(project.root, location.file);\n\n if (path !== null) {\n owners.push({ path, line: location.line });\n }\n }\n\n const unique = new Map(owners.map((owner) => [`${owner.path}\\0${String(owner.line)}`, owner]));\n\n return unique.values().toArray();\n};\n\nconst sourceOwners = (\n project: CatalogProject,\n message: SourceMessage,\n): { path: string; line: number | undefined }[] => {\n const located = locatedOwners(project, message);\n\n return located.length > 0 ? located : [{ path: SYNTHETIC_FILENAME, line: undefined }];\n};\n\nconst syntheticEntries = (\n project: CatalogProject,\n messages: SourceMessage[],\n): Map<string, SyntheticEntry[]> => {\n const entries: Map<string, SyntheticEntry[]> = new Map();\n\n for (const message of messages) {\n for (const owner of sourceOwners(project, message)) {\n const owned = entries.get(owner.path) ?? [];\n owned.push({ call: renderCatalogCall(message), line: owner.line });\n entries.set(owner.path, owned);\n }\n }\n\n if (entries.size === 0) {\n entries.set(SYNTHETIC_FILENAME, []);\n }\n\n return entries;\n};\n\nconst compareSyntheticEntries = (left: SyntheticEntry, right: SyntheticEntry): number =>\n (left.line ?? Number.MAX_SAFE_INTEGER) - (right.line ?? Number.MAX_SAFE_INTEGER);\n\nconst lastSyntheticLine = (entries: SyntheticEntry[]): number => {\n let line = 0;\n\n for (const entry of entries) {\n line = Math.max(line, entry.line ?? 0);\n }\n\n return line;\n};\n\nconst appendSyntheticEntry = (lines: string[], entry: SyntheticEntry, requestedLine: number): void => {\n const index = requestedLine - 1;\n const existing = lines[index];\n\n if (existing === undefined || existing.length === 0) {\n lines[index] = entry.call;\n\n return;\n }\n\n lines[index] = `${existing} ${entry.call}`;\n};\n\nconst renderSyntheticSource = (entries: SyntheticEntry[]): string => {\n const lines: string[] = [];\n const sorted = entries.toSorted(compareSyntheticEntries);\n let nextLine = lastSyntheticLine(entries) + 1;\n\n for (const entry of sorted) {\n const requestedLine = Math.max(1, entry.line ?? nextLine++);\n appendSyntheticEntry(lines, entry, requestedLine);\n }\n\n return `${lines.join(\"\\n\")}\\n`;\n};\n\nconst writeSyntheticSources = (\n workDir: string,\n project: CatalogProject,\n messages: SourceMessage[],\n): string => {\n const entries = syntheticEntries(project, messages);\n const paths: string[] = [];\n\n for (const [path, owned] of entries) {\n const target = join(workDir, path);\n mkdirSync(dirname(target), { recursive: true });\n writeFileSync(target, renderSyntheticSource(owned));\n paths.push(path);\n }\n\n const potfiles = join(workDir, POTFILES_FILENAME);\n writeFileSync(potfiles, `${paths.toSorted((left, right) => left.localeCompare(right)).join(\"\\n\")}\\n`);\n\n return potfiles;\n};\n\nconst extractSourceMessages = ({ project, messages, output, workDir }: SourceExtraction): void => {\n const potfilesPath = writeSyntheticSources(workDir, project, messages);\n\n runCliTool({\n tool: \"xgettext\",\n args: [\n \"--language=JavaScript\",\n \"--from-code=UTF-8\",\n \"--force-po\",\n \"--keyword=gettext:1\",\n \"--keyword=ngettext:1,2\",\n \"--keyword=pgettext:1c,2\",\n \"--keyword=npgettext:1c,2,3\",\n `--directory=${workDir}`,\n `--files-from=${potfilesPath}`,\n `--output=${output}`,\n ],\n target: output,\n });\n};\n\nconst extractMetadataFragment = (project: CatalogProject, input: string, output: string): void => {\n runCliTool({\n tool: \"msggrep\",\n args: [\n \"--force-po\",\n `--output-file=${output}`,\n ...metadataTemplateFiles(project).map((file) => `--location=${file.relativePath}`),\n input,\n ],\n target: input,\n });\n};\n\nconst joinMetadataFragment = (output: string, fragment: string): void => {\n runCliTool({\n tool: \"xgettext\",\n args: [\"--language=PO\", \"--join-existing\", \"--force-po\", `--output=${output}`, fragment],\n target: output,\n });\n};\n\nconst extractCatalogTemplate = ({\n project,\n messages,\n shouldPreserveMetadataMessages,\n output = resolve(project.poDir, `${project.domain}.pot`),\n}: CatalogTemplateExtraction): void => {\n const workDir = mkdtempSync(join(project.poDir, \".gtkx-i18n-\"));\n const source = join(workDir, \"source.pot\");\n const hasPreviousTemplate = existsSync(output);\n\n try {\n if (shouldPreserveMetadataMessages && hasPreviousTemplate) {\n const fragment = join(workDir, \"metadata.pot\");\n extractMetadataFragment(project, output, fragment);\n extractSourceMessages({ project, messages, output: source, workDir });\n joinMetadataFragment(source, fragment);\n } else {\n extractSourceMessages({ project, messages, output: source, workDir });\n }\n\n replaceCatalogTemplate(source, output);\n } finally {\n rmSync(workDir, { recursive: true, force: true });\n }\n};\n\nconst extractSourceCatalogTo = async (\n project: CatalogProject,\n paths: string[],\n output: string,\n): Promise<void> => {\n const sourceFiles = normalizedSourceFiles(project.root, paths);\n const messages = await findSourceMessages(project.root, sourceFiles);\n writePotfiles(project, sourceFiles);\n extractCatalogTemplate({ project, messages, shouldPreserveMetadataMessages: false, output });\n};\n\nconst extractSourceCatalog = async (\n project: CatalogProject,\n paths: string[],\n shouldPreserveMetadataMessages = true,\n): Promise<void> => {\n const sourceFiles = normalizedSourceFiles(project.root, paths);\n const messages = await findSourceMessages(project.root, sourceFiles);\n writePotfiles(project, sourceFiles);\n extractCatalogTemplate({ project, messages, shouldPreserveMetadataMessages });\n};\n\nexport { extractSourceCatalog, extractSourceCatalogTo };\n"]}
1
+ {"version":3,"file":"source-messages.js","sourceRoot":"","sources":["../../src/i18n/source-messages.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ExtractedKey, ExtractedKeysMap, Logger, Plugin } from \"i18next-cli\";\nimport type { ESTree } from \"vite\";\nimport { type NodePath, parseSync as parseBabelSync, type Scope, traverse, types } from \"@babel/core\";\nimport { isPathInside, isPathWithin, toPosixPath } from \"@gtkx/utils\";\nimport { runExtractor } from \"i18next-cli\";\nimport {\n existsSync,\n mkdirSync,\n mkdtempSync,\n readFileSync,\n rmSync,\n writeFileSync,\n} from \"node:fs\";\nimport { dirname, isAbsolute, join, relative, resolve } from \"node:path\";\nimport { parseSync, Visitor } from \"vite\";\nimport type { CatalogProject } from \"./catalogs.js\";\nimport { runCliTool } from \"../internal/run-cli-tool.js\";\nimport { sourceLanguage } from \"../internal/source-imports.js\";\nimport { replaceCatalogTemplate } from \"./catalog-template.js\";\nimport { metadataTemplateFiles } from \"./metadata-templates.js\";\nimport { clearI18nResources, i18nToolkitConfig } from \"./types.js\";\n\ntype SourceLocation = {\n file: string;\n line?: number | undefined;\n column?: number | undefined;\n};\ntype ExtractedLocation = NonNullable<ExtractedKey[\"locations\"]>[number];\n\ntype SourceMessage = {\n context: string | null;\n locations: SourceLocation[];\n namespace: string;\n plural: string | null;\n singular: string;\n sourceKey: string;\n};\n\ntype SyntheticEntry = {\n call: string;\n line: number | undefined;\n};\n\ntype SourceExtraction = {\n messages: SourceMessage[];\n output: string;\n project: CatalogProject;\n workDir: string;\n};\n\ntype CatalogTemplateExtraction = {\n messages: SourceMessage[];\n output?: string | undefined;\n project: CatalogProject;\n shouldPreserveMetadataMessages: boolean;\n};\n\ntype PluralVariant = {\n category: string;\n defaultValue: string;\n locations: SourceLocation[];\n};\n\ntype PluralGroup = {\n baseKey: string;\n namespace: string;\n variants: PluralVariant[];\n};\n\ntype TranslationReferences = {\n calls: Set<number>;\n elements: Set<number>;\n entryLocations: Map<string, SourcePoint[]>;\n locations: Map<string, SourcePoint>;\n masks: SourceMask[];\n sourcePoints: Map<number, SourcePoint>;\n};\ntype SourceMask = { end: number; start: number };\ntype SourcePoint = { column: number; line: number };\ntype TranslationCallKind = \"alias\" | \"canonical\";\ntype ImportedBinding = {\n imported: string;\n local: string;\n source: string;\n style: \"default\" | \"named\" | \"namespace\";\n};\ntype TranslationHookBinding = { call: types.CallExpression; isCanonical: boolean };\ntype TranslationMemberExpression = types.MemberExpression | types.OptionalMemberExpression;\ntype ResolvedBinding = NonNullable<ReturnType<Scope[\"getBinding\"]>>;\ntype LocatableNode = { loc?: { start: SourcePoint } | null | undefined };\n\nconst CONTEXT_SEPARATOR = \"\\u{4}\";\nconst DEFAULT_NAMESPACE = \"translation\";\nconst POTFILES_FILENAME = \"POTFILES.in\";\nconst SYNTHETIC_FILENAME = \"messages.js\";\nconst UNSUPPORTED_PLURAL_OPTION = /^defaultValue_(few|many|two|zero)$/u;\nconst STATIC_SOURCE_OPTION_NAMES: ReadonlySet<string> = new Set([\n \"context\",\n \"defaultValue\",\n \"defaultValue_one\",\n \"defaultValue_other\",\n \"keyPrefix\",\n]);\nconst NESTED_CONTEXT = /[\"']?context[\"']?\\s*:\\s*(?:\"([^\"]*)\"|'([^']*)')/u;\nconst NESTED_COUNT = /[\"']?count[\"']?\\s*:/u;\nconst NESTED_STRUCTURE_TOKEN = /\"[^\"]*\"|'[^']*'|[()]/gu;\nconst TRANSLATION_MODULES = new Set([\"@gtkx/i18n\", \"i18next\"]);\nconst TRANS_ELEMENTS: ReadonlySet<string> = new Set([\"Trans\", \"TransWithoutContext\"]);\nconst STATIC_KEY_WRAPPER_TYPES: ReadonlySet<string> = new Set([\n \"ParenthesizedExpression\",\n \"TSAsExpression\",\n \"TSSatisfiesExpression\",\n \"TSTypeAssertion\",\n \"TSNonNullExpression\",\n]);\n\nclass SourceExtractionError extends Error {}\n\nconst sourceErrorMessage = (error: unknown): string => {\n if (!(error instanceof Error)) {\n return String(error);\n }\n\n if (\n \"code\" in error &&\n error.code === \"BABEL_PARSE_ERROR\"\n ) {\n const separator = error.message.indexOf(\": \");\n\n if (separator !== -1) {\n return error.message.slice(separator + 2);\n }\n }\n\n return error.message;\n};\n\nconst projectSourcePath = (root: string, path: string): string => {\n const absolute = isAbsolute(path) ? resolve(path) : resolve(root, path);\n\n return toPosixPath(isPathInside(root, absolute) ? relative(root, absolute) : path);\n};\n\nconst sourceExtractionError = (\n root: string,\n path: string,\n point: SourcePoint | null,\n error: unknown,\n): SourceExtractionError => {\n if (error instanceof SourceExtractionError) {\n return error;\n }\n\n const file = projectSourcePath(root, path);\n const location = point === null\n ? file\n : `${file}:${String(point.line)}:${String(point.column + 1)}`;\n\n return new SourceExtractionError(`${location}: ${sourceErrorMessage(error)}`, { cause: error });\n};\n\nconst locatablePoint = (node: LocatableNode): SourcePoint | null => {\n const location = node.loc?.start;\n\n return location === undefined ? null : { column: location.column, line: location.line };\n};\n\nconst isSourcePoint = (value: unknown): value is SourcePoint =>\n typeof value === \"object\" &&\n value !== null &&\n \"column\" in value &&\n typeof value.column === \"number\" &&\n \"line\" in value &&\n typeof value.line === \"number\";\n\nconst errorSourcePoint = (error: unknown): SourcePoint | null => {\n if (typeof error !== \"object\" || error === null) {\n return null;\n }\n\n if (\"loc\" in error && isSourcePoint(error.loc)) {\n return error.loc;\n }\n\n return \"location\" in error && isSourcePoint(error.location) ? error.location : null;\n};\n\nconst atSourceNode = <T>(\n root: string,\n path: string,\n node: LocatableNode,\n operation: () => T,\n): T => {\n try {\n return operation();\n } catch (error) {\n throw sourceExtractionError(root, path, locatablePoint(node), error);\n }\n};\n\nconst atExtractedLocation = <T>(\n root: string,\n locations: SourceLocation[],\n operation: () => T,\n): T => {\n const location = locations.find((candidate) =>\n candidate.line !== undefined && candidate.column !== undefined);\n\n if (location?.line === undefined || location.column === undefined) {\n return operation();\n }\n\n try {\n return operation();\n } catch (error) {\n throw sourceExtractionError(\n root,\n location.file,\n { column: location.column, line: location.line },\n error,\n );\n }\n};\n\nconst quietLogger = (): { logger: Logger; reports: string[] } => {\n const reports: string[] = [];\n\n return {\n reports,\n logger: {\n info() {\n return;\n },\n warn(message, more) {\n const detail = more === undefined ? \"\" : ` ${String(more)}`;\n reports.push(`${message}${detail}`);\n },\n error(message) {\n reports.push(String(message));\n },\n },\n };\n};\n\nconst splitContext = (key: string): { context: string | null; msgid: string } => {\n const index = key.lastIndexOf(CONTEXT_SEPARATOR);\n\n if (index === -1) {\n return { context: null, msgid: key };\n }\n\n return { context: key.slice(index + CONTEXT_SEPARATOR.length), msgid: key.slice(0, index) };\n};\n\nconst namespaceFor = (entry: ExtractedKey): string =>\n typeof entry.ns === \"string\" ? entry.ns : DEFAULT_NAMESPACE;\n\nconst validateIdentity = (context: string | null, msgid: string): void => {\n if (context === \"\" || msgid.length === 0) {\n throw new Error(\"Translation keys and contexts cannot be empty\");\n }\n};\n\nconst compareLocations = (left: SourceLocation, right: SourceLocation): number =>\n left.file.localeCompare(right.file) ||\n (left.line ?? 0) - (right.line ?? 0) ||\n (left.column ?? 0) - (right.column ?? 0);\n\nconst normalizedLocations = (locations: SourceLocation[]): SourceLocation[] => {\n const unique: Map<string, SourceLocation> = new Map();\n\n for (const location of locations) {\n const key = `${location.file}\\0${String(location.line)}\\0${String(location.column)}`;\n unique.set(key, location);\n }\n\n return unique.values().toArray().toSorted(compareLocations);\n};\n\nconst pointSource = (entry: ExtractedKey, msgid: string): string => {\n if (typeof entry.defaultValue !== \"string\") {\n return msgid;\n }\n\n if (entry.explicitDefault === true) {\n return entry.defaultValue;\n }\n\n return entry.defaultValue === msgid || msgid.endsWith(`.${entry.defaultValue}`)\n ? msgid\n : entry.defaultValue;\n};\n\nconst pointMessage = (entry: ExtractedKey): SourceMessage => {\n const { context, msgid } = splitContext(entry.key);\n validateIdentity(context, msgid);\n const singular = pointSource(entry, msgid);\n\n if (singular.length === 0) {\n throw new Error(\"Translation source strings cannot be empty\");\n }\n\n return {\n context,\n locations: normalizedLocations(entry.locations ?? []),\n namespace: namespaceFor(entry),\n plural: null,\n singular,\n sourceKey: msgid,\n };\n};\n\nconst expandedPlural = (entry: ExtractedKey): { baseKey: string; variant: PluralVariant } => {\n if (entry.isOrdinal === true) {\n throw new Error(\"GNU gettext catalogs do not support i18next ordinal plurals\");\n }\n\n const suffix = /_(few|many|one|other|two|zero)$/u.exec(entry.key);\n const defaultValue = entry.defaultValue;\n const category = suffix?.[1];\n\n if (suffix === null || category === undefined || typeof defaultValue !== \"string\") {\n throw new Error(\"Unable to recover an i18next plural source pair\");\n }\n\n return {\n baseKey: entry.key.slice(0, -suffix[0].length),\n variant: {\n category,\n defaultValue,\n locations: entry.locations ?? [],\n },\n };\n};\n\nconst groupedPlurals = (root: string, entries: ExtractedKey[]): PluralGroup[] => {\n const groups: Map<string, PluralGroup> = new Map();\n\n for (const entry of entries) {\n const { baseKey, variant } = atExtractedLocation(\n root,\n entry.locations ?? [],\n () => expandedPlural(entry),\n );\n const namespace = namespaceFor(entry);\n const key = `${namespace}\\0${baseKey}`;\n const group = groups.get(key) ?? { baseKey, namespace, variants: [] };\n group.variants.push(variant);\n groups.set(key, group);\n }\n\n return groups.values().toArray();\n};\n\nconst pairedVariants = (variants: PluralVariant[]): { one: PluralVariant; other: PluralVariant } => {\n const categories = new Map(variants.map((variant) => [variant.category, variant]));\n\n if (categories.size !== 2 || !categories.has(\"one\") || !categories.has(\"other\")) {\n throw new Error(\"GNU gettext requires one singular and one plural source string\");\n }\n\n const one = categories.get(\"one\");\n const other = categories.get(\"other\");\n\n if (one === undefined || other === undefined) {\n throw new Error(\"Unable to recover an i18next plural source pair\");\n }\n\n return { one, other };\n};\n\nconst pluralMessage = ({ baseKey, namespace, variants }: PluralGroup): SourceMessage => {\n const { one, other } = pairedVariants(variants);\n const { context, msgid } = splitContext(baseKey);\n validateIdentity(context, msgid);\n const singular = one.defaultValue;\n const plural = other.defaultValue;\n\n if (singular === plural || singular.length === 0 || plural.length === 0) {\n throw new Error(\"GNU gettext plural source strings must be distinct and non-empty\");\n }\n\n return {\n context,\n locations: normalizedLocations(variants.flatMap((variant) => variant.locations)),\n namespace,\n plural,\n singular,\n sourceKey: msgid,\n };\n};\n\nconst pluralMessages = (root: string, entries: ExtractedKey[]): SourceMessage[] =>\n groupedPlurals(root, entries).map((group) =>\n atExtractedLocation(\n root,\n group.variants.flatMap((variant) => variant.locations),\n () => pluralMessage(group),\n ));\n\nconst assertCardinal = (entry: ExtractedKey): void => {\n if (entry.isOrdinal === true) {\n throw new Error(\"GNU gettext catalogs do not support i18next ordinal plurals\");\n }\n};\n\nconst sourceMessages = (root: string, entries: ExtractedKey[]): SourceMessage[] => {\n const points: ExtractedKey[] = [];\n const plurals: ExtractedKey[] = [];\n\n for (const entry of entries) {\n atExtractedLocation(root, entry.locations ?? [], () => {\n assertCardinal(entry);\n });\n\n if (entry.isExpandedPlural === true) {\n plurals.push(entry);\n continue;\n }\n\n if (entry.hasCount === true) {\n throw new Error(\"Count-based translations require an explicit plural source string\");\n }\n\n points.push(entry);\n }\n\n return [\n ...points.map((entry) =>\n atExtractedLocation(root, entry.locations ?? [], () => pointMessage(entry))),\n ...pluralMessages(root, plurals),\n ];\n};\n\nconst compareMessages = (left: SourceMessage, right: SourceMessage): number =>\n left.namespace.localeCompare(right.namespace) ||\n (left.context ?? \"\").localeCompare(right.context ?? \"\") ||\n left.singular.localeCompare(right.singular) ||\n (left.plural ?? \"\").localeCompare(right.plural ?? \"\");\n\nconst inferLocations = (message: SourceMessage, sources: Map<string, string>): SourceMessage => {\n if (message.locations.length > 0) {\n return message;\n }\n\n const locations: SourceLocation[] = [];\n\n for (const [file, source] of sources) {\n const index = source.indexOf(message.sourceKey);\n\n if (index !== -1) {\n locations.push({ file, line: source.slice(0, index).split(\"\\n\").length });\n }\n }\n\n return { ...message, locations };\n};\n\nconst normalizedSourceFiles = (root: string, paths: string[]): string[] => {\n const files = paths\n .map((path) => resolve(root, path))\n .filter((path) => isPathWithin(root, path));\n\n return new Set(files).values().toArray().toSorted((left, right) => left.localeCompare(right));\n};\n\ntype StaticKeyWrapper = ESTree.ParenthesizedExpression |\n ESTree.TSAsExpression |\n ESTree.TSSatisfiesExpression |\n ESTree.TSTypeAssertion |\n ESTree.TSNonNullExpression;\n\nconst isStaticKeyWrapper = (key: ESTree.Node): key is StaticKeyWrapper =>\n STATIC_KEY_WRAPPER_TYPES.has(key.type);\n\nconst unwrapStaticWrapper = (node: ESTree.Node): ESTree.Node =>\n isStaticKeyWrapper(node) ? unwrapStaticWrapper(node.expression) : node;\n\nconst isStaticTranslationKey = (key: ESTree.Node | null | undefined): boolean => {\n if (key === undefined || key === null) {\n return false;\n }\n\n if (key.type === \"Literal\") {\n return typeof key.value === \"string\";\n }\n\n if (key.type === \"TemplateLiteral\") {\n return key.expressions.length === 0;\n }\n\n if (key.type === \"ParenthesizedExpression\") {\n return false;\n }\n\n if (isStaticKeyWrapper(key)) {\n return isStaticTranslationKey(key.expression);\n }\n\n return false;\n};\n\nconst assertStaticTranslationKey = (key: ESTree.Node | null | undefined): void => {\n if (!isStaticTranslationKey(key)) {\n throw new Error(\"Translation keys must be string literals\");\n }\n};\n\nconst propertyName = (property: ESTree.ObjectProperty): string | null => {\n if (!property.computed && property.key.type === \"Identifier\") {\n return property.key.name;\n }\n\n return property.key.type === \"Literal\" && typeof property.key.value === \"string\"\n ? property.key.value\n : null;\n};\n\nconst assertSupportedOptionProperty = (property: ESTree.ObjectPropertyKind): void => {\n if (property.type === \"SpreadElement\") {\n throw new Error(\"Translation extraction requires explicit option properties\");\n }\n\n const name = propertyName(property);\n\n if (name === null) {\n throw new Error(\"Translation extraction requires static option property names\");\n }\n\n if (UNSUPPORTED_PLURAL_OPTION.test(name)) {\n throw new Error(\"GNU gettext accepts one singular and one plural source string\");\n }\n\n if (STATIC_SOURCE_OPTION_NAMES.has(name)) {\n assertStaticTranslationKey(property.value);\n }\n};\n\nconst assertSupportedOptionObject = (options: ESTree.Node | null | undefined): void => {\n if (options === null || options === undefined) {\n return;\n }\n\n if (isStaticKeyWrapper(options) && unwrapStaticWrapper(options).type === \"ObjectExpression\") {\n throw new Error(\"Translation option objects cannot be wrapped in another expression\");\n }\n\n if (options.type !== \"ObjectExpression\") {\n throw new Error(\"Translation option objects must be inline object literals\");\n }\n\n for (const property of options.properties) {\n assertSupportedOptionProperty(property);\n }\n};\n\nconst namedImportedBinding = (path: NodePath, source: string): ImportedBinding | null => {\n if (!path.isImportSpecifier() || path.node.importKind === \"type\") {\n return null;\n }\n\n const imported = path.node.imported;\n\n return {\n imported: types.isIdentifier(imported) ? imported.name : imported.value,\n local: path.node.local.name,\n source,\n style: \"named\",\n };\n};\n\nconst defaultImportedBinding = (path: NodePath, source: string): ImportedBinding | null =>\n path.isImportDefaultSpecifier()\n ? { imported: \"default\", local: path.node.local.name, source, style: \"default\" }\n : null;\n\nconst namespaceImportedBinding = (path: NodePath, source: string): ImportedBinding | null =>\n path.isImportNamespaceSpecifier()\n ? { imported: \"*\", local: path.node.local.name, source, style: \"namespace\" }\n : null;\n\nconst importedBinding = (binding: ResolvedBinding | undefined): ImportedBinding | null => {\n if (binding === undefined) {\n return null;\n }\n\n const path = binding.path;\n const declaration = path.parentPath;\n\n if (!declaration.isImportDeclaration() || declaration.node.importKind === \"type\") {\n return null;\n }\n\n const source = declaration.node.source.value;\n\n return namedImportedBinding(path, source) ??\n defaultImportedBinding(path, source) ??\n namespaceImportedBinding(path, source);\n};\n\nconst babelPropertyName = (property: types.ObjectProperty): string | null => {\n const key = property.key;\n\n if (!property.computed && types.isIdentifier(key)) {\n return key.name;\n }\n\n return types.isStringLiteral(key) ? key.value : null;\n};\n\nconst isBoundIdentifier = (node: types.Node | null, name: string): boolean => {\n if (types.isIdentifier(node)) {\n return node.name === name;\n }\n\n if (types.isAssignmentPattern(node)) {\n return types.isIdentifier(node.left) && node.left.name === name;\n }\n\n return false;\n};\n\nconst isHookPatternBinding = (pattern: types.VariableDeclarator[\"id\"], name: string): boolean => {\n if (types.isObjectPattern(pattern)) {\n return pattern.properties.some((property) =>\n types.isObjectProperty(property) &&\n babelPropertyName(property) === \"t\" &&\n isBoundIdentifier(property.value, name));\n }\n\n if (types.isArrayPattern(pattern)) {\n return isBoundIdentifier(pattern.elements[0] ?? null, name);\n }\n\n return false;\n};\n\nconst importedTranslationHook = (scope: Scope, call: types.CallExpression): ImportedBinding | null => {\n if (!types.isIdentifier(call.callee)) {\n return null;\n }\n\n const imported = importedBinding(scope.getBinding(call.callee.name));\n\n return imported?.imported === \"useTranslation\" && TRANSLATION_MODULES.has(imported.source)\n ? imported\n : null;\n};\n\nconst translationHookBinding = (binding: ResolvedBinding): TranslationHookBinding | null => {\n const path = binding.path;\n\n if (!path.isVariableDeclarator()) {\n return null;\n }\n\n const pattern = path.node.id;\n const initializer = path.node.init;\n\n if (!isHookPatternBinding(pattern, binding.identifier.name) ||\n !types.isCallExpression(initializer)) {\n return null;\n }\n\n const imported = importedTranslationHook(path.scope, initializer);\n\n if (imported === null) {\n return null;\n }\n\n return { call: initializer, isCanonical: imported.local === \"useTranslation\" };\n};\n\nconst importedTranslationFunctionKind = (imported: ImportedBinding | null): TranslationCallKind | null => {\n if (imported?.imported !== \"t\" || !TRANSLATION_MODULES.has(imported.source)) {\n return null;\n }\n\n return imported.local === \"t\" ? \"canonical\" : \"alias\";\n};\n\nconst hookTranslationFunctionKind = (binding: ResolvedBinding | undefined): TranslationCallKind | null => {\n if (binding === undefined) {\n return null;\n }\n\n const hook = translationHookBinding(binding);\n\n if (hook === null) {\n return null;\n }\n\n return binding.identifier.name === \"t\" && hook.isCanonical ? \"canonical\" : \"alias\";\n};\n\nconst directTranslationFunctionKind = (scope: Scope, name: string): TranslationCallKind | null => {\n const binding = scope.getBinding(name);\n\n return importedTranslationFunctionKind(importedBinding(binding)) ?? hookTranslationFunctionKind(binding);\n};\n\nconst babelMemberName = (member: TranslationMemberExpression): string | null => {\n const property = member.property;\n\n if (member.computed) {\n return types.isStringLiteral(property) ? property.value : null;\n }\n\n return types.isIdentifier(property) ? property.name : null;\n};\n\nconst isImportedTranslationObject = (scope: Scope, object: types.Node): boolean => {\n if (!types.isIdentifier(object)) {\n return false;\n }\n\n const imported = importedBinding(scope.getBinding(object.name));\n\n return imported !== null &&\n TRANSLATION_MODULES.has(imported.source) &&\n (imported.style === \"namespace\" || (imported.source === \"i18next\" && imported.imported === \"default\"));\n};\n\nconst constantVariableDeclarator = (binding: ResolvedBinding): NodePath<types.VariableDeclarator> | null => {\n const path = binding.path;\n const declaration = path.parentPath;\n\n if (!path.isVariableDeclarator() ||\n !declaration.isVariableDeclaration() ||\n declaration.node.kind !== \"const\") {\n return null;\n }\n\n return path;\n};\n\nconst isTranslationHookResultBinding = (binding: ResolvedBinding | undefined): boolean => {\n if (binding === undefined) {\n return false;\n }\n\n const path = constantVariableDeclarator(binding);\n const initializer = path?.node.init;\n\n return path !== null &&\n types.isIdentifier(path.node.id) &&\n types.isCallExpression(initializer) &&\n importedTranslationHook(path.scope, initializer) !== null;\n};\n\nconst isHookTranslationMember = (scope: Scope, member: TranslationMemberExpression): boolean => {\n if (babelMemberName(member) !== \"t\") {\n return false;\n }\n\n const object = member.object;\n\n if (types.isCallExpression(object)) {\n return importedTranslationHook(scope, object) !== null;\n }\n\n return types.isIdentifier(object) && isTranslationHookResultBinding(scope.getBinding(object.name));\n};\n\nconst isTranslationMember = (scope: Scope, member: TranslationMemberExpression): boolean =>\n babelMemberName(member) === \"t\" &&\n (isImportedTranslationObject(scope, member.object) || isHookTranslationMember(scope, member));\n\nconst isDirectTranslationFunction = (scope: Scope, node: types.Node): boolean =>\n types.isIdentifier(node) && directTranslationFunctionKind(scope, node.name) !== null;\n\nconst isTranslationFunctionValue = (scope: Scope, node: types.Node): boolean => {\n if (isDirectTranslationFunction(scope, node)) {\n return true;\n }\n\n return (types.isMemberExpression(node) || types.isOptionalMemberExpression(node)) &&\n isTranslationMember(scope, node);\n};\n\nconst isTranslationBindCall = (scope: Scope, node: types.Node): boolean => {\n if (!types.isCallExpression(node) || !types.isMemberExpression(node.callee)) {\n return false;\n }\n\n return babelMemberName(node.callee) === \"bind\" &&\n isTranslationFunctionValue(scope, node.callee.object);\n};\n\nconst isTranslationObjectPatternAlias = (\n path: NodePath<types.VariableDeclarator>,\n binding: ResolvedBinding,\n): boolean => {\n const pattern = path.node.id;\n const initializer = path.node.init;\n\n if (!types.isObjectPattern(pattern) ||\n !isHookPatternBinding(pattern, binding.identifier.name) ||\n !types.isIdentifier(initializer)) {\n return false;\n }\n\n return isImportedTranslationObject(path.scope, initializer) ||\n isTranslationHookResultBinding(path.scope.getBinding(initializer.name));\n};\n\nconst isTranslationAliasBinding = (binding: ResolvedBinding | undefined): boolean => {\n if (binding === undefined) {\n return false;\n }\n\n const path = constantVariableDeclarator(binding);\n\n if (path === null) {\n return false;\n }\n\n if (isTranslationObjectPatternAlias(path, binding)) {\n return true;\n }\n\n const initializer = path.node.init;\n\n return types.isIdentifier(path.node.id) &&\n initializer !== null &&\n initializer !== undefined &&\n (isTranslationFunctionValue(path.scope, initializer) || isTranslationBindCall(path.scope, initializer));\n};\n\nconst translationFunctionKind = (scope: Scope, name: string): TranslationCallKind | null => {\n const direct = directTranslationFunctionKind(scope, name);\n\n if (direct !== null) {\n return direct;\n }\n\n return isTranslationAliasBinding(scope.getBinding(name)) ? \"alias\" : null;\n};\n\nconst translationElementKind = (path: NodePath, name: string): TranslationCallKind | null => {\n const imported = importedBinding(path.scope.getBinding(name));\n\n if (imported?.source !== \"@gtkx/i18n\" || !TRANS_ELEMENTS.has(imported.imported)) {\n return null;\n }\n\n return imported.local === imported.imported ? \"canonical\" : \"alias\";\n};\n\nconst nodeStart = (path: NodePath): number => {\n const start = path.node.start;\n\n if (start === null || start === undefined) {\n throw new Error(\"Translation extraction could not locate a source expression\");\n }\n\n return start;\n};\n\nconst registerSourceMask = (node: types.Node, references: TranslationReferences): void => {\n const { start, end } = node;\n\n if (start === null || start === undefined || end === null || end === undefined) {\n throw new Error(\"Translation extraction could not locate a source expression\");\n }\n\n references.masks.push({ start, end });\n};\n\nconst sourceLocationKey = (line: number, column: number): string => `${String(line)}:${String(column)}`;\n\nconst sourcePoint = (node: types.Node): SourcePoint | null => {\n return locatablePoint(node);\n};\n\nconst registerSourceLocation = (node: types.Node, references: TranslationReferences): SourcePoint | null => {\n const point = sourcePoint(node);\n\n if (point !== null) {\n references.locations.set(sourceLocationKey(point.line, point.column), point);\n }\n\n return point;\n};\n\nconst babelStaticKey = (node: types.Node | null | undefined): string | null => {\n if (node === null || node === undefined) {\n return null;\n }\n\n if (types.isStringLiteral(node)) {\n return node.value;\n }\n\n if (types.isTemplateLiteral(node) && node.expressions.length === 0) {\n return node.quasis[0]?.value.cooked ?? null;\n }\n\n if (types.isParenthesizedExpression(node) ||\n types.isTSAsExpression(node) ||\n types.isTSSatisfiesExpression(node) ||\n types.isTSTypeAssertion(node) ||\n types.isTSNonNullExpression(node)) {\n return babelStaticKey(node.expression);\n }\n\n return null;\n};\n\nconst babelObjectExpression = (node: types.Node | null | undefined): types.ObjectExpression | null => {\n if (node === null || node === undefined) {\n return null;\n }\n\n if (types.isObjectExpression(node)) {\n return node;\n }\n\n if (types.isParenthesizedExpression(node) ||\n types.isTSAsExpression(node) ||\n types.isTSSatisfiesExpression(node) ||\n types.isTSTypeAssertion(node) ||\n types.isTSNonNullExpression(node)) {\n return babelObjectExpression(node.expression);\n }\n\n return null;\n};\n\nconst babelNamedProperty = (\n object: types.ObjectExpression | null,\n name: string,\n): types.ObjectProperty | null => {\n if (object === null) {\n return null;\n }\n\n for (const property of object.properties) {\n if (types.isObjectProperty(property) && babelPropertyName(property) === name) {\n return property;\n }\n }\n\n return null;\n};\n\nconst babelStringProperty = (object: types.ObjectExpression | null, name: string): string | null => {\n const property = babelNamedProperty(object, name);\n\n if (property === null) {\n return null;\n }\n\n const value = babelStaticKey(property.value);\n\n if (value === null) {\n throw new Error(`Translation ${name} values must be string literals`);\n }\n\n return value;\n};\n\nconst callOptions = (call: types.CallExpression): types.ObjectExpression | null =>\n babelObjectExpression(call.arguments[1]) ?? babelObjectExpression(call.arguments[2]);\n\nconst hookKeyPrefix = (callee: NodePath<types.Identifier>): string => {\n const binding = callee.scope.getBinding(callee.node.name);\n const hook = binding === undefined ? null : translationHookBinding(binding);\n\n return babelStringProperty(\n hook === null ? null : babelObjectExpression(hook.call.arguments[1]),\n \"keyPrefix\",\n ) ?? \"\";\n};\n\nconst prefixedTranslationKey = (prefix: string, key: string): string => {\n if (prefix.length === 0) {\n return key;\n }\n\n return prefix.endsWith(\".\") ? `${prefix}${key}` : `${prefix}.${key}`;\n};\n\nconst extractedEntryKey = (call: types.CallExpression, keyPrefix: string): string | null => {\n const key = babelStaticKey(call.arguments[0]);\n\n if (key === null) {\n return null;\n }\n\n const options = callOptions(call);\n const callPrefix = babelStringProperty(options, \"keyPrefix\");\n\n if (callPrefix === \"\" && keyPrefix.length > 0) {\n throw new Error(\"An empty call keyPrefix cannot override a hook keyPrefix during extraction\");\n }\n\n const selectedPrefix = callPrefix ?? keyPrefix;\n const prefixed = prefixedTranslationKey(selectedPrefix, key);\n const context = babelStringProperty(options, \"context\");\n\n return context === null ? prefixed : `${prefixed}${CONTEXT_SEPARATOR}${context}`;\n};\n\nconst registerEntryLocation = (\n key: string | null,\n point: SourcePoint | null,\n references: TranslationReferences,\n): void => {\n if (key === null || point === null) {\n return;\n }\n\n const locations = references.entryLocations.get(key) ?? [];\n locations.push(point);\n references.entryLocations.set(key, locations);\n};\n\nconst registerCallReference = (\n callPath: NodePath<types.CallExpression>,\n references: TranslationReferences,\n keyPrefix: string,\n): void => {\n references.calls.add(nodeStart(callPath));\n const firstArgument = callPath.node.arguments[0];\n const point = registerSourceLocation(firstArgument ?? callPath.node, references);\n\n if (point !== null) {\n references.sourcePoints.set(nodeStart(callPath), point);\n }\n\n registerEntryLocation(extractedEntryKey(callPath.node, keyPrefix), point, references);\n};\n\nconst parserPlugins = (lang: ReturnType<typeof sourceLanguage>): (\"decorators\" | \"jsx\" | \"typescript\")[] => [\n \"decorators\",\n ...(lang === \"ts\" || lang === \"tsx\" ? [\"typescript\" as const] : []),\n ...(lang === \"jsx\" || lang === \"tsx\" ? [\"jsx\" as const] : []),\n];\n\nconst parseTranslationReferences = (\n root: string,\n path: string,\n source: string,\n lang: ReturnType<typeof sourceLanguage>,\n) => {\n try {\n return parseBabelSync(source, {\n ast: true,\n babelrc: false,\n configFile: false,\n filename: projectSourcePath(root, path),\n parserOpts: { createParenthesizedExpressions: true, plugins: parserPlugins(lang) },\n sourceType: \"module\",\n });\n } catch (error) {\n throw sourceExtractionError(root, path, errorSourcePoint(error), error);\n }\n};\n\nconst registerIdentifierTranslationCall = (\n callPath: NodePath<types.CallExpression>,\n callee: NodePath,\n references: TranslationReferences,\n): void => {\n if (!callee.isIdentifier()) {\n return;\n }\n\n const kind = translationFunctionKind(callee.scope, callee.node.name);\n\n if (kind === \"alias\") {\n throw new Error(\"Translation calls must use the imported name t\");\n }\n\n if (kind === \"canonical\") {\n registerCallReference(callPath, references, hookKeyPrefix(callee));\n } else if (callee.node.name === \"t\") {\n registerSourceMask(callee.node, references);\n }\n};\n\nconst registerTranslationCall = (\n callPath: NodePath<types.CallExpression>,\n references: TranslationReferences,\n): void => {\n assertSupportedWrappedCallee(callPath);\n const callee = callPath.get(\"callee\");\n\n if (callee.isIdentifier()) {\n registerIdentifierTranslationCall(callPath, callee, references);\n\n return;\n }\n\n if (callee.isMemberExpression() && isTranslationMember(callee.scope, callee.node)) {\n throw new Error(\"Translation calls must use the named t export\");\n }\n};\n\nconst unwrapTranslationCallee = (node: types.Node): types.Node => {\n if (types.isParenthesizedExpression(node) ||\n types.isTSAsExpression(node) ||\n types.isTSSatisfiesExpression(node) ||\n types.isTSTypeAssertion(node) ||\n types.isTSNonNullExpression(node)) {\n return unwrapTranslationCallee(node.expression);\n }\n\n return node;\n};\n\nconst isTranslationCallee = (scope: Scope, node: types.Node): boolean => {\n if (types.isIdentifier(node)) {\n return translationFunctionKind(scope, node.name) !== null;\n }\n\n return (types.isMemberExpression(node) || types.isOptionalMemberExpression(node)) &&\n isTranslationMember(scope, node);\n};\n\nconst assertSupportedWrappedCallee = (callPath: NodePath<types.CallExpression>): void => {\n const callee = callPath.node.callee;\n const unwrapped = unwrapTranslationCallee(callee);\n\n if (unwrapped !== callee && isTranslationCallee(callPath.scope, unwrapped)) {\n throw new Error(\"Translation call expressions cannot wrap their callee\");\n }\n};\n\nconst assertSupportedOptionalCall = (callPath: NodePath<types.OptionalCallExpression>): void => {\n const callee = unwrapTranslationCallee(callPath.node.callee);\n\n if (isTranslationCallee(callPath.scope, callee)) {\n throw new Error(\"Translation calls cannot use optional chaining\");\n }\n};\n\nconst assertUnsupportedTranslationTag = (tagPath: NodePath<types.TaggedTemplateExpression>): void => {\n const tag = unwrapTranslationCallee(tagPath.node.tag);\n\n if (isTranslationCallee(tagPath.scope, tag)) {\n throw new Error(\"Translation calls cannot use tagged-template syntax\");\n }\n};\n\nconst registerUnrecognizedElementMasks = (\n elementPath: NodePath,\n name: NodePath<types.JSXIdentifier>,\n references: TranslationReferences,\n): void => {\n registerSourceMask(name.node, references);\n const parent = elementPath.parentPath.node;\n const closingName = types.isJSXElement(parent) ? parent.closingElement?.name : null;\n\n if (types.isJSXIdentifier(closingName)) {\n registerSourceMask(closingName, references);\n }\n};\n\nconst registerElementReference = (\n elementPath: NodePath,\n references: TranslationReferences,\n): void => {\n const start = nodeStart(elementPath);\n const point = registerSourceLocation(elementPath.node, references);\n references.elements.add(start);\n\n if (point !== null) {\n references.sourcePoints.set(start, point);\n }\n};\n\nconst registerTranslationElement = (elementPath: NodePath, references: TranslationReferences): void => {\n const name = elementPath.get(\"name\");\n\n if (!name.isJSXIdentifier()) {\n return;\n }\n\n const kind = translationElementKind(name, name.node.name);\n\n if (kind === \"alias\") {\n throw new Error(\"Translation components must use their imported names\");\n }\n\n if (kind === \"canonical\") {\n registerElementReference(elementPath, references);\n } else if (TRANS_ELEMENTS.has(name.node.name)) {\n registerUnrecognizedElementMasks(elementPath, name, references);\n }\n};\n\nconst maskUnrecognizedTranslations = (source: string, references: TranslationReferences): string => {\n let masked = source;\n const masks = references.masks.toSorted((left, right) => right.start - left.start);\n\n for (const { start, end } of masks) {\n masked = `${masked.slice(0, start)}${\"_\".repeat(end - start)}${masked.slice(end)}`;\n }\n\n return masked;\n};\n\nconst translationReferences = (\n root: string,\n path: string,\n source: string,\n lang: ReturnType<typeof sourceLanguage>,\n): TranslationReferences => {\n const parsed = parseTranslationReferences(root, path, source, lang);\n\n if (parsed === null) {\n throw new Error(`Translation extraction could not parse ${path}`);\n }\n\n const references: TranslationReferences = {\n calls: new Set(),\n elements: new Set(),\n entryLocations: new Map(),\n locations: new Map(),\n masks: [],\n sourcePoints: new Map(),\n };\n\n traverse(parsed, {\n CallExpression(callPath) {\n atSourceNode(root, path, callPath.node, () => {\n registerTranslationCall(callPath, references);\n });\n },\n JSXOpeningElement(elementPath) {\n atSourceNode(root, path, elementPath.node, () => {\n registerTranslationElement(elementPath, references);\n });\n },\n OptionalCallExpression(callPath) {\n atSourceNode(root, path, callPath.node, () => {\n assertSupportedOptionalCall(callPath);\n });\n },\n TaggedTemplateExpression(tagPath) {\n atSourceNode(root, path, tagPath.node, () => {\n assertUnsupportedTranslationTag(tagPath);\n });\n },\n });\n\n return references;\n};\n\nconst assertSupportedTranslationCall = (node: ESTree.CallExpression, references: TranslationReferences): void => {\n if (!references.calls.has(node.start)) {\n return;\n }\n\n assertStaticTranslationKey(node.arguments[0]);\n assertSupportedTranslationOptions(node.arguments[1], node.arguments[2]);\n};\n\nconst assertSupportedTranslationOptions = (\n second: ESTree.Node | null | undefined,\n third: ESTree.Node | null | undefined,\n): void => {\n if (third !== undefined && third !== null) {\n assertStaticTranslationKey(second);\n assertSupportedOptionObject(third);\n\n return;\n }\n\n if (second === undefined || second === null || isStaticTranslationKey(second)) {\n return;\n }\n\n assertSupportedOptionObject(second);\n};\n\nconst isNamedJsxAttribute = (attribute: ESTree.JSXAttribute, name: string): boolean =>\n attribute.name.type === \"JSXIdentifier\" && attribute.name.name === name;\n\nconst assertSupportedTransKey = (attribute: ESTree.JSXAttribute): void => {\n if (!isNamedJsxAttribute(attribute, \"i18nKey\")) {\n return;\n }\n\n const key = attribute.value?.type === \"JSXExpressionContainer\"\n ? attribute.value.expression\n : attribute.value;\n assertStaticTranslationKey(key);\n};\n\nconst assertSupportedTransStringAttribute = (attribute: ESTree.JSXAttribute, name: string): void => {\n if (!isNamedJsxAttribute(attribute, name)) {\n return;\n }\n\n const value = attribute.value?.type === \"JSXExpressionContainer\"\n ? attribute.value.expression\n : attribute.value;\n assertStaticTranslationKey(value);\n};\n\nconst assertSupportedTransOptions = (attribute: ESTree.JSXAttribute): void => {\n if (isNamedJsxAttribute(attribute, \"tOptions\") && attribute.value?.type === \"JSXExpressionContainer\") {\n assertSupportedOptionObject(attribute.value.expression);\n }\n};\n\nconst assertSupportedTransAttribute = (attribute: ESTree.JSXAttributeItem): void => {\n if (attribute.type === \"JSXSpreadAttribute\") {\n throw new Error(\"Translation extraction requires explicit component properties\");\n }\n\n assertSupportedTransKey(attribute);\n assertSupportedTransStringAttribute(attribute, \"context\");\n assertSupportedTransStringAttribute(attribute, \"defaults\");\n assertSupportedTransOptions(attribute);\n};\n\nconst assertSupportedTransElement = (node: ESTree.JSXOpeningElement, references: TranslationReferences): void => {\n if (!references.elements.has(node.start)) {\n return;\n }\n\n for (const attribute of node.attributes) {\n assertSupportedTransAttribute(attribute);\n }\n};\n\nconst assertSupportedTranslationSyntax = (root: string, path: string, source: string): TranslationReferences => {\n const lang = sourceLanguage(path);\n\n if (lang === undefined) {\n return {\n calls: new Set(),\n elements: new Set(),\n entryLocations: new Map(),\n locations: new Map(),\n masks: [],\n sourcePoints: new Map(),\n };\n }\n\n let parsed: ReturnType<typeof parseSync>;\n\n try {\n parsed = parseSync(projectSourcePath(root, path), source, { lang });\n } catch (error) {\n throw sourceExtractionError(root, path, errorSourcePoint(error), error);\n }\n\n const references = translationReferences(root, path, source, lang);\n\n new Visitor({\n CallExpression(node) {\n try {\n assertSupportedTranslationCall(node, references);\n } catch (error) {\n throw sourceExtractionError(root, path, references.sourcePoints.get(node.start) ?? null, error);\n }\n },\n JSXOpeningElement(node) {\n try {\n assertSupportedTransElement(node, references);\n } catch (error) {\n throw sourceExtractionError(root, path, references.sourcePoints.get(node.start) ?? null, error);\n }\n },\n }).visit(parsed.program);\n\n return references;\n};\n\nconst extractedLocationFile = (root: string, file: string): string =>\n resolve(root, file);\n\nconst isRecognizedLocation = (\n root: string,\n references: Map<string, TranslationReferences>,\n location: SourceLocation,\n): boolean => {\n if (location.line === undefined || location.column === undefined) {\n return false;\n }\n\n const sourceReferences = references.get(extractedLocationFile(root, location.file));\n\n return sourceReferences?.locations.has(sourceLocationKey(location.line, location.column)) === true;\n};\n\nconst recognizedKeyLocations = (\n references: Map<string, TranslationReferences>,\n extractedKey: string,\n): ExtractedLocation[] => {\n const locations: ExtractedLocation[] = [];\n\n for (const [file, sourceReferences] of references) {\n const points = sourceReferences.entryLocations.get(extractedKey) ?? [];\n\n for (const point of points) {\n locations.push({ file, column: point.column, line: point.line });\n }\n }\n\n return locations;\n};\n\nconst recognizedEntry = (\n root: string,\n references: Map<string, TranslationReferences>,\n entry: ExtractedKey,\n): ExtractedKey | null => {\n const extractedLocations = entry.locations ?? [];\n const locations = extractedLocations.length === 0\n ? recognizedKeyLocations(references, entry.key)\n : extractedLocations.filter((location) => isRecognizedLocation(root, references, location));\n\n return locations.length === 0 ? null : { ...entry, locations };\n};\n\ntype NestedReferenceParts = { base: string; options: string };\n\nconst quotedNestedReferenceParts = (content: string, quote: string): NestedReferenceParts | null => {\n const end = content.indexOf(quote, 1);\n\n return end === -1\n ? null\n : { base: content.slice(1, end), options: content.slice(end + 1) };\n};\n\nconst nestedReferenceParts = (value: string): NestedReferenceParts | null => {\n const content = value.trim();\n const quote = content[0];\n\n if (quote === \"\\\"\" || quote === \"'\") {\n return quotedNestedReferenceParts(content, quote);\n }\n\n const separator = content.indexOf(\",\");\n const base = (separator === -1 ? content : content.slice(0, separator)).trim();\n\n return base.length === 0\n ? null\n : { base, options: separator === -1 ? \"\" : content.slice(separator + 1) };\n};\n\nconst nestedReferenceContext = (options: string): string | null => {\n const match = NESTED_CONTEXT.exec(options);\n const context = match?.[1] ?? match?.[2] ?? null;\n\n return context === null || context.length === 0 ? null : context;\n};\n\nconst adjustedParenthesisDepth = (character: string | undefined, depth: number): number => {\n if (character === \"(\") {\n return depth + 1;\n }\n\n return character === \")\" ? depth - 1 : depth;\n};\n\nconst nestedReferenceEnd = (text: string, start: number): number => {\n let depth = 0;\n const tokens = text.slice(start).matchAll(NESTED_STRUCTURE_TOKEN);\n\n for (const token of tokens) {\n const character = token[0];\n\n if (character === \")\" && depth === 0) {\n return start + token.index;\n }\n\n depth = adjustedParenthesisDepth(character, depth);\n }\n\n return -1;\n};\n\nconst nestedReferenceContents = (text: string): string[] => {\n const contents: string[] = [];\n let offset = 0;\n\n while (offset < text.length) {\n const prefix = text.indexOf(\"$t(\", offset);\n\n if (prefix === -1) {\n break;\n }\n\n const start = prefix + 3;\n const end = nestedReferenceEnd(text, start);\n\n if (end === -1) {\n break;\n }\n\n contents.push(text.slice(start, end));\n offset = end + 1;\n }\n\n return contents;\n};\n\nconst nestedPluralKeys = (base: string, context: string | null): string[] => {\n const pluralBase = context === null ? base : `${base}${CONTEXT_SEPARATOR}${context}`;\n\n return [`${pluralBase}_one`, `${pluralBase}_other`];\n};\n\nconst nestedReferenceKeys = (content: string): string[] => {\n const parts = nestedReferenceParts(content);\n\n if (parts === null) {\n return [];\n }\n\n const context = nestedReferenceContext(parts.options);\n const contextual = context === null\n ? []\n : [`${parts.base}_${context}`, `${parts.base}${CONTEXT_SEPARATOR}${context}`];\n\n return NESTED_COUNT.test(parts.options)\n ? [parts.base, ...contextual, ...nestedPluralKeys(parts.base, context)]\n : [parts.base, ...contextual];\n};\n\nconst nestedEntryKeys = (text: string): Set<string> => {\n const keys: Set<string> = new Set();\n\n for (const content of nestedReferenceContents(text)) {\n for (const key of nestedReferenceKeys(content)) {\n keys.add(key);\n }\n }\n\n return keys;\n};\n\nconst registerNestedKeyLocations = (\n root: string,\n references: Map<string, TranslationReferences>,\n key: string,\n locations: ExtractedLocation[],\n): void => {\n for (const location of locations) {\n if (location.line === undefined || location.column === undefined) {\n continue;\n }\n\n const sourceReferences = references.get(resolve(root, location.file));\n\n if (sourceReferences !== undefined) {\n registerEntryLocation(key, { column: location.column, line: location.line }, sourceReferences);\n }\n }\n};\n\nconst registerNestedTextLocations = (\n root: string,\n references: Map<string, TranslationReferences>,\n text: string,\n locations: ExtractedLocation[],\n): void => {\n for (const key of nestedEntryKeys(text)) {\n registerNestedKeyLocations(root, references, key, locations);\n }\n};\n\nconst registerNestedEntryLocations = (\n root: string,\n references: Map<string, TranslationReferences>,\n entry: ExtractedKey,\n locations: ExtractedLocation[],\n): void => {\n registerNestedTextLocations(root, references, entry.key, locations);\n\n if (typeof entry.defaultValue === \"string\") {\n registerNestedTextLocations(root, references, entry.defaultValue, locations);\n }\n};\n\nconst didRegisterNestedLocationPass = (\n root: string,\n references: Map<string, TranslationReferences>,\n entries: ExtractedKeysMap,\n processed: Set<string>,\n): boolean => {\n let didRegister = false;\n\n for (const [mapKey, entry] of entries) {\n if (processed.has(mapKey)) {\n continue;\n }\n\n const recognized = recognizedEntry(root, references, entry);\n\n if (recognized !== null) {\n processed.add(mapKey);\n registerNestedEntryLocations(root, references, entry, recognized.locations ?? []);\n didRegister = true;\n }\n }\n\n return didRegister;\n};\n\nconst registerNestedLocations = (\n root: string,\n references: Map<string, TranslationReferences>,\n entries: ExtractedKeysMap,\n): void => {\n const processed: Set<string> = new Set();\n let hasRegisteredLocations = true;\n\n while (hasRegisteredLocations) {\n hasRegisteredLocations = didRegisterNestedLocationPass(root, references, entries, processed);\n }\n};\n\nconst retainRecognizedEntries = (\n root: string,\n references: Map<string, TranslationReferences>,\n entries: ExtractedKeysMap,\n): void => {\n for (const [mapKey, entry] of entries) {\n const recognized = recognizedEntry(root, references, entry);\n\n if (recognized === null) {\n entries.delete(mapKey);\n } else {\n entries.set(mapKey, recognized);\n }\n }\n};\n\nconst fileSourcePointKey = (file: string, line: number, column: number): string =>\n `${file}\\0${sourceLocationKey(line, column)}`;\n\nconst registerExtractedSourcePoint = (\n root: string,\n points: Set<string>,\n location: ExtractedLocation,\n): void => {\n if (location.line !== undefined && location.column !== undefined) {\n points.add(fileSourcePointKey(resolve(root, location.file), location.line, location.column));\n }\n};\n\nconst extractedSourcePoints = (root: string, entries: ExtractedKeysMap): Set<string> => {\n const points: Set<string> = new Set();\n\n for (const entry of entries.values()) {\n const locations = entry.locations ?? [];\n\n for (const location of locations) {\n registerExtractedSourcePoint(root, points, location);\n }\n }\n\n return points;\n};\n\nconst missingSourcePoint = (\n file: string,\n references: TranslationReferences,\n extracted: Set<string>,\n): SourcePoint | null => {\n for (const [location, point] of references.locations) {\n if (!extracted.has(`${file}\\0${location}`)) {\n return point;\n }\n }\n\n return null;\n};\n\nconst assertAllReferencesExtracted = (\n root: string,\n references: Map<string, TranslationReferences>,\n entries: ExtractedKeysMap,\n): void => {\n const extracted = extractedSourcePoints(root, entries);\n\n for (const [file, sourceReferences] of references) {\n const point = missingSourcePoint(file, sourceReferences, extracted);\n\n if (point !== null) {\n throw sourceExtractionError(\n root,\n file,\n point,\n new Error(\"A translation expression could not be extracted safely\"),\n );\n }\n }\n};\n\nconst findSourceMessages = async (root: string, sourceFiles: string[]): Promise<SourceMessage[]> => {\n if (sourceFiles.length === 0) {\n clearI18nResources(root);\n\n return [];\n }\n\n const sources = new Map(sourceFiles.map((file) => [file, readFileSync(file, \"utf8\")]));\n const references: Map<string, TranslationReferences> = new Map();\n\n for (const [file, source] of sources) {\n references.set(file, assertSupportedTranslationSyntax(root, file, source));\n }\n\n let extracted: ExtractedKeysMap | undefined;\n const { logger, reports } = quietLogger();\n\n const capture: Plugin = {\n name: \"gtkx-gettext\",\n onLoad(code, path) {\n const sourceReferences = references.get(resolve(root, path));\n\n return sourceReferences === undefined\n ? code\n : maskUnrecognizedTranslations(code, sourceReferences);\n },\n onEnd(keys) {\n registerNestedLocations(root, references, keys);\n retainRecognizedEntries(root, references, keys);\n assertAllReferencesExtracted(root, references, keys);\n extracted = keys;\n },\n };\n\n const result = await runExtractor(i18nToolkitConfig(root, sourceFiles, [capture]), {\n logger,\n quiet: true,\n syncPrimaryWithDefaults: true,\n trustDerivedDefaults: true,\n });\n\n if (extracted === undefined || reports.length > 0 || result.hasErrors) {\n throw new Error(reports.join(\"\\n\") || \"i18next extraction failed\");\n }\n\n return sourceMessages(root, extracted.values().toArray())\n .map((message) => inferLocations(message, sources))\n .toSorted(compareMessages);\n};\n\nconst projectPath = (root: string, path: string): string | null => {\n const absolute = isAbsolute(path) ? resolve(path) : resolve(root, path);\n const projectRelative = relative(root, absolute);\n\n if (!isPathInside(root, absolute)) {\n return null;\n }\n\n return toPosixPath(projectRelative);\n};\n\nconst writePotfiles = (project: CatalogProject, sourceFiles: string[]): string => {\n const paths = sourceFiles\n .map((path) => projectPath(project.root, path))\n .filter((path): path is string => path !== null);\n\n const sorted = [...new Set(paths)].toSorted((left, right) => left.localeCompare(right));\n const target = resolve(project.poDir, POTFILES_FILENAME);\n writeFileSync(target, sorted.length === 0 ? \"\" : `${sorted.join(\"\\n\")}\\n`);\n\n return target;\n};\n\nconst renderCatalogCall = (message: SourceMessage): string => {\n const msgid = JSON.stringify(message.singular);\n\n if (message.plural !== null) {\n const plural = JSON.stringify(message.plural);\n\n return message.context === null\n ? `ngettext(${msgid}, ${plural}, 0);`\n : `npgettext(${JSON.stringify(message.context)}, ${msgid}, ${plural}, 0);`;\n }\n\n return message.context === null\n ? `gettext(${msgid});`\n : `pgettext(${JSON.stringify(message.context)}, ${msgid});`;\n};\n\nconst locatedOwners = (\n project: CatalogProject,\n message: SourceMessage,\n): { path: string; line: number | undefined }[] => {\n const owners: { path: string; line: number | undefined }[] = [];\n\n for (const location of message.locations) {\n const path = projectPath(project.root, location.file);\n\n if (path !== null) {\n owners.push({ path, line: location.line });\n }\n }\n\n const unique = new Map(owners.map((owner) => [`${owner.path}\\0${String(owner.line)}`, owner]));\n\n return unique.values().toArray();\n};\n\nconst sourceOwners = (\n project: CatalogProject,\n message: SourceMessage,\n): { path: string; line: number | undefined }[] => {\n const located = locatedOwners(project, message);\n\n return located.length > 0 ? located : [{ path: SYNTHETIC_FILENAME, line: undefined }];\n};\n\nconst syntheticEntries = (\n project: CatalogProject,\n messages: SourceMessage[],\n): Map<string, SyntheticEntry[]> => {\n const entries: Map<string, SyntheticEntry[]> = new Map();\n\n for (const message of messages) {\n for (const owner of sourceOwners(project, message)) {\n const owned = entries.get(owner.path) ?? [];\n owned.push({ call: renderCatalogCall(message), line: owner.line });\n entries.set(owner.path, owned);\n }\n }\n\n if (entries.size === 0) {\n entries.set(SYNTHETIC_FILENAME, []);\n }\n\n return entries;\n};\n\nconst compareSyntheticEntries = (left: SyntheticEntry, right: SyntheticEntry): number =>\n (left.line ?? Number.MAX_SAFE_INTEGER) - (right.line ?? Number.MAX_SAFE_INTEGER);\n\nconst lastSyntheticLine = (entries: SyntheticEntry[]): number => {\n let line = 0;\n\n for (const entry of entries) {\n line = Math.max(line, entry.line ?? 0);\n }\n\n return line;\n};\n\nconst appendSyntheticEntry = (lines: string[], entry: SyntheticEntry, requestedLine: number): void => {\n const index = requestedLine - 1;\n const existing = lines[index];\n\n if (existing === undefined || existing.length === 0) {\n lines[index] = entry.call;\n\n return;\n }\n\n lines[index] = `${existing} ${entry.call}`;\n};\n\nconst renderSyntheticSource = (entries: SyntheticEntry[]): string => {\n const lines: string[] = [];\n const sorted = entries.toSorted(compareSyntheticEntries);\n let nextLine = lastSyntheticLine(entries) + 1;\n\n for (const entry of sorted) {\n const requestedLine = Math.max(1, entry.line ?? nextLine++);\n appendSyntheticEntry(lines, entry, requestedLine);\n }\n\n return `${lines.join(\"\\n\")}\\n`;\n};\n\nconst writeSyntheticSources = (\n workDir: string,\n project: CatalogProject,\n messages: SourceMessage[],\n): string => {\n const entries = syntheticEntries(project, messages);\n const paths: string[] = [];\n\n for (const [path, owned] of entries) {\n const target = join(workDir, path);\n mkdirSync(dirname(target), { recursive: true });\n writeFileSync(target, renderSyntheticSource(owned));\n paths.push(path);\n }\n\n const potfiles = join(workDir, POTFILES_FILENAME);\n writeFileSync(potfiles, `${paths.toSorted((left, right) => left.localeCompare(right)).join(\"\\n\")}\\n`);\n\n return potfiles;\n};\n\nconst extractSourceMessages = ({ project, messages, output, workDir }: SourceExtraction): void => {\n const potfilesPath = writeSyntheticSources(workDir, project, messages);\n\n runCliTool({\n tool: \"xgettext\",\n args: [\n \"--language=JavaScript\",\n \"--from-code=UTF-8\",\n \"--force-po\",\n \"--keyword=gettext:1\",\n \"--keyword=ngettext:1,2\",\n \"--keyword=pgettext:1c,2\",\n \"--keyword=npgettext:1c,2,3\",\n `--directory=${workDir}`,\n `--files-from=${potfilesPath}`,\n `--output=${output}`,\n ],\n target: output,\n });\n};\n\nconst extractMetadataFragment = (project: CatalogProject, input: string, output: string): void => {\n runCliTool({\n tool: \"msggrep\",\n args: [\n \"--force-po\",\n `--output-file=${output}`,\n ...metadataTemplateFiles(project).map((file) => `--location=${file.relativePath}`),\n input,\n ],\n target: input,\n });\n};\n\nconst joinMetadataFragment = (output: string, fragment: string): void => {\n runCliTool({\n tool: \"xgettext\",\n args: [\"--language=PO\", \"--join-existing\", \"--force-po\", `--output=${output}`, fragment],\n target: output,\n });\n};\n\nconst extractCatalogTemplate = ({\n project,\n messages,\n shouldPreserveMetadataMessages,\n output = resolve(project.poDir, `${project.domain}.pot`),\n}: CatalogTemplateExtraction): void => {\n const workDir = mkdtempSync(join(project.poDir, \".gtkx-i18n-\"));\n const source = join(workDir, \"source.pot\");\n const hasPreviousTemplate = existsSync(output);\n\n try {\n if (shouldPreserveMetadataMessages && hasPreviousTemplate) {\n const fragment = join(workDir, \"metadata.pot\");\n extractMetadataFragment(project, output, fragment);\n extractSourceMessages({ project, messages, output: source, workDir });\n joinMetadataFragment(source, fragment);\n } else {\n extractSourceMessages({ project, messages, output: source, workDir });\n }\n\n replaceCatalogTemplate(source, output);\n } finally {\n rmSync(workDir, { recursive: true, force: true });\n }\n};\n\nconst extractSourceCatalogTo = async (\n project: CatalogProject,\n paths: string[],\n output: string,\n): Promise<void> => {\n const sourceFiles = normalizedSourceFiles(project.root, paths);\n const messages = await findSourceMessages(project.root, sourceFiles);\n writePotfiles(project, sourceFiles);\n extractCatalogTemplate({ project, messages, shouldPreserveMetadataMessages: false, output });\n};\n\nconst extractSourceCatalog = async (\n project: CatalogProject,\n paths: string[],\n shouldPreserveMetadataMessages = true,\n): Promise<void> => {\n const sourceFiles = normalizedSourceFiles(project.root, paths);\n const messages = await findSourceMessages(project.root, sourceFiles);\n writePotfiles(project, sourceFiles);\n extractCatalogTemplate({ project, messages, shouldPreserveMetadataMessages });\n};\n\nexport { extractSourceCatalog, extractSourceCatalogTo, SourceExtractionError };\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"agent-rules.d.ts","sourceRoot":"","sources":["../../src/internal/agent-rules.ts"],"names":[],"mappings":"AAIA,KAAK,gBAAgB,GAAG;IACpB,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,MAAM,EAAE,CAAC;CACnB,CAAC;AA+GF,QAAA,MAAM,gBAAgB,GAAI,MAAM,MAAM,KAAG,gBAcxC,CAAC;AAEF,OAAO,EAAE,gBAAgB,EAAE,CAAC"}
1
+ {"version":3,"file":"agent-rules.d.ts","sourceRoot":"","sources":["../../src/internal/agent-rules.ts"],"names":[],"mappings":"AAIA,KAAK,gBAAgB,GAAG;IACpB,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,MAAM,EAAE,CAAC;CACnB,CAAC;AAoHF,QAAA,MAAM,gBAAgB,GAAI,MAAM,MAAM,KAAG,gBAcxC,CAAC;AAEF,OAAO,EAAE,gBAAgB,EAAE,CAAC"}
@@ -11,9 +11,13 @@ const TOP_LEVEL_HEADING = /^# /m;
11
11
  const rulesBody = (heading) => [
12
12
  `${heading} GTKX`,
13
13
  "",
14
- "This is not the GTK you have seen before. Most GTK code in your training data is C, PyGObject, Vala or " +
15
- "GJS, and almost none of it is valid here. Check the rules below against what you are about to write.",
14
+ "GTKX applications are Adwaita-first, with GTK4 underneath. Most GNOME UI code in your training data is C, " +
15
+ "PyGObject, Vala or GJS, and almost none of it is valid here. Check the rules below against what you are " +
16
+ "about to write.",
16
17
  "",
18
+ "- Start application shells with `AdwApplication` and `AdwApplicationWindow`. Freeform windows normally use " +
19
+ "`AdwToolbarView` and `AdwHeaderBar`; navigation containers own their Adwaita chrome. Prefer Adwaita for " +
20
+ "structure, navigation, dialogs, rows, and adaptive patterns; use GTK4 for lower-level primitives.",
17
21
  "- Children are JSX, never `.append()`, `pack_start()`, `set_child()` or `add()`.",
18
22
  '- Signals are props: `onClicked`, not `widget.connect("clicked", ...)`.',
19
23
  "- Props are camelCase: `marginTop`, not `margin-top` or `margin_top`.",
@@ -30,6 +34,7 @@ const rulesBody = (heading) => [
30
34
  "| --- | --- |",
31
35
  "| `gtkx dev` | Run the app with fast refresh |",
32
36
  "| `gtkx codegen` | Regenerate bindings and this reference |",
37
+ "| `gtkx cleanup` | Remove stale headless runtime and compile cache directories |",
33
38
  "| `tsc --noEmit` | Typecheck |",
34
39
  "| `vitest run` | Run the tests |",
35
40
  "",
@@ -1 +1 @@
1
- {"version":3,"file":"agent-rules.js","sourceRoot":"","sources":["../../src/internal/agent-rules.ts"],"names":[],"mappings":"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","sourcesContent":["import { readFileSync, writeFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { REFERENCE_PATH } from \"../codegen/reference.js\";\n\ntype AgentRulesResult = {\n isWritten: boolean;\n files: string[];\n};\n\nconst AGENTS_FILENAME = \"AGENTS.md\";\nconst CLAUDE_FILENAME = \"CLAUDE.md\";\nconst CLAUDE_CONTENTS = `@${AGENTS_FILENAME}\\n`;\nconst BEGIN_MARKER = \"<!-- BEGIN:gtkx-agent-rules -->\";\nconst END_MARKER = \"<!-- END:gtkx-agent-rules -->\";\nconst BLOCK_PATTERN = /<!-- BEGIN:gtkx-agent-rules -->[\\s\\S]*?<!-- END:gtkx-agent-rules -->/;\nconst TOP_LEVEL_HEADING = /^# /m;\n\nconst rulesBody = (heading: string): string[] => [\n `${heading} GTKX`,\n \"\",\n \"This is not the GTK you have seen before. Most GTK code in your training data is C, PyGObject, Vala or \" +\n \"GJS, and almost none of it is valid here. Check the rules below against what you are about to write.\",\n \"\",\n \"- Children are JSX, never `.append()`, `pack_start()`, `set_child()` or `add()`.\",\n '- Signals are props: `onClicked`, not `widget.connect(\"clicked\", ...)`.',\n \"- Props are camelCase: `marginTop`, not `margin-top` or `margin_top`.\",\n \"- There is no `Gtk.Template`, no `.ui` XML, and no `GtkBuilder`. The JSX tree is the definition.\",\n \"- Elements come from `@gtkx/jsx/<namespace>` and classes, enums and functions from \" +\n \"`@gtkx/gi/<namespace>`. Both are generated for this project by `gtkx codegen`, not installed from npm, \" +\n \"so they match the GIR libraries this project declares.\",\n \"\",\n `Read \\`${REFERENCE_PATH}/index.md\\` before writing widget code. It is generated from this project's own ` +\n \"GIR libraries and is the authority on which props, signals and methods exist. Do not infer a prop from \" +\n \"another toolkit, from a C function name, or from a similar element.\",\n \"\",\n \"| Command | What it does |\",\n \"| --- | --- |\",\n \"| `gtkx dev` | Run the app with fast refresh |\",\n \"| `gtkx codegen` | Regenerate bindings and this reference |\",\n \"| `tsc --noEmit` | Typecheck |\",\n \"| `vitest run` | Run the tests |\",\n \"\",\n \"Never call UI work done without looking at the running app. With `gtkx dev` up, the gtkx MCP server \" +\n \"exposes the live widget tree, queries, clicks and screenshots; use them to confirm the change landed.\",\n \"\",\n \"This block is written by `gtkx codegen`. Anything outside the markers is yours and is left alone, and \" +\n \"committing the block with your work keeps the tree clean.\",\n];\n\nconst renderBlock = (heading: string): string =>\n [BEGIN_MARKER, \"\", ...rulesBody(heading), \"\", END_MARKER].join(\"\\n\");\n\nconst headingFor = (contents: string): string => (TOP_LEVEL_HEADING.test(contents) ? \"##\" : \"#\");\nconst withTrailingNewline = (contents: string): string => (contents.endsWith(\"\\n\") ? contents : `${contents}\\n`);\n\nconst appendBlock = (contents: string, block: string): string => {\n if (contents.trim() === \"\") {\n return `${block}\\n`;\n }\n\n return `${withTrailingNewline(contents)}\\n${block}\\n`;\n};\n\nconst replaceBlock = (contents: string, block: string): string => {\n const match = BLOCK_PATTERN.exec(contents);\n\n if (match === null) {\n return appendBlock(contents, block);\n }\n\n return contents.slice(0, match.index) + block + contents.slice(match.index + match[0].length);\n};\n\nconst nextContents = (contents: string): string => {\n const heading = headingFor(contents.replace(BLOCK_PATTERN, \"\"));\n\n return replaceBlock(contents, renderBlock(heading));\n};\n\nconst errorCode = (error: unknown): string | undefined =>\n error instanceof Error ? (error as NodeJS.ErrnoException).code : undefined;\n\nconst readOrUndefined = (path: string): string | undefined => {\n try {\n return readFileSync(path, \"utf8\");\n } catch (error) {\n if (errorCode(error) === \"ENOENT\") {\n return undefined;\n }\n\n throw error;\n }\n};\n\nconst hasWritten = (path: string, contents: string): boolean => {\n if (readOrUndefined(path) === contents) {\n return false;\n }\n\n writeFileSync(path, contents);\n\n return true;\n};\n\nconst hasWrittenClaudeImport = (root: string): boolean => {\n try {\n writeFileSync(join(root, CLAUDE_FILENAME), CLAUDE_CONTENTS, { flag: \"wx\" });\n\n return true;\n } catch (error) {\n if (errorCode(error) === \"EEXIST\") {\n return false;\n }\n\n throw error;\n }\n};\n\nconst upsertAgentRules = (root: string): AgentRulesResult => {\n const agentsPath = join(root, AGENTS_FILENAME);\n const existing = readOrUndefined(agentsPath) ?? \"\";\n const files: string[] = [];\n\n if (hasWritten(agentsPath, nextContents(existing))) {\n files.push(AGENTS_FILENAME);\n }\n\n if (hasWrittenClaudeImport(root)) {\n files.push(CLAUDE_FILENAME);\n }\n\n return { isWritten: files.length > 0, files };\n};\n\nexport { upsertAgentRules };\n"]}
1
+ {"version":3,"file":"agent-rules.js","sourceRoot":"","sources":["../../src/internal/agent-rules.ts"],"names":[],"mappings":"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","sourcesContent":["import { readFileSync, writeFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { REFERENCE_PATH } from \"../codegen/reference.js\";\n\ntype AgentRulesResult = {\n isWritten: boolean;\n files: string[];\n};\n\nconst AGENTS_FILENAME = \"AGENTS.md\";\nconst CLAUDE_FILENAME = \"CLAUDE.md\";\nconst CLAUDE_CONTENTS = `@${AGENTS_FILENAME}\\n`;\nconst BEGIN_MARKER = \"<!-- BEGIN:gtkx-agent-rules -->\";\nconst END_MARKER = \"<!-- END:gtkx-agent-rules -->\";\nconst BLOCK_PATTERN = /<!-- BEGIN:gtkx-agent-rules -->[\\s\\S]*?<!-- END:gtkx-agent-rules -->/;\nconst TOP_LEVEL_HEADING = /^# /m;\n\nconst rulesBody = (heading: string): string[] => [\n `${heading} GTKX`,\n \"\",\n \"GTKX applications are Adwaita-first, with GTK4 underneath. Most GNOME UI code in your training data is C, \" +\n \"PyGObject, Vala or GJS, and almost none of it is valid here. Check the rules below against what you are \" +\n \"about to write.\",\n \"\",\n \"- Start application shells with `AdwApplication` and `AdwApplicationWindow`. Freeform windows normally use \" +\n \"`AdwToolbarView` and `AdwHeaderBar`; navigation containers own their Adwaita chrome. Prefer Adwaita for \" +\n \"structure, navigation, dialogs, rows, and adaptive patterns; use GTK4 for lower-level primitives.\",\n \"- Children are JSX, never `.append()`, `pack_start()`, `set_child()` or `add()`.\",\n '- Signals are props: `onClicked`, not `widget.connect(\"clicked\", ...)`.',\n \"- Props are camelCase: `marginTop`, not `margin-top` or `margin_top`.\",\n \"- There is no `Gtk.Template`, no `.ui` XML, and no `GtkBuilder`. The JSX tree is the definition.\",\n \"- Elements come from `@gtkx/jsx/<namespace>` and classes, enums and functions from \" +\n \"`@gtkx/gi/<namespace>`. Both are generated for this project by `gtkx codegen`, not installed from npm, \" +\n \"so they match the GIR libraries this project declares.\",\n \"\",\n `Read \\`${REFERENCE_PATH}/index.md\\` before writing widget code. It is generated from this project's own ` +\n \"GIR libraries and is the authority on which props, signals and methods exist. Do not infer a prop from \" +\n \"another toolkit, from a C function name, or from a similar element.\",\n \"\",\n \"| Command | What it does |\",\n \"| --- | --- |\",\n \"| `gtkx dev` | Run the app with fast refresh |\",\n \"| `gtkx codegen` | Regenerate bindings and this reference |\",\n \"| `gtkx cleanup` | Remove stale headless runtime and compile cache directories |\",\n \"| `tsc --noEmit` | Typecheck |\",\n \"| `vitest run` | Run the tests |\",\n \"\",\n \"Never call UI work done without looking at the running app. With `gtkx dev` up, the gtkx MCP server \" +\n \"exposes the live widget tree, queries, clicks and screenshots; use them to confirm the change landed.\",\n \"\",\n \"This block is written by `gtkx codegen`. Anything outside the markers is yours and is left alone, and \" +\n \"committing the block with your work keeps the tree clean.\",\n];\n\nconst renderBlock = (heading: string): string =>\n [BEGIN_MARKER, \"\", ...rulesBody(heading), \"\", END_MARKER].join(\"\\n\");\n\nconst headingFor = (contents: string): string => (TOP_LEVEL_HEADING.test(contents) ? \"##\" : \"#\");\nconst withTrailingNewline = (contents: string): string => (contents.endsWith(\"\\n\") ? contents : `${contents}\\n`);\n\nconst appendBlock = (contents: string, block: string): string => {\n if (contents.trim() === \"\") {\n return `${block}\\n`;\n }\n\n return `${withTrailingNewline(contents)}\\n${block}\\n`;\n};\n\nconst replaceBlock = (contents: string, block: string): string => {\n const match = BLOCK_PATTERN.exec(contents);\n\n if (match === null) {\n return appendBlock(contents, block);\n }\n\n return contents.slice(0, match.index) + block + contents.slice(match.index + match[0].length);\n};\n\nconst nextContents = (contents: string): string => {\n const heading = headingFor(contents.replace(BLOCK_PATTERN, \"\"));\n\n return replaceBlock(contents, renderBlock(heading));\n};\n\nconst errorCode = (error: unknown): string | undefined =>\n error instanceof Error ? (error as NodeJS.ErrnoException).code : undefined;\n\nconst readOrUndefined = (path: string): string | undefined => {\n try {\n return readFileSync(path, \"utf8\");\n } catch (error) {\n if (errorCode(error) === \"ENOENT\") {\n return undefined;\n }\n\n throw error;\n }\n};\n\nconst hasWritten = (path: string, contents: string): boolean => {\n if (readOrUndefined(path) === contents) {\n return false;\n }\n\n writeFileSync(path, contents);\n\n return true;\n};\n\nconst hasWrittenClaudeImport = (root: string): boolean => {\n try {\n writeFileSync(join(root, CLAUDE_FILENAME), CLAUDE_CONTENTS, { flag: \"wx\" });\n\n return true;\n } catch (error) {\n if (errorCode(error) === \"EEXIST\") {\n return false;\n }\n\n throw error;\n }\n};\n\nconst upsertAgentRules = (root: string): AgentRulesResult => {\n const agentsPath = join(root, AGENTS_FILENAME);\n const existing = readOrUndefined(agentsPath) ?? \"\";\n const files: string[] = [];\n\n if (hasWritten(agentsPath, nextContents(existing))) {\n files.push(AGENTS_FILENAME);\n }\n\n if (hasWrittenClaudeImport(root)) {\n files.push(CLAUDE_FILENAME);\n }\n\n return { isWritten: files.length > 0, files };\n};\n\nexport { upsertAgentRules };\n"]}
@@ -1,4 +1,6 @@
1
1
  import type { Rollup } from "vite";
2
- declare const prependBanner: (options: Rollup.OutputOptions, banner: string) => Rollup.OutputOptions;
3
- export { prependBanner };
2
+ type Banner = string | Rollup.AddonFunction;
3
+ declare const prependBanner: (options: Rollup.OutputOptions, banner: Banner) => Rollup.OutputOptions;
4
+ declare const outputRootUrlExpression: (chunk: Rollup.RenderedChunk) => string;
5
+ export { outputRootUrlExpression, prependBanner };
4
6
  //# sourceMappingURL=banner.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"banner.d.ts","sourceRoot":"","sources":["../../src/internal/banner.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAEnC,QAAA,MAAM,aAAa,GAAI,SAAS,MAAM,CAAC,aAAa,EAAE,QAAQ,MAAM,KAAG,MAAM,CAAC,aAQ7E,CAAC;AAEF,OAAO,EAAE,aAAa,EAAE,CAAC"}
1
+ {"version":3,"file":"banner.d.ts","sourceRoot":"","sources":["../../src/internal/banner.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAGnC,KAAK,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC,aAAa,CAAC;AAK5C,QAAA,MAAM,aAAa,GAAI,SAAS,MAAM,CAAC,aAAa,EAAE,QAAQ,MAAM,KAAG,MAAM,CAAC,aAgB7E,CAAC;AAEF,QAAA,MAAM,uBAAuB,GAAI,OAAO,MAAM,CAAC,aAAa,KAAG,MAK9D,CAAC;AAEF,OAAO,EAAE,uBAAuB,EAAE,aAAa,EAAE,CAAC"}
@@ -1,9 +1,23 @@
1
+ import { posix } from "node:path";
2
+ const renderBanner = async (banner, chunk) => typeof banner === "function" ? banner(chunk) : banner;
1
3
  const prependBanner = (options, banner) => {
2
4
  const existing = options.banner;
3
- if (typeof existing === "function") {
4
- return { ...options, banner: async (chunk) => `${banner}\n${await existing(chunk)}` };
5
- }
6
- return { ...options, banner: existing ? `${banner}\n${existing}` : banner };
5
+ return {
6
+ ...options,
7
+ banner: async (chunk) => {
8
+ const prefix = await renderBanner(banner, chunk);
9
+ const suffix = existing === undefined ? "" : await renderBanner(existing, chunk);
10
+ if (prefix.length === 0) {
11
+ return suffix;
12
+ }
13
+ return suffix.length === 0 ? prefix : `${prefix}\n${suffix}`;
14
+ },
15
+ };
7
16
  };
8
- export { prependBanner };
17
+ const outputRootUrlExpression = (chunk) => {
18
+ const relativeRoot = posix.relative(posix.dirname(chunk.fileName), ".");
19
+ const specifier = relativeRoot.length === 0 ? "./" : `${relativeRoot}/`;
20
+ return `decodeURIComponent(new URL(${JSON.stringify(specifier)}, import.meta.url).pathname)`;
21
+ };
22
+ export { outputRootUrlExpression, prependBanner };
9
23
  //# sourceMappingURL=banner.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"banner.js","sourceRoot":"","sources":["../../src/internal/banner.ts"],"names":[],"mappings":"AAEA,MAAM,aAAa,GAAG,CAAC,OAA6B,EAAE,MAAc,EAAwB,EAAE;IAC1F,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC;IAEhC,IAAI,OAAO,QAAQ,KAAK,UAAU,EAAE,CAAC;QACjC,OAAO,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,MAAM,KAAK,MAAM,QAAQ,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;IAC1F,CAAC;IAED,OAAO,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,MAAM,KAAK,QAAQ,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;AAChF,CAAC,CAAC;AAEF,OAAO,EAAE,aAAa,EAAE,CAAC","sourcesContent":["import type { Rollup } from \"vite\";\n\nconst prependBanner = (options: Rollup.OutputOptions, banner: string): Rollup.OutputOptions => {\n const existing = options.banner;\n\n if (typeof existing === \"function\") {\n return { ...options, banner: async (chunk) => `${banner}\\n${await existing(chunk)}` };\n }\n\n return { ...options, banner: existing ? `${banner}\\n${existing}` : banner };\n};\n\nexport { prependBanner };\n"]}
1
+ {"version":3,"file":"banner.js","sourceRoot":"","sources":["../../src/internal/banner.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AAIlC,MAAM,YAAY,GAAG,KAAK,EAAE,MAAc,EAAE,KAA2B,EAAmB,EAAE,CACxF,OAAO,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;AAE1D,MAAM,aAAa,GAAG,CAAC,OAA6B,EAAE,MAAc,EAAwB,EAAE;IAC1F,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC;IAEhC,OAAO;QACH,GAAG,OAAO;QACV,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;YACpB,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;YACjD,MAAM,MAAM,GAAG,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,YAAY,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;YAEjF,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACtB,OAAO,MAAM,CAAC;YAClB,CAAC;YAED,OAAO,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,KAAK,MAAM,EAAE,CAAC;QACjE,CAAC;KACJ,CAAC;AACN,CAAC,CAAC;AAEF,MAAM,uBAAuB,GAAG,CAAC,KAA2B,EAAU,EAAE;IACpE,MAAM,YAAY,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,GAAG,CAAC,CAAC;IACxE,MAAM,SAAS,GAAG,YAAY,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,YAAY,GAAG,CAAC;IAExE,OAAO,8BAA8B,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,8BAA8B,CAAC;AACjG,CAAC,CAAC;AAEF,OAAO,EAAE,uBAAuB,EAAE,aAAa,EAAE,CAAC","sourcesContent":["import type { Rollup } from \"vite\";\nimport { posix } from \"node:path\";\n\ntype Banner = string | Rollup.AddonFunction;\n\nconst renderBanner = async (banner: Banner, chunk: Rollup.RenderedChunk): Promise<string> =>\n typeof banner === \"function\" ? banner(chunk) : banner;\n\nconst prependBanner = (options: Rollup.OutputOptions, banner: Banner): Rollup.OutputOptions => {\n const existing = options.banner;\n\n return {\n ...options,\n banner: async (chunk) => {\n const prefix = await renderBanner(banner, chunk);\n const suffix = existing === undefined ? \"\" : await renderBanner(existing, chunk);\n\n if (prefix.length === 0) {\n return suffix;\n }\n\n return suffix.length === 0 ? prefix : `${prefix}\\n${suffix}`;\n },\n };\n};\n\nconst outputRootUrlExpression = (chunk: Rollup.RenderedChunk): string => {\n const relativeRoot = posix.relative(posix.dirname(chunk.fileName), \".\");\n const specifier = relativeRoot.length === 0 ? \"./\" : `${relativeRoot}/`;\n\n return `decodeURIComponent(new URL(${JSON.stringify(specifier)}, import.meta.url).pathname)`;\n};\n\nexport { outputRootUrlExpression, prependBanner };\n"]}
@@ -6,6 +6,8 @@ type RecordedPackage = {
6
6
  type BuildManifest = {
7
7
  generator: typeof BUILD_MANIFEST_GENERATOR;
8
8
  formatVersion: typeof BUILD_MANIFEST_FORMAT_VERSION;
9
+ configFile: string;
10
+ configDigest: string;
9
11
  schemas: string[];
10
12
  packages: RecordedPackage[];
11
13
  };
@@ -14,7 +16,8 @@ type BuildManifestCollector = {
14
16
  };
15
17
  declare const BUILD_MANIFEST_FILENAME = "gtkx-schemas.json";
16
18
  declare const BUILD_MANIFEST_GENERATOR = "gtkx-build";
17
- declare const BUILD_MANIFEST_FORMAT_VERSION = 1;
19
+ declare const BUILD_MANIFEST_FORMAT_VERSION = 2;
20
+ declare const configDigest: (config: unknown) => string;
18
21
  declare const createBuildManifestCollector: () => BuildManifestCollector;
19
- export { BUILD_MANIFEST_FILENAME, BUILD_MANIFEST_FORMAT_VERSION, BUILD_MANIFEST_GENERATOR, createBuildManifestCollector, type BuildManifest, type BuildManifestCollector, type RecordedPackage, };
22
+ export { BUILD_MANIFEST_FILENAME, BUILD_MANIFEST_FORMAT_VERSION, BUILD_MANIFEST_GENERATOR, configDigest, createBuildManifestCollector, type BuildManifest, type BuildManifestCollector, type RecordedPackage, };
20
23
  //# sourceMappingURL=build-manifest.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"build-manifest.d.ts","sourceRoot":"","sources":["../../src/internal/build-manifest.ts"],"names":[],"mappings":"AAAA,KAAK,eAAe,GAAG;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,GAAG,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,KAAK,aAAa,GAAG;IACjB,SAAS,EAAE,OAAO,wBAAwB,CAAC;IAC3C,aAAa,EAAE,OAAO,6BAA6B,CAAC;IACpD,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,EAAE,eAAe,EAAE,CAAC;CAC/B,CAAC;AAEF,KAAK,sBAAsB,GAAG;IAC1B,OAAO,EAAE,MAAM,EAAE,CAAC;CACrB,CAAC;AAEF,QAAA,MAAM,uBAAuB,sBAAsB,CAAC;AACpD,QAAA,MAAM,wBAAwB,eAAe,CAAC;AAC9C,QAAA,MAAM,6BAA6B,IAAI,CAAC;AAExC,QAAA,MAAM,4BAA4B,QAAO,sBAA2C,CAAC;AAErF,OAAO,EACH,uBAAuB,EACvB,6BAA6B,EAC7B,wBAAwB,EACxB,4BAA4B,EAC5B,KAAK,aAAa,EAClB,KAAK,sBAAsB,EAC3B,KAAK,eAAe,GACvB,CAAC"}
1
+ {"version":3,"file":"build-manifest.d.ts","sourceRoot":"","sources":["../../src/internal/build-manifest.ts"],"names":[],"mappings":"AAEA,KAAK,eAAe,GAAG;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,GAAG,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,KAAK,aAAa,GAAG;IACjB,SAAS,EAAE,OAAO,wBAAwB,CAAC;IAC3C,aAAa,EAAE,OAAO,6BAA6B,CAAC;IACpD,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,EAAE,eAAe,EAAE,CAAC;CAC/B,CAAC;AAEF,KAAK,sBAAsB,GAAG;IAC1B,OAAO,EAAE,MAAM,EAAE,CAAC;CACrB,CAAC;AAEF,QAAA,MAAM,uBAAuB,sBAAsB,CAAC;AACpD,QAAA,MAAM,wBAAwB,eAAe,CAAC;AAC9C,QAAA,MAAM,6BAA6B,IAAI,CAAC;AAkBxC,QAAA,MAAM,YAAY,GAAI,QAAQ,OAAO,KAAG,MAC8C,CAAC;AAEvF,QAAA,MAAM,4BAA4B,QAAO,sBAA2C,CAAC;AAErF,OAAO,EACH,uBAAuB,EACvB,6BAA6B,EAC7B,wBAAwB,EACxB,YAAY,EACZ,4BAA4B,EAC5B,KAAK,aAAa,EAClB,KAAK,sBAAsB,EAC3B,KAAK,eAAe,GACvB,CAAC"}
@@ -1,6 +1,19 @@
1
+ import { createHash } from "node:crypto";
1
2
  const BUILD_MANIFEST_FILENAME = "gtkx-schemas.json";
2
3
  const BUILD_MANIFEST_GENERATOR = "gtkx-build";
3
- const BUILD_MANIFEST_FORMAT_VERSION = 1;
4
+ const BUILD_MANIFEST_FORMAT_VERSION = 2;
5
+ const canonicalConfig = (value) => {
6
+ if (Array.isArray(value)) {
7
+ return value.map((entry) => canonicalConfig(entry));
8
+ }
9
+ if (typeof value !== "object" || value === null) {
10
+ return value;
11
+ }
12
+ return Object.fromEntries(Object.entries(value)
13
+ .toSorted(([left], [right]) => left.localeCompare(right))
14
+ .map(([key, entry]) => [key, canonicalConfig(entry)]));
15
+ };
16
+ const configDigest = (config) => createHash("sha256").update(JSON.stringify(canonicalConfig(config))).digest("hex");
4
17
  const createBuildManifestCollector = () => ({ schemas: [] });
5
- export { BUILD_MANIFEST_FILENAME, BUILD_MANIFEST_FORMAT_VERSION, BUILD_MANIFEST_GENERATOR, createBuildManifestCollector, };
18
+ export { BUILD_MANIFEST_FILENAME, BUILD_MANIFEST_FORMAT_VERSION, BUILD_MANIFEST_GENERATOR, configDigest, createBuildManifestCollector, };
6
19
  //# sourceMappingURL=build-manifest.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"build-manifest.js","sourceRoot":"","sources":["../../src/internal/build-manifest.ts"],"names":[],"mappings":"AAiBA,MAAM,uBAAuB,GAAG,mBAAmB,CAAC;AACpD,MAAM,wBAAwB,GAAG,YAAY,CAAC;AAC9C,MAAM,6BAA6B,GAAG,CAAC,CAAC;AAExC,MAAM,4BAA4B,GAAG,GAA2B,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;AAErF,OAAO,EACH,uBAAuB,EACvB,6BAA6B,EAC7B,wBAAwB,EACxB,4BAA4B,GAI/B,CAAC","sourcesContent":["type RecordedPackage = {\n name: string;\n version: string | null;\n dir: string;\n};\n\ntype BuildManifest = {\n generator: typeof BUILD_MANIFEST_GENERATOR;\n formatVersion: typeof BUILD_MANIFEST_FORMAT_VERSION;\n schemas: string[];\n packages: RecordedPackage[];\n};\n\ntype BuildManifestCollector = {\n schemas: string[];\n};\n\nconst BUILD_MANIFEST_FILENAME = \"gtkx-schemas.json\";\nconst BUILD_MANIFEST_GENERATOR = \"gtkx-build\";\nconst BUILD_MANIFEST_FORMAT_VERSION = 1;\n\nconst createBuildManifestCollector = (): BuildManifestCollector => ({ schemas: [] });\n\nexport {\n BUILD_MANIFEST_FILENAME,\n BUILD_MANIFEST_FORMAT_VERSION,\n BUILD_MANIFEST_GENERATOR,\n createBuildManifestCollector,\n type BuildManifest,\n type BuildManifestCollector,\n type RecordedPackage,\n};\n"]}
1
+ {"version":3,"file":"build-manifest.js","sourceRoot":"","sources":["../../src/internal/build-manifest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAqBzC,MAAM,uBAAuB,GAAG,mBAAmB,CAAC;AACpD,MAAM,wBAAwB,GAAG,YAAY,CAAC;AAC9C,MAAM,6BAA6B,GAAG,CAAC,CAAC;AAExC,MAAM,eAAe,GAAG,CAAC,KAAc,EAAW,EAAE;IAChD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC;IACxD,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QAC9C,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,OAAO,MAAM,CAAC,WAAW,CACrB,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC;SAChB,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;SACxD,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,CAC5D,CAAC;AACN,CAAC,CAAC;AAEF,MAAM,YAAY,GAAG,CAAC,MAAe,EAAU,EAAE,CAC7C,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAEvF,MAAM,4BAA4B,GAAG,GAA2B,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;AAErF,OAAO,EACH,uBAAuB,EACvB,6BAA6B,EAC7B,wBAAwB,EACxB,YAAY,EACZ,4BAA4B,GAI/B,CAAC","sourcesContent":["import { createHash } from \"node:crypto\";\n\ntype RecordedPackage = {\n name: string;\n version: string | null;\n dir: string;\n};\n\ntype BuildManifest = {\n generator: typeof BUILD_MANIFEST_GENERATOR;\n formatVersion: typeof BUILD_MANIFEST_FORMAT_VERSION;\n configFile: string;\n configDigest: string;\n schemas: string[];\n packages: RecordedPackage[];\n};\n\ntype BuildManifestCollector = {\n schemas: string[];\n};\n\nconst BUILD_MANIFEST_FILENAME = \"gtkx-schemas.json\";\nconst BUILD_MANIFEST_GENERATOR = \"gtkx-build\";\nconst BUILD_MANIFEST_FORMAT_VERSION = 2;\n\nconst canonicalConfig = (value: unknown): unknown => {\n if (Array.isArray(value)) {\n return value.map((entry) => canonicalConfig(entry));\n }\n\n if (typeof value !== \"object\" || value === null) {\n return value;\n }\n\n return Object.fromEntries(\n Object.entries(value)\n .toSorted(([left], [right]) => left.localeCompare(right))\n .map(([key, entry]) => [key, canonicalConfig(entry)]),\n );\n};\n\nconst configDigest = (config: unknown): string =>\n createHash(\"sha256\").update(JSON.stringify(canonicalConfig(config))).digest(\"hex\");\n\nconst createBuildManifestCollector = (): BuildManifestCollector => ({ schemas: [] });\n\nexport {\n BUILD_MANIFEST_FILENAME,\n BUILD_MANIFEST_FORMAT_VERSION,\n BUILD_MANIFEST_GENERATOR,\n configDigest,\n createBuildManifestCollector,\n type BuildManifest,\n type BuildManifestCollector,\n type RecordedPackage,\n};\n"]}
@@ -0,0 +1,8 @@
1
+ type PreparedBuildOutDir = Disposable & {
2
+ commit: () => void;
3
+ path: string;
4
+ };
5
+ declare const resolveBuildOutDir: (root: string, configured?: string) => string;
6
+ declare const prepareBuildOutDir: (root: string, outDir: string) => PreparedBuildOutDir;
7
+ export { prepareBuildOutDir, resolveBuildOutDir };
8
+ //# sourceMappingURL=build-output.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build-output.d.ts","sourceRoot":"","sources":["../../src/internal/build-output.ts"],"names":[],"mappings":"AAgBA,KAAK,mBAAmB,GAAG,UAAU,GAAG;IAAE,MAAM,EAAE,MAAM,IAAI,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAwH7E,QAAA,MAAM,kBAAkB,GAAI,MAAM,MAAM,EAAE,aAAa,MAAM,KAAG,MAW/D,CAAC;AAEF,QAAA,MAAM,kBAAkB,GAAI,MAAM,MAAM,EAAE,QAAQ,MAAM,KAAG,mBAmB1D,CAAC;AAEF,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,CAAC"}