create-fluxstack 1.13.0 → 1.15.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 (96) hide show
  1. package/LLMD/patterns/anti-patterns.md +100 -0
  2. package/LLMD/reference/routing.md +39 -39
  3. package/LLMD/resources/live-auth.md +20 -2
  4. package/LLMD/resources/live-components.md +300 -21
  5. package/LLMD/resources/live-logging.md +95 -33
  6. package/LLMD/resources/live-upload.md +59 -8
  7. package/app/client/.live-stubs/LiveAdminPanel.js +5 -0
  8. package/app/client/.live-stubs/LiveChat.js +7 -0
  9. package/app/client/.live-stubs/LiveCounter.js +9 -0
  10. package/app/client/.live-stubs/LiveForm.js +11 -0
  11. package/app/client/.live-stubs/LiveLocalCounter.js +8 -0
  12. package/app/client/.live-stubs/LiveRoomChat.js +10 -0
  13. package/app/client/.live-stubs/LiveTodoList.js +9 -0
  14. package/app/client/.live-stubs/LiveUpload.js +15 -0
  15. package/app/client/index.html +2 -2
  16. package/app/client/public/favicon.svg +46 -0
  17. package/app/client/src/App.tsx +13 -1
  18. package/app/client/src/assets/fluxstack-static.svg +46 -0
  19. package/app/client/src/assets/fluxstack.svg +183 -0
  20. package/app/client/src/components/AppLayout.tsx +146 -9
  21. package/app/client/src/components/BackButton.tsx +13 -13
  22. package/app/client/src/components/DemoPage.tsx +4 -4
  23. package/app/client/src/live/AuthDemo.tsx +23 -21
  24. package/app/client/src/live/ChatDemo.tsx +2 -2
  25. package/app/client/src/live/CounterDemo.tsx +12 -12
  26. package/app/client/src/live/FormDemo.tsx +2 -2
  27. package/app/client/src/live/LiveDebuggerPanel.tsx +779 -0
  28. package/app/client/src/live/RoomChatDemo.tsx +24 -16
  29. package/app/client/src/live/TodoListDemo.tsx +158 -0
  30. package/app/client/src/main.tsx +13 -13
  31. package/app/client/src/pages/ApiTestPage.tsx +6 -6
  32. package/app/client/src/pages/HomePage.tsx +80 -52
  33. package/app/server/auth/DevAuthProvider.ts +2 -2
  34. package/app/server/auth/JWTAuthProvider.example.ts +2 -2
  35. package/app/server/index.ts +2 -2
  36. package/app/server/live/LiveAdminPanel.ts +2 -1
  37. package/app/server/live/LiveChat.ts +78 -77
  38. package/app/server/live/LiveCounter.ts +1 -1
  39. package/app/server/live/LiveForm.ts +1 -0
  40. package/app/server/live/LiveLocalCounter.ts +38 -37
  41. package/app/server/live/LiveProtectedChat.ts +2 -1
  42. package/app/server/live/LiveRoomChat.ts +1 -0
  43. package/app/server/live/LiveTodoList.ts +110 -0
  44. package/app/server/live/LiveUpload.ts +1 -0
  45. package/app/server/live/register-components.ts +19 -19
  46. package/app/server/routes/room.routes.ts +1 -2
  47. package/config/system/runtime.config.ts +4 -0
  48. package/core/build/live-components-generator.ts +1 -1
  49. package/core/build/optimizer.ts +235 -235
  50. package/core/build/vite-plugins.ts +28 -0
  51. package/core/client/components/LiveDebugger.tsx +1324 -0
  52. package/core/client/hooks/useLiveUpload.ts +3 -4
  53. package/core/client/index.ts +41 -21
  54. package/core/framework/server.ts +1 -1
  55. package/core/plugins/built-in/index.ts +134 -134
  56. package/core/plugins/built-in/live-components/commands/create-live-component.ts +4 -0
  57. package/core/plugins/built-in/vite/index.ts +75 -21
  58. package/core/server/index.ts +14 -15
  59. package/core/server/live/auto-generated-components.ts +6 -3
  60. package/core/server/live/index.ts +95 -21
  61. package/core/server/live/websocket-plugin.ts +27 -862
  62. package/core/server/plugins/static-files-plugin.ts +179 -69
  63. package/core/types/build.ts +219 -219
  64. package/core/types/plugin.ts +107 -107
  65. package/core/types/types.ts +77 -890
  66. package/core/utils/logger/startup-banner.ts +82 -82
  67. package/core/utils/version.ts +6 -6
  68. package/create-fluxstack.ts +1 -1
  69. package/package.json +5 -1
  70. package/plugins/crypto-auth/index.ts +1 -1
  71. package/plugins/crypto-auth/server/CryptoAuthLiveProvider.ts +2 -2
  72. package/vite.config.ts +40 -12
  73. package/app/client/src/assets/react.svg +0 -1
  74. package/core/client/LiveComponentsProvider.tsx +0 -531
  75. package/core/client/components/Live.tsx +0 -105
  76. package/core/client/hooks/AdaptiveChunkSizer.ts +0 -215
  77. package/core/client/hooks/state-validator.ts +0 -130
  78. package/core/client/hooks/useChunkedUpload.ts +0 -359
  79. package/core/client/hooks/useLiveChunkedUpload.ts +0 -87
  80. package/core/client/hooks/useLiveComponent.ts +0 -843
  81. package/core/client/hooks/useRoom.ts +0 -409
  82. package/core/client/hooks/useRoomProxy.ts +0 -382
  83. package/core/server/live/ComponentRegistry.ts +0 -1099
  84. package/core/server/live/FileUploadManager.ts +0 -282
  85. package/core/server/live/LiveComponentPerformanceMonitor.ts +0 -931
  86. package/core/server/live/LiveLogger.ts +0 -111
  87. package/core/server/live/LiveRoomManager.ts +0 -262
  88. package/core/server/live/RoomEventBus.ts +0 -234
  89. package/core/server/live/RoomStateManager.ts +0 -172
  90. package/core/server/live/SingleConnectionManager.ts +0 -0
  91. package/core/server/live/StateSignature.ts +0 -645
  92. package/core/server/live/WebSocketConnectionManager.ts +0 -709
  93. package/core/server/live/auth/LiveAuthContext.ts +0 -71
  94. package/core/server/live/auth/LiveAuthManager.ts +0 -304
  95. package/core/server/live/auth/index.ts +0 -19
  96. package/core/server/live/auth/types.ts +0 -179
@@ -1,172 +0,0 @@
1
- // 🔥 FluxStack Live - Room State Manager (In-memory storage per room)
2
-
3
- type RoomStateData = Record<string, any>
4
-
5
- interface RoomInfo {
6
- state: RoomStateData
7
- componentCount: number
8
- createdAt: number
9
- lastUpdate: number
10
- }
11
-
12
- export function createTypedRoomState<TRoomTypes extends Record<string, RoomStateData>>() {
13
- const rooms = new Map<string, RoomInfo>()
14
- const getKey = (type: string, roomId: string) => `${type}:${roomId}`
15
-
16
- return {
17
- get<K extends keyof TRoomTypes>(type: K, roomId: string, defaultState: TRoomTypes[K]): TRoomTypes[K] {
18
- const key = getKey(type as string, roomId)
19
- const room = rooms.get(key)
20
-
21
- if (room) return room.state as TRoomTypes[K]
22
-
23
- rooms.set(key, { state: defaultState, componentCount: 0, createdAt: Date.now(), lastUpdate: Date.now() })
24
- return defaultState
25
- },
26
-
27
- update<K extends keyof TRoomTypes>(type: K, roomId: string, updates: Partial<TRoomTypes[K]>): TRoomTypes[K] {
28
- const key = getKey(type as string, roomId)
29
- const room = rooms.get(key)
30
-
31
- if (room) {
32
- room.state = { ...room.state, ...updates }
33
- room.lastUpdate = Date.now()
34
- return room.state as TRoomTypes[K]
35
- }
36
-
37
- const newState = updates as TRoomTypes[K]
38
- rooms.set(key, { state: newState, componentCount: 0, createdAt: Date.now(), lastUpdate: Date.now() })
39
- return newState
40
- },
41
-
42
- set<K extends keyof TRoomTypes>(type: K, roomId: string, state: TRoomTypes[K]): void {
43
- const key = getKey(type as string, roomId)
44
- const room = rooms.get(key)
45
-
46
- if (room) {
47
- room.state = state
48
- room.lastUpdate = Date.now()
49
- } else {
50
- rooms.set(key, { state, componentCount: 0, createdAt: Date.now(), lastUpdate: Date.now() })
51
- }
52
- },
53
-
54
- join<K extends keyof TRoomTypes>(type: K, roomId: string): void {
55
- const room = rooms.get(getKey(type as string, roomId))
56
- if (room) room.componentCount++
57
- },
58
-
59
- leave<K extends keyof TRoomTypes>(type: K, roomId: string): void {
60
- const key = getKey(type as string, roomId)
61
- const room = rooms.get(key)
62
- if (room) {
63
- room.componentCount--
64
- if (room.componentCount <= 0) {
65
- setTimeout(() => {
66
- const current = rooms.get(key)
67
- if (current && current.componentCount <= 0) {
68
- rooms.delete(key)
69
- }
70
- }, 5 * 60 * 1000)
71
- }
72
- }
73
- },
74
-
75
- has<K extends keyof TRoomTypes>(type: K, roomId: string): boolean {
76
- return rooms.has(getKey(type as string, roomId))
77
- },
78
-
79
- delete<K extends keyof TRoomTypes>(type: K, roomId: string): boolean {
80
- return rooms.delete(getKey(type as string, roomId))
81
- },
82
-
83
- getStats(): { totalRooms: number; rooms: Record<string, { componentCount: number; stateKeys: string[] }> } {
84
- const roomStats: Record<string, { componentCount: number; stateKeys: string[] }> = {}
85
- for (const [key, info] of rooms) {
86
- roomStats[key] = { componentCount: info.componentCount, stateKeys: Object.keys(info.state) }
87
- }
88
- return { totalRooms: rooms.size, rooms: roomStats }
89
- }
90
- }
91
- }
92
-
93
- class RoomStateManager {
94
- private rooms = new Map<string, RoomInfo>()
95
-
96
- get<T extends RoomStateData>(roomId: string, defaultState?: T): T {
97
- const room = this.rooms.get(roomId)
98
- if (room) return room.state as T
99
-
100
- if (defaultState) {
101
- this.rooms.set(roomId, { state: defaultState, componentCount: 0, createdAt: Date.now(), lastUpdate: Date.now() })
102
- return defaultState
103
- }
104
-
105
- return {} as T
106
- }
107
-
108
- update<T extends RoomStateData>(roomId: string, updates: Partial<T>): T {
109
- const room = this.rooms.get(roomId)
110
-
111
- if (room) {
112
- room.state = { ...room.state, ...updates }
113
- room.lastUpdate = Date.now()
114
- return room.state as T
115
- }
116
-
117
- const newState = updates as T
118
- this.rooms.set(roomId, { state: newState, componentCount: 0, createdAt: Date.now(), lastUpdate: Date.now() })
119
- return newState
120
- }
121
-
122
- set<T extends RoomStateData>(roomId: string, state: T): void {
123
- const room = this.rooms.get(roomId)
124
-
125
- if (room) {
126
- room.state = state
127
- room.lastUpdate = Date.now()
128
- } else {
129
- this.rooms.set(roomId, { state, componentCount: 0, createdAt: Date.now(), lastUpdate: Date.now() })
130
- }
131
- }
132
-
133
- join(roomId: string): void {
134
- const room = this.rooms.get(roomId)
135
- if (room) room.componentCount++
136
- }
137
-
138
- leave(roomId: string): void {
139
- const room = this.rooms.get(roomId)
140
- if (room) {
141
- room.componentCount--
142
- if (room.componentCount <= 0) {
143
- setTimeout(() => {
144
- const current = this.rooms.get(roomId)
145
- if (current && current.componentCount <= 0) {
146
- this.rooms.delete(roomId)
147
- }
148
- }, 5 * 60 * 1000)
149
- }
150
- }
151
- }
152
-
153
- has(roomId: string): boolean {
154
- return this.rooms.has(roomId)
155
- }
156
-
157
- delete(roomId: string): boolean {
158
- return this.rooms.delete(roomId)
159
- }
160
-
161
- getStats(): { totalRooms: number; rooms: Record<string, { componentCount: number; stateKeys: string[] }> } {
162
- const rooms: Record<string, { componentCount: number; stateKeys: string[] }> = {}
163
- for (const [roomId, info] of this.rooms) {
164
- rooms[roomId] = { componentCount: info.componentCount, stateKeys: Object.keys(info.state) }
165
- }
166
- return { totalRooms: this.rooms.size, rooms }
167
- }
168
- }
169
-
170
- export const roomState = new RoomStateManager()
171
-
172
- export type { RoomStateData, RoomInfo }
File without changes