Escribir directivas en TypeScript/JavaScript

El soporte de TypeScript/JavaScript para WebAssembly está evolucionando rápidamente. Esta página fue revisada por última vez en noviembre de 2025.

Como se indica en el sitio web oficial:

TypeScript extiende JavaScript añadiendo tipos.

Al entender JavaScript, TypeScript te ahorra tiempo al detectar errores y proporcionar soluciones antes de ejecutar el código.

SUSE Security Admission Controller utiliza Javy (un proyecto de Bytecode Alliance) para construir binarios de WebAssembly a partir de JavaScript y TypeScript.

Javy toma tu código JavaScript y lo ejecuta en un contexto de WebAssembly.

Cuenta con un motor QuickJS embebido compilado a WebAssembly que puede ejecutar JavaScript.

El proyecto proporciona tanto una CLI como un conjunto de APIs para incrustar y personalizar el comportamiento al ejecutar JavaScript en WebAssembly.

El proyecto Admission Controller actualmente utiliza Javy por estas razones:

  • Motor de JavaScript maduro (QuickJS) compilado a WebAssembly.

  • Soporte para interfaz WASI a través de funciones de host personalizadas.

  • Tamaños de binarios más pequeños en comparación con otras soluciones de JavaScript a WebAssembly.

  • Desarrollo activo y mantenimiento por parte de la Bytecode Alliance.

Limitaciones de Javy

Javy ejecuta JavaScript en un entorno de WebAssembly aislado con ciertas restricciones:

  • Solo entorno WASI: Acceso limitado a stdin/stdout/stderr y capacidades de host proporcionadas explícitamente.

  • No hay APIs de Node.js: Módulos estándar de Node.js como fs, http o crypto no están disponibles.

  • Biblioteca estándar limitada: Solo se accede a las características básicas de JavaScript y a las APIs habilitadas explícitamente.

  • Ejecución de un solo hilo: No hay soporte para Web Workers ni para multi-hilo.

A pesar de estas limitaciones, Javy proporciona capacidades suficientes para escribir Admission Controller directivas de validación efectivas a través del sistema de capacidades del host.

Escribir en STDOUT rompe las directivas; utiliza STDERR para el registro en su lugar.

Herramientas

Escribir Admission Controller políticas de requiere:

  • Node.js: Entorno de ejecución de JavaScript.

  • npm: Para la gestión de dependencias.

  • TypeScript: Recomendado para la seguridad de tipos (opcional).

Asegúrate de estar utilizando Node.js 18 o superior. Las versiones anteriores pueden no ser compatibles con la cadena de herramientas de compilación.

Estas bibliotecas de TypeScript/JavaScript son útiles al escribir una Admission Controller directiva:

  • Admission Controller JavaScript SDK: Proporciona estructuras y funciones que reducen la cantidad de código necesario. También proporciona ayudantes de prueba y acceso a todas las capacidades del host.

  • tipos de TypeScript de Kubernetes: Proporciona definiciones de TypeScript para todos los recursos de Kubernetes, permitiendo el desarrollo de directivas seguras en cuanto a tipos.

El proyecto Admission Controller proporciona un proyecto de directiva en JavaScript/TypeScript que puedes usar para crear directivas Admission Controller.

Obteniendo la cadena de herramientas

La forma más fácil de obtener la cadena de herramientas es utilizando el Admission Controller SDK de JavaScript, que incluye el complemento de compilación Javy:

npm install kubewarden-policy-sdk

El binario del complemento Javy se incluye automáticamente y puedes encontrarlo en:

node_modules/kubewarden-policy-sdk/plugin/javy-plugin-kubewarden.wasm

Requisitos previos del tutorial

Durante este tutorial necesitas estas herramientas en tu máquina de desarrollo:

  • Node.js: Versión 18 o superior con npm para la gestión de dependencias.

  • bats: Utilizado para escribir las pruebas y automatizar su ejecución.

  • kwctl ≥ v1.30: Herramienta CLI proporcionada por Admission Controller para ejecutar sus directivas fuera de Kubernetes, entre otras acciones. Está cubierto en la sección de pruebas de directivas de la documentación.

  • javy ≥ 6.0.0: Herramienta CLI para compilar código JavaScript en módulos WebAssembly.