create-fluxstack 1.10.1 → 1.12.0

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 (257) hide show
  1. package/.dockerignore +1 -2
  2. package/Dockerfile +8 -8
  3. package/LLMD/INDEX.md +64 -0
  4. package/LLMD/MAINTENANCE.md +197 -0
  5. package/LLMD/MIGRATION.md +156 -0
  6. package/LLMD/config/.gitkeep +1 -0
  7. package/LLMD/config/declarative-system.md +268 -0
  8. package/LLMD/config/environment-vars.md +327 -0
  9. package/LLMD/config/runtime-reload.md +401 -0
  10. package/LLMD/core/.gitkeep +1 -0
  11. package/LLMD/core/build-system.md +599 -0
  12. package/LLMD/core/framework-lifecycle.md +229 -0
  13. package/LLMD/core/plugin-system.md +451 -0
  14. package/LLMD/patterns/.gitkeep +1 -0
  15. package/LLMD/patterns/anti-patterns.md +297 -0
  16. package/LLMD/patterns/project-structure.md +264 -0
  17. package/LLMD/patterns/type-safety.md +440 -0
  18. package/LLMD/reference/.gitkeep +1 -0
  19. package/LLMD/reference/cli-commands.md +250 -0
  20. package/LLMD/reference/plugin-hooks.md +357 -0
  21. package/LLMD/reference/routing.md +39 -0
  22. package/LLMD/reference/troubleshooting.md +364 -0
  23. package/LLMD/resources/.gitkeep +1 -0
  24. package/LLMD/resources/controllers.md +465 -0
  25. package/LLMD/resources/live-components.md +703 -0
  26. package/LLMD/resources/live-rooms.md +482 -0
  27. package/LLMD/resources/live-upload.md +130 -0
  28. package/LLMD/resources/plugins-external.md +617 -0
  29. package/LLMD/resources/routes-eden.md +254 -0
  30. package/README.md +37 -17
  31. package/app/client/index.html +0 -1
  32. package/app/client/src/App.tsx +107 -150
  33. package/app/client/src/components/AppLayout.tsx +68 -0
  34. package/app/client/src/components/BackButton.tsx +13 -0
  35. package/app/client/src/components/DemoPage.tsx +20 -0
  36. package/app/client/src/components/LiveUploadWidget.tsx +204 -0
  37. package/app/client/src/lib/eden-api.ts +85 -60
  38. package/app/client/src/live/ChatDemo.tsx +107 -0
  39. package/app/client/src/live/CounterDemo.tsx +206 -0
  40. package/app/client/src/live/FormDemo.tsx +119 -0
  41. package/app/client/src/live/RoomChatDemo.tsx +242 -0
  42. package/app/client/src/live/UploadDemo.tsx +21 -0
  43. package/app/client/src/main.tsx +4 -1
  44. package/app/client/src/pages/ApiTestPage.tsx +108 -0
  45. package/app/client/src/pages/HomePage.tsx +76 -0
  46. package/app/server/app.ts +1 -4
  47. package/app/server/controllers/users.controller.ts +36 -44
  48. package/app/server/index.ts +25 -35
  49. package/app/server/live/LiveChat.ts +77 -0
  50. package/app/server/live/LiveCounter.ts +67 -0
  51. package/app/server/live/LiveForm.ts +63 -0
  52. package/app/server/live/LiveLocalCounter.ts +32 -0
  53. package/app/server/live/LiveRoomChat.ts +285 -0
  54. package/app/server/live/LiveUpload.ts +81 -0
  55. package/app/server/routes/index.ts +3 -1
  56. package/app/server/routes/room.routes.ts +117 -0
  57. package/app/server/routes/users.routes.ts +35 -27
  58. package/app/shared/types/index.ts +14 -2
  59. package/config/app.config.ts +2 -62
  60. package/config/client.config.ts +2 -95
  61. package/config/database.config.ts +2 -99
  62. package/config/fluxstack.config.ts +25 -45
  63. package/config/index.ts +57 -38
  64. package/config/monitoring.config.ts +2 -114
  65. package/config/plugins.config.ts +2 -80
  66. package/config/server.config.ts +2 -68
  67. package/config/services.config.ts +2 -130
  68. package/config/system/app.config.ts +29 -0
  69. package/config/system/build.config.ts +49 -0
  70. package/config/system/client.config.ts +68 -0
  71. package/config/system/database.config.ts +17 -0
  72. package/config/system/fluxstack.config.ts +114 -0
  73. package/config/{logger.config.ts → system/logger.config.ts} +3 -1
  74. package/config/system/monitoring.config.ts +114 -0
  75. package/config/system/plugins.config.ts +84 -0
  76. package/config/{runtime.config.ts → system/runtime.config.ts} +1 -1
  77. package/config/system/server.config.ts +68 -0
  78. package/config/system/services.config.ts +46 -0
  79. package/config/{system.config.ts → system/system.config.ts} +1 -1
  80. package/core/build/flux-plugins-generator.ts +325 -325
  81. package/core/build/index.ts +39 -27
  82. package/core/build/live-components-generator.ts +3 -3
  83. package/core/build/optimizer.ts +235 -235
  84. package/core/cli/command-registry.ts +6 -4
  85. package/core/cli/commands/build.ts +79 -0
  86. package/core/cli/commands/create.ts +54 -0
  87. package/core/cli/commands/dev.ts +101 -0
  88. package/core/cli/commands/help.ts +34 -0
  89. package/core/cli/commands/index.ts +34 -0
  90. package/core/cli/commands/make-plugin.ts +90 -0
  91. package/core/cli/commands/plugin-add.ts +197 -0
  92. package/core/cli/commands/plugin-deps.ts +2 -2
  93. package/core/cli/commands/plugin-list.ts +208 -0
  94. package/core/cli/commands/plugin-remove.ts +170 -0
  95. package/core/cli/generators/component.ts +769 -769
  96. package/core/cli/generators/controller.ts +1 -1
  97. package/core/cli/generators/index.ts +146 -146
  98. package/core/cli/generators/interactive.ts +227 -227
  99. package/core/cli/generators/plugin.ts +2 -2
  100. package/core/cli/generators/prompts.ts +82 -82
  101. package/core/cli/generators/route.ts +6 -6
  102. package/core/cli/generators/service.ts +2 -2
  103. package/core/cli/generators/template-engine.ts +4 -3
  104. package/core/cli/generators/types.ts +2 -2
  105. package/core/cli/generators/utils.ts +191 -191
  106. package/core/cli/index.ts +115 -686
  107. package/core/cli/plugin-discovery.ts +2 -2
  108. package/core/client/LiveComponentsProvider.tsx +60 -8
  109. package/core/client/api/eden.ts +183 -0
  110. package/core/client/api/index.ts +11 -0
  111. package/core/client/components/Live.tsx +104 -0
  112. package/core/client/fluxstack.ts +1 -9
  113. package/core/client/hooks/AdaptiveChunkSizer.ts +215 -215
  114. package/core/client/hooks/state-validator.ts +1 -1
  115. package/core/client/hooks/useAuth.ts +48 -48
  116. package/core/client/hooks/useChunkedUpload.ts +85 -35
  117. package/core/client/hooks/useLiveChunkedUpload.ts +87 -0
  118. package/core/client/hooks/useLiveComponent.ts +800 -0
  119. package/core/client/hooks/useLiveUpload.ts +71 -0
  120. package/core/client/hooks/useRoom.ts +409 -0
  121. package/core/client/hooks/useRoomProxy.ts +382 -0
  122. package/core/client/index.ts +17 -68
  123. package/core/client/standalone-entry.ts +8 -0
  124. package/core/client/standalone.ts +74 -53
  125. package/core/client/state/createStore.ts +192 -192
  126. package/core/client/state/index.ts +14 -14
  127. package/core/config/index.ts +70 -291
  128. package/core/config/schema.ts +42 -723
  129. package/core/framework/client.ts +131 -131
  130. package/core/framework/index.ts +7 -7
  131. package/core/framework/server.ts +47 -40
  132. package/core/framework/types.ts +2 -2
  133. package/core/index.ts +23 -4
  134. package/core/live/ComponentRegistry.ts +3 -3
  135. package/core/live/types.ts +77 -0
  136. package/core/plugins/built-in/index.ts +134 -134
  137. package/core/plugins/built-in/live-components/commands/create-live-component.ts +242 -1066
  138. package/core/plugins/built-in/live-components/index.ts +1 -1
  139. package/core/plugins/built-in/monitoring/index.ts +111 -47
  140. package/core/plugins/built-in/static/index.ts +1 -1
  141. package/core/plugins/built-in/swagger/index.ts +68 -265
  142. package/core/plugins/built-in/vite/index.ts +85 -185
  143. package/core/plugins/built-in/vite/vite-dev.ts +10 -16
  144. package/core/plugins/config.ts +9 -7
  145. package/core/plugins/dependency-manager.ts +31 -1
  146. package/core/plugins/discovery.ts +19 -7
  147. package/core/plugins/executor.ts +2 -2
  148. package/core/plugins/index.ts +203 -203
  149. package/core/plugins/manager.ts +27 -39
  150. package/core/plugins/module-resolver.ts +19 -8
  151. package/core/plugins/registry.ts +255 -19
  152. package/core/plugins/types.ts +20 -53
  153. package/core/server/framework.ts +66 -43
  154. package/core/server/index.ts +15 -15
  155. package/core/server/live/ComponentRegistry.ts +78 -71
  156. package/core/server/live/FileUploadManager.ts +23 -10
  157. package/core/server/live/LiveComponentPerformanceMonitor.ts +1 -1
  158. package/core/server/live/LiveRoomManager.ts +261 -0
  159. package/core/server/live/RoomEventBus.ts +234 -0
  160. package/core/server/live/RoomStateManager.ts +172 -0
  161. package/core/server/live/StateSignature.ts +643 -643
  162. package/core/server/live/WebSocketConnectionManager.ts +30 -19
  163. package/core/server/live/auto-generated-components.ts +21 -9
  164. package/core/server/live/index.ts +14 -0
  165. package/core/server/live/websocket-plugin.ts +214 -67
  166. package/core/server/middleware/elysia-helpers.ts +7 -2
  167. package/core/server/middleware/errorHandling.ts +1 -1
  168. package/core/server/middleware/index.ts +31 -31
  169. package/core/server/plugins/database.ts +180 -180
  170. package/core/server/plugins/static-files-plugin.ts +69 -69
  171. package/core/server/plugins/swagger.ts +1 -1
  172. package/core/server/rooms/RoomBroadcaster.ts +357 -0
  173. package/core/server/rooms/RoomSystem.ts +463 -0
  174. package/core/server/rooms/index.ts +13 -0
  175. package/core/server/services/BaseService.ts +1 -1
  176. package/core/server/services/ServiceContainer.ts +1 -1
  177. package/core/server/services/index.ts +8 -8
  178. package/core/templates/create-project.ts +12 -12
  179. package/core/testing/index.ts +9 -9
  180. package/core/testing/setup.ts +73 -73
  181. package/core/types/api.ts +168 -168
  182. package/core/types/build.ts +219 -219
  183. package/core/types/config.ts +56 -26
  184. package/core/types/index.ts +4 -4
  185. package/core/types/plugin.ts +107 -107
  186. package/core/types/types.ts +353 -14
  187. package/core/utils/build-logger.ts +324 -324
  188. package/core/utils/config-schema.ts +480 -480
  189. package/core/utils/env.ts +2 -8
  190. package/core/utils/errors/codes.ts +114 -114
  191. package/core/utils/errors/handlers.ts +36 -1
  192. package/core/utils/errors/index.ts +49 -5
  193. package/core/utils/errors/middleware.ts +113 -113
  194. package/core/utils/helpers.ts +6 -16
  195. package/core/utils/index.ts +17 -17
  196. package/core/utils/logger/colors.ts +114 -114
  197. package/core/utils/logger/config.ts +13 -9
  198. package/core/utils/logger/formatter.ts +82 -82
  199. package/core/utils/logger/group-logger.ts +101 -101
  200. package/core/utils/logger/index.ts +6 -1
  201. package/core/utils/logger/stack-trace.ts +3 -1
  202. package/core/utils/logger/startup-banner.ts +82 -82
  203. package/core/utils/logger/winston-logger.ts +152 -152
  204. package/core/utils/monitoring/index.ts +211 -211
  205. package/core/utils/sync-version.ts +66 -66
  206. package/core/utils/version.ts +1 -1
  207. package/create-fluxstack.ts +8 -7
  208. package/package.json +12 -13
  209. package/plugins/crypto-auth/cli/make-protected-route.command.ts +1 -1
  210. package/plugins/crypto-auth/client/CryptoAuthClient.ts +302 -302
  211. package/plugins/crypto-auth/client/components/index.ts +11 -11
  212. package/plugins/crypto-auth/client/index.ts +11 -11
  213. package/plugins/crypto-auth/config/index.ts +1 -1
  214. package/plugins/crypto-auth/index.ts +4 -4
  215. package/plugins/crypto-auth/package.json +65 -65
  216. package/plugins/crypto-auth/server/AuthMiddleware.ts +1 -1
  217. package/plugins/crypto-auth/server/CryptoAuthService.ts +185 -185
  218. package/plugins/crypto-auth/server/index.ts +21 -21
  219. package/plugins/crypto-auth/server/middlewares/cryptoAuthAdmin.ts +3 -3
  220. package/plugins/crypto-auth/server/middlewares/cryptoAuthOptional.ts +1 -1
  221. package/plugins/crypto-auth/server/middlewares/cryptoAuthPermissions.ts +2 -2
  222. package/plugins/crypto-auth/server/middlewares/cryptoAuthRequired.ts +2 -2
  223. package/plugins/crypto-auth/server/middlewares/helpers.ts +1 -1
  224. package/plugins/crypto-auth/server/middlewares/index.ts +22 -22
  225. package/tsconfig.api-strict.json +16 -0
  226. package/tsconfig.json +48 -52
  227. package/{app/client/tsconfig.node.json → tsconfig.node.json} +25 -25
  228. package/types/global.d.ts +29 -29
  229. package/types/vitest.d.ts +8 -8
  230. package/vite.config.ts +38 -62
  231. package/vitest.config.live.ts +10 -9
  232. package/vitest.config.ts +29 -17
  233. package/app/client/README.md +0 -69
  234. package/app/client/SIMPLIFICATION.md +0 -140
  235. package/app/client/frontend-only.ts +0 -12
  236. package/app/client/src/live/FileUploadExample.tsx +0 -359
  237. package/app/client/src/live/MinimalLiveClock.tsx +0 -47
  238. package/app/client/src/live/QuickUploadTest.tsx +0 -193
  239. package/app/client/tsconfig.app.json +0 -45
  240. package/app/client/tsconfig.json +0 -7
  241. package/app/client/zustand-setup.md +0 -65
  242. package/app/server/backend-only.ts +0 -18
  243. package/app/server/live/LiveClockComponent.ts +0 -215
  244. package/app/server/live/LiveFileUploadComponent.ts +0 -77
  245. package/app/server/routes/env-test.ts +0 -110
  246. package/core/client/hooks/index.ts +0 -7
  247. package/core/client/hooks/useHybridLiveComponent.ts +0 -685
  248. package/core/client/hooks/useTypedLiveComponent.ts +0 -133
  249. package/core/client/hooks/useWebSocket.ts +0 -361
  250. package/core/config/env.ts +0 -546
  251. package/core/config/loader.ts +0 -522
  252. package/core/config/runtime-config.ts +0 -327
  253. package/core/config/validator.ts +0 -540
  254. package/core/server/backend-entry.ts +0 -51
  255. package/core/server/standalone.ts +0 -106
  256. package/core/utils/regenerate-files.ts +0 -69
  257. package/fluxstack.config.ts +0 -354
@@ -55,7 +55,7 @@ export class ControllerGenerator implements Generator {
55
55
  content: `import { Elysia, t } from 'elysia'
56
56
  import { {{pascalName}}Service } from '../services/{{kebabName}}.service'
57
57
  import { {{pascalName}}Schema, Create{{pascalName}}Schema, Update{{pascalName}}Schema } from '../schemas/{{kebabName}}.schema'
58
- import { NotFoundError, ValidationError } from '@/core/utils/errors'
58
+ import { NotFoundError, ValidationError } from '@core/utils/errors'
59
59
 
60
60
  export class {{pascalName}}Controller {
61
61
  private service: {{pascalName}}Service
@@ -1,147 +1,147 @@
1
- import type { CliCommand } from "../../plugins/types"
2
- import { ControllerGenerator } from "./controller"
3
- import { RouteGenerator } from "./route"
4
- import { ComponentGenerator } from "./component"
5
- import { ServiceGenerator } from "./service"
6
- import { PluginGenerator } from "./plugin"
7
- import type { GeneratorContext, GeneratorOptions } from "./types"
8
-
9
- export interface Generator {
10
- name: string
11
- description: string
12
- generate(context: GeneratorContext, options: GeneratorOptions): Promise<void>
13
- }
14
-
15
- export class GeneratorRegistry {
16
- private generators = new Map<string, Generator>()
17
-
18
- constructor() {
19
- this.registerBuiltInGenerators()
20
- }
21
-
22
- private registerBuiltInGenerators() {
23
- this.register(new ControllerGenerator())
24
- this.register(new RouteGenerator())
25
- this.register(new ComponentGenerator())
26
- this.register(new ServiceGenerator())
27
- this.register(new PluginGenerator())
28
- }
29
-
30
- register(generator: Generator): void {
31
- this.generators.set(generator.name, generator)
32
- }
33
-
34
- get(name: string): Generator | undefined {
35
- return this.generators.get(name)
36
- }
37
-
38
- getAll(): Generator[] {
39
- return Array.from(this.generators.values())
40
- }
41
-
42
- has(name: string): boolean {
43
- return this.generators.has(name)
44
- }
45
- }
46
-
47
- export const generatorRegistry = new GeneratorRegistry()
48
-
49
- // Export additional commands
50
- export { interactiveGenerateCommand } from "./interactive"
51
-
52
- // CLI command for code generation
53
- export const generateCommand: CliCommand = {
54
- name: 'generate',
55
- description: 'Generate code from templates',
56
- usage: 'flux generate <type> <name> [options]',
57
- aliases: ['g', 'gen'],
58
- category: 'Development',
59
- examples: [
60
- 'flux generate controller user',
61
- 'flux generate component UserCard',
62
- 'flux generate service auth',
63
- 'flux generate route api/users',
64
- 'flux generate plugin my-plugin'
65
- ],
66
- arguments: [
67
- {
68
- name: 'type',
69
- description: 'Type of code to generate',
70
- required: true,
71
- type: 'string',
72
- choices: ['controller', 'route', 'component', 'service', 'plugin']
73
- },
74
- {
75
- name: 'name',
76
- description: 'Name of the generated item',
77
- required: true,
78
- type: 'string'
79
- }
80
- ],
81
- options: [
82
- {
83
- name: 'path',
84
- short: 'p',
85
- description: 'Custom path for generated files',
86
- type: 'string'
87
- },
88
- {
89
- name: 'template',
90
- short: 't',
91
- description: 'Template variant to use',
92
- type: 'string'
93
- },
94
- {
95
- name: 'force',
96
- short: 'f',
97
- description: 'Overwrite existing files',
98
- type: 'boolean',
99
- default: false
100
- },
101
- {
102
- name: 'dry-run',
103
- description: 'Show what would be generated without creating files',
104
- type: 'boolean',
105
- default: false
106
- }
107
- ],
108
- handler: async (args, options, context) => {
109
- const [type, name] = args
110
-
111
- const generator = generatorRegistry.get(type)
112
- if (!generator) {
113
- console.error(`❌ Unknown generator type: ${type}`)
114
- console.log('\nAvailable generators:')
115
- for (const gen of generatorRegistry.getAll()) {
116
- console.log(` ${gen.name.padEnd(12)} ${gen.description}`)
117
- }
118
- return
119
- }
120
-
121
- const generatorContext: GeneratorContext = {
122
- workingDir: context.workingDir,
123
- config: context.config,
124
- logger: context.logger,
125
- utils: context.utils
126
- }
127
-
128
- const generatorOptions: GeneratorOptions = {
129
- name,
130
- path: options.path,
131
- template: options.template,
132
- force: options.force,
133
- dryRun: options['dry-run']
134
- }
135
-
136
- try {
137
- await generator.generate(generatorContext, generatorOptions)
138
-
139
- if (!options['dry-run']) {
140
- console.log(`✅ Successfully generated ${type}: ${name}`)
141
- }
142
- } catch (error) {
143
- console.error(`❌ Failed to generate ${type}:`, error instanceof Error ? error.message : String(error))
144
- throw error
145
- }
146
- }
1
+ import type { CliCommand } from "../../plugins/types"
2
+ import { ControllerGenerator } from "./controller"
3
+ import { RouteGenerator } from "./route"
4
+ import { ComponentGenerator } from "./component"
5
+ import { ServiceGenerator } from "./service"
6
+ import { PluginGenerator } from "./plugin"
7
+ import type { GeneratorContext, GeneratorOptions } from "./types"
8
+
9
+ export interface Generator {
10
+ name: string
11
+ description: string
12
+ generate(context: GeneratorContext, options: GeneratorOptions): Promise<void>
13
+ }
14
+
15
+ export class GeneratorRegistry {
16
+ private generators = new Map<string, Generator>()
17
+
18
+ constructor() {
19
+ this.registerBuiltInGenerators()
20
+ }
21
+
22
+ private registerBuiltInGenerators() {
23
+ this.register(new ControllerGenerator())
24
+ this.register(new RouteGenerator())
25
+ this.register(new ComponentGenerator())
26
+ this.register(new ServiceGenerator())
27
+ this.register(new PluginGenerator())
28
+ }
29
+
30
+ register(generator: Generator): void {
31
+ this.generators.set(generator.name, generator)
32
+ }
33
+
34
+ get(name: string): Generator | undefined {
35
+ return this.generators.get(name)
36
+ }
37
+
38
+ getAll(): Generator[] {
39
+ return Array.from(this.generators.values())
40
+ }
41
+
42
+ has(name: string): boolean {
43
+ return this.generators.has(name)
44
+ }
45
+ }
46
+
47
+ export const generatorRegistry = new GeneratorRegistry()
48
+
49
+ // Export additional commands
50
+ export { interactiveGenerateCommand } from "./interactive"
51
+
52
+ // CLI command for code generation
53
+ export const generateCommand: CliCommand = {
54
+ name: 'generate',
55
+ description: 'Generate code from templates',
56
+ usage: 'flux generate <type> <name> [options]',
57
+ aliases: ['g', 'gen'],
58
+ category: 'Development',
59
+ examples: [
60
+ 'flux generate controller user',
61
+ 'flux generate component UserCard',
62
+ 'flux generate service auth',
63
+ 'flux generate route api/users',
64
+ 'flux generate plugin my-plugin'
65
+ ],
66
+ arguments: [
67
+ {
68
+ name: 'type',
69
+ description: 'Type of code to generate',
70
+ required: true,
71
+ type: 'string',
72
+ choices: ['controller', 'route', 'component', 'service', 'plugin']
73
+ },
74
+ {
75
+ name: 'name',
76
+ description: 'Name of the generated item',
77
+ required: true,
78
+ type: 'string'
79
+ }
80
+ ],
81
+ options: [
82
+ {
83
+ name: 'path',
84
+ short: 'p',
85
+ description: 'Custom path for generated files',
86
+ type: 'string'
87
+ },
88
+ {
89
+ name: 'template',
90
+ short: 't',
91
+ description: 'Template variant to use',
92
+ type: 'string'
93
+ },
94
+ {
95
+ name: 'force',
96
+ short: 'f',
97
+ description: 'Overwrite existing files',
98
+ type: 'boolean',
99
+ default: false
100
+ },
101
+ {
102
+ name: 'dry-run',
103
+ description: 'Show what would be generated without creating files',
104
+ type: 'boolean',
105
+ default: false
106
+ }
107
+ ],
108
+ handler: async (args, options, context) => {
109
+ const [type, name] = args
110
+
111
+ const generator = generatorRegistry.get(type)
112
+ if (!generator) {
113
+ console.error(`❌ Unknown generator type: ${type}`)
114
+ console.log('\nAvailable generators:')
115
+ for (const gen of generatorRegistry.getAll()) {
116
+ console.log(` ${gen.name.padEnd(12)} ${gen.description}`)
117
+ }
118
+ return
119
+ }
120
+
121
+ const generatorContext: GeneratorContext = {
122
+ workingDir: context.workingDir,
123
+ config: context.config,
124
+ logger: context.logger,
125
+ utils: context.utils
126
+ }
127
+
128
+ const generatorOptions: GeneratorOptions = {
129
+ name,
130
+ path: options.path,
131
+ template: options.template,
132
+ force: options.force,
133
+ dryRun: options['dry-run']
134
+ }
135
+
136
+ try {
137
+ await generator.generate(generatorContext, generatorOptions)
138
+
139
+ if (!options['dry-run']) {
140
+ console.log(`✅ Successfully generated ${type}: ${name}`)
141
+ }
142
+ } catch (error) {
143
+ console.error(`❌ Failed to generate ${type}:`, error instanceof Error ? error.message : String(error))
144
+ throw error
145
+ }
146
+ }
147
147
  }