Escribe un plugin
Un plugin enseña a Yonto a leer un tipo de sitio o de servidor. Los plugins propios de Yonto para Jellyfin, Plex y Emby están escritos igual que el que vas a escribir tú.
Un plugin es un solo archivo JavaScript. Su manifiesto, que dice quién es y adónde puede acceder, es un comentario al principio de ese archivo. El resto del archivo exporta unas pocas funciones: listar las categorías, listar los títulos de una, describir un título y buscar. Yonto las llama y muestra lo que devuelven.
/* yonto-plugin{ "kind": "content-source", "id": "video-blog", "name": "Video blog", "version": "1.0.0", "contractVersion": 21, "provides": "source-type", "allowedHosts": [], "configSchema": [{ "id": "feedUrl", "label": "Feed URL", "type": "url", "required": true }] }*/export default { async getCategories() { /* … */ }, async getMediaList(categoryId, { page }) { /* … */ }, async getMediaDetail(id) { /* … */ }, async search(query) { /* … */ },};Qué necesitas
Sección titulada «Qué necesitas»- Node.js 20 o posterior y git, para la herramienta de línea de comandos,
yonto-plugin. Revisa, ejecuta y diagnostica un plugin en tu equipo, sin televisión, emulador ni Android SDK. - Un editor de texto.
- Un sitio o servidor que leer, y el derecho a leerlo.
La herramienta está en kangzj/yonto-plugins, en GitHub, junto con el contrato de los plugins y los plugins de Yonto para Jellyfin, Plex, Emby, MacCMS y XPTV, todo con licencia MIT. Instálala desde allí:
git clone https://github.com/kangzj/yonto-plugins.gitcd yonto-pluginsnpm ci --prefix tools/plugin-clinpm install -g ./tools/plugin-cliDespués ejecútala como yonto-plugin <command>.
La mayoría de los comandos reciben el directorio del plugin y usan por defecto el directorio en el que estás.
Los plugins de Yonto de ese repositorio son ejemplos completos, y la mayoría trae grabaciones, así que yonto-plugin doctor plugins/jellyfin --replay ejecuta uno sin servidor.
Empieza un plugin
Sección titulada «Empieza un plugin»yonto-plugin init my-siteEsto crea my-site/ con un plugin que ya pasa lint y doctor, para que veas todo el ciclo antes de cambiar nada.
Elige otro punto de partida con --template y ponle nombre al plugin con --name.
| Plantilla | Qué es |
|---|---|
blank |
La predeterminada. Las cuatro funciones obligatorias respondiendo con un título inventado, sin red. |
video-blog |
El plugin que se construye en el tutorial: el feed RSS de un blog, con un feed grabado que doctor --replay ejecuta sin conexión. |
El id tiene de 2 a 32 letras minúsculas, dígitos y guiones, y init se niega a usar un directorio que ya existe.
Lo primero que debes saber
Sección titulada «Lo primero que debes saber»Un plugin no se ejecuta en Node.js ni en un navegador.
Se ejecuta en QuickJS, un pequeño motor de JavaScript, el mismo que lleva Yonto en una televisión y yonto-plugin en tu equipo.
Por eso un plugin que pasa las pruebas en tu equipo es un plugin que funciona en una televisión.
No existen URL, URLSearchParams, TextDecoder, Buffer, console, setTimeout ni Intl.
Todo lo que sale del plugin pasa por un único global, yonto: yonto.fetch para las peticiones, yonto.log para los registros, yonto.store para una pequeña caché y unos cuantos analizadores.
La referencia de plugins lo enumera todo.
Adónde ir después
Sección titulada «Adónde ir después»- Lleva tu blog de video a la tele crea un plugin completo a partir de un feed RSS, de principio a fin, y es la forma más rápida de ver todas las piezas.
- Referencia de plugins es el manifiesto, los métodos, el global
yonto, los errores y los límites. - Pruebas y depuración trata de
lint,run,doctory las grabaciones. - Publicación y seguridad trata de compartir un plugin, crear un repositorio y lo que se le pregunta a quien instala el tuyo.