create-fluxstack 1.16.0 → 1.17.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.
- package/CHANGELOG.md +80 -0
- package/app/client/src/App.tsx +8 -0
- package/app/client/src/live/AuthDemo.tsx +4 -4
- package/core/build/bundler.ts +40 -26
- package/core/build/flux-plugins-generator.ts +325 -325
- package/core/build/index.ts +92 -21
- package/core/cli/command-registry.ts +44 -46
- package/core/cli/commands/build.ts +11 -6
- package/core/cli/commands/create.ts +7 -5
- package/core/cli/commands/dev.ts +6 -5
- package/core/cli/commands/help.ts +3 -2
- package/core/cli/commands/make-plugin.ts +8 -7
- package/core/cli/commands/plugin-add.ts +60 -43
- package/core/cli/commands/plugin-deps.ts +73 -57
- package/core/cli/commands/plugin-list.ts +44 -41
- package/core/cli/commands/plugin-remove.ts +33 -22
- package/core/cli/generators/component.ts +770 -769
- package/core/cli/generators/controller.ts +9 -8
- package/core/cli/generators/index.ts +148 -146
- package/core/cli/generators/interactive.ts +228 -227
- package/core/cli/generators/plugin.ts +11 -10
- package/core/cli/generators/prompts.ts +83 -82
- package/core/cli/generators/route.ts +7 -6
- package/core/cli/generators/service.ts +10 -9
- package/core/cli/generators/template-engine.ts +2 -1
- package/core/cli/generators/types.ts +7 -7
- package/core/cli/generators/utils.ts +191 -191
- package/core/cli/index.ts +9 -8
- package/core/cli/plugin-discovery.ts +2 -2
- package/core/client/hooks/useAuth.ts +48 -48
- package/core/client/standalone.ts +18 -17
- package/core/client/state/createStore.ts +192 -192
- package/core/client/state/index.ts +14 -14
- package/core/config/index.ts +1 -0
- package/core/framework/client.ts +131 -131
- package/core/framework/index.ts +7 -7
- package/core/framework/server.ts +72 -112
- package/core/framework/types.ts +2 -2
- package/core/plugins/built-in/live-components/commands/create-live-component.ts +6 -3
- package/core/plugins/built-in/monitoring/index.ts +110 -68
- package/core/plugins/built-in/static/index.ts +2 -2
- package/core/plugins/built-in/swagger/index.ts +9 -9
- package/core/plugins/built-in/vite/index.ts +3 -3
- package/core/plugins/built-in/vite/vite-dev.ts +3 -3
- package/core/plugins/config.ts +50 -47
- package/core/plugins/discovery.ts +10 -4
- package/core/plugins/executor.ts +2 -2
- package/core/plugins/index.ts +206 -203
- package/core/plugins/manager.ts +21 -20
- package/core/plugins/registry.ts +76 -12
- package/core/plugins/types.ts +14 -14
- package/core/server/framework.ts +3 -189
- package/core/server/live/auto-generated-components.ts +11 -29
- package/core/server/live/index.ts +41 -31
- package/core/server/live/websocket-plugin.ts +11 -1
- package/core/server/middleware/elysia-helpers.ts +16 -15
- package/core/server/middleware/errorHandling.ts +14 -14
- package/core/server/middleware/index.ts +31 -31
- package/core/server/plugins/database.ts +181 -180
- package/core/server/plugins/static-files-plugin.ts +4 -3
- package/core/server/plugins/swagger.ts +11 -8
- package/core/server/rooms/RoomBroadcaster.ts +11 -10
- package/core/server/rooms/RoomSystem.ts +14 -11
- package/core/server/services/BaseService.ts +7 -7
- package/core/server/services/ServiceContainer.ts +5 -5
- package/core/server/services/index.ts +8 -8
- package/core/templates/create-project.ts +28 -27
- package/core/testing/index.ts +9 -9
- package/core/testing/setup.ts +73 -73
- package/core/types/api.ts +168 -168
- package/core/types/config.ts +5 -5
- package/core/types/index.ts +1 -1
- package/core/types/plugin.ts +2 -2
- package/core/types/types.ts +3 -3
- package/core/utils/build-logger.ts +324 -324
- package/core/utils/config-schema.ts +480 -480
- package/core/utils/env.ts +10 -8
- package/core/utils/errors/codes.ts +114 -114
- package/core/utils/errors/handlers.ts +30 -20
- package/core/utils/errors/index.ts +54 -46
- package/core/utils/errors/middleware.ts +113 -113
- package/core/utils/helpers.ts +19 -16
- package/core/utils/logger/colors.ts +114 -114
- package/core/utils/logger/config.ts +2 -2
- package/core/utils/logger/formatter.ts +82 -82
- package/core/utils/logger/group-logger.ts +101 -101
- package/core/utils/logger/index.ts +13 -3
- package/core/utils/logger/startup-banner.ts +2 -2
- package/core/utils/logger/winston-logger.ts +152 -152
- package/core/utils/monitoring/index.ts +211 -211
- package/core/utils/sync-version.ts +67 -66
- package/core/utils/version.ts +1 -1
- package/package.json +104 -100
- package/playwright-report/index.html +85 -0
- package/playwright.config.ts +31 -0
- package/plugins/crypto-auth/client/CryptoAuthClient.ts +302 -302
- package/plugins/crypto-auth/client/components/index.ts +11 -11
- package/plugins/crypto-auth/client/index.ts +11 -11
- package/plugins/crypto-auth/package.json +65 -65
- package/plugins/crypto-auth/server/CryptoAuthService.ts +185 -185
- package/plugins/crypto-auth/server/middlewares/cryptoAuthAdmin.ts +6 -5
- package/plugins/crypto-auth/server/middlewares/cryptoAuthPermissions.ts +6 -5
- package/plugins/crypto-auth/server/middlewares/cryptoAuthRequired.ts +3 -3
- package/plugins/crypto-auth/server/middlewares/index.ts +22 -22
- package/plugins/crypto-auth/server/middlewares.ts +19 -19
- package/vite.config.ts +13 -0
- package/app/client/.live-stubs/LiveAdminPanel.js +0 -5
- package/app/client/.live-stubs/LiveCounter.js +0 -9
- package/app/client/.live-stubs/LiveForm.js +0 -11
- package/app/client/.live-stubs/LiveLocalCounter.js +0 -8
- package/app/client/.live-stubs/LivePingPong.js +0 -10
- package/app/client/.live-stubs/LiveRoomChat.js +0 -11
- package/app/client/.live-stubs/LiveSharedCounter.js +0 -10
- package/app/client/.live-stubs/LiveUpload.js +0 -15
- package/app/server/live/register-components.ts +0 -19
- package/core/build/live-components-generator.ts +0 -321
- package/core/live/ComponentRegistry.ts +0 -403
- package/core/live/types.ts +0 -241
- package/workspace.json +0 -6
|
@@ -1,152 +1,152 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* FluxStack Logger - Winston Logger Factory
|
|
3
|
-
* Creates Winston logger instances for each module
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
import winston from 'winston'
|
|
7
|
-
import DailyRotateFile from 'winston-daily-rotate-file'
|
|
8
|
-
import { join, dirname } from 'path'
|
|
9
|
-
import { existsSync, mkdirSync } from 'fs'
|
|
10
|
-
import chalk from 'chalk'
|
|
11
|
-
import { LOGGER_CONFIG } from './config'
|
|
12
|
-
import { LOG_SYMBOLS, LEVEL_COLORS } from './colors'
|
|
13
|
-
|
|
14
|
-
// Cache for module loggers
|
|
15
|
-
const moduleLoggers = new Map<string, winston.Logger>()
|
|
16
|
-
|
|
17
|
-
/**
|
|
18
|
-
* Console format with colors and symbols
|
|
19
|
-
*/
|
|
20
|
-
function createConsoleFormat() {
|
|
21
|
-
return winston.format.printf(({ timestamp, level, message }) => {
|
|
22
|
-
const levelSymbol = LOG_SYMBOLS[level as keyof typeof LOG_SYMBOLS] || LOG_SYMBOLS.default
|
|
23
|
-
const levelColor = LEVEL_COLORS[level as keyof typeof LEVEL_COLORS] || LEVEL_COLORS.default
|
|
24
|
-
const timestampFormatted = chalk.gray(`[${timestamp}]`)
|
|
25
|
-
|
|
26
|
-
return `${levelSymbol} ${timestampFormatted} ${levelColor(level.toUpperCase().padEnd(5))} ${message}`
|
|
27
|
-
})
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
/**
|
|
31
|
-
* File format without colors
|
|
32
|
-
*/
|
|
33
|
-
function createFileFormat() {
|
|
34
|
-
return winston.format.printf(({ timestamp, level, message }) => {
|
|
35
|
-
// Remove ANSI color codes
|
|
36
|
-
const cleanMessage = String(message).replace(/\u001b\[.*?m/g, '')
|
|
37
|
-
return `[${timestamp}] [${level.toUpperCase()}]: ${cleanMessage}`
|
|
38
|
-
})
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
/**
|
|
42
|
-
* Create a logger for a specific module
|
|
43
|
-
*/
|
|
44
|
-
export function getLoggerForModule(modulePath: string): winston.Logger {
|
|
45
|
-
// Normalize path for cache key
|
|
46
|
-
const normalizedPath = modulePath.replace(/[:/\\]/g, '_').replace(/^_/, '')
|
|
47
|
-
|
|
48
|
-
// Check cache
|
|
49
|
-
if (moduleLoggers.has(normalizedPath)) {
|
|
50
|
-
return moduleLoggers.get(normalizedPath)!
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
// Create logger
|
|
54
|
-
const logger = createLogger(normalizedPath)
|
|
55
|
-
moduleLoggers.set(normalizedPath, logger)
|
|
56
|
-
|
|
57
|
-
return logger
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
/**
|
|
61
|
-
* Create a Winston logger with appropriate transports
|
|
62
|
-
*/
|
|
63
|
-
function createLogger(modulePath: string): winston.Logger {
|
|
64
|
-
const transports: winston.transport[] = [
|
|
65
|
-
// Console transport (always enabled)
|
|
66
|
-
new winston.transports.Console({
|
|
67
|
-
format: winston.format.combine(
|
|
68
|
-
winston.format.timestamp({ format: LOGGER_CONFIG.dateFormat }),
|
|
69
|
-
createConsoleFormat()
|
|
70
|
-
)
|
|
71
|
-
})
|
|
72
|
-
]
|
|
73
|
-
|
|
74
|
-
// Add file transports if enabled
|
|
75
|
-
if (LOGGER_CONFIG.logToFile) {
|
|
76
|
-
const logsDir = join(process.cwd(), 'logs', modulePath)
|
|
77
|
-
|
|
78
|
-
// Ensure logs directory exists
|
|
79
|
-
if (!existsSync(logsDir)) {
|
|
80
|
-
mkdirSync(logsDir, { recursive: true })
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
const commonFileFormat = winston.format.combine(
|
|
84
|
-
winston.format.timestamp({ format: LOGGER_CONFIG.dateFormat }),
|
|
85
|
-
createFileFormat()
|
|
86
|
-
)
|
|
87
|
-
|
|
88
|
-
// All logs
|
|
89
|
-
transports.push(
|
|
90
|
-
new DailyRotateFile({
|
|
91
|
-
filename: join(logsDir, '%DATE%-all.log'),
|
|
92
|
-
datePattern: 'YYYY-MM-DD',
|
|
93
|
-
maxSize: LOGGER_CONFIG.maxSize,
|
|
94
|
-
maxFiles: LOGGER_CONFIG.maxFiles,
|
|
95
|
-
level: LOGGER_CONFIG.level,
|
|
96
|
-
format: commonFileFormat
|
|
97
|
-
})
|
|
98
|
-
)
|
|
99
|
-
|
|
100
|
-
// Error logs
|
|
101
|
-
transports.push(
|
|
102
|
-
new DailyRotateFile({
|
|
103
|
-
filename: join(logsDir, '%DATE%-errors.log'),
|
|
104
|
-
datePattern: 'YYYY-MM-DD',
|
|
105
|
-
maxSize: LOGGER_CONFIG.maxSize,
|
|
106
|
-
maxFiles: LOGGER_CONFIG.maxFiles,
|
|
107
|
-
level: 'error',
|
|
108
|
-
format: commonFileFormat
|
|
109
|
-
})
|
|
110
|
-
)
|
|
111
|
-
|
|
112
|
-
// Warning logs
|
|
113
|
-
transports.push(
|
|
114
|
-
new DailyRotateFile({
|
|
115
|
-
filename: join(logsDir, '%DATE%-warnings.log'),
|
|
116
|
-
datePattern: 'YYYY-MM-DD',
|
|
117
|
-
maxSize: LOGGER_CONFIG.maxSize,
|
|
118
|
-
maxFiles: LOGGER_CONFIG.maxFiles,
|
|
119
|
-
level: 'warn',
|
|
120
|
-
format: commonFileFormat
|
|
121
|
-
})
|
|
122
|
-
)
|
|
123
|
-
|
|
124
|
-
// Info logs
|
|
125
|
-
transports.push(
|
|
126
|
-
new DailyRotateFile({
|
|
127
|
-
filename: join(logsDir, '%DATE%-info.log'),
|
|
128
|
-
datePattern: 'YYYY-MM-DD',
|
|
129
|
-
maxSize: LOGGER_CONFIG.maxSize,
|
|
130
|
-
maxFiles: LOGGER_CONFIG.maxFiles,
|
|
131
|
-
level: 'info',
|
|
132
|
-
format: commonFileFormat
|
|
133
|
-
})
|
|
134
|
-
)
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
return winston.createLogger({
|
|
138
|
-
level: LOGGER_CONFIG.level,
|
|
139
|
-
transports
|
|
140
|
-
})
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
/**
|
|
144
|
-
* Clear logger cache (useful for testing)
|
|
145
|
-
*/
|
|
146
|
-
export function clearLoggerCache(): void {
|
|
147
|
-
// Close all loggers before clearing
|
|
148
|
-
for (const logger of moduleLoggers.values()) {
|
|
149
|
-
logger.close()
|
|
150
|
-
}
|
|
151
|
-
moduleLoggers.clear()
|
|
152
|
-
}
|
|
1
|
+
/**
|
|
2
|
+
* FluxStack Logger - Winston Logger Factory
|
|
3
|
+
* Creates Winston logger instances for each module
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import winston from 'winston'
|
|
7
|
+
import DailyRotateFile from 'winston-daily-rotate-file'
|
|
8
|
+
import { join, dirname } from 'path'
|
|
9
|
+
import { existsSync, mkdirSync } from 'fs'
|
|
10
|
+
import chalk from 'chalk'
|
|
11
|
+
import { LOGGER_CONFIG } from './config'
|
|
12
|
+
import { LOG_SYMBOLS, LEVEL_COLORS } from './colors'
|
|
13
|
+
|
|
14
|
+
// Cache for module loggers
|
|
15
|
+
const moduleLoggers = new Map<string, winston.Logger>()
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Console format with colors and symbols
|
|
19
|
+
*/
|
|
20
|
+
function createConsoleFormat() {
|
|
21
|
+
return winston.format.printf(({ timestamp, level, message }) => {
|
|
22
|
+
const levelSymbol = LOG_SYMBOLS[level as keyof typeof LOG_SYMBOLS] || LOG_SYMBOLS.default
|
|
23
|
+
const levelColor = LEVEL_COLORS[level as keyof typeof LEVEL_COLORS] || LEVEL_COLORS.default
|
|
24
|
+
const timestampFormatted = chalk.gray(`[${timestamp}]`)
|
|
25
|
+
|
|
26
|
+
return `${levelSymbol} ${timestampFormatted} ${levelColor(level.toUpperCase().padEnd(5))} ${message}`
|
|
27
|
+
})
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* File format without colors
|
|
32
|
+
*/
|
|
33
|
+
function createFileFormat() {
|
|
34
|
+
return winston.format.printf(({ timestamp, level, message }) => {
|
|
35
|
+
// Remove ANSI color codes
|
|
36
|
+
const cleanMessage = String(message).replace(/\u001b\[.*?m/g, '')
|
|
37
|
+
return `[${timestamp}] [${level.toUpperCase()}]: ${cleanMessage}`
|
|
38
|
+
})
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Create a logger for a specific module
|
|
43
|
+
*/
|
|
44
|
+
export function getLoggerForModule(modulePath: string): winston.Logger {
|
|
45
|
+
// Normalize path for cache key
|
|
46
|
+
const normalizedPath = modulePath.replace(/[:/\\]/g, '_').replace(/^_/, '')
|
|
47
|
+
|
|
48
|
+
// Check cache
|
|
49
|
+
if (moduleLoggers.has(normalizedPath)) {
|
|
50
|
+
return moduleLoggers.get(normalizedPath)!
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
// Create logger
|
|
54
|
+
const logger = createLogger(normalizedPath)
|
|
55
|
+
moduleLoggers.set(normalizedPath, logger)
|
|
56
|
+
|
|
57
|
+
return logger
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Create a Winston logger with appropriate transports
|
|
62
|
+
*/
|
|
63
|
+
function createLogger(modulePath: string): winston.Logger {
|
|
64
|
+
const transports: winston.transport[] = [
|
|
65
|
+
// Console transport (always enabled)
|
|
66
|
+
new winston.transports.Console({
|
|
67
|
+
format: winston.format.combine(
|
|
68
|
+
winston.format.timestamp({ format: LOGGER_CONFIG.dateFormat }),
|
|
69
|
+
createConsoleFormat()
|
|
70
|
+
)
|
|
71
|
+
})
|
|
72
|
+
]
|
|
73
|
+
|
|
74
|
+
// Add file transports if enabled
|
|
75
|
+
if (LOGGER_CONFIG.logToFile) {
|
|
76
|
+
const logsDir = join(process.cwd(), 'logs', modulePath)
|
|
77
|
+
|
|
78
|
+
// Ensure logs directory exists
|
|
79
|
+
if (!existsSync(logsDir)) {
|
|
80
|
+
mkdirSync(logsDir, { recursive: true })
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
const commonFileFormat = winston.format.combine(
|
|
84
|
+
winston.format.timestamp({ format: LOGGER_CONFIG.dateFormat }),
|
|
85
|
+
createFileFormat()
|
|
86
|
+
)
|
|
87
|
+
|
|
88
|
+
// All logs
|
|
89
|
+
transports.push(
|
|
90
|
+
new DailyRotateFile({
|
|
91
|
+
filename: join(logsDir, '%DATE%-all.log'),
|
|
92
|
+
datePattern: 'YYYY-MM-DD',
|
|
93
|
+
maxSize: LOGGER_CONFIG.maxSize,
|
|
94
|
+
maxFiles: LOGGER_CONFIG.maxFiles,
|
|
95
|
+
level: LOGGER_CONFIG.level,
|
|
96
|
+
format: commonFileFormat
|
|
97
|
+
})
|
|
98
|
+
)
|
|
99
|
+
|
|
100
|
+
// Error logs
|
|
101
|
+
transports.push(
|
|
102
|
+
new DailyRotateFile({
|
|
103
|
+
filename: join(logsDir, '%DATE%-errors.log'),
|
|
104
|
+
datePattern: 'YYYY-MM-DD',
|
|
105
|
+
maxSize: LOGGER_CONFIG.maxSize,
|
|
106
|
+
maxFiles: LOGGER_CONFIG.maxFiles,
|
|
107
|
+
level: 'error',
|
|
108
|
+
format: commonFileFormat
|
|
109
|
+
})
|
|
110
|
+
)
|
|
111
|
+
|
|
112
|
+
// Warning logs
|
|
113
|
+
transports.push(
|
|
114
|
+
new DailyRotateFile({
|
|
115
|
+
filename: join(logsDir, '%DATE%-warnings.log'),
|
|
116
|
+
datePattern: 'YYYY-MM-DD',
|
|
117
|
+
maxSize: LOGGER_CONFIG.maxSize,
|
|
118
|
+
maxFiles: LOGGER_CONFIG.maxFiles,
|
|
119
|
+
level: 'warn',
|
|
120
|
+
format: commonFileFormat
|
|
121
|
+
})
|
|
122
|
+
)
|
|
123
|
+
|
|
124
|
+
// Info logs
|
|
125
|
+
transports.push(
|
|
126
|
+
new DailyRotateFile({
|
|
127
|
+
filename: join(logsDir, '%DATE%-info.log'),
|
|
128
|
+
datePattern: 'YYYY-MM-DD',
|
|
129
|
+
maxSize: LOGGER_CONFIG.maxSize,
|
|
130
|
+
maxFiles: LOGGER_CONFIG.maxFiles,
|
|
131
|
+
level: 'info',
|
|
132
|
+
format: commonFileFormat
|
|
133
|
+
})
|
|
134
|
+
)
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
return winston.createLogger({
|
|
138
|
+
level: LOGGER_CONFIG.level,
|
|
139
|
+
transports
|
|
140
|
+
})
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
/**
|
|
144
|
+
* Clear logger cache (useful for testing)
|
|
145
|
+
*/
|
|
146
|
+
export function clearLoggerCache(): void {
|
|
147
|
+
// Close all loggers before clearing
|
|
148
|
+
for (const logger of moduleLoggers.values()) {
|
|
149
|
+
logger.close()
|
|
150
|
+
}
|
|
151
|
+
moduleLoggers.clear()
|
|
152
|
+
}
|