create-fluxstack 1.9.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 (259) hide show
  1. package/.dockerignore +1 -2
  2. package/Dockerfile +8 -8
  3. package/LIVE_COMPONENTS_REVIEW.md +781 -0
  4. package/LLMD/INDEX.md +64 -0
  5. package/LLMD/MAINTENANCE.md +197 -0
  6. package/LLMD/MIGRATION.md +156 -0
  7. package/LLMD/config/.gitkeep +1 -0
  8. package/LLMD/config/declarative-system.md +268 -0
  9. package/LLMD/config/environment-vars.md +327 -0
  10. package/LLMD/config/runtime-reload.md +401 -0
  11. package/LLMD/core/.gitkeep +1 -0
  12. package/LLMD/core/build-system.md +599 -0
  13. package/LLMD/core/framework-lifecycle.md +229 -0
  14. package/LLMD/core/plugin-system.md +451 -0
  15. package/LLMD/patterns/.gitkeep +1 -0
  16. package/LLMD/patterns/anti-patterns.md +297 -0
  17. package/LLMD/patterns/project-structure.md +264 -0
  18. package/LLMD/patterns/type-safety.md +440 -0
  19. package/LLMD/reference/.gitkeep +1 -0
  20. package/LLMD/reference/cli-commands.md +250 -0
  21. package/LLMD/reference/plugin-hooks.md +357 -0
  22. package/LLMD/reference/routing.md +39 -0
  23. package/LLMD/reference/troubleshooting.md +364 -0
  24. package/LLMD/resources/.gitkeep +1 -0
  25. package/LLMD/resources/controllers.md +465 -0
  26. package/LLMD/resources/live-components.md +703 -0
  27. package/LLMD/resources/live-rooms.md +482 -0
  28. package/LLMD/resources/live-upload.md +130 -0
  29. package/LLMD/resources/plugins-external.md +617 -0
  30. package/LLMD/resources/routes-eden.md +254 -0
  31. package/README.md +37 -17
  32. package/app/client/index.html +0 -1
  33. package/app/client/src/App.tsx +109 -156
  34. package/app/client/src/components/AppLayout.tsx +68 -0
  35. package/app/client/src/components/BackButton.tsx +13 -0
  36. package/app/client/src/components/DemoPage.tsx +20 -0
  37. package/app/client/src/components/LiveUploadWidget.tsx +204 -0
  38. package/app/client/src/lib/eden-api.ts +85 -65
  39. package/app/client/src/live/ChatDemo.tsx +107 -0
  40. package/app/client/src/live/CounterDemo.tsx +206 -0
  41. package/app/client/src/live/FormDemo.tsx +119 -0
  42. package/app/client/src/live/RoomChatDemo.tsx +242 -0
  43. package/app/client/src/live/UploadDemo.tsx +21 -0
  44. package/app/client/src/main.tsx +13 -10
  45. package/app/client/src/pages/ApiTestPage.tsx +108 -0
  46. package/app/client/src/pages/HomePage.tsx +76 -0
  47. package/app/client/src/vite-env.d.ts +1 -1
  48. package/app/server/app.ts +1 -4
  49. package/app/server/controllers/users.controller.ts +36 -44
  50. package/app/server/index.ts +24 -107
  51. package/app/server/live/LiveChat.ts +77 -0
  52. package/app/server/live/LiveCounter.ts +67 -0
  53. package/app/server/live/LiveForm.ts +63 -0
  54. package/app/server/live/LiveLocalCounter.ts +32 -0
  55. package/app/server/live/LiveRoomChat.ts +285 -0
  56. package/app/server/live/LiveUpload.ts +81 -0
  57. package/app/server/live/register-components.ts +19 -19
  58. package/app/server/routes/index.ts +3 -1
  59. package/app/server/routes/room.routes.ts +117 -0
  60. package/app/server/routes/users.routes.ts +35 -27
  61. package/app/shared/types/index.ts +14 -2
  62. package/config/app.config.ts +2 -62
  63. package/config/client.config.ts +2 -95
  64. package/config/database.config.ts +2 -99
  65. package/config/fluxstack.config.ts +25 -45
  66. package/config/index.ts +57 -38
  67. package/config/monitoring.config.ts +2 -114
  68. package/config/plugins.config.ts +2 -80
  69. package/config/server.config.ts +2 -68
  70. package/config/services.config.ts +2 -130
  71. package/config/system/app.config.ts +29 -0
  72. package/config/system/build.config.ts +49 -0
  73. package/config/system/client.config.ts +68 -0
  74. package/config/system/database.config.ts +17 -0
  75. package/config/system/fluxstack.config.ts +114 -0
  76. package/config/{logger.config.ts → system/logger.config.ts} +3 -1
  77. package/config/system/monitoring.config.ts +114 -0
  78. package/config/system/plugins.config.ts +84 -0
  79. package/config/{runtime.config.ts → system/runtime.config.ts} +1 -1
  80. package/config/system/server.config.ts +68 -0
  81. package/config/system/services.config.ts +46 -0
  82. package/config/{system.config.ts → system/system.config.ts} +1 -1
  83. package/core/build/bundler.ts +4 -1
  84. package/core/build/flux-plugins-generator.ts +325 -325
  85. package/core/build/index.ts +159 -27
  86. package/core/build/live-components-generator.ts +70 -3
  87. package/core/build/optimizer.ts +235 -235
  88. package/core/cli/command-registry.ts +6 -4
  89. package/core/cli/commands/build.ts +79 -0
  90. package/core/cli/commands/create.ts +54 -0
  91. package/core/cli/commands/dev.ts +101 -0
  92. package/core/cli/commands/help.ts +34 -0
  93. package/core/cli/commands/index.ts +34 -0
  94. package/core/cli/commands/make-plugin.ts +90 -0
  95. package/core/cli/commands/plugin-add.ts +197 -0
  96. package/core/cli/commands/plugin-deps.ts +2 -2
  97. package/core/cli/commands/plugin-list.ts +208 -0
  98. package/core/cli/commands/plugin-remove.ts +170 -0
  99. package/core/cli/generators/component.ts +769 -769
  100. package/core/cli/generators/controller.ts +1 -1
  101. package/core/cli/generators/index.ts +146 -146
  102. package/core/cli/generators/interactive.ts +227 -227
  103. package/core/cli/generators/plugin.ts +2 -2
  104. package/core/cli/generators/prompts.ts +82 -82
  105. package/core/cli/generators/route.ts +6 -6
  106. package/core/cli/generators/service.ts +2 -2
  107. package/core/cli/generators/template-engine.ts +4 -3
  108. package/core/cli/generators/types.ts +2 -2
  109. package/core/cli/generators/utils.ts +191 -191
  110. package/core/cli/index.ts +115 -558
  111. package/core/cli/plugin-discovery.ts +2 -2
  112. package/core/client/LiveComponentsProvider.tsx +63 -17
  113. package/core/client/api/eden.ts +183 -0
  114. package/core/client/api/index.ts +11 -0
  115. package/core/client/components/Live.tsx +104 -0
  116. package/core/client/fluxstack.ts +1 -9
  117. package/core/client/hooks/AdaptiveChunkSizer.ts +215 -0
  118. package/core/client/hooks/state-validator.ts +1 -1
  119. package/core/client/hooks/useAuth.ts +48 -48
  120. package/core/client/hooks/useChunkedUpload.ts +170 -69
  121. package/core/client/hooks/useLiveChunkedUpload.ts +87 -0
  122. package/core/client/hooks/useLiveComponent.ts +800 -0
  123. package/core/client/hooks/useLiveUpload.ts +71 -0
  124. package/core/client/hooks/useRoom.ts +409 -0
  125. package/core/client/hooks/useRoomProxy.ts +382 -0
  126. package/core/client/index.ts +18 -51
  127. package/core/client/standalone-entry.ts +8 -0
  128. package/core/client/standalone.ts +74 -53
  129. package/core/client/state/createStore.ts +192 -192
  130. package/core/client/state/index.ts +14 -14
  131. package/core/config/index.ts +70 -291
  132. package/core/config/schema.ts +42 -723
  133. package/core/framework/client.ts +131 -131
  134. package/core/framework/index.ts +7 -7
  135. package/core/framework/server.ts +227 -47
  136. package/core/framework/types.ts +2 -2
  137. package/core/index.ts +23 -4
  138. package/core/live/ComponentRegistry.ts +7 -3
  139. package/core/live/types.ts +77 -0
  140. package/core/plugins/built-in/index.ts +134 -131
  141. package/core/plugins/built-in/live-components/commands/create-live-component.ts +242 -1074
  142. package/core/plugins/built-in/live-components/index.ts +1 -1
  143. package/core/plugins/built-in/monitoring/index.ts +111 -47
  144. package/core/plugins/built-in/static/index.ts +1 -1
  145. package/core/plugins/built-in/swagger/index.ts +68 -265
  146. package/core/plugins/built-in/vite/index.ts +94 -306
  147. package/core/plugins/built-in/vite/vite-dev.ts +82 -0
  148. package/core/plugins/config.ts +9 -7
  149. package/core/plugins/dependency-manager.ts +31 -1
  150. package/core/plugins/discovery.ts +19 -7
  151. package/core/plugins/executor.ts +2 -2
  152. package/core/plugins/index.ts +203 -203
  153. package/core/plugins/manager.ts +27 -39
  154. package/core/plugins/module-resolver.ts +19 -8
  155. package/core/plugins/registry.ts +309 -21
  156. package/core/plugins/types.ts +106 -55
  157. package/core/server/framework.ts +66 -43
  158. package/core/server/index.ts +15 -16
  159. package/core/server/live/ComponentRegistry.ts +91 -75
  160. package/core/server/live/FileUploadManager.ts +41 -31
  161. package/core/server/live/LiveComponentPerformanceMonitor.ts +1 -1
  162. package/core/server/live/LiveRoomManager.ts +261 -0
  163. package/core/server/live/RoomEventBus.ts +234 -0
  164. package/core/server/live/RoomStateManager.ts +172 -0
  165. package/core/server/live/StateSignature.ts +643 -643
  166. package/core/server/live/WebSocketConnectionManager.ts +30 -19
  167. package/core/server/live/auto-generated-components.ts +41 -26
  168. package/core/server/live/index.ts +14 -0
  169. package/core/server/live/websocket-plugin.ts +233 -72
  170. package/core/server/middleware/elysia-helpers.ts +7 -2
  171. package/core/server/middleware/errorHandling.ts +1 -1
  172. package/core/server/middleware/index.ts +31 -31
  173. package/core/server/plugins/database.ts +180 -180
  174. package/core/server/plugins/static-files-plugin.ts +69 -260
  175. package/core/server/plugins/swagger.ts +33 -33
  176. package/core/server/rooms/RoomBroadcaster.ts +357 -0
  177. package/core/server/rooms/RoomSystem.ts +463 -0
  178. package/core/server/rooms/index.ts +13 -0
  179. package/core/server/services/BaseService.ts +1 -1
  180. package/core/server/services/ServiceContainer.ts +1 -1
  181. package/core/server/services/index.ts +8 -8
  182. package/core/templates/create-project.ts +12 -12
  183. package/core/testing/index.ts +9 -9
  184. package/core/testing/setup.ts +73 -73
  185. package/core/types/api.ts +168 -168
  186. package/core/types/build.ts +219 -218
  187. package/core/types/config.ts +56 -26
  188. package/core/types/index.ts +4 -4
  189. package/core/types/plugin.ts +107 -99
  190. package/core/types/types.ts +490 -14
  191. package/core/utils/build-logger.ts +324 -324
  192. package/core/utils/config-schema.ts +480 -480
  193. package/core/utils/env.ts +2 -8
  194. package/core/utils/errors/codes.ts +114 -114
  195. package/core/utils/errors/handlers.ts +36 -1
  196. package/core/utils/errors/index.ts +49 -5
  197. package/core/utils/errors/middleware.ts +113 -113
  198. package/core/utils/helpers.ts +6 -16
  199. package/core/utils/index.ts +17 -17
  200. package/core/utils/logger/colors.ts +114 -114
  201. package/core/utils/logger/config.ts +13 -9
  202. package/core/utils/logger/formatter.ts +82 -82
  203. package/core/utils/logger/group-logger.ts +101 -101
  204. package/core/utils/logger/index.ts +6 -1
  205. package/core/utils/logger/stack-trace.ts +3 -1
  206. package/core/utils/logger/startup-banner.ts +82 -66
  207. package/core/utils/logger/winston-logger.ts +152 -152
  208. package/core/utils/monitoring/index.ts +211 -211
  209. package/core/utils/sync-version.ts +66 -66
  210. package/core/utils/version.ts +1 -1
  211. package/create-fluxstack.ts +8 -7
  212. package/eslint.config.js +23 -23
  213. package/package.json +14 -15
  214. package/plugins/crypto-auth/cli/make-protected-route.command.ts +1 -1
  215. package/plugins/crypto-auth/client/CryptoAuthClient.ts +302 -302
  216. package/plugins/crypto-auth/client/components/index.ts +11 -11
  217. package/plugins/crypto-auth/client/index.ts +11 -11
  218. package/plugins/crypto-auth/config/index.ts +1 -1
  219. package/plugins/crypto-auth/index.ts +4 -4
  220. package/plugins/crypto-auth/package.json +65 -65
  221. package/plugins/crypto-auth/server/AuthMiddleware.ts +1 -1
  222. package/plugins/crypto-auth/server/CryptoAuthService.ts +185 -185
  223. package/plugins/crypto-auth/server/index.ts +21 -21
  224. package/plugins/crypto-auth/server/middlewares/cryptoAuthAdmin.ts +3 -3
  225. package/plugins/crypto-auth/server/middlewares/cryptoAuthOptional.ts +1 -1
  226. package/plugins/crypto-auth/server/middlewares/cryptoAuthPermissions.ts +2 -2
  227. package/plugins/crypto-auth/server/middlewares/cryptoAuthRequired.ts +2 -2
  228. package/plugins/crypto-auth/server/middlewares/helpers.ts +1 -1
  229. package/plugins/crypto-auth/server/middlewares/index.ts +22 -22
  230. package/plugins/crypto-auth/server/middlewares.ts +19 -19
  231. package/tsconfig.api-strict.json +16 -0
  232. package/tsconfig.json +10 -14
  233. package/{app/client/tsconfig.node.json → tsconfig.node.json} +1 -1
  234. package/types/global.d.ts +29 -29
  235. package/types/vitest.d.ts +8 -8
  236. package/vite.config.ts +38 -62
  237. package/vitest.config.live.ts +10 -9
  238. package/vitest.config.ts +29 -17
  239. package/workspace.json +5 -5
  240. package/app/client/README.md +0 -69
  241. package/app/client/SIMPLIFICATION.md +0 -140
  242. package/app/client/frontend-only.ts +0 -12
  243. package/app/client/tsconfig.app.json +0 -44
  244. package/app/client/tsconfig.json +0 -7
  245. package/app/client/zustand-setup.md +0 -65
  246. package/app/server/backend-only.ts +0 -18
  247. package/app/server/live/LiveClockComponent.ts +0 -215
  248. package/app/server/routes/env-test.ts +0 -110
  249. package/core/client/hooks/index.ts +0 -7
  250. package/core/client/hooks/useHybridLiveComponent.ts +0 -631
  251. package/core/client/hooks/useWebSocket.ts +0 -373
  252. package/core/config/env.ts +0 -546
  253. package/core/config/loader.ts +0 -522
  254. package/core/config/runtime-config.ts +0 -327
  255. package/core/config/validator.ts +0 -540
  256. package/core/server/backend-entry.ts +0 -51
  257. package/core/server/standalone.ts +0 -106
  258. package/core/utils/regenerate-files.ts +0 -69
  259. 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
  }