@apc-projects/elysia-cli 0.1.0 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/README.md +51 -113
  2. package/package.json +9 -2
package/README.md CHANGED
@@ -1,12 +1,13 @@
1
1
  # @apc-projects/elysia-cli
2
2
 
3
- CLI de scaffolding pour projets **ElysiaJS**. Génère des modules (controller + service + model + plugin) suivant les bonnes pratiques Elysia, et **branche automatiquement** le plugin dans ton application via manipulation d'AST (ts-morph).
3
+ [![npm](https://img.shields.io/npm/v/@apc-projects/elysia-cli.svg)](https://www.npmjs.com/package/@apc-projects/elysia-cli)
4
+ [![license](https://img.shields.io/npm/l/@apc-projects/elysia-cli.svg)](./LICENSE)
4
5
 
5
- ## Prérequis
6
+ CLI de scaffolding pour projets **ElysiaJS**. Génère modules, services, models et macros, et branche automatiquement les plugins dans l'application via manipulation d'AST (ts-morph).
6
7
 
7
- Ce CLI est **Bun-only** : le binaire s'exécute avec Bun (le `bin` pointe sur du TypeScript). Node/`npx` n'est pas supporté.
8
+ ## Prérequis
8
9
 
9
- Installe Bun si ce n'est pas déjà fait :
10
+ Bun — le CLI s'exécute avec Bun ; Node / `npx` n'est pas supporté.
10
11
 
11
12
  ```bash
12
13
  # macOS / Linux
@@ -16,118 +17,68 @@ curl -fsSL https://bun.sh/install | bash
16
17
  powershell -c "irm bun.sh/install.ps1 | iex"
17
18
  ```
18
19
 
19
- Vérifie l'installation :
20
-
21
- ```bash
22
- bun --version
23
- ```
24
-
25
- ## Stack
26
-
27
- - **Bun** — runtime (exécute le TypeScript directement, pas de build en dev)
28
- - **commander** — parsing des commandes
29
- - **@clack/prompts** — prompts interactifs
30
- - **chalk** — sortie colorée
31
- - **ts-morph** — lecture/écriture de l'AST TypeScript (injection du `.use()`)
32
-
33
- ## Installation (dev)
34
-
35
- ```bash
36
- bun install
37
- bun run dev -- --help # exécute src/index.ts directement (aucun build)
38
- ```
39
-
40
- Pour l'utiliser comme binaire global pendant le dev :
41
-
42
- ```bash
43
- bun link # dans ce package
44
- cd ../mon-api-test
45
- bun link @apc-projects/elysia-cli # dans le projet cible
46
- elysia-cli --help
47
- ```
48
-
49
- Le `bin` pointe sur `src/index.ts` (shebang `#!/usr/bin/env bun`) : Bun lit le TS, donc rien à compiler pour l'installer. Un `bun install` du package suffit.
50
-
51
- ## Build standalone (distribution)
52
-
53
- ```bash
54
- bun run build # bun build --compile -> dist/elysia-cli
55
- ./dist/elysia-cli --help # exécutable autonome, sans Bun ni Node
56
- ```
57
-
58
- ## Utilisation sans cloner le dépôt
59
-
60
- ### Via npm (recommandé)
61
-
62
- Après publication sur npm (`bun publish` / `npm publish` — le package est `@apc-projects/elysia-cli`), on peut l'exécuter sans installation :
20
+ ## Installation
63
21
 
64
22
  ```bash
23
+ # via npm
65
24
  bunx @apc-projects/elysia-cli init mon-api
66
- bunx @apc-projects/elysia-cli add prisma
67
- ```
68
-
69
- `bunx` résout le **nom du package** (pas le nom du binaire), d'où `@apc-projects/elysia-cli`. Les dépendances sont installées automatiquement au premier run puis mises en cache.
70
-
71
- ### Via GitHub (sans publier sur npm)
72
-
73
- Bun sait installer depuis un dépôt Git. En dépendance de projet :
74
-
75
- ```bash
76
- bun add github:<owner>/<repo> # ajoute @apc-projects/elysia-cli au projet
77
- bunx elysia-cli init mon-api # le binaire local est alors résolu
78
- ```
79
-
80
- Ou en global :
81
25
 
82
- ```bash
83
- bun add -g github:<owner>/<repo>
26
+ # ou depuis GitHub, en global
27
+ bun add -g github:<owner>/elysia-cli
84
28
  elysia-cli init mon-api
85
29
  ```
86
30
 
87
- Comme le `bin` pointe sur `src/index.ts` (shebang `#!/usr/bin/env bun`), aucune étape de build n'est requise à l'installation — Bun exécute le TypeScript directement. Assure-toi que `files` inclut `src` (c'est le cas) pour que la source soit bien livrée.
88
-
89
- > Note : `bunx github:<owner>/<repo>` en une commande n'est pas garanti — passe par `bun add` (projet ou global) pour la voie GitHub. Pour un `bunx <nom>` direct, publie sur npm.
90
-
91
31
  ## Commandes
92
32
 
93
33
  ```bash
94
- elysia-cli generate module <name> # alias: g module
34
+ elysia-cli init <project> # bun create elysia + structure elysia-cli
35
+ elysia-cli generate module <name> # alias : g
95
36
  elysia-cli generate service <name>
96
37
  elysia-cli generate model <name>
97
- elysia-cli macro <name> # génère src/macros/<name>.macro.ts + .use()
98
- elysia-cli add <plugin> # cors | openapi | jwt | logger | better-auth | prisma
99
- elysia-cli init <project-name> # `bun create elysia` + couche elysia-cli
38
+ elysia-cli macro <name> # génère une macro + .use()
39
+ elysia-cli add <plugin> # cors | openapi | jwt | logger | better-auth | prisma
100
40
  ```
101
41
 
102
- `add` installe automatiquement les dépendances (`bun add`, désactivable avec `--no-install`) :
103
-
104
- - `cors`, `jwt` — branchés par `.use(...)` dans l'app entry.
105
- - `openapi` — branché **uniquement hors production** (`NODE_ENV !== "production"`). Si **better-auth** est présent, le schéma OpenAPI de better-auth est intégré à la doc (`documentation.components` / `documentation.paths`). L'intégration marche dans les deux sens : si tu ajoutes `openapi` puis `better-auth`, ce dernier **re-patche** l'appel `openapi()` existant pour y injecter la doc auth.
106
- - `logger` — scaffolde le logger applicatif (chalk) dans `src/utils/logger.ts`, injecte les hooks `onBeforeHandle`/`onAfterResponse` **directement dans la chaîne** de `src/index.ts`, et remplace les `console.*` par le `Logger`.
107
- - `prisma` — Prisma 7. **Demande le provider** (PostgreSQL / MySQL-MariaDB / SQLite) et l'**URL de connexion**, puis scaffolde le client singleton avec le bon driver adapter (`src/db/index.ts`), `prisma/schema.prisma` (provider choisi, sans `url`, + générateur **prismabox** pour les modèles de validation Elysia), `prisma.config.ts` (URL pour Migrate), et ajoute `DATABASE_URL` à `.env.local`. Le client est généré vers un **output custom** (`src/generated/prisma`, Prisma 7) et importé depuis `../generated/prisma/client` dans `src/db/index.ts` — jamais depuis `@prisma/client`. Le dossier `src/generated` est git-ignoré (régénéré via `prebuild`/post-install). `prisma generate` est lancé après install. Ajoute aussi au `package.json` (sans écraser l'existant) les scripts `build`/`start` s'ils manquent, plus `prebuild` (`prisma generate`) et `prestart` (`prisma migrate deploy`). Les paquets (`@prisma/adapter-*`, driver natif) dépendent du provider.
108
- - `better-auth` — scaffolde `src/lib/auth.ts` **et une macro `auth`** (`src/macros/auth.macro.ts`) qui monte le handler (routes sur `/api/auth`) et expose `user`/`session` aux routes protégées via `{ auth: true }` ; branché par `.use(authMacro)`. **Demande `BETTER_AUTH_URL`** et ajoute `BETTER_AUTH_SECRET` (généré) + `BETTER_AUTH_URL` à `.env.local`. **Si Prisma est présent** (ou ajouté en même temps), l'adapter Prisma est câblé avec le provider détecté depuis le schéma, et les migrations auth sont générées puis appliquées (`@better-auth/cli generate` + `prisma migrate`).
42
+ ### Plugins (`add`)
109
43
 
110
- `generate module` branche chaque controller dans l'agrégateur `src/modules/index.ts` (créé au besoin, avec `.use(modules)` dans l'app entry), et non plus directement dans `src/index.ts`.
44
+ Les dépendances sont installées automatiquement (`--no-install` pour désactiver).
111
45
 
112
- `init` déplace la route racine par défaut dans `src/modules/index.ts` et propose de sélectionner des plugins à ajouter tout de suite (install auto).
46
+ | Plugin | Effet |
47
+ | --- | --- |
48
+ | `cors`, `jwt` | Branchés dans l'app via `.use(...)`. |
49
+ | `openapi` | Monté hors production uniquement. Intègre le schéma OpenAPI de better-auth s'il est présent. |
50
+ | `logger` | Logger applicatif (chalk) dans `src/utils/logger.ts`, hooks de logging des requêtes, et bascule des `console.*` vers `Logger`. |
51
+ | `prisma` | Prisma 7 : client singleton avec driver adapter, `schema.prisma` (+ générateur prismabox), `prisma.config.ts`, `DATABASE_URL` dans `.env.local`, scripts `prebuild`/`prestart`. Provider au choix (PostgreSQL / MySQL-MariaDB / SQLite). |
52
+ | `better-auth` | `src/lib/auth.ts` + macro `auth` (`.use(authMacro)`, routes sur `/api/auth`), secret et URL dans `.env.local`. Câble l'adapter Prisma et les migrations si Prisma est présent. |
113
53
 
114
- Exemple :
54
+ ## Structure générée
115
55
 
116
- ```bash
117
- elysia-cli g module user
118
- ```
119
-
120
- Génère :
56
+ `generate module user` crée un module feature-based, branché dans l'agrégateur `src/modules/index.ts` :
121
57
 
122
58
  ```
123
59
  src/modules/user/
124
- user.controller.ts # instance Elysia `user` (routes, body/response = UserModel)
125
- user.service.ts # classe abstraite `User` (logique métier)
126
- user.model.ts # objet de schémas `UserModel` (t.*) + type TS dérivé
60
+ user.controller.ts # instance Elysia « user »
61
+ user.service.ts # classe « User »
62
+ user.model.ts # schémas « UserModel » + type TS dérivé
127
63
  index.ts # barrel export
128
64
  ```
129
65
 
130
- Le controller s'exporte sous le nom du module (`export const user = …`), le service est une classe `User`, et le model est un objet de schémas (`UserModel.create`, `UserModel.entity`, `UserModel.update`) avec un type TypeScript dérivé — comme dans la doc Elysia. Le controller est ensuite branché dans l'agrégateur `src/modules/index.ts` via `.use(user)`.
66
+ Un projet complet (`init` + `prisma`, `better-auth`, `logger`, `openapi`) ressemble à :
67
+
68
+ ```
69
+ mon-api/
70
+ prisma/schema.prisma
71
+ prisma.config.ts
72
+ src/
73
+ index.ts # app Elysia (hooks logger, .use(modules), .use(authMacro)…)
74
+ modules/index.ts # agrégateur des modules
75
+ lib/auth.ts # instance better-auth
76
+ macros/auth.macro.ts # macro « auth »
77
+ db/index.ts # client Prisma
78
+ utils/logger.ts
79
+ .env.local # DATABASE_URL, BETTER_AUTH_SECRET, BETTER_AUTH_URL
80
+ elysia-cli.config.json
81
+ ```
131
82
 
132
83
  ## Configuration
133
84
 
@@ -138,32 +89,19 @@ Optionnel — `elysia-cli.config.json` à la racine du projet cible :
138
89
  "srcDir": "src",
139
90
  "modulesDir": "src/modules",
140
91
  "appEntry": "src/index.ts",
141
- "appVariable": "app"
92
+ "appVariable": "app",
93
+ "modulesEntry": "src/modules/index.ts",
94
+ "modulesVariable": "modules"
142
95
  }
143
96
  ```
144
97
 
145
- ## Structure du package
98
+ ## Développement
146
99
 
100
+ ```bash
101
+ bun install
102
+ bun run dev -- --help # exécute src/index.ts
103
+ bun run build # binaire standalone -> dist/elysia-cli
147
104
  ```
148
- src/
149
- index.ts # entrée commander
150
- commands/
151
- generate.ts # generate module/service/model
152
- add.ts # add <plugin>
153
- init.ts # init <project>
154
- utils/
155
- logger.ts # wrappers chalk + clack
156
- naming.ts # helpers de casse (pascal, camel, kebab)
157
- project.ts # chargement du Project ts-morph + config
158
- inject.ts # injection du .use() dans l'app
159
- templates.ts # fonctions de génération de contenu
160
- ```
161
-
162
- > Note : `tsup.config.ts` n'est plus utilisé (build géré par `bun build --compile`) et peut être supprimé.
163
-
164
- ## Étendre
165
-
166
- Ajoute un générateur : nouvelle fonction dans `templates.ts` + branche-la dans `commands/generate.ts`. Pour un nouveau type d'injection, réutilise `utils/inject.ts` (basé sur ts-morph, donc robuste aux reformats).
167
105
 
168
106
  ## Licence
169
107
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@apc-projects/elysia-cli",
3
- "version": "0.1.0",
3
+ "version": "0.1.1",
4
4
  "description": "Générateur de scaffolding pour projets ElysiaJS (modules, services, models, plugins).",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -10,7 +10,14 @@
10
10
  "type": "git",
11
11
  "url": "git+https://github.com/Segu27/elysia-cli.git"
12
12
  },
13
- "keywords": ["elysia", "elysiajs", "cli", "scaffolding", "bun", "generator"],
13
+ "keywords": [
14
+ "elysia",
15
+ "elysiajs",
16
+ "cli",
17
+ "scaffolding",
18
+ "bun",
19
+ "generator"
20
+ ],
14
21
  "bin": {
15
22
  "elysia-cli": "./src/index.ts"
16
23
  },