Package Exports
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (@akis05/akis) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
AKIS - Appwrite CLI Tool
AKIS est un outil CLI qui synchronise automatiquement vos collections Appwrite avec vos types TypeScript. Définissez vos types une seule fois, et AKIS crée/met à jour vos collections et génère le schéma correspondant.
Fonctionnalités
- Génération automatique : Crée les collections Appwrite depuis vos types TypeScript
- Synchronisation : Détecte les différences entre vos types et Appwrite
- Schema auto-généré : Le fichier
schema.tsest généré automatiquement lors de la migration - Indexes automatiques : Crée les indexes pour les champs courants (storeId, email, etc.)
- Mode dry-run : Prévisualisez les changements avant de les appliquer
Installation
Avec npm
npm install @akis05/akisAvec pnpm
pnpm add @akis05/akisInstallation globale (optionnel)
npm install -g @akis05/akisConfiguration
1. Variables d'environnement
Créez un fichier .env à la racine de votre projet:
# Endpoint Appwrite (Cloud ou Self-hosted)
APPWRITE_ENDPOINT=https://cloud.appwrite.io/v1
# ID de votre projet Appwrite
APPWRITE_PROJECT_ID=votre_project_id
# ID de votre base de données
APPWRITE_DATABASE_ID=votre_database_id
# Clé API avec permissions Database (Create, Read, Update, Delete)
APPWRITE_API_KEY=votre_api_key2. Obtenir les identifiants Appwrite
- Connectez-vous à Appwrite Console
- Project ID : Settings → Project ID
- Database ID : Databases → Cliquez sur votre DB → Settings
- API Key : Settings → API Keys → Create API Key (cochez Database permissions)
Démarrage rapide
Étape 1 : Initialiser le projet
npx akis initCette commande crée la structure suivante:
core/
└── appwrite-model/
├── types.ts # Vos définitions TypeScript
├── schema.ts # Schéma généré (ne pas modifier manuellement)
├── client.ts # Client Appwrite configuré
└── setup-collections.ts # Fonctions utilitairesÉtape 2 : Définir vos types
Éditez core/appwrite-model/types.ts:
export type Client = {
_id: string; // ID Appwrite (obligatoire)
_creationTime: number; // Timestamp création (obligatoire)
nom: string; // Champ requis
email?: string; // Champ optionnel (?)
telephone?: string;
statut: "actif" | "inactif"; // Enum
tags?: string[]; // Array de strings
storeId: string;
createdAt: number;
deletedAt?: number;
};
export type Produit = {
_id: string;
_creationTime: number;
nom: string;
prix: number;
quantite: number;
categorie: "electronique" | "vetement" | "alimentaire";
storeId: string;
createdAt: number;
};Étape 3 : Migrer vers Appwrite
# Prévisualiser les changements (recommandé)
npx akis migrate --dry-run
# Créer les collections
npx akis migrateRésultat :
- Collections créées dans Appwrite
- Fichier
schema.tsgénéré automatiquement
Étape 4 : Vérifier le statut
npx akis statusCommandes
akis init
Initialise la structure du projet.
npx akis init # Créer les fichiers
npx akis init --force # Écraser les fichiers existantsOptions:
| Option | Description |
|---|---|
-f, --force |
Écrase les fichiers existants |
akis migrate
Crée les collections manquantes dans Appwrite et génère schema.ts.
npx akis migrate # Migrer toutes les collections
npx akis migrate --name clients # Migrer une collection spécifique
npx akis migrate --dry-run # Prévisualiser sans exécuterOptions:
| Option | Description |
|---|---|
-n, --name <name> |
Nom de la collection à migrer |
-d, --dry-run |
Affiche les actions sans les exécuter |
Exemple de sortie:
🚀 AKIS Migrate - Création des collections manquantes
📖 Lecture de types.ts...
2 collection(s) à traiter
📡 Connexion à Appwrite...
📦 Création de clients...
✓ nom
✓ email
✓ telephone
✓ statut
✓ storeId
🔑 idx_storeId
🔑 idx_email
✅ clients créée
📝 schema.ts généré avec 2 collections
✨ Migration terminée: 1 créées, 1 ignoréesakis update
Ajoute les nouveaux attributs aux collections existantes.
npx akis update # Mettre à jour toutes les collections
npx akis update --name clients # Mettre à jour une collection spécifique
npx akis update --dry-run # Prévisualiser sans exécuterOptions:
| Option | Description |
|---|---|
-n, --name <name> |
Nom de la collection à mettre à jour |
-d, --dry-run |
Affiche les actions sans les exécuter |
Cas d'utilisation:
- Vous avez ajouté un nouveau champ dans
types.ts - Vous voulez synchroniser sans recréer la collection
akis status
Compare les types locaux avec les collections Appwrite.
npx akis status # Voir toutes les collections
npx akis status --name clients # Voir une collection spécifiqueOptions:
| Option | Description |
|---|---|
-n, --name <name> |
Nom de la collection à vérifier |
Exemple de sortie:
📊 AKIS Status - État des collections
┌─────────────────────────────┬────────┬────────────┬─────────────┐
│ Collection │ Status │ Attributs │ Manquants │
├─────────────────────────────┼────────┼────────────┼─────────────┤
│ clients │ ✅ │ 9/9 │ 0 │
│ produits │ ⚠️ │ 5/7 │ 2 │
│ commandes │ ❌ │ - │ - │
└─────────────────────────────┴────────┴────────────┴─────────────┘
📈 Résumé:
✅ 1 synchronisées
⚠️ 1 à mettre à jour (akis update)
❌ 1 manquantes (akis migrate)akis delete
Supprime des collections dans Appwrite.
npx akis delete --name clients # Supprimer une collection (avec confirmation)
npx akis delete --force # Supprimer TOUTES les collections sans confirmation
npx akis delete --name clients -f # Supprimer sans confirmationOptions:
| Option | Description |
|---|---|
-n, --name <name> |
Nom de la collection à supprimer |
-f, --force |
Supprimer sans demander confirmation |
⚠️ Attention : Cette action est irréversible !
Types TypeScript supportés
AKIS reconnaît automatiquement les types suivants:
| TypeScript | Appwrite Attribute |
|---|---|
string |
String (size auto-détectée) |
number |
Float ou Integer (selon le nom du champ) |
boolean |
Boolean |
string[] |
String Array |
number[] |
Integer Array |
"a" | "b" | "c" |
Enum |
Conventions de nommage
AKIS infère automatiquement certaines propriétés:
| Nom du champ | Type inféré | Taille |
|---|---|---|
*Id, storeId |
string | 36 |
email |
string | 255 |
telephone, tel |
string | 50 |
note, description |
string | 2000 |
adresse |
string | 500 |
quantite*, *Minutes |
integer | - |
createdAt, deletedAt |
integer | - |
Champs système (ignorés)
Ces champs sont automatiquement ignorés car gérés par Appwrite:
_id- ID du document_creationTime- Timestamp de création
Workflow recommandé
┌─────────────────────────────────────────────────────────────┐
│ 1. Définir les types dans types.ts │
│ export type Client = { ... } │
└─────────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────┐
│ 2. Prévisualiser les changements │
│ npx akis migrate --dry-run │
└─────────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────┐
│ 3. Migrer vers Appwrite │
│ npx akis migrate │
│ → Collections créées + schema.ts généré │
└─────────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────┐
│ 4. Vérifier la synchronisation │
│ npx akis status │
└─────────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────┐
│ 5. Ajouter de nouveaux champs ? → Retour à l'étape 1 │
│ npx akis update │
└─────────────────────────────────────────────────────────────┘Utilisation avec pnpm
Si vous utilisez pnpm, ajoutez un script dans votre package.json:
{
"scripts": {
"akis": "akis"
}
}Puis utilisez:
pnpm akis status
pnpm akis migrate
pnpm akis updateExemples
Exemple complet de types.ts
/* ═══════════════════════════════════════════════════════════
Types pour mon application
═══════════════════════════════════════════════════════════ */
export type Client = {
_id: string;
_creationTime: number;
nom: string;
email?: string;
telephone?: string;
adresse?: string;
statut: "actif" | "inactif" | "prospect";
remise?: number;
tags?: string[];
storeId: string;
createdAt: number;
deletedAt?: number;
};
export type Produit = {
_id: string;
_creationTime: number;
nom: string;
description?: string;
prix: number;
prixAchat?: number;
quantite: number;
stockMin?: number;
categorie: "electronique" | "vetement" | "alimentaire" | "autre";
image?: string;
storeId: string;
createdAt: number;
};
export type Vente = {
_id: string;
_creationTime: number;
numero: string;
clientId?: string;
lignes: string; // JSON stringifié
total: number;
statut: "brouillon" | "validee" | "payee" | "annulee";
storeId: string;
createdAt: number;
};
// Utilitaires
export type NewDoc<T> = Omit<T, "_id" | "_creationTime">;
export type UpdateDoc<T> = Partial<Omit<T, "_id" | "_creationTime">>;Dépannage
Erreur: APPWRITE_API_KEY non configurée
Vérifiez que votre fichier .env existe et contient la clé API:
cat .env | grep APPWRITE_API_KEYErreur: Collection non trouvée dans types.ts
Assurez-vous que le nom du type correspond à un nom reconnu par AKIS:
Client→clientsProduit→produitsVente→ventes
Les attributs ne sont pas créés
Appwrite a une limite de taille pour les attributs. Vérifiez:
- Taille des strings (max 16000 caractères)
- Nombre d'attributs par collection (max ~100)
License
MIT