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
- Créez la fonction et choisissez son langage.
- É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.
- Versionnez : chaque save ajoute une version ; les flows déployés épinglent une version exacte, inlinée au deploy.
- 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.


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
temperaturearrive dansinputs.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 danspayload.<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 ounull= port muet). Sans@output, la valeur retournée remplace le payload sur le port 0 ;nulljette 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.

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.



