UNPKG

create-fluxstack

Version:

⚡ Revolutionary full-stack TypeScript framework with Declarative Config System, Elysia + React + Bun

125 lines (110 loc) 3.91 kB
// User application entry point import { FluxStackFramework, vitePlugin, swaggerPlugin, staticPlugin, liveComponentsPlugin, staticFilesPlugin } from "@/core/server" import { isDevelopment } from "@/core/utils/helpers" import { DEBUG } from "@/core/utils/logger" import { apiRoutes } from "./routes" import { helpers } from "@/core/utils/env" import { serverConfig } from "@/config/server.config" import { appConfig } from "@/config/app.config" import { loggerConfig } from "@/config/logger.config" import cryptoAuthPlugin from "@/plugins/crypto-auth" import "./live/register-components" // Startup info moved to DEBUG level (set LOG_LEVEL=debug to see details) DEBUG('🔧 Loading declarative configuration...') DEBUG(`📊 Environment: ${appConfig.env}`) DEBUG(`🚀 Port: ${serverConfig.port}`) DEBUG(`🌐 Host: ${serverConfig.host}`) // Criar aplicação com configuração declarativa const app = new FluxStackFramework({ server: { port: serverConfig.port, host: serverConfig.host, apiPrefix: serverConfig.apiPrefix, cors: { origins: serverConfig.corsOrigins, methods: serverConfig.corsMethods, headers: serverConfig.corsHeaders, credentials: serverConfig.corsCredentials }, middleware: [] }, app: { name: serverConfig.appName, version: serverConfig.appVersion }, client: { port: serverConfig.clientPort, proxy: { target: helpers.getServerUrl() }, build: { sourceMaps: serverConfig.clientSourceMaps, minify: false, target: serverConfig.clientTarget as any, outDir: serverConfig.clientOutDir } } }) // Usar plugins de infraestrutura primeiro (Logger é core, não é plugin) // Registrar plugin de autenticação ANTES dos outros plugins app.use(cryptoAuthPlugin) // Usar plugins condicionalmente baseado no ambiente if (isDevelopment()) { app.use(vitePlugin) } else { app.use(staticPlugin) } // Add static files AFTER Vite to avoid conflicts, but BEFORE Live Components app.use(staticFilesPlugin) // Add Static Files support app.use(liveComponentsPlugin) // Add Live Components support // Adicionar rota de teste para mostrar config declarativo (antes das rotas) app.getApp().get('/api/env-test', () => { return { message: '⚡ Declarative Config System!', timestamp: new Date().toISOString(), serverConfig: { port: serverConfig.port, host: serverConfig.host, apiPrefix: serverConfig.apiPrefix, appName: serverConfig.appName, appVersion: serverConfig.appVersion, cors: { origins: serverConfig.corsOrigins, methods: serverConfig.corsMethods, credentials: serverConfig.corsCredentials }, client: { port: serverConfig.clientPort, target: serverConfig.clientTarget, sourceMaps: serverConfig.clientSourceMaps }, features: { enableSwagger: serverConfig.enableSwagger, enableMetrics: serverConfig.enableMetrics, enableMonitoring: serverConfig.enableMonitoring } }, environment: { NODE_ENV: appConfig.env, DEBUG: appConfig.debug, LOG_LEVEL: loggerConfig.level }, urls: { server: helpers.getServerUrl(), client: helpers.getClientUrl(), swagger: `${helpers.getServerUrl()}/swagger` }, system: { version: 'declarative-config', features: ['type-safe', 'validated', 'declarative', 'runtime-reload'] } } }) // Registrar rotas da aplicação DEPOIS da rota de teste app.routes(apiRoutes) // Swagger por último para descobrir todas as rotas app.use(swaggerPlugin) // Iniciar servidor (banner displayed by framework) app.listen() // Exportar tipo da aplicação para Eden Treaty (método correto) export type App = typeof app