create-fluxstack 1.1.0 → 1.4.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 (62) hide show
  1. package/app/server/backend-only.ts +5 -5
  2. package/app/server/index.ts +63 -54
  3. package/app/server/live/FluxStackConfig.ts +43 -39
  4. package/app/server/live/SystemMonitorIntegration.ts +2 -2
  5. package/app/server/live/register-components.ts +1 -1
  6. package/app/server/middleware/errorHandling.ts +6 -4
  7. package/app/server/routes/config.ts +145 -0
  8. package/app/server/routes/index.ts +5 -3
  9. package/config/app.config.ts +113 -0
  10. package/config/build.config.ts +24 -0
  11. package/config/database.config.ts +99 -0
  12. package/config/index.ts +68 -0
  13. package/config/logger.config.ts +27 -0
  14. package/config/runtime.config.ts +92 -0
  15. package/config/server.config.ts +46 -0
  16. package/config/services.config.ts +130 -0
  17. package/config/system.config.ts +105 -0
  18. package/core/build/index.ts +10 -4
  19. package/core/cli/index.ts +29 -12
  20. package/core/config/env.ts +37 -95
  21. package/core/config/runtime-config.ts +61 -58
  22. package/core/config/schema.ts +4 -0
  23. package/core/framework/server.ts +22 -10
  24. package/core/plugins/built-in/index.ts +7 -17
  25. package/core/plugins/built-in/swagger/index.ts +228 -228
  26. package/core/plugins/built-in/vite/index.ts +374 -358
  27. package/core/plugins/dependency-manager.ts +5 -5
  28. package/core/plugins/manager.ts +12 -12
  29. package/core/plugins/registry.ts +3 -3
  30. package/core/server/index.ts +0 -1
  31. package/core/server/live/ComponentRegistry.ts +34 -8
  32. package/core/server/live/LiveComponentPerformanceMonitor.ts +1 -1
  33. package/core/server/live/websocket-plugin.ts +434 -434
  34. package/core/server/middleware/README.md +488 -0
  35. package/core/server/middleware/elysia-helpers.ts +227 -0
  36. package/core/server/middleware/index.ts +25 -9
  37. package/core/server/plugins/static-files-plugin.ts +231 -231
  38. package/core/utils/config-schema.ts +484 -0
  39. package/core/utils/env.ts +306 -0
  40. package/core/utils/helpers.ts +4 -4
  41. package/core/utils/logger/colors.ts +114 -0
  42. package/core/utils/logger/config.ts +35 -0
  43. package/core/utils/logger/formatter.ts +82 -0
  44. package/core/utils/logger/group-logger.ts +101 -0
  45. package/core/utils/logger/index.ts +199 -250
  46. package/core/utils/logger/stack-trace.ts +92 -0
  47. package/core/utils/logger/startup-banner.ts +92 -0
  48. package/core/utils/logger/winston-logger.ts +152 -0
  49. package/core/utils/version.ts +5 -0
  50. package/create-fluxstack.ts +1 -0
  51. package/fluxstack.config.ts +2 -2
  52. package/package.json +117 -115
  53. package/core/config/env-dynamic.ts +0 -326
  54. package/core/plugins/built-in/logger/index.ts +0 -180
  55. package/core/server/plugins/logger.ts +0 -47
  56. package/core/utils/env-runtime-v2.ts +0 -232
  57. package/core/utils/env-runtime.ts +0 -259
  58. package/core/utils/logger/formatters.ts +0 -222
  59. package/core/utils/logger/middleware.ts +0 -253
  60. package/core/utils/logger/performance.ts +0 -384
  61. package/core/utils/logger/transports.ts +0 -365
  62. package/core/utils/logger.ts +0 -106
@@ -1,229 +1,229 @@
1
- import { swagger } from '@elysiajs/swagger'
2
- import type { Plugin, PluginContext } from '../../types'
3
-
4
- export const swaggerPlugin: Plugin = {
5
- name: 'swagger',
6
- version: '1.0.0',
7
- description: 'Enhanced Swagger documentation plugin for FluxStack with customizable options',
8
- author: 'FluxStack Team',
9
- priority: 500,
10
- category: 'documentation',
11
- tags: ['swagger', 'documentation', 'api'],
12
- dependencies: [], // No dependencies
13
-
14
- configSchema: {
15
- type: 'object',
16
- properties: {
17
- enabled: {
18
- type: 'boolean',
19
- description: 'Enable Swagger documentation'
20
- },
21
- path: {
22
- type: 'string',
23
- description: 'Swagger UI path'
24
- },
25
- title: {
26
- type: 'string',
27
- description: 'API documentation title'
28
- },
29
- description: {
30
- type: 'string',
31
- description: 'API documentation description'
32
- },
33
- version: {
34
- type: 'string',
35
- description: 'API version'
36
- },
37
- tags: {
38
- type: 'array',
39
- items: {
40
- type: 'object',
41
- properties: {
42
- name: { type: 'string' },
43
- description: { type: 'string' }
44
- },
45
- required: ['name']
46
- },
47
- description: 'API tags for grouping endpoints'
48
- },
49
- servers: {
50
- type: 'array',
51
- items: {
52
- type: 'object',
53
- properties: {
54
- url: { type: 'string' },
55
- description: { type: 'string' }
56
- },
57
- required: ['url']
58
- },
59
- description: 'API servers'
60
- },
61
- excludePaths: {
62
- type: 'array',
63
- items: { type: 'string' },
64
- description: 'Paths to exclude from documentation'
65
- },
66
- securitySchemes: {
67
- type: 'object',
68
- description: 'Security schemes definition'
69
- },
70
- globalSecurity: {
71
- type: 'array',
72
- items: {
73
- type: 'object'
74
- },
75
- description: 'Global security requirements'
76
- }
77
- },
78
- additionalProperties: false
79
- },
80
-
81
- defaultConfig: {
82
- enabled: true,
83
- path: '/swagger',
84
- title: 'FluxStack API',
85
- description: 'Modern full-stack TypeScript framework with type-safe API endpoints',
86
- version: '1.0.0',
87
- tags: [
88
- {
89
- name: 'Health',
90
- description: 'Health check endpoints'
91
- },
92
- {
93
- name: 'API',
94
- description: 'API endpoints'
95
- }
96
- ],
97
- servers: [],
98
- excludePaths: [],
99
- securitySchemes: {},
100
- globalSecurity: []
101
- },
102
-
103
- setup: async (context: PluginContext) => {
104
- const config = getPluginConfig(context)
105
-
106
- if (!config.enabled) {
107
- context.logger.info('Swagger plugin disabled by configuration')
108
- return
109
- }
110
-
111
- try {
112
- // Build servers list
113
- const servers = config.servers.length > 0 ? config.servers : [
114
- {
115
- url: `http://${context.config.server.host}:${context.config.server.port}`,
116
- description: 'Development server'
117
- }
118
- ]
119
-
120
- // Add production server if in production
121
- if (context.utils.isProduction()) {
122
- servers.push({
123
- url: 'https://api.example.com', // This would be configured
124
- description: 'Production server'
125
- })
126
- }
127
-
128
- const swaggerConfig = {
129
- path: config.path,
130
- documentation: {
131
- info: {
132
- title: config.title || context.config.app?.name || 'FluxStack API',
133
- version: config.version || context.config.app?.version || '1.0.0',
134
- description: config.description || context.config.app?.description || 'Modern full-stack TypeScript framework with type-safe API endpoints'
135
- },
136
- tags: config.tags,
137
- servers,
138
-
139
- // Add security schemes if defined
140
- ...(Object.keys(config.securitySchemes).length > 0 && {
141
- components: {
142
- securitySchemes: config.securitySchemes
143
- }
144
- }),
145
-
146
- // Add global security if defined
147
- ...(config.globalSecurity.length > 0 && {
148
- security: config.globalSecurity
149
- })
150
- },
151
- exclude: config.excludePaths,
152
- swaggerOptions: {
153
- persistAuthorization: true,
154
- displayRequestDuration: true,
155
- filter: true,
156
- showExtensions: true,
157
- tryItOutEnabled: true
158
- }
159
- }
160
-
161
- context.app.use(swagger(swaggerConfig))
162
-
163
- context.logger.info(`Swagger documentation enabled at ${config.path}`, {
164
- title: swaggerConfig.documentation.info.title,
165
- version: swaggerConfig.documentation.info.version,
166
- servers: servers.length
167
- })
168
- } catch (error) {
169
- context.logger.error('Failed to setup Swagger plugin', { error })
170
- throw error
171
- }
172
- },
173
-
174
- onServerStart: async (context: PluginContext) => {
175
- const config = getPluginConfig(context)
176
-
177
- if (config.enabled) {
178
- const swaggerUrl = `http://${context.config.server.host}:${context.config.server.port}${config.path}`
179
- context.logger.info(`Swagger documentation available at: ${swaggerUrl}`)
180
- }
181
- }
182
- }
183
-
184
- // Helper function to get plugin config from context
185
- function getPluginConfig(context: PluginContext) {
186
- // In a real implementation, this would get the config from the plugin context
187
- // For now, merge default config with any provided config
188
- const pluginConfig = context.config.plugins.config?.swagger || {}
189
- return { ...swaggerPlugin.defaultConfig, ...pluginConfig }
190
- }
191
-
192
- // Example usage for security configuration:
193
- //
194
- // To enable security in your FluxStack app, configure like this:
195
- //
196
- // plugins: {
197
- // config: {
198
- // swagger: {
199
- // securitySchemes: {
200
- // bearerAuth: {
201
- // type: 'http',
202
- // scheme: 'bearer',
203
- // bearerFormat: 'JWT'
204
- // },
205
- // apiKeyAuth: {
206
- // type: 'apiKey',
207
- // in: 'header',
208
- // name: 'X-API-Key'
209
- // }
210
- // },
211
- // globalSecurity: [
212
- // { bearerAuth: [] } // Apply JWT auth globally
213
- // ]
214
- // }
215
- // }
216
- // }
217
- //
218
- // Then in your routes, you can override per endpoint:
219
- // app.get('/public', handler, {
220
- // detail: { security: [] } // No auth required
221
- // })
222
- //
223
- // app.get('/private', handler, {
224
- // detail: {
225
- // security: [{ apiKeyAuth: [] }] // API key required
226
- // }
227
- // })
228
-
1
+ import { swagger } from '@elysiajs/swagger'
2
+ import type { Plugin, PluginContext } from '../../types'
3
+
4
+ export const swaggerPlugin: Plugin = {
5
+ name: 'swagger',
6
+ version: '1.0.0',
7
+ description: 'Enhanced Swagger documentation plugin for FluxStack with customizable options',
8
+ author: 'FluxStack Team',
9
+ priority: 500,
10
+ category: 'documentation',
11
+ tags: ['swagger', 'documentation', 'api'],
12
+ dependencies: [], // No dependencies
13
+
14
+ configSchema: {
15
+ type: 'object',
16
+ properties: {
17
+ enabled: {
18
+ type: 'boolean',
19
+ description: 'Enable Swagger documentation'
20
+ },
21
+ path: {
22
+ type: 'string',
23
+ description: 'Swagger UI path'
24
+ },
25
+ title: {
26
+ type: 'string',
27
+ description: 'API documentation title'
28
+ },
29
+ description: {
30
+ type: 'string',
31
+ description: 'API documentation description'
32
+ },
33
+ version: {
34
+ type: 'string',
35
+ description: 'API version'
36
+ },
37
+ tags: {
38
+ type: 'array',
39
+ items: {
40
+ type: 'object',
41
+ properties: {
42
+ name: { type: 'string' },
43
+ description: { type: 'string' }
44
+ },
45
+ required: ['name']
46
+ },
47
+ description: 'API tags for grouping endpoints'
48
+ },
49
+ servers: {
50
+ type: 'array',
51
+ items: {
52
+ type: 'object',
53
+ properties: {
54
+ url: { type: 'string' },
55
+ description: { type: 'string' }
56
+ },
57
+ required: ['url']
58
+ },
59
+ description: 'API servers'
60
+ },
61
+ excludePaths: {
62
+ type: 'array',
63
+ items: { type: 'string' },
64
+ description: 'Paths to exclude from documentation'
65
+ },
66
+ securitySchemes: {
67
+ type: 'object',
68
+ description: 'Security schemes definition'
69
+ },
70
+ globalSecurity: {
71
+ type: 'array',
72
+ items: {
73
+ type: 'object'
74
+ },
75
+ description: 'Global security requirements'
76
+ }
77
+ },
78
+ additionalProperties: false
79
+ },
80
+
81
+ defaultConfig: {
82
+ enabled: true,
83
+ path: '/swagger',
84
+ title: 'FluxStack API',
85
+ description: 'Modern full-stack TypeScript framework with type-safe API endpoints',
86
+ version: '1.0.0',
87
+ tags: [
88
+ {
89
+ name: 'Health',
90
+ description: 'Health check endpoints'
91
+ },
92
+ {
93
+ name: 'API',
94
+ description: 'API endpoints'
95
+ }
96
+ ],
97
+ servers: [],
98
+ excludePaths: [],
99
+ securitySchemes: {},
100
+ globalSecurity: []
101
+ },
102
+
103
+ setup: async (context: PluginContext) => {
104
+ const config = getPluginConfig(context)
105
+
106
+ if (!config.enabled) {
107
+ context.logger.debug('Swagger plugin disabled by configuration')
108
+ return
109
+ }
110
+
111
+ try {
112
+ // Build servers list
113
+ const servers = config.servers.length > 0 ? config.servers : [
114
+ {
115
+ url: `http://${context.config.server.host}:${context.config.server.port}`,
116
+ description: 'Development server'
117
+ }
118
+ ]
119
+
120
+ // Add production server if in production
121
+ if (context.utils.isProduction()) {
122
+ servers.push({
123
+ url: 'https://api.example.com', // This would be configured
124
+ description: 'Production server'
125
+ })
126
+ }
127
+
128
+ const swaggerConfig = {
129
+ path: config.path,
130
+ documentation: {
131
+ info: {
132
+ title: config.title || context.config.app?.name || 'FluxStack API',
133
+ version: config.version || context.config.app?.version || '1.0.0',
134
+ description: config.description || context.config.app?.description || 'Modern full-stack TypeScript framework with type-safe API endpoints'
135
+ },
136
+ tags: config.tags,
137
+ servers,
138
+
139
+ // Add security schemes if defined
140
+ ...(Object.keys(config.securitySchemes).length > 0 && {
141
+ components: {
142
+ securitySchemes: config.securitySchemes
143
+ }
144
+ }),
145
+
146
+ // Add global security if defined
147
+ ...(config.globalSecurity.length > 0 && {
148
+ security: config.globalSecurity
149
+ })
150
+ },
151
+ exclude: config.excludePaths,
152
+ swaggerOptions: {
153
+ persistAuthorization: true,
154
+ displayRequestDuration: true,
155
+ filter: true,
156
+ showExtensions: true,
157
+ tryItOutEnabled: true
158
+ }
159
+ }
160
+
161
+ context.app.use(swagger(swaggerConfig))
162
+
163
+ context.logger.debug(`Swagger documentation enabled at ${config.path}`, {
164
+ title: swaggerConfig.documentation.info.title,
165
+ version: swaggerConfig.documentation.info.version,
166
+ servers: servers.length
167
+ })
168
+ } catch (error) {
169
+ context.logger.error('Failed to setup Swagger plugin', { error })
170
+ throw error
171
+ }
172
+ },
173
+
174
+ onServerStart: async (context: PluginContext) => {
175
+ const config = getPluginConfig(context)
176
+
177
+ if (config.enabled) {
178
+ const swaggerUrl = `http://${context.config.server.host}:${context.config.server.port}${config.path}`
179
+ context.logger.debug(`Swagger documentation available at: ${swaggerUrl}`)
180
+ }
181
+ }
182
+ }
183
+
184
+ // Helper function to get plugin config from context
185
+ function getPluginConfig(context: PluginContext) {
186
+ // In a real implementation, this would get the config from the plugin context
187
+ // For now, merge default config with any provided config
188
+ const pluginConfig = context.config.plugins.config?.swagger || {}
189
+ return { ...swaggerPlugin.defaultConfig, ...pluginConfig }
190
+ }
191
+
192
+ // Example usage for security configuration:
193
+ //
194
+ // To enable security in your FluxStack app, configure like this:
195
+ //
196
+ // plugins: {
197
+ // config: {
198
+ // swagger: {
199
+ // securitySchemes: {
200
+ // bearerAuth: {
201
+ // type: 'http',
202
+ // scheme: 'bearer',
203
+ // bearerFormat: 'JWT'
204
+ // },
205
+ // apiKeyAuth: {
206
+ // type: 'apiKey',
207
+ // in: 'header',
208
+ // name: 'X-API-Key'
209
+ // }
210
+ // },
211
+ // globalSecurity: [
212
+ // { bearerAuth: [] } // Apply JWT auth globally
213
+ // ]
214
+ // }
215
+ // }
216
+ // }
217
+ //
218
+ // Then in your routes, you can override per endpoint:
219
+ // app.get('/public', handler, {
220
+ // detail: { security: [] } // No auth required
221
+ // })
222
+ //
223
+ // app.get('/private', handler, {
224
+ // detail: {
225
+ // security: [{ apiKeyAuth: [] }] // API key required
226
+ // }
227
+ // })
228
+
229
229
  export default swaggerPlugin