# Directivas de ofuscación por región

Comentarios en tu código fuente que cambian la protección de AfterPack para el código que marcan.

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

Una directiva es un comentario que cambia la protección de AfterPack para el código que marca. Todo lo demás en el build conserva la [configuración](https://www.afterpack.dev/es/docs/config) que definiste para el programa completo. Las directivas son una función [Pro](https://www.afterpack.dev/es/docs/pro).

## Cómo escribir una

Una directiva es un comentario de bloque que empieza por `@afterpack`. Si va sola en su línea, se aplica a todo lo que sigue hasta el `/* @afterpack end */` correspondiente. Si va seguida de código en la misma línea, se aplica al resto de esa línea.

```js
/* @afterpack preset=hard */
function checkLicense(token) {
  return verifySignature(token, PUBLIC_KEY);
}
/* @afterpack end */

const apiKey = /* @afterpack preset=extreme */ "YOUR_SECRET";
```

Las claves son los nombres con puntos de la página de [Configuración](https://www.afterpack.dev/es/docs/config), separadas por espacios: `/* @afterpack preset=hard inflation.max=6 */`. Una clave booleana sola equivale a `true`. Las directivas se aplican al código que envuelven y a nada más: ni a las funciones que se llaman desde él ni a los imports.

## Qué puedes configurar

Cualquier opción que se aplique por región. Cada una enlaza a su definición, y la pestaña `directive` de esa página muestra la forma exacta de escribirla.

- [`skip`](https://www.afterpack.dev/docs/config#skip) — directive only
- [`preset`](https://www.afterpack.dev/docs/config#preset)
- [`complexity`](https://www.afterpack.dev/docs/config#complexity)
- [`inflation.max`](https://www.afterpack.dev/docs/config#inflation-max)
- [`strings.encode`](https://www.afterpack.dev/docs/config#strings-encode)

Cualquier otra opción dentro de una directiva se ignora y se notifica con nivel de información. Una clave desconocida o una directiva mal formada es un error.

## Cuándo usar una

- Marca el código que más importa, como las comprobaciones de licencia, la lógica antimanipulación o un secreto incluido en el bundle, con `preset=extreme`. El resto del programa queda más ligero y más pequeño.
- Marca el código que debe seguir siendo legible o rápido, como un bucle crítico para el rendimiento o un fragmento de terceros, con `skip` o un `preset` más bajo.

## Qué marcar

| Activo | Directiva | Por qué |
| --- | --- | --- |
| Comprobaciones de licencia / derechos de uso | [`preset=hard`](https://www.afterpack.dev/es/docs/config#preset) | Un solo bit parcheado regala tu software. Combínalo con [`transforms.comparisonHardening.enabled`](https://www.afterpack.dev/es/docs/best-practices#the-two-anti-tamper-transforms). |
| Validadores de pago | `preset=hard` | La amenaza es la manipulación, no solo la lectura. |
| Lógica antitrampas / antibots | `preset=hard` o `preset=extreme` | Eleva el coste y la cadencia del desarrollo de trampas. Los adversarios tienen tiempo y motivación, así que combínalo con una validación autoritativa en el servidor. |
| Secretos incrustados en el código que no puedes mover al servidor | [`/* @afterpack preset=extreme */`](https://www.afterpack.dev/es/docs/config#preset) en línea, antes del literal | Lo ideal es eliminarlos por completo, pero alguno siempre se cuela. `preset=extreme` hace que recuperarlo sea caro, y el literal sigue existiendo en la salida. Para dejar fuera de la salida por completo un literal con el que tu código compara, usa [`transforms.comparisonHardening.enabled`](https://www.afterpack.dev/es/docs/config#transforms-kind-enabled). Para uno que ya se publicó, consulta [Si publicaste un secreto por accidente](https://www.afterpack.dev/es/docs/best-practices#if-you-shipped-a-secret-by-accident). |
| Algoritmos propietarios (precios, enrutamiento, integración de ML) | `/* @afterpack preset=extreme */ … /* @afterpack end */` alrededor de la función central | Es tu código más valioso. Objetivo de complejidad al máximo y suelo de constantes activado. |

Aplica la directiva en el ámbito más pequeño que cubra el activo. Marcar un archivo de 500 líneas con `preset=extreme` infla todo el bundle a cambio de muy poco.

## Comprobar qué se aplicó

El [Protection Map](https://www.afterpack.dev/es/docs/protection-map) muestra cada región que produjo una directiva y qué se aplicó dentro de ella. Una directiva que se leyó pero no tuvo efecto aparece en los [diagnósticos](https://www.afterpack.dev/es/docs/diagnostics) del build.

## Builds Free

Un build local aplica una única configuración a todo el programa. Una directiva que aumenta la protección detiene el build con un error que pide una clave Pro ([`DIAG_PRO_DIRECTIVE_REQUIRES_KEY`](https://www.afterpack.dev/es/docs/diagnostics#complete-reference)): un `preset` superior al del programa, un `complexity` distinto de cero por encima del objetivo del programa o en un programa `light`, un `inflation.max` superior al presupuesto del programa, o `strings.encode=on` cuando el floor de cadenas del programa está desactivado. Cualquier otra directiva se ignora, y su región recibe la configuración del programa, incluidos `skip`, un `preset` o `complexity` inferior, un `inflation.max` inferior y las máscaras de transformaciones (`transforms.only`, `transforms.deny`, `controlFlow.enabled=off`). La [CLI](https://www.afterpack.dev/es/docs/cli) no lee ninguna directiva, en ninguno de los dos niveles.
