@gtkx/cli 0.20.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 (341) 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 -48
  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 -3
  224. package/package.json +32 -38
  225. package/src/babel-modules.d.ts +13 -0
  226. package/src/builder.ts +28 -76
  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 -54
  282. package/dist/create.d.ts.map +0 -1
  283. package/dist/create.js +0 -221
  284. package/dist/create.js.map +0 -1
  285. package/dist/dev-server.d.ts +0 -38
  286. package/dist/dev-server.d.ts.map +0 -1
  287. package/dist/dev-server.js +0 -128
  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-native.d.ts +0 -14
  309. package/dist/vite-plugin-gtkx-native.d.ts.map +0 -1
  310. package/dist/vite-plugin-gtkx-native.js +0 -53
  311. package/dist/vite-plugin-gtkx-native.js.map +0 -1
  312. package/dist/vite-plugin-gtkx-refresh.d.ts +0 -8
  313. package/dist/vite-plugin-gtkx-refresh.d.ts.map +0 -1
  314. package/dist/vite-plugin-gtkx-refresh.js +0 -37
  315. package/dist/vite-plugin-gtkx-refresh.js.map +0 -1
  316. package/dist/vite-plugin-swc-ssr-refresh.d.ts +0 -8
  317. package/dist/vite-plugin-swc-ssr-refresh.d.ts.map +0 -1
  318. package/dist/vite-plugin-swc-ssr-refresh.js +0 -46
  319. package/dist/vite-plugin-swc-ssr-refresh.js.map +0 -1
  320. package/src/cli.tsx +0 -154
  321. package/src/create.ts +0 -310
  322. package/src/dev-server.tsx +0 -162
  323. package/src/index.ts +0 -3
  324. package/src/mcp-client.ts +0 -518
  325. package/src/templates.ts +0 -26
  326. package/src/vite-plugin-gtkx-assets.ts +0 -69
  327. package/src/vite-plugin-gtkx-native.ts +0 -64
  328. package/src/vite-plugin-gtkx-refresh.ts +0 -54
  329. package/src/vite-plugin-swc-ssr-refresh.ts +0 -61
  330. package/templates/claude/EXAMPLES.md.ejs +0 -744
  331. package/templates/claude/SKILL.md.ejs +0 -93
  332. package/templates/claude/WIDGETS.md.ejs +0 -820
  333. package/templates/config/vitest.config.ts.ejs +0 -11
  334. package/templates/gitignore.ejs +0 -4
  335. package/templates/package.json.ejs +0 -16
  336. package/templates/src/app.tsx.ejs +0 -32
  337. package/templates/src/dev.tsx.ejs +0 -5
  338. package/templates/src/gtkx-env.d.ts.ejs +0 -1
  339. package/templates/src/index.tsx.ejs +0 -5
  340. package/templates/tests/app.test.tsx.ejs +0 -16
  341. package/templates/tsconfig.json.ejs +0 -14
@@ -0,0 +1,190 @@
1
+ import { mkdtempSync, readFileSync } from "node:fs";
2
+ import { tmpdir } from "node:os";
3
+ import { basename, join } from "node:path";
4
+ import { error, errorMessage, info } from "@gtkx/utils";
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 = () => removeTempDir(dir);
33
+ state.cleanupProcessExit = cleanup;
34
+ process.once("exit", cleanup);
35
+ }
36
+ return state.schemaDir;
37
+ };
38
+ const releaseSchemaDir = (state) => {
39
+ if (!state.schemaDir)
40
+ return;
41
+ if (state.cleanupProcessExit) {
42
+ removeTempDir(state.schemaDir);
43
+ process.removeListener("exit", state.cleanupProcessExit);
44
+ state.cleanupProcessExit = null;
45
+ }
46
+ state.schemaDir = null;
47
+ };
48
+ const compileSchemaDir = (state) => {
49
+ if (!state.schemaDir)
50
+ return;
51
+ compileSchemas(state.schemaDir);
52
+ process.env.GSETTINGS_SCHEMA_DIR = prependSchemaDir(state.schemaDir, process.env.GSETTINGS_SCHEMA_DIR);
53
+ };
54
+ const syncSchemaEnv = (state) => {
55
+ if (state.rootDir === null)
56
+ return;
57
+ try {
58
+ emitSchemaEnv(state.rootDir, state.dataDir);
59
+ }
60
+ catch (cause) {
61
+ error(`Failed to generate GSettings schema types: ${errorMessage(cause)}`);
62
+ }
63
+ };
64
+ const registerSchemaForMode = (state, filePath, id) => {
65
+ const fileName = basename(filePath);
66
+ if (state.isBuild) {
67
+ state.buildSchemas.add(filePath);
68
+ info(`Queued GSettings schema: ${fileName}`);
69
+ return;
70
+ }
71
+ state.trackedSchemas.set(filePath, id);
72
+ const dir = ensureSchemaDir(state);
73
+ stageSchema(dir, filePath);
74
+ compileSchemaDir(state);
75
+ info(`Compiled GSettings schema: ${fileName}`);
76
+ };
77
+ const loadSchemaModule = (ctx, state, id) => {
78
+ const filePath = fromVirtualId(id);
79
+ const xml = readFileSync(filePath, "utf-8");
80
+ const fileName = basename(filePath);
81
+ registerSchemaForMode(state, filePath, id);
82
+ let parsed;
83
+ try {
84
+ parsed = parseSchemaXml(xml, fileName);
85
+ }
86
+ catch (error) {
87
+ if (!(error instanceof SchemaParseError))
88
+ throw error;
89
+ ctx.error(error.message);
90
+ }
91
+ if (parsed.schemas.length === 0) {
92
+ ctx.error(`No <schema id="..."> found in ${fileName}`);
93
+ }
94
+ return renderRuntimeModule(parsed);
95
+ };
96
+ const emitCompiledSchemas = (ctx, state) => {
97
+ if (!state.isBuild || state.buildSchemas.size === 0)
98
+ return;
99
+ const compiled = withStagingDir("schemas-build", (dir) => {
100
+ for (const filePath of state.buildSchemas) {
101
+ stageSchema(dir, filePath);
102
+ }
103
+ compileSchemas(dir);
104
+ return readFileSync(join(dir, "gschemas.compiled"));
105
+ });
106
+ ctx.emitFile({
107
+ type: "asset",
108
+ fileName: "gschemas.compiled",
109
+ source: compiled,
110
+ });
111
+ info(`Compiled ${state.buildSchemas.size} GSettings schema(s)`);
112
+ };
113
+ const handleSchemaHotUpdate = (state, file, server) => {
114
+ const virtualId = state.trackedSchemas.get(file);
115
+ if (!virtualId)
116
+ return;
117
+ const dir = ensureSchemaDir(state);
118
+ stageSchema(dir, file);
119
+ compileSchemaDir(state);
120
+ info(`Recompiled GSettings schema: ${basename(file)}`);
121
+ const mod = server.moduleGraph.getModuleById(virtualId);
122
+ if (mod) {
123
+ server.moduleGraph.invalidateModule(mod);
124
+ return [mod];
125
+ }
126
+ return undefined;
127
+ };
128
+ const watchSchemaFiles = (state, server) => {
129
+ server.httpServer?.once("close", () => releaseSchemaDir(state));
130
+ server.watcher.once("close", () => releaseSchemaDir(state));
131
+ const refreshSchemaTypes = (file) => {
132
+ if (file.endsWith(SCHEMA_SUFFIX))
133
+ syncSchemaEnv(state);
134
+ };
135
+ server.watcher.on("add", refreshSchemaTypes);
136
+ server.watcher.on("unlink", refreshSchemaTypes);
137
+ };
138
+ export function gtkxSettings() {
139
+ const state = {
140
+ schemaDir: null,
141
+ rootDir: null,
142
+ dataDir: null,
143
+ isBuild: false,
144
+ trackedSchemas: new Map(),
145
+ buildSchemas: new Set(),
146
+ cleanupProcessExit: null,
147
+ };
148
+ return {
149
+ name: "gtkx:settings",
150
+ enforce: "pre",
151
+ config(config) {
152
+ state.dataDir = resolveDataDir(config.root ?? process.cwd());
153
+ },
154
+ configResolved(config) {
155
+ state.isBuild = config.command === "build";
156
+ state.rootDir = typeof config.root === "string" ? config.root : null;
157
+ syncSchemaEnv(state);
158
+ },
159
+ configureServer(server) {
160
+ watchSchemaFiles(state, server);
161
+ },
162
+ outputOptions(options) {
163
+ if (!state.isBuild)
164
+ return;
165
+ return prependBanner(options, SCHEMA_ENV_BANNER);
166
+ },
167
+ async resolveId(source, importer, options) {
168
+ if (!source.endsWith(SCHEMA_SUFFIX))
169
+ return;
170
+ return resolveToVirtual(this, { source, importer, options });
171
+ },
172
+ load(id) {
173
+ if (!isVirtual(id))
174
+ return;
175
+ return loadSchemaModule(this, state, id);
176
+ },
177
+ buildEnd() {
178
+ emitCompiledSchemas(this, state);
179
+ },
180
+ closeBundle() {
181
+ releaseSchemaDir(state);
182
+ },
183
+ handleHotUpdate({ file, server }) {
184
+ if (file.endsWith(SCHEMA_SUFFIX))
185
+ syncSchemaEnv(state);
186
+ return handleSchemaHotUpdate(state, file, server);
187
+ },
188
+ };
189
+ }
190
+ //# 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 { mkdtempSync, readFileSync } from \"node:fs\";\nimport { tmpdir } from \"node:os\";\nimport { basename, join } from \"node:path\";\nimport { error, errorMessage, info } from \"@gtkx/utils\";\nimport type { ModuleNode, Plugin, UserConfig, ViteDevServer } from \"vite\";\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\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\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 ensureSchemaDir = (state: PluginState): string => {\n if (!state.schemaDir) {\n const runnerDir = process.env.GTKX_DEV_SCHEMA_DIR;\n if (runnerDir) {\n state.schemaDir = runnerDir;\n return runnerDir;\n }\n const dir = mkdtempSync(join(tmpdir(), \"gtkx-schemas-\"));\n state.schemaDir = dir;\n const cleanup = (): void => removeTempDir(dir);\n state.cleanupProcessExit = cleanup;\n process.once(\"exit\", cleanup);\n }\n return state.schemaDir;\n};\n\nconst releaseSchemaDir = (state: PluginState): void => {\n if (!state.schemaDir) return;\n if (state.cleanupProcessExit) {\n removeTempDir(state.schemaDir);\n process.removeListener(\"exit\", state.cleanupProcessExit);\n state.cleanupProcessExit = null;\n }\n state.schemaDir = null;\n};\n\nconst compileSchemaDir = (state: PluginState): void => {\n if (!state.schemaDir) return;\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) return;\n try {\n emitSchemaEnv(state.rootDir, state.dataDir);\n } catch (cause) {\n error(`Failed to generate GSettings schema types: ${errorMessage(cause)}`);\n }\n};\n\nconst registerSchemaForMode = (state: PluginState, filePath: string, id: string): void => {\n const fileName = basename(filePath);\n if (state.isBuild) {\n state.buildSchemas.add(filePath);\n info(`Queued GSettings schema: ${fileName}`);\n return;\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 => {\n const filePath = fromVirtualId(id);\n const xml = readFileSync(filePath, \"utf-8\");\n const fileName = basename(filePath);\n\n registerSchemaForMode(state, filePath, id);\n\n let parsed: ReturnType<typeof parseSchemaXml>;\n try {\n parsed = parseSchemaXml(xml, fileName);\n } catch (error) {\n if (!(error instanceof SchemaParseError)) throw error;\n ctx.error(error.message);\n }\n if (parsed.schemas.length === 0) {\n ctx.error(`No <schema id=\"...\"> found in ${fileName}`);\n }\n return renderRuntimeModule(parsed);\n};\n\nconst emitCompiledSchemas = (ctx: PluginContext, state: PluginState): void => {\n if (!state.isBuild || state.buildSchemas.size === 0) return;\n\n const compiled = withStagingDir(\"schemas-build\", (dir) => {\n for (const filePath of state.buildSchemas) {\n stageSchema(dir, filePath);\n }\n compileSchemas(dir);\n return readFileSync(join(dir, \"gschemas.compiled\"));\n });\n ctx.emitFile({\n type: \"asset\",\n fileName: \"gschemas.compiled\",\n source: compiled,\n });\n\n info(`Compiled ${state.buildSchemas.size} GSettings schema(s)`);\n};\n\nconst handleSchemaHotUpdate = (state: PluginState, file: string, server: ViteDevServer): ModuleNode[] | undefined => {\n const virtualId = state.trackedSchemas.get(file);\n if (!virtualId) return;\n\n const dir = ensureSchemaDir(state);\n stageSchema(dir, file);\n compileSchemaDir(state);\n\n info(`Recompiled GSettings schema: ${basename(file)}`);\n\n const mod = server.moduleGraph.getModuleById(virtualId);\n if (mod) {\n server.moduleGraph.invalidateModule(mod);\n return [mod];\n }\n return undefined;\n};\n\nconst watchSchemaFiles = (state: PluginState, server: ViteDevServer): void => {\n server.httpServer?.once(\"close\", () => releaseSchemaDir(state));\n server.watcher.once(\"close\", () => releaseSchemaDir(state));\n const refreshSchemaTypes = (file: string): void => {\n if (file.endsWith(SCHEMA_SUFFIX)) syncSchemaEnv(state);\n };\n server.watcher.on(\"add\", refreshSchemaTypes);\n server.watcher.on(\"unlink\", refreshSchemaTypes);\n};\n\nexport function 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 state.dataDir = resolveDataDir(config.root ?? process.cwd());\n },\n\n configResolved(config) {\n state.isBuild = config.command === \"build\";\n state.rootDir = typeof config.root === \"string\" ? config.root : null;\n syncSchemaEnv(state);\n },\n\n configureServer(server) {\n watchSchemaFiles(state, server);\n },\n\n outputOptions(options) {\n if (!state.isBuild) return;\n return prependBanner(options, SCHEMA_ENV_BANNER);\n },\n\n async resolveId(source, importer, options) {\n if (!source.endsWith(SCHEMA_SUFFIX)) return;\n return resolveToVirtual(this, { source, importer, options });\n },\n\n load(id) {\n if (!isVirtual(id)) return;\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 if (file.endsWith(SCHEMA_SUFFIX)) syncSchemaEnv(state);\n return handleSchemaHotUpdate(state, file, server);\n },\n };\n}\n"]}
@@ -0,0 +1,3 @@
1
+ import type { Plugin } from "vite";
2
+ export declare function gtkxUndeclaredLibrary(mode?: string): Plugin;
3
+ //# 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":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAc,MAAM,MAAM,CAAC;AAyC/C,wBAAgB,qBAAqB,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAyB3D"}
@@ -0,0 +1,47 @@
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 namespaceOf = (identifier) => identifier.slice(0, identifier.indexOf("-")).toLowerCase();
12
+ const findGirIdentifier = (girPath, namespace) => discoverGirNamespaces(girPath).find((identifier) => namespaceOf(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
+ export 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
+ const resolved = await this.resolve(source, importer, { ...options, skipSelf: true });
41
+ if (resolved !== null)
42
+ return;
43
+ throw undeclaredLibraryError(source, namespace, await girSearchPaths(state));
44
+ },
45
+ };
46
+ }
47
+ //# 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":"AAAA,OAAO,EAAE,qBAAqB,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACtE,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAG1C,MAAM,wBAAwB,GAAG,kCAAkC,CAAC;AAQpE,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;IACD,OAAO,KAAK,CAAC,OAAO,CAAC;AACzB,CAAC,CAAC;AAEF,MAAM,WAAW,GAAG,CAAC,UAAkB,EAAU,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;AAE/G,MAAM,iBAAiB,GAAG,CAAC,OAAiB,EAAE,SAAiB,EAAsB,EAAE,CACnF,qBAAqB,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,WAAW,CAAC,UAAU,CAAC,KAAK,SAAS,CAAC,CAAC;AAE/F,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;YACjG,iBAAiB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,SAAS,8BAA8B;YACpF,kGAAkG;YAClG,qDAAqD,CAC5D,CAAC;IACN,CAAC;IAED,OAAO,IAAI,KAAK,CACZ,mBAAmB,MAAM,WAAW,UAAU,sCAAsC;QAChF,QAAQ,UAAU,8EAA8E,CACvG,CAAC;AACN,CAAC,CAAC;AAEF,MAAM,UAAU,qBAAqB,CAAC,IAAa;IAC/C,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;YAC7D,IAAI,SAAS,KAAK,SAAS;gBAAE,OAAO;YAEpC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,GAAG,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;YACtF,IAAI,QAAQ,KAAK,IAAI;gBAAE,OAAO;YAE9B,MAAM,sBAAsB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC;QACjF,CAAC;KACJ,CAAC;AACN,CAAC","sourcesContent":["import { discoverGirNamespaces, resolveGirPath } from \"@gtkx/codegen\";\nimport { loadConfig } from \"@gtkx/config\";\nimport type { Plugin, UserConfig } from \"vite\";\n\nconst GENERATED_MODULE_PATTERN = /^@gtkx\\/(?:gi|jsx)\\/([a-z0-9]+)$/;\n\ntype PluginState = {\n root: string;\n mode: string | undefined;\n girPath: string[] | null;\n};\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 return state.girPath;\n};\n\nconst namespaceOf = (identifier: string): string => identifier.slice(0, identifier.indexOf(\"-\")).toLowerCase();\n\nconst findGirIdentifier = (girPath: string[], namespace: string): string | undefined =>\n discoverGirNamespaces(girPath).find((identifier) => namespaceOf(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\nexport function 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 if (namespace === undefined) return;\n\n const resolved = await this.resolve(source, importer, { ...options, skipSelf: true });\n if (resolved !== null) return;\n\n throw undeclaredLibraryError(source, namespace, await girSearchPaths(state));\n },\n };\n}\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
+ export declare const createVirtualNamespace: (prefix: string) => VirtualNamespace;
21
+ export {};
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,eAAO,MAAM,sBAAsB,WAAY,MAAM,KAAG,gBAevD,CAAC"}
@@ -0,0 +1,18 @@
1
+ export 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 undefined;
14
+ return toVirtualId(resolved.id);
15
+ },
16
+ };
17
+ };
18
+ //# 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,CAAC,MAAM,sBAAsB,GAAG,CAAC,MAAc,EAAoB,EAAE;IACvE,MAAM,WAAW,GAAG,CAAC,MAAc,EAAU,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC;IAChE,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;YACH,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,QAAQ;gBAAE,OAAO,SAAS,CAAC;YACrD,OAAO,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QACpC,CAAC;KACJ,CAAC;AACN,CAAC,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\nexport const createVirtualNamespace = (prefix: string): VirtualNamespace => {\n const toVirtualId = (realId: string): string => prefix + realId;\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 if (!resolved || resolved.external) return undefined;\n return toVirtualId(resolved.id);\n },\n };\n};\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":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAInC;;;;;GAKG;AACH,QAAA,MAAM,IAAI,QAAO,MAAM,EAAmE,CAAC;eAE5E,IAAI"}
@@ -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":"AAAA,OAAO,UAAU,MAAM,cAAc,CAAC;AAEtC,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;AAE3F,eAAe,IAAI,CAAC","sourcesContent":["import gtkxVitest from \"@gtkx/vitest\";\nimport type { Plugin } from \"vite\";\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()];\n\nexport default gtkx;\n"]}
package/env.d.ts CHANGED
@@ -1,11 +1,139 @@
1
1
  /// <reference types="vite/client" />
2
+ /// <reference types="@gtkx/config/env" />
2
3
 
3
- declare module "*.css?url" {
4
- const path: string;
5
- export default path;
4
+ declare module "*.png" {
5
+ const resourceUri: string;
6
+ export const path: string;
7
+ export default resourceUri;
8
+ }
9
+
10
+ declare module "*.jpg" {
11
+ const resourceUri: string;
12
+ export const path: string;
13
+ export default resourceUri;
14
+ }
15
+
16
+ declare module "*.jpeg" {
17
+ const resourceUri: string;
18
+ export const path: string;
19
+ export default resourceUri;
20
+ }
21
+
22
+ declare module "*.gif" {
23
+ const resourceUri: string;
24
+ export const path: string;
25
+ export default resourceUri;
26
+ }
27
+
28
+ declare module "*.svg" {
29
+ const resourceUri: string;
30
+ export const path: string;
31
+ export default resourceUri;
32
+ }
33
+
34
+ declare module "*.webp" {
35
+ const resourceUri: string;
36
+ export const path: string;
37
+ export default resourceUri;
38
+ }
39
+
40
+ declare module "*.webm" {
41
+ const resourceUri: string;
42
+ export const path: string;
43
+ export default resourceUri;
44
+ }
45
+
46
+ declare module "*.mp4" {
47
+ const resourceUri: string;
48
+ export const path: string;
49
+ export default resourceUri;
50
+ }
51
+
52
+ declare module "*.ogg" {
53
+ const resourceUri: string;
54
+ export const path: string;
55
+ export default resourceUri;
56
+ }
57
+
58
+ declare module "*.mp3" {
59
+ const resourceUri: string;
60
+ export const path: string;
61
+ export default resourceUri;
62
+ }
63
+
64
+ declare module "*.wav" {
65
+ const resourceUri: string;
66
+ export const path: string;
67
+ export default resourceUri;
68
+ }
69
+
70
+ declare module "*.flac" {
71
+ const resourceUri: string;
72
+ export const path: string;
73
+ export default resourceUri;
74
+ }
75
+
76
+ declare module "*.aac" {
77
+ const resourceUri: string;
78
+ export const path: string;
79
+ export default resourceUri;
80
+ }
81
+
82
+ declare module "*.woff" {
83
+ const resourceUri: string;
84
+ export const path: string;
85
+ export default resourceUri;
86
+ }
87
+
88
+ declare module "*.woff2" {
89
+ const resourceUri: string;
90
+ export const path: string;
91
+ export default resourceUri;
92
+ }
93
+
94
+ declare module "*.eot" {
95
+ const resourceUri: string;
96
+ export const path: string;
97
+ export default resourceUri;
98
+ }
99
+
100
+ declare module "*.ttf" {
101
+ const resourceUri: string;
102
+ export const path: string;
103
+ export default resourceUri;
104
+ }
105
+
106
+ declare module "*.otf" {
107
+ const resourceUri: string;
108
+ export const path: string;
109
+ export default resourceUri;
110
+ }
111
+
112
+ declare module "*.ico" {
113
+ const resourceUri: string;
114
+ export const path: string;
115
+ export default resourceUri;
116
+ }
117
+
118
+ declare module "*.avif" {
119
+ const resourceUri: string;
120
+ export const path: string;
121
+ export default resourceUri;
6
122
  }
7
123
 
8
124
  declare module "*.data" {
125
+ const resourceUri: string;
126
+ export const path: string;
127
+ export default resourceUri;
128
+ }
129
+
130
+ declare module "*.gpa" {
131
+ const resourceUri: string;
132
+ export const path: string;
133
+ export default resourceUri;
134
+ }
135
+
136
+ declare module "*.css?url" {
9
137
  const path: string;
10
138
  export default path;
11
139
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@gtkx/cli",
3
- "version": "0.20.0",
4
- "description": "CLI for GTKX - create and develop GTK4 React applications",
3
+ "version": "1.0.0-rc.1",
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,40 @@
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.0.1",
64
- "@swc/core": "^1.15.11",
65
- "citty": "^0.2.1",
66
- "ejs": "^4.0.1",
57
+ "@babel/core": "^8.0.1",
58
+ "@babel/preset-typescript": "^8.0.1",
59
+ "@swc/core": "^1.15.43",
60
+ "babel-plugin-react-compiler": "^1.0.0",
61
+ "citty": "^0.2.2",
62
+ "fast-xml-parser": "^5.10.0",
67
63
  "react-refresh": "^0.18.0",
68
- "vite": "^7.3.1",
69
- "@gtkx/ffi": "0.20.0",
70
- "@gtkx/mcp": "0.20.0",
71
- "@gtkx/react": "0.20.0"
64
+ "vite": "^8.1.4",
65
+ "@gtkx/codegen": "1.0.0-rc.1",
66
+ "@gtkx/runtime": "1.0.0-rc.1",
67
+ "@gtkx/mcp": "1.0.0-rc.1",
68
+ "@gtkx/utils": "1.0.0-rc.1",
69
+ "@gtkx/config": "1.0.0-rc.1",
70
+ "create-gtkx": "1.0.0-rc.1",
71
+ "@gtkx/vitest": "1.0.0-rc.1"
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.56.10",
77
- "@gtkx/testing": "0.20.0"
76
+ "vitest": "^4.1.10",
77
+ "@gtkx/testing": "1.0.0-rc.1"
78
78
  },
79
79
  "peerDependencies": {
80
- "react": "^19",
81
- "@gtkx/testing": "0.20.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
+ "build": "tsc -b tsconfig.lib.json",
84
+ "typecheck": "tsc -b --emitDeclarationOnly",
85
+ "release": "tsx ../../scripts/release-package.ts"
92
86
  }
93
87
  }
@@ -0,0 +1,13 @@
1
+ declare module "babel-plugin-react-compiler" {
2
+ import type { PluginTarget } from "@babel/core";
3
+
4
+ const plugin: PluginTarget & { default?: PluginTarget };
5
+ export default plugin;
6
+ }
7
+
8
+ declare module "@babel/preset-typescript" {
9
+ import type { PresetTarget } from "@babel/core";
10
+
11
+ const preset: PresetTarget & { default?: PresetTarget };
12
+ export default preset;
13
+ }