Construyendo el Conformance Test Suite de Node-API

This ad is not shown to multipass and full ticket holders
JS Nation
JSNation 2026
June 11 - 15, 2026
Amsterdam & Online
The main JavaScript conference of the year
Upcoming event
JSNation 2026
JSNation 2026
June 11 - 15, 2026. Amsterdam & Online
Learn more
Bookmark
Rate this content
Sentry
Promoted
Code breaks, fix it faster

Crashes, slowdowns, regressions in prod. Seer by Sentry unifies traces, replays, errors, profiles to find root causes fast.

He estado contribuyendo a un Conformance Test Suite para el proyecto Node.js: Para que los implementadores de Node-API lo ejecuten en diferentes motores de JavaScript y entornos de ejecución, como Bun, Deno y React Native.
Quiero compartir la motivación del proyecto, las decisiones arquitectónicas, el progreso que hemos logrado hasta ahora y las técnicas clave utilizadas para garantizar que la implementación se mantenga independiente del entorno de ejecución.

This talk has been presented at Node Congress 2026, check out the latest edition of this JavaScript Conference.

Kræn Hansen
Kræn Hansen
18 min
26 Mar, 2026

Comments

Sign in or register to post your comment.
Video Summary and Transcription
Kane presenta un proyecto de Node.js para un conformance test suite que tiene como objetivo abordar problemas de compatibilidad entre diferentes entornos de ejecución como Deno y React Native. El suite asegura pruebas estandarizadas para Node API, abstrayendo V8 para los internos de Node.js. Se enfoca en la estandarización entre entornos de ejecución, el progreso en la portabilidad de pruebas y hace un llamado a los contribuyentes para abordar los desafíos en las pruebas de Node API.

1. Introduction to Node API Conformance Test Suite

Short description:

Kane presenta un proyecto de Node.js para un conjunto de pruebas de conformidad para Node API. El proyecto tiene como objetivo abordar problemas de compatibilidad entre diferentes entornos de ejecución como Deno y React Native a través de Hermes. Node API proporciona una API C estable para acceder a JavaScript, permitiendo la compatibilidad entre varias versiones de Node.js y entornos de ejecución. Abstrae V8 para los internos de Node.js, convirtiéndose en un estándar de facto en la industria.

Hola, mi nombre es Kane, y hoy quiero compartir un proyecto que he estado construyendo en la organización de Node.js, un conjunto de pruebas de conformidad para Node API. Pero primero, unas palabras sobre mí. Mi nombre es Kane, como dije, y soy ingeniero de experiencia de desarrollador en 11labs. Construí experiencias de desarrollador para personas que construyen sobre los agentes de voz y los otros servicios que tenemos. Y antes de eso, mantuve el SDK de Atlas Devices, anteriormente conocido como Realm.js en MongoDB. Soy un orgulloso padre de tres, con sede en Roskill, justo al oeste de Copenhague. También me gusta construir en público, y hago mucho código abierto. Callstack me patrocina para esto en particular, y tengo patrocinios de GitHub abiertos si quieres unirte a ellos. También puedes encontrarme en BlueSky.

Y comencemos con algo con lo que podrías estar familiarizado. Has escrito un complemento nativo de Node.js, quizás. Funciona perfectamente bien en Node.js, y tu CI está en verde, y lo envías. Pero, ¿funciona en Bunn, en Deno? ¿Funciona en React Native, que recientemente también soportó o agregó soporte para Node API a través de Hermes? La respuesta honesta es que probablemente no lo sepas, y ese es el problema que me propuse solucionar.

Permíteme retroceder y explicar cómo llegamos aquí. Permíteme comenzar poniéndonos en la misma página de Node, qué es Node API, y comenzando con lo que no es, porque a menudo se confunde. No son las APIs de tiempo de ejecución de Node.js, cosas como File System, Path, Process. Aunque algunas de estas están potencialmente construidas sobre Node API, ¿qué es entonces? Es una API C para acceder a JavaScript. Es estable en API. Eso significa que puedes compilarlo una vez, y tu complemento una vez, y luego puedes reutilizarlo en nuevas versiones de Node.js. Los encabezados para la API C, se envían en npm. Así que, un paquete, eso es todo lo que necesitas. Y contiene estos archivos de biblioteca en dos capas. Una es la parte específica del motor, y este es el js-native-api.h, creando valores, llamando funciones, gestionando memoria, por ejemplo, y luego la parte específica del tiempo de ejecución, que es más específica de Node.js. APIs de tiempo de ejecución, como buffers, trabajo asíncrono, eventos de ciclo de vida. Originalmente, Node API fue diseñado para abstraer V8 para los internos de Node.js, y básicamente, podrías escribir tu implementación una vez, y luego no tendrías que vincular directamente contra la versión específica de V8. Para otros entornos de ejecución ahora, comenzaron a adoptar esto. BAN y DINO, no necesariamente en ese orden. Y luego más tarde, React Native por Hermes, y estos otros implementadores también. Esto es lo notable.

2. Challenges in Node API Conformance Testing

Short description:

El conjunto de pruebas de conformidad de Node API aborda la necesidad de pruebas estandarizadas en diferentes entornos de ejecución. Las pruebas existentes de Node.js están vinculadas a las especificidades del tiempo de ejecución de Node.js, lo que dificulta la compatibilidad con otros entornos. El conjunto de pruebas de conformidad asegura que las pruebas se ejecuten en varios entornos, proporcionando una base común para el soporte de Node API.

Y como dije, está dividido en estas dos categorías de APIs. Ya mencioné esto. Y quiero decir, el lado izquierdo, estas son las APIs independientes del motor. Se supone que funcionan en todos los motores JS. Y luego las otras, más específicas del tiempo de ejecución, específicas de Node.js, pueden o no tener soporte dentro de los otros implementadores. Esto también resulta ser un concepto para el conjunto de pruebas de conformidad. Y ahora que sabemos qué es Node API y quién lo está implementando, quiero decirte qué falta.

Así que el repositorio de Node.js ya tiene pruebas para esto. Tienen como 58 carpetas de pruebas probando cada una de las diferentes áreas de características. Pero cuando abres estas pruebas, ves cosas como una llamada require, que es específica de Node.js, el patrón común JS, para la importación de módulos. Y también ves cosas como cargar el complemento usando una llamada require, que no es parte de la especificación oficial, se podría decir, de Node API. Y estas pruebas están completamente vinculadas al tiempo de ejecución de Node.js. La utilidad, el archivo de comentarios que ves aquí, tiene una implementación interna que usa FS y las rutas y cosas así. Así que queremos asegurarnos de ejecutarlas en otros entornos de ejecución.

Puedes ver algunos de los trabajos previos existentes aquí. Puedes ver algunos de los proyectos básicamente copiaron las pruebas de Node.js. Y las consecuencias aquí son que cuando se corrige un error en el repositorio de Node.js, no se propaga automáticamente o si se agrega una nueva prueba, por ejemplo, no se propaga automáticamente y ejercita la implementación de Bonandino. Y esto es un problema porque la aclaración de la especificación, puedes ver que las pruebas están implementando, permanecen aisladas. Y cuando un entorno de ejecución afirma que soporta Node API, no hay una garantía compartida como algo que puedas usar para validar esa afirmación. Y esto es una brecha. Y eso es lo que llena el conjunto de pruebas de conformidad de Node API.

Check out more articles and videos

We constantly think of articles and videos that might spark Git people interest / skill us up or help building a stellar career

Cómo Bun Hace que Construir Aplicaciones React Sea Más Simple y Rápido
React Day Berlin 2022React Day Berlin 2022
9 min
Cómo Bun Hace que Construir Aplicaciones React Sea Más Simple y Rápido
Top Content
BUN is a modern all-in-one JavaScript runtime environment that achieves new levels of performance. It includes BUN dev, a fast front-end dev server, BUN install, a speedy package manager, and BUN run, a fast package runner. BUN supports JSX, has optimized React server-side rendering, and offers hot module reloading on the server. The priorities for BUN include stability, node compatibility, documentation improvement, missing features in BUN install, AST plugin API, native Windows support, Bundler and Minifier optimization, and easier deployment to production. BUN's AST plugin API allows for bundle-time JavaScript execution and embedding code, potentially inspiring new frameworks.
Nunca te preocupes por CORS nuevamente
JSNation US 2025JSNation US 2025
28 min
Nunca te preocupes por CORS nuevamente
Talk on Bund: Overview of Bund, its speed optimization, components like runtime, package manager, test runner, and bundler. Efficient features include fast npm manager, pnpm lockfile support, Jest-compatible test runner, and optimized runtime components. Built-in features like modern password hashing, WebSocket server, file glob API, and database clients. API design focuses on common use cases and optimization. Enhanced JavaScript functionality with SIMD, native code, and performance improvements. Challenges in JavaScript productivity, BUN adoption, deployment, and support. React support, community involvement, security, Next.js compatibility, and transition.
Compatibilidad con Node.js en Deno
Node Congress 2022Node Congress 2022
34 min
Compatibilidad con Node.js en Deno
Deno aims to provide Node.js compatibility to make migration smoother and easier. While Deno can run apps and libraries offered for Node.js, not all are supported yet. There are trade-offs to consider, such as incompatible APIs and a less ideal developer experience. Deno is working on improving compatibility and the transition process. Efforts include porting Node.js modules, exploring a superset approach, and transparent package installation from npm.
Bun, Deno, Node.js? Recreando un runtime de JavaScript desde cero - Entender la magia detrás de Node.js
Node Congress 2023Node Congress 2023
29 min
Bun, Deno, Node.js? Recreando un runtime de JavaScript desde cero - Entender la magia detrás de Node.js
Top Content
The Talk explores the magic behind Node.js and delves into its components, including V8, libuv, and the C++ bridge. It discusses the workflow and execution process, the use of NodeMod, and the understanding of console functions. The Talk also covers Node.js functions and scheduling, the introduction of runtimes, and the collaboration between JavaScript runtimes. It concludes with insights on content production, the choice of Node.js, and the inspiration behind it.
Evaluar todas las cadenas! - JavaScript endurecido
Node Congress 2023Node Congress 2023
8 min
Evaluar todas las cadenas! - JavaScript endurecido
NPM packages can be potentially dangerous, so it's important to be proactive in managing them. Lava Mode allows you to detect and investigate suspicious packages before deploying your app. Lavamote prevents unauthorized access to sensitive resources by isolating dependencies and using hardened JavaScript. Lava Mode makes it easier to analyze obfuscated files and understand their actions.
Crea tu propio tiempo de ejecución de JavaScript
Node Congress 2023Node Congress 2023
21 min
Crea tu propio tiempo de ejecución de JavaScript
This Talk introduces Deno, a custom JavaScript runtime similar to Node.js, and discusses the benefits of using a custom runtime. It explores the process of building a custom runtime with Deno in Rust, including the integration with Cargo and the ability to mix and match crates and APIs. The Talk also covers the implementation of the setTimeout function in both Run.js and Runtime.js, and provides examples of how to fix errors and implement additional functions. Overall, the Talk highlights the flexibility and possibilities of creating custom runtimes with Deno.

Workshops on related topic

Build Peer-to-Peer Applications with Pear Runtime
JSNation 2024JSNation 2024
152 min
Build Peer-to-Peer Applications with Pear Runtime
Top Content
WorkshopFree
David Mark Clements
David Mark Clements
Aprende a construir rápidamente aplicaciones peer-to-peer con Pear Runtime. No se requieren servidores. Comprende los paradigmas peer-to-peer y construye aplicaciones a partir de bloques de construcción bien definidos. Esta masterclass cubrirá cómo crear aplicaciones tanto para Desktop como para Terminal (con discusión para Mobile) que funcionen completamente peer-to-peer desde cualquier lugar del mundo. Al final de esta masterclass deberías saber cómo construir un nuevo tipo de aplicación altamente escalable con costos de infraestructura completamente reducidos (~0) junto con arquitecturas adecuadas y mejores prácticas para aplicaciones peer-to-peer. Del creador de Pear Runtime y la empresa que nos trae keet.io. Tabla de contenido:- Introducción a Pear- Preguntas y Respuestas Iniciales- Configuración Inicial- Creación de una Aplicación Pear para Desktop- Compartiendo una Aplicación Pear- Ejecutando una Aplicación Pear- Creación de una Aplicación Pear para Terminal- Lanzamiento de una Aplicación Pear- Discusiones Arquitectónicas- Preguntas y Respuestas de Cierre