@gtkx/cli 0.21.0 → 1.0.0-rc.1

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 (346) hide show
  1. package/README.md +173 -0
  2. package/bin/gtkx-dev-runner.js +9 -0
  3. package/dist/builder.d.ts +2 -50
  4. package/dist/builder.d.ts.map +1 -1
  5. package/dist/builder.js +22 -56
  6. package/dist/builder.js.map +1 -1
  7. package/dist/cli.d.ts +1 -2
  8. package/dist/cli.d.ts.map +1 -1
  9. package/dist/cli.js +11 -124
  10. package/dist/cli.js.map +1 -1
  11. package/dist/codegen/freshness.d.ts +11 -0
  12. package/dist/codegen/freshness.d.ts.map +1 -0
  13. package/dist/codegen/freshness.js +42 -0
  14. package/dist/codegen/freshness.js.map +1 -0
  15. package/dist/codegen/report.d.ts +3 -0
  16. package/dist/codegen/report.d.ts.map +1 -0
  17. package/dist/codegen/report.js +16 -0
  18. package/dist/codegen/report.js.map +1 -0
  19. package/dist/codegen/run-codegen.d.ts +35 -0
  20. package/dist/codegen/run-codegen.d.ts.map +1 -0
  21. package/dist/codegen/run-codegen.js +133 -0
  22. package/dist/codegen/run-codegen.js.map +1 -0
  23. package/dist/codegen/store-resolver.d.ts +21 -0
  24. package/dist/codegen/store-resolver.d.ts.map +1 -0
  25. package/dist/codegen/store-resolver.js +52 -0
  26. package/dist/codegen/store-resolver.js.map +1 -0
  27. package/dist/commands/build.d.ts +9 -0
  28. package/dist/commands/build.d.ts.map +1 -0
  29. package/dist/commands/build.js +33 -0
  30. package/dist/commands/build.js.map +1 -0
  31. package/dist/commands/codegen.d.ts +9 -0
  32. package/dist/commands/codegen.d.ts.map +1 -0
  33. package/dist/commands/codegen.js +40 -0
  34. package/dist/commands/codegen.js.map +1 -0
  35. package/dist/commands/dev.d.ts +5 -0
  36. package/dist/commands/dev.d.ts.map +1 -0
  37. package/dist/commands/dev.js +21 -0
  38. package/dist/commands/dev.js.map +1 -0
  39. package/dist/commands/docs.d.ts +19 -0
  40. package/dist/commands/docs.d.ts.map +1 -0
  41. package/dist/commands/docs.js +59 -0
  42. package/dist/commands/docs.js.map +1 -0
  43. package/dist/dev/icon-dir.d.ts +2 -0
  44. package/dist/dev/icon-dir.d.ts.map +1 -0
  45. package/dist/dev/icon-dir.js +13 -0
  46. package/dist/dev/icon-dir.js.map +1 -0
  47. package/dist/dev/refresh-tracker.d.ts +6 -0
  48. package/dist/dev/refresh-tracker.d.ts.map +1 -0
  49. package/dist/dev/refresh-tracker.js +18 -0
  50. package/dist/dev/refresh-tracker.js.map +1 -0
  51. package/dist/dev/runner-deps.d.ts +3 -0
  52. package/dist/dev/runner-deps.d.ts.map +1 -0
  53. package/dist/dev/runner-deps.js +39 -0
  54. package/dist/dev/runner-deps.js.map +1 -0
  55. package/dist/dev/runner-main.d.ts +2 -0
  56. package/dist/dev/runner-main.d.ts.map +1 -0
  57. package/dist/dev/runner-main.js +28 -0
  58. package/dist/dev/runner-main.js.map +1 -0
  59. package/dist/dev/runner.d.ts +23 -0
  60. package/dist/dev/runner.d.ts.map +1 -0
  61. package/dist/dev/runner.js +88 -0
  62. package/dist/dev/runner.js.map +1 -0
  63. package/dist/dev/schema-dir.d.ts +2 -0
  64. package/dist/dev/schema-dir.d.ts.map +1 -0
  65. package/dist/dev/schema-dir.js +10 -0
  66. package/dist/dev/schema-dir.js.map +1 -0
  67. package/dist/dev/supervisor.d.ts +17 -0
  68. package/dist/dev/supervisor.d.ts.map +1 -0
  69. package/dist/dev/supervisor.js +142 -0
  70. package/dist/dev/supervisor.js.map +1 -0
  71. package/dist/dev/vite-dev-server.d.ts +21 -0
  72. package/dist/dev/vite-dev-server.d.ts.map +1 -0
  73. package/dist/dev/vite-dev-server.js +12 -0
  74. package/dist/dev/vite-dev-server.js.map +1 -0
  75. package/dist/internal/banner.d.ts +3 -0
  76. package/dist/internal/banner.d.ts.map +1 -0
  77. package/dist/internal/banner.js +8 -0
  78. package/dist/internal/banner.js.map +1 -0
  79. package/dist/internal/data-dir.d.ts +3 -0
  80. package/dist/internal/data-dir.d.ts.map +1 -0
  81. package/dist/internal/data-dir.js +37 -0
  82. package/dist/internal/data-dir.js.map +1 -0
  83. package/dist/internal/entry-arg.d.ts +19 -0
  84. package/dist/internal/entry-arg.d.ts.map +1 -0
  85. package/dist/internal/entry-arg.js +33 -0
  86. package/dist/internal/entry-arg.js.map +1 -0
  87. package/dist/internal/errors.d.ts +4 -0
  88. package/dist/internal/errors.d.ts.map +1 -0
  89. package/dist/internal/errors.js +27 -0
  90. package/dist/internal/errors.js.map +1 -0
  91. package/dist/internal/list-files.d.ts +6 -0
  92. package/dist/internal/list-files.d.ts.map +1 -0
  93. package/dist/internal/list-files.js +13 -0
  94. package/dist/internal/list-files.js.map +1 -0
  95. package/dist/internal/resolve-cli-tool.d.ts +2 -0
  96. package/dist/internal/resolve-cli-tool.d.ts.map +1 -0
  97. package/dist/internal/resolve-cli-tool.js +20 -0
  98. package/dist/internal/resolve-cli-tool.js.map +1 -0
  99. package/dist/internal/staging-dir.d.ts +3 -0
  100. package/dist/internal/staging-dir.d.ts.map +1 -0
  101. package/dist/internal/staging-dir.js +16 -0
  102. package/dist/internal/staging-dir.js.map +1 -0
  103. package/dist/internal/xdg-data-dirs.d.ts +2 -0
  104. package/dist/internal/xdg-data-dirs.d.ts.map +1 -0
  105. package/dist/internal/xdg-data-dirs.js +8 -0
  106. package/dist/internal/xdg-data-dirs.js.map +1 -0
  107. package/dist/mcp/client.d.ts +23 -0
  108. package/dist/mcp/client.d.ts.map +1 -0
  109. package/dist/mcp/client.js +157 -0
  110. package/dist/mcp/client.js.map +1 -0
  111. package/dist/mcp/handlers.d.ts +8 -0
  112. package/dist/mcp/handlers.d.ts.map +1 -0
  113. package/dist/mcp/handlers.js +119 -0
  114. package/dist/mcp/handlers.js.map +1 -0
  115. package/dist/mcp/index.d.ts +4 -0
  116. package/dist/mcp/index.d.ts.map +1 -0
  117. package/dist/mcp/index.js +17 -0
  118. package/dist/mcp/index.js.map +1 -0
  119. package/dist/mcp/serialize-widget.d.ts +10 -0
  120. package/dist/mcp/serialize-widget.d.ts.map +1 -0
  121. package/dist/mcp/serialize-widget.js +20 -0
  122. package/dist/mcp/serialize-widget.js.map +1 -0
  123. package/dist/mcp/testing-loader.d.ts +6 -0
  124. package/dist/mcp/testing-loader.d.ts.map +1 -0
  125. package/dist/mcp/testing-loader.js +25 -0
  126. package/dist/mcp/testing-loader.js.map +1 -0
  127. package/dist/mcp/widget-registry.d.ts +13 -0
  128. package/dist/mcp/widget-registry.d.ts.map +1 -0
  129. package/dist/mcp/widget-registry.js +38 -0
  130. package/dist/mcp/widget-registry.js.map +1 -0
  131. package/dist/refresh-runtime.d.ts +10 -20
  132. package/dist/refresh-runtime.d.ts.map +1 -1
  133. package/dist/refresh-runtime.js +12 -36
  134. package/dist/refresh-runtime.js.map +1 -1
  135. package/dist/settings/compile.d.ts +2 -0
  136. package/dist/settings/compile.d.ts.map +1 -0
  137. package/dist/settings/compile.js +19 -0
  138. package/dist/settings/compile.js.map +1 -0
  139. package/dist/settings/parser.d.ts +23 -0
  140. package/dist/settings/parser.d.ts.map +1 -0
  141. package/dist/settings/parser.js +117 -0
  142. package/dist/settings/parser.js.map +1 -0
  143. package/dist/settings/render.d.ts +4 -0
  144. package/dist/settings/render.d.ts.map +1 -0
  145. package/dist/settings/render.js +148 -0
  146. package/dist/settings/render.js.map +1 -0
  147. package/dist/settings/schema.d.ts +13 -0
  148. package/dist/settings/schema.d.ts.map +1 -0
  149. package/dist/settings/schema.js +103 -0
  150. package/dist/settings/schema.js.map +1 -0
  151. package/dist/vite-plugins/asset-extensions.d.ts +4 -0
  152. package/dist/vite-plugins/asset-extensions.d.ts.map +1 -0
  153. package/dist/vite-plugins/asset-extensions.js +27 -0
  154. package/dist/vite-plugins/asset-extensions.js.map +1 -0
  155. package/dist/vite-plugins/built-url.d.ts +3 -0
  156. package/dist/vite-plugins/built-url.d.ts.map +1 -0
  157. package/dist/{vite-plugin-gtkx-built-url.js → vite-plugins/built-url.js} +4 -17
  158. package/dist/vite-plugins/built-url.js.map +1 -0
  159. package/dist/vite-plugins/css.d.ts +3 -0
  160. package/dist/vite-plugins/css.d.ts.map +1 -0
  161. package/dist/vite-plugins/css.js +30 -0
  162. package/dist/vite-plugins/css.js.map +1 -0
  163. package/dist/vite-plugins/fast-refresh/refresh-filter.d.ts +7 -0
  164. package/dist/vite-plugins/fast-refresh/refresh-filter.d.ts.map +1 -0
  165. package/dist/vite-plugins/fast-refresh/refresh-filter.js +15 -0
  166. package/dist/vite-plugins/fast-refresh/refresh-filter.js.map +1 -0
  167. package/dist/vite-plugins/fast-refresh/swc-refresh.d.ts +5 -0
  168. package/dist/vite-plugins/fast-refresh/swc-refresh.d.ts.map +1 -0
  169. package/dist/vite-plugins/fast-refresh/swc-refresh.js +66 -0
  170. package/dist/vite-plugins/fast-refresh/swc-refresh.js.map +1 -0
  171. package/dist/vite-plugins/icons.d.ts +3 -0
  172. package/dist/vite-plugins/icons.d.ts.map +1 -0
  173. package/dist/vite-plugins/icons.js +47 -0
  174. package/dist/vite-plugins/icons.js.map +1 -0
  175. package/dist/vite-plugins/index.d.ts +3 -0
  176. package/dist/vite-plugins/index.d.ts.map +1 -0
  177. package/dist/vite-plugins/index.js +21 -0
  178. package/dist/vite-plugins/index.js.map +1 -0
  179. package/dist/vite-plugins/native.d.ts +3 -0
  180. package/dist/vite-plugins/native.d.ts.map +1 -0
  181. package/dist/vite-plugins/native.js +60 -0
  182. package/dist/vite-plugins/native.js.map +1 -0
  183. package/dist/vite-plugins/react-compiler.d.ts +4 -0
  184. package/dist/vite-plugins/react-compiler.d.ts.map +1 -0
  185. package/dist/vite-plugins/react-compiler.js +56 -0
  186. package/dist/vite-plugins/react-compiler.js.map +1 -0
  187. package/dist/vite-plugins/react-dom-prebundle.d.ts +3 -0
  188. package/dist/vite-plugins/react-dom-prebundle.d.ts.map +1 -0
  189. package/dist/vite-plugins/react-dom-prebundle.js +11 -0
  190. package/dist/vite-plugins/react-dom-prebundle.js.map +1 -0
  191. package/dist/vite-plugins/resource-init-module.d.ts +5 -0
  192. package/dist/vite-plugins/resource-init-module.d.ts.map +1 -0
  193. package/dist/vite-plugins/resource-init-module.js +50 -0
  194. package/dist/vite-plugins/resource-init-module.js.map +1 -0
  195. package/dist/vite-plugins/resource-shared.d.ts +6 -0
  196. package/dist/vite-plugins/resource-shared.d.ts.map +1 -0
  197. package/dist/vite-plugins/resource-shared.js +21 -0
  198. package/dist/vite-plugins/resource-shared.js.map +1 -0
  199. package/dist/vite-plugins/resources.d.ts +4 -0
  200. package/dist/vite-plugins/resources.d.ts.map +1 -0
  201. package/dist/vite-plugins/resources.js +220 -0
  202. package/dist/vite-plugins/resources.js.map +1 -0
  203. package/dist/vite-plugins/settings-worker-env.d.ts +3 -0
  204. package/dist/vite-plugins/settings-worker-env.d.ts.map +1 -0
  205. package/dist/vite-plugins/settings-worker-env.js +21 -0
  206. package/dist/vite-plugins/settings-worker-env.js.map +1 -0
  207. package/dist/vite-plugins/settings.d.ts +3 -0
  208. package/dist/vite-plugins/settings.d.ts.map +1 -0
  209. package/dist/vite-plugins/settings.js +190 -0
  210. package/dist/vite-plugins/settings.js.map +1 -0
  211. package/dist/vite-plugins/undeclared-library.d.ts +3 -0
  212. package/dist/vite-plugins/undeclared-library.d.ts.map +1 -0
  213. package/dist/vite-plugins/undeclared-library.js +47 -0
  214. package/dist/vite-plugins/undeclared-library.js.map +1 -0
  215. package/dist/vite-plugins/virtual-module.d.ts +22 -0
  216. package/dist/vite-plugins/virtual-module.d.ts.map +1 -0
  217. package/dist/vite-plugins/virtual-module.js +18 -0
  218. package/dist/vite-plugins/virtual-module.js.map +1 -0
  219. package/dist/vitest-plugin.d.ts +10 -0
  220. package/dist/vitest-plugin.d.ts.map +1 -0
  221. package/dist/vitest-plugin.js +12 -0
  222. package/dist/vitest-plugin.js.map +1 -0
  223. package/env.d.ts +131 -8
  224. package/package.json +32 -38
  225. package/src/babel-modules.d.ts +13 -0
  226. package/src/builder.ts +28 -84
  227. package/src/cli.ts +22 -0
  228. package/src/codegen/freshness.ts +52 -0
  229. package/src/codegen/report.ts +20 -0
  230. package/src/codegen/run-codegen.ts +185 -0
  231. package/src/codegen/store-resolver.ts +75 -0
  232. package/src/commands/build.ts +37 -0
  233. package/src/commands/codegen.ts +44 -0
  234. package/src/commands/dev.ts +25 -0
  235. package/src/commands/docs.ts +66 -0
  236. package/src/dev/icon-dir.ts +11 -0
  237. package/src/dev/refresh-tracker.ts +21 -0
  238. package/src/dev/runner-deps.ts +42 -0
  239. package/src/dev/runner-main.ts +33 -0
  240. package/src/dev/runner.ts +126 -0
  241. package/src/dev/schema-dir.ts +11 -0
  242. package/src/dev/supervisor.ts +178 -0
  243. package/src/dev/vite-dev-server.ts +34 -0
  244. package/src/internal/banner.ts +9 -0
  245. package/src/internal/data-dir.ts +39 -0
  246. package/src/internal/entry-arg.ts +38 -0
  247. package/src/internal/errors.ts +28 -0
  248. package/src/internal/list-files.ts +17 -0
  249. package/src/internal/resolve-cli-tool.ts +21 -0
  250. package/src/internal/staging-dir.ts +16 -0
  251. package/src/internal/xdg-data-dirs.ts +7 -0
  252. package/src/mcp/client.ts +177 -0
  253. package/src/mcp/handlers.ts +156 -0
  254. package/src/mcp/index.ts +22 -0
  255. package/src/mcp/serialize-widget.ts +34 -0
  256. package/src/mcp/testing-loader.ts +32 -0
  257. package/src/mcp/widget-registry.ts +43 -0
  258. package/src/refresh-runtime.ts +12 -41
  259. package/src/settings/compile.ts +19 -0
  260. package/src/settings/parser.ts +154 -0
  261. package/src/settings/render.ts +167 -0
  262. package/src/settings/schema.ts +115 -0
  263. package/src/vite-plugins/asset-extensions.ts +28 -0
  264. package/src/{vite-plugin-gtkx-built-url.ts → vite-plugins/built-url.ts} +3 -16
  265. package/src/vite-plugins/css.ts +38 -0
  266. package/src/vite-plugins/fast-refresh/refresh-filter.ts +18 -0
  267. package/src/vite-plugins/fast-refresh/swc-refresh.ts +79 -0
  268. package/src/vite-plugins/icons.ts +58 -0
  269. package/src/vite-plugins/index.ts +22 -0
  270. package/src/vite-plugins/native.ts +74 -0
  271. package/src/vite-plugins/react-compiler.ts +70 -0
  272. package/src/vite-plugins/react-dom-prebundle.ts +14 -0
  273. package/src/vite-plugins/resource-init-module.ts +54 -0
  274. package/src/vite-plugins/resource-shared.ts +27 -0
  275. package/src/vite-plugins/resources.ts +272 -0
  276. package/src/vite-plugins/settings-worker-env.ts +25 -0
  277. package/src/vite-plugins/settings.ts +221 -0
  278. package/src/vite-plugins/undeclared-library.ts +69 -0
  279. package/src/vite-plugins/virtual-module.ts +37 -0
  280. package/src/vitest-plugin.ts +14 -0
  281. package/dist/create.d.ts +0 -55
  282. package/dist/create.d.ts.map +0 -1
  283. package/dist/create.js +0 -236
  284. package/dist/create.js.map +0 -1
  285. package/dist/dev-server.d.ts +0 -37
  286. package/dist/dev-server.d.ts.map +0 -1
  287. package/dist/dev-server.js +0 -130
  288. package/dist/dev-server.js.map +0 -1
  289. package/dist/index.d.ts +0 -4
  290. package/dist/index.d.ts.map +0 -1
  291. package/dist/index.js +0 -4
  292. package/dist/index.js.map +0 -1
  293. package/dist/mcp-client.d.ts +0 -31
  294. package/dist/mcp-client.d.ts.map +0 -1
  295. package/dist/mcp-client.js +0 -430
  296. package/dist/mcp-client.js.map +0 -1
  297. package/dist/templates.d.ts +0 -9
  298. package/dist/templates.d.ts.map +0 -1
  299. package/dist/templates.js +0 -16
  300. package/dist/templates.js.map +0 -1
  301. package/dist/vite-plugin-gtkx-assets.d.ts +0 -20
  302. package/dist/vite-plugin-gtkx-assets.d.ts.map +0 -1
  303. package/dist/vite-plugin-gtkx-assets.js +0 -57
  304. package/dist/vite-plugin-gtkx-assets.js.map +0 -1
  305. package/dist/vite-plugin-gtkx-built-url.d.ts +0 -18
  306. package/dist/vite-plugin-gtkx-built-url.d.ts.map +0 -1
  307. package/dist/vite-plugin-gtkx-built-url.js.map +0 -1
  308. package/dist/vite-plugin-gtkx-gsettings.d.ts +0 -28
  309. package/dist/vite-plugin-gtkx-gsettings.d.ts.map +0 -1
  310. package/dist/vite-plugin-gtkx-gsettings.js +0 -147
  311. package/dist/vite-plugin-gtkx-gsettings.js.map +0 -1
  312. package/dist/vite-plugin-gtkx-native.d.ts +0 -14
  313. package/dist/vite-plugin-gtkx-native.d.ts.map +0 -1
  314. package/dist/vite-plugin-gtkx-native.js +0 -53
  315. package/dist/vite-plugin-gtkx-native.js.map +0 -1
  316. package/dist/vite-plugin-gtkx-refresh.d.ts +0 -8
  317. package/dist/vite-plugin-gtkx-refresh.d.ts.map +0 -1
  318. package/dist/vite-plugin-gtkx-refresh.js +0 -37
  319. package/dist/vite-plugin-gtkx-refresh.js.map +0 -1
  320. package/dist/vite-plugin-swc-ssr-refresh.d.ts +0 -8
  321. package/dist/vite-plugin-swc-ssr-refresh.d.ts.map +0 -1
  322. package/dist/vite-plugin-swc-ssr-refresh.js +0 -46
  323. package/dist/vite-plugin-swc-ssr-refresh.js.map +0 -1
  324. package/src/cli.tsx +0 -154
  325. package/src/create.ts +0 -326
  326. package/src/dev-server.tsx +0 -162
  327. package/src/index.ts +0 -3
  328. package/src/mcp-client.ts +0 -518
  329. package/src/templates.ts +0 -26
  330. package/src/vite-plugin-gtkx-assets.ts +0 -69
  331. package/src/vite-plugin-gtkx-gsettings.ts +0 -168
  332. package/src/vite-plugin-gtkx-native.ts +0 -64
  333. package/src/vite-plugin-gtkx-refresh.ts +0 -54
  334. package/src/vite-plugin-swc-ssr-refresh.ts +0 -61
  335. package/templates/claude/EXAMPLES.md.ejs +0 -744
  336. package/templates/claude/SKILL.md.ejs +0 -93
  337. package/templates/claude/WIDGETS.md.ejs +0 -820
  338. package/templates/config/vitest.config.ts.ejs +0 -11
  339. package/templates/gitignore.ejs +0 -4
  340. package/templates/package.json.ejs +0 -16
  341. package/templates/src/app.tsx.ejs +0 -32
  342. package/templates/src/dev.tsx.ejs +0 -5
  343. package/templates/src/gtkx-env.d.ts.ejs +0 -1
  344. package/templates/src/index.tsx.ejs +0 -5
  345. package/templates/tests/app.test.tsx.ejs +0 -16
  346. package/templates/tsconfig.json.ejs +0 -14
@@ -0,0 +1 @@
1
+ {"version":3,"file":"native.js","sourceRoot":"","sources":["../../src/vite-plugins/native.ts"],"names":[],"mappings":"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","sourcesContent":["import { existsSync, readFileSync } from \"node:fs\";\nimport { createRequire } from \"node:module\";\nimport { arch, platform } from \"node:os\";\nimport { dirname, join } from \"node:path\";\nimport type { Plugin } from \"vite\";\n\nconst EMITTED_BINDING_SPECIFIER = \"./gtkx.node\";\n\nfunction resolveBinaryPath(projectRequire: ReturnType<typeof createRequire>, currentArch: string): string {\n const nativeRoot = dirname(projectRequire.resolve(\"@gtkx/native/package.json\"));\n const localBinary = join(nativeRoot, `native.linux-${currentArch}-gnu.node`);\n return existsSync(localBinary) ? localBinary : projectRequire.resolve(`@gtkx/native-linux-${currentArch}-gnu`);\n}\n\nfunction resolvePlatformBinary(projectRequire: ReturnType<typeof createRequire>): Buffer {\n const currentPlatform = platform();\n const currentArch = arch();\n\n if (currentPlatform !== \"linux\") {\n throw new Error(`Unsupported build platform: ${currentPlatform}, only Linux is supported`);\n }\n\n if (currentArch !== \"x64\" && currentArch !== \"arm64\") {\n throw new Error(`Unsupported build architecture: ${currentArch}, only x64 and arm64 are supported`);\n }\n\n return readFileSync(resolveBinaryPath(projectRequire, currentArch));\n}\n\nfunction rewriteLoader(code: string): string {\n const idents: string[] = [];\n for (const match of code.matchAll(/export\\s*\\{\\s*([A-Za-z0-9_$]+)\\s*\\}/g)) {\n const ident = match[1];\n if (ident) {\n idents.push(ident);\n }\n }\n const bindings = idents.join(\", \");\n\n return [\n `import { createRequire as __gtkxCreateRequire } from \"node:module\";`,\n `const __gtkxNative = __gtkxCreateRequire(import.meta.url)(${JSON.stringify(EMITTED_BINDING_SPECIFIER)});`,\n `const { ${bindings} } = __gtkxNative;`,\n `export { ${bindings} };`,\n ].join(\"\\n\");\n}\n\nexport function gtkxNative(root: string): Plugin {\n const projectRequire = createRequire(join(root, \"package.json\"));\n let cachedLoaderPath: string | undefined;\n\n const loaderPath = (): string => {\n cachedLoaderPath ??= join(dirname(projectRequire.resolve(\"@gtkx/native/package.json\")), \"index.js\");\n return cachedLoaderPath;\n };\n\n return {\n name: \"gtkx:native\",\n enforce: \"pre\",\n apply: \"build\",\n\n buildStart() {\n this.emitFile({ type: \"asset\", fileName: \"gtkx.node\", source: resolvePlatformBinary(projectRequire) });\n },\n\n resolveId(id) {\n return id === EMITTED_BINDING_SPECIFIER ? { id, external: true } : null;\n },\n\n transform(code, id) {\n return id.replace(/\\?.*$/, \"\") === loaderPath() ? rewriteLoader(code) : null;\n },\n };\n}\n"]}
@@ -0,0 +1,4 @@
1
+ import { type ConfigLoader } from "@gtkx/config/internal";
2
+ import type { Plugin } from "vite";
3
+ export declare function gtkxReactCompiler(loadConfig?: ConfigLoader): Plugin;
4
+ //# sourceMappingURL=react-compiler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"react-compiler.d.ts","sourceRoot":"","sources":["../../src/vite-plugins/react-compiler.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,YAAY,EAAsB,MAAM,uBAAuB,CAAC;AAE9E,OAAO,KAAK,EAAE,MAAM,EAA8B,MAAM,MAAM,CAAC;AAsB/D,wBAAgB,iBAAiB,CAAC,UAAU,GAAE,YAAmC,GAAG,MAAM,CAyCzF"}
@@ -0,0 +1,56 @@
1
+ /// <reference path="../babel-modules.d.ts" />
2
+ import { transformAsync } from "@babel/core";
3
+ import babelPresetTypescriptNs from "@babel/preset-typescript";
4
+ import { createConfigLoader } from "@gtkx/config/internal";
5
+ import babelPluginReactCompilerNs from "babel-plugin-react-compiler";
6
+ const babelPresetTypescript = babelPresetTypescriptNs.default ?? babelPresetTypescriptNs;
7
+ const babelPluginReactCompiler = babelPluginReactCompilerNs.default ?? babelPluginReactCompilerNs;
8
+ const SOURCE_EXTENSION = /\.[jt]sx?$/;
9
+ const TYPESCRIPT_EXTENSION = /\.tsx?$/;
10
+ const TYPE_ONLY_EXTENSION = /\.ts$/;
11
+ const NODE_MODULES = /(?:^|\/)node_modules\//;
12
+ const isProjectSource = (root, id) => {
13
+ if (!SOURCE_EXTENSION.test(id))
14
+ return false;
15
+ if (NODE_MODULES.test(id))
16
+ return false;
17
+ if (root !== "" && !id.startsWith(`${root}/`))
18
+ return false;
19
+ return true;
20
+ };
21
+ export function gtkxReactCompiler(loadConfig = createConfigLoader()) {
22
+ const state = {
23
+ root: "",
24
+ options: null,
25
+ };
26
+ return {
27
+ name: "gtkx:react-compiler",
28
+ enforce: "pre",
29
+ async config(config) {
30
+ state.options = (await loadConfig(config.root ?? process.cwd())).reactCompiler;
31
+ },
32
+ configResolved(config) {
33
+ state.root = config.root;
34
+ },
35
+ async transform(code, id) {
36
+ const options = state.options;
37
+ if (options === null || !isProjectSource(state.root, id)) {
38
+ return;
39
+ }
40
+ const result = await transformAsync(code, {
41
+ filename: id,
42
+ babelrc: false,
43
+ configFile: false,
44
+ sourceMaps: true,
45
+ parserOpts: { plugins: TYPE_ONLY_EXTENSION.test(id) ? [] : ["jsx"] },
46
+ presets: TYPESCRIPT_EXTENSION.test(id) ? [babelPresetTypescript] : [],
47
+ plugins: [[babelPluginReactCompiler, options]],
48
+ });
49
+ if (!result?.code) {
50
+ return;
51
+ }
52
+ return result.map == null ? { code: result.code } : { code: result.code, map: JSON.stringify(result.map) };
53
+ },
54
+ };
55
+ }
56
+ //# sourceMappingURL=react-compiler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"react-compiler.js","sourceRoot":"","sources":["../../src/vite-plugins/react-compiler.ts"],"names":[],"mappings":"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","sourcesContent":["/// <reference path=\"../babel-modules.d.ts\" />\nimport { transformAsync } from \"@babel/core\";\nimport babelPresetTypescriptNs from \"@babel/preset-typescript\";\nimport type { ResolvedReactCompilerOptions } from \"@gtkx/config\";\nimport { type ConfigLoader, createConfigLoader } from \"@gtkx/config/internal\";\nimport babelPluginReactCompilerNs from \"babel-plugin-react-compiler\";\nimport type { Plugin, ResolvedConfig, UserConfig } from \"vite\";\n\nconst babelPresetTypescript = babelPresetTypescriptNs.default ?? babelPresetTypescriptNs;\nconst babelPluginReactCompiler = babelPluginReactCompilerNs.default ?? babelPluginReactCompilerNs;\n\nconst SOURCE_EXTENSION = /\\.[jt]sx?$/;\nconst TYPESCRIPT_EXTENSION = /\\.tsx?$/;\nconst TYPE_ONLY_EXTENSION = /\\.ts$/;\nconst NODE_MODULES = /(?:^|\\/)node_modules\\//;\n\ntype ReactCompilerState = {\n root: string;\n options: ResolvedReactCompilerOptions | null;\n};\n\nconst isProjectSource = (root: string, id: string): boolean => {\n if (!SOURCE_EXTENSION.test(id)) return false;\n if (NODE_MODULES.test(id)) return false;\n if (root !== \"\" && !id.startsWith(`${root}/`)) return false;\n return true;\n};\n\nexport function gtkxReactCompiler(loadConfig: ConfigLoader = createConfigLoader()): Plugin {\n const state: ReactCompilerState = {\n root: \"\",\n options: null,\n };\n\n return {\n name: \"gtkx:react-compiler\",\n enforce: \"pre\",\n\n async config(config: UserConfig) {\n state.options = (await loadConfig(config.root ?? process.cwd())).reactCompiler;\n },\n\n configResolved(config: ResolvedConfig) {\n state.root = config.root;\n },\n\n async transform(code, id) {\n const options = state.options;\n if (options === null || !isProjectSource(state.root, id)) {\n return;\n }\n\n const result = await transformAsync(code, {\n filename: id,\n babelrc: false,\n configFile: false,\n sourceMaps: true,\n parserOpts: { plugins: TYPE_ONLY_EXTENSION.test(id) ? [] : [\"jsx\"] },\n presets: TYPESCRIPT_EXTENSION.test(id) ? [babelPresetTypescript] : [],\n plugins: [[babelPluginReactCompiler, options]],\n });\n\n if (!result?.code) {\n return;\n }\n\n return result.map == null ? { code: result.code } : { code: result.code, map: JSON.stringify(result.map) };\n },\n };\n}\n"]}
@@ -0,0 +1,3 @@
1
+ import type { Plugin } from "vite";
2
+ export declare const gtkxReactDomPrebundle: () => Plugin;
3
+ //# sourceMappingURL=react-dom-prebundle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"react-dom-prebundle.d.ts","sourceRoot":"","sources":["../../src/vite-plugins/react-dom-prebundle.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAEnC,eAAO,MAAM,qBAAqB,QAAO,MAWvC,CAAC"}
@@ -0,0 +1,11 @@
1
+ export const gtkxReactDomPrebundle = () => ({
2
+ name: "gtkx:react-dom-prebundle",
3
+ enforce: "post",
4
+ config(config) {
5
+ config.optimizeDeps ??= {};
6
+ if (config.optimizeDeps.include) {
7
+ config.optimizeDeps.include = config.optimizeDeps.include.filter((dep) => dep !== "react-dom" && !dep.startsWith("react-dom/"));
8
+ }
9
+ },
10
+ });
11
+ //# sourceMappingURL=react-dom-prebundle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"react-dom-prebundle.js","sourceRoot":"","sources":["../../src/vite-plugins/react-dom-prebundle.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,qBAAqB,GAAG,GAAW,EAAE,CAAC,CAAC;IAChD,IAAI,EAAE,0BAA0B;IAChC,OAAO,EAAE,MAAM;IACf,MAAM,CAAC,MAAM;QACT,MAAM,CAAC,YAAY,KAAK,EAAE,CAAC;QAC3B,IAAI,MAAM,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;YAC9B,MAAM,CAAC,YAAY,CAAC,OAAO,GAAG,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,MAAM,CAC5D,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,KAAK,WAAW,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,YAAY,CAAC,CAChE,CAAC;QACN,CAAC;IACL,CAAC;CACJ,CAAC,CAAC","sourcesContent":["import type { Plugin } from \"vite\";\n\nexport const gtkxReactDomPrebundle = (): Plugin => ({\n name: \"gtkx:react-dom-prebundle\",\n enforce: \"post\",\n config(config) {\n config.optimizeDeps ??= {};\n if (config.optimizeDeps.include) {\n config.optimizeDeps.include = config.optimizeDeps.include.filter(\n (dep) => dep !== \"react-dom\" && !dep.startsWith(\"react-dom/\"),\n );\n }\n },\n});\n"]}
@@ -0,0 +1,5 @@
1
+ export declare const renderInitModule: (options: {
2
+ isBuild: boolean;
3
+ devBundlePath: string;
4
+ }) => string;
5
+ //# sourceMappingURL=resource-init-module.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resource-init-module.d.ts","sourceRoot":"","sources":["../../src/vite-plugins/resource-init-module.ts"],"names":[],"mappings":"AAoDA,eAAO,MAAM,gBAAgB,YAAa;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,aAAa,EAAE,MAAM,CAAA;CAAE,KAAG,MACE,CAAC"}
@@ -0,0 +1,50 @@
1
+ import { BUNDLE_FILENAME } from "./resource-shared.js";
2
+ const buildInitModuleSource = () => [
3
+ `import { dirname, join } from "node:path";`,
4
+ `import { fileURLToPath } from "node:url";`,
5
+ `import { resourceLoad, resourcesRegister } from "@gtkx/gi/gio";`,
6
+ ``,
7
+ `const bundleDir = dirname(fileURLToPath(import.meta.url));`,
8
+ `const resource = resourceLoad(join(bundleDir, ${JSON.stringify(BUNDLE_FILENAME)}));`,
9
+ `resourcesRegister(resource);`,
10
+ ``,
11
+ `export function ensureRegistered() {}`,
12
+ `export function __refresh() {}`,
13
+ ].join("\n");
14
+ const devInitModuleSource = (bundlePath) => {
15
+ const bundlePathLiteral = JSON.stringify(bundlePath);
16
+ return [
17
+ `import { existsSync, statSync } from "node:fs";`,
18
+ `import { resourceLoad, resourcesRegister, resourcesUnregister } from "@gtkx/gi/gio";`,
19
+ ``,
20
+ `let current = null;`,
21
+ `let lastSig = "";`,
22
+ ``,
23
+ `function register() {`,
24
+ ` const next = resourceLoad(${bundlePathLiteral});`,
25
+ ` if (current) resourcesUnregister(current);`,
26
+ ` resourcesRegister(next);`,
27
+ ` current = next;`,
28
+ `}`,
29
+ ``,
30
+ `export function ensureRegistered() {`,
31
+ ` if (!existsSync(${bundlePathLiteral})) return;`,
32
+ ` const { size, mtimeMs } = statSync(${bundlePathLiteral});`,
33
+ ` const sig = size + ":" + mtimeMs;`,
34
+ ` if (sig === lastSig) return;`,
35
+ ` register();`,
36
+ ` lastSig = sig;`,
37
+ `}`,
38
+ ``,
39
+ `ensureRegistered();`,
40
+ ``,
41
+ `export function __refresh() {`,
42
+ ` if (!existsSync(${bundlePathLiteral})) return;`,
43
+ ` register();`,
44
+ ` const { size, mtimeMs } = statSync(${bundlePathLiteral});`,
45
+ ` lastSig = size + ":" + mtimeMs;`,
46
+ `}`,
47
+ ].join("\n");
48
+ };
49
+ export const renderInitModule = (options) => options.isBuild ? buildInitModuleSource() : devInitModuleSource(options.devBundlePath);
50
+ //# sourceMappingURL=resource-init-module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resource-init-module.js","sourceRoot":"","sources":["../../src/vite-plugins/resource-init-module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,MAAM,qBAAqB,GAAG,GAAW,EAAE,CACvC;IACI,4CAA4C;IAC5C,2CAA2C;IAC3C,iEAAiE;IACjE,EAAE;IACF,4DAA4D;IAC5D,iDAAiD,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,KAAK;IACrF,8BAA8B;IAC9B,EAAE;IACF,uCAAuC;IACvC,gCAAgC;CACnC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAEjB,MAAM,mBAAmB,GAAG,CAAC,UAAkB,EAAU,EAAE;IACvD,MAAM,iBAAiB,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;IACrD,OAAO;QACH,iDAAiD;QACjD,sFAAsF;QACtF,EAAE;QACF,qBAAqB;QACrB,mBAAmB;QACnB,EAAE;QACF,uBAAuB;QACvB,iCAAiC,iBAAiB,IAAI;QACtD,gDAAgD;QAChD,8BAA8B;QAC9B,qBAAqB;QACrB,GAAG;QACH,EAAE;QACF,sCAAsC;QACtC,uBAAuB,iBAAiB,YAAY;QACpD,0CAA0C,iBAAiB,IAAI;QAC/D,uCAAuC;QACvC,kCAAkC;QAClC,iBAAiB;QACjB,oBAAoB;QACpB,GAAG;QACH,EAAE;QACF,qBAAqB;QACrB,EAAE;QACF,+BAA+B;QAC/B,uBAAuB,iBAAiB,YAAY;QACpD,iBAAiB;QACjB,0CAA0C,iBAAiB,IAAI;QAC/D,qCAAqC;QACrC,GAAG;KACN,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACjB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,OAAoD,EAAU,EAAE,CAC7F,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,qBAAqB,EAAE,CAAC,CAAC,CAAC,mBAAmB,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC","sourcesContent":["import { BUNDLE_FILENAME } from \"./resource-shared.js\";\n\nconst buildInitModuleSource = (): string =>\n [\n `import { dirname, join } from \"node:path\";`,\n `import { fileURLToPath } from \"node:url\";`,\n `import { resourceLoad, resourcesRegister } from \"@gtkx/gi/gio\";`,\n ``,\n `const bundleDir = dirname(fileURLToPath(import.meta.url));`,\n `const resource = resourceLoad(join(bundleDir, ${JSON.stringify(BUNDLE_FILENAME)}));`,\n `resourcesRegister(resource);`,\n ``,\n `export function ensureRegistered() {}`,\n `export function __refresh() {}`,\n ].join(\"\\n\");\n\nconst devInitModuleSource = (bundlePath: string): string => {\n const bundlePathLiteral = JSON.stringify(bundlePath);\n return [\n `import { existsSync, statSync } from \"node:fs\";`,\n `import { resourceLoad, resourcesRegister, resourcesUnregister } from \"@gtkx/gi/gio\";`,\n ``,\n `let current = null;`,\n `let lastSig = \"\";`,\n ``,\n `function register() {`,\n ` const next = resourceLoad(${bundlePathLiteral});`,\n ` if (current) resourcesUnregister(current);`,\n ` resourcesRegister(next);`,\n ` current = next;`,\n `}`,\n ``,\n `export function ensureRegistered() {`,\n ` if (!existsSync(${bundlePathLiteral})) return;`,\n ` const { size, mtimeMs } = statSync(${bundlePathLiteral});`,\n ` const sig = size + \":\" + mtimeMs;`,\n ` if (sig === lastSig) return;`,\n ` register();`,\n ` lastSig = sig;`,\n `}`,\n ``,\n `ensureRegistered();`,\n ``,\n `export function __refresh() {`,\n ` if (!existsSync(${bundlePathLiteral})) return;`,\n ` register();`,\n ` const { size, mtimeMs } = statSync(${bundlePathLiteral});`,\n ` lastSig = size + \":\" + mtimeMs;`,\n `}`,\n ].join(\"\\n\");\n};\n\nexport const renderInitModule = (options: { isBuild: boolean; devBundlePath: string }): string =>\n options.isBuild ? buildInitModuleSource() : devInitModuleSource(options.devBundlePath);\n"]}
@@ -0,0 +1,6 @@
1
+ export declare const VIRTUAL_INIT = "\0gtkx-resources-init";
2
+ export declare const BUNDLE_FILENAME = "gtkx.gresource";
3
+ export declare const REL_SEPARATOR = "\0rel=";
4
+ export declare const isVirtual: (id: string) => boolean, toVirtualId: (realId: string) => string, fromVirtualId: (id: string) => string;
5
+ export declare const escapeXml: (value: string) => string;
6
+ //# sourceMappingURL=resource-shared.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resource-shared.d.ts","sourceRoot":"","sources":["../../src/vite-plugins/resource-shared.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,YAAY,0BAA0B,CAAC;AAEpD,eAAO,MAAM,eAAe,mBAAmB,CAAC;AAEhD,eAAO,MAAM,aAAa,WAAW,CAAC;AAEtC,eAAO,MAAQ,SAAS,2BAAE,WAAW,8BAAE,aAAa,wBAA2C,CAAC;AAEhG,eAAO,MAAM,SAAS,UAAW,MAAM,KAAG,MAcpC,CAAC"}
@@ -0,0 +1,21 @@
1
+ import { createVirtualNamespace } from "./virtual-module.js";
2
+ const VIRTUAL_PREFIX = "\0gtkx-resources:";
3
+ export const VIRTUAL_INIT = "\0gtkx-resources-init";
4
+ export const BUNDLE_FILENAME = "gtkx.gresource";
5
+ export const REL_SEPARATOR = "\0rel=";
6
+ export const { isVirtual, toVirtualId, fromVirtualId } = createVirtualNamespace(VIRTUAL_PREFIX);
7
+ export const escapeXml = (value) => value.replaceAll(/[<>&"']/g, (char) => {
8
+ switch (char) {
9
+ case "<":
10
+ return "&lt;";
11
+ case ">":
12
+ return "&gt;";
13
+ case "&":
14
+ return "&amp;";
15
+ case '"':
16
+ return "&quot;";
17
+ default:
18
+ return "&apos;";
19
+ }
20
+ });
21
+ //# sourceMappingURL=resource-shared.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resource-shared.js","sourceRoot":"","sources":["../../src/vite-plugins/resource-shared.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAE7D,MAAM,cAAc,GAAG,mBAAmB,CAAC;AAE3C,MAAM,CAAC,MAAM,YAAY,GAAG,uBAAuB,CAAC;AAEpD,MAAM,CAAC,MAAM,eAAe,GAAG,gBAAgB,CAAC;AAEhD,MAAM,CAAC,MAAM,aAAa,GAAG,QAAQ,CAAC;AAEtC,MAAM,CAAC,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,aAAa,EAAE,GAAG,sBAAsB,CAAC,cAAc,CAAC,CAAC;AAEhG,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,KAAa,EAAU,EAAE,CAC/C,KAAK,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC,IAAI,EAAE,EAAE;IAClC,QAAQ,IAAI,EAAE,CAAC;QACX,KAAK,GAAG;YACJ,OAAO,MAAM,CAAC;QAClB,KAAK,GAAG;YACJ,OAAO,MAAM,CAAC;QAClB,KAAK,GAAG;YACJ,OAAO,OAAO,CAAC;QACnB,KAAK,GAAG;YACJ,OAAO,QAAQ,CAAC;QACpB;YACI,OAAO,QAAQ,CAAC;IACxB,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["import { createVirtualNamespace } from \"./virtual-module.js\";\n\nconst VIRTUAL_PREFIX = \"\\0gtkx-resources:\";\n\nexport const VIRTUAL_INIT = \"\\0gtkx-resources-init\";\n\nexport const BUNDLE_FILENAME = \"gtkx.gresource\";\n\nexport const REL_SEPARATOR = \"\\0rel=\";\n\nexport const { isVirtual, toVirtualId, fromVirtualId } = createVirtualNamespace(VIRTUAL_PREFIX);\n\nexport const escapeXml = (value: string): string =>\n value.replaceAll(/[<>&\"']/g, (char) => {\n switch (char) {\n case \"<\":\n return \"&lt;\";\n case \">\":\n return \"&gt;\";\n case \"&\":\n return \"&amp;\";\n case '\"':\n return \"&quot;\";\n default:\n return \"&apos;\";\n }\n });\n"]}
@@ -0,0 +1,4 @@
1
+ import { type ConfigLoader } from "@gtkx/config/internal";
2
+ import type { Plugin } from "vite";
3
+ export declare function gtkxResources(loadConfig?: ConfigLoader): Plugin;
4
+ //# sourceMappingURL=resources.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resources.d.ts","sourceRoot":"","sources":["../../src/vite-plugins/resources.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,YAAY,EAAsB,MAAM,uBAAuB,CAAC;AAE9E,OAAO,KAAK,EAAE,MAAM,EAA6C,MAAM,MAAM,CAAC;AA8M9E,wBAAgB,aAAa,CAAC,UAAU,GAAE,YAAmC,GAAG,MAAM,CA2DrF"}
@@ -0,0 +1,220 @@
1
+ import { execFileSync } from "node:child_process";
2
+ import { copyFileSync, mkdirSync, mkdtempSync, readFileSync, writeFileSync } from "node:fs";
3
+ import { tmpdir } from "node:os";
4
+ import { dirname, join } from "node:path";
5
+ import { createConfigLoader } from "@gtkx/config/internal";
6
+ import { error, formatChildProcessError, info } from "@gtkx/utils";
7
+ import { DATA_IMPORT_PREFIX, resolveDataDir } from "../internal/data-dir.js";
8
+ import { listFilesRecursive } from "../internal/list-files.js";
9
+ import { resolveCliTool } from "../internal/resolve-cli-tool.js";
10
+ import { withStagingDir } from "../internal/staging-dir.js";
11
+ import { ASSET_PATH_RE, ASSET_RE } from "./asset-extensions.js";
12
+ import { renderInitModule } from "./resource-init-module.js";
13
+ import { BUNDLE_FILENAME, escapeXml, fromVirtualId, isVirtual, REL_SEPARATOR, toVirtualId, VIRTUAL_INIT, } from "./resource-shared.js";
14
+ const DATA_PREFIX = `${DATA_IMPORT_PREFIX}/`;
15
+ const RESOURCE_COMPILER = "glib-compile-resources";
16
+ const MANIFEST_PREFIX = "/";
17
+ const deriveResourcePrefix = (applicationId) => `/${applicationId.replaceAll(".", "/")}`;
18
+ const stripQuery = (source) => {
19
+ const queryIndex = source.indexOf("?");
20
+ return queryIndex === -1 ? source : source.slice(0, queryIndex);
21
+ };
22
+ const compileBundle = (state, outputPath) => withStagingDir("resources", (dir) => {
23
+ const manifest = stageBundle(dir, state.entries);
24
+ return runCompiler(dir, manifest, outputPath);
25
+ });
26
+ const stageBundle = (dir, entries) => {
27
+ const fileNodes = [];
28
+ for (const entry of entries.values()) {
29
+ const targetPath = join(dir, entry.stagedRelPath);
30
+ mkdirSync(dirname(targetPath), { recursive: true });
31
+ copyFileSync(entry.sourcePath, targetPath);
32
+ fileNodes.push(` <file>${escapeXml(entry.stagedRelPath)}</file>`);
33
+ }
34
+ const prefix = escapeXml(MANIFEST_PREFIX);
35
+ const manifest = join(dir, "gtkx.gresource.xml");
36
+ const xml = [
37
+ `<?xml version="1.0" encoding="UTF-8"?>`,
38
+ `<gresources>`,
39
+ ` <gresource prefix="${prefix}">`,
40
+ ...fileNodes,
41
+ ` </gresource>`,
42
+ `</gresources>`,
43
+ ``,
44
+ ].join("\n");
45
+ writeFileSync(manifest, xml);
46
+ return manifest;
47
+ };
48
+ const runCompiler = (sourceDir, manifest, outputPath) => {
49
+ try {
50
+ execFileSync(resolveCliTool(RESOURCE_COMPILER), [
51
+ `--sourcedir=${sourceDir}`,
52
+ `--target=${outputPath}`,
53
+ manifest,
54
+ ]);
55
+ }
56
+ catch (error) {
57
+ const details = formatChildProcessError(error);
58
+ throw new Error(`${RESOURCE_COMPILER} failed${details ? `:\n${details}` : ""}`, { cause: error });
59
+ }
60
+ return readFileSync(outputPath);
61
+ };
62
+ const ensureStagingDir = (state) => {
63
+ if (!state.devStagingDir) {
64
+ state.devStagingDir = mkdtempSync(join(tmpdir(), "gtkx-resources-dev-"));
65
+ state.devBundlePath = join(state.devStagingDir, BUNDLE_FILENAME);
66
+ }
67
+ };
68
+ const entriesSignature = (state) => [...state.entries.keys()].sort((a, b) => a.localeCompare(b)).join("\0");
69
+ const compileDevBundle = (state) => {
70
+ ensureStagingDir(state);
71
+ if (state.entries.size === 0)
72
+ return;
73
+ compileBundle(state, state.devBundlePath);
74
+ state.compiledSignature = entriesSignature(state);
75
+ };
76
+ const reregisterDevBundle = async (state) => {
77
+ const server = state.server;
78
+ if (!server)
79
+ return;
80
+ const mod = (await server.ssrLoadModule(VIRTUAL_INIT));
81
+ mod.__refresh?.();
82
+ };
83
+ const scanDataAssets = (dataDir) => listFilesRecursive(dataDir, (name) => ASSET_RE.test(name));
84
+ const primeDevBundle = (state) => {
85
+ if (state.dataDir === null)
86
+ return;
87
+ for (const { absPath, rel } of scanDataAssets(state.dataDir)) {
88
+ registerEntry(state, absPath, rel);
89
+ }
90
+ compileDevBundle(state);
91
+ };
92
+ const registerDevAsset = (state) => {
93
+ if (entriesSignature(state) !== state.compiledSignature) {
94
+ compileDevBundle(state);
95
+ }
96
+ };
97
+ const registerEntry = (state, absPath, rel) => {
98
+ const existing = state.entries.get(absPath);
99
+ if (existing)
100
+ return existing;
101
+ const resourcePath = `${state.prefix}/${rel}`;
102
+ const entry = {
103
+ sourcePath: absPath,
104
+ stagedRelPath: resourcePath.replace(/^\/+/, ""),
105
+ resourcePath,
106
+ };
107
+ state.entries.set(absPath, entry);
108
+ state.sourcePaths.add(absPath);
109
+ return entry;
110
+ };
111
+ const isTrackedSource = (state, file) => state.sourcePaths.has(file);
112
+ const loadAssetModule = (state, virtualId) => {
113
+ const rest = fromVirtualId(virtualId);
114
+ const separatorIndex = rest.indexOf(REL_SEPARATOR);
115
+ const absPath = rest.slice(0, separatorIndex);
116
+ const rel = rest.slice(separatorIndex + REL_SEPARATOR.length);
117
+ const entry = registerEntry(state, absPath, rel);
118
+ const uri = `resource://${entry.resourcePath}`;
119
+ if (!state.isBuild) {
120
+ registerDevAsset(state);
121
+ }
122
+ return [
123
+ `import { ensureRegistered } from ${JSON.stringify(VIRTUAL_INIT)};`,
124
+ `ensureRegistered();`,
125
+ `export default ${JSON.stringify(uri)};`,
126
+ `export const path = ${JSON.stringify(entry.resourcePath)};`,
127
+ ].join("\n");
128
+ };
129
+ const emitBuildBundle = (ctx, state) => {
130
+ if (!state.isBuild || state.entries.size === 0)
131
+ return;
132
+ const compiled = withStagingDir("resources-out", (outDir) => compileBundle(state, join(outDir, BUNDLE_FILENAME)));
133
+ ctx.emitFile({ type: "asset", fileName: BUNDLE_FILENAME, source: compiled });
134
+ info(`Compiled ${state.entries.size} resource(s) into ${BUNDLE_FILENAME}`);
135
+ };
136
+ const refreshDevRegistration = async (state) => {
137
+ compileDevBundle(state);
138
+ try {
139
+ await reregisterDevBundle(state);
140
+ }
141
+ catch (cause) {
142
+ error("Failed to refresh GResource bundle:", cause);
143
+ }
144
+ };
145
+ const resolveResourceConfig = async (state, config, loadConfig) => {
146
+ const { applicationId } = await loadConfig(config.root ?? process.cwd());
147
+ state.prefix = deriveResourcePrefix(applicationId);
148
+ return {
149
+ assetsInclude: [ASSET_RE],
150
+ };
151
+ };
152
+ const attachResourceWatcher = (state, server) => {
153
+ state.server = server;
154
+ const onFileEvent = (file) => {
155
+ if (!isTrackedSource(state, file))
156
+ return;
157
+ refreshDevRegistration(state).catch((cause) => {
158
+ error("GResource refresh failed:", cause);
159
+ });
160
+ };
161
+ server.watcher.on("change", onFileEvent);
162
+ server.watcher.on("add", onFileEvent);
163
+ };
164
+ export function gtkxResources(loadConfig = createConfigLoader()) {
165
+ const state = {
166
+ prefix: "",
167
+ isBuild: false,
168
+ entries: new Map(),
169
+ sourcePaths: new Set(),
170
+ devStagingDir: null,
171
+ devBundlePath: "",
172
+ server: null,
173
+ compiledSignature: "",
174
+ dataDir: null,
175
+ };
176
+ return {
177
+ name: "gtkx:resources",
178
+ enforce: "pre",
179
+ config(config) {
180
+ return resolveResourceConfig(state, config, loadConfig);
181
+ },
182
+ configResolved(config) {
183
+ state.isBuild = config.command === "build";
184
+ if (!state.isBuild) {
185
+ const relativeDataDir = resolveDataDir(config.root);
186
+ state.dataDir = relativeDataDir === null ? null : join(config.root, relativeDataDir);
187
+ }
188
+ },
189
+ configureServer(server) {
190
+ attachResourceWatcher(state, server);
191
+ primeDevBundle(state);
192
+ },
193
+ async resolveId(source, importer, opts) {
194
+ if (source === VIRTUAL_INIT)
195
+ return VIRTUAL_INIT;
196
+ const clean = stripQuery(source);
197
+ if (!clean.startsWith(DATA_PREFIX) || !ASSET_PATH_RE.test(clean))
198
+ return;
199
+ const resolved = await this.resolve(clean, importer, { ...opts, skipSelf: true });
200
+ if (!resolved || resolved.external)
201
+ return;
202
+ const rel = clean.slice(DATA_PREFIX.length);
203
+ return toVirtualId(resolved.id) + REL_SEPARATOR + rel;
204
+ },
205
+ load(id) {
206
+ if (id === VIRTUAL_INIT) {
207
+ if (!state.isBuild)
208
+ ensureStagingDir(state);
209
+ return renderInitModule({ isBuild: state.isBuild, devBundlePath: state.devBundlePath });
210
+ }
211
+ if (!isVirtual(id))
212
+ return;
213
+ return loadAssetModule(state, id);
214
+ },
215
+ buildEnd() {
216
+ emitBuildBundle(this, state);
217
+ },
218
+ };
219
+ }
220
+ //# sourceMappingURL=resources.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resources.js","sourceRoot":"","sources":["../../src/vite-plugins/resources.ts"],"names":[],"mappings":"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","sourcesContent":["import { execFileSync } from \"node:child_process\";\nimport { copyFileSync, mkdirSync, mkdtempSync, readFileSync, writeFileSync } from \"node:fs\";\nimport { tmpdir } from \"node:os\";\nimport { dirname, join } from \"node:path\";\nimport { type ConfigLoader, createConfigLoader } from \"@gtkx/config/internal\";\nimport { error, formatChildProcessError, info } from \"@gtkx/utils\";\nimport type { Plugin, ResolvedConfig, UserConfig, ViteDevServer } from \"vite\";\nimport { DATA_IMPORT_PREFIX, resolveDataDir } from \"../internal/data-dir.js\";\nimport { type ListedFile, listFilesRecursive } from \"../internal/list-files.js\";\nimport { resolveCliTool } from \"../internal/resolve-cli-tool.js\";\nimport { withStagingDir } from \"../internal/staging-dir.js\";\nimport { ASSET_PATH_RE, ASSET_RE } from \"./asset-extensions.js\";\nimport { renderInitModule } from \"./resource-init-module.js\";\nimport {\n BUNDLE_FILENAME,\n escapeXml,\n fromVirtualId,\n isVirtual,\n REL_SEPARATOR,\n toVirtualId,\n VIRTUAL_INIT,\n} from \"./resource-shared.js\";\n\nconst DATA_PREFIX = `${DATA_IMPORT_PREFIX}/`;\n\nconst RESOURCE_COMPILER = \"glib-compile-resources\";\nconst MANIFEST_PREFIX = \"/\";\n\nconst deriveResourcePrefix = (applicationId: string): string => `/${applicationId.replaceAll(\".\", \"/\")}`;\n\nconst stripQuery = (source: string): string => {\n const queryIndex = source.indexOf(\"?\");\n return queryIndex === -1 ? source : source.slice(0, queryIndex);\n};\n\ntype ResourceEntry = {\n sourcePath: string;\n stagedRelPath: string;\n resourcePath: string;\n};\n\ntype PluginState = {\n prefix: string;\n isBuild: boolean;\n entries: Map<string, ResourceEntry>;\n sourcePaths: Set<string>;\n devStagingDir: string | null;\n devBundlePath: string;\n server: ViteDevServer | null;\n compiledSignature: string;\n dataDir: string | null;\n};\n\nconst compileBundle = (state: PluginState, outputPath: string): Buffer =>\n withStagingDir(\"resources\", (dir) => {\n const manifest = stageBundle(dir, state.entries);\n return runCompiler(dir, manifest, outputPath);\n });\n\nconst stageBundle = (dir: string, entries: Map<string, ResourceEntry>): string => {\n const fileNodes: string[] = [];\n for (const entry of entries.values()) {\n const targetPath = join(dir, entry.stagedRelPath);\n mkdirSync(dirname(targetPath), { recursive: true });\n copyFileSync(entry.sourcePath, targetPath);\n fileNodes.push(` <file>${escapeXml(entry.stagedRelPath)}</file>`);\n }\n const prefix = escapeXml(MANIFEST_PREFIX);\n const manifest = join(dir, \"gtkx.gresource.xml\");\n const xml = [\n `<?xml version=\"1.0\" encoding=\"UTF-8\"?>`,\n `<gresources>`,\n ` <gresource prefix=\"${prefix}\">`,\n ...fileNodes,\n ` </gresource>`,\n `</gresources>`,\n ``,\n ].join(\"\\n\");\n writeFileSync(manifest, xml);\n return manifest;\n};\n\nconst runCompiler = (sourceDir: string, manifest: string, outputPath: string): Buffer => {\n try {\n execFileSync(resolveCliTool(RESOURCE_COMPILER), [\n `--sourcedir=${sourceDir}`,\n `--target=${outputPath}`,\n manifest,\n ]);\n } catch (error) {\n const details = formatChildProcessError(error);\n throw new Error(`${RESOURCE_COMPILER} failed${details ? `:\\n${details}` : \"\"}`, { cause: error });\n }\n return readFileSync(outputPath);\n};\n\nconst ensureStagingDir = (state: PluginState): void => {\n if (!state.devStagingDir) {\n state.devStagingDir = mkdtempSync(join(tmpdir(), \"gtkx-resources-dev-\"));\n state.devBundlePath = join(state.devStagingDir, BUNDLE_FILENAME);\n }\n};\n\nconst entriesSignature = (state: PluginState): string =>\n [...state.entries.keys()].sort((a, b) => a.localeCompare(b)).join(\"\\0\");\n\nconst compileDevBundle = (state: PluginState): void => {\n ensureStagingDir(state);\n if (state.entries.size === 0) return;\n compileBundle(state, state.devBundlePath);\n state.compiledSignature = entriesSignature(state);\n};\n\nconst reregisterDevBundle = async (state: PluginState): Promise<void> => {\n const server = state.server;\n if (!server) return;\n const mod = (await server.ssrLoadModule(VIRTUAL_INIT)) as { __refresh?: () => void };\n mod.__refresh?.();\n};\n\nconst scanDataAssets = (dataDir: string): ListedFile[] => listFilesRecursive(dataDir, (name) => ASSET_RE.test(name));\n\nconst primeDevBundle = (state: PluginState): void => {\n if (state.dataDir === null) return;\n for (const { absPath, rel } of scanDataAssets(state.dataDir)) {\n registerEntry(state, absPath, rel);\n }\n compileDevBundle(state);\n};\n\nconst registerDevAsset = (state: PluginState): void => {\n if (entriesSignature(state) !== state.compiledSignature) {\n compileDevBundle(state);\n }\n};\n\nconst registerEntry = (state: PluginState, absPath: string, rel: string): ResourceEntry => {\n const existing = state.entries.get(absPath);\n if (existing) return existing;\n\n const resourcePath = `${state.prefix}/${rel}`;\n const entry: ResourceEntry = {\n sourcePath: absPath,\n stagedRelPath: resourcePath.replace(/^\\/+/, \"\"),\n resourcePath,\n };\n state.entries.set(absPath, entry);\n state.sourcePaths.add(absPath);\n return entry;\n};\n\nconst isTrackedSource = (state: PluginState, file: string): boolean => state.sourcePaths.has(file);\n\nconst loadAssetModule = (state: PluginState, virtualId: string): string => {\n const rest = fromVirtualId(virtualId);\n const separatorIndex = rest.indexOf(REL_SEPARATOR);\n const absPath = rest.slice(0, separatorIndex);\n const rel = rest.slice(separatorIndex + REL_SEPARATOR.length);\n const entry = registerEntry(state, absPath, rel);\n const uri = `resource://${entry.resourcePath}`;\n\n if (!state.isBuild) {\n registerDevAsset(state);\n }\n\n return [\n `import { ensureRegistered } from ${JSON.stringify(VIRTUAL_INIT)};`,\n `ensureRegistered();`,\n `export default ${JSON.stringify(uri)};`,\n `export const path = ${JSON.stringify(entry.resourcePath)};`,\n ].join(\"\\n\");\n};\n\nconst emitBuildBundle = (\n ctx: { emitFile: (asset: { type: \"asset\"; fileName: string; source: Buffer }) => string },\n state: PluginState,\n): void => {\n if (!state.isBuild || state.entries.size === 0) return;\n const compiled = withStagingDir(\"resources-out\", (outDir) => compileBundle(state, join(outDir, BUNDLE_FILENAME)));\n ctx.emitFile({ type: \"asset\", fileName: BUNDLE_FILENAME, source: compiled });\n info(`Compiled ${state.entries.size} resource(s) into ${BUNDLE_FILENAME}`);\n};\n\nconst refreshDevRegistration = async (state: PluginState): Promise<void> => {\n compileDevBundle(state);\n try {\n await reregisterDevBundle(state);\n } catch (cause) {\n error(\"Failed to refresh GResource bundle:\", cause);\n }\n};\n\nconst resolveResourceConfig = async (state: PluginState, config: UserConfig, loadConfig: ConfigLoader) => {\n const { applicationId } = await loadConfig(config.root ?? process.cwd());\n state.prefix = deriveResourcePrefix(applicationId);\n return {\n assetsInclude: [ASSET_RE],\n };\n};\n\nconst attachResourceWatcher = (state: PluginState, server: ViteDevServer): void => {\n state.server = server;\n const onFileEvent = (file: string): void => {\n if (!isTrackedSource(state, file)) return;\n refreshDevRegistration(state).catch((cause) => {\n error(\"GResource refresh failed:\", cause);\n });\n };\n server.watcher.on(\"change\", onFileEvent);\n server.watcher.on(\"add\", onFileEvent);\n};\n\nexport function gtkxResources(loadConfig: ConfigLoader = createConfigLoader()): Plugin {\n const state: PluginState = {\n prefix: \"\",\n isBuild: false,\n entries: new Map(),\n sourcePaths: new Set(),\n devStagingDir: null,\n devBundlePath: \"\",\n server: null,\n compiledSignature: \"\",\n dataDir: null,\n };\n\n return {\n name: \"gtkx:resources\",\n enforce: \"pre\",\n\n config(config: UserConfig) {\n return resolveResourceConfig(state, config, loadConfig);\n },\n\n configResolved(config: ResolvedConfig) {\n state.isBuild = config.command === \"build\";\n if (!state.isBuild) {\n const relativeDataDir = resolveDataDir(config.root);\n state.dataDir = relativeDataDir === null ? null : join(config.root, relativeDataDir);\n }\n },\n\n configureServer(server) {\n attachResourceWatcher(state, server);\n primeDevBundle(state);\n },\n\n async resolveId(source, importer, opts) {\n if (source === VIRTUAL_INIT) return VIRTUAL_INIT;\n const clean = stripQuery(source);\n if (!clean.startsWith(DATA_PREFIX) || !ASSET_PATH_RE.test(clean)) return;\n\n const resolved = await this.resolve(clean, importer, { ...opts, skipSelf: true });\n if (!resolved || resolved.external) return;\n\n const rel = clean.slice(DATA_PREFIX.length);\n return toVirtualId(resolved.id) + REL_SEPARATOR + rel;\n },\n\n load(id) {\n if (id === VIRTUAL_INIT) {\n if (!state.isBuild) ensureStagingDir(state);\n return renderInitModule({ isBuild: state.isBuild, devBundlePath: state.devBundlePath });\n }\n if (!isVirtual(id)) return;\n return loadAssetModule(state, id);\n },\n\n buildEnd() {\n emitBuildBundle(this, state);\n },\n };\n}\n"]}
@@ -0,0 +1,3 @@
1
+ import type { Plugin } from "vitest/config";
2
+ export declare function gtkxSettingsWorkerEnv(): Plugin;
3
+ //# sourceMappingURL=settings-worker-env.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settings-worker-env.d.ts","sourceRoot":"","sources":["../../src/vite-plugins/settings-worker-env.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAI5C,wBAAgB,qBAAqB,IAAI,MAAM,CAmB9C"}
@@ -0,0 +1,21 @@
1
+ import { resolveDataDir } from "../internal/data-dir.js";
2
+ import { prependSchemaDir, stageAndCompileProjectSchemas } from "../settings/schema.js";
3
+ export function gtkxSettingsWorkerEnv() {
4
+ return {
5
+ name: "gtkx:settings-worker-env",
6
+ enforce: "pre",
7
+ config(config) {
8
+ const root = config.root ?? process.cwd();
9
+ const dir = stageAndCompileProjectSchemas(root, resolveDataDir(root));
10
+ if (dir === null)
11
+ return;
12
+ process.env.GTKX_DEV_SCHEMA_DIR = dir;
13
+ return {
14
+ test: {
15
+ env: { GSETTINGS_SCHEMA_DIR: prependSchemaDir(dir, process.env.GSETTINGS_SCHEMA_DIR) },
16
+ },
17
+ };
18
+ },
19
+ };
20
+ }
21
+ //# sourceMappingURL=settings-worker-env.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settings-worker-env.js","sourceRoot":"","sources":["../../src/vite-plugins/settings-worker-env.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,6BAA6B,EAAE,MAAM,uBAAuB,CAAC;AAExF,MAAM,UAAU,qBAAqB;IACjC,OAAO;QACH,IAAI,EAAE,0BAA0B;QAChC,OAAO,EAAE,KAAK;QAEd,MAAM,CAAC,MAAkB;YACrB,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;YAC1C,MAAM,GAAG,GAAG,6BAA6B,CAAC,IAAI,EAAE,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC;YACtE,IAAI,GAAG,KAAK,IAAI;gBAAE,OAAO;YAEzB,OAAO,CAAC,GAAG,CAAC,mBAAmB,GAAG,GAAG,CAAC;YAEtC,OAAO;gBACH,IAAI,EAAE;oBACF,GAAG,EAAE,EAAE,oBAAoB,EAAE,gBAAgB,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,EAAE;iBACzF;aACJ,CAAC;QACN,CAAC;KACJ,CAAC;AACN,CAAC","sourcesContent":["import type { UserConfig } from \"vite\";\nimport type { Plugin } from \"vitest/config\";\nimport { resolveDataDir } from \"../internal/data-dir.js\";\nimport { prependSchemaDir, stageAndCompileProjectSchemas } from \"../settings/schema.js\";\n\nexport function gtkxSettingsWorkerEnv(): Plugin {\n return {\n name: \"gtkx:settings-worker-env\",\n enforce: \"pre\",\n\n config(config: UserConfig) {\n const root = config.root ?? process.cwd();\n const dir = stageAndCompileProjectSchemas(root, resolveDataDir(root));\n if (dir === null) return;\n\n process.env.GTKX_DEV_SCHEMA_DIR = dir;\n\n return {\n test: {\n env: { GSETTINGS_SCHEMA_DIR: prependSchemaDir(dir, process.env.GSETTINGS_SCHEMA_DIR) },\n },\n };\n },\n };\n}\n"]}
@@ -0,0 +1,3 @@
1
+ import type { Plugin } from "vite";
2
+ export declare function gtkxSettings(): Plugin;
3
+ //# sourceMappingURL=settings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settings.d.ts","sourceRoot":"","sources":["../../src/vite-plugins/settings.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAc,MAAM,EAA6B,MAAM,MAAM,CAAC;AA+J1E,wBAAgB,YAAY,IAAI,MAAM,CAyDrC"}