@gtkx/cli 0.21.0 → 1.0.0-rc.2

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 (358) hide show
  1. package/README.md +173 -0
  2. package/bin/gtkx-dev-runner.js +9 -0
  3. package/dist/builder.d.ts +5 -52
  4. package/dist/builder.d.ts.map +1 -1
  5. package/dist/builder.js +24 -57
  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 +24 -122
  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 +45 -0
  14. package/dist/codegen/freshness.js.map +1 -0
  15. package/dist/codegen/report.d.ts +4 -0
  16. package/dist/codegen/report.d.ts.map +1 -0
  17. package/dist/codegen/report.js +18 -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 +162 -0
  22. package/dist/codegen/run-codegen.js.map +1 -0
  23. package/dist/codegen/store-resolver.d.ts +24 -0
  24. package/dist/codegen/store-resolver.d.ts.map +1 -0
  25. package/dist/codegen/store-resolver.js +72 -0
  26. package/dist/codegen/store-resolver.js.map +1 -0
  27. package/dist/commands/build.d.ts +10 -0
  28. package/dist/commands/build.d.ts.map +1 -0
  29. package/dist/commands/build.js +34 -0
  30. package/dist/commands/build.js.map +1 -0
  31. package/dist/commands/codegen.d.ts +10 -0
  32. package/dist/commands/codegen.d.ts.map +1 -0
  33. package/dist/commands/codegen.js +42 -0
  34. package/dist/commands/codegen.js.map +1 -0
  35. package/dist/commands/dev.d.ts +6 -0
  36. package/dist/commands/dev.d.ts.map +1 -0
  37. package/dist/commands/dev.js +22 -0
  38. package/dist/commands/dev.js.map +1 -0
  39. package/dist/commands/docs.d.ts +20 -0
  40. package/dist/commands/docs.d.ts.map +1 -0
  41. package/dist/commands/docs.js +74 -0
  42. package/dist/commands/docs.js.map +1 -0
  43. package/dist/dev/icon-dir.d.ts +3 -0
  44. package/dist/dev/icon-dir.d.ts.map +1 -0
  45. package/dist/dev/icon-dir.js +16 -0
  46. package/dist/dev/icon-dir.js.map +1 -0
  47. package/dist/dev/refresh-tracker.d.ts +7 -0
  48. package/dist/dev/refresh-tracker.d.ts.map +1 -0
  49. package/dist/dev/refresh-tracker.js +19 -0
  50. package/dist/dev/refresh-tracker.js.map +1 -0
  51. package/dist/dev/runner-deps.d.ts +4 -0
  52. package/dist/dev/runner-deps.d.ts.map +1 -0
  53. package/dist/dev/runner-deps.js +55 -0
  54. package/dist/dev/runner-deps.js.map +1 -0
  55. package/dist/dev/runner-main.d.ts +3 -0
  56. package/dist/dev/runner-main.d.ts.map +1 -0
  57. package/dist/dev/runner-main.js +29 -0
  58. package/dist/dev/runner-main.js.map +1 -0
  59. package/dist/dev/runner.d.ts +24 -0
  60. package/dist/dev/runner.d.ts.map +1 -0
  61. package/dist/dev/runner.js +119 -0
  62. package/dist/dev/runner.js.map +1 -0
  63. package/dist/dev/schema-dir.d.ts +3 -0
  64. package/dist/dev/schema-dir.d.ts.map +1 -0
  65. package/dist/dev/schema-dir.js +12 -0
  66. package/dist/dev/schema-dir.js.map +1 -0
  67. package/dist/dev/supervisor.d.ts +18 -0
  68. package/dist/dev/supervisor.d.ts.map +1 -0
  69. package/dist/dev/supervisor.js +182 -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 +13 -0
  74. package/dist/dev/vite-dev-server.js.map +1 -0
  75. package/dist/internal/banner.d.ts +4 -0
  76. package/dist/internal/banner.d.ts.map +1 -0
  77. package/dist/internal/banner.js +9 -0
  78. package/dist/internal/banner.js.map +1 -0
  79. package/dist/internal/data-dir.d.ts +4 -0
  80. package/dist/internal/data-dir.d.ts.map +1 -0
  81. package/dist/internal/data-dir.js +52 -0
  82. package/dist/internal/data-dir.js.map +1 -0
  83. package/dist/internal/entry-arg.d.ts +20 -0
  84. package/dist/internal/entry-arg.d.ts.map +1 -0
  85. package/dist/internal/entry-arg.js +36 -0
  86. package/dist/internal/entry-arg.js.map +1 -0
  87. package/dist/internal/errors.d.ts +5 -0
  88. package/dist/internal/errors.d.ts.map +1 -0
  89. package/dist/internal/errors.js +29 -0
  90. package/dist/internal/errors.js.map +1 -0
  91. package/dist/internal/list-files.d.ts +7 -0
  92. package/dist/internal/list-files.d.ts.map +1 -0
  93. package/dist/internal/list-files.js +15 -0
  94. package/dist/internal/list-files.js.map +1 -0
  95. package/dist/internal/resolve-cli-tool.d.ts +3 -0
  96. package/dist/internal/resolve-cli-tool.d.ts.map +1 -0
  97. package/dist/internal/resolve-cli-tool.js +27 -0
  98. package/dist/internal/resolve-cli-tool.js.map +1 -0
  99. package/dist/internal/staging-dir.d.ts +4 -0
  100. package/dist/internal/staging-dir.d.ts.map +1 -0
  101. package/dist/internal/staging-dir.js +17 -0
  102. package/dist/internal/staging-dir.js.map +1 -0
  103. package/dist/internal/xdg-data-dirs.d.ts +3 -0
  104. package/dist/internal/xdg-data-dirs.d.ts.map +1 -0
  105. package/dist/internal/xdg-data-dirs.js +10 -0
  106. package/dist/internal/xdg-data-dirs.js.map +1 -0
  107. package/dist/mcp/client.d.ts +28 -0
  108. package/dist/mcp/client.d.ts.map +1 -0
  109. package/dist/mcp/client.js +182 -0
  110. package/dist/mcp/client.js.map +1 -0
  111. package/dist/mcp/handlers.d.ts +9 -0
  112. package/dist/mcp/handlers.d.ts.map +1 -0
  113. package/dist/mcp/handlers.js +147 -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 +34 -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 +23 -0
  122. package/dist/mcp/serialize-widget.js.map +1 -0
  123. package/dist/mcp/testing-loader.d.ts +5 -0
  124. package/dist/mcp/testing-loader.d.ts.map +1 -0
  125. package/dist/mcp/testing-loader.js +47 -0
  126. package/dist/mcp/testing-loader.js.map +1 -0
  127. package/dist/mcp/widget-registry.d.ts +14 -0
  128. package/dist/mcp/widget-registry.d.ts.map +1 -0
  129. package/dist/mcp/widget-registry.js +39 -0
  130. package/dist/mcp/widget-registry.js.map +1 -0
  131. package/dist/refresh-globals.d.ts +2 -0
  132. package/dist/refresh-globals.d.ts.map +1 -0
  133. package/dist/refresh-globals.js +8 -0
  134. package/dist/refresh-globals.js.map +1 -0
  135. package/dist/refresh-runtime.d.ts +10 -26
  136. package/dist/refresh-runtime.d.ts.map +1 -1
  137. package/dist/refresh-runtime.js +26 -48
  138. package/dist/refresh-runtime.js.map +1 -1
  139. package/dist/settings/compile.d.ts +3 -0
  140. package/dist/settings/compile.d.ts.map +1 -0
  141. package/dist/settings/compile.js +21 -0
  142. package/dist/settings/compile.js.map +1 -0
  143. package/dist/settings/parser.d.ts +24 -0
  144. package/dist/settings/parser.d.ts.map +1 -0
  145. package/dist/settings/parser.js +121 -0
  146. package/dist/settings/parser.js.map +1 -0
  147. package/dist/settings/render.d.ts +5 -0
  148. package/dist/settings/render.d.ts.map +1 -0
  149. package/dist/settings/render.js +122 -0
  150. package/dist/settings/render.js.map +1 -0
  151. package/dist/settings/schema.d.ts +13 -0
  152. package/dist/settings/schema.d.ts.map +1 -0
  153. package/dist/settings/schema.js +121 -0
  154. package/dist/settings/schema.js.map +1 -0
  155. package/dist/vite-plugins/asset-extensions.d.ts +5 -0
  156. package/dist/vite-plugins/asset-extensions.d.ts.map +1 -0
  157. package/dist/vite-plugins/asset-extensions.js +28 -0
  158. package/dist/vite-plugins/asset-extensions.js.map +1 -0
  159. package/dist/vite-plugins/built-url.d.ts +4 -0
  160. package/dist/vite-plugins/built-url.d.ts.map +1 -0
  161. package/dist/vite-plugins/built-url.js +36 -0
  162. package/dist/vite-plugins/built-url.js.map +1 -0
  163. package/dist/vite-plugins/css.d.ts +4 -0
  164. package/dist/vite-plugins/css.d.ts.map +1 -0
  165. package/dist/vite-plugins/css.js +38 -0
  166. package/dist/vite-plugins/css.js.map +1 -0
  167. package/dist/vite-plugins/fast-refresh/refresh-filter.d.ts +8 -0
  168. package/dist/vite-plugins/fast-refresh/refresh-filter.d.ts.map +1 -0
  169. package/dist/vite-plugins/fast-refresh/refresh-filter.js +19 -0
  170. package/dist/vite-plugins/fast-refresh/refresh-filter.js.map +1 -0
  171. package/dist/vite-plugins/fast-refresh/swc-refresh.d.ts +6 -0
  172. package/dist/vite-plugins/fast-refresh/swc-refresh.d.ts.map +1 -0
  173. package/dist/vite-plugins/fast-refresh/swc-refresh.js +70 -0
  174. package/dist/vite-plugins/fast-refresh/swc-refresh.js.map +1 -0
  175. package/dist/vite-plugins/icons.d.ts +4 -0
  176. package/dist/vite-plugins/icons.d.ts.map +1 -0
  177. package/dist/vite-plugins/icons.js +51 -0
  178. package/dist/vite-plugins/icons.js.map +1 -0
  179. package/dist/vite-plugins/index.d.ts +4 -0
  180. package/dist/vite-plugins/index.d.ts.map +1 -0
  181. package/dist/vite-plugins/index.js +22 -0
  182. package/dist/vite-plugins/index.js.map +1 -0
  183. package/dist/vite-plugins/native.d.ts +4 -0
  184. package/dist/vite-plugins/native.d.ts.map +1 -0
  185. package/dist/vite-plugins/native.js +62 -0
  186. package/dist/vite-plugins/native.js.map +1 -0
  187. package/dist/vite-plugins/react-compiler.d.ts +5 -0
  188. package/dist/vite-plugins/react-compiler.d.ts.map +1 -0
  189. package/dist/vite-plugins/react-compiler.js +62 -0
  190. package/dist/vite-plugins/react-compiler.js.map +1 -0
  191. package/dist/vite-plugins/react-dom-prebundle.d.ts +4 -0
  192. package/dist/vite-plugins/react-dom-prebundle.d.ts.map +1 -0
  193. package/dist/vite-plugins/react-dom-prebundle.js +12 -0
  194. package/dist/vite-plugins/react-dom-prebundle.js.map +1 -0
  195. package/dist/vite-plugins/resource-init-module.d.ts +6 -0
  196. package/dist/vite-plugins/resource-init-module.d.ts.map +1 -0
  197. package/dist/vite-plugins/resource-init-module.js +51 -0
  198. package/dist/vite-plugins/resource-init-module.js.map +1 -0
  199. package/dist/vite-plugins/resource-shared.d.ts +8 -0
  200. package/dist/vite-plugins/resource-shared.d.ts.map +1 -0
  201. package/dist/vite-plugins/resource-shared.js +28 -0
  202. package/dist/vite-plugins/resource-shared.js.map +1 -0
  203. package/dist/vite-plugins/resources.d.ts +5 -0
  204. package/dist/vite-plugins/resources.d.ts.map +1 -0
  205. package/dist/vite-plugins/resources.js +260 -0
  206. package/dist/vite-plugins/resources.js.map +1 -0
  207. package/dist/vite-plugins/settings-worker-env.d.ts +4 -0
  208. package/dist/vite-plugins/settings-worker-env.d.ts.map +1 -0
  209. package/dist/vite-plugins/settings-worker-env.js +23 -0
  210. package/dist/vite-plugins/settings-worker-env.js.map +1 -0
  211. package/dist/vite-plugins/settings.d.ts +4 -0
  212. package/dist/vite-plugins/settings.d.ts.map +1 -0
  213. package/dist/vite-plugins/settings.js +214 -0
  214. package/dist/vite-plugins/settings.js.map +1 -0
  215. package/dist/vite-plugins/strip-query.d.ts +3 -0
  216. package/dist/vite-plugins/strip-query.d.ts.map +1 -0
  217. package/dist/vite-plugins/strip-query.js +6 -0
  218. package/dist/vite-plugins/strip-query.js.map +1 -0
  219. package/dist/vite-plugins/undeclared-library.d.ts +4 -0
  220. package/dist/vite-plugins/undeclared-library.d.ts.map +1 -0
  221. package/dist/vite-plugins/undeclared-library.js +50 -0
  222. package/dist/vite-plugins/undeclared-library.js.map +1 -0
  223. package/dist/vite-plugins/virtual-module.d.ts +22 -0
  224. package/dist/vite-plugins/virtual-module.d.ts.map +1 -0
  225. package/dist/vite-plugins/virtual-module.js +20 -0
  226. package/dist/vite-plugins/virtual-module.js.map +1 -0
  227. package/dist/vitest-plugin.d.ts +10 -0
  228. package/dist/vitest-plugin.d.ts.map +1 -0
  229. package/dist/vitest-plugin.js +12 -0
  230. package/dist/vitest-plugin.js.map +1 -0
  231. package/env.d.ts +91 -8
  232. package/package.json +30 -38
  233. package/src/babel-modules.d.ts +11 -0
  234. package/src/builder.ts +31 -86
  235. package/src/cli.ts +42 -0
  236. package/src/codegen/freshness.ts +65 -0
  237. package/src/codegen/report.ts +28 -0
  238. package/src/codegen/run-codegen.ts +260 -0
  239. package/src/codegen/store-resolver.ts +116 -0
  240. package/src/commands/build.ts +38 -0
  241. package/src/commands/codegen.ts +49 -0
  242. package/src/commands/dev.ts +24 -0
  243. package/src/commands/docs.ts +95 -0
  244. package/src/dev/icon-dir.ts +21 -0
  245. package/src/dev/refresh-tracker.ts +25 -0
  246. package/src/dev/runner-deps.ts +65 -0
  247. package/src/dev/runner-main.ts +34 -0
  248. package/src/dev/runner.ts +185 -0
  249. package/src/dev/schema-dir.ts +16 -0
  250. package/src/dev/supervisor.ts +276 -0
  251. package/src/dev/vite-dev-server.ts +36 -0
  252. package/src/internal/banner.ts +13 -0
  253. package/src/internal/data-dir.ts +70 -0
  254. package/src/internal/entry-arg.ts +46 -0
  255. package/src/internal/errors.ts +36 -0
  256. package/src/internal/list-files.ts +23 -0
  257. package/src/internal/resolve-cli-tool.ts +37 -0
  258. package/src/internal/staging-dir.ts +19 -0
  259. package/src/internal/xdg-data-dirs.ts +13 -0
  260. package/src/mcp/client.ts +235 -0
  261. package/src/mcp/handlers.ts +213 -0
  262. package/src/mcp/index.ts +46 -0
  263. package/src/mcp/serialize-widget.ts +41 -0
  264. package/src/mcp/testing-loader.ts +73 -0
  265. package/src/mcp/widget-registry.ts +49 -0
  266. package/src/refresh-globals.ts +10 -0
  267. package/src/refresh-runtime.ts +30 -55
  268. package/src/settings/compile.ts +22 -0
  269. package/src/settings/parser.ts +193 -0
  270. package/src/settings/render.ts +167 -0
  271. package/src/settings/schema.ts +169 -0
  272. package/src/vite-plugins/asset-extensions.ts +29 -0
  273. package/src/vite-plugins/built-url.ts +50 -0
  274. package/src/vite-plugins/css.ts +53 -0
  275. package/src/vite-plugins/fast-refresh/refresh-filter.ts +26 -0
  276. package/src/vite-plugins/fast-refresh/swc-refresh.ts +92 -0
  277. package/src/vite-plugins/icons.ts +74 -0
  278. package/src/vite-plugins/index.ts +25 -0
  279. package/src/vite-plugins/native.ts +83 -0
  280. package/src/vite-plugins/react-compiler.ts +84 -0
  281. package/src/vite-plugins/react-dom-prebundle.ts +17 -0
  282. package/src/vite-plugins/resource-init-module.ts +57 -0
  283. package/src/vite-plugins/resource-shared.ts +40 -0
  284. package/src/vite-plugins/resources.ts +366 -0
  285. package/src/vite-plugins/settings-worker-env.ts +30 -0
  286. package/src/vite-plugins/settings.ts +286 -0
  287. package/src/vite-plugins/strip-query.ts +7 -0
  288. package/src/vite-plugins/undeclared-library.ts +78 -0
  289. package/src/vite-plugins/virtual-module.ts +44 -0
  290. package/src/vitest-plugin.ts +13 -0
  291. package/dist/create.d.ts +0 -55
  292. package/dist/create.d.ts.map +0 -1
  293. package/dist/create.js +0 -236
  294. package/dist/create.js.map +0 -1
  295. package/dist/dev-server.d.ts +0 -37
  296. package/dist/dev-server.d.ts.map +0 -1
  297. package/dist/dev-server.js +0 -130
  298. package/dist/dev-server.js.map +0 -1
  299. package/dist/index.d.ts +0 -4
  300. package/dist/index.d.ts.map +0 -1
  301. package/dist/index.js +0 -4
  302. package/dist/index.js.map +0 -1
  303. package/dist/mcp-client.d.ts +0 -31
  304. package/dist/mcp-client.d.ts.map +0 -1
  305. package/dist/mcp-client.js +0 -430
  306. package/dist/mcp-client.js.map +0 -1
  307. package/dist/templates.d.ts +0 -9
  308. package/dist/templates.d.ts.map +0 -1
  309. package/dist/templates.js +0 -16
  310. package/dist/templates.js.map +0 -1
  311. package/dist/vite-plugin-gtkx-assets.d.ts +0 -20
  312. package/dist/vite-plugin-gtkx-assets.d.ts.map +0 -1
  313. package/dist/vite-plugin-gtkx-assets.js +0 -57
  314. package/dist/vite-plugin-gtkx-assets.js.map +0 -1
  315. package/dist/vite-plugin-gtkx-built-url.d.ts +0 -18
  316. package/dist/vite-plugin-gtkx-built-url.d.ts.map +0 -1
  317. package/dist/vite-plugin-gtkx-built-url.js +0 -43
  318. package/dist/vite-plugin-gtkx-built-url.js.map +0 -1
  319. package/dist/vite-plugin-gtkx-gsettings.d.ts +0 -28
  320. package/dist/vite-plugin-gtkx-gsettings.d.ts.map +0 -1
  321. package/dist/vite-plugin-gtkx-gsettings.js +0 -147
  322. package/dist/vite-plugin-gtkx-gsettings.js.map +0 -1
  323. package/dist/vite-plugin-gtkx-native.d.ts +0 -14
  324. package/dist/vite-plugin-gtkx-native.d.ts.map +0 -1
  325. package/dist/vite-plugin-gtkx-native.js +0 -53
  326. package/dist/vite-plugin-gtkx-native.js.map +0 -1
  327. package/dist/vite-plugin-gtkx-refresh.d.ts +0 -8
  328. package/dist/vite-plugin-gtkx-refresh.d.ts.map +0 -1
  329. package/dist/vite-plugin-gtkx-refresh.js +0 -37
  330. package/dist/vite-plugin-gtkx-refresh.js.map +0 -1
  331. package/dist/vite-plugin-swc-ssr-refresh.d.ts +0 -8
  332. package/dist/vite-plugin-swc-ssr-refresh.d.ts.map +0 -1
  333. package/dist/vite-plugin-swc-ssr-refresh.js +0 -46
  334. package/dist/vite-plugin-swc-ssr-refresh.js.map +0 -1
  335. package/src/cli.tsx +0 -154
  336. package/src/create.ts +0 -326
  337. package/src/dev-server.tsx +0 -162
  338. package/src/index.ts +0 -3
  339. package/src/mcp-client.ts +0 -518
  340. package/src/templates.ts +0 -26
  341. package/src/vite-plugin-gtkx-assets.ts +0 -69
  342. package/src/vite-plugin-gtkx-built-url.ts +0 -48
  343. package/src/vite-plugin-gtkx-gsettings.ts +0 -168
  344. package/src/vite-plugin-gtkx-native.ts +0 -64
  345. package/src/vite-plugin-gtkx-refresh.ts +0 -54
  346. package/src/vite-plugin-swc-ssr-refresh.ts +0 -61
  347. package/templates/claude/EXAMPLES.md.ejs +0 -744
  348. package/templates/claude/SKILL.md.ejs +0 -93
  349. package/templates/claude/WIDGETS.md.ejs +0 -820
  350. package/templates/config/vitest.config.ts.ejs +0 -11
  351. package/templates/gitignore.ejs +0 -4
  352. package/templates/package.json.ejs +0 -16
  353. package/templates/src/app.tsx.ejs +0 -32
  354. package/templates/src/dev.tsx.ejs +0 -5
  355. package/templates/src/gtkx-env.d.ts.ejs +0 -1
  356. package/templates/src/index.tsx.ejs +0 -5
  357. package/templates/tests/app.test.tsx.ejs +0 -16
  358. package/templates/tsconfig.json.ejs +0 -14
@@ -0,0 +1,214 @@
1
+ import { error, errorMessage, info } from "@gtkx/utils";
2
+ import { mkdtempSync, readFileSync } from "node:fs";
3
+ import { tmpdir } from "node:os";
4
+ import { basename, join } from "node:path";
5
+ import { prependBanner } from "../internal/banner.js";
6
+ import { resolveDataDir } from "../internal/data-dir.js";
7
+ import { removeTempDir, withStagingDir } from "../internal/staging-dir.js";
8
+ import { compileSchemas } from "../settings/compile.js";
9
+ import { parseSchemaXml, SchemaParseError } from "../settings/parser.js";
10
+ import { renderRuntimeModule } from "../settings/render.js";
11
+ import { emitSchemaEnv, prependSchemaDir, SCHEMA_SUFFIX, stageSchema } from "../settings/schema.js";
12
+ import { createVirtualNamespace } from "./virtual-module.js";
13
+ const VIRTUAL_PREFIX = "\0gtkx-settings:";
14
+ const { isVirtual, fromVirtualId, resolveToVirtual } = createVirtualNamespace(VIRTUAL_PREFIX);
15
+ const SCHEMA_ENV_BANNER = [
16
+ "process.env.GSETTINGS_SCHEMA_DIR = [",
17
+ " decodeURIComponent(new URL(\".\", import.meta.url).pathname),",
18
+ " process.env.GSETTINGS_SCHEMA_DIR,",
19
+ "]",
20
+ " .filter(Boolean)",
21
+ " .join(\":\");",
22
+ ].join("\n");
23
+ const ensureSchemaDir = (state) => {
24
+ if (!state.schemaDir) {
25
+ const runnerDir = process.env.GTKX_DEV_SCHEMA_DIR;
26
+ if (runnerDir) {
27
+ state.schemaDir = runnerDir;
28
+ return runnerDir;
29
+ }
30
+ const dir = mkdtempSync(join(tmpdir(), "gtkx-schemas-"));
31
+ state.schemaDir = dir;
32
+ const cleanup = () => {
33
+ removeTempDir(dir);
34
+ };
35
+ state.cleanupProcessExit = cleanup;
36
+ process.once("exit", cleanup);
37
+ }
38
+ return state.schemaDir;
39
+ };
40
+ const releaseSchemaDir = (state) => {
41
+ if (!state.schemaDir) {
42
+ return;
43
+ }
44
+ if (state.cleanupProcessExit) {
45
+ removeTempDir(state.schemaDir);
46
+ process.removeListener("exit", state.cleanupProcessExit);
47
+ state.cleanupProcessExit = null;
48
+ }
49
+ state.schemaDir = null;
50
+ };
51
+ const compileSchemaDir = (state) => {
52
+ if (!state.schemaDir) {
53
+ return;
54
+ }
55
+ compileSchemas(state.schemaDir);
56
+ process.env.GSETTINGS_SCHEMA_DIR = prependSchemaDir(state.schemaDir, process.env.GSETTINGS_SCHEMA_DIR);
57
+ };
58
+ const syncSchemaEnv = (state) => {
59
+ if (state.rootDir === null) {
60
+ return;
61
+ }
62
+ try {
63
+ emitSchemaEnv(state.rootDir, state.dataDir);
64
+ }
65
+ catch (error_) {
66
+ error(`Failed to generate GSettings schema types: ${errorMessage(error_)}`);
67
+ }
68
+ };
69
+ const applyUserConfig = (state, config) => {
70
+ state.dataDir = resolveDataDir(config.root ?? process.cwd());
71
+ };
72
+ const applyResolvedConfig = (state, config) => {
73
+ state.isBuild = config.command === "build";
74
+ state.rootDir = typeof config.root === "string" ? config.root : null;
75
+ syncSchemaEnv(state);
76
+ };
77
+ const registerSchemaForMode = (state, filePath, id) => {
78
+ const fileName = basename(filePath);
79
+ if (state.isBuild) {
80
+ state.buildSchemas.add(filePath);
81
+ info(`Queued GSettings schema: ${fileName}`);
82
+ return;
83
+ }
84
+ state.trackedSchemas.set(filePath, id);
85
+ const dir = ensureSchemaDir(state);
86
+ stageSchema(dir, filePath);
87
+ compileSchemaDir(state);
88
+ info(`Compiled GSettings schema: ${fileName}`);
89
+ };
90
+ const loadSchemaModule = (ctx, state, id) => {
91
+ if (!isVirtual(id)) {
92
+ return undefined;
93
+ }
94
+ const filePath = fromVirtualId(id);
95
+ const xml = readFileSync(filePath, "utf8");
96
+ const fileName = basename(filePath);
97
+ registerSchemaForMode(state, filePath, id);
98
+ let parsed;
99
+ try {
100
+ parsed = parseSchemaXml(xml, fileName);
101
+ }
102
+ catch (error) {
103
+ if (!(error instanceof SchemaParseError)) {
104
+ throw error;
105
+ }
106
+ ctx.error(error.message);
107
+ }
108
+ if (parsed.schemas.length === 0) {
109
+ ctx.error(`No <schema id="..."> found in ${fileName}`);
110
+ }
111
+ return renderRuntimeModule(parsed);
112
+ };
113
+ const emitCompiledSchemas = (ctx, state) => {
114
+ if (!state.isBuild || state.buildSchemas.size === 0) {
115
+ return;
116
+ }
117
+ const compiled = withStagingDir("schemas-build", (dir) => {
118
+ for (const filePath of state.buildSchemas) {
119
+ stageSchema(dir, filePath);
120
+ }
121
+ compileSchemas(dir);
122
+ return readFileSync(join(dir, "gschemas.compiled"));
123
+ });
124
+ ctx.emitFile({
125
+ type: "asset",
126
+ fileName: "gschemas.compiled",
127
+ source: compiled,
128
+ });
129
+ info(`Compiled ${String(state.buildSchemas.size)} GSettings schema(s)`);
130
+ };
131
+ const handleSchemaHotUpdate = (state, file, server) => {
132
+ if (file.endsWith(SCHEMA_SUFFIX)) {
133
+ syncSchemaEnv(state);
134
+ }
135
+ const virtualId = state.trackedSchemas.get(file);
136
+ if (!virtualId) {
137
+ return;
138
+ }
139
+ const dir = ensureSchemaDir(state);
140
+ stageSchema(dir, file);
141
+ compileSchemaDir(state);
142
+ info(`Recompiled GSettings schema: ${basename(file)}`);
143
+ const mod = server.moduleGraph.getModuleById(virtualId);
144
+ if (mod) {
145
+ server.moduleGraph.invalidateModule(mod);
146
+ return [mod];
147
+ }
148
+ return undefined;
149
+ };
150
+ const watchSchemaFiles = (state, server) => {
151
+ server.httpServer?.once("close", () => {
152
+ releaseSchemaDir(state);
153
+ });
154
+ server.watcher.once("close", () => {
155
+ releaseSchemaDir(state);
156
+ });
157
+ const refreshSchemaTypes = (file) => {
158
+ if (file.endsWith(SCHEMA_SUFFIX)) {
159
+ syncSchemaEnv(state);
160
+ }
161
+ };
162
+ server.watcher.on("add", refreshSchemaTypes);
163
+ server.watcher.on("unlink", refreshSchemaTypes);
164
+ };
165
+ function gtkxSettings() {
166
+ const state = {
167
+ schemaDir: null,
168
+ rootDir: null,
169
+ dataDir: null,
170
+ isBuild: false,
171
+ trackedSchemas: new Map(),
172
+ buildSchemas: new Set(),
173
+ cleanupProcessExit: null,
174
+ };
175
+ return {
176
+ name: "gtkx:settings",
177
+ enforce: "pre",
178
+ config(config) {
179
+ applyUserConfig(state, config);
180
+ },
181
+ configResolved(config) {
182
+ applyResolvedConfig(state, config);
183
+ },
184
+ configureServer(server) {
185
+ watchSchemaFiles(state, server);
186
+ },
187
+ outputOptions(options) {
188
+ if (!state.isBuild) {
189
+ return;
190
+ }
191
+ return prependBanner(options, SCHEMA_ENV_BANNER);
192
+ },
193
+ async resolveId(source, importer, options) {
194
+ if (!source.endsWith(SCHEMA_SUFFIX)) {
195
+ return;
196
+ }
197
+ return resolveToVirtual(this, { source, importer, options });
198
+ },
199
+ load(id) {
200
+ return loadSchemaModule(this, state, id);
201
+ },
202
+ buildEnd() {
203
+ emitCompiledSchemas(this, state);
204
+ },
205
+ closeBundle() {
206
+ releaseSchemaDir(state);
207
+ },
208
+ handleHotUpdate({ file, server }) {
209
+ return handleSchemaHotUpdate(state, file, server);
210
+ },
211
+ };
212
+ }
213
+ export { gtkxSettings };
214
+ //# sourceMappingURL=settings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settings.js","sourceRoot":"","sources":["../../src/vite-plugins/settings.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ModuleNode, Plugin, ResolvedConfig, UserConfig, ViteDevServer } from \"vite\";\nimport { error, errorMessage, info } from \"@gtkx/utils\";\nimport { mkdtempSync, readFileSync } from \"node:fs\";\nimport { tmpdir } from \"node:os\";\nimport { basename, join } from \"node:path\";\nimport { prependBanner } from \"../internal/banner.js\";\nimport { resolveDataDir } from \"../internal/data-dir.js\";\nimport { removeTempDir, withStagingDir } from \"../internal/staging-dir.js\";\nimport { compileSchemas } from \"../settings/compile.js\";\nimport { parseSchemaXml, SchemaParseError } from \"../settings/parser.js\";\nimport { renderRuntimeModule } from \"../settings/render.js\";\nimport { emitSchemaEnv, prependSchemaDir, SCHEMA_SUFFIX, stageSchema } from \"../settings/schema.js\";\nimport { createVirtualNamespace } from \"./virtual-module.js\";\n\ntype PluginState = {\n schemaDir: string | null;\n rootDir: string | null;\n dataDir: string | null;\n isBuild: boolean;\n trackedSchemas: Map<string, string>;\n buildSchemas: Set<string>;\n cleanupProcessExit: (() => void) | null;\n};\n\ntype PluginContext = {\n error: (message: string) => never;\n emitFile: (file: { type: \"asset\"; fileName: string; source: Buffer }) => void;\n};\n\nconst VIRTUAL_PREFIX = \"\\0gtkx-settings:\";\nconst { isVirtual, fromVirtualId, resolveToVirtual } = createVirtualNamespace(VIRTUAL_PREFIX);\n\nconst SCHEMA_ENV_BANNER = [\n \"process.env.GSETTINGS_SCHEMA_DIR = [\",\n \" decodeURIComponent(new URL(\\\".\\\", import.meta.url).pathname),\",\n \" process.env.GSETTINGS_SCHEMA_DIR,\",\n \"]\",\n \" .filter(Boolean)\",\n \" .join(\\\":\\\");\",\n].join(\"\\n\");\n\nconst ensureSchemaDir = (state: PluginState): string => {\n if (!state.schemaDir) {\n const runnerDir = process.env.GTKX_DEV_SCHEMA_DIR;\n\n if (runnerDir) {\n state.schemaDir = runnerDir;\n\n return runnerDir;\n }\n\n const dir = mkdtempSync(join(tmpdir(), \"gtkx-schemas-\"));\n state.schemaDir = dir;\n\n const cleanup = (): void => {\n removeTempDir(dir);\n };\n\n state.cleanupProcessExit = cleanup;\n process.once(\"exit\", cleanup);\n }\n\n return state.schemaDir;\n};\n\nconst releaseSchemaDir = (state: PluginState): void => {\n if (!state.schemaDir) {\n return;\n }\n\n if (state.cleanupProcessExit) {\n removeTempDir(state.schemaDir);\n process.removeListener(\"exit\", state.cleanupProcessExit);\n state.cleanupProcessExit = null;\n }\n\n state.schemaDir = null;\n};\n\nconst compileSchemaDir = (state: PluginState): void => {\n if (!state.schemaDir) {\n return;\n }\n\n compileSchemas(state.schemaDir);\n process.env.GSETTINGS_SCHEMA_DIR = prependSchemaDir(state.schemaDir, process.env.GSETTINGS_SCHEMA_DIR);\n};\n\nconst syncSchemaEnv = (state: PluginState): void => {\n if (state.rootDir === null) {\n return;\n }\n\n try {\n emitSchemaEnv(state.rootDir, state.dataDir);\n } catch (error_) {\n error(`Failed to generate GSettings schema types: ${errorMessage(error_)}`);\n }\n};\n\nconst applyUserConfig = (state: PluginState, config: UserConfig): void => {\n state.dataDir = resolveDataDir(config.root ?? process.cwd());\n};\n\nconst applyResolvedConfig = (state: PluginState, config: ResolvedConfig): void => {\n state.isBuild = config.command === \"build\";\n state.rootDir = typeof config.root === \"string\" ? config.root : null;\n syncSchemaEnv(state);\n};\n\nconst registerSchemaForMode = (state: PluginState, filePath: string, id: string): void => {\n const fileName = basename(filePath);\n\n if (state.isBuild) {\n state.buildSchemas.add(filePath);\n info(`Queued GSettings schema: ${fileName}`);\n\n return;\n }\n\n state.trackedSchemas.set(filePath, id);\n const dir = ensureSchemaDir(state);\n stageSchema(dir, filePath);\n compileSchemaDir(state);\n info(`Compiled GSettings schema: ${fileName}`);\n};\n\nconst loadSchemaModule = (ctx: PluginContext, state: PluginState, id: string): string | undefined => {\n if (!isVirtual(id)) {\n return undefined;\n }\n\n const filePath = fromVirtualId(id);\n const xml = readFileSync(filePath, \"utf8\");\n const fileName = basename(filePath);\n registerSchemaForMode(state, filePath, id);\n let parsed: ReturnType<typeof parseSchemaXml>;\n\n try {\n parsed = parseSchemaXml(xml, fileName);\n } catch (error) {\n if (!(error instanceof SchemaParseError)) {\n throw error;\n }\n\n ctx.error(error.message);\n }\n\n if (parsed.schemas.length === 0) {\n ctx.error(`No <schema id=\"...\"> found in ${fileName}`);\n }\n\n return renderRuntimeModule(parsed);\n};\n\nconst emitCompiledSchemas = (ctx: PluginContext, state: PluginState): void => {\n if (!state.isBuild || state.buildSchemas.size === 0) {\n return;\n }\n\n const compiled = withStagingDir(\"schemas-build\", (dir) => {\n for (const filePath of state.buildSchemas) {\n stageSchema(dir, filePath);\n }\n\n compileSchemas(dir);\n\n return readFileSync(join(dir, \"gschemas.compiled\"));\n });\n\n ctx.emitFile({\n type: \"asset\",\n fileName: \"gschemas.compiled\",\n source: compiled,\n });\n\n info(`Compiled ${String(state.buildSchemas.size)} GSettings schema(s)`);\n};\n\nconst handleSchemaHotUpdate = (state: PluginState, file: string, server: ViteDevServer): ModuleNode[] | undefined => {\n if (file.endsWith(SCHEMA_SUFFIX)) {\n syncSchemaEnv(state);\n }\n\n const virtualId = state.trackedSchemas.get(file);\n\n if (!virtualId) {\n return;\n }\n\n const dir = ensureSchemaDir(state);\n stageSchema(dir, file);\n compileSchemaDir(state);\n info(`Recompiled GSettings schema: ${basename(file)}`);\n const mod = server.moduleGraph.getModuleById(virtualId);\n\n if (mod) {\n server.moduleGraph.invalidateModule(mod);\n\n return [mod];\n }\n\n return undefined;\n};\n\nconst watchSchemaFiles = (state: PluginState, server: ViteDevServer): void => {\n server.httpServer?.once(\"close\", () => {\n releaseSchemaDir(state);\n });\n\n server.watcher.once(\"close\", () => {\n releaseSchemaDir(state);\n });\n\n const refreshSchemaTypes = (file: string): void => {\n if (file.endsWith(SCHEMA_SUFFIX)) {\n syncSchemaEnv(state);\n }\n };\n\n server.watcher.on(\"add\", refreshSchemaTypes);\n server.watcher.on(\"unlink\", refreshSchemaTypes);\n};\n\nfunction gtkxSettings(): Plugin {\n const state: PluginState = {\n schemaDir: null,\n rootDir: null,\n dataDir: null,\n isBuild: false,\n trackedSchemas: new Map(),\n buildSchemas: new Set(),\n cleanupProcessExit: null,\n };\n\n return {\n name: \"gtkx:settings\",\n enforce: \"pre\",\n\n config(config: UserConfig) {\n applyUserConfig(state, config);\n },\n\n configResolved(config) {\n applyResolvedConfig(state, config);\n },\n\n configureServer(server) {\n watchSchemaFiles(state, server);\n },\n\n outputOptions(options) {\n if (!state.isBuild) {\n return;\n }\n\n return prependBanner(options, SCHEMA_ENV_BANNER);\n },\n\n async resolveId(source, importer, options) {\n if (!source.endsWith(SCHEMA_SUFFIX)) {\n return;\n }\n\n return resolveToVirtual(this, { source, importer, options });\n },\n\n load(id) {\n return loadSchemaModule(this, state, id);\n },\n\n buildEnd() {\n emitCompiledSchemas(this, state);\n },\n\n closeBundle() {\n releaseSchemaDir(state);\n },\n\n handleHotUpdate({ file, server }) {\n return handleSchemaHotUpdate(state, file, server);\n },\n };\n}\n\nexport { gtkxSettings };\n"]}
@@ -0,0 +1,3 @@
1
+ declare const stripQuery: (source: string) => string;
2
+ export { stripQuery };
3
+ //# sourceMappingURL=strip-query.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"strip-query.d.ts","sourceRoot":"","sources":["../../src/vite-plugins/strip-query.ts"],"names":[],"mappings":"AAAA,QAAA,MAAM,UAAU,GAAI,QAAQ,MAAM,KAAG,MAIpC,CAAC;AAEF,OAAO,EAAE,UAAU,EAAE,CAAC"}
@@ -0,0 +1,6 @@
1
+ const stripQuery = (source) => {
2
+ const queryIndex = source.indexOf("?");
3
+ return queryIndex === -1 ? source : source.slice(0, queryIndex);
4
+ };
5
+ export { stripQuery };
6
+ //# sourceMappingURL=strip-query.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"strip-query.js","sourceRoot":"","sources":["../../src/vite-plugins/strip-query.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,GAAG,CAAC,MAAc,EAAU,EAAE;IAC1C,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAEvC,OAAO,UAAU,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;AACpE,CAAC,CAAC;AAEF,OAAO,EAAE,UAAU,EAAE,CAAC","sourcesContent":["const stripQuery = (source: string): string => {\n const queryIndex = source.indexOf(\"?\");\n\n return queryIndex === -1 ? source : source.slice(0, queryIndex);\n};\n\nexport { stripQuery };\n"]}
@@ -0,0 +1,4 @@
1
+ import type { Plugin } from "vite";
2
+ declare function gtkxUndeclaredLibrary(mode?: string): Plugin;
3
+ export { gtkxUndeclaredLibrary };
4
+ //# sourceMappingURL=undeclared-library.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"undeclared-library.d.ts","sourceRoot":"","sources":["../../src/vite-plugins/undeclared-library.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAc,MAAM,MAAM,CAAC;AA4C/C,iBAAS,qBAAqB,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CA+BpD;AAED,OAAO,EAAE,qBAAqB,EAAE,CAAC"}
@@ -0,0 +1,50 @@
1
+ import { discoverGirNamespaces, resolveGirPath } from "@gtkx/codegen";
2
+ import { loadConfig } from "@gtkx/config";
3
+ const GENERATED_MODULE_PATTERN = /^@gtkx\/(?:gi|jsx)\/([a-z0-9]+)$/;
4
+ const girSearchPaths = async (state) => {
5
+ if (state.girPath === null) {
6
+ const { config } = await loadConfig(state.root, { mode: state.mode });
7
+ state.girPath = resolveGirPath(config.girPath);
8
+ }
9
+ return state.girPath;
10
+ };
11
+ const getNamespace = (identifier) => identifier.slice(0, identifier.indexOf("-")).toLowerCase();
12
+ const findGirIdentifier = (girPath, namespace) => discoverGirNamespaces(girPath).find((identifier) => getNamespace(identifier) === namespace);
13
+ const undeclaredLibraryError = (source, namespace, girPath) => {
14
+ const identifier = findGirIdentifier(girPath, namespace);
15
+ if (identifier === undefined) {
16
+ return new Error(`Cannot resolve "${source}": the binding store has no "${namespace}" module, and no GIR data for it ` +
17
+ `was found in [${girPath.join(", ")}]. If "${namespace}" is a library, install its ` +
18
+ "gobject-introspection data package and add its GIR identifier to `libraries` in gtkx.config.ts. " +
19
+ "Otherwise run gtkx codegen to regenerate the store.");
20
+ }
21
+ return new Error(`Cannot resolve "${source}": the "${identifier}" bindings have not been generated. ` +
22
+ `Add "${identifier}" to \`libraries\` in gtkx.config.ts, then run gtkx dev or gtkx build again.`);
23
+ };
24
+ function gtkxUndeclaredLibrary(mode) {
25
+ const state = {
26
+ root: "",
27
+ mode,
28
+ girPath: null,
29
+ };
30
+ return {
31
+ name: "gtkx:undeclared-library",
32
+ enforce: "pre",
33
+ config(config) {
34
+ state.root = config.root ?? process.cwd();
35
+ },
36
+ async resolveId(source, importer, options) {
37
+ const namespace = GENERATED_MODULE_PATTERN.exec(source)?.[1];
38
+ if (namespace === undefined) {
39
+ return;
40
+ }
41
+ const resolved = await this.resolve(source, importer, { ...options, skipSelf: true });
42
+ if (resolved !== null) {
43
+ return;
44
+ }
45
+ throw undeclaredLibraryError(source, namespace, await girSearchPaths(state));
46
+ },
47
+ };
48
+ }
49
+ export { gtkxUndeclaredLibrary };
50
+ //# sourceMappingURL=undeclared-library.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"undeclared-library.js","sourceRoot":"","sources":["../../src/vite-plugins/undeclared-library.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACtE,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAQ1C,MAAM,wBAAwB,GAAG,kCAAkC,CAAC;AAEpE,MAAM,cAAc,GAAG,KAAK,EAAE,KAAkB,EAAqB,EAAE;IACnE,IAAI,KAAK,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;QACzB,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,UAAU,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;QACtE,KAAK,CAAC,OAAO,GAAG,cAAc,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACnD,CAAC;IAED,OAAO,KAAK,CAAC,OAAO,CAAC;AACzB,CAAC,CAAC;AAEF,MAAM,YAAY,GAAG,CAAC,UAAkB,EAAU,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;AAEhH,MAAM,iBAAiB,GAAG,CAAC,OAAiB,EAAE,SAAiB,EAAsB,EAAE,CACnF,qBAAqB,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,YAAY,CAAC,UAAU,CAAC,KAAK,SAAS,CAAC,CAAC;AAEhG,MAAM,sBAAsB,GAAG,CAAC,MAAc,EAAE,SAAiB,EAAE,OAAiB,EAAS,EAAE;IAC3F,MAAM,UAAU,GAAG,iBAAiB,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IAEzD,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;QAC3B,OAAO,IAAI,KAAK,CACZ,mBAAmB,MAAM,gCAAgC,SAAS,mCAAmC;YACrG,iBAAiB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,SAAS,8BAA8B;YACpF,kGAAkG;YAClG,qDAAqD,CACxD,CAAC;IACN,CAAC;IAED,OAAO,IAAI,KAAK,CACZ,mBAAmB,MAAM,WAAW,UAAU,sCAAsC;QACpF,QAAQ,UAAU,8EAA8E,CACnG,CAAC;AACN,CAAC,CAAC;AAEF,SAAS,qBAAqB,CAAC,IAAa;IACxC,MAAM,KAAK,GAAgB;QACvB,IAAI,EAAE,EAAE;QACR,IAAI;QACJ,OAAO,EAAE,IAAI;KAChB,CAAC;IAEF,OAAO;QACH,IAAI,EAAE,yBAAyB;QAC/B,OAAO,EAAE,KAAK;QAEd,MAAM,CAAC,MAAkB;YACrB,KAAK,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QAC9C,CAAC;QAED,KAAK,CAAC,SAAS,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO;YACrC,MAAM,SAAS,GAAG,wBAAwB,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YAE7D,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;gBAC1B,OAAO;YACX,CAAC;YAED,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,GAAG,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;YAEtF,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;gBACpB,OAAO;YACX,CAAC;YAED,MAAM,sBAAsB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC;QACjF,CAAC;KACJ,CAAC;AACN,CAAC;AAED,OAAO,EAAE,qBAAqB,EAAE,CAAC","sourcesContent":["import type { Plugin, UserConfig } from \"vite\";\nimport { discoverGirNamespaces, resolveGirPath } from \"@gtkx/codegen\";\nimport { loadConfig } from \"@gtkx/config\";\n\ntype PluginState = {\n root: string;\n mode: string | undefined;\n girPath: string[] | null;\n};\n\nconst GENERATED_MODULE_PATTERN = /^@gtkx\\/(?:gi|jsx)\\/([a-z0-9]+)$/;\n\nconst girSearchPaths = async (state: PluginState): Promise<string[]> => {\n if (state.girPath === null) {\n const { config } = await loadConfig(state.root, { mode: state.mode });\n state.girPath = resolveGirPath(config.girPath);\n }\n\n return state.girPath;\n};\n\nconst getNamespace = (identifier: string): string => identifier.slice(0, identifier.indexOf(\"-\")).toLowerCase();\n\nconst findGirIdentifier = (girPath: string[], namespace: string): string | undefined =>\n discoverGirNamespaces(girPath).find((identifier) => getNamespace(identifier) === namespace);\n\nconst undeclaredLibraryError = (source: string, namespace: string, girPath: string[]): Error => {\n const identifier = findGirIdentifier(girPath, namespace);\n\n if (identifier === undefined) {\n return new Error(\n `Cannot resolve \"${source}\": the binding store has no \"${namespace}\" module, and no GIR data for it ` +\n `was found in [${girPath.join(\", \")}]. If \"${namespace}\" is a library, install its ` +\n \"gobject-introspection data package and add its GIR identifier to `libraries` in gtkx.config.ts. \" +\n \"Otherwise run gtkx codegen to regenerate the store.\",\n );\n }\n\n return new Error(\n `Cannot resolve \"${source}\": the \"${identifier}\" bindings have not been generated. ` +\n `Add \"${identifier}\" to \\`libraries\\` in gtkx.config.ts, then run gtkx dev or gtkx build again.`,\n );\n};\n\nfunction gtkxUndeclaredLibrary(mode?: string): Plugin {\n const state: PluginState = {\n root: \"\",\n mode,\n girPath: null,\n };\n\n return {\n name: \"gtkx:undeclared-library\",\n enforce: \"pre\",\n\n config(config: UserConfig) {\n state.root = config.root ?? process.cwd();\n },\n\n async resolveId(source, importer, options) {\n const namespace = GENERATED_MODULE_PATTERN.exec(source)?.[1];\n\n if (namespace === undefined) {\n return;\n }\n\n const resolved = await this.resolve(source, importer, { ...options, skipSelf: true });\n\n if (resolved !== null) {\n return;\n }\n\n throw undeclaredLibraryError(source, namespace, await girSearchPaths(state));\n },\n };\n}\n\nexport { gtkxUndeclaredLibrary };\n"]}
@@ -0,0 +1,22 @@
1
+ type VirtualResolveContext = {
2
+ resolve: (source: string, importer?: string, options?: {
3
+ skipSelf?: boolean;
4
+ } & Record<string, unknown>) => Promise<{
5
+ id: string;
6
+ external?: boolean | "absolute" | "relative";
7
+ } | null>;
8
+ };
9
+ type VirtualResolveRequest = {
10
+ source: string;
11
+ importer: string | undefined;
12
+ options: Record<string, unknown> | undefined;
13
+ };
14
+ type VirtualNamespace = {
15
+ isVirtual: (id: string) => boolean;
16
+ toVirtualId: (realId: string) => string;
17
+ fromVirtualId: (id: string) => string;
18
+ resolveToVirtual: (ctx: VirtualResolveContext, request: VirtualResolveRequest) => Promise<string | undefined>;
19
+ };
20
+ declare const createVirtualNamespace: (prefix: string) => VirtualNamespace;
21
+ export { createVirtualNamespace };
22
+ //# sourceMappingURL=virtual-module.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"virtual-module.d.ts","sourceRoot":"","sources":["../../src/vite-plugins/virtual-module.ts"],"names":[],"mappings":"AAAA,KAAK,qBAAqB,GAAG;IACzB,OAAO,EAAE,CACL,MAAM,EAAE,MAAM,EACd,QAAQ,CAAC,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KACzD,OAAO,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,OAAO,GAAG,UAAU,GAAG,UAAU,CAAA;KAAE,GAAG,IAAI,CAAC,CAAC;CACrF,CAAC;AAEF,KAAK,qBAAqB,GAAG;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC;CAChD,CAAC;AAEF,KAAK,gBAAgB,GAAG;IACpB,SAAS,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC;IACnC,WAAW,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,CAAC;IACxC,aAAa,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,MAAM,CAAC;IACtC,gBAAgB,EAAE,CAAC,GAAG,EAAE,qBAAqB,EAAE,OAAO,EAAE,qBAAqB,KAAK,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;CACjH,CAAC;AAEF,QAAA,MAAM,sBAAsB,GAAI,QAAQ,MAAM,KAAG,gBAoBhD,CAAC;AAEF,OAAO,EAAE,sBAAsB,EAAE,CAAC"}
@@ -0,0 +1,20 @@
1
+ const createVirtualNamespace = (prefix) => {
2
+ const toVirtualId = (realId) => prefix + realId;
3
+ return {
4
+ isVirtual: (id) => id.startsWith(prefix),
5
+ toVirtualId,
6
+ fromVirtualId: (id) => id.slice(prefix.length),
7
+ resolveToVirtual: async (ctx, request) => {
8
+ const resolved = await ctx.resolve(request.source, request.importer, {
9
+ ...request.options,
10
+ skipSelf: true,
11
+ });
12
+ if (!resolved || resolved.external) {
13
+ return;
14
+ }
15
+ return toVirtualId(resolved.id);
16
+ },
17
+ };
18
+ };
19
+ export { createVirtualNamespace };
20
+ //# sourceMappingURL=virtual-module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"virtual-module.js","sourceRoot":"","sources":["../../src/vite-plugins/virtual-module.ts"],"names":[],"mappings":"AAqBA,MAAM,sBAAsB,GAAG,CAAC,MAAc,EAAoB,EAAE;IAChE,MAAM,WAAW,GAAG,CAAC,MAAc,EAAU,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC;IAEhE,OAAO;QACH,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC;QACxC,WAAW;QACX,aAAa,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC;QAC9C,gBAAgB,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE;YACrC,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,QAAQ,EAAE;gBACjE,GAAG,OAAO,CAAC,OAAO;gBAClB,QAAQ,EAAE,IAAI;aACjB,CAAC,CAAC;YAEH,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,QAAQ,EAAE,CAAC;gBACjC,OAAO;YACX,CAAC;YAED,OAAO,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QACpC,CAAC;KACJ,CAAC;AACN,CAAC,CAAC;AAEF,OAAO,EAAE,sBAAsB,EAAE,CAAC","sourcesContent":["type VirtualResolveContext = {\n resolve: (\n source: string,\n importer?: string,\n options?: { skipSelf?: boolean } & Record<string, unknown>,\n ) => Promise<{ id: string; external?: boolean | \"absolute\" | \"relative\" } | null>;\n};\n\ntype VirtualResolveRequest = {\n source: string;\n importer: string | undefined;\n options: Record<string, unknown> | undefined;\n};\n\ntype VirtualNamespace = {\n isVirtual: (id: string) => boolean;\n toVirtualId: (realId: string) => string;\n fromVirtualId: (id: string) => string;\n resolveToVirtual: (ctx: VirtualResolveContext, request: VirtualResolveRequest) => Promise<string | undefined>;\n};\n\nconst createVirtualNamespace = (prefix: string): VirtualNamespace => {\n const toVirtualId = (realId: string): string => prefix + realId;\n\n return {\n isVirtual: (id) => id.startsWith(prefix),\n toVirtualId,\n fromVirtualId: (id) => id.slice(prefix.length),\n resolveToVirtual: async (ctx, request) => {\n const resolved = await ctx.resolve(request.source, request.importer, {\n ...request.options,\n skipSelf: true,\n });\n\n if (!resolved || resolved.external) {\n return;\n }\n\n return toVirtualId(resolved.id);\n },\n };\n};\n\nexport { createVirtualNamespace };\n"]}
@@ -0,0 +1,10 @@
1
+ import type { Plugin } from "vite";
2
+ /**
3
+ * Vite plugin factory that assembles the plugins needed to run GTKX apps under Vitest,
4
+ * combining the shared GTKX Vite plugins with the `@gtkx/vitest` test integration.
5
+ *
6
+ * @returns The ordered array of Vite plugins to include in a Vitest configuration.
7
+ */
8
+ declare const gtkx: () => Plugin[];
9
+ export default gtkx;
10
+ //# sourceMappingURL=vitest-plugin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vitest-plugin.d.ts","sourceRoot":"","sources":["../src/vitest-plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAKnC;;;;;GAKG;AACH,QAAA,MAAM,IAAI,QAAO,MAAM,EAAmE,CAAC;AAC3F,eAAe,IAAI,CAAC"}
@@ -0,0 +1,12 @@
1
+ import gtkxVitest from "@gtkx/vitest";
2
+ import { gtkxVitePlugins } from "./vite-plugins/index.js";
3
+ import { gtkxSettingsWorkerEnv } from "./vite-plugins/settings-worker-env.js";
4
+ /**
5
+ * Vite plugin factory that assembles the plugins needed to run GTKX apps under Vitest,
6
+ * combining the shared GTKX Vite plugins with the `@gtkx/vitest` test integration.
7
+ *
8
+ * @returns The ordered array of Vite plugins to include in a Vitest configuration.
9
+ */
10
+ const gtkx = () => [...gtkxVitePlugins(), gtkxSettingsWorkerEnv(), gtkxVitest()];
11
+ export default gtkx;
12
+ //# sourceMappingURL=vitest-plugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vitest-plugin.js","sourceRoot":"","sources":["../src/vitest-plugin.ts"],"names":[],"mappings":"AACA,OAAO,UAAU,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,qBAAqB,EAAE,MAAM,uCAAuC,CAAC;AAE9E;;;;;GAKG;AACH,MAAM,IAAI,GAAG,GAAa,EAAE,CAAC,CAAC,GAAG,eAAe,EAAE,EAAE,qBAAqB,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC;AAC3F,eAAe,IAAI,CAAC","sourcesContent":["import type { Plugin } from \"vite\";\nimport gtkxVitest from \"@gtkx/vitest\";\nimport { gtkxVitePlugins } from \"./vite-plugins/index.js\";\nimport { gtkxSettingsWorkerEnv } from \"./vite-plugins/settings-worker-env.js\";\n\n/**\n * Vite plugin factory that assembles the plugins needed to run GTKX apps under Vitest,\n * combining the shared GTKX Vite plugins with the `@gtkx/vitest` test integration.\n *\n * @returns The ordered array of Vite plugins to include in a Vitest configuration.\n */\nconst gtkx = (): Plugin[] => [...gtkxVitePlugins(), gtkxSettingsWorkerEnv(), gtkxVitest()];\nexport default gtkx;\n"]}
package/env.d.ts CHANGED
@@ -1,16 +1,99 @@
1
1
  /// <reference types="vite/client" />
2
+ /// <reference types="@gtkx/react/env" />
2
3
 
3
- declare module "*.css?url" {
4
- const path: string;
5
- export default path;
4
+ declare module "*.aac" {
5
+ export const path: string;
6
+ }
7
+
8
+ declare module "*.avif" {
9
+ export const path: string;
10
+ }
11
+
12
+ declare module "*.eot" {
13
+ export const path: string;
14
+ }
15
+
16
+ declare module "*.flac" {
17
+ export const path: string;
18
+ }
19
+
20
+ declare module "*.gif" {
21
+ export const path: string;
22
+ }
23
+
24
+ declare module "*.ico" {
25
+ export const path: string;
26
+ }
27
+
28
+ declare module "*.jpeg" {
29
+ export const path: string;
30
+ }
31
+
32
+ declare module "*.jpg" {
33
+ export const path: string;
34
+ }
35
+
36
+ declare module "*.mp3" {
37
+ export const path: string;
38
+ }
39
+
40
+ declare module "*.mp4" {
41
+ export const path: string;
42
+ }
43
+
44
+ declare module "*.ogg" {
45
+ export const path: string;
46
+ }
47
+
48
+ declare module "*.otf" {
49
+ export const path: string;
50
+ }
51
+
52
+ declare module "*.png" {
53
+ export const path: string;
54
+ }
55
+
56
+ declare module "*.svg" {
57
+ export const path: string;
58
+ }
59
+
60
+ declare module "*.ttf" {
61
+ export const path: string;
62
+ }
63
+
64
+ declare module "*.wav" {
65
+ export const path: string;
66
+ }
67
+
68
+ declare module "*.webm" {
69
+ export const path: string;
70
+ }
71
+
72
+ declare module "*.webp" {
73
+ export const path: string;
74
+ }
75
+
76
+ declare module "*.woff" {
77
+ export const path: string;
78
+ }
79
+
80
+ declare module "*.woff2" {
81
+ export const path: string;
6
82
  }
7
83
 
8
84
  declare module "*.data" {
9
- const path: string;
10
- export default path;
85
+ const resourceUri: string;
86
+ export const path: string;
87
+ export default resourceUri;
88
+ }
89
+
90
+ declare module "*.gpa" {
91
+ const resourceUri: string;
92
+ export const path: string;
93
+ export default resourceUri;
11
94
  }
12
95
 
13
- declare module "*.gschema.xml" {
14
- const schemaId: string;
15
- export default schemaId;
96
+ declare module "*.css?url" {
97
+ const path: string;
98
+ export default path;
16
99
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@gtkx/cli",
3
- "version": "0.21.0",
4
- "description": "CLI for GTKX - create and develop GTK4 React applications",
3
+ "version": "1.0.0-rc.2",
4
+ "description": "Command-line tool and Vite plugin stack that scaffolds, develops, builds, and documents GTKX applications",
5
5
  "keywords": [
6
6
  "gtkx",
7
7
  "gtk",
@@ -22,7 +22,7 @@
22
22
  },
23
23
  "repository": {
24
24
  "type": "git",
25
- "url": "https://github.com/gtkx-org/gtkx.git",
25
+ "url": "git+https://github.com/gtkx-org/gtkx.git",
26
26
  "directory": "packages/cli"
27
27
  },
28
28
  "license": "MPL-2.0",
@@ -30,22 +30,14 @@
30
30
  "type": "module",
31
31
  "exports": {
32
32
  "./package.json": "./package.json",
33
- ".": {
34
- "types": "./dist/index.d.ts",
35
- "default": "./dist/index.js"
36
- },
37
- "./builder": {
38
- "types": "./dist/builder.d.ts",
39
- "default": "./dist/builder.js"
40
- },
41
- "./dev-server": {
42
- "types": "./dist/dev-server.d.ts",
43
- "default": "./dist/dev-server.js"
44
- },
45
33
  "./refresh-runtime": {
46
34
  "types": "./dist/refresh-runtime.d.ts",
47
35
  "default": "./dist/refresh-runtime.js"
48
36
  },
37
+ "./vitest-plugin": {
38
+ "types": "./dist/vitest-plugin.d.ts",
39
+ "default": "./dist/vitest-plugin.js"
40
+ },
49
41
  "./env": "./env.d.ts"
50
42
  },
51
43
  "bin": {
@@ -56,38 +48,38 @@
56
48
  "bin",
57
49
  "dist",
58
50
  "env.d.ts",
59
- "src",
60
- "templates"
51
+ "src"
61
52
  ],
53
+ "engines": {
54
+ "node": ">=24"
55
+ },
62
56
  "dependencies": {
63
- "@clack/prompts": "^1.1.0",
64
- "@swc/core": "^1.15.21",
65
- "citty": "^0.2.1",
66
- "ejs": "^5.0.1",
57
+ "@babel/core": "^8.0.1",
58
+ "@babel/preset-typescript": "^8.0.1",
59
+ "@swc/core": "^1.15.46",
60
+ "babel-plugin-react-compiler": "^1.0.0",
61
+ "citty": "^0.2.2",
62
+ "fast-xml-parser": "^5.10.1",
67
63
  "react-refresh": "^0.18.0",
68
- "vite": "^8.0.3",
69
- "@gtkx/ffi": "0.21.0",
70
- "@gtkx/mcp": "0.21.0",
71
- "@gtkx/react": "0.21.0"
64
+ "vite": "^8.1.5",
65
+ "@gtkx/codegen": "1.0.0-rc.2",
66
+ "@gtkx/config": "1.0.0-rc.2",
67
+ "@gtkx/mcp": "1.0.0-rc.2",
68
+ "@gtkx/runtime": "1.0.0-rc.2",
69
+ "@gtkx/utils": "1.0.0-rc.2",
70
+ "@gtkx/vitest": "1.0.0-rc.2",
71
+ "create-gtkx": "1.0.0-rc.2"
72
72
  },
73
73
  "devDependencies": {
74
- "@types/ejs": "^3.1.5",
74
+ "@types/babel__core": "^7.20.5",
75
75
  "@types/react-refresh": "^0.14.7",
76
- "memfs": "^4.57.1",
77
- "@gtkx/testing": "0.21.0"
76
+ "vitest": "^4.1.10",
77
+ "@gtkx/testing": "1.0.0-rc.2"
78
78
  },
79
79
  "peerDependencies": {
80
- "react": "^19",
81
- "@gtkx/testing": "0.21.0"
82
- },
83
- "peerDependenciesMeta": {
84
- "@gtkx/testing": {
85
- "optional": true
86
- }
80
+ "react": "^19"
87
81
  },
88
82
  "scripts": {
89
- "build": "tsc -b",
90
- "test": "vitest run",
91
- "typecheck": "tsc -b --emitDeclarationOnly"
83
+ "release": "tsx ../../scripts/release-package.ts"
92
84
  }
93
85
  }