@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,121 @@
1
+ import { sortStrings, warn } from "@gtkx/utils";
2
+ import { createHash } from "node:crypto";
3
+ import { copyFileSync, mkdirSync, mkdtempSync, readdirSync, readFileSync, writeFileSync } from "node:fs";
4
+ import { tmpdir } from "node:os";
5
+ import { dirname, join, relative } from "node:path";
6
+ import { DATA_IMPORT_PREFIX } from "../internal/data-dir.js";
7
+ import { removeTempDir } from "../internal/staging-dir.js";
8
+ import { compileSchemas } from "./compile.js";
9
+ import { parseSchemaXml, SchemaParseError } from "./parser.js";
10
+ import { renderEnvModule } from "./render.js";
11
+ const SCHEMA_SUFFIX = ".gschema.xml";
12
+ const STAGED_NAME_LENGTH = 16;
13
+ const prependSchemaDir = (dir, existing) => {
14
+ if (existing === undefined || existing.length === 0) {
15
+ return dir;
16
+ }
17
+ if (existing.split(":").includes(dir)) {
18
+ return existing;
19
+ }
20
+ return `${dir}:${existing}`;
21
+ };
22
+ const stagedSchemaName = (filePath) => `${createHash("sha1").update(filePath).digest("hex").slice(0, STAGED_NAME_LENGTH)}${SCHEMA_SUFFIX}`;
23
+ const stageSchema = (dir, filePath) => {
24
+ copyFileSync(filePath, join(dir, stagedSchemaName(filePath)));
25
+ };
26
+ const toForwardSlashes = (value) => value.replaceAll(/[/\\]/g, "/");
27
+ const getModuleSpecifier = (dataDirAbs, filePath) => `${DATA_IMPORT_PREFIX}/${toForwardSlashes(relative(dataDirAbs, filePath))}`;
28
+ const readVisibleEntries = (dir) => {
29
+ try {
30
+ return readdirSync(dir, { withFileTypes: true }).filter((entry) => !entry.name.startsWith("."));
31
+ }
32
+ catch {
33
+ return [];
34
+ }
35
+ };
36
+ const isSchemaFile = (entry) => entry.isFile() && entry.name.endsWith(SCHEMA_SUFFIX);
37
+ const collectSchemaFiles = (dir, found) => {
38
+ for (const entry of readVisibleEntries(dir)) {
39
+ const full = join(dir, entry.name);
40
+ if (entry.isDirectory()) {
41
+ collectSchemaFiles(full, found);
42
+ }
43
+ else if (isSchemaFile(entry)) {
44
+ found.push(full);
45
+ }
46
+ }
47
+ };
48
+ const findSchemaFiles = (dataDir) => {
49
+ const found = [];
50
+ collectSchemaFiles(dataDir, found);
51
+ return sortStrings(found);
52
+ };
53
+ const stageAndCompileProjectSchemas = (root, dataDir) => {
54
+ if (dataDir === null) {
55
+ return null;
56
+ }
57
+ const schemaFiles = findSchemaFiles(join(root, dataDir));
58
+ if (schemaFiles.length === 0) {
59
+ return null;
60
+ }
61
+ const dir = mkdtempSync(join(tmpdir(), "gtkx-schemas-"));
62
+ for (const filePath of schemaFiles) {
63
+ stageSchema(dir, filePath);
64
+ }
65
+ compileSchemas(dir);
66
+ process.once("exit", () => {
67
+ removeTempDir(dir);
68
+ });
69
+ return dir;
70
+ };
71
+ const schemaEnvPath = (rootDir) => join(rootDir, "node_modules", ".gtkx", "env.d.ts");
72
+ const parseSchemaFileOrWarn = (filePath, dataDirAbs) => {
73
+ const specifier = getModuleSpecifier(dataDirAbs, filePath);
74
+ try {
75
+ return parseSchemaXml(readFileSync(filePath, "utf8"), specifier);
76
+ }
77
+ catch (error) {
78
+ if (!(error instanceof SchemaParseError)) {
79
+ throw error;
80
+ }
81
+ warn(`Skipping ${filePath} in schema type generation: ${error.message}`);
82
+ return null;
83
+ }
84
+ };
85
+ const parseProjectSchemas = (schemaFiles, dataDirAbs) => {
86
+ const parsed = [];
87
+ for (const filePath of schemaFiles) {
88
+ const result = parseSchemaFileOrWarn(filePath, dataDirAbs);
89
+ if (result !== null) {
90
+ parsed.push(result);
91
+ }
92
+ }
93
+ return parsed;
94
+ };
95
+ const readFileOrNull = (path) => {
96
+ try {
97
+ return readFileSync(path, "utf8");
98
+ }
99
+ catch {
100
+ return null;
101
+ }
102
+ };
103
+ const didWriteChanges = (path, content) => {
104
+ if (readFileOrNull(path) === content) {
105
+ return false;
106
+ }
107
+ mkdirSync(dirname(path), { recursive: true });
108
+ writeFileSync(path, content);
109
+ return true;
110
+ };
111
+ const emitSchemaEnv = (rootDir, dataDir) => {
112
+ const dataDirAbs = dataDir === null ? null : join(rootDir, dataDir);
113
+ const schemaFiles = dataDirAbs === null ? [] : findSchemaFiles(dataDirAbs);
114
+ const parsed = dataDirAbs === null ? [] : parseProjectSchemas(schemaFiles, dataDirAbs);
115
+ const content = renderEnvModule(parsed);
116
+ const path = schemaEnvPath(rootDir);
117
+ const isWritten = didWriteChanges(path, content);
118
+ return { path, written: isWritten };
119
+ };
120
+ export { SCHEMA_SUFFIX, prependSchemaDir, stageSchema, findSchemaFiles, stageAndCompileProjectSchemas, schemaEnvPath, emitSchemaEnv, };
121
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/settings/schema.ts"],"names":[],"mappings":"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","sourcesContent":["import { sortStrings, warn } from \"@gtkx/utils\";\nimport { createHash } from \"node:crypto\";\nimport { copyFileSync, type Dirent, mkdirSync, mkdtempSync, readdirSync, readFileSync, writeFileSync } from \"node:fs\";\nimport { tmpdir } from \"node:os\";\nimport { dirname, join, relative } from \"node:path\";\nimport { DATA_IMPORT_PREFIX } from \"../internal/data-dir.js\";\nimport { removeTempDir } from \"../internal/staging-dir.js\";\nimport { compileSchemas } from \"./compile.js\";\nimport { type ParsedSchemaFile, parseSchemaXml, SchemaParseError } from \"./parser.js\";\nimport { renderEnvModule } from \"./render.js\";\n\ntype SchemaEnvResult = {\n path: string;\n written: boolean;\n};\n\nconst SCHEMA_SUFFIX = \".gschema.xml\";\nconst STAGED_NAME_LENGTH = 16;\n\nconst prependSchemaDir = (dir: string, existing: string | undefined): string => {\n if (existing === undefined || existing.length === 0) {\n return dir;\n }\n\n if (existing.split(\":\").includes(dir)) {\n return existing;\n }\n\n return `${dir}:${existing}`;\n};\n\nconst stagedSchemaName = (filePath: string): string =>\n `${createHash(\"sha1\").update(filePath).digest(\"hex\").slice(0, STAGED_NAME_LENGTH)}${SCHEMA_SUFFIX}`;\n\nconst stageSchema = (dir: string, filePath: string): void => {\n copyFileSync(filePath, join(dir, stagedSchemaName(filePath)));\n};\n\nconst toForwardSlashes = (value: string): string => value.replaceAll(/[/\\\\]/g, \"/\");\n\nconst getModuleSpecifier = (dataDirAbs: string, filePath: string): string =>\n `${DATA_IMPORT_PREFIX}/${toForwardSlashes(relative(dataDirAbs, filePath))}`;\n\nconst readVisibleEntries = (dir: string): Dirent[] => {\n try {\n return readdirSync(dir, { withFileTypes: true }).filter((entry) => !entry.name.startsWith(\".\"));\n } catch {\n return [];\n }\n};\n\nconst isSchemaFile = (entry: Dirent): boolean => entry.isFile() && entry.name.endsWith(SCHEMA_SUFFIX);\n\nconst collectSchemaFiles = (dir: string, found: string[]): void => {\n for (const entry of readVisibleEntries(dir)) {\n const full = join(dir, entry.name);\n\n if (entry.isDirectory()) {\n collectSchemaFiles(full, found);\n } else if (isSchemaFile(entry)) {\n found.push(full);\n }\n }\n};\n\nconst findSchemaFiles = (dataDir: string): string[] => {\n const found: string[] = [];\n collectSchemaFiles(dataDir, found);\n\n return sortStrings(found);\n};\n\nconst stageAndCompileProjectSchemas = (root: string, dataDir: string | null): string | null => {\n if (dataDir === null) {\n return null;\n }\n\n const schemaFiles = findSchemaFiles(join(root, dataDir));\n\n if (schemaFiles.length === 0) {\n return null;\n }\n\n const dir = mkdtempSync(join(tmpdir(), \"gtkx-schemas-\"));\n\n for (const filePath of schemaFiles) {\n stageSchema(dir, filePath);\n }\n\n compileSchemas(dir);\n\n process.once(\"exit\", () => {\n removeTempDir(dir);\n });\n\n return dir;\n};\n\nconst schemaEnvPath = (rootDir: string): string => join(rootDir, \"node_modules\", \".gtkx\", \"env.d.ts\");\n\nconst parseSchemaFileOrWarn = (filePath: string, dataDirAbs: string): ParsedSchemaFile | null => {\n const specifier = getModuleSpecifier(dataDirAbs, filePath);\n\n try {\n return parseSchemaXml(readFileSync(filePath, \"utf8\"), specifier);\n } catch (error) {\n if (!(error instanceof SchemaParseError)) {\n throw error;\n }\n\n warn(`Skipping ${filePath} in schema type generation: ${error.message}`);\n\n return null;\n }\n};\n\nconst parseProjectSchemas = (schemaFiles: string[], dataDirAbs: string): ParsedSchemaFile[] => {\n const parsed: ParsedSchemaFile[] = [];\n\n for (const filePath of schemaFiles) {\n const result = parseSchemaFileOrWarn(filePath, dataDirAbs);\n\n if (result !== null) {\n parsed.push(result);\n }\n }\n\n return parsed;\n};\n\nconst readFileOrNull = (path: string): string | null => {\n try {\n return readFileSync(path, \"utf8\");\n } catch {\n return null;\n }\n};\n\nconst didWriteChanges = (path: string, content: string): boolean => {\n if (readFileOrNull(path) === content) {\n return false;\n }\n\n mkdirSync(dirname(path), { recursive: true });\n writeFileSync(path, content);\n\n return true;\n};\n\nconst emitSchemaEnv = (rootDir: string, dataDir: string | null): SchemaEnvResult => {\n const dataDirAbs = dataDir === null ? null : join(rootDir, dataDir);\n const schemaFiles = dataDirAbs === null ? [] : findSchemaFiles(dataDirAbs);\n const parsed = dataDirAbs === null ? [] : parseProjectSchemas(schemaFiles, dataDirAbs);\n const content = renderEnvModule(parsed);\n const path = schemaEnvPath(rootDir);\n const isWritten = didWriteChanges(path, content);\n\n return { path, written: isWritten };\n};\n\nexport {\n SCHEMA_SUFFIX,\n prependSchemaDir,\n stageSchema,\n findSchemaFiles,\n stageAndCompileProjectSchemas,\n schemaEnvPath,\n emitSchemaEnv,\n};\n"]}
@@ -0,0 +1,5 @@
1
+ declare const ASSET_EXTENSIONS: string[];
2
+ declare const ASSET_RE: RegExp;
3
+ declare const ASSET_PATH_RE: RegExp;
4
+ export { ASSET_EXTENSIONS, ASSET_RE, ASSET_PATH_RE };
5
+ //# sourceMappingURL=asset-extensions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"asset-extensions.d.ts","sourceRoot":"","sources":["../../src/vite-plugins/asset-extensions.ts"],"names":[],"mappings":"AAAA,QAAA,MAAM,gBAAgB,UAuBrB,CAAC;AAEF,QAAA,MAAM,QAAQ,QAAoE,CAAC;AACnF,QAAA,MAAM,aAAa,QAA6E,CAAC;AAEjG,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,aAAa,EAAE,CAAC"}
@@ -0,0 +1,28 @@
1
+ const ASSET_EXTENSIONS = [
2
+ "png",
3
+ "jpg",
4
+ "jpeg",
5
+ "gif",
6
+ "svg",
7
+ "webp",
8
+ "webm",
9
+ "mp4",
10
+ "ogg",
11
+ "mp3",
12
+ "wav",
13
+ "flac",
14
+ "aac",
15
+ "woff",
16
+ "woff2",
17
+ "eot",
18
+ "ttf",
19
+ "otf",
20
+ "ico",
21
+ "avif",
22
+ "data",
23
+ "gpa",
24
+ ];
25
+ const ASSET_RE = new RegExp(String.raw `\.(?:${ASSET_EXTENSIONS.join("|")})$`, "i");
26
+ const ASSET_PATH_RE = new RegExp(String.raw `\.(?:${ASSET_EXTENSIONS.join("|")})(?:\?.*)?$`, "i");
27
+ export { ASSET_EXTENSIONS, ASSET_RE, ASSET_PATH_RE };
28
+ //# sourceMappingURL=asset-extensions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"asset-extensions.js","sourceRoot":"","sources":["../../src/vite-plugins/asset-extensions.ts"],"names":[],"mappings":"AAAA,MAAM,gBAAgB,GAAG;IACrB,KAAK;IACL,KAAK;IACL,MAAM;IACN,KAAK;IACL,KAAK;IACL,MAAM;IACN,MAAM;IACN,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,MAAM;IACN,KAAK;IACL,MAAM;IACN,OAAO;IACP,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,MAAM;IACN,MAAM;IACN,KAAK;CACR,CAAC;AAEF,MAAM,QAAQ,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,GAAG,CAAA,QAAQ,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AACnF,MAAM,aAAa,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,GAAG,CAAA,QAAQ,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC;AAEjG,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,aAAa,EAAE,CAAC","sourcesContent":["const ASSET_EXTENSIONS = [\n \"png\",\n \"jpg\",\n \"jpeg\",\n \"gif\",\n \"svg\",\n \"webp\",\n \"webm\",\n \"mp4\",\n \"ogg\",\n \"mp3\",\n \"wav\",\n \"flac\",\n \"aac\",\n \"woff\",\n \"woff2\",\n \"eot\",\n \"ttf\",\n \"otf\",\n \"ico\",\n \"avif\",\n \"data\",\n \"gpa\",\n];\n\nconst ASSET_RE = new RegExp(String.raw`\\.(?:${ASSET_EXTENSIONS.join(\"|\")})$`, \"i\");\nconst ASSET_PATH_RE = new RegExp(String.raw`\\.(?:${ASSET_EXTENSIONS.join(\"|\")})(?:\\?.*)?$`, \"i\");\n\nexport { ASSET_EXTENSIONS, ASSET_RE, ASSET_PATH_RE };\n"]}
@@ -0,0 +1,4 @@
1
+ import type { Plugin } from "vite";
2
+ declare function gtkxBuiltUrl(assetBase?: string): Plugin;
3
+ export { gtkxBuiltUrl };
4
+ //# sourceMappingURL=built-url.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"built-url.d.ts","sourceRoot":"","sources":["../../src/vite-plugins/built-url.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AA4BnC,iBAAS,YAAY,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAmBhD;AAED,OAAO,EAAE,YAAY,EAAE,CAAC"}
@@ -0,0 +1,36 @@
1
+ const renderAssetUrl = (filename, type, assetBase) => {
2
+ if (type !== "asset") {
3
+ return undefined;
4
+ }
5
+ if (assetBase) {
6
+ const executableDir = "require(\"path\").dirname(process.execPath)";
7
+ return {
8
+ runtime: `require("path").join(${executableDir},` +
9
+ `${JSON.stringify(assetBase)},${JSON.stringify(filename)})`,
10
+ };
11
+ }
12
+ const filenameLiteral = JSON.stringify(`./${filename}`);
13
+ return {
14
+ runtime: `new URL(${filenameLiteral}, import.meta.url).pathname`,
15
+ };
16
+ };
17
+ function gtkxBuiltUrl(assetBase) {
18
+ return {
19
+ name: "gtkx:built-url",
20
+ apply: "build",
21
+ config(userConfig) {
22
+ if (userConfig.experimental?.renderBuiltUrl) {
23
+ return;
24
+ }
25
+ return {
26
+ experimental: {
27
+ renderBuiltUrl(filename, { type }) {
28
+ return renderAssetUrl(filename, type, assetBase);
29
+ },
30
+ },
31
+ };
32
+ },
33
+ };
34
+ }
35
+ export { gtkxBuiltUrl };
36
+ //# sourceMappingURL=built-url.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"built-url.js","sourceRoot":"","sources":["../../src/vite-plugins/built-url.ts"],"names":[],"mappings":"AAEA,MAAM,cAAc,GAAG,CACnB,QAAgB,EAChB,IAAY,EACZ,SAA6B,EACE,EAAE;IACjC,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;QACnB,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,IAAI,SAAS,EAAE,CAAC;QACZ,MAAM,aAAa,GAAG,6CAA6C,CAAC;QAEpE,OAAO;YACH,OAAO,EACH,wBAAwB,aAAa,GAAG;gBACxC,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG;SAClE,CAAC;IACN,CAAC;IAED,MAAM,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,QAAQ,EAAE,CAAC,CAAC;IAExD,OAAO;QACH,OAAO,EAAE,WAAW,eAAe,6BAA6B;KACnE,CAAC;AACN,CAAC,CAAC;AAEF,SAAS,YAAY,CAAC,SAAkB;IACpC,OAAO;QACH,IAAI,EAAE,gBAAgB;QACtB,KAAK,EAAE,OAAO;QAEd,MAAM,CAAC,UAAU;YACb,IAAI,UAAU,CAAC,YAAY,EAAE,cAAc,EAAE,CAAC;gBAC1C,OAAO;YACX,CAAC;YAED,OAAO;gBACH,YAAY,EAAE;oBACV,cAAc,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE;wBAC7B,OAAO,cAAc,CAAC,QAAQ,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;oBACrD,CAAC;iBACJ;aACJ,CAAC;QACN,CAAC;KACJ,CAAC;AACN,CAAC;AAED,OAAO,EAAE,YAAY,EAAE,CAAC","sourcesContent":["import type { Plugin } from \"vite\";\n\nconst renderAssetUrl = (\n filename: string,\n type: string,\n assetBase: string | undefined,\n): { runtime: string } | undefined => {\n if (type !== \"asset\") {\n return undefined;\n }\n\n if (assetBase) {\n const executableDir = \"require(\\\"path\\\").dirname(process.execPath)\";\n\n return {\n runtime:\n `require(\"path\").join(${executableDir},` +\n `${JSON.stringify(assetBase)},${JSON.stringify(filename)})`,\n };\n }\n\n const filenameLiteral = JSON.stringify(`./${filename}`);\n\n return {\n runtime: `new URL(${filenameLiteral}, import.meta.url).pathname`,\n };\n};\n\nfunction gtkxBuiltUrl(assetBase?: string): Plugin {\n return {\n name: \"gtkx:built-url\",\n apply: \"build\",\n\n config(userConfig) {\n if (userConfig.experimental?.renderBuiltUrl) {\n return;\n }\n\n return {\n experimental: {\n renderBuiltUrl(filename, { type }) {\n return renderAssetUrl(filename, type, assetBase);\n },\n },\n };\n },\n };\n}\n\nexport { gtkxBuiltUrl };\n"]}
@@ -0,0 +1,4 @@
1
+ import type { Plugin } from "vite";
2
+ declare function gtkxCss(): Plugin;
3
+ export { gtkxCss };
4
+ //# sourceMappingURL=css.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"css.d.ts","sourceRoot":"","sources":["../../src/vite-plugins/css.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAqCnC,iBAAS,OAAO,IAAI,MAAM,CAazB;AAED,OAAO,EAAE,OAAO,EAAE,CAAC"}
@@ -0,0 +1,38 @@
1
+ import { readFileSync } from "node:fs";
2
+ import { createVirtualNamespace } from "./virtual-module.js";
3
+ const CSS_RE = /\.css$/i;
4
+ const INJECT_SUFFIX = "?inject";
5
+ const VIRTUAL_PREFIX = "\0gtkx-css:";
6
+ const { isVirtual, fromVirtualId, resolveToVirtual } = createVirtualNamespace(VIRTUAL_PREFIX);
7
+ const resolveCssId = async (ctx, request) => {
8
+ if (!CSS_RE.test(request.source)) {
9
+ return;
10
+ }
11
+ const virtualId = await resolveToVirtual(ctx, request);
12
+ if (virtualId === undefined) {
13
+ return;
14
+ }
15
+ return virtualId + INJECT_SUFFIX;
16
+ };
17
+ const loadInjectedCss = (id) => {
18
+ if (!isVirtual(id) || !id.endsWith(INJECT_SUFFIX)) {
19
+ return;
20
+ }
21
+ const filePath = fromVirtualId(id.slice(0, -INJECT_SUFFIX.length));
22
+ const content = readFileSync(filePath, "utf8");
23
+ return ["import { injectGlobal } from \"@gtkx/css\";", `injectGlobal(${JSON.stringify(content)});`].join("\n");
24
+ };
25
+ function gtkxCss() {
26
+ return {
27
+ name: "gtkx:css",
28
+ enforce: "pre",
29
+ resolveId(source, importer, options) {
30
+ return resolveCssId(this, { source, importer, options });
31
+ },
32
+ load(id) {
33
+ return loadInjectedCss(id);
34
+ },
35
+ };
36
+ }
37
+ export { gtkxCss };
38
+ //# sourceMappingURL=css.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"css.js","sourceRoot":"","sources":["../../src/vite-plugins/css.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAK7D,MAAM,MAAM,GAAG,SAAS,CAAC;AACzB,MAAM,aAAa,GAAG,SAAS,CAAC;AAChC,MAAM,cAAc,GAAG,aAAa,CAAC;AACrC,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,gBAAgB,EAAE,GAAG,sBAAsB,CAAC,cAAc,CAAC,CAAC;AAE9F,MAAM,YAAY,GAAG,KAAK,EAAE,GAAsB,EAAE,OAA0B,EAA+B,EAAE;IAC3G,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAC/B,OAAO;IACX,CAAC;IAED,MAAM,SAAS,GAAG,MAAM,gBAAgB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IAEvD,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;QAC1B,OAAO;IACX,CAAC;IAED,OAAO,SAAS,GAAG,aAAa,CAAC;AACrC,CAAC,CAAC;AAEF,MAAM,eAAe,GAAG,CAAC,EAAU,EAAsB,EAAE;IACvD,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;QAChD,OAAO;IACX,CAAC;IAED,MAAM,QAAQ,GAAG,aAAa,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC;IACnE,MAAM,OAAO,GAAG,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAE/C,OAAO,CAAC,6CAA6C,EAAE,gBAAgB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACnH,CAAC,CAAC;AAEF,SAAS,OAAO;IACZ,OAAO;QACH,IAAI,EAAE,UAAU;QAChB,OAAO,EAAE,KAAK;QAEd,SAAS,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO;YAC/B,OAAO,YAAY,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;QAC7D,CAAC;QAED,IAAI,CAAC,EAAE;YACH,OAAO,eAAe,CAAC,EAAE,CAAC,CAAC;QAC/B,CAAC;KACJ,CAAC;AACN,CAAC;AAED,OAAO,EAAE,OAAO,EAAE,CAAC","sourcesContent":["import type { Plugin } from \"vite\";\nimport { readFileSync } from \"node:fs\";\nimport { createVirtualNamespace } from \"./virtual-module.js\";\n\ntype CssResolveContext = Parameters<typeof resolveToVirtual>[0];\ntype CssResolveRequest = Parameters<typeof resolveToVirtual>[1];\n\nconst CSS_RE = /\\.css$/i;\nconst INJECT_SUFFIX = \"?inject\";\nconst VIRTUAL_PREFIX = \"\\0gtkx-css:\";\nconst { isVirtual, fromVirtualId, resolveToVirtual } = createVirtualNamespace(VIRTUAL_PREFIX);\n\nconst resolveCssId = async (ctx: CssResolveContext, request: CssResolveRequest): Promise<string | undefined> => {\n if (!CSS_RE.test(request.source)) {\n return;\n }\n\n const virtualId = await resolveToVirtual(ctx, request);\n\n if (virtualId === undefined) {\n return;\n }\n\n return virtualId + INJECT_SUFFIX;\n};\n\nconst loadInjectedCss = (id: string): string | undefined => {\n if (!isVirtual(id) || !id.endsWith(INJECT_SUFFIX)) {\n return;\n }\n\n const filePath = fromVirtualId(id.slice(0, -INJECT_SUFFIX.length));\n const content = readFileSync(filePath, \"utf8\");\n\n return [\"import { injectGlobal } from \\\"@gtkx/css\\\";\", `injectGlobal(${JSON.stringify(content)});`].join(\"\\n\");\n};\n\nfunction gtkxCss(): Plugin {\n return {\n name: \"gtkx:css\",\n enforce: \"pre\",\n\n resolveId(source, importer, options) {\n return resolveCssId(this, { source, importer, options });\n },\n\n load(id) {\n return loadInjectedCss(id);\n },\n };\n}\n\nexport { gtkxCss };\n"]}
@@ -0,0 +1,8 @@
1
+ declare const REFRESH_REG = "$RefreshReg$";
2
+ declare const REFRESH_SIG = "$RefreshSig$";
3
+ declare const REFRESH_RUNTIME_SPECIFIER = "@gtkx/cli/refresh-runtime";
4
+ declare const shouldTransformForRefresh: (id: string, transformOptions: {
5
+ ssr?: boolean | undefined;
6
+ } | undefined) => boolean;
7
+ export { REFRESH_REG, REFRESH_SIG, REFRESH_RUNTIME_SPECIFIER, shouldTransformForRefresh };
8
+ //# sourceMappingURL=refresh-filter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"refresh-filter.d.ts","sourceRoot":"","sources":["../../../src/vite-plugins/fast-refresh/refresh-filter.ts"],"names":[],"mappings":"AAAA,QAAA,MAAM,WAAW,iBAAiB,CAAC;AACnC,QAAA,MAAM,WAAW,iBAAiB,CAAC;AACnC,QAAA,MAAM,yBAAyB,8BAA8B,CAAC;AAI9D,QAAA,MAAM,yBAAyB,GAC3B,IAAI,MAAM,EACV,kBAAkB;IAAE,GAAG,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;CAAE,GAAG,SAAS,KAC5D,OAcF,CAAC;AAEF,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,CAAC"}
@@ -0,0 +1,19 @@
1
+ const REFRESH_REG = "$RefreshReg$";
2
+ const REFRESH_SIG = "$RefreshSig$";
3
+ const REFRESH_RUNTIME_SPECIFIER = "@gtkx/cli/refresh-runtime";
4
+ const REFRESH_INCLUDE = /\.[tj]sx?$/;
5
+ const REFRESH_EXCLUDE = /node_modules|[/\\]dist[/\\]|[/\\]\.gtkx[/\\]/;
6
+ const shouldTransformForRefresh = (id, transformOptions) => {
7
+ if (!transformOptions?.ssr) {
8
+ return false;
9
+ }
10
+ if (!REFRESH_INCLUDE.test(id)) {
11
+ return false;
12
+ }
13
+ if (REFRESH_EXCLUDE.test(id)) {
14
+ return false;
15
+ }
16
+ return true;
17
+ };
18
+ export { REFRESH_REG, REFRESH_SIG, REFRESH_RUNTIME_SPECIFIER, shouldTransformForRefresh };
19
+ //# sourceMappingURL=refresh-filter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"refresh-filter.js","sourceRoot":"","sources":["../../../src/vite-plugins/fast-refresh/refresh-filter.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,GAAG,cAAc,CAAC;AACnC,MAAM,WAAW,GAAG,cAAc,CAAC;AACnC,MAAM,yBAAyB,GAAG,2BAA2B,CAAC;AAC9D,MAAM,eAAe,GAAG,YAAY,CAAC;AACrC,MAAM,eAAe,GAAG,8CAA8C,CAAC;AAEvE,MAAM,yBAAyB,GAAG,CAC9B,EAAU,EACV,gBAA2D,EACpD,EAAE;IACT,IAAI,CAAC,gBAAgB,EAAE,GAAG,EAAE,CAAC;QACzB,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;QAC5B,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,IAAI,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;QAC3B,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,OAAO,IAAI,CAAC;AAChB,CAAC,CAAC;AAEF,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,CAAC","sourcesContent":["const REFRESH_REG = \"$RefreshReg$\";\nconst REFRESH_SIG = \"$RefreshSig$\";\nconst REFRESH_RUNTIME_SPECIFIER = \"@gtkx/cli/refresh-runtime\";\nconst REFRESH_INCLUDE = /\\.[tj]sx?$/;\nconst REFRESH_EXCLUDE = /node_modules|[/\\\\]dist[/\\\\]|[/\\\\]\\.gtkx[/\\\\]/;\n\nconst shouldTransformForRefresh = (\n id: string,\n transformOptions: { ssr?: boolean | undefined } | undefined,\n): boolean => {\n if (!transformOptions?.ssr) {\n return false;\n }\n\n if (!REFRESH_INCLUDE.test(id)) {\n return false;\n }\n\n if (REFRESH_EXCLUDE.test(id)) {\n return false;\n }\n\n return true;\n};\n\nexport { REFRESH_REG, REFRESH_SIG, REFRESH_RUNTIME_SPECIFIER, shouldTransformForRefresh };\n"]}
@@ -0,0 +1,6 @@
1
+ import type { Plugin } from "vite";
2
+ declare function gtkxSwcRefresh(): Plugin;
3
+ declare function gtkxRefreshRuntime(): Plugin;
4
+ declare const gtkxFastRefresh: () => Plugin[];
5
+ export { gtkxSwcRefresh, gtkxRefreshRuntime, gtkxFastRefresh };
6
+ //# sourceMappingURL=swc-refresh.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"swc-refresh.d.ts","sourceRoot":"","sources":["../../../src/vite-plugins/fast-refresh/swc-refresh.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAmDnC,iBAAS,cAAc,IAAI,MAAM,CAgBhC;AAED,iBAAS,kBAAkB,IAAI,MAAM,CAkBpC;AAED,QAAA,MAAM,eAAe,QAAO,MAAM,EAA8C,CAAC;AAEjF,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,eAAe,EAAE,CAAC"}
@@ -0,0 +1,70 @@
1
+ import { transform } from "@swc/core";
2
+ import { fileURLToPath } from "node:url";
3
+ import { REFRESH_REG, REFRESH_RUNTIME_SPECIFIER, REFRESH_SIG, shouldTransformForRefresh } from "./refresh-filter.js";
4
+ const buildSwcOptions = (id) => {
5
+ const isTsx = id.endsWith(".tsx");
6
+ const isTs = id.endsWith(".ts") || isTsx;
7
+ return {
8
+ filename: id,
9
+ sourceFileName: id,
10
+ sourceMaps: true,
11
+ jsc: {
12
+ parser: isTs ? { syntax: "typescript", tsx: isTsx } : { syntax: "ecmascript", jsx: true },
13
+ transform: {
14
+ react: {
15
+ runtime: "automatic",
16
+ development: true,
17
+ refresh: true,
18
+ },
19
+ },
20
+ target: "es2022",
21
+ },
22
+ };
23
+ };
24
+ const buildRefreshResult = (result) => result.map === undefined ? { code: result.code } : { code: result.code, map: result.map };
25
+ const injectRefreshRegistration = (code, id, transformOptions) => {
26
+ if (!shouldTransformForRefresh(id, transformOptions)) {
27
+ return;
28
+ }
29
+ if (!code.includes(REFRESH_REG) && !code.includes(REFRESH_SIG)) {
30
+ return;
31
+ }
32
+ const header = `
33
+ import { createModuleRegistration as __createModuleRegistration__ } from "${REFRESH_RUNTIME_SPECIFIER}";
34
+ const { ${REFRESH_REG}, ${REFRESH_SIG} } = __createModuleRegistration__(${JSON.stringify(id)});
35
+ `;
36
+ return { code: header + code, map: null };
37
+ };
38
+ function gtkxSwcRefresh() {
39
+ return {
40
+ name: "gtkx:swc-refresh",
41
+ enforce: "pre",
42
+ apply: "serve",
43
+ async transform(code, id, transformOptions) {
44
+ if (!shouldTransformForRefresh(id, transformOptions)) {
45
+ return;
46
+ }
47
+ const result = await transform(code, buildSwcOptions(id));
48
+ return buildRefreshResult(result);
49
+ },
50
+ };
51
+ }
52
+ function gtkxRefreshRuntime() {
53
+ return {
54
+ name: "gtkx:refresh-runtime",
55
+ enforce: "post",
56
+ apply: "serve",
57
+ resolveId(id) {
58
+ if (id !== REFRESH_RUNTIME_SPECIFIER) {
59
+ return;
60
+ }
61
+ return fileURLToPath(import.meta.resolve(REFRESH_RUNTIME_SPECIFIER));
62
+ },
63
+ transform(code, id, transformOptions) {
64
+ return injectRefreshRegistration(code, id, transformOptions);
65
+ },
66
+ };
67
+ }
68
+ const gtkxFastRefresh = () => [gtkxSwcRefresh(), gtkxRefreshRuntime()];
69
+ export { gtkxSwcRefresh, gtkxRefreshRuntime, gtkxFastRefresh };
70
+ //# sourceMappingURL=swc-refresh.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"swc-refresh.js","sourceRoot":"","sources":["../../../src/vite-plugins/fast-refresh/swc-refresh.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Plugin } from \"vite\";\nimport { type Output, type Options as SwcOptions, transform } from \"@swc/core\";\nimport { fileURLToPath } from \"node:url\";\nimport { REFRESH_REG, REFRESH_RUNTIME_SPECIFIER, REFRESH_SIG, shouldTransformForRefresh } from \"./refresh-filter.js\";\n\nconst buildSwcOptions = (id: string): SwcOptions => {\n const isTsx = id.endsWith(\".tsx\");\n const isTs = id.endsWith(\".ts\") || isTsx;\n\n return {\n filename: id,\n sourceFileName: id,\n sourceMaps: true,\n jsc: {\n parser: isTs ? { syntax: \"typescript\", tsx: isTsx } : { syntax: \"ecmascript\", jsx: true },\n transform: {\n react: {\n runtime: \"automatic\",\n development: true,\n refresh: true,\n },\n },\n target: \"es2022\",\n },\n };\n};\n\nconst buildRefreshResult = (result: Output): { code: string; map?: string } =>\n result.map === undefined ? { code: result.code } : { code: result.code, map: result.map };\n\nconst injectRefreshRegistration = (\n code: string,\n id: string,\n transformOptions: { ssr?: boolean | undefined } | undefined,\n): { code: string; map: null } | undefined => {\n if (!shouldTransformForRefresh(id, transformOptions)) {\n return;\n }\n\n if (!code.includes(REFRESH_REG) && !code.includes(REFRESH_SIG)) {\n return;\n }\n\n const header = `\nimport { createModuleRegistration as __createModuleRegistration__ } from \"${REFRESH_RUNTIME_SPECIFIER}\";\nconst { ${REFRESH_REG}, ${REFRESH_SIG} } = __createModuleRegistration__(${JSON.stringify(id)});\n`;\n\n return { code: header + code, map: null };\n};\n\nfunction gtkxSwcRefresh(): Plugin {\n return {\n name: \"gtkx:swc-refresh\",\n enforce: \"pre\",\n apply: \"serve\",\n\n async transform(code, id, transformOptions) {\n if (!shouldTransformForRefresh(id, transformOptions)) {\n return;\n }\n\n const result = await transform(code, buildSwcOptions(id));\n\n return buildRefreshResult(result);\n },\n };\n}\n\nfunction gtkxRefreshRuntime(): Plugin {\n return {\n name: \"gtkx:refresh-runtime\",\n enforce: \"post\",\n apply: \"serve\",\n\n resolveId(id) {\n if (id !== REFRESH_RUNTIME_SPECIFIER) {\n return;\n }\n\n return fileURLToPath(import.meta.resolve(REFRESH_RUNTIME_SPECIFIER));\n },\n\n transform(code, id, transformOptions) {\n return injectRefreshRegistration(code, id, transformOptions);\n },\n };\n}\n\nconst gtkxFastRefresh = (): Plugin[] => [gtkxSwcRefresh(), gtkxRefreshRuntime()];\n\nexport { gtkxSwcRefresh, gtkxRefreshRuntime, gtkxFastRefresh };\n"]}
@@ -0,0 +1,4 @@
1
+ import type { Plugin } from "vite";
2
+ declare function gtkxIcons(): Plugin;
3
+ export { gtkxIcons };
4
+ //# sourceMappingURL=icons.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"icons.d.ts","sourceRoot":"","sources":["../../src/vite-plugins/icons.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAc,MAAM,MAAM,CAAC;AA6C/C,iBAAS,SAAS,IAAI,MAAM,CA0B3B;AAED,OAAO,EAAE,SAAS,EAAE,CAAC"}
@@ -0,0 +1,51 @@
1
+ import { info } from "@gtkx/utils";
2
+ import { readFileSync } from "node:fs";
3
+ import { join } from "node:path";
4
+ import { prependBanner } from "../internal/banner.js";
5
+ import { resolveDataDir } from "../internal/data-dir.js";
6
+ import { listFilesRecursive } from "../internal/list-files.js";
7
+ const ICONS_DIR = "icons";
8
+ const XDG_ENV_BANNER = [
9
+ "process.env.XDG_DATA_DIRS = [",
10
+ " decodeURIComponent(new URL(\".\", import.meta.url).pathname),",
11
+ " process.env.XDG_DATA_DIRS || \"/usr/local/share:/usr/share\",",
12
+ "].join(\":\");",
13
+ ].join("\n");
14
+ const findIconFiles = (iconsDir) => iconsDir === null ? [] : listFilesRecursive(iconsDir);
15
+ const resolveIconsDir = (config) => {
16
+ const root = config.root ?? process.cwd();
17
+ const dataDir = resolveDataDir(root);
18
+ return dataDir === null ? null : join(root, dataDir, ICONS_DIR);
19
+ };
20
+ const emitIcons = (ctx, icons) => {
21
+ for (const { absPath, rel } of icons) {
22
+ ctx.emitFile({ type: "asset", fileName: join(ICONS_DIR, rel), source: readFileSync(absPath) });
23
+ }
24
+ if (icons.length > 0) {
25
+ info(`Copied ${String(icons.length)} icon(s) into ${ICONS_DIR}/`);
26
+ }
27
+ };
28
+ function gtkxIcons() {
29
+ const state = {
30
+ iconsDir: null,
31
+ };
32
+ return {
33
+ name: "gtkx:icons",
34
+ enforce: "pre",
35
+ apply: "build",
36
+ config(config) {
37
+ state.iconsDir = resolveIconsDir(config);
38
+ },
39
+ outputOptions(options) {
40
+ if (findIconFiles(state.iconsDir).length === 0) {
41
+ return;
42
+ }
43
+ return prependBanner(options, XDG_ENV_BANNER);
44
+ },
45
+ buildEnd() {
46
+ emitIcons(this, findIconFiles(state.iconsDir));
47
+ },
48
+ };
49
+ }
50
+ export { gtkxIcons };
51
+ //# sourceMappingURL=icons.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"icons.js","sourceRoot":"","sources":["../../src/vite-plugins/icons.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AACnC,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAmB,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAUhF,MAAM,SAAS,GAAG,OAAO,CAAC;AAE1B,MAAM,cAAc,GAAG;IACnB,+BAA+B;IAC/B,mEAAmE;IACnE,mEAAmE;IACnE,gBAAgB;CACnB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAEb,MAAM,aAAa,GAAG,CAAC,QAAuB,EAAgB,EAAE,CAC5D,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC;AAE1D,MAAM,eAAe,GAAG,CAAC,MAAkB,EAAiB,EAAE;IAC1D,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IAC1C,MAAM,OAAO,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;IAErC,OAAO,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;AACpE,CAAC,CAAC;AAEF,MAAM,SAAS,GAAG,CAAC,GAAkB,EAAE,KAAmB,EAAQ,EAAE;IAChE,KAAK,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,KAAK,EAAE,CAAC;QACnC,GAAG,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,YAAY,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACnG,CAAC;IAED,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACnB,IAAI,CAAC,UAAU,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,iBAAiB,SAAS,GAAG,CAAC,CAAC;IACtE,CAAC;AACL,CAAC,CAAC;AAEF,SAAS,SAAS;IACd,MAAM,KAAK,GAAgB;QACvB,QAAQ,EAAE,IAAI;KACjB,CAAC;IAEF,OAAO;QACH,IAAI,EAAE,YAAY;QAClB,OAAO,EAAE,KAAK;QACd,KAAK,EAAE,OAAO;QAEd,MAAM,CAAC,MAAkB;YACrB,KAAK,CAAC,QAAQ,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;QAC7C,CAAC;QAED,aAAa,CAAC,OAAO;YACjB,IAAI,aAAa,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC7C,OAAO;YACX,CAAC;YAED,OAAO,aAAa,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;QAClD,CAAC;QAED,QAAQ;YACJ,SAAS,CAAC,IAAI,EAAE,aAAa,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;QACnD,CAAC;KACJ,CAAC;AACN,CAAC;AAED,OAAO,EAAE,SAAS,EAAE,CAAC","sourcesContent":["import type { Plugin, UserConfig } from \"vite\";\nimport { info } from \"@gtkx/utils\";\nimport { readFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { prependBanner } from \"../internal/banner.js\";\nimport { resolveDataDir } from \"../internal/data-dir.js\";\nimport { type ListedFile, listFilesRecursive } from \"../internal/list-files.js\";\n\ntype PluginState = {\n iconsDir: string | null;\n};\n\ntype PluginContext = {\n emitFile: (file: { type: \"asset\"; fileName: string; source: Buffer }) => void;\n};\n\nconst ICONS_DIR = \"icons\";\n\nconst XDG_ENV_BANNER = [\n \"process.env.XDG_DATA_DIRS = [\",\n \" decodeURIComponent(new URL(\\\".\\\", import.meta.url).pathname),\",\n \" process.env.XDG_DATA_DIRS || \\\"/usr/local/share:/usr/share\\\",\",\n \"].join(\\\":\\\");\",\n].join(\"\\n\");\n\nconst findIconFiles = (iconsDir: string | null): ListedFile[] =>\n iconsDir === null ? [] : listFilesRecursive(iconsDir);\n\nconst resolveIconsDir = (config: UserConfig): string | null => {\n const root = config.root ?? process.cwd();\n const dataDir = resolveDataDir(root);\n\n return dataDir === null ? null : join(root, dataDir, ICONS_DIR);\n};\n\nconst emitIcons = (ctx: PluginContext, icons: ListedFile[]): void => {\n for (const { absPath, rel } of icons) {\n ctx.emitFile({ type: \"asset\", fileName: join(ICONS_DIR, rel), source: readFileSync(absPath) });\n }\n\n if (icons.length > 0) {\n info(`Copied ${String(icons.length)} icon(s) into ${ICONS_DIR}/`);\n }\n};\n\nfunction gtkxIcons(): Plugin {\n const state: PluginState = {\n iconsDir: null,\n };\n\n return {\n name: \"gtkx:icons\",\n enforce: \"pre\",\n apply: \"build\",\n\n config(config: UserConfig) {\n state.iconsDir = resolveIconsDir(config);\n },\n\n outputOptions(options) {\n if (findIconFiles(state.iconsDir).length === 0) {\n return;\n }\n\n return prependBanner(options, XDG_ENV_BANNER);\n },\n\n buildEnd() {\n emitIcons(this, findIconFiles(state.iconsDir));\n },\n };\n}\n\nexport { gtkxIcons };\n"]}
@@ -0,0 +1,4 @@
1
+ import type { Plugin } from "vite";
2
+ declare const gtkxVitePlugins: (mode?: string) => Plugin[];
3
+ export { gtkxVitePlugins };
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/vite-plugins/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAUnC,QAAA,MAAM,eAAe,GAAI,OAAO,MAAM,KAAG,MAAM,EAY9C,CAAC;AAEF,OAAO,EAAE,eAAe,EAAE,CAAC"}
@@ -0,0 +1,22 @@
1
+ import { createConfigLoader } from "@gtkx/config/internal";
2
+ import createConfigPlugin from "@gtkx/config/vite-plugin";
3
+ import { gtkxCss } from "./css.js";
4
+ import { gtkxIcons } from "./icons.js";
5
+ import { gtkxReactCompiler } from "./react-compiler.js";
6
+ import { gtkxResources } from "./resources.js";
7
+ import { gtkxSettings } from "./settings.js";
8
+ import { gtkxUndeclaredLibrary } from "./undeclared-library.js";
9
+ const gtkxVitePlugins = (mode) => {
10
+ const loadConfig = createConfigLoader(mode === undefined ? {} : { mode });
11
+ return [
12
+ createConfigPlugin({ name: "gtkx:config", loadConfig }),
13
+ gtkxUndeclaredLibrary(mode),
14
+ gtkxSettings(),
15
+ gtkxIcons(),
16
+ gtkxResources(loadConfig),
17
+ gtkxCss(),
18
+ gtkxReactCompiler(loadConfig),
19
+ ];
20
+ };
21
+ export { gtkxVitePlugins };
22
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/vite-plugins/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,kBAAkB,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AACnC,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAEhE,MAAM,eAAe,GAAG,CAAC,IAAa,EAAY,EAAE;IAChD,MAAM,UAAU,GAAG,kBAAkB,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;IAE1E,OAAO;QACH,kBAAkB,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,UAAU,EAAE,CAAC;QACvD,qBAAqB,CAAC,IAAI,CAAC;QAC3B,YAAY,EAAE;QACd,SAAS,EAAE;QACX,aAAa,CAAC,UAAU,CAAC;QACzB,OAAO,EAAE;QACT,iBAAiB,CAAC,UAAU,CAAC;KAChC,CAAC;AACN,CAAC,CAAC;AAEF,OAAO,EAAE,eAAe,EAAE,CAAC","sourcesContent":["import type { Plugin } from \"vite\";\nimport { createConfigLoader } from \"@gtkx/config/internal\";\nimport createConfigPlugin from \"@gtkx/config/vite-plugin\";\nimport { gtkxCss } from \"./css.js\";\nimport { gtkxIcons } from \"./icons.js\";\nimport { gtkxReactCompiler } from \"./react-compiler.js\";\nimport { gtkxResources } from \"./resources.js\";\nimport { gtkxSettings } from \"./settings.js\";\nimport { gtkxUndeclaredLibrary } from \"./undeclared-library.js\";\n\nconst gtkxVitePlugins = (mode?: string): Plugin[] => {\n const loadConfig = createConfigLoader(mode === undefined ? {} : { mode });\n\n return [\n createConfigPlugin({ name: \"gtkx:config\", loadConfig }),\n gtkxUndeclaredLibrary(mode),\n gtkxSettings(),\n gtkxIcons(),\n gtkxResources(loadConfig),\n gtkxCss(),\n gtkxReactCompiler(loadConfig),\n ];\n};\n\nexport { gtkxVitePlugins };\n"]}
@@ -0,0 +1,4 @@
1
+ import type { Plugin } from "vite";
2
+ declare function gtkxNative(root: string): Plugin;
3
+ export { gtkxNative };
4
+ //# sourceMappingURL=native.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"native.d.ts","sourceRoot":"","sources":["../../src/vite-plugins/native.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAqDnC,iBAAS,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CA2BxC;AAED,OAAO,EAAE,UAAU,EAAE,CAAC"}
@@ -0,0 +1,62 @@
1
+ import { existsSync, readFileSync } from "node:fs";
2
+ import { createRequire } from "node:module";
3
+ import { arch, platform } from "node:os";
4
+ import { dirname, join } from "node:path";
5
+ import { stripQuery } from "./strip-query.js";
6
+ const EMITTED_BINDING_SPECIFIER = "./gtkx.node";
7
+ function resolveBinaryPath(projectRequire, currentArch) {
8
+ const nativeRoot = dirname(projectRequire.resolve("@gtkx/native/package.json"));
9
+ const localBinary = join(nativeRoot, `native.linux-${currentArch}-gnu.node`);
10
+ return existsSync(localBinary) ? localBinary : projectRequire.resolve(`@gtkx/native-linux-${currentArch}-gnu`);
11
+ }
12
+ function resolvePlatformBinary(projectRequire) {
13
+ const currentPlatform = platform();
14
+ if (currentPlatform !== "linux") {
15
+ throw new Error(`Unsupported build platform: ${currentPlatform}, only Linux is supported`);
16
+ }
17
+ const currentArch = arch();
18
+ if (currentArch !== "x64" && currentArch !== "arm64") {
19
+ throw new Error(`Unsupported build architecture: ${currentArch}, only x64 and arm64 are supported`);
20
+ }
21
+ return readFileSync(resolveBinaryPath(projectRequire, currentArch));
22
+ }
23
+ function rewriteLoader(code) {
24
+ const idents = [];
25
+ for (const match of code.matchAll(/export\s*\{\s*([A-Za-z0-9_$]+)\s*\}/g)) {
26
+ const ident = match[1];
27
+ if (ident) {
28
+ idents.push(ident);
29
+ }
30
+ }
31
+ const bindings = idents.join(", ");
32
+ return [
33
+ "import { createRequire as __gtkxCreateRequire } from \"node:module\";",
34
+ `const __gtkxNative = __gtkxCreateRequire(import.meta.url)(${JSON.stringify(EMITTED_BINDING_SPECIFIER)});`,
35
+ `const { ${bindings} } = __gtkxNative;`,
36
+ `export { ${bindings} };`,
37
+ ].join("\n");
38
+ }
39
+ function gtkxNative(root) {
40
+ const projectRequire = createRequire(join(root, "package.json"));
41
+ let cachedLoaderPath;
42
+ const loaderPath = () => {
43
+ cachedLoaderPath ??= join(dirname(projectRequire.resolve("@gtkx/native/package.json")), "index.js");
44
+ return cachedLoaderPath;
45
+ };
46
+ return {
47
+ name: "gtkx:native",
48
+ enforce: "pre",
49
+ apply: "build",
50
+ buildStart() {
51
+ this.emitFile({ type: "asset", fileName: "gtkx.node", source: resolvePlatformBinary(projectRequire) });
52
+ },
53
+ resolveId(id) {
54
+ return id === EMITTED_BINDING_SPECIFIER ? { id, external: true } : null;
55
+ },
56
+ transform(code, id) {
57
+ return stripQuery(id) === loaderPath() ? rewriteLoader(code) : null;
58
+ },
59
+ };
60
+ }
61
+ export { gtkxNative };
62
+ //# sourceMappingURL=native.js.map