Skip to content

TypeflowTransformations JSON typées

Un langage de mapping déclaratif pour JSON — chemins validés, types de sortie inférés, et des erreurs de compilation plutôt que des incidents en production.

Typeflow

Essayez — cette page exécute le vrai compilateur ​

Tout ce qui suit est vivant : modifiez le mapping ou l'entrée et regardez la sortie, le type inféré et les diagnostics se mettre à jour à chaque frappe. Pas de serveur — le compilateur et le runtime tournent dans votre navigateur.

Mapping✔Playground ↗
JSON d'entrée
Sortie
{
  "id": 42,
  "fullName": "Ada Lovelace",
  "isAdmin": true,
  "email": "unknown",
  "activeTags": [
    "founder"
  ],
  "results": [
    {
      "value": 16,
      "grade": "A"
    },
    {
      "value": 9,
      "grade": "C"
    },
    {
      "value": 12,
      "grade": "B"
    }
  ]
}
type inféré{ id: number; fullName: string; isAdmin: boolean; email: string; activeTags: string[]; results: { value: number; grade: "A" | "B" | "C" }[]; }

Les coquilles sont des erreurs de compilation, pas des incidents en production ​

Ce mapping contient deux bugs classiques : une propriété mal orthographiée et un accès optionnel non protégé. Dans une fonction ordinaire, ils partiraient en production comme des undefined silencieux — ici ils ne quittent jamais votre éditeur. Corrigez-les en direct : emial → email, et ajoutez ?. + ?? sur la seconde ligne.

Mapping✖ 2Playground ↗
JSON d'entrée
Sortie
// Corrigez les erreurs du mapping pour voir la sortie.
type inféré{ mail: any; phone: string }
  • 7:14errorTF2002Property 'emial' does not exist on type '{ email: string; contact?: { phone: string } }'. Did you mean 'email'?
  • 8:23errorTF2003Object is possibly 'undefined'.
    indice: Use the optional access operator: '?.phone', or provide a default with '??'.

Chaque diagnostic a un code stable, un indice, et une reproduction vivante dans la référence des diagnostics.

Tout le langage est documenté depuis la source ​

Les pages d'opérateurs, la référence des fonctions et celle des diagnostics sont générées depuis les définitions mêmes que le compilateur exécute — signatures, docs et exemples ne peuvent pas dériver de l'implémentation. Le build échoue si un exemple cesse de compiler.

51
fonctions natives
typées, documentées, vivantes
30
opérateurs & constructions
chacun avec un playground
21
diagnostics
documentés avec repros vivantes
0
dépendance du runtime
Node, Bun, navigateurs, CI

Pourquoi pas JSONata, jq, ou une simple fonction ? ​

TypeflowJSONatajqZodFonction TS
Transformation déclarative✅✅✅❌ (validation)❌
Chemins d'entrée validés statiquement✅❌❌n/a✅
Type de sortie inféré✅❌❌⚠️ déclaré✅
Artefact sérialisable / sandboxable✅✅✅❌❌
Déterministe par construction✅⚠️✅n/a❌

Zod est une entrée naturelle de Typeflow, pas un concurrent : Zod répond « est-ce un X ? » ; Typeflow répond « comment X devient-il Y, et cette conversion est-elle sûre ? »

Démarrez en une minute ​

console
$ bun add -d typeflowjs
$ bunx typeflow init                 # génère un mapping d'exemple
$ bunx typeflow check                # diagnostics façon tsc
$ bunx typeflow run user.typeflow --input data.json

Publié sous licence MIT.