⚙️ Configuración Centralizada (bap.config.json)
El archivo bap.config.json es la única fuente de verdad (Single Source of Truth) de una aplicación construida sobre BaP Framework. Contiene toda la arquitectura declarativa de la aplicación y es inyectado en memoria por Gulp durante el proceso de compilación.
bap.config.json para garantizar mantenibilidad y fácil migración.1. Objeto `app` — Identidad y Metadatos
Declara el nombre público del sistema, versión activa del desarrollo, versión compatible del motor BaP Framework y canales de contacto o redes sociales.
{
"app": {
"name": "Mi Aplicación BaP",
"version": "v1.0.0",
"currentBapVersion": "v2.6.0",
"socialMedia": {
"email": "soporte@ejemplo.com"
}
}
}2. Objeto `build` — Pipeline de Compilación y Procesamiento i18n
Define el directorio de código fuente (src), directorio de distribución compilado (public) y la lista de archivos HTML (páginas y componentes) que requieren reemplazo automatizado de tokens de i18n y variables de entorno.
{
"build": {
"srcDir": "src",
"outDir": "public",
"i18nItemsToProcess": {
"pages": {
"index": "index.html",
"notFound": "404.html"
},
"components": {
"bapFooter": "bap-footer/bap-footer.html",
"bapHeader": "bap-header/bap-header.html"
}
}
}
}3. Objeto `features` — Feature Flags Integradas
Permite encender o apagar integraciones nativas del framework (Firebase, reCAPTCHA, Google Drive API) sin modificar el código fuente.
{
"features": {
"useFirebase": true,
"useRecaptcha": true,
"googleDrive": {
"enabled": false,
"defaultFolderName": "Documentos App",
"scopes": [
"https://www.googleapis.com/auth/drive.file"
]
}
}
}4. Objeto `routes` — Matriz Declarativa de Ruteo
Registra cada ruta pública en appRoutes especificando su pathname, estrategia de navegación (REDIRECT o loadComponent) y reglas de validación de autenticación (signIn: false/true).
{
"routes": {
"appRoutes": {
"landing": {
"pathname": "/",
"component": null,
"navigation": "REDIRECT",
"validate": { "signIn": false }
},
"dashboard": {
"pathname": "/pages/dashboard/",
"component": null,
"navigation": "REDIRECT",
"validate": { "signIn": true }
}
},
"realtimeDatabaseRoutes": {
"usersWhitelist": "/allowed_users"
}
}
}5. Objeto `analytics` — Generación de Telemetría
Define la taxonomía unificada de eventos en customEvents. Durante la compilación, Gulp transforma estos objetos en métodos ejecutables fuertemente invocados a través de analytic.logEvent..
{
"analytics": {
"trackPageViews": true,
"customEvents": {
"enterLandingPage": {
"type": "enter_page",
"name": "enter_landing_page",
"func": "landing_page",
"userType": "User"
}
}
}
}6. Estructura Completa Oficial de `bap.config.json`
A continuación se presenta un ejemplo completo y funcional del archivo bap.config.json listo para producción:
{
"app": {
"name": "BaP Framework",
"version": "v2.6.0",
"currentBapVersion": "v2.6.0",
"socialMedia": {
"email": "gonzaloarenasf+bap-framework@gmail.com"
}
},
"build": {
"srcDir": "src",
"outDir": "public",
"i18nItemsToProcess": {
"pages": {
"index": "index.html",
"notFound": "404.html",
"config": "pages/config/index.html"
},
"components": {
"bapFooter": "bap-footer/bap-footer.html",
"bapHeader": "bap-header/bap-header.html"
}
}
},
"features": {
"useFirebase": true,
"useRecaptcha": true,
"googleDrive": {
"enabled": false,
"defaultFolderName": "BaP Framework Documents",
"scopes": [
"https://www.googleapis.com/auth/drive.file"
]
}
},
"routes": {
"appRoutes": {
"landing": {
"pathname": "/",
"component": null,
"navigation": "REDIRECT",
"validate": { "signIn": false }
},
"config": {
"pathname": "/pages/config/",
"component": null,
"navigation": "REDIRECT",
"validate": { "signIn": false }
}
},
"realtimeDatabaseRoutes": {
"usersWhitelist": "/allowed_users"
}
},
"analytics": {
"trackPageViews": true,
"customEvents": {
"enterLandingPage": {
"type": "enter_page",
"name": "enter_landing_page",
"func": "landing_page",
"userType": "User"
},
"enterConfigPage": {
"type": "enter_page",
"name": "enter_config_page",
"func": "config_page",
"userType": "User"
}
}
}
}Resumen de Beneficios de la Configuración Centralizada
- Inyección segura: Variables de entorno y rutas se validan en tiempo de compilación.
- Desacoplamiento total: Los componentes y páginas se autodescubren sin alterar el núcleo `src/_main/`.
- Cero duplicación: Las rutas y eventos se declaran una sola vez y se propagan automáticamente al cliente.