Bêta 0.2.0-beta.2, pas encore pour un process critique. Voir la roadmap
PNeX logo
Documentation de la version en développement, pas encore publiée. Voir la version stable (0.1.0)

Fonctions

Fonctions JavaScript et Starlark versionnées avec validation live

Quand un nœud de flow ne suffit pas, PNeX expose un registre de fonctions : des fonctions utilisateur par organisation en JavaScript (sandbox QuickJS) ou Starlark, avec versionnage append-only et validation live. Il se trouve sous Automatisation › Fonctions.

Cycle de vie

  1. Créez la fonction et choisissez son langage.
  2. Éditez avec validation live — la plateforme spawn le vrai binaire runtime pour vérifier la syntaxe et exécuter un payload de test avant le save.
  3. Versionnez : chaque save ajoute une version ; les flows déployés épinglent une version exacte, inlinée au deploy.
  4. Tester lance le code de l’éditeur (sans enregistrer) avec des valeurs d’entrée ou un message entrant, et affiche la console, la durée et la sortie de chaque port.

Une fonction utilisée par un flow déployé ne peut pas être supprimée.

Dialogue de nouvelle fonction : Starlark/JavaScript et templates

Éditeur Starlark avec le panneau de ports @input/@output

Entrées et sorties : directives @input / @output

La signature d’une fonction vit dans son code, sous forme de commentaires versionnés avec lui (préfixe // ou # dans les deux langages) :

// @input temperature number "Température mesurée"
// @input mode string="auto"
// @output heating number
function handle(inputs, msg) {
  return { heating: inputs.temperature < 19 ? 1 : 0 };
}

Le panneau Entrées / Sorties de l’éditeur lit et réécrit ces directives (Ajouter une entrée, Ajouter une sortie, nom, type, défaut). Le code définit handle(inputs, msg) (def handle(inputs, msg): en Starlark).

Dans un flow, le nœud Fonction affiche une ancre d’entrée par @input (un fil par entrée) et un port de sortie par @output :

  • Routage par fil : un payload nu câblé sur l’ancre temperature arrive dans inputs.temperature — le déploiement étiquette chaque fil avec le nom de l’entrée (msg.topic). Un JSON Split peut donc alimenter directement les ancres (topic = clé). Sans fil dédié, l’entrée est lue dans payload.<nom>, puis prend sa valeur par défaut.
  • Retour : un objet dont les clés sont les noms des @output émet chaque clé sur son port (clé absente ou null = port muet). Sans @output, la valeur retournée remplace le payload sur le port 0 ; null jette le message.

Sandboxing

Le JavaScript tourne dans une sandbox QuickJS dont l’interrupt handler est la seule limite fiable contre le code incontrôlé. Starlark offre une alternative déterministe à saveur Python. Les fonctions n’ont pas accès aux secrets de l’organisation. La fonction remplace le payload du message entrant — elle ne merge pas dedans. Une nouvelle version ne change pas les flows déployés : sélectionnez-la dans le nœud, puis redéployez.

Test live avec les sorties par port

Auteur avec l’IA

L’assistant IA intégré peut rédiger, valider, tester et corriger des fonctions (voir Assistant IA) — et l’éditeur propose des quick-fixes pour les erreurs de validation courantes.

On this page