Markdown Converter
Agent skill for markdown-converter
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 création de plugins, ou l'intégration de storefronts.
Sign in to like and favorite skills
Assistance complète pour le développement Vendure, générée à partir de la documentation officielle (docs.vendure.io).
Déclencher ce skill pour :
Concepts fondamentaux de l'architecture Vendure :
Ce skill est organisé en 3 sections principales pour une navigation optimale :
| Fichier | Lignes | Contenu | Quand consulter |
|---|---|---|---|
| 619 | Installation, création projet, premiers pas | Démarrer un projet |
| 5,247 | Architecture, API Layer, Middleware, NestJS | Comprendre l'architecture |
| 1,502 | Collections, Money, Assets, Taxes, Payment | Concepts fondamentaux |
| 2,362 | Extensions React, routes, pages personnalisées | Personnaliser l'admin |
| 2,880 | Custom fields, paiements, shipping calculators | Tutoriels spécifiques |
| 1,618 | Next.js, Remix, connexion API, starters | Créer un storefront |
| 1,145 | Docker, production, sécurité, HardenPlugin | Déployer en production |
| 473 | Utilisation Dashboard pour administrateurs | Former les utilisateurs |
| 302 | Breaking changes, guide de migration v1→v2 | Migration 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
| Fichier | Lignes | Contenu | Quand consulter |
|---|---|---|---|
| 21,561 | TOUT : Classes, interfaces, strategies, services | Recherche API TypeScript |
| 5,712 | API Angular (deprecated), composants legacy | Maintenir code Angular |
| 4,527 | EmailPlugin, AssetServerPlugin, HardenPlugin, etc. | Configurer plugins officiels |
| 3,585 | React hooks, composants Dashboard, extensions | Développer extensions React |
| 4,078 | Shop API, Admin API, queries, mutations | Requêtes GraphQL |
| 35 | Index/overview de la section | Vue d'ensemble |
Fichier clé :
- Contient TOUTES les interfaces et classes Vendure.typescript-api.md
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
NOUVELLE SECTION - Composants UI pour extensions Dashboard
| Fichier | Lignes | Composants | Quand consulter |
|---|---|---|---|
| 1,315 | 42 composants : Button, Dialog, Card, Badge, Popover, Tabs... | Éléments UI de base |
| 1,082 | 11 composants : TextInput, SelectInput, CheckboxInput, DatePicker... | Formulaires |
| 862 | DetailPage, ListPage, PageLayout, TabsLayout | Structure de pages |
| 516 | DataTable, AssetGallery, PaginationControls | Affichage de données |
| 724 | Documentation de base des composants | Ré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
references/Guides/getting-started.mdreferences/Guides/core-concepts.md (Money, Collections)references/Guides/how-to.md/shop-apireferences/reference/typescript-api.mdreferences/Guides/developer-guide.mdreferences/reference/core-plugins.md (StripePlugin)references/reference/core-plugins.md (EmailPlugin)references/Guides/developer-guide.md (API Layer, Middleware)references/UI/ + references/Guides/extending-the-dashboard.mdreferences/Guides/deployment.md (HardenPlugin, OWASP)| Tâche | Fichier de référence |
|---|---|
| Démarrer un projet | |
| Afficher des prix | |
| Accepter des paiements | |
| Envoyer des emails | |
| Créer un plugin | |
| Upload de fichiers | |
| Valider commandes | |
| Requêtes GraphQL | |
| Stocker des prix | |
| Installer Dashboard | |
| Créer page Dashboard | + |
| Composants formulaire | |
| DataTable | |
# 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
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
Scripts utilitaires pour interagir avec les APIs GraphQL de Vendure.
curl - Requêtes HTTPjq - Manipulation JSONbash 5+ - Requis pour tableaux associatifs (macOS: brew install bash)| Script | Description |
|---|---|
| Authentification et aide aux requêtes curl |
| Exécution simplifiée de requêtes GraphQL |
login.sh - Authentification et aide curlScript d'authentification pour obtenir un token JWT et faciliter les requêtes curl.
| Option | Alias | Description |
|---|---|---|
| | Utilise last-account.json |
| | Mode superadmin |
| | Email de connexion |
| | Mot de passe |
| | Chemin .env |
| | Affiche exports shell |
| | Exemple curl complet |
| | Mode silencieux |
| | Mode 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)
- Requêtes GraphQL simplifiéesquery.sh
| Option | Alias | Description |
|---|---|---|
| | Variables GraphQL JSON (remplace tout) |
| - | Modifier une variable (merge jq) |
| | Fichier .graphql |
| | Mode superadmin |
| | Chemin .env |
| | Sortie JSON brute |
| | Affiche seulement .data |
| | Force reconnexion |
| | Timeout en secondes |
| | Affiche les 10 dernières requêtes |
| | Ré-exécute la dernière requête |
| | Ré-exécute la requête #N de l'historique |
| | Affiche query #N + variables (sans exécuter) |
| | Sauvegarde dans |
| | Utilise au lieu de |
| | Affiche le temps d'exécution |
| - | Compare 2 exécutions (avant/après OPTS) |
| - | Avec --diff: affiche uniquement les valeurs changées |
| - | Ne pas exit 1 sur erreur GraphQL (continuer malgré les erreurs) |
| - | Affiche la requête sans l'exécuter (pas d'auth) |
| - | Génère la commande curl équivalente (copier-coller) |
| | Appliquer un filtre jq sur le résultat |
| | Valider une condition jq (exit 1 si fausse) |
| | Mode silencieux (supprime tous les logs stderr) |
| | Écrire le résultat dans un fichier |
| | Mode 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:!) pose problème en inline à cause du history expansion bash. Si erreur "Unexpected character", utiliser heredoc (ID!) ou fichier (<<'EOF') à la place des guillemets simples.--file query.graphql
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 :
-I--dry-run pour voir query/variables/auth/endpoint sans connexion--curl pour obtenir une commande curl copier-coller (Postman, CI/CD, partage)--set pour changer une variable sans tout retaper--diff pour voir les différences, --diff-only pour le format compact--assert pour vérifier des conditions (workflows conditionnels)--no-fail pour enchaîner plusieurs requêtes sans interruption--jq pour extraire des valeurs spécifiques--quiet pour supprimer les logs et capturer uniquement le résultat--output pour écrire dans un fichier (JSON propre sans couleurs)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 GraphQLqueries/ : Requêtes GraphQL sauvegardées avec --save@vendure/dashboardPour rafraîchir ce skill avec une documentation mise à jour :