# Complejidad

El único control detrás de cada preset: qué aumenta a medida que sube el número, el único umbral que cambia en medium y qué transformaciones puede desactivar la configuración pero no forzar.

Source: https://www.afterpack.dev/es/docs/complexity

`complexity` es el único control que decide cuánta protección aplica el motor. Un [preset](https://www.afterpack.dev/es/docs/presets) es un punto con nombre sobre él: `light` es `5`, `hard` es `12`. `light` renombra los identificadores, reescribe la sintaxis y codifica las cadenas, sin capas estructurales; a partir de `medium`, y con cualquier valor que fijes directamente, cada token se lleva hacia el objetivo. Establece [`complexity`](https://www.afterpack.dev/es/docs/config#complexity) directamente para un valor intermedio o superior: es un número no negativo sin límite.

## Qué aumenta con el número

La complejidad es un presupuesto, no un calendario. No existe una lista fija de «esta función con este número». Por encima de `0`, el motor gasta un presupuesto mayor a medida que sube el valor y negocia qué transformaciones aplicar en cada build, de modo que dos builds con la misma complejidad tienen formas distintas y ninguna transformación concreta está garantizada en un nivel dado. Esa variación entre builds es precisamente el objetivo: consulta [cómo funciona AfterPack](https://www.afterpack.dev/es/docs/concepts) para ver por qué una estructura fija sería una huella identificable.

Hay tres cosas fijas:

| `complexity` | Qué está garantizado |
|---|---|
| `0` (`minify`) | Sin ofuscación. Los identificadores se renombran y el código se comprime; no se ejecuta nada de lo de abajo. El motor 0.2.2 también reescribía la sintaxis en `0`. |
| `> 0` | Cada literal de cadena que el motor puede reescribir pasa por un decodificador en tiempo de ejecución: el [mínimo de cadenas](https://www.afterpack.dev/es/docs/presets#the-default-is-light). |
| `≥ 7` (`medium` y superiores) | Las cadenas y los enteros codificados se vinculan a un valor compartido en tiempo de ejecución, y los literales de objeto se reconstruyen con formas variadas. |

Todo lo demás (remodelado del flujo de control, predicados opacos, interpretación de expresiones enteras y el resto) se toma del presupuesto a medida que crece, no se activa en un umbral concreto. [`inflation.max`](https://www.afterpack.dev/es/docs/config#inflation-max) no cambia cuáles de ellas se aplican: si no lo fijas, decide solo el objetivo, y un build que crecería por encima de un valor que fijes falla.

## Desactivar o activar una transformación

Puedes desactivar cualquier tipo de transformación. No puedes forzar que se aplique.

- **Desactivar es fiable.** [`transforms.<kind>.enabled = false`](https://www.afterpack.dev/es/docs/config) elimina ese tipo con cualquier complejidad. A partir del motor 0.2.3, desactivar `scopeDeepen` en `7` o más puede dejar parte de un archivo por debajo de su objetivo, y entonces el build falla con [`DIAG_TARGET_NOT_REACHED`](https://www.afterpack.dev/es/docs/diagnostics#complete-reference) y nombra las líneas.
- **Activar es un permiso.** `true` permite que el motor use un tipo; aun así decide en cada build si la complejidad y el presupuesto lo justifican. Fuera de una región que eleves, los únicos tipos que aplica un build `light` son la codificación de cadenas y, en Pro, `comparisonHardening`. `objectConstruction` solo aparece a partir de `7` (`medium`), y los dos tipos Pro necesitan un build [Pro](https://www.afterpack.dev/es/docs/pro).
- **Con `0`, no se aplica nada de esto.** `minify` no ejecuta transformaciones, así que ningún flag de `transforms` tiene efecto.

Para que una transformación sea más probable, sube `complexity` en lugar de cambiar un flag.

## Siguiente

- [Presets](https://www.afterpack.dev/es/docs/presets): los niveles con nombre y el presupuesto de tamaño que establece cada uno.
- [Configuración](https://www.afterpack.dev/es/docs/config): cada clave, incluidos los flags `transforms.<kind>.enabled`.
- [Cómo funciona AfterPack](https://www.afterpack.dev/es/docs/concepts): por qué el conjunto de transformaciones cambia en cada build.
- [Directivas](https://www.afterpack.dev/es/docs/directives): una complejidad distinta para una región (Pro).
