Skip to content
vendure logo

Vendure E-Commerce Framework Skill

vendure

Assiste au développement avec le framework e-commerce Vendure pour Node.js. Gère le commerce headless, les APIs GraphQL, la gestion des commandes, les catalogues produits, l'intégration des paiements et le développement TypeScript e-commerce. Utiliser lors du travail sur des projets Vendure, la c...

SKILL.md

Full skill instructions

Vendure E-Commerce Framework Skill

Assistance complète pour le développement Vendure, générée à partir de la documentation officielle (docs.vendure.io).

Quand utiliser ce Skill

Déclencher ce skill pour :

  • Construction d'applications e-commerce headless avec Node.js/​TypeScript
  • Travail avec les APIs GraphQL pour produits, commandes ou gestion clients
  • Implémentation d'intégrations de paiement (Stripe, handlers personnalisés)
  • Création de plugins personnalisés ou extension des fonctionnalités Vendure
  • Configuration de workflows de commande et machines à états
  • Développement d'extensions Dashboard avec React
  • Configuration de boutiques multi-devises ou multi-canaux
  • Débogage de code Vendure ou résolution de problèmes e-commerce
  • Apprentissage des bonnes pratiques Vendure pour le développement TypeScript

Concepts Clés

Concepts fondamentaux de l'architecture Vendure :

  • Order State Machine - Workflow personnalisable (AddingItems → Delivered) via OrderProcess avec interceptors
  • Custom Fields - Ajouter des propriétés aux entités via VendureConfig, extension automatique du schema GraphQL, support des relations et 10+ types de champs
  • Plugins - Extensibilité via décorateur @VendurePlugin, hooks de cycle de vie, pattern InjectableStrategy pour comportement pluggable

Guide de Navigation

Ce skill est organisé en 3 sections principales pour une navigation optimale :

📚 references/​Guides/ - Guides Pratiques (~16,000 lignes)

FichierLignesContenuQuand consulter
getting-started.md619Installation, création projet, premiers pasDémarrer un projet
developer-guide.md5,247Architecture, API Layer, Middleware, NestJSComprendre l'architecture
core-concepts.md1,502Collections, Money, Assets, Taxes, PaymentConcepts fondamentaux
extending-the-dashboard.md2,362Extensions React, routes, pages personnaliséesPersonnaliser l'admin
how-to.md2,880Custom fields, paiements, shipping calculatorsTutoriels spécifiques
storefront.md1,618Next.js, Remix, connexion API, startersCréer un storefront
deployment.md1,145Docker, production, sécurité, HardenPluginDéployer en production
user-guide.md473Utilisation Dashboard pour administrateursFormer les utilisateurs
migrating-from-v1.md302Breaking changes, guide de migration v1→v2Migration de version

Commandes grep utiles :

grep -n "OrderProcess" references/​Guides/​developer-guide.md
grep -n "Custom Fields" references/​Guides/​how-to.md
grep -n "Collections" references/​Guides/​core-concepts.md

📖 references/​reference/ - Documentation API (~39,000 lignes)

FichierLignesContenuQuand consulter
typescript-api.md21,561TOUT : Classes, interfaces, strategies, servicesRecherche API TypeScript
admin-ui-api.md5,712API Angular (deprecated), composants legacyMaintenir code Angular
core-plugins.md4,527EmailPlugin, AssetServerPlugin, HardenPlugin, etc.Configurer plugins officiels
dashboard.md3,585React hooks, composants Dashboard, extensionsDévelopper extensions React
graphql-api.md4,078Shop API, Admin API, queries, mutationsRequêtes GraphQL
reference.md35Index/​overview de la sectionVue d'ensemble

Fichier clé : typescript-api.md - Contient TOUTES les interfaces et classes Vendure.

Commandes grep utiles :

grep -n "^# " references/​reference/​typescript-api.md | head -50  # Liste des sections
grep -n "PaymentMethodHandler" references/​reference/​typescript-api.md
grep -n "OrderService" references/​reference/​typescript-api.md
grep -n "useDetailPage" references/​reference/​dashboard.md

🎨 references/​UI/ - Composants Dashboard React (~4,500 lignes)

NOUVELLE SECTION - Composants UI pour extensions Dashboard

FichierLignesComposantsQuand consulter
ui.md1,31542 composants : Button, Dialog, Card, Badge, Popover, Tabs...Éléments UI de base
form-inputs.md1,08211 composants : TextInput, SelectInput, CheckboxInput, DatePicker...Formulaires
layout.md862DetailPage, ListPage, PageLayout, TabsLayoutStructure de pages
framework.md516DataTable, AssetGallery, PaginationControlsAffichage de données
VENDURE_UI_COMPONENTS_BASE.md724Documentation de base des composantsRéférence rapide

Import standard :

import { Button, Card, Dialog, Badge } from "@vendure/​dashboard";
import { TextInput, SelectInput } from "@vendure/​dashboard";
import { DetailPage, ListPage } from "@vendure/​dashboard";

Commandes grep utiles :

grep -A 20 "^## Button" references/​UI/​ui.md
grep -A 30 "TextInput" references/​UI/​form-inputs.md
grep -n "DetailPage" references/​UI/​layout.md

Workflows par Niveau

🟢 Débutant - Premier projet

  1. Démarrer → references/​Guides/​getting-started.md
  2. Comprendre → references/​Guides/​core-concepts.md (Money, Collections)
  3. Construire → references/​Guides/​how-to.md
  4. Explorer → GraphQL Playground à /​shop-api

🟡 Intermédiaire - Fonctionnalités personnalisées

  1. Rechercher API → references/​reference/​typescript-api.md
  2. Créer plugins → references/​Guides/​developer-guide.md
  3. Paiements → references/​reference/​core-plugins.md (StripePlugin)
  4. Emails → references/​reference/​core-plugins.md (EmailPlugin)

🔴 Avancé - Architecture & Production

  1. Architecture → references/​Guides/​developer-guide.md (API Layer, Middleware)
  2. Dashboard custom → references/​UI/ + references/​Guides/​extending-the-dashboard.md
  3. Sécurité → references/​Guides/​deployment.md (HardenPlugin, OWASP)
  4. Performance → State machines, caching, optimisations

Liens Rapides par Tâche

TâcheFichier de référence
Démarrer un projetGuides/​getting-started.md
Afficher des prixGuides/​core-concepts.md
Accepter des paiementsreference/​core-plugins.md
Envoyer des emailsreference/​core-plugins.md
Créer un pluginGuides/​developer-guide.md
Upload de fichiersGuides/​developer-guide.md
Valider commandesreference/​typescript-api.md
Requêtes GraphQLreference/​graphql-api.md
Stocker des prixGuides/​core-concepts.md
Installer DashboardGuides/​getting-started.md
Créer page DashboardUI/​layout.md + Guides/​extending-the-dashboard.md
Composants formulaireUI/​form-inputs.md
DataTableUI/​framework.md

Conseils de Navigation

Rechercher dans les fichiers

# Trouver une classe/​interface
grep -rn "PaymentMethodHandler" references/

# Trouver un hook React
grep -rn "useDetailPage" references/​reference/

# Trouver un composant UI
grep -n "Button" references/​UI/​ui.md

# Lister les sections d'un fichier
grep -n "^## " references/​reference/​typescript-api.md | head -30

Structure des chemins

references/
├── Guides/              # Tutoriels et guides pratiques
│   ├── getting-started.md
│   ├── developer-guide.md
│   ├── core-concepts.md
│   ├── extending-the-dashboard.md
│   ├── how-to.md
│   ├── storefront.md
│   ├── deployment.md
│   ├── user-guide.md
│   └── migrating-from-v1.md
├── reference/           # Documentation API technique
│   ├── typescript-api.md    # ⭐ Le plus important (21k lignes)
│   ├── core-plugins.md
│   ├── dashboard.md
│   ├── graphql-api.md
│   ├── admin-ui-api.md
│   └── reference.md
└── UI/                  # Composants Dashboard React
    ├── ui.md               # 42 composants UI
    ├── form-inputs.md      # 11 composants formulaire
    ├── layout.md           # Pages et layouts
    ├── framework.md        # DataTable, etc.
    └── VENDURE_UI_COMPONENTS_BASE.md

Ressources Additionnelles

scripts/

Scripts utilitaires pour interagir avec les APIs GraphQL de Vendure.

Prérequis
  • curl - Requêtes HTTP
  • jq - Manipulation JSON
  • bash 5+ - Requis pour tableaux associatifs (macOS: brew install bash)
Scripts disponibles
ScriptDescription
login.shAuthentification et aide aux requêtes curl
query.shExécution simplifiée de requêtes GraphQL
login.sh - Authentification et aide curl

Script d'authentification pour obtenir un token JWT et faciliter les requêtes curl.

OptionAliasDescription
--from-last-lUtilise last-account.json
--superadmin-sMode superadmin
--email-eEmail de connexion
--password-pMot de passe
--env-EChemin .env
--export-xAffiche exports shell
--curl-example-cExemple curl complet
--quiet-qMode silencieux
--verbose-vMode verbeux
./​login.sh -l                 # Login avec last-account.json
./​login.sh -l -c              # Affiche exemple curl complet
./​login.sh -l -x              # Affiche exports shell
./​login.sh -s -E /​path/​.env   # Login superadmin
./​login.sh -e [email protected] -p z    # Login manuel
./​login.sh -l -q              # Mode silencieux (scripts)

query.sh - Requêtes GraphQL simplifiées

OptionAliasDescription
--vars-VVariables GraphQL JSON (remplace tout)
--set-Modifier une variable (merge jq)
--file-fFichier .graphql
--superadmin-sMode superadmin
--env-eChemin .env
--raw-rSortie JSON brute
--data-dAffiche seulement .data
--clear-cache-cForce reconnexion
--timeout-tTimeout en secondes
--history-HAffiche les 10 dernières requêtes
--last-LRé-exécute la dernière requête
--replay N-RRé-exécute la requête #N de l'historique
--inspect N-IAffiche query #N + variables (sans exécuter)
--save NAME-SSauvegarde dans queries/​NAME.graphql
--shop-pUtilise /​shop-api au lieu de /​admin-api
--time-TAffiche le temps d'exécution
--diff "OPTS"-Compare 2 exécutions (avant/​après OPTS)
--diff-only-Avec --diff: affiche uniquement les valeurs changées
--no-fail-Ne pas exit 1 sur erreur GraphQL (continuer malgré les erreurs)
--dry-run-Affiche la requête sans l'exécuter (pas d'auth)
--curl-Génère la commande curl équivalente (copier-coller)
--jq FILTER-jAppliquer un filtre jq sur le résultat
--assert EXPR-aValider une condition jq (exit 1 si fausse)
--quiet-qMode silencieux (supprime tous les logs stderr)
--output FILE-oÉcrire le résultat dans un fichier
--verbose-vMode verbeux
./​query.sh '{ me { id } }'            # Requête simple
./​query.sh -d '{ me { id } }'         # Affiche seulement .data
./​query.sh -s -e /​path/​.env '{ administrators { totalItems } }'
./​query.sh -c '{ me { id } }'         # Force reconnexion
./​query.sh -t 60 '{ me { id } }'      # Timeout 60s (défaut: 30s)
./​query.sh -s -c -d '{ me { id } }'   # Combinaison d'alias

# Historique et Replay (50 requêtes max, style Burp Repeater)
./​query.sh -H                         # Affiche les 10 dernières
./​query.sh -I 3                       # Inspecte query #3 + variables (sans exécuter)
./​query.sh -L                         # Ré-exécute la dernière
./​query.sh -L -s                      # Dernière requête en superadmin
./​query.sh -R 3                       # Ré-exécute la requête #3
./​query.sh -R 3 -s                    # Requête #3 en superadmin
./​query.sh -R 3 --vars '{"take": 5}'  # Requête #3 avec variables remplacées
./​query.sh -R 3 --shop                # Requête #3 sur shop-api
./​query.sh -R 3 -T                    # Requête #3 avec timing

# Modifier des variables avec --set (merge intelligent)
./​query.sh -R 3 --set '.take=10'                    # Modifier une variable
./​query.sh -R 3 --set '.take=10 | .skip=20'         # Modifier plusieurs (pipe jq)
./​query.sh -R 3 --set '.filter.status="active"'     # Objet imbriqué
./​query.sh -R 3 --set '.take=10' --set '.id="99"'   # Multiples --set

# Comparer deux exécutions avec --diff
./​query.sh '{ me { id } }' --diff "--superadmin"    # vendor vs superadmin
./​query.sh -R 3 --diff "--set '.take=20'"           # take=10 vs take=20
./​query.sh '{ products { totalItems } }' --diff "--shop"  # admin vs shop

# Mode compact avec --diff-only (affiche uniquement les chemins JSON modifiés)
./​query.sh -R 3 --diff "--set '.take=1'" --diff-only
# Affiche: A .data.products.items[1].name = "Courgette"
#          B .data.products.items[1].name = (absent)

# Prévisualiser sans exécuter avec --dry-run (pas d'authentification)
./​query.sh '{ products { items { id } } }' --dry-run
./​query.sh -R 3 --set '.take=10' --superadmin --dry-run
./​query.sh --file queries/​get-product.graphql --vars '{"id":"42"}' --shop --dry-run
# Affiche: 📝 Query, 📦 Variables, 🔑 Auth, 🌐 Endpoint + "(non exécuté)"

# Générer une commande curl équivalente (copier-coller)
./​query.sh '{ me { id } }' --curl
./​query.sh '{ products { items { id } } }' --superadmin --curl
./​query.sh -R 3 --vars '{"take": 5}' --shop --curl
# Affiche:
# curl -X POST 'http://localhost:3000/​admin-api' \
#   -H 'Content-Type: application/​json' \
#   -H 'Authorization: Bearer eyJ...' \
#   -d '{"query":"{ me { id } }","variables":{}}'

# Filtrer les résultats avec --jq
./​query.sh '{ products { totalItems } }' --jq '.data.products.totalItems'
# → 42
./​query.sh '{ products { items { name } } }' --jq '.data.products.items[].name'
# → Orange Sanguine
# → Courgette Longue verte
./​query.sh '{ products { items { id name enabled } } }' \
  --jq '.data.products.items[] | select(.enabled == true) | .name'
./​query.sh '{ products { items { id } } }' -j '.data.products.items | length'
# → 5

# Valider avec --assert (exit 1 si condition fausse)
./​query.sh '{ products { totalItems } }' --assert '.data.products.totalItems > 0'
./​query.sh '{ product(id: "1") { id } }' -a '.data.product | type == "object"'

# Workflows conditionnels avec && / ||
./​query.sh '{ products { totalItems } }' --assert '.data.products.totalItems > 0' \
  && echo "Catalogue OK" || echo "Catalogue vide!"

# Combiner --assert et --jq (valider puis extraire)
./​query.sh '{ products { totalItems } }' \
  --assert '.data.products.totalItems > 0' \
  --jq '.data.products.totalItems'

# Mode silencieux avec --quiet (capture propre)
TOTAL=$(./​query.sh -q '{ products { totalItems } }' -j '.data.products.totalItems')
echo "Total: $TOTAL"

# Écrire dans un fichier avec --output
./​query.sh '{ products { items { id name } } }' --output /​tmp/​products.json
./​query.sh '{ orders { items { id } } }' -o /​tmp/​orders.json

# Automatisation totale : --quiet + --output + --assert + --jq
./​query.sh -q '{ products { totalItems } }' \
  --assert '.data.products.totalItems > 0' \
  --jq '.data.products.totalItems' \
  -o /​tmp/​count.txt

# Sauvegarde
./​query.sh -S get-me '{ me { id } }'  # Sauvegarde dans queries/​get-me.graphql
./​query.sh -f queries/​get-me.graphql  # Charge et exécute

# Requête multi-lignes (guillemets simples)
./​query.sh '
query {
  products(options: { take: 5 }) {
    items { id name }
  }
}
'

# Avec variables (utiliser heredoc si la requête contient !)
./​query.sh --vars '{"id": "42"}' <<'EOF'
query GetProduct($id: ID!) {
  product(id: $id) { name }
}
EOF

# Depuis stdin
echo '{ me { id } }' | ./​query.sh

# Shop API (storefront)
./​query.sh --shop '{ products { items { id name } } }'
./​query.sh --shop '{ activeCustomer { id emailAddress } }'

# Mesure du temps d'exécution
./​query.sh -T '{ me { id } }'             # Affiche "⏱ 74ms"
./​query.sh -s -T '{ administrators { totalItems } }'
./​query.sh --shop -T '{ products { items { id } } }'

⚠️ Limitation : Le caractère ! (ex: ID!) pose problème en inline à cause du history expansion bash. Si erreur "Unexpected character", utiliser heredoc (<<'EOF') ou fichier (--file query.graphql) à la place des guillemets simples.

Workflow de débogage (style Burp Repeater)

Le système d'historique et replay permet de déboguer efficacement les requêtes GraphQL :

# 1. Exécuter une requête qui échoue ou retourne des résultats inattendus
./​query.sh '{ products(options: { take: 5 }) { items { id name } } }'

# 2. Consulter l'historique pour voir les requêtes récentes
./​query.sh -H
# Affiche:
# [1] 14:23:01 { me { id } }...
# [2] 14:25:33 query GetProducts($take: Int)...
# [3] 14:28:45 { collections { items { id }...

# 3. Inspecter une requête AVANT de la rejouer (voir query + variables)
./​query.sh -I 2
# ═══════════════════════════════════════════════════════════
# Query #2 (2025-12-30 14:25:33)
# ═══════════════════════════════════════════════════════════
# query GetProducts($take: Int) { products(options: { take: $take }) { ... } }
# ───────────────────────────────────────────────────────────
# Variables: {"take": 5}
# ═══════════════════════════════════════════════════════════

# 4. Rejouer une requête avec modifications
./​query.sh -R 2                       # Identique
./​query.sh -R 2 -s                    # En superadmin (voir plus de données)
./​query.sh -R 2 --vars '{"take": 10}' # Remplacer toutes les variables
./​query.sh -R 2 --shop                # Sur shop-api au lieu d'admin-api

# 5. Modifier des variables spécifiques avec --set (merge)
./​query.sh -R 2 --set '.take=10'                  # Modifier une seule variable
./​query.sh -R 2 --set '.filter.status="pending"'  # Modifier un objet imbriqué
./​query.sh -R 2 --set '.take=10' --set '.skip=5'  # Modifier plusieurs variables

# 6. Comparer les résultats avec --diff
./​query.sh -R 2 --diff "--superadmin"             # vendor vs superadmin (diff coloré)
./​query.sh -R 2 --diff "--set '.take=10'"         # take=5 vs take=10
./​query.sh -R 2 --diff "--shop"                   # admin-api vs shop-api
./​query.sh -R 2 --diff "--set '.take=1'" --diff-only  # Mode compact (chemins JSON)

Cas d'usage typiques :

  • Inspecter avant de rejouer : voir la query complète et ses variables avec -I
  • Prévisualiser sans exécuter : utiliser --dry-run pour voir query/​variables/​auth/​endpoint sans connexion
  • Générer curl : utiliser --curl pour obtenir une commande curl copier-coller (Postman, CI/​CD, partage)
  • Modifier chirurgicalement : utiliser --set pour changer une variable sans tout retaper
  • Comparer rapidement : utiliser --diff pour voir les différences, --diff-only pour le format compact
  • Valider avant d'agir : utiliser --assert pour vérifier des conditions (workflows conditionnels)
  • Continuer malgré les erreurs : utiliser --no-fail pour enchaîner plusieurs requêtes sans interruption
  • Extraire et filtrer : utiliser --jq pour extraire des valeurs spécifiques
  • Capturer proprement : utiliser --quiet pour supprimer les logs et capturer uniquement le résultat
  • Sauvegarder les résultats : utiliser --output pour écrire dans un fichier (JSON propre sans couleurs)
  • Modifier des objets imbriqués facilement avec la syntaxe jq
  • Basculer entre admin-api et shop-api pour comparer les comportements
  • Analyser les erreurs de permission en comparant vendor vs superadmin
Fichiers générés
  • last-account.json : Credentials du dernier compte créé (email, password, vendorId)
  • .token-cache.vendor : Cache des tokens vendeur (30 min)
  • .token-cache.superadmin : Cache des tokens superadmin (30 min)
  • .query-history : Historique des 50 dernières requêtes GraphQL
  • queries/ : Requêtes GraphQL sauvegardées avec --save

Notes

  • Ce skill est généré à partir de la documentation officielle Vendure (docs.vendure.io)
  • Les exemples de code incluent la détection de langage pour le highlighting
  • Toutes les valeurs monétaires sont représentées en entiers (diviser par 100 pour l'affichage)
  • GraphQL est l'interface API principale (Shop API pour storefront, Admin API pour gestion)
  • Le Dashboard utilise React et TailwindCSS - toujours importer depuis @vendure/​dashboard

Mise à jour

Pour rafraîchir ce skill avec une documentation mise à jour :

  1. Re-scraper la documentation officielle docs.vendure.io
  2. Réorganiser les fichiers dans la structure Guides/​reference/​UI
  3. Mettre à jour les compteurs de lignes dans ce SKILL.md

More skills from majiayu000

xiaohongshu logo
majiayu000/claude-arsenal

xiaohongshu

xiaohongshu

286 148
View
agent-task-conductor logo
majiayu000/claude-skill-registry

agent-task-conductor

Conduct multi-agent task orchestration and workflow coordination.

663 1
View
conductor-setup logo
majiayu000/claude-skill-registry

conductor-setup

Initialize project with Conductor artifacts (product definition,

663 1
View
animation-designer logo
majiayu000/claude-skill-registry

animation-designer

Expert in web animations, transitions, and motion design using Framer Motion and CSS

663 1
View
diagramming logo
majiayu000/claude-skill-registry

diagramming

Creates Mermaid and ASCII diagrams for flowcharts, architecture, ERDs, state machines, mindmaps, and more. Use when user mentions diagram, flowchart, mermaid, ASCII diagram, text diagram, terminal diagram, visualize, C4, mindmap, architecture diagram, sequence diagram, ERD, or needs visual docume...

663 1
View
h3-pg logo
majiayu000/claude-skill-registry-data

h3-pg

PostgreSQL bindings for H3 hexagonal grid system. Use when working with H3 cells in Postgres, including spatial indexing, geometry/geography integration, and raster analysis.

23 1
View
conductor-development logo
majiayu000/claude-skill-registry

conductor-development

Context-Driven Development skill for projects using Conductor. Use this skill when you detect a `conductor/` directory in the project, when working on tasks defined in a `plan.md` file, or when the user asks about tracks, specs, or plans. Automatically applies TDD workflow, tracks task completion...

663 1
View
conductor-status logo
majiayu000/claude-skill-registry

conductor-status

Display project status, active tracks, and next actions

663 1
View
dockerization logo
majiayu000/claude-skill-registry

dockerization

Official Stakpak application containerization standard operating procedure, a step-by-step guidline to properly dockerize applications. This is a rule book curated by the Stakpak Team.

663 1
View

Popular AI tools

Kaiber logo
Video

Kaiber

Generate, edit, and beat-sync AI video with leading models in one workspace.

Paid
View
Vimcal logo
Productivity

Vimcal

The world's fastest calendar for remote work

Free
View

Transform Your Design with AI Designer by ImgCreator.ai

Freemium
View
Akool AI logo
Content & writing

Akool AI

Revolutionizing Video Production with AI-Powered Creativity

Paid
View

Extend an image past the frame and let AI fill the new aspect ratio.

Freemium
View
StarByFace logo
Security

StarByFace

Discover your celebrity doppelgänger with StarByFace!

Free
View
C

ChainClarity explains 700+ crypto whitepapers in plain English, with layered summaries, comparisons, research tools, alerts, and a $4.99 Pro plan.

Freemium
View
Opus Clip logo
Coding & apps

Opus Clip

Opus.ai: Revolutionize Your Web Experience

Free
View