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
@@ -0,0 +1,170 @@
1
+ /**
2
+ * FluxStack CLI - Plugin Remove Command
3
+ * Safely remove and un-whitelist NPM plugins
4
+ */
5
+
6
+ import { Command } from 'commander'
7
+ import { readFileSync, writeFileSync, existsSync } from 'fs'
8
+ import { join } from 'path'
9
+ import { $ } from 'bun'
10
+ import chalk from 'chalk'
11
+
12
+ interface PluginRemoveOptions {
13
+ skipConfirmation?: boolean
14
+ keepInstalled?: boolean
15
+ }
16
+
17
+ export function createPluginRemoveCommand(): Command {
18
+ const command = new Command('plugin:remove')
19
+ .description('Remove plugin from whitelist and optionally uninstall')
20
+ .argument('<plugin-name>', 'Name of the plugin to remove (e.g., fluxstack-plugin-auth)')
21
+ .option('--skip-confirmation', 'Skip confirmation prompt')
22
+ .option('--keep-installed', 'Keep plugin installed, only remove from whitelist')
23
+ .action(async (pluginName: string, options: PluginRemoveOptions) => {
24
+ console.log(chalk.blue('\n🔌 FluxStack Plugin Remover\n'))
25
+
26
+ try {
27
+ // 1. Check if plugin is installed
28
+ const packageJsonPath = join(process.cwd(), 'package.json')
29
+ if (!existsSync(packageJsonPath)) {
30
+ console.error(chalk.red('❌ package.json not found'))
31
+ process.exit(1)
32
+ }
33
+
34
+ const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8'))
35
+ const isInstalled =
36
+ packageJson.dependencies?.[pluginName] ||
37
+ packageJson.devDependencies?.[pluginName]
38
+
39
+ if (!isInstalled && !options.keepInstalled) {
40
+ console.log(chalk.yellow(`⚠️ Plugin ${pluginName} is not installed`))
41
+ console.log(chalk.yellow(' Will only remove from whitelist\n'))
42
+ }
43
+
44
+ // 2. Confirmation prompt (unless skipped)
45
+ if (!options.skipConfirmation) {
46
+ const action = options.keepInstalled
47
+ ? 'remove from whitelist'
48
+ : 'uninstall and remove from whitelist'
49
+
50
+ const answer = prompt(chalk.yellow(`Remove ${pluginName}? This will ${action}. (yes/no): `))
51
+ if (answer?.toLowerCase() !== 'yes' && answer?.toLowerCase() !== 'y') {
52
+ console.log(chalk.red('❌ Removal cancelled'))
53
+ process.exit(0)
54
+ }
55
+ }
56
+
57
+ // 3. Remove from whitelist
58
+ console.log(chalk.blue('\n🔧 Updating configuration...\n'))
59
+ const removed = removeFromWhitelist(pluginName)
60
+
61
+ if (!removed) {
62
+ console.log(chalk.yellow(`⚠️ Plugin ${pluginName} was not in whitelist`))
63
+ } else {
64
+ console.log(chalk.gray(` • Removed ${pluginName} from PLUGINS_ALLOWED`))
65
+ }
66
+
67
+ // 4. Uninstall plugin (unless --keep-installed)
68
+ if (!options.keepInstalled && isInstalled) {
69
+ console.log(chalk.blue(`\n📦 Uninstalling ${pluginName}...\n`))
70
+ await $`bun remove ${pluginName}`.quiet()
71
+ console.log(chalk.green(`✅ Plugin uninstalled successfully`))
72
+ }
73
+
74
+ // 5. Check if should disable NPM discovery
75
+ checkAndDisableNpmDiscovery()
76
+
77
+ // 6. Success message
78
+ console.log(chalk.green('\n✅ Plugin removal complete!\n'))
79
+ console.log(chalk.blue('📋 What was done:'))
80
+ console.log(chalk.gray(` • Removed ${pluginName} from whitelist (PLUGINS_ALLOWED)`))
81
+ if (!options.keepInstalled && isInstalled) {
82
+ console.log(chalk.gray(` • Uninstalled ${pluginName}`))
83
+ }
84
+
85
+ console.log(chalk.blue('\n🚀 Next steps:'))
86
+ console.log(chalk.gray(' 1. Restart your dev server: bun run dev'))
87
+ console.log(chalk.gray(' 2. Plugin will no longer be loaded'))
88
+
89
+ } catch (error) {
90
+ console.error(chalk.red('\n❌ Failed to remove plugin:'))
91
+ console.error(chalk.red(error instanceof Error ? error.message : String(error)))
92
+ process.exit(1)
93
+ }
94
+ })
95
+
96
+ return command
97
+ }
98
+
99
+ /**
100
+ * Remove plugin from whitelist in .env file
101
+ */
102
+ function removeFromWhitelist(pluginName: string): boolean {
103
+ const envPath = join(process.cwd(), '.env')
104
+
105
+ if (!existsSync(envPath)) {
106
+ return false
107
+ }
108
+
109
+ let envContent = readFileSync(envPath, 'utf-8')
110
+ const allowedPluginsRegex = /^PLUGINS_ALLOWED=(.*)$/m
111
+ const match = envContent.match(allowedPluginsRegex)
112
+
113
+ if (!match) {
114
+ return false
115
+ }
116
+
117
+ const currentPlugins = match[1]
118
+ .split(',')
119
+ .map(p => p.trim())
120
+ .filter(p => p.length > 0)
121
+
122
+ if (!currentPlugins.includes(pluginName)) {
123
+ return false
124
+ }
125
+
126
+ const newPlugins = currentPlugins.filter(p => p !== pluginName)
127
+ envContent = envContent.replace(
128
+ allowedPluginsRegex,
129
+ `PLUGINS_ALLOWED=${newPlugins.join(',')}`
130
+ )
131
+
132
+ writeFileSync(envPath, envContent, 'utf-8')
133
+ return true
134
+ }
135
+
136
+ /**
137
+ * Check if whitelist is empty and disable NPM discovery if so
138
+ */
139
+ function checkAndDisableNpmDiscovery(): void {
140
+ const envPath = join(process.cwd(), '.env')
141
+
142
+ if (!existsSync(envPath)) {
143
+ return
144
+ }
145
+
146
+ let envContent = readFileSync(envPath, 'utf-8')
147
+ const allowedPluginsRegex = /^PLUGINS_ALLOWED=(.*)$/m
148
+ const match = envContent.match(allowedPluginsRegex)
149
+
150
+ if (!match) {
151
+ return
152
+ }
153
+
154
+ const currentPlugins = match[1]
155
+ .split(',')
156
+ .map(p => p.trim())
157
+ .filter(p => p.length > 0)
158
+
159
+ // If whitelist is empty, disable NPM discovery
160
+ if (currentPlugins.length === 0) {
161
+ if (/^PLUGINS_DISCOVER_NPM=true/m.test(envContent)) {
162
+ envContent = envContent.replace(
163
+ /^PLUGINS_DISCOVER_NPM=true/m,
164
+ 'PLUGINS_DISCOVER_NPM=false'
165
+ )
166
+ writeFileSync(envPath, envContent, 'utf-8')
167
+ console.log(chalk.gray(' • Disabled NPM plugin discovery (whitelist empty)'))
168
+ }
169
+ }
170
+ }