---
title: "TeqFW: Core"
description: "Cómo el núcleo TeqFW arranca una aplicación Node.js, descubre plugins npm, configura DI y compone la interfaz de línea de comandos."
date: 2021-06-25
---

Una aplicación Teq es primero una aplicación Node.js y, después, una
aplicación modular compuesta de plugins Teq que son módulos npm. El
núcleo de plataforma tiene tres tareas: arrancar la aplicación y sus
comandos de consola, descubrir y conectar plugins, y establecer la
arquitectura fundamental.

## Bootstrap

El punto de entrada es `bin/tequila.mjs`. Encuentra la raíz, carga el
contenedor DI, mapea fuentes del núcleo, crea configuración bootstrap,
obtiene `TeqFw_Core_Back_App$`, lo inicializa y lo ejecuta. El script
pertenece a la aplicación, pero se mantiene prácticamente idéntico de
una aplicación Teq a otra.

``` js
import { dirname, join } from 'node:path';
import { fileURLToPath } from 'node:url';
import teq from '@teqfw/core';

const root = join(dirname(fileURLToPath(import.meta.url)), '..');
teq({ path: root }).catch(console.error);
```

El comportamiento diferente viene de plugins instalados y comandos que
aportan, no de reescribir el launcher.

## Ciclo de vida

Durante la inicialización, `TeqFw_Core_Back_App`:

- inicializa logging;
- carga configuración local, por ejemplo conexión a base de datos;
- escanea el sistema de archivos y crea el registro de plugins;
- añade namespaces descubiertos al contenedor DI;
- reúne comandos CLI de esos plugins.

Al ejecutarse realiza el comando pedido —a menudo un servidor web— o
imprime la lista de comandos disponibles. También ofrece `stop()` para
cerrar ordenadamente recursos como conexiones de base de datos.

## Logger y configuración

El diseño original expone una abstracción de logger común, capaz de
trabajar en backend o frontend y enrutar registros a consola, archivo,
base o servidor remoto. La configuración local de backend se lee de JSON
como `cfg/local.json` y se inyecta en los objetos que la necesitan. Los
secretos deben permanecer en configuración local ignorada o en un
entorno seguro de despliegue, nunca en el descriptor del paquete.

## Escáner de plugins

Un plugin Teq es un paquete npm con `teqfw.json` en su raíz. Como mínimo
declara namespace y directorio de fuentes:

``` json
{
  "autoload": {
    "ns": "Vendor_Project_Plugin",
    "path": "./src"
  }
}
```

El escáner recorre `node_modules`, encuentra descriptores, registra los
paquetes y añade mapeos namespace-sistema de archivos a DI. Las demás
partes acceden a los descriptores mediante ese registro, sin volver a
escanear.

## Comandos

La aplicación core es en esencia un envoltorio de
[commander](https://www.npmjs.com/package/commander). Los descriptores
listan identificadores de módulos que producen DTO de comando:

``` json
{ "commands": ["TeqFw_Core_Back_Cli_Version"] }
```

Un DTO aporta `action`, descripción, nombre y realm opcional. El realm
antepone comandos de un plugin: `app` más `clean` se convierte en
`app-clean`.

``` js
const command = await container.get(`${factoryName}$`);
const fullName = command.realm ? `${command.realm}-${command.name}` : command.name;
commander.command(fullName).description(command.desc).action(command.action);
```

## Resumen

El plugin Core convierte una colección de módulos npm en una aplicación
Teq ejecutable. Descubre plugins, registra namespaces, inicializa
logging y configuración local, reúne comandos y ejecuta el seleccionado
mediante DI. Así el launcher permanece estable mientras la aplicación
crece componiendo plugins.

<zoom-img src="/medium/img/346fb4788e98/image-01.png" alt="Componentes core en una aplicación TeqFW" width="100%"></zoom-img>
