@gtkx/cli 1.5.0 → 2.0.0-beta.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 (211) hide show
  1. package/README.md +5 -5
  2. package/dist/cli.js +4 -0
  3. package/dist/cli.js.map +1 -1
  4. package/dist/codegen/freshness.d.ts.map +1 -1
  5. package/dist/codegen/freshness.js +45 -15
  6. package/dist/codegen/freshness.js.map +1 -1
  7. package/dist/codegen/reference.d.ts +17 -0
  8. package/dist/codegen/reference.d.ts.map +1 -0
  9. package/dist/codegen/reference.js +31 -0
  10. package/dist/codegen/reference.js.map +1 -0
  11. package/dist/codegen/report.d.ts.map +1 -1
  12. package/dist/codegen/report.js +18 -15
  13. package/dist/codegen/report.js.map +1 -1
  14. package/dist/codegen/run-codegen.d.ts +5 -5
  15. package/dist/codegen/run-codegen.d.ts.map +1 -1
  16. package/dist/codegen/run-codegen.js +24 -59
  17. package/dist/codegen/run-codegen.js.map +1 -1
  18. package/dist/codegen/store-resolver.d.ts +0 -1
  19. package/dist/codegen/store-resolver.d.ts.map +1 -1
  20. package/dist/codegen/store-resolver.js +8 -17
  21. package/dist/codegen/store-resolver.js.map +1 -1
  22. package/dist/commands/docs.d.ts.map +1 -1
  23. package/dist/commands/docs.js +6 -22
  24. package/dist/commands/docs.js.map +1 -1
  25. package/dist/commands/mcp.d.ts +13 -0
  26. package/dist/commands/mcp.d.ts.map +1 -0
  27. package/dist/commands/mcp.js +68 -0
  28. package/dist/commands/mcp.js.map +1 -0
  29. package/dist/deploy/freedesktop/copyright.d.ts.map +1 -1
  30. package/dist/deploy/freedesktop/copyright.js +2 -13
  31. package/dist/deploy/freedesktop/copyright.js.map +1 -1
  32. package/dist/deploy/freedesktop/xml.d.ts.map +1 -1
  33. package/dist/deploy/freedesktop/xml.js +21 -25
  34. package/dist/deploy/freedesktop/xml.js.map +1 -1
  35. package/dist/deploy/node-runtime/license.d.ts.map +1 -1
  36. package/dist/deploy/node-runtime/license.js +2 -9
  37. package/dist/deploy/node-runtime/license.js.map +1 -1
  38. package/dist/deploy/notices/gtkx.js +1 -1
  39. package/dist/deploy/notices/gtkx.js.map +1 -1
  40. package/dist/deploy/notices/libraries.d.ts.map +1 -1
  41. package/dist/deploy/notices/libraries.js +2 -1
  42. package/dist/deploy/notices/libraries.js.map +1 -1
  43. package/dist/deploy/notices/packages.d.ts.map +1 -1
  44. package/dist/deploy/notices/packages.js +3 -10
  45. package/dist/deploy/notices/packages.js.map +1 -1
  46. package/dist/deploy/payload/copy-tree.d.ts.map +1 -1
  47. package/dist/deploy/payload/copy-tree.js +3 -3
  48. package/dist/deploy/payload/copy-tree.js.map +1 -1
  49. package/dist/deploy/payload/stage.d.ts.map +1 -1
  50. package/dist/deploy/payload/stage.js +1 -3
  51. package/dist/deploy/payload/stage.js.map +1 -1
  52. package/dist/deploy/settings/build-manifest.d.ts.map +1 -1
  53. package/dist/deploy/settings/build-manifest.js +4 -15
  54. package/dist/deploy/settings/build-manifest.js.map +1 -1
  55. package/dist/deploy/settings/libraries.d.ts.map +1 -1
  56. package/dist/deploy/settings/libraries.js +2 -21
  57. package/dist/deploy/settings/libraries.js.map +1 -1
  58. package/dist/deploy/settings/paths.d.ts +1 -2
  59. package/dist/deploy/settings/paths.d.ts.map +1 -1
  60. package/dist/deploy/settings/paths.js +5 -15
  61. package/dist/deploy/settings/paths.js.map +1 -1
  62. package/dist/deploy/settings/screenshots.d.ts.map +1 -1
  63. package/dist/deploy/settings/screenshots.js +6 -31
  64. package/dist/deploy/settings/screenshots.js.map +1 -1
  65. package/dist/deploy/targets/flatpak-pnpm.js +4 -4
  66. package/dist/deploy/targets/flatpak-pnpm.js.map +1 -1
  67. package/dist/deploy/targets/flatpak-source.d.ts.map +1 -1
  68. package/dist/deploy/targets/flatpak-source.js +4 -4
  69. package/dist/deploy/targets/flatpak-source.js.map +1 -1
  70. package/dist/deploy/targets/flatpak-sources.js +1 -1
  71. package/dist/deploy/targets/flatpak-sources.js.map +1 -1
  72. package/dist/deploy/tools.d.ts.map +1 -1
  73. package/dist/deploy/tools.js +1 -3
  74. package/dist/deploy/tools.js.map +1 -1
  75. package/dist/dev/runner-main.js +1 -1
  76. package/dist/dev/runner-main.js.map +1 -1
  77. package/dist/dev/schema-dir.d.ts +1 -1
  78. package/dist/dev/schema-dir.d.ts.map +1 -1
  79. package/dist/dev/schema-dir.js +2 -4
  80. package/dist/dev/schema-dir.js.map +1 -1
  81. package/dist/i18n/catalogs.d.ts.map +1 -1
  82. package/dist/i18n/catalogs.js +2 -1
  83. package/dist/i18n/catalogs.js.map +1 -1
  84. package/dist/i18n/metadata-templates.d.ts.map +1 -1
  85. package/dist/i18n/metadata-templates.js +2 -1
  86. package/dist/i18n/metadata-templates.js.map +1 -1
  87. package/dist/i18n/source-messages.d.ts +3 -21
  88. package/dist/i18n/source-messages.d.ts.map +1 -1
  89. package/dist/i18n/source-messages.js +66 -85
  90. package/dist/i18n/source-messages.js.map +1 -1
  91. package/dist/i18n/types.d.ts +6 -7
  92. package/dist/i18n/types.d.ts.map +1 -1
  93. package/dist/i18n/types.js +83 -96
  94. package/dist/i18n/types.js.map +1 -1
  95. package/dist/internal/agent-rules.d.ts +7 -0
  96. package/dist/internal/agent-rules.d.ts.map +1 -0
  97. package/dist/internal/agent-rules.js +106 -0
  98. package/dist/internal/agent-rules.js.map +1 -0
  99. package/dist/internal/docs-elements.d.ts +8 -0
  100. package/dist/internal/docs-elements.d.ts.map +1 -0
  101. package/dist/internal/docs-elements.js +12 -0
  102. package/dist/internal/docs-elements.js.map +1 -0
  103. package/dist/internal/icon-path.d.ts.map +1 -1
  104. package/dist/internal/icon-path.js +5 -16
  105. package/dist/internal/icon-path.js.map +1 -1
  106. package/dist/internal/source-imports.d.ts.map +1 -1
  107. package/dist/internal/source-imports.js +10 -42
  108. package/dist/internal/source-imports.js.map +1 -1
  109. package/dist/mcp/client-config.d.ts +22 -0
  110. package/dist/mcp/client-config.d.ts.map +1 -0
  111. package/dist/mcp/client-config.js +94 -0
  112. package/dist/mcp/client-config.js.map +1 -0
  113. package/dist/settings/render.d.ts +0 -1
  114. package/dist/settings/render.d.ts.map +1 -1
  115. package/dist/settings/render.js +1 -11
  116. package/dist/settings/render.js.map +1 -1
  117. package/dist/settings/schema.d.ts +2 -2
  118. package/dist/settings/schema.d.ts.map +1 -1
  119. package/dist/settings/schema.js +21 -62
  120. package/dist/settings/schema.js.map +1 -1
  121. package/dist/vite-plugins/asset-imports.d.ts +1 -2
  122. package/dist/vite-plugins/asset-imports.d.ts.map +1 -1
  123. package/dist/vite-plugins/asset-imports.js +19 -32
  124. package/dist/vite-plugins/asset-imports.js.map +1 -1
  125. package/dist/vite-plugins/asset-specifier.d.ts +1 -3
  126. package/dist/vite-plugins/asset-specifier.d.ts.map +1 -1
  127. package/dist/vite-plugins/asset-specifier.js +1 -4
  128. package/dist/vite-plugins/asset-specifier.js.map +1 -1
  129. package/dist/vite-plugins/i18n.d.ts.map +1 -1
  130. package/dist/vite-plugins/i18n.js +2 -1
  131. package/dist/vite-plugins/i18n.js.map +1 -1
  132. package/dist/vite-plugins/index.js +2 -2
  133. package/dist/vite-plugins/index.js.map +1 -1
  134. package/dist/vite-plugins/resources.d.ts.map +1 -1
  135. package/dist/vite-plugins/resources.js +31 -96
  136. package/dist/vite-plugins/resources.js.map +1 -1
  137. package/dist/vite-plugins/settings-worker-env.d.ts.map +1 -1
  138. package/dist/vite-plugins/settings-worker-env.js +1 -3
  139. package/dist/vite-plugins/settings-worker-env.js.map +1 -1
  140. package/dist/vite-plugins/settings.d.ts +1 -2
  141. package/dist/vite-plugins/settings.d.ts.map +1 -1
  142. package/dist/vite-plugins/settings.js +8 -13
  143. package/dist/vite-plugins/settings.js.map +1 -1
  144. package/dist/vite-plugins/undeclared-library.d.ts.map +1 -1
  145. package/dist/vite-plugins/undeclared-library.js +10 -13
  146. package/dist/vite-plugins/undeclared-library.js.map +1 -1
  147. package/dist/vite-plugins/worker.d.ts.map +1 -1
  148. package/dist/vite-plugins/worker.js +0 -1
  149. package/dist/vite-plugins/worker.js.map +1 -1
  150. package/package.json +21 -14
  151. package/src/cli.ts +5 -0
  152. package/src/codegen/freshness.ts +66 -16
  153. package/src/codegen/reference.ts +52 -0
  154. package/src/codegen/report.ts +16 -17
  155. package/src/codegen/run-codegen.ts +31 -91
  156. package/src/codegen/store-resolver.ts +8 -24
  157. package/src/commands/docs.ts +6 -36
  158. package/src/commands/mcp.ts +81 -0
  159. package/src/deploy/freedesktop/copyright.ts +2 -14
  160. package/src/deploy/freedesktop/xml.ts +24 -32
  161. package/src/deploy/node-runtime/license.ts +2 -8
  162. package/src/deploy/notices/gtkx.ts +1 -1
  163. package/src/deploy/notices/libraries.ts +2 -1
  164. package/src/deploy/notices/packages.ts +3 -11
  165. package/src/deploy/payload/copy-tree.ts +3 -4
  166. package/src/deploy/payload/stage.ts +2 -6
  167. package/src/deploy/settings/build-manifest.ts +4 -16
  168. package/src/deploy/settings/libraries.ts +1 -25
  169. package/src/deploy/settings/paths.ts +6 -16
  170. package/src/deploy/settings/screenshots.ts +8 -46
  171. package/src/deploy/targets/flatpak-pnpm.ts +4 -4
  172. package/src/deploy/targets/flatpak-source.ts +4 -4
  173. package/src/deploy/targets/flatpak-sources.ts +1 -1
  174. package/src/deploy/tools.ts +1 -3
  175. package/src/dev/runner-main.ts +1 -1
  176. package/src/dev/schema-dir.ts +2 -4
  177. package/src/i18n/catalogs.ts +2 -1
  178. package/src/i18n/metadata-templates.ts +2 -1
  179. package/src/i18n/source-messages.ts +77 -115
  180. package/src/i18n/types.ts +97 -131
  181. package/src/internal/agent-rules.ts +135 -0
  182. package/src/internal/docs-elements.ts +21 -0
  183. package/src/internal/icon-path.ts +6 -19
  184. package/src/internal/source-imports.ts +14 -50
  185. package/src/mcp/client-config.ts +130 -0
  186. package/src/settings/render.ts +1 -13
  187. package/src/settings/schema.ts +19 -81
  188. package/src/vite-plugins/asset-imports.ts +20 -44
  189. package/src/vite-plugins/asset-specifier.ts +0 -5
  190. package/src/vite-plugins/i18n.ts +2 -1
  191. package/src/vite-plugins/index.ts +2 -2
  192. package/src/vite-plugins/resources.ts +36 -139
  193. package/src/vite-plugins/settings-worker-env.ts +1 -3
  194. package/src/vite-plugins/settings.ts +11 -19
  195. package/src/vite-plugins/undeclared-library.ts +14 -20
  196. package/src/vite-plugins/worker.ts +0 -1
  197. package/dist/i18n/binding-extractor.d.ts +0 -30
  198. package/dist/i18n/binding-extractor.d.ts.map +0 -1
  199. package/dist/i18n/binding-extractor.js +0 -1324
  200. package/dist/i18n/binding-extractor.js.map +0 -1
  201. package/dist/i18n/extractor-plugin.d.ts +0 -8
  202. package/dist/i18n/extractor-plugin.d.ts.map +0 -1
  203. package/dist/i18n/extractor-plugin.js +0 -247
  204. package/dist/i18n/extractor-plugin.js.map +0 -1
  205. package/dist/internal/data-dir.d.ts +0 -4
  206. package/dist/internal/data-dir.d.ts.map +0 -1
  207. package/dist/internal/data-dir.js +0 -52
  208. package/dist/internal/data-dir.js.map +0 -1
  209. package/src/i18n/binding-extractor.ts +0 -1969
  210. package/src/i18n/extractor-plugin.ts +0 -413
  211. package/src/internal/data-dir.ts +0 -70
package/README.md CHANGED
@@ -13,7 +13,7 @@
13
13
  <p align="center">
14
14
  <a href="https://www.npmjs.com/package/create-gtkx"><img src="https://img.shields.io/npm/v/create-gtkx?color=cb3837&logo=npm&label=create-gtkx" alt="npm version" /></a>
15
15
  <a href="https://www.npmjs.com/package/create-gtkx"><img src="https://img.shields.io/npm/dm/create-gtkx?color=cb3837&logo=npm&label=downloads" alt="npm downloads" /></a>
16
- <img src="https://img.shields.io/badge/node-%E2%89%A524-339933?logo=node.js&logoColor=white" alt="Node >= 24" />
16
+ <img src="https://img.shields.io/badge/node-%E2%89%A526.7-339933?logo=node.js&logoColor=white" alt="Node >= 26.7" />
17
17
  <a href="https://github.com/gtkx-org/gtkx/blob/main/LICENSE"><img src="https://img.shields.io/badge/license-MPL--2.0-blue.svg" alt="License: MPL-2.0" /></a>
18
18
  <a href="https://github.com/gtkx-org/gtkx/actions/workflows/ci.yml"><img src="https://img.shields.io/github/actions/workflow/status/gtkx-org/gtkx/ci.yml?branch=main&logo=github&label=CI" alt="CI status" /></a>
19
19
  <img src="https://img.shields.io/badge/TypeScript-strict-3178c6?logo=typescript&logoColor=white" alt="TypeScript" />
@@ -116,7 +116,7 @@ At runtime, the native Rust core calls straight into the system GTK4, Adwaita, a
116
116
 
117
117
  ## Quick start
118
118
 
119
- GTKX is Linux-only and needs Node.js 24 or later. See [Requirements](#requirements).
119
+ GTKX is Linux-only and needs Node.js 26.7 or later. See [Requirements](#requirements).
120
120
 
121
121
  Scaffold a new app with the `create-gtkx` initializer:
122
122
 
@@ -145,8 +145,8 @@ The documentation at **[gtkx.dev](https://gtkx.dev)** includes a step-by-step tu
145
145
 
146
146
  GTKX is Linux-only. You need:
147
147
 
148
- - Linux with the GTK4 (4.20 or later) and GLib development libraries, plus Adwaita (1.8 or later) once your project binds `Adw-1`
149
- - Node.js 24 or later
148
+ - Linux with the GTK4 (4.20 or later), Adwaita (1.8 or later), and GLib development libraries
149
+ - Node.js 26.7 or later
150
150
 
151
151
  The `@gtkx/native` addon ships prebuilt for x64 and arm64 glibc Linux; other targets need to build it from the GTKX repository, which requires a Rust toolchain.
152
152
 
@@ -167,7 +167,7 @@ GTKX is stable and ready for production use.
167
167
 
168
168
  ## Contributing
169
169
 
170
- Contributions are welcome. See [CONTRIBUTING.md](https://github.com/gtkx-org/gtkx/blob/main/CONTRIBUTING.md), the [Code of Conduct](https://github.com/gtkx-org/gtkx/blob/main/CODE_OF_CONDUCT.md), and the [security policy](https://github.com/gtkx-org/gtkx/blob/main/SECURITY.md). Building the repo needs Node.js 24 or later, pnpm, and a Rust toolchain.
170
+ Contributions are welcome. See [CONTRIBUTING.md](https://github.com/gtkx-org/gtkx/blob/main/CONTRIBUTING.md), the [Code of Conduct](https://github.com/gtkx-org/gtkx/blob/main/CODE_OF_CONDUCT.md), and the [security policy](https://github.com/gtkx-org/gtkx/blob/main/SECURITY.md). Building the repo needs Node.js 26.7 or later, pnpm, and a Rust toolchain.
171
171
 
172
172
  ## License
173
173
 
package/dist/cli.js CHANGED
@@ -31,6 +31,10 @@ const main = defineCommand({
31
31
  const { docs } = await import("./commands/docs.js");
32
32
  return withErrorBoundary(docs);
33
33
  },
34
+ mcp: async () => {
35
+ const { mcp } = await import("./commands/mcp.js");
36
+ return withErrorBoundary(mcp);
37
+ },
34
38
  create: async () => {
35
39
  const { scaffoldCommand } = await import("create-gtkx");
36
40
  return withErrorBoundary(scaffoldCommand);
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAC/C,OAAO,eAAe,MAAM,iBAAiB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAEzD,MAAM,OAAO,GAAG,eAAe,CAAC,OAAO,CAAC;AACxC,MAAM,EAAE,OAAO,EAAE,GAAG,oBAAoB,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAEhE,MAAM,IAAI,GAAG,aAAa,CAAC;IACvB,IAAI,EAAE;QACF,IAAI,EAAE,MAAM;QACZ,OAAO;QACP,WAAW,EAAE,0DAA0D;KAC1E;IACD,WAAW,EAAE;QACT,GAAG,EAAE,KAAK,IAAI,EAAE;YACZ,MAAM,EAAE,GAAG,EAAE,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAC;YAElD,OAAO,iBAAiB,CAAC,GAAG,CAAC,CAAC;QAClC,CAAC;QACD,KAAK,EAAE,KAAK,IAAI,EAAE;YACd,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAC;YAEtD,OAAO,iBAAiB,CAAC,KAAK,CAAC,CAAC;QACpC,CAAC;QACD,MAAM,EAAE,KAAK,IAAI,EAAE;YACf,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAAC;YAExD,OAAO,iBAAiB,CAAC,MAAM,CAAC,CAAC;QACrC,CAAC;QACD,OAAO,EAAE,KAAK,IAAI,EAAE;YAChB,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,MAAM,CAAC,uBAAuB,CAAC,CAAC;YAE1D,OAAO,iBAAiB,CAAC,OAAO,CAAC,CAAC;QACtC,CAAC;QACD,IAAI,EAAE,KAAK,IAAI,EAAE;YACb,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;YAEpD,OAAO,iBAAiB,CAAC,IAAI,CAAC,CAAC;QACnC,CAAC;QACD,MAAM,EAAE,KAAK,IAAI,EAAE;YACf,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;YAExD,OAAO,iBAAiB,CAAC,eAAe,CAAC,CAAC;QAC9C,CAAC;KACJ;CACJ,CAAC,CAAC;AAEH,MAAM,OAAO,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC","sourcesContent":["import { defineCommand, runMain } from \"citty\";\nimport packageManifest from \"../package.json\" with { type: \"json\" };\nimport { splitApplicationArgs } from \"./internal/application-args.js\";\nimport { withErrorBoundary } from \"./internal/errors.js\";\n\nconst version = packageManifest.version;\nconst { cliArgs } = splitApplicationArgs(process.argv.slice(2));\n\nconst main = defineCommand({\n meta: {\n name: \"gtkx\",\n version,\n description: \"CLI for GTKX: create and develop GTK4 React applications\",\n },\n subCommands: {\n dev: async () => {\n const { dev } = await import(\"./commands/dev.js\");\n\n return withErrorBoundary(dev);\n },\n build: async () => {\n const { build } = await import(\"./commands/build.js\");\n\n return withErrorBoundary(build);\n },\n deploy: async () => {\n const { deploy } = await import(\"./commands/deploy.js\");\n\n return withErrorBoundary(deploy);\n },\n codegen: async () => {\n const { codegen } = await import(\"./commands/codegen.js\");\n\n return withErrorBoundary(codegen);\n },\n docs: async () => {\n const { docs } = await import(\"./commands/docs.js\");\n\n return withErrorBoundary(docs);\n },\n create: async () => {\n const { scaffoldCommand } = await import(\"create-gtkx\");\n\n return withErrorBoundary(scaffoldCommand);\n },\n },\n});\n\nawait runMain(main, { rawArgs: cliArgs });\n"]}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAC/C,OAAO,eAAe,MAAM,iBAAiB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAEzD,MAAM,OAAO,GAAG,eAAe,CAAC,OAAO,CAAC;AACxC,MAAM,EAAE,OAAO,EAAE,GAAG,oBAAoB,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAEhE,MAAM,IAAI,GAAG,aAAa,CAAC;IACvB,IAAI,EAAE;QACF,IAAI,EAAE,MAAM;QACZ,OAAO;QACP,WAAW,EAAE,0DAA0D;KAC1E;IACD,WAAW,EAAE;QACT,GAAG,EAAE,KAAK,IAAI,EAAE;YACZ,MAAM,EAAE,GAAG,EAAE,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAC;YAElD,OAAO,iBAAiB,CAAC,GAAG,CAAC,CAAC;QAClC,CAAC;QACD,KAAK,EAAE,KAAK,IAAI,EAAE;YACd,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAC;YAEtD,OAAO,iBAAiB,CAAC,KAAK,CAAC,CAAC;QACpC,CAAC;QACD,MAAM,EAAE,KAAK,IAAI,EAAE;YACf,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAAC;YAExD,OAAO,iBAAiB,CAAC,MAAM,CAAC,CAAC;QACrC,CAAC;QACD,OAAO,EAAE,KAAK,IAAI,EAAE;YAChB,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,MAAM,CAAC,uBAAuB,CAAC,CAAC;YAE1D,OAAO,iBAAiB,CAAC,OAAO,CAAC,CAAC;QACtC,CAAC;QACD,IAAI,EAAE,KAAK,IAAI,EAAE;YACb,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;YAEpD,OAAO,iBAAiB,CAAC,IAAI,CAAC,CAAC;QACnC,CAAC;QACD,GAAG,EAAE,KAAK,IAAI,EAAE;YACZ,MAAM,EAAE,GAAG,EAAE,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAC;YAElD,OAAO,iBAAiB,CAAC,GAAG,CAAC,CAAC;QAClC,CAAC;QACD,MAAM,EAAE,KAAK,IAAI,EAAE;YACf,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;YAExD,OAAO,iBAAiB,CAAC,eAAe,CAAC,CAAC;QAC9C,CAAC;KACJ;CACJ,CAAC,CAAC;AAEH,MAAM,OAAO,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC","sourcesContent":["import { defineCommand, runMain } from \"citty\";\nimport packageManifest from \"../package.json\" with { type: \"json\" };\nimport { splitApplicationArgs } from \"./internal/application-args.js\";\nimport { withErrorBoundary } from \"./internal/errors.js\";\n\nconst version = packageManifest.version;\nconst { cliArgs } = splitApplicationArgs(process.argv.slice(2));\n\nconst main = defineCommand({\n meta: {\n name: \"gtkx\",\n version,\n description: \"CLI for GTKX: create and develop GTK4 React applications\",\n },\n subCommands: {\n dev: async () => {\n const { dev } = await import(\"./commands/dev.js\");\n\n return withErrorBoundary(dev);\n },\n build: async () => {\n const { build } = await import(\"./commands/build.js\");\n\n return withErrorBoundary(build);\n },\n deploy: async () => {\n const { deploy } = await import(\"./commands/deploy.js\");\n\n return withErrorBoundary(deploy);\n },\n codegen: async () => {\n const { codegen } = await import(\"./commands/codegen.js\");\n\n return withErrorBoundary(codegen);\n },\n docs: async () => {\n const { docs } = await import(\"./commands/docs.js\");\n\n return withErrorBoundary(docs);\n },\n mcp: async () => {\n const { mcp } = await import(\"./commands/mcp.js\");\n\n return withErrorBoundary(mcp);\n },\n create: async () => {\n const { scaffoldCommand } = await import(\"create-gtkx\");\n\n return withErrorBoundary(scaffoldCommand);\n },\n },\n});\n\nawait runMain(main, { rawArgs: cliArgs });\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"freshness.d.ts","sourceRoot":"","sources":["../../src/codegen/freshness.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAI3C,OAAO,EAAE,KAAK,YAAY,EAAuB,MAAM,qBAAqB,CAAC;AAE7E,KAAK,aAAa,GAAG;IACjB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,KAAK,EAAE,YAAY,CAAC;CACvB,CAAC;AAIF,QAAA,MAAM,oBAAoB,GAAI,KAAK,MAAM,EAAE,QAAQ,MAAM,KAAG,aAM3D,CAAC;AA+BF,QAAA,MAAM,cAAc,GAAI,QAAQ,aAAa,KAAG,OAM/C,CAAC;AAEF,OAAO,EAAE,oBAAoB,EAAE,cAAc,EAAE,KAAK,aAAa,EAAE,CAAC"}
1
+ {"version":3,"file":"freshness.d.ts","sourceRoot":"","sources":["../../src/codegen/freshness.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAI3C,OAAO,EAAE,KAAK,YAAY,EAAuB,MAAM,qBAAqB,CAAC;AAK7E,KAAK,aAAa,GAAG;IACjB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,KAAK,EAAE,YAAY,CAAC;CACvB,CAAC;AAKF,QAAA,MAAM,oBAAoB,GAAI,KAAK,MAAM,EAAE,QAAQ,MAAM,KAAG,aAM3D,CAAC;AA6EF,QAAA,MAAM,cAAc,GAAI,QAAQ,aAAa,KAAG,OAM/C,CAAC;AAEF,OAAO,EAAE,oBAAoB,EAAE,cAAc,EAAE,KAAK,aAAa,EAAE,CAAC"}
@@ -1,34 +1,64 @@
1
1
  import { resolveGirPath, resolveLibraries } from "@gtkx/codegen";
2
- import { existsSync } from "node:fs";
3
- import { join } from "node:path";
2
+ import { existsSync, readFileSync } from "node:fs";
3
+ import { basename, dirname, join } from "node:path";
4
4
  import { resolveCodegenStore } from "./store-resolver.js";
5
- const REACT_GENERATED_MODULES = ["index.js", "metadata.js", join("gtk", "gtk.js")];
5
+ const PACKAGE_EXPORT = "./package.json";
6
+ const JSX_REQUIRED_EXPORTS = [PACKAGE_EXPORT, "./metadata", "./gtk", "./adw"];
6
7
  const resolveCodegenInputs = (cwd, config) => {
7
8
  const girPath = resolveGirPath(config.girPath);
8
- const libraries = resolveLibraries(config.libraries, girPath);
9
+ const libraries = resolveLibraries(config.libraries);
9
10
  const store = resolveCodegenStore(cwd);
10
11
  return { girPath, libraries, store };
11
12
  };
12
- const namespaceBarrelPath = (giStoreDir, library) => {
13
+ const namespaceExport = (library) => {
13
14
  const separator = library.indexOf("-");
14
15
  const namespace = (separator === -1 ? library : library.slice(0, separator)).toLowerCase();
15
- return join(giStoreDir, namespace, "index.js");
16
+ return `./${namespace}`;
16
17
  };
17
- const hasManifest = (storeDir) => existsSync(join(storeDir, "package.json"));
18
- const isGiStoreStale = (store, libraries) => {
19
- if (!hasManifest(store.giStoreDir)) {
20
- return true;
18
+ const targetFiles = (target) => typeof target === "string" ? [target] : Object.values(target).flatMap((nested) => targetFiles(nested));
19
+ const indexExtension = (target) => {
20
+ if (target.endsWith("/index.d.ts")) {
21
+ return ".d.ts";
22
+ }
23
+ return target.endsWith("/index.js") ? ".js" : undefined;
24
+ };
25
+ const implementationFile = (target) => {
26
+ const extension = indexExtension(target);
27
+ if (extension === undefined) {
28
+ return undefined;
21
29
  }
22
- return libraries.some((library) => !existsSync(namespaceBarrelPath(store.giStoreDir, library)));
30
+ const directory = dirname(target);
31
+ return join(directory, `${basename(directory)}${extension}`);
32
+ };
33
+ const generatedFiles = (exports) => Object.values(exports)
34
+ .flatMap((target) => targetFiles(target))
35
+ .flatMap((target) => {
36
+ const implementation = implementationFile(target);
37
+ return implementation === undefined ? [target] : [target, implementation];
38
+ });
39
+ const hasStoreExports = (storeDir, required, forbidden = []) => {
40
+ const manifestPath = join(storeDir, "package.json");
41
+ if (!existsSync(manifestPath)) {
42
+ return false;
43
+ }
44
+ const manifest = JSON.parse(readFileSync(manifestPath, "utf8"));
45
+ const exports = manifest.exports;
46
+ if (exports === undefined || required.some((key) => !Object.hasOwn(exports, key)) ||
47
+ forbidden.some((key) => Object.hasOwn(exports, key))) {
48
+ return false;
49
+ }
50
+ const files = generatedFiles(exports);
51
+ return files.length > 0 && files.every((file) => existsSync(join(storeDir, file)));
52
+ };
53
+ const isGiStoreStale = (store, libraries) => {
54
+ const required = [PACKAGE_EXPORT, ...libraries.map((library) => namespaceExport(library))];
55
+ return !hasStoreExports(store.giStoreDir, required);
23
56
  };
24
57
  const isReactStoreStale = (store) => {
25
58
  if (store.react === null) {
26
59
  return false;
27
60
  }
28
- if (!hasManifest(store.jsxStoreDir)) {
29
- return true;
30
- }
31
- return REACT_GENERATED_MODULES.some((module) => !existsSync(join(store.jsxStoreDir, module)));
61
+ return !hasStoreExports(store.jsxStoreDir, JSX_REQUIRED_EXPORTS, ["."]);
32
62
  };
33
63
  const isCodegenStale = (inputs) => {
34
64
  try {
@@ -1 +1 @@
1
- {"version":3,"file":"freshness.js","sourceRoot":"","sources":["../../src/codegen/freshness.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjE,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAqB,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAQ7E,MAAM,uBAAuB,GAAa,CAAC,UAAU,EAAE,aAAa,EAAE,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC;AAE7F,MAAM,oBAAoB,GAAG,CAAC,GAAW,EAAE,MAAc,EAAiB,EAAE;IACxE,MAAM,OAAO,GAAG,cAAc,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC/C,MAAM,SAAS,GAAG,gBAAgB,CAAC,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAC9D,MAAM,KAAK,GAAG,mBAAmB,CAAC,GAAG,CAAC,CAAC;IAEvC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;AACzC,CAAC,CAAC;AAEF,MAAM,mBAAmB,GAAG,CAAC,UAAkB,EAAE,OAAe,EAAU,EAAE;IACxE,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACvC,MAAM,SAAS,GAAG,CAAC,SAAS,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;IAE3F,OAAO,IAAI,CAAC,UAAU,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;AACnD,CAAC,CAAC;AAEF,MAAM,WAAW,GAAG,CAAC,QAAgB,EAAW,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC,CAAC;AAE9F,MAAM,cAAc,GAAG,CAAC,KAAmB,EAAE,SAAmB,EAAW,EAAE;IACzE,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;QACjC,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,mBAAmB,CAAC,KAAK,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;AACpG,CAAC,CAAC;AAEF,MAAM,iBAAiB,GAAG,CAAC,KAAmB,EAAW,EAAE;IACvD,IAAI,KAAK,CAAC,KAAK,KAAK,IAAI,EAAE,CAAC;QACvB,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC;QAClC,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,OAAO,uBAAuB,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;AAClG,CAAC,CAAC;AAEF,MAAM,cAAc,GAAG,CAAC,MAAqB,EAAW,EAAE;IACtD,IAAI,CAAC;QACD,OAAO,cAAc,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,SAAS,CAAC,IAAI,iBAAiB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC7F,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,IAAI,CAAC;IAChB,CAAC;AACL,CAAC,CAAC;AAEF,OAAO,EAAE,oBAAoB,EAAE,cAAc,EAAsB,CAAC","sourcesContent":["import type { Config } from \"@gtkx/config\";\nimport { resolveGirPath, resolveLibraries } from \"@gtkx/codegen\";\nimport { existsSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { type CodegenStore, resolveCodegenStore } from \"./store-resolver.js\";\n\ntype CodegenInputs = {\n girPath: string[];\n libraries: string[];\n store: CodegenStore;\n};\n\nconst REACT_GENERATED_MODULES: string[] = [\"index.js\", \"metadata.js\", join(\"gtk\", \"gtk.js\")];\n\nconst resolveCodegenInputs = (cwd: string, config: Config): CodegenInputs => {\n const girPath = resolveGirPath(config.girPath);\n const libraries = resolveLibraries(config.libraries, girPath);\n const store = resolveCodegenStore(cwd);\n\n return { girPath, libraries, store };\n};\n\nconst namespaceBarrelPath = (giStoreDir: string, library: string): string => {\n const separator = library.indexOf(\"-\");\n const namespace = (separator === -1 ? library : library.slice(0, separator)).toLowerCase();\n\n return join(giStoreDir, namespace, \"index.js\");\n};\n\nconst hasManifest = (storeDir: string): boolean => existsSync(join(storeDir, \"package.json\"));\n\nconst isGiStoreStale = (store: CodegenStore, libraries: string[]): boolean => {\n if (!hasManifest(store.giStoreDir)) {\n return true;\n }\n\n return libraries.some((library) => !existsSync(namespaceBarrelPath(store.giStoreDir, library)));\n};\n\nconst isReactStoreStale = (store: CodegenStore): boolean => {\n if (store.react === null) {\n return false;\n }\n\n if (!hasManifest(store.jsxStoreDir)) {\n return true;\n }\n\n return REACT_GENERATED_MODULES.some((module) => !existsSync(join(store.jsxStoreDir, module)));\n};\n\nconst isCodegenStale = (inputs: CodegenInputs): boolean => {\n try {\n return isGiStoreStale(inputs.store, inputs.libraries) || isReactStoreStale(inputs.store);\n } catch {\n return true;\n }\n};\n\nexport { resolveCodegenInputs, isCodegenStale, type CodegenInputs };\n"]}
1
+ {"version":3,"file":"freshness.js","sourceRoot":"","sources":["../../src/codegen/freshness.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Config } from \"@gtkx/config\";\nimport { resolveGirPath, resolveLibraries } from \"@gtkx/codegen\";\nimport { existsSync, readFileSync } from \"node:fs\";\nimport { basename, dirname, join } from \"node:path\";\nimport { type CodegenStore, resolveCodegenStore } from \"./store-resolver.js\";\n\ntype ExportTarget = string | { [condition: string]: ExportTarget };\ntype StoreExports = Record<string, ExportTarget>;\n\ntype CodegenInputs = {\n girPath: string[];\n libraries: string[];\n store: CodegenStore;\n};\n\nconst PACKAGE_EXPORT = \"./package.json\";\nconst JSX_REQUIRED_EXPORTS = [PACKAGE_EXPORT, \"./metadata\", \"./gtk\", \"./adw\"];\n\nconst resolveCodegenInputs = (cwd: string, config: Config): CodegenInputs => {\n const girPath = resolveGirPath(config.girPath);\n const libraries = resolveLibraries(config.libraries);\n const store = resolveCodegenStore(cwd);\n\n return { girPath, libraries, store };\n};\n\nconst namespaceExport = (library: string): string => {\n const separator = library.indexOf(\"-\");\n const namespace = (separator === -1 ? library : library.slice(0, separator)).toLowerCase();\n\n return `./${namespace}`;\n};\n\nconst targetFiles = (target: ExportTarget): string[] =>\n typeof target === \"string\" ? [target] : Object.values(target).flatMap((nested) => targetFiles(nested));\n\nconst indexExtension = (target: string): string | undefined => {\n if (target.endsWith(\"/index.d.ts\")) {\n return \".d.ts\";\n }\n\n return target.endsWith(\"/index.js\") ? \".js\" : undefined;\n};\n\nconst implementationFile = (target: string): string | undefined => {\n const extension = indexExtension(target);\n\n if (extension === undefined) {\n return undefined;\n }\n\n const directory = dirname(target);\n\n return join(directory, `${basename(directory)}${extension}`);\n};\n\nconst generatedFiles = (exports: StoreExports): string[] =>\n Object.values(exports)\n .flatMap((target) => targetFiles(target))\n .flatMap((target) => {\n const implementation = implementationFile(target);\n\n return implementation === undefined ? [target] : [target, implementation];\n });\n\nconst hasStoreExports = (storeDir: string, required: string[], forbidden: string[] = []): boolean => {\n const manifestPath = join(storeDir, \"package.json\");\n\n if (!existsSync(manifestPath)) {\n return false;\n }\n\n const manifest = JSON.parse(readFileSync(manifestPath, \"utf8\")) as {\n exports?: StoreExports;\n };\n const exports = manifest.exports;\n\n if (exports === undefined || required.some((key) => !Object.hasOwn(exports, key)) ||\n forbidden.some((key) => Object.hasOwn(exports, key))) {\n return false;\n }\n\n const files = generatedFiles(exports);\n\n return files.length > 0 && files.every((file) => existsSync(join(storeDir, file)));\n};\n\nconst isGiStoreStale = (store: CodegenStore, libraries: string[]): boolean => {\n const required = [PACKAGE_EXPORT, ...libraries.map((library) => namespaceExport(library))];\n\n return !hasStoreExports(store.giStoreDir, required);\n};\n\nconst isReactStoreStale = (store: CodegenStore): boolean => {\n if (store.react === null) {\n return false;\n }\n\n return !hasStoreExports(store.jsxStoreDir, JSX_REQUIRED_EXPORTS, [\".\"]);\n};\n\nconst isCodegenStale = (inputs: CodegenInputs): boolean => {\n try {\n return isGiStoreStale(inputs.store, inputs.libraries) || isReactStoreStale(inputs.store);\n } catch {\n return true;\n }\n};\n\nexport { resolveCodegenInputs, isCodegenStale, type CodegenInputs };\n"]}
@@ -0,0 +1,17 @@
1
+ import type { Config } from "@gtkx/config";
2
+ type WriteReferenceOptions = {
3
+ root: string;
4
+ config: Config;
5
+ girPath: string[];
6
+ libraries: string[];
7
+ isForced?: boolean;
8
+ };
9
+ type ReferenceResult = {
10
+ isRegenerated: boolean;
11
+ elements: number;
12
+ namespaces: number;
13
+ };
14
+ declare const REFERENCE_PATH = ".gtkx/reference";
15
+ declare const writeReference: (options: WriteReferenceOptions) => Promise<ReferenceResult>;
16
+ export { REFERENCE_PATH, writeReference, type ReferenceResult };
17
+ //# sourceMappingURL=reference.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reference.d.ts","sourceRoot":"","sources":["../../src/codegen/reference.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAO3C,KAAK,qBAAqB,GAAG;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACtB,CAAC;AAEF,KAAK,eAAe,GAAG;IACnB,aAAa,EAAE,OAAO,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,QAAA,MAAM,cAAc,oBAAoB,CAAC;AAGzC,QAAA,MAAM,cAAc,GAAU,SAAS,qBAAqB,KAAG,OAAO,CAAC,eAAe,CAyBrF,CAAC;AAEF,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,KAAK,eAAe,EAAE,CAAC"}
@@ -0,0 +1,31 @@
1
+ import { mergeOmittedProps } from "@gtkx/codegen";
2
+ import { writeDocs } from "@gtkx/codegen/internal";
3
+ import { isAgentReferenceEnabled, resolveOmittedProps } from "@gtkx/config/internal";
4
+ import { join } from "node:path";
5
+ import { resolveDocsElements } from "../internal/docs-elements.js";
6
+ const REFERENCE_PATH = ".gtkx/reference";
7
+ const SKIPPED = { isRegenerated: false, elements: 0, namespaces: 0 };
8
+ const writeReference = async (options) => {
9
+ const { root, config, girPath, libraries } = options;
10
+ if (!isAgentReferenceEnabled(config) || girPath.length === 0 || libraries.length === 0) {
11
+ return SKIPPED;
12
+ }
13
+ const builtin = await resolveDocsElements(root);
14
+ const { isRegenerated, namespaces } = writeDocs({
15
+ libraries,
16
+ girPath,
17
+ outDir: join(root, REFERENCE_PATH),
18
+ basePath: REFERENCE_PATH,
19
+ linkStyle: "file",
20
+ props: builtin.props,
21
+ omittedProps: mergeOmittedProps(builtin.omittedProps, resolveOmittedProps(config.elements)),
22
+ isForced: options.isForced === true,
23
+ });
24
+ return {
25
+ isRegenerated,
26
+ elements: namespaces.reduce((total, namespace) => total + namespace.elements.length, 0),
27
+ namespaces: namespaces.length,
28
+ };
29
+ };
30
+ export { REFERENCE_PATH, writeReference };
31
+ //# sourceMappingURL=reference.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reference.js","sourceRoot":"","sources":["../../src/codegen/reference.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AACrF,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AAgBnE,MAAM,cAAc,GAAG,iBAAiB,CAAC;AACzC,MAAM,OAAO,GAAoB,EAAE,aAAa,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC;AAEtF,MAAM,cAAc,GAAG,KAAK,EAAE,OAA8B,EAA4B,EAAE;IACtF,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC;IAErD,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrF,OAAO,OAAO,CAAC;IACnB,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAEhD,MAAM,EAAE,aAAa,EAAE,UAAU,EAAE,GAAG,SAAS,CAAC;QAC5C,SAAS;QACT,OAAO;QACP,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE,cAAc,CAAC;QAClC,QAAQ,EAAE,cAAc;QACxB,SAAS,EAAE,MAAM;QACjB,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,YAAY,EAAE,iBAAiB,CAAC,OAAO,CAAC,YAAY,EAAE,mBAAmB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC3F,QAAQ,EAAE,OAAO,CAAC,QAAQ,KAAK,IAAI;KACtC,CAAC,CAAC;IAEH,OAAO;QACH,aAAa;QACb,QAAQ,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE,CAAC,KAAK,GAAG,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;QACvF,UAAU,EAAE,UAAU,CAAC,MAAM;KAChC,CAAC;AACN,CAAC,CAAC;AAEF,OAAO,EAAE,cAAc,EAAE,cAAc,EAAwB,CAAC","sourcesContent":["import type { Config } from \"@gtkx/config\";\nimport { mergeOmittedProps } from \"@gtkx/codegen\";\nimport { writeDocs } from \"@gtkx/codegen/internal\";\nimport { isAgentReferenceEnabled, resolveOmittedProps } from \"@gtkx/config/internal\";\nimport { join } from \"node:path\";\nimport { resolveDocsElements } from \"../internal/docs-elements.js\";\n\ntype WriteReferenceOptions = {\n root: string;\n config: Config;\n girPath: string[];\n libraries: string[];\n isForced?: boolean;\n};\n\ntype ReferenceResult = {\n isRegenerated: boolean;\n elements: number;\n namespaces: number;\n};\n\nconst REFERENCE_PATH = \".gtkx/reference\";\nconst SKIPPED: ReferenceResult = { isRegenerated: false, elements: 0, namespaces: 0 };\n\nconst writeReference = async (options: WriteReferenceOptions): Promise<ReferenceResult> => {\n const { root, config, girPath, libraries } = options;\n\n if (!isAgentReferenceEnabled(config) || girPath.length === 0 || libraries.length === 0) {\n return SKIPPED;\n }\n\n const builtin = await resolveDocsElements(root);\n\n const { isRegenerated, namespaces } = writeDocs({\n libraries,\n girPath,\n outDir: join(root, REFERENCE_PATH),\n basePath: REFERENCE_PATH,\n linkStyle: \"file\",\n props: builtin.props,\n omittedProps: mergeOmittedProps(builtin.omittedProps, resolveOmittedProps(config.elements)),\n isForced: options.isForced === true,\n });\n\n return {\n isRegenerated,\n elements: namespaces.reduce((total, namespace) => total + namespace.elements.length, 0),\n namespaces: namespaces.length,\n };\n};\n\nexport { REFERENCE_PATH, writeReference, type ReferenceResult };\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"report.d.ts","sourceRoot":"","sources":["../../src/codegen/report.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAIzD,QAAA,MAAM,mBAAmB,GAAI,QAAQ,gBAAgB,EAAE,SAAS,MAAM,KAAG,MAAM,EAyB9E,CAAC;AAEF,OAAO,EAAE,mBAAmB,EAAE,CAAC"}
1
+ {"version":3,"file":"report.d.ts","sourceRoot":"","sources":["../../src/codegen/report.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAmBzD,QAAA,MAAM,mBAAmB,GAAI,QAAQ,gBAAgB,EAAE,SAAS,MAAM,KAAG,MAAM,EAS9E,CAAC;AAEF,OAAO,EAAE,mBAAmB,EAAE,CAAC"}
@@ -1,20 +1,23 @@
1
+ import { REFERENCE_PATH } from "./reference.js";
1
2
  const PREFIX = "codegen: ";
2
- const formatCodegenResult = (result, totalMs) => {
3
- const details = [];
4
- if (result.configFile) {
5
- details.push(`config=${result.configFile}`);
6
- }
7
- if (result.libraries) {
8
- details.push(`libraries=${result.libraries.join(", ")}`);
9
- }
10
- if (result.girPath) {
11
- details.push(`girPath=${result.girPath.join(":")}`);
3
+ const contextDetails = (result) => [
4
+ `config=${result.configFile}`,
5
+ `libraries=${result.libraries.join(", ")}`,
6
+ `girPath=${result.girPath.join(":")}`,
7
+ ];
8
+ const referenceDetails = (result) => {
9
+ if (result.reference?.isRegenerated !== true) {
10
+ return [];
12
11
  }
13
- if (result.future && result.future.length > 0) {
14
- details.push(`future=${result.future.join(", ")}`);
15
- }
16
- details.push(`${String(result.namespaces)} namespaces, ${String(result.intrinsicElements)} intrinsic elements ` +
17
- `in ${String(result.duration)}ms (total ${String(totalMs)}ms)`);
12
+ return [`${String(result.reference.elements)} reference pages in ${REFERENCE_PATH}`];
13
+ };
14
+ const formatCodegenResult = (result, totalMs) => {
15
+ const details = [
16
+ ...contextDetails(result),
17
+ `${String(result.namespaces)} namespaces, ${String(result.intrinsicElements)} intrinsic elements ` +
18
+ `in ${String(result.duration)}ms (total ${String(totalMs)}ms)`,
19
+ ...referenceDetails(result),
20
+ ];
18
21
  return details.map((detail) => PREFIX + detail);
19
22
  };
20
23
  export { formatCodegenResult };
@@ -1 +1 @@
1
- {"version":3,"file":"report.js","sourceRoot":"","sources":["../../src/codegen/report.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,GAAG,WAAW,CAAC;AAE3B,MAAM,mBAAmB,GAAG,CAAC,MAAwB,EAAE,OAAe,EAAY,EAAE;IAChF,MAAM,OAAO,GAAa,EAAE,CAAC;IAE7B,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;QACpB,OAAO,CAAC,IAAI,CAAC,UAAU,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;IAChD,CAAC;IAED,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;QACnB,OAAO,CAAC,IAAI,CAAC,aAAa,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC7D,CAAC;IAED,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACjB,OAAO,CAAC,IAAI,CAAC,WAAW,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACxD,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5C,OAAO,CAAC,IAAI,CAAC,UAAU,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACvD,CAAC;IAED,OAAO,CAAC,IAAI,CACR,GAAG,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,gBAAgB,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC,sBAAsB;QAClG,MAAM,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,MAAM,CAAC,OAAO,CAAC,KAAK,CACjE,CAAC;IAEF,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;AACpD,CAAC,CAAC;AAEF,OAAO,EAAE,mBAAmB,EAAE,CAAC","sourcesContent":["import type { RunCodegenResult } from \"./run-codegen.js\";\n\nconst PREFIX = \"codegen: \";\n\nconst formatCodegenResult = (result: RunCodegenResult, totalMs: number): string[] => {\n const details: string[] = [];\n\n if (result.configFile) {\n details.push(`config=${result.configFile}`);\n }\n\n if (result.libraries) {\n details.push(`libraries=${result.libraries.join(\", \")}`);\n }\n\n if (result.girPath) {\n details.push(`girPath=${result.girPath.join(\":\")}`);\n }\n\n if (result.future && result.future.length > 0) {\n details.push(`future=${result.future.join(\", \")}`);\n }\n\n details.push(\n `${String(result.namespaces)} namespaces, ${String(result.intrinsicElements)} intrinsic elements ` +\n `in ${String(result.duration)}ms (total ${String(totalMs)}ms)`,\n );\n\n return details.map((detail) => PREFIX + detail);\n};\n\nexport { formatCodegenResult };\n"]}
1
+ {"version":3,"file":"report.js","sourceRoot":"","sources":["../../src/codegen/report.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAEhD,MAAM,MAAM,GAAG,WAAW,CAAC;AAE3B,MAAM,cAAc,GAAG,CAAC,MAAwB,EAAY,EAAE,CAAC;IAC3D,UAAU,MAAM,CAAC,UAAU,EAAE;IAC7B,aAAa,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;IAC1C,WAAW,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;CACxC,CAAC;AAEF,MAAM,gBAAgB,GAAG,CAAC,MAAwB,EAAY,EAAE;IAC5D,IAAI,MAAM,CAAC,SAAS,EAAE,aAAa,KAAK,IAAI,EAAE,CAAC;QAC3C,OAAO,EAAE,CAAC;IACd,CAAC;IAED,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,uBAAuB,cAAc,EAAE,CAAC,CAAC;AACzF,CAAC,CAAC;AAEF,MAAM,mBAAmB,GAAG,CAAC,MAAwB,EAAE,OAAe,EAAY,EAAE;IAChF,MAAM,OAAO,GAAG;QACZ,GAAG,cAAc,CAAC,MAAM,CAAC;QACzB,GAAG,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,gBAAgB,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC,sBAAsB;YAClG,MAAM,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,MAAM,CAAC,OAAO,CAAC,KAAK;QAC9D,GAAG,gBAAgB,CAAC,MAAM,CAAC;KAC9B,CAAC;IAEF,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;AACpD,CAAC,CAAC;AAEF,OAAO,EAAE,mBAAmB,EAAE,CAAC","sourcesContent":["import type { RunCodegenResult } from \"./run-codegen.js\";\nimport { REFERENCE_PATH } from \"./reference.js\";\n\nconst PREFIX = \"codegen: \";\n\nconst contextDetails = (result: RunCodegenResult): string[] => [\n `config=${result.configFile}`,\n `libraries=${result.libraries.join(\", \")}`,\n `girPath=${result.girPath.join(\":\")}`,\n];\n\nconst referenceDetails = (result: RunCodegenResult): string[] => {\n if (result.reference?.isRegenerated !== true) {\n return [];\n }\n\n return [`${String(result.reference.elements)} reference pages in ${REFERENCE_PATH}`];\n};\n\nconst formatCodegenResult = (result: RunCodegenResult, totalMs: number): string[] => {\n const details = [\n ...contextDetails(result),\n `${String(result.namespaces)} namespaces, ${String(result.intrinsicElements)} intrinsic elements ` +\n `in ${String(result.duration)}ms (total ${String(totalMs)}ms)`,\n ...referenceDetails(result),\n ];\n\n return details.map((detail) => PREFIX + detail);\n};\n\nexport { formatCodegenResult };\n"]}
@@ -1,5 +1,6 @@
1
1
  import { type Config } from "@gtkx/config";
2
2
  import { type CodegenInputs } from "./freshness.js";
3
+ import { type ReferenceResult } from "./reference.js";
3
4
  import { type CodegenContext } from "./store-resolver.js";
4
5
  type RunCodegenOptions = {
5
6
  cwd?: string;
@@ -17,12 +18,11 @@ type RunCodegenResult = {
17
18
  isRegenerated: boolean;
18
19
  namespaces: number;
19
20
  intrinsicElements: number;
20
- notices: string[];
21
21
  duration: number;
22
- girPath?: string[] | undefined;
23
- configFile?: string | undefined;
24
- libraries?: string[] | undefined;
25
- future?: string[] | undefined;
22
+ girPath: string[];
23
+ configFile: string;
24
+ libraries: string[];
25
+ reference?: ReferenceResult | undefined;
26
26
  };
27
27
  type EnsureGeneratedOptions = {
28
28
  shouldAnnounce?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"run-codegen.d.ts","sourceRoot":"","sources":["../../src/codegen/run-codegen.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,MAAM,EAAc,MAAM,cAAc,CAAC;AAgBvD,OAAO,EAAE,KAAK,aAAa,EAAwC,MAAM,gBAAgB,CAAC;AAC1F,OAAO,EAAE,KAAK,cAAc,EAA4C,MAAM,qBAAqB,CAAC;AAEpG,KAAK,iBAAiB,GAAG;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,0BAA0B,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CACpD,CAAC;AAEF,KAAK,YAAY,GAAG;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,KAAK,gBAAgB,GAAG;IACpB,aAAa,EAAE,OAAO,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IAC/B,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,SAAS,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IACjC,MAAM,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;CACjC,CAAC;AAeF,KAAK,sBAAsB,GAAG;IAC1B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,0BAA0B,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CACpD,CAAC;AAsGF,QAAA,MAAM,UAAU,GAAU,UAAS,iBAAsB,KAAG,OAAO,CAAC,gBAAgB,CA6CnF,CAAC;AAsBF,QAAA,MAAM,iBAAiB,GAAU,KAAK,MAAM,EAAE,OAAO,MAAM,KAAG,OAAO,CAAC,OAAO,CAQ5E,CAAC;AAuEF,QAAA,MAAM,iBAAiB,GACnB,SAAS,cAAc,EACvB,UAAS,sBAA2B,KACrC,OAAO,CAAC,OAAO,CAAuE,CAAC;AAG1F,QAAA,MAAM,eAAe,GAAU,KAAK,MAAM,EAAE,UAAS,sBAA2B,KAAG,OAAO,CAAC,OAAO,CACS,CAAC;AAE5G,QAAA,MAAM,kBAAkB,GACpB,KAAK,MAAM,EACX,OAAO,MAAM,KACd,OAAO,CAAC;IAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IAAC,UAAU,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CAAE,CAS9D,CAAC;AAEF,OAAO,EACH,UAAU,EACV,iBAAiB,EACjB,eAAe,EACf,iBAAiB,EACjB,kBAAkB,EAClB,KAAK,gBAAgB,GACxB,CAAC"}
1
+ {"version":3,"file":"run-codegen.d.ts","sourceRoot":"","sources":["../../src/codegen/run-codegen.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,MAAM,EAAc,MAAM,cAAc,CAAC;AAiBvD,OAAO,EAAE,KAAK,aAAa,EAAwC,MAAM,gBAAgB,CAAC;AAC1F,OAAO,EAAE,KAAK,eAAe,EAAkB,MAAM,gBAAgB,CAAC;AACtE,OAAO,EAAE,KAAK,cAAc,EAA4C,MAAM,qBAAqB,CAAC;AAEpG,KAAK,iBAAiB,GAAG;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,0BAA0B,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CACpD,CAAC;AAEF,KAAK,YAAY,GAAG;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,KAAK,gBAAgB,GAAG;IACpB,aAAa,EAAE,OAAO,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,SAAS,CAAC,EAAE,eAAe,GAAG,SAAS,CAAC;CAC3C,CAAC;AAWF,KAAK,sBAAsB,GAAG;IAC1B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,0BAA0B,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CACpD,CAAC;AAsEF,QAAA,MAAM,UAAU,GAAU,UAAS,iBAAsB,KAAG,OAAO,CAAC,gBAAgB,CAuCnF,CAAC;AAsBF,QAAA,MAAM,iBAAiB,GAAU,KAAK,MAAM,EAAE,OAAO,MAAM,KAAG,OAAO,CAAC,OAAO,CAQ5E,CAAC;AAoDF,QAAA,MAAM,iBAAiB,GACnB,SAAS,cAAc,EACvB,UAAS,sBAA2B,KACrC,OAAO,CAAC,OAAO,CAAuE,CAAC;AAG1F,QAAA,MAAM,eAAe,GAAU,KAAK,MAAM,EAAE,UAAS,sBAA2B,KAAG,OAAO,CAAC,OAAO,CACS,CAAC;AAE5G,QAAA,MAAM,kBAAkB,GACpB,KAAK,MAAM,EACX,OAAO,MAAM,KACd,OAAO,CAAC;IAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IAAC,UAAU,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CAAE,CAS9D,CAAC;AAEF,OAAO,EACH,UAAU,EACV,iBAAiB,EACjB,eAAe,EACf,iBAAiB,EACjB,kBAAkB,EAClB,KAAK,gBAAgB,GACxB,CAAC"}
@@ -1,17 +1,18 @@
1
1
  import { runCodegen as runCodegenCore } from "@gtkx/codegen";
2
2
  import { getShadowingStorePaths, sweepProjectStaging } from "@gtkx/codegen/internal";
3
3
  import { loadConfig } from "@gtkx/config";
4
- import { resolveElementComponents, resolveElementProps, resolveLazyElements, resolveOmittedProps, } from "@gtkx/config/internal";
5
- import { info, warn } from "@gtkx/utils";
4
+ import { isAgentRulesEnabled, resolveElementComponents, resolveElementProps, resolveLazyElements, resolveOmittedProps, } from "@gtkx/config/internal";
5
+ import { info } from "@gtkx/utils";
6
6
  import { existsSync, rmSync } from "node:fs";
7
7
  import { join, resolve } from "node:path";
8
8
  import { resolveCatalogProject, synchronizeCatalogs } from "../i18n/catalogs.js";
9
9
  import { extractSourceCatalog } from "../i18n/source-messages.js";
10
- import { emitI18nTypes } from "../i18n/types.js";
11
- import { resolveDataDir } from "../internal/data-dir.js";
10
+ import { clearI18nTypes, emitI18nTypes } from "../i18n/types.js";
11
+ import { upsertAgentRules } from "../internal/agent-rules.js";
12
12
  import { discoverSourceFiles } from "../internal/source-imports.js";
13
13
  import { emitSchemaEnv } from "../settings/schema.js";
14
14
  import { isCodegenStale, resolveCodegenInputs } from "./freshness.js";
15
+ import { writeReference } from "./reference.js";
15
16
  import { resolveCodegenContext } from "./store-resolver.js";
16
17
  const GIR_PATH_MISSING_MESSAGE = "No GIR search paths available. Install gobject-introspection " +
17
18
  "(Linux: `sudo dnf install gobject-introspection-devel` or `sudo apt install libgirepository1.0-dev`), " +
@@ -25,13 +26,9 @@ const removeShadowingStores = (cwd) => {
25
26
  sweepProjectStaging(cwd);
26
27
  removeStores(getShadowingStorePaths(cwd));
27
28
  };
28
- const codegenOptions = ({ store, libraries, girPath, elements, ...future }) => ({
29
+ const codegenOptions = ({ store, libraries, girPath, elements }) => ({
29
30
  libraries,
30
31
  girPath,
31
- isByteArrayTyped: future.isByteArrayTyped,
32
- isValueUnwrapped: future.isValueUnwrapped,
33
- isFinishTrimmed: future.isFinishTrimmed,
34
- isInoutInPlace: future.isInoutInPlace,
35
32
  gi: {
36
33
  storeDir: store.giStoreDir,
37
34
  linkDir: store.giLinkDir,
@@ -44,40 +41,25 @@ const codegenOptions = ({ store, libraries, girPath, elements, ...future }) => (
44
41
  linkDir: store.jsxLinkDir,
45
42
  version: store.react.version,
46
43
  },
47
- reactSubexports: store.react?.subexports ?? [],
48
44
  userComponents: resolveElementComponents(elements),
49
45
  userProps: resolveElementProps(elements),
50
46
  userLazyElements: resolveLazyElements(elements),
51
47
  userOmittedProps: resolveOmittedProps(elements),
52
48
  });
53
- const enabledFutureFlags = (config) => Object.entries(config.future ?? {})
54
- .filter(([, value]) => value === true)
55
- .map(([name]) => name);
56
49
  const disabledCodegenResult = (configFile) => ({
57
50
  isRegenerated: false,
58
51
  namespaces: 0,
59
52
  intrinsicElements: 0,
60
- notices: [],
61
53
  duration: 0,
62
54
  girPath: [],
63
55
  configFile,
64
56
  libraries: [],
65
57
  });
66
- const warnNotices = (notices) => {
67
- for (const notice of notices) {
68
- warn(notice);
69
- }
70
- };
71
- const regeneratedStorePaths = (store) => {
72
- if (store.react === null) {
73
- return [store.giStoreDir, store.giLinkDir];
74
- }
75
- return [store.giStoreDir, store.giLinkDir, store.jsxStoreDir, store.jsxLinkDir];
76
- };
77
58
  const clearGeneratedStores = (store) => {
78
- removeStores(regeneratedStorePaths(store));
59
+ removeStores(store.react === null
60
+ ? [store.giStoreDir, store.giLinkDir]
61
+ : [store.giStoreDir, store.giLinkDir, store.jsxStoreDir, store.jsxLinkDir]);
79
62
  };
80
- const resolveLoadedConfig = async (options, cwd) => options.resolved ?? (await loadConfig(cwd, { mode: options.mode }));
81
63
  const prepareCodegen = (options, cwd, config) => {
82
64
  const { girPath, libraries, store } = options.inputs ?? resolveCodegenInputs(cwd, config);
83
65
  if (girPath.length === 0) {
@@ -88,9 +70,9 @@ const prepareCodegen = (options, cwd, config) => {
88
70
  };
89
71
  const runCodegen = async (options = {}) => {
90
72
  const cwd = options.cwd ?? process.cwd();
91
- const { config, configFile } = await resolveLoadedConfig(options, cwd);
73
+ const { config, configFile } = options.resolved ?? (await loadConfig(cwd, { mode: options.mode }));
92
74
  await syncI18n(cwd, config.applicationId, options.shouldPreserveI18nMetadata);
93
- syncSchemaEnv(cwd, config.future?.v2ResourceImports === true);
75
+ emitSchemaEnv(cwd);
94
76
  if (config.codegen === false) {
95
77
  removeShadowingStores(cwd);
96
78
  return disabledCodegenResult(configFile);
@@ -100,42 +82,35 @@ const runCodegen = async (options = {}) => {
100
82
  clearGeneratedStores(store);
101
83
  }
102
84
  const result = await runCodegenCore({
103
- ...codegenOptions({
104
- store,
105
- libraries,
106
- girPath,
107
- elements: config.elements,
108
- isByteArrayTyped: config.future?.v2ByteArrays === true,
109
- isValueUnwrapped: config.future?.v2ValueReturns === true,
110
- isFinishTrimmed: config.future?.v2FinishResults === true,
111
- isInoutInPlace: config.future?.v2InoutReturns === true,
112
- }),
85
+ ...codegenOptions({ store, libraries, girPath, elements: config.elements }),
113
86
  isForced,
114
87
  });
115
- warnNotices(result.notices);
88
+ const reference = await writeReference({ root: cwd, config, girPath, libraries, isForced });
89
+ if (isAgentRulesEnabled(config)) {
90
+ upsertAgentRules(cwd);
91
+ }
116
92
  return {
117
93
  isRegenerated: result.isRegenerated,
118
94
  namespaces: result.namespaces,
119
95
  intrinsicElements: result.intrinsicElements,
120
- notices: result.notices,
121
96
  duration: result.duration,
122
97
  girPath,
123
98
  configFile,
124
99
  libraries,
125
- future: enabledFutureFlags(config),
100
+ reference,
126
101
  };
127
102
  };
128
103
  const syncI18n = async (root, applicationId, shouldPreserveMetadataMessages = true) => {
129
104
  const project = resolveCatalogProject(root, applicationId);
130
105
  if (project === null) {
131
- emitI18nTypes(root, [], false);
106
+ clearI18nTypes(root);
132
107
  return;
133
108
  }
134
109
  const srcDir = join(root, "src");
135
110
  const sourceFiles = discoverSourceFiles(existsSync(srcDir) ? srcDir : root);
136
- const catalog = await extractSourceCatalog(project, sourceFiles, shouldPreserveMetadataMessages);
111
+ await extractSourceCatalog(project, sourceFiles, shouldPreserveMetadataMessages);
137
112
  synchronizeCatalogs(project);
138
- emitI18nTypes(root, catalog.messages);
113
+ await emitI18nTypes(root);
139
114
  };
140
115
  const isCodegenDisabled = async (cwd, mode) => {
141
116
  try {
@@ -146,10 +121,6 @@ const isCodegenDisabled = async (cwd, mode) => {
146
121
  return false;
147
122
  }
148
123
  };
149
- const syncSchemaEnv = (cwd, isV2ResourceImports = false) => {
150
- const dataDir = isV2ResourceImports ? null : resolveDataDir(cwd);
151
- emitSchemaEnv(cwd, dataDir, isV2ResourceImports);
152
- };
153
124
  const resolveInputsOrNull = (cwd, config) => {
154
125
  try {
155
126
  return resolveCodegenInputs(cwd, config);
@@ -166,12 +137,6 @@ const maybeAnnounceStale = (shouldAnnounce, inputs) => {
166
137
  info("generated bindings missing; running codegen...");
167
138
  }
168
139
  };
169
- const getRunOptions = ({ root, mode, inputs, resolved, shouldPreserveI18nMetadata, }) => {
170
- if (inputs === null) {
171
- return { cwd: root, mode, resolved, shouldPreserveI18nMetadata };
172
- }
173
- return { cwd: root, mode, inputs, resolved, shouldPreserveI18nMetadata };
174
- };
175
140
  const isPreflightSkipped = (options) => options.shouldAnnounce === true && process.env.GTKX_DISABLE_PREFLIGHT === "1";
176
141
  /* eslint-disable-next-line unicorn/consistent-boolean-name -- the boolean reports whether codegen ran */
177
142
  const generate = async (context, options) => {
@@ -187,13 +152,13 @@ const generate = async (context, options) => {
187
152
  const inputs = resolveInputsOrNull(context.root, context.config);
188
153
  maybeAnnounceStale(options.shouldAnnounce, inputs);
189
154
  const resolved = { config: context.config, configFile: context.configFile };
190
- const result = await runCodegen(getRunOptions({
191
- root: context.root,
155
+ const result = await runCodegen({
156
+ cwd: context.root,
192
157
  mode: options.mode,
193
- inputs,
194
158
  resolved,
195
159
  shouldPreserveI18nMetadata: options.shouldPreserveI18nMetadata,
196
- }));
160
+ ...(inputs !== null && { inputs }),
161
+ });
197
162
  return result.isRegenerated;
198
163
  };
199
164
  /* eslint-disable-next-line unicorn/consistent-boolean-name -- the boolean reports whether codegen ran */