dolphin-server-modules 2.2.4 → 2.5.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.
@@ -1,4 +1,4 @@
1
- # Dolphin Framework: 0 to 100% Full Tutorial (Nepali) 🐬 [v1.7.0]
1
+ # Dolphin Framework: 0 to 100% Full Tutorial (Nepali) 🐬 [v2.2.5]
2
2
 
3
3
  Dolphin Framework मा तपाईँलाई स्वागत छ! यो गाइडमा हामी Dolphin प्रयोग गरेर एउटा शक्तिशाली, छिटो र आधुनिक API कसरी बनाउने भनेर सुरुदेखि अन्त्यसम्म सिक्नेछौँ।
4
4
 
@@ -6,44 +6,47 @@ Dolphin Framework मा तपाईँलाई स्वागत छ! यो
6
6
 
7
7
  ## १. Dolphin के हो? (Introduction)
8
8
 
9
- **Dolphin** एउटा "Zero-Dependency" ब्याकइन्ड फ्रेमवर्क हो। यो Node.js को नेटिभ `http` मोड्युलमा बनेको छ, जसले गर्दा यसको स्पिड एकदमै धेरै छ।
9
+ **Dolphin** एउटा "Zero-Dependency" ब्याकइन्ड फ्रेमवर्क हो। यो Node.js को नेटिभ `http` मोड्युलमा बनेको छ, जसले गर्दा यसको स्पिड एकदमै धेरै छ र यो २०२६ को आधुनिक आवश्यकताहरूका लागि तयार छ।
10
10
 
11
11
  **मुख्य विशेषताहरू:**
12
- - **Zero-Dependency Core**: बाहिरी भारी लाइब्रेरीहरू प्रयोग नगरी नेटिभ Node.js मा आधारित।
13
- - **Ultra-Fast**: एक्सप्रेस (Express) भन्दा धेरै गुणा छिटो।
14
- - **100% Modular**: तपाईँलाई जे चाहिन्छ, त्यही मात्र प्रयोग गर्न सकिन्छ (Auth, CRUD, Routing सबै छुट्टाछुट्टै छन्)।
12
+ - **Ultra-Fast**: एक्सप्रेस (Express) भन्दा गुणा सम्म छिटो।
13
+ - **Reactive Sync**: फ्रन्टइन्ड ब्याकइन्डको डेटा अटोमेटिक सिङ्क हुने।
14
+ - **Offline Ready**: इन्टरनेट नहुँदा पनि डेटा सेभ गर्न मिल्ने (DolphinPersist)।
15
+ - **Modern CLI**: एकै मिनेटमा प्रोजेक्ट तयार गर्न मिल्ने।
15
16
 
16
17
  ---
17
18
 
18
19
  ## २. सुरुवाती सेटअप (Project Setup)
19
20
 
20
- सबैभन्दा पहिले एउटा नयाँ फोल्डर बनाउनुहोस् प्रोजेक्ट सुरु गर्नुहोस्:
21
+ Dolphin v2.2.5 मा नयाँ CLI कमाण्डहरू थपिएका छन् जसले प्रोजेक्ट सुरु गर्न एकदमै सजिलो बनाउँछ:
21
22
 
22
23
  ```bash
23
- # १. फोल्डर बनाउनुहोस् र भित्र जानुहोस्
24
+ # १. नयाँ फोल्डर बनाउनुहोस्
24
25
  mkdir my-dolphin-app && cd my-dolphin-app
25
26
 
26
- # २. npm प्रोजेक्ट सुरु गर्नुहोस्
27
- npm init -y
27
+ # २. डल्फिन प्रोजेक्ट सुरु गर्नुहोस् (ESM support सहित)
28
+ npx dolphin init
28
29
 
29
- # ३. आवश्यक प्याकेजहरू इन्स्टल गर्नुहोस्
30
- npm install dolphin-server-modules mongoose zod
30
+ # ३. यदि तपाईंलाई 'Production' लेबलको फोल्डर स्ट्रक्चर चाहिन्छ भने:
31
+ npx dolphin init-prod
31
32
  ```
32
33
 
34
+ यसले अटोमेटिकल्ली `package.json`, `app.js` र आवश्यक कन्फिगरेसन फाइलहरू बनाइदिन्छ।
35
+
33
36
  ---
34
37
 
35
38
  ## ३. पहिलो सर्भर (Hello World)
36
39
 
37
- अब `index.ts` (वा `index.js`) फाइल बनाउनुहोस् र यो कोड राख्नुहोस्:
40
+ अब `app.js` फाइलमा यो कोड राख्नुहोस् (हामी आधुनिक `import` सिन्ट्याक्स प्रयोग गर्छौं):
38
41
 
39
- ```typescript
42
+ ```javascript
40
43
  import { createDolphinServer } from 'dolphin-server-modules/server';
41
44
 
42
45
  const app = createDolphinServer();
43
46
 
44
- // एउटा सामान्य गेट (GET) रूट (v1.4.7: अब सिधै डाटा रिटर्न गर्न सकिन्छ!)
47
+ // एउटा सामान्य गेट (GET) रूट
45
48
  app.get('/', (ctx) => {
46
- return { message: "Dolphin को संसारमा स्वागत छ! 🐬" };
49
+ return { message: "Dolphin को संसारमा स्वागत छ! 🐬", version: "2.2.5" };
47
50
  });
48
51
 
49
52
  // सर्भर सुन्न (Listen) सुरु गर्नुहोस्
@@ -52,224 +55,93 @@ app.listen(3000, () => {
52
55
  });
53
56
  ```
54
57
 
55
- तपाईँको सर्भर अब तयार भयो! `npx ts-node index.ts` चलाएर चेक गर्न सक्नुहुन्छ।
56
-
57
- ---
58
-
59
- ## ४. Context (ctx) बुझ्ने
60
-
61
- Dolphin मा हामी `req` र `res` को सट्टा `ctx` (Context) प्रयोग गर्छौँ। यसले कोडलाई सफा बनाउँछ।
62
-
63
- - `ctx.req`: नेटिभ रिक्वेस्ट अब्जेक्ट।
64
- - `ctx.json(data)`: JSON रेस्पोन्स पठाउन।
65
- - `ctx.body`: पोस्ट (POST) फाइल वा डाटाहरु।
66
- - `ctx.params`: URL बाट आउने प्यारामिटरहरू (जस्तै: `/users/:id`)।
67
-
68
- ---
69
-
70
- ## ५. राउटिङ र डाइनामिक प्यारामिटर (Routing)
71
-
72
- Dolphin को राउटिङ एकदमै शक्तिशाली छ।
73
-
74
- ```typescript
75
- // १. डाइनामिक आईडी लिने
76
- app.get('/users/:id', (ctx) => {
77
- const userId = ctx.params.id;
78
- ctx.json({ id: userId, name: "Nepal User" });
79
- });
80
-
81
- // २. पोस्ट रिक्वेस्ट (Data पठाउन)
82
- app.post('/create', (ctx) => {
83
- const data = ctx.body;
84
- ctx.json({ status: "Received", payload: data });
85
- });
86
- ```
87
-
88
58
  ---
89
59
 
90
- ## ६. मिडलवेयर (Middleware)
60
+ ## ४. DolphinStore: शक्तिशाली र रिएक्टिभ स्टोर [NEW v2.2.5]
91
61
 
92
- मिडलवेयरले रिक्वेस्टलाई चेक वा मोडिफाइ गर्छ। Dolphin ले "Native Style""Express Style" दुवै सपोर्ट गर्छ।
62
+ Dolphin को नयाँ स्टोरले फ्रन्टइन्डमा डेटा म्यानेजमेन्टलाई एकदमै सजिलो बनाउँछ। यसले डेटा लोड हुँदैछ कि छैन (loading), सफल भयो कि भएन (success) एरर आयो कि (error) भनेर अटोमेटिक जानकारी दिन्छ।
93
63
 
94
- ```typescript
95
- // Dolphin Style Middleware
96
- app.use((ctx, next) => {
97
- console.log(`${ctx.req.method} अनुरोध आयो: ${ctx.req.url}`);
98
- next(); // अर्को स्टेपमा जानको लागि अनिवार्य छ
99
- });
100
-
101
- // Express Style (जस्तै: CORS)
102
- import cors from 'cors';
103
- app.use(cors()); // सिधै काम गर्छ!
104
- ```
105
-
106
- ---
107
-
108
- ## ७. डेटाबेस सेटअप (Mongoose Adapter)
109
-
110
- Dolphin ले Mongoose सँग सजिलै काम गर्छ।
111
-
112
- ```typescript
113
- import mongoose from 'mongoose';
114
- import { createMongooseAdapter } from 'dolphin-server-modules/adapters/mongoose';
115
-
116
- // १. स्किमा (Schema) बनाउनुहोस्
117
- const UserSchema = new mongoose.Schema({
118
- email: { type: String, required: true, unique: true },
119
- password: { type: String, required: true }
120
- });
121
-
122
- const User = mongoose.model('User', UserSchema);
123
-
124
- // २. अड्याप्टर (Adapter) सेटअप गर्नुहोस्
125
- const db = createMongooseAdapter({ User });
64
+ ### क. स्टोर प्रयोग गर्ने तरिका
65
+ ```html
66
+ <script src="/dolphin-client.js"></script>
67
+ <script>
68
+ // १. स्टोरबाट कलेक्सन लिने
69
+ const products = dolphin.store.products;
70
+
71
+ // २. लोड स्टेट चेक गर्ने
72
+ if (products.loading) console.log("डेटा लोड हुँदैछ...");
73
+
74
+ // ३. डेटा आएपछि देखाउने
75
+ if (products.success) {
76
+ console.log("डेटा आयो:", products.items);
77
+ }
78
+ </script>
126
79
  ```
127
80
 
128
- ---
129
-
130
- ## ८. अथेन्टिकेसन (Auth Module)
131
-
132
- सुरक्षित API को लागि Dolphin भित्रै `auth` मोड्युल छ।
133
- यसको लागि सबैभन्दा पहिले प्रोजेक्टको रूटमा `.env` फाइल बनाउनुहोस्:
81
+ ### ख. फिल्टर र सर्टिङ (Filtering & Sorting)
82
+ तपाईंले स्टोरमै डेटा फिल्टर र सर्ट गर्न सक्नुहुन्छ, जुन एकदमै 'Reactive' हुन्छ:
134
83
 
135
- ```bash
136
- ENCRYPTION_KEY=तपाईँको_गोप्य_कि
137
- GEMINI_API_KEY=तपाईँको_जेमिनाई_कि
138
- ```
139
-
140
- ```typescript
141
- import { createAuth } from 'dolphin-server-modules/auth';
84
+ ```javascript
85
+ // १. मूल्य १००० भन्दा बढी भएका सामान मात्र फिल्टर गर्ने
86
+ dolphin.store.products.where(p => p.price > 1000);
142
87
 
143
- const auth = createAuth({
144
- secret: process.env.ENCRYPTION_KEY
145
- });
88
+ // २. नामको आधारमा मिलाउने (A to Z)
89
+ dolphin.store.products.orderBy('name', 'asc');
146
90
 
147
- // कुनै रूटलाई सुरक्षित बनाउन (v1.4.7: मिडलवेयर चेन सपोर्ट!)
148
- app.get('/profile', auth.requireAuth, async (ctx) => {
149
- // यहाँ पुगेको युजर भेरिफाई भइसकेको हुन्छ
150
- return { user: ctx.req.user };
151
- });
91
+ // ३. सबै फिल्टर हटाउने
92
+ dolphin.store.products.clear();
152
93
  ```
153
94
 
154
95
  ---
155
96
 
156
- ## ९. अटोमेटेड CRUD (Automated API)
97
+ ## ५. DolphinPersist: अफलाइन क्यासिङ [NEW v2.2.5]
157
98
 
158
- Dolphin को सबैभन्दा राम्रो कुरा भनेको अटोमेटिक CRUD हो। तपाईँलाई कोड लेखिरहनु पर्दैन।
99
+ यदि तपाईं इन्टरनेट नहुँदा पनि आफ्नो डेटा स्टोरमा राखिरहन चाहनुहुन्छ भने `DolphinPersist` प्रयोग गर्नुहोस्।
159
100
 
160
- ```typescript
161
- // सबै युजरको CRUD अपरेसन अटोमेटिक बनाउनुहोस्
162
- app.get('/api/users', async (ctx) => {
163
- const users = await db.User.find();
164
- ctx.json(users);
165
- });
166
- // वा Dolphin को CRUD कन्ट्रोलर प्रयोग गर्नुहोस्
101
+ ```html
102
+ <script src="/dolphin-client.js"></script>
103
+ <script src="path/to/dolphin-persist.js"></script>
104
+
105
+ <script>
106
+ // IndexedDB प्रयोग गरेर अफलाइन क्यासिङ सेट गर्ने
107
+ const persist = new DolphinPersist({ driver: 'indexeddb' });
108
+ enablePersist(dolphin.store, persist);
109
+
110
+ // अब पेज रिफ्रेस गर्दा वा इन्टरनेट नहुँदा पनि पुरानो डेटा तुरुन्तै देखिन्छ।
111
+ </script>
167
112
  ```
168
113
 
169
114
  ---
170
115
 
171
- ## १०. भ्यालिडेसन (Zod Validation)
172
-
173
- युजरले पठाएको डाटाहरू चेक गर्न Zod प्रयोग गर्नुहोस्।
174
-
175
- ```typescript
176
- import { z } from 'zod';
177
- import { validate } from 'dolphin-server-modules/middleware/zod';
178
-
179
- const registerSchema = z.object({
180
- email: z.string().email(),
181
- password: z.string().min(6)
182
- });
183
-
184
- app.post('/register', validate(registerSchema), (ctx) => {
185
- ctx.json({ message: "Valid Data!" });
186
- });
187
- ```
116
+ ## ६. अटोमेटेड CRUD (Mongoose सँग)
188
117
 
189
- ---
118
+ Dolphin ले डेटाबेससँग काम गर्न अटोमेटेड CRUD सुविधा दिन्छ।
190
119
 
191
- ## ११. रियलटाइम र IoT (Realtime & IoT Core) [NEW]
192
- Dolphin ले अब उच्च क्षमताको रियलटाइम कम्युनिकेसन सपोर्ट गर्छ।
193
-
194
- ```typescript
195
- import { RealtimeCore, JSONPlugin } from 'dolphin-server-modules/realtime';
120
+ ```javascript
121
+ import { createMongooseAdapter } from 'dolphin-server-modules/adapters/mongoose';
122
+ import { createCRUD } from 'dolphin-server-modules/curd';
196
123
 
197
- const rt = new RealtimeCore();
198
- rt.use(JSONPlugin);
124
+ // १. एड्याप्टर बनाउने
125
+ const db = createMongooseAdapter({ User, Product });
199
126
 
200
- // टपिकहरूमा सब्सक्राइब (Subscribe) गर्नुहोस्
201
- rt.subscribe('sensors/+', (ctx) => {
202
- console.log(`टपिक: ${ctx.topic}, डाटा:`, ctx.payload);
127
+ // २. CRUD सर्भिस सुरु गर्ने
128
+ const crud = createCRUD(db, {
129
+ enforceOwnership: false, // सबैका लागि खुला गर्न
130
+ realtime: true // रियल-टाइम सिङ्क इनेबल गर्न
203
131
  });
204
132
 
205
- // पब्लिस (Publish) गर्नुहोस्
206
- rt.publish('sensors/temp', { value: 24.5 });
207
- ```
208
-
209
- ---
210
-
211
- ## १२. इन्डिपेन्डेन्ट राउटिङ (Independent Routing) [NEW]
212
- ठूला एप्लिकेसनहरूलाई व्यवस्थित गर्न अलग-अलग फाइलमा राउट्हरू राख्न सकिन्छ:
213
-
214
- ```typescript
215
- // routes.ts
216
- import { createDolphinRouter } from 'dolphin-server-modules/router';
217
- export const apiRouter = createDolphinRouter();
218
- apiRouter.get('/ping', (ctx) => ctx.json({ msg: 'pong' }));
219
-
220
- // index.ts
221
- import { apiRouter } from './routes';
222
- app.use('/api', apiRouter); // Route अब /api/ping मा उपलब्ध छ
223
- ```
224
-
225
- ---
226
-
227
- ## १३. Universal Signaling (WebRTC & IoT) [NEW]
228
- Dolphin v1.6.0 बाट नयाँ "Universal Signaling Module" थपिएको छ जसमा फोन, IoT र मेडिकल डिभाइस कन्ट्रोल गर्न सकिन्छ।
229
-
230
- ```typescript
231
- import { createSignaling } from 'dolphin-server-modules/signaling';
232
- const signaling = createSignaling(rt);
233
-
234
- // IoT कमाण्ड पठाउन
235
- await signaling.sendCommand('DoctorApp', 'Machine_01', { action: 'START' });
236
- ```
237
-
238
- ---
239
-
240
- ## १५. डल्फिन क्लाइन्ट लाइब्रेरी (Full-stack Client Library) [NEW]
241
-
242
- डल्फिन सर्भरले अब आफैँ एउटा हलुका क्लाइन्ट लाइब्रेरी उपलब्ध गराउँछ। यसका लागि तपाईँले NPM इन्स्टल गर्नु पर्दैन।
243
-
244
- ### क. लाइब्रेरी लोड गर्ने
245
- ```html
246
- <script src="/dolphin-client.js"></script>
247
- ```
248
-
249
- ### ख. प्रयोग गर्ने तरिका (API, Auth & Realtime)
250
- ```javascript
251
- // १. अटो-इनिशियलाइज्ड 'dolphin' अब्जेक्ट प्रयोग गर्नुहोस्
252
- async function setup() {
253
- // २. लगइन गर्ने
254
- await dolphin.auth.login("admin@test.com", "password");
255
-
256
- // ३. डेटा फेच गर्ने (अटोमेटिक टोकन म्यानेजमेन्ट)
257
- const products = await dolphin.api.get('/products');
258
-
259
- // ४. रियल-टाइम पब-सब (Pub/Sub)
260
- await dolphin.connect();
261
- dolphin.subscribe("alerts", (data) => console.log("Alert:", data));
262
- }
133
+ // ३. रुटहरूमा जोड्ने
134
+ app.get('/products', async (ctx) => ctx.json(await crud.read('Product')));
263
135
  ```
264
136
 
265
137
  ---
266
138
 
267
- ## १६. अन्तिममा (Conclusion)
139
+ ## ७. अन्तिममा (Conclusion)
268
140
 
269
- Dolphin Framework निकै छिटो सजिलो छ। यसले तपाईँको ब्याकइन्ड डेभलपमेन्टको अनुभवलाई नयाँ उचाइमा पुर्‍याउँछ।
141
+ Dolphin Framework अब एउटा पूर्ण 'Full-stack' ब्याकइन्ड इकोसिस्टम बनेको छ। यसले ब्याकइन्डमा मात्र होइन, फ्रन्टइन्डको डेटा सिङ्क र अफलाइन म्यानेजमेन्टमा पनि मद्दत गर्छ।
270
142
 
271
143
  **थप जानकारीको लागि:**
272
144
  - [Official Documentation](https://github.com/Phuyalshankar/dolphin-server-modules)
273
- - माथिका सबै स्टेपहरू मिलाएर एउटा `app.ts` फाइल बनाउनुहोस् र रन गर्नुहोस्!
145
+ - [README.md](README.md) हेर्नुहोस्।
274
146
 
275
147
  **Happy Coding in Nepali! 🇳🇵🐬**
package/dist/bin/cli.js CHANGED
@@ -74,14 +74,53 @@ export function setup${name}CRUD(dbAdapter) {
74
74
  update: async (ctx) => ctx.json(await service.updateOne(COLLECTION, ctx.params.id, ctx.body)),
75
75
  delete: async (ctx) => ctx.json(await service.deleteOne(COLLECTION, ctx.params.id))
76
76
  };
77
- }`
77
+ }`,
78
+ authModel: `import mongoose from 'mongoose';
79
+
80
+ const UserSchema = new mongoose.Schema({
81
+ email: { type: String, required: true, unique: true },
82
+ password: { type: String, required: true },
83
+ name: { type: String },
84
+ role: { type: String, default: 'user' },
85
+ is2FAEnabled: { type: Boolean, default: false },
86
+ twoFASecret: { type: String },
87
+ recoveryCodes: [{ type: String }],
88
+ createdAt: { type: Date, default: Date.now }
89
+ });
90
+
91
+ const RefreshTokenSchema = new mongoose.Schema({
92
+ userId: { type: mongoose.Schema.Types.ObjectId, ref: 'User', required: true },
93
+ token: { type: String, required: true },
94
+ expiresAt: { type: Date, required: true },
95
+ createdAt: { type: Date, default: Date.now }
96
+ });
97
+
98
+ export const User = mongoose.model('User', UserSchema);
99
+ export const RefreshToken = mongoose.model('RefreshToken', RefreshTokenSchema);`
78
100
  };
101
+ function loadEnv() {
102
+ const envPath = path_1.default.join(process.cwd(), '.env');
103
+ if (fs_1.default.existsSync(envPath)) {
104
+ const content = fs_1.default.readFileSync(envPath, 'utf8');
105
+ content.split(/\r?\n/).forEach(line => {
106
+ const trimmedLine = line.trim();
107
+ if (!trimmedLine || trimmedLine.startsWith('#'))
108
+ return;
109
+ const [key, ...valueParts] = trimmedLine.split('=');
110
+ if (key && valueParts.length > 0) {
111
+ const value = valueParts.join('=').trim().replace(/^["']|["']$/g, '');
112
+ process.env[key.trim()] = value;
113
+ }
114
+ });
115
+ }
116
+ }
79
117
  async function run() {
118
+ loadEnv();
80
119
  switch (command) {
81
120
  case 'generate':
82
121
  const requestedModel = args.find(arg => arg.startsWith('--model='))?.split('=')[1] || 'gemini-flash-latest';
83
122
  const prompt = args.filter(arg => !arg.startsWith('--')).slice(1).join(' ');
84
- const apiKey = process.env.GEMINI_API_KEY;
123
+ const apiKey = (process.env.GEMINI_API_KEY || '').trim();
85
124
  if (!apiKey) {
86
125
  console.log('❌ Error: GEMINI_API_KEY environment variable is not set.');
87
126
  console.log('💡 Get a free key at: https://aistudio.google.com/app/apikey');
@@ -154,6 +193,99 @@ async function run() {
154
193
  };
155
194
  tryGenerate(0, 0);
156
195
  break;
196
+ case 'generate-full':
197
+ const fullRequestedModel = args.find(arg => arg.startsWith('--model='))?.split('=')[1] || 'gemini-1.5-flash';
198
+ const fullPrompt = args.filter(arg => !arg.startsWith('--')).slice(1).join(' ');
199
+ const fullApiKey = (process.env.GEMINI_API_KEY || '').trim();
200
+ if (!fullApiKey) {
201
+ console.log('❌ Error: GEMINI_API_KEY environment variable is not set.');
202
+ break;
203
+ }
204
+ if (!fullPrompt) {
205
+ console.log('❌ Please provide a prompt. Example: dolphin generate-full "a laundry management system"');
206
+ break;
207
+ }
208
+ console.log(`🤖 AI is architecting a full production-grade system...`);
209
+ const tryGenerateFull = (modelIndex, versionIndex) => {
210
+ const modelsToTry = ['gemini-1.5-flash-latest', 'gemini-flash-latest', 'gemini-1.5-pro-latest', 'gemini-pro-latest'];
211
+ const versions = ['v1beta', 'v1'];
212
+ if (modelIndex >= modelsToTry.length) {
213
+ console.log('❌ All AI models failed for full architecture. Please check your prompt or API limits.');
214
+ return;
215
+ }
216
+ if (versionIndex >= versions.length) {
217
+ return tryGenerateFull(modelIndex + 1, 0);
218
+ }
219
+ const currentModel = modelsToTry[modelIndex];
220
+ const currentVersion = versions[versionIndex];
221
+ console.log(`🤖 AI (${currentModel} via ${currentVersion}) is architecting...`);
222
+ const aiData = JSON.stringify({
223
+ contents: [{ parts: [{ text: `Generate a full production-ready modular Node.js project structure using dolphin-server-modules.
224
+ Rules:
225
+ 1. Return ONLY a valid JSON object.
226
+ 2. Keys are file paths (e.g., "routes/user.js", "models/User.js", "app.js").
227
+ 3. Values are the file contents as strings.
228
+ 4. Use ESM 'import'.
229
+ 5. Use Dolphin unified context '(ctx) => { ... }'.
230
+ 6. Include folders: models, controllers, routes, middleware, config.
231
+ Context: ${fullPrompt}.
232
+ Return ONLY the JSON. No markdown backticks, no text before or after.` }] }]
233
+ });
234
+ const options = {
235
+ hostname: 'generativelanguage.googleapis.com',
236
+ path: `/${currentVersion}/models/${currentModel}:generateContent?key=${fullApiKey}`,
237
+ method: 'POST',
238
+ headers: { 'Content-Type': 'application/json' }
239
+ };
240
+ const req = https_1.default.request(options, (res) => {
241
+ let body = '';
242
+ res.on('data', (d) => body += d);
243
+ res.on('end', () => {
244
+ try {
245
+ const json = JSON.parse(body);
246
+ if (json.error) {
247
+ console.log(`⚠️ ${currentModel} (${currentVersion}) error: ${json.error.message}. Trying next...`);
248
+ return tryGenerateFull(modelIndex, versionIndex + 1);
249
+ }
250
+ const rawJson = json.candidates?.[0]?.content?.parts?.[0]?.text || '';
251
+ const cleanJson = rawJson.replace(/```json|```/g, '').trim();
252
+ const jsonMatch = cleanJson.match(/\{[\s\S]*\}/);
253
+ if (jsonMatch) {
254
+ try {
255
+ const files = JSON.parse(jsonMatch[0]);
256
+ Object.keys(files).forEach(filePath => {
257
+ const fullPath = path_1.default.join(process.cwd(), filePath);
258
+ const dirPath = path_1.default.dirname(fullPath);
259
+ if (!fs_1.default.existsSync(dirPath)) {
260
+ fs_1.default.mkdirSync(dirPath, { recursive: true });
261
+ }
262
+ fs_1.default.writeFileSync(fullPath, files[filePath]);
263
+ console.log(`📄 Generated: ${filePath}`);
264
+ });
265
+ console.log('✅ Full project architected successfully! 🐬');
266
+ }
267
+ catch (e) {
268
+ console.log('❌ Error parsing project JSON. Trying next model...');
269
+ tryGenerateFull(modelIndex, versionIndex + 1);
270
+ }
271
+ }
272
+ else {
273
+ console.log('❌ AI failed to return valid JSON. Trying next model...');
274
+ tryGenerateFull(modelIndex, versionIndex + 1);
275
+ }
276
+ }
277
+ catch (e) {
278
+ console.log('❌ Unexpected error. Trying next model...');
279
+ tryGenerateFull(modelIndex, versionIndex + 1);
280
+ }
281
+ });
282
+ });
283
+ req.on('error', () => tryGenerateFull(modelIndex, versionIndex + 1));
284
+ req.write(aiData);
285
+ req.end();
286
+ };
287
+ tryGenerateFull(0, 0);
288
+ break;
157
289
  case 'clean':
158
290
  const filesToClean = ['ai-generated-app.js', 'ai-test-output.js'];
159
291
  filesToClean.forEach(file => {
@@ -198,6 +330,10 @@ async function run() {
198
330
  else {
199
331
  console.log('⚠️ package.json already exists. Skipping...');
200
332
  }
333
+ if (!fs_1.default.existsSync(path_1.default.join(process.cwd(), '.gitignore'))) {
334
+ fs_1.default.writeFileSync(path_1.default.join(process.cwd(), '.gitignore'), '.env\nnode_modules\ndist\n.DS_Store');
335
+ console.log('✅ Created .gitignore');
336
+ }
201
337
  break;
202
338
  case 'add':
203
339
  const type = args[1]; // adapter, auth, crud
@@ -228,18 +364,61 @@ async function run() {
228
364
  console.log('❌ Unknown type. Use "adapter", "auth", or "crud".');
229
365
  }
230
366
  break;
367
+ case 'mongo-auth-model':
368
+ const modelsDir = path_1.default.join(process.cwd(), 'models');
369
+ if (!fs_1.default.existsSync(modelsDir)) {
370
+ fs_1.default.mkdirSync(modelsDir);
371
+ }
372
+ fs_1.default.writeFileSync(path_1.default.join(modelsDir, 'auth-models.js'), TEMPLATES.authModel);
373
+ console.log('✅ Generated fixed Auth models (User, RefreshToken) in models/auth-models.js');
374
+ break;
375
+ case 'init-prod':
376
+ console.log('🚀 Scaffolding Production-Ready Dolphin Project...');
377
+ const dirs = ['models', 'controllers', 'routes', 'middleware', 'services', 'config'];
378
+ dirs.forEach(dir => {
379
+ const dirPath = path_1.default.join(process.cwd(), dir);
380
+ if (!fs_1.default.existsSync(dirPath)) {
381
+ fs_1.default.mkdirSync(dirPath);
382
+ console.log(`📁 Created: /${dir}`);
383
+ }
384
+ });
385
+ // Create basic files in the structure
386
+ fs_1.default.writeFileSync(path_1.default.join(process.cwd(), 'app.js'), TEMPLATES.app);
387
+ fs_1.default.writeFileSync(path_1.default.join(process.cwd(), 'config', 'db.js'), TEMPLATES.mongoose);
388
+ if (!fs_1.default.existsSync(path_1.default.join(process.cwd(), 'package.json'))) {
389
+ fs_1.default.writeFileSync(path_1.default.join(process.cwd(), 'package.json'), JSON.stringify({
390
+ name: path_1.default.basename(process.cwd()),
391
+ version: '1.0.0',
392
+ main: 'app.js',
393
+ type: 'module',
394
+ dependencies: {
395
+ "dolphin-server-modules": "^2.2.4",
396
+ "mongoose": "^8.0.0",
397
+ "zod": "^3.22.0"
398
+ }
399
+ }, null, 2));
400
+ }
401
+ if (!fs_1.default.existsSync(path_1.default.join(process.cwd(), '.gitignore'))) {
402
+ fs_1.default.writeFileSync(path_1.default.join(process.cwd(), '.gitignore'), '.env\nnode_modules\ndist\n.DS_Store');
403
+ console.log('✅ Created .gitignore');
404
+ }
405
+ console.log('✅ Production scaffolding complete. Start swimming! 🐬');
406
+ break;
231
407
  case 'help':
232
408
  default:
233
409
  console.log(`
234
410
  🐬 Dolphin Framework CLI
235
411
  Commands:
236
412
  serve Start a basic development server
237
- init Bootstrap a new Dolphin project
238
- generate <prompt> AI-powered API generation (requires GEMINI_API_KEY)
413
+ init Bootstrap a basic Dolphin project
414
+ init-prod Scaffold a production-grade folder structure
415
+ generate <prompt> AI-powered single-file API generation
416
+ generate-full <prompt> AI-powered full project architecture (folders + files)
239
417
  clean Remove AI generated files
240
418
  add adapter <type> Add a database adapter (mongoose, sequelize)
241
419
  add auth Add a pre-configured Auth controller
242
420
  add crud <Name> Add a pre-configured CRUD controller
421
+ mongo-auth-model Generate fixed Mongoose models for Auth (User, RefreshToken)
243
422
  generate "prompt" --model=gemini-1.5-pro (Custom AI model support)
244
423
 
245
424
  Options:
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/bin/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/bin/cli.ts"],"names":[],"mappings":"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"}