dolphin-server-modules 1.3.6 → 1.3.8
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.
- package/DOLPHIN_MASTER_GUIDE_NEPALI.md +64 -0
- package/README.md +2 -1
- package/dist/adapters/mongoose/index.d.ts +23 -6
- package/dist/adapters/mongoose/index.js +182 -78
- package/dist/adapters/mongoose/index.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/swagger/swagger.d.ts +36 -0
- package/dist/swagger/swagger.js +152 -0
- package/dist/swagger/swagger.js.map +1 -0
- package/package.json +3 -2
|
@@ -20,6 +20,8 @@
|
|
|
20
20
|
- [१२. टेस्टिङ र डेभप्स (Testing & DevOps)](#१२-टेस्टिङ-र-डेभप्स-testing--devops)
|
|
21
21
|
- [१३. भविष्य र योगदान (Future Roadmap)](#१३-भविष्य-र-योगदान-future-roadmap)
|
|
22
22
|
- [१४. रियलटाइम र IoT मास्टरक्लास (Realtime & IoT Masterclass) [NEW]](#१४-रियलटाइम-र-iot-मास्टरक्लास-realtime--iot-masterclass-new)
|
|
23
|
+
- [१५. इन्डिपेन्डेन्ट राउटिङ मास्टरक्लास (Independent Routing) [NEW]](#१५-इन्डिपेन्डेन्ट-राउटिङ-मास्टरक्लास-independent-routing-new)
|
|
24
|
+
- [१६. स्वतन्त्र अटो-स्वैगर जेनेरेसन (Independent Auto-Swagger) [NEW]](#१६-स्वतन्त्र-अटो-स्वैगर-जेनेरेसन-independent-auto-swagger-new)
|
|
23
25
|
|
|
24
26
|
---
|
|
25
27
|
|
|
@@ -589,6 +591,66 @@ app.use('/users', userRouter); // अब यो /users/profile मा चल्
|
|
|
589
591
|
|
|
590
592
|
---
|
|
591
593
|
|
|
594
|
+
## १६. स्वतन्त्र अटो-स्वैगर जेनेरेसन (Independent Auto-Swagger) [NEW]
|
|
595
|
+
|
|
596
|
+
API बनाउँदा सबैभन्दा अल्छीलाग्दो काम भनेको त्यसको डकुमेन्टेसन (Swagger/OpenAPI docs) हातैले लेख्नु हो। Dolphin ले यसलाई १००% अटोमेटिक र **Framework Independent** बनाइदिएको छ।
|
|
597
|
+
|
|
598
|
+
### १६.१ यो किन विशेष छ?
|
|
599
|
+
यसले तपाईँको `Zod` स्किमालाई सिधै पढेर OpenAPI को स्ट्यान्डर्ड JSON निकाल्छ। यसको लागि तपाईँले कुनै मिडलवेयर (`app.use`) सेटअप गरिरहनु पर्दैन। यो जुनसुकै फ्रेमवर्क (Next.js, Express, Fastify, Dolphin) मा काम गर्छ।
|
|
600
|
+
|
|
601
|
+
### १६.२ कसरी प्रयोग गर्ने?
|
|
602
|
+
```typescript
|
|
603
|
+
import { z } from 'zod';
|
|
604
|
+
import { generateSwagger, serveSwaggerUI } from 'dolphin-server-modules/swagger';
|
|
605
|
+
import { createDolphinServer } from 'dolphin-server-modules/server';
|
|
606
|
+
|
|
607
|
+
const app = createDolphinServer();
|
|
608
|
+
|
|
609
|
+
// १. Zod Schema बनाउने
|
|
610
|
+
const UserSchema = z.object({
|
|
611
|
+
name: z.string(),
|
|
612
|
+
email: z.string().email(),
|
|
613
|
+
age: z.number().optional()
|
|
614
|
+
});
|
|
615
|
+
|
|
616
|
+
// २. Swagger Config तयार गर्ने
|
|
617
|
+
const apiDocs = generateSwagger({
|
|
618
|
+
title: "DolphinStore API",
|
|
619
|
+
version: "1.0.0",
|
|
620
|
+
description: "E-Commerce Backend API Provider",
|
|
621
|
+
modules: [
|
|
622
|
+
{
|
|
623
|
+
path: "/users",
|
|
624
|
+
method: "post",
|
|
625
|
+
schema: UserSchema, // बडी रिक्वेस्टको लागि (Body)
|
|
626
|
+
summary: "Create User",
|
|
627
|
+
description: "Registers a new user in the system.",
|
|
628
|
+
tags: ["Users"]
|
|
629
|
+
}
|
|
630
|
+
]
|
|
631
|
+
});
|
|
632
|
+
|
|
633
|
+
// ३. डकुमेन्टेसन सर्भ गर्ने (Swagger UI सँगै)
|
|
634
|
+
app.get('/docs', (ctx) => {
|
|
635
|
+
const html = serveSwaggerUI(apiDocs, "DolphinStore API Docs");
|
|
636
|
+
return ctx.html(html); // सिधै सुन्दर UI देखिन्छ!
|
|
637
|
+
});
|
|
638
|
+
|
|
639
|
+
// ४. JSON मात्र चाहियो भने (फिल्नेटर वा पोस्टम्यानको लागि)
|
|
640
|
+
app.get('/docs/json', (ctx) => ctx.json(apiDocs));
|
|
641
|
+
|
|
642
|
+
app.listen(3000, () => console.log('Swagger UI is live at http://localhost:3000/docs'));
|
|
643
|
+
```
|
|
644
|
+
|
|
645
|
+
### १६.३ यसले के-के सपोर्ट गर्छ?
|
|
646
|
+
- **Zod Types:** `string`, `number`, `boolean`, `array`, `object`, `enum`, `optional()`, र `nullable()` लाई राम्रोसँग बुझ्छ।
|
|
647
|
+
- **Path/Query Params:** `modules` भित्र `params: { id: "string" }` जस्ता कुराहरू सपोर्ट गर्छ।
|
|
648
|
+
- **Response Schema:** `responseSchema: UserSchema` दिएर सफल रेस्पोन्स कस्तो हुन्छ भन्ने देखाउन मिल्छ।
|
|
649
|
+
|
|
650
|
+
यति सेटअप गरेपछि, तपाईँको कोड परिवर्तन हुने बित्तिकै तपाईँको Swagger Docs आफैँ अपडेट हुन्छ!
|
|
651
|
+
|
|
652
|
+
---
|
|
653
|
+
|
|
592
654
|
## निष्कर्ष (Conclusion)
|
|
593
655
|
|
|
594
656
|
बधाई छ! तपाईँले Dolphin Framework को **Master Guide** को अन्त्य सम्म पढ्नुभयो। अब तपाईँ कुनै पनि जटिल ब्याकइन्ड सिस्टम Dolphin प्रयोग गरेर बनाउन पूर्ण सक्षम हुनुहुन्छ।
|
|
@@ -597,3 +659,5 @@ app.use('/users', userRouter); // अब यो /users/profile मा चल्
|
|
|
597
659
|
|
|
598
660
|
**Happy Coding! 🐬🇳🇵**
|
|
599
661
|
**नेपालबाट विश्वस्तरको सफ्टवेयर बनाऔँ!**
|
|
662
|
+
|
|
663
|
+
|
package/README.md
CHANGED
|
@@ -72,6 +72,7 @@ rt.subscribe('factory/machine/+', (data) => {
|
|
|
72
72
|
| **Auth** | `/auth` | Argon2/JWT based secure auth with 2FA support. |
|
|
73
73
|
| **Realtime** | `/realtime` | Pub/Sub engine with `TopicTrie` & Binary Codecs. |
|
|
74
74
|
| **Validation** | `/middleware/zod` | Type-safe validation for Express, Next.js, and Dolphin. |
|
|
75
|
+
| **Swagger Docs** | `/swagger` | Auto-generated OpenAPI docs from Zod schemas (UI included). |
|
|
75
76
|
| **IoT Plugins** | `/realtime/plugins` | Native parsers for HL7, Modbus, and DICOM. |
|
|
76
77
|
| **DB Adapters** | `/adapters` | Mongoose and SQL adapters for rapid CRUD. |
|
|
77
78
|
|
|
@@ -105,8 +106,8 @@ mainApp.use('/api/v1', apiV1); // Accessible at /api/v1/status
|
|
|
105
106
|
## 🗺️ Roadmap
|
|
106
107
|
- [x] Universal Plugin System (HL7/Modbus/Binary)
|
|
107
108
|
- [x] Recursive Sub-routing
|
|
109
|
+
- [x] **Auto-Doc**: Automatic Swagger/OpenAPI generation from Zod schemas.
|
|
108
110
|
- [ ] **Dolphin CLI**: `npx dolphin init` for automated scaffolding.
|
|
109
|
-
- [ ] **Auto-Doc**: Automatic Swagger/OpenAPI generation from Zod schemas.
|
|
110
111
|
|
|
111
112
|
---
|
|
112
113
|
|
|
@@ -3,6 +3,10 @@ export interface MongooseAdapterConfig {
|
|
|
3
3
|
User: Model<any>;
|
|
4
4
|
RefreshToken: Model<any>;
|
|
5
5
|
models?: Record<string, Model<any>>;
|
|
6
|
+
leanByDefault?: boolean;
|
|
7
|
+
maxLimit?: number;
|
|
8
|
+
softDelete?: boolean;
|
|
9
|
+
softDeleteField?: string;
|
|
6
10
|
}
|
|
7
11
|
export declare function createMongooseAdapter(config: MongooseAdapterConfig): {
|
|
8
12
|
createUser(data: any): Promise<any>;
|
|
@@ -12,11 +16,24 @@ export declare function createMongooseAdapter(config: MongooseAdapterConfig): {
|
|
|
12
16
|
saveRefreshToken(data: any): Promise<void>;
|
|
13
17
|
findRefreshToken(token: string): Promise<any>;
|
|
14
18
|
deleteRefreshToken(token: string): Promise<void>;
|
|
15
|
-
create(collection: string, data: any): Promise<any>;
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
19
|
+
create(collection: string, data: any, userId?: string): Promise<any>;
|
|
20
|
+
readOne(collection: string, id: string, userId?: string): Promise<any>;
|
|
21
|
+
read(collection: string, query?: any, options?: any, userId?: string): Promise<any>;
|
|
22
|
+
updateOne(collection: string, id: string, data: any, userId?: string): Promise<any>;
|
|
23
|
+
updateMany(collection: string, query: any, data: any, userId?: string): Promise<number>;
|
|
24
|
+
deleteOne(collection: string, id: string, userId?: string): Promise<any>;
|
|
25
|
+
deleteMany(collection: string, query: any, userId?: string): Promise<number>;
|
|
26
|
+
restore(collection: string, id: string, userId?: string): Promise<any>;
|
|
27
|
+
paginate(collection: string, filter?: any, page?: number, limit?: number, userId?: string): Promise<{
|
|
28
|
+
items: any;
|
|
29
|
+
total: number;
|
|
30
|
+
page: number;
|
|
31
|
+
limit: number;
|
|
32
|
+
totalPages: number;
|
|
33
|
+
hasNext: boolean;
|
|
34
|
+
hasPrev: boolean;
|
|
20
35
|
}>;
|
|
21
|
-
advancedRead(collection: string, query
|
|
36
|
+
advancedRead(collection: string, query?: any, options?: any, userId?: string): Promise<any>;
|
|
37
|
+
count(collection: string, filter?: any, userId?: string): Promise<number>;
|
|
38
|
+
exists(collection: string, filter?: any, userId?: string): Promise<boolean>;
|
|
22
39
|
};
|
|
@@ -2,11 +2,12 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.createMongooseAdapter = createMongooseAdapter;
|
|
4
4
|
function createMongooseAdapter(config) {
|
|
5
|
-
|
|
5
|
+
const { User, RefreshToken, models = {}, leanByDefault = true, maxLimit = 100, softDelete = false, softDeleteField = 'deletedAt' } = config;
|
|
6
|
+
// Fast document mapper
|
|
6
7
|
const mapDoc = (doc) => {
|
|
7
8
|
if (!doc)
|
|
8
9
|
return null;
|
|
9
|
-
const obj = doc.toObject
|
|
10
|
+
const obj = doc.toObject?.() ?? { ...doc };
|
|
10
11
|
if (obj._id) {
|
|
11
12
|
obj.id = obj._id.toString();
|
|
12
13
|
delete obj._id;
|
|
@@ -14,38 +15,32 @@ function createMongooseAdapter(config) {
|
|
|
14
15
|
delete obj.__v;
|
|
15
16
|
return obj;
|
|
16
17
|
};
|
|
17
|
-
//
|
|
18
|
-
const mapQuery = (query) => {
|
|
19
|
-
if (!query)
|
|
18
|
+
// Fast query mapper
|
|
19
|
+
const mapQuery = (query = {}) => {
|
|
20
|
+
if (!query || typeof query !== 'object')
|
|
20
21
|
return {};
|
|
21
|
-
const parsed = {};
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
const ops = {};
|
|
31
|
-
for (const [op, opVal] of Object.entries(val)) {
|
|
32
|
-
if (op === '$like') {
|
|
33
|
-
ops['$regex'] = opVal;
|
|
34
|
-
ops['$options'] = 'i';
|
|
35
|
-
}
|
|
36
|
-
else {
|
|
37
|
-
ops[op] = opVal;
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
parsed[key] = ops;
|
|
41
|
-
}
|
|
42
|
-
else {
|
|
43
|
-
parsed[key] = val;
|
|
22
|
+
const parsed = { ...query };
|
|
23
|
+
if (parsed.id) {
|
|
24
|
+
parsed._id = parsed.id;
|
|
25
|
+
delete parsed.id;
|
|
26
|
+
}
|
|
27
|
+
// Handle $like
|
|
28
|
+
for (const key in parsed) {
|
|
29
|
+
if (parsed[key] && typeof parsed[key] === 'object' && parsed[key].$like) {
|
|
30
|
+
parsed[key] = { $regex: parsed[key].$like, $options: 'i' };
|
|
44
31
|
}
|
|
45
32
|
}
|
|
33
|
+
// Handle $and / $or recursively
|
|
34
|
+
if (parsed.$and)
|
|
35
|
+
parsed.$and = parsed.$and.map(mapQuery);
|
|
36
|
+
if (parsed.$or)
|
|
37
|
+
parsed.$or = parsed.$or.map(mapQuery);
|
|
38
|
+
// Auto exclude soft deleted
|
|
39
|
+
if (softDelete && parsed[softDeleteField] === undefined) {
|
|
40
|
+
parsed[softDeleteField] = null;
|
|
41
|
+
}
|
|
46
42
|
return parsed;
|
|
47
43
|
};
|
|
48
|
-
// Convert standard sorting to Mongoose sort format
|
|
49
44
|
const mapSort = (sort) => {
|
|
50
45
|
if (!sort)
|
|
51
46
|
return undefined;
|
|
@@ -55,99 +50,208 @@ function createMongooseAdapter(config) {
|
|
|
55
50
|
}
|
|
56
51
|
return result;
|
|
57
52
|
};
|
|
58
|
-
// Helper to fetch generic CRUD models
|
|
59
53
|
const getModel = (collection) => {
|
|
60
|
-
if (
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
54
|
+
if (collection === 'User')
|
|
55
|
+
return User;
|
|
56
|
+
if (collection === 'RefreshToken')
|
|
57
|
+
return RefreshToken;
|
|
58
|
+
if (models[collection])
|
|
59
|
+
return models[collection];
|
|
60
|
+
throw new Error(`Model '${collection}' not found`);
|
|
64
61
|
};
|
|
65
62
|
const adapter = {
|
|
66
|
-
//
|
|
67
|
-
// AUTHENTICATION ADAPTER METHODS
|
|
68
|
-
// ==========================================
|
|
63
|
+
// ==================== AUTH METHODS ====================
|
|
69
64
|
async createUser(data) {
|
|
70
|
-
const user = await
|
|
65
|
+
const user = await User.create(data);
|
|
71
66
|
return mapDoc(user);
|
|
72
67
|
},
|
|
73
68
|
async findUserByEmail(email) {
|
|
74
|
-
const user = await
|
|
69
|
+
const user = await User.findOne({ email }).lean(leanByDefault);
|
|
75
70
|
return mapDoc(user);
|
|
76
71
|
},
|
|
77
72
|
async findUserById(id) {
|
|
78
|
-
const user = await
|
|
73
|
+
const user = await User.findById(id).lean(leanByDefault);
|
|
79
74
|
return mapDoc(user);
|
|
80
75
|
},
|
|
81
76
|
async updateUser(id, data) {
|
|
82
|
-
const user = await
|
|
77
|
+
const user = await User.findByIdAndUpdate(id, data, { new: true }).lean(leanByDefault);
|
|
83
78
|
return mapDoc(user);
|
|
84
79
|
},
|
|
85
80
|
async saveRefreshToken(data) {
|
|
86
|
-
await
|
|
81
|
+
await RefreshToken.create(data);
|
|
87
82
|
},
|
|
88
83
|
async findRefreshToken(token) {
|
|
89
|
-
const rt = await
|
|
84
|
+
const rt = await RefreshToken.findOne({ token }).lean(leanByDefault);
|
|
90
85
|
return mapDoc(rt);
|
|
91
86
|
},
|
|
92
87
|
async deleteRefreshToken(token) {
|
|
93
|
-
await
|
|
88
|
+
await RefreshToken.deleteOne({ token });
|
|
94
89
|
},
|
|
95
|
-
//
|
|
96
|
-
//
|
|
97
|
-
|
|
98
|
-
async create(collection, data) {
|
|
90
|
+
// ==================== CRUD METHODS ====================
|
|
91
|
+
// Create
|
|
92
|
+
async create(collection, data, userId) {
|
|
99
93
|
const Model = getModel(collection);
|
|
100
|
-
const
|
|
94
|
+
const docData = { ...data };
|
|
95
|
+
if (userId)
|
|
96
|
+
docData.userId = userId;
|
|
97
|
+
const doc = await Model.create(docData);
|
|
101
98
|
return mapDoc(doc);
|
|
102
99
|
},
|
|
103
|
-
|
|
100
|
+
// Read one
|
|
101
|
+
async readOne(collection, id, userId) {
|
|
104
102
|
const Model = getModel(collection);
|
|
105
|
-
const
|
|
106
|
-
|
|
103
|
+
const query = { _id: id };
|
|
104
|
+
if (userId)
|
|
105
|
+
query.userId = userId;
|
|
106
|
+
if (softDelete)
|
|
107
|
+
query[softDeleteField] = null;
|
|
108
|
+
const doc = await Model.findOne(query).lean(leanByDefault);
|
|
109
|
+
return mapDoc(doc);
|
|
107
110
|
},
|
|
108
|
-
|
|
111
|
+
// Read many
|
|
112
|
+
async read(collection, query = {}, options = {}, userId) {
|
|
109
113
|
const Model = getModel(collection);
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
114
|
+
const filter = mapQuery(query);
|
|
115
|
+
if (userId)
|
|
116
|
+
filter.userId = userId;
|
|
117
|
+
let queryBuilder = Model.find(filter).lean(leanByDefault);
|
|
118
|
+
if (options.sort)
|
|
119
|
+
queryBuilder = queryBuilder.sort(mapSort(options.sort));
|
|
120
|
+
if (options.select)
|
|
121
|
+
queryBuilder = queryBuilder.select(options.select);
|
|
122
|
+
if (options.offset)
|
|
123
|
+
queryBuilder = queryBuilder.skip(options.offset);
|
|
124
|
+
const limit = options.limit ? Math.min(options.limit, maxLimit) : undefined;
|
|
125
|
+
if (limit)
|
|
126
|
+
queryBuilder = queryBuilder.limit(limit);
|
|
127
|
+
const docs = await queryBuilder;
|
|
115
128
|
return docs.map(mapDoc);
|
|
116
129
|
},
|
|
117
|
-
|
|
130
|
+
// Update one
|
|
131
|
+
async updateOne(collection, id, data, userId) {
|
|
118
132
|
const Model = getModel(collection);
|
|
119
|
-
|
|
120
|
-
|
|
133
|
+
const query = { _id: id };
|
|
134
|
+
if (userId)
|
|
135
|
+
query.userId = userId;
|
|
136
|
+
if (softDelete)
|
|
137
|
+
query[softDeleteField] = null;
|
|
138
|
+
const doc = await Model.findOneAndUpdate(query, { ...data, updatedAt: new Date() }, { new: true }).lean(leanByDefault);
|
|
139
|
+
return mapDoc(doc);
|
|
121
140
|
},
|
|
122
|
-
|
|
141
|
+
// Update many
|
|
142
|
+
async updateMany(collection, query, data, userId) {
|
|
123
143
|
const Model = getModel(collection);
|
|
124
|
-
|
|
125
|
-
if (
|
|
126
|
-
|
|
144
|
+
const filter = mapQuery(query);
|
|
145
|
+
if (userId)
|
|
146
|
+
filter.userId = userId;
|
|
147
|
+
const result = await Model.updateMany(filter, { ...data, updatedAt: new Date() });
|
|
148
|
+
return result.modifiedCount;
|
|
149
|
+
},
|
|
150
|
+
// Delete one
|
|
151
|
+
async deleteOne(collection, id, userId) {
|
|
152
|
+
const Model = getModel(collection);
|
|
153
|
+
const query = { _id: id };
|
|
154
|
+
if (userId)
|
|
155
|
+
query.userId = userId;
|
|
156
|
+
if (softDelete) {
|
|
157
|
+
const doc = await Model.findOneAndUpdate(query, { [softDeleteField]: new Date(), updatedAt: new Date() }, { new: true }).lean(leanByDefault);
|
|
158
|
+
return mapDoc(doc);
|
|
127
159
|
}
|
|
128
|
-
|
|
129
|
-
|
|
160
|
+
else {
|
|
161
|
+
const doc = await Model.findOneAndDelete(query).lean(leanByDefault);
|
|
162
|
+
return mapDoc(doc);
|
|
130
163
|
}
|
|
131
|
-
|
|
132
|
-
|
|
164
|
+
},
|
|
165
|
+
// Delete many
|
|
166
|
+
async deleteMany(collection, query, userId) {
|
|
167
|
+
const Model = getModel(collection);
|
|
168
|
+
const filter = mapQuery(query);
|
|
169
|
+
if (userId)
|
|
170
|
+
filter.userId = userId;
|
|
171
|
+
if (softDelete) {
|
|
172
|
+
const result = await Model.updateMany(filter, { [softDeleteField]: new Date(), updatedAt: new Date() });
|
|
173
|
+
return result.modifiedCount;
|
|
133
174
|
}
|
|
134
|
-
|
|
175
|
+
else {
|
|
176
|
+
const result = await Model.deleteMany(filter);
|
|
177
|
+
return result.deletedCount;
|
|
178
|
+
}
|
|
179
|
+
},
|
|
180
|
+
// Restore (soft delete only)
|
|
181
|
+
async restore(collection, id, userId) {
|
|
182
|
+
if (!softDelete)
|
|
183
|
+
throw new Error('Soft delete not enabled');
|
|
184
|
+
const Model = getModel(collection);
|
|
185
|
+
const query = { _id: id, [softDeleteField]: { $ne: null } };
|
|
186
|
+
if (userId)
|
|
187
|
+
query.userId = userId;
|
|
188
|
+
const doc = await Model.findOneAndUpdate(query, { [softDeleteField]: null, updatedAt: new Date() }, { new: true }).lean(leanByDefault);
|
|
189
|
+
return mapDoc(doc);
|
|
190
|
+
},
|
|
191
|
+
// Pagination
|
|
192
|
+
async paginate(collection, filter = {}, page = 1, limit = 20, userId) {
|
|
193
|
+
const Model = getModel(collection);
|
|
194
|
+
const query = mapQuery(filter);
|
|
195
|
+
if (userId)
|
|
196
|
+
query.userId = userId;
|
|
197
|
+
const safeLimit = Math.min(limit, maxLimit);
|
|
198
|
+
const skip = (page - 1) * safeLimit;
|
|
199
|
+
const [items, total] = await Promise.all([
|
|
200
|
+
Model.find(query).skip(skip).limit(safeLimit).lean(leanByDefault),
|
|
201
|
+
Model.countDocuments(query)
|
|
202
|
+
]);
|
|
203
|
+
return {
|
|
204
|
+
items: items.map(mapDoc),
|
|
205
|
+
total,
|
|
206
|
+
page,
|
|
207
|
+
limit: safeLimit,
|
|
208
|
+
totalPages: Math.ceil(total / safeLimit),
|
|
209
|
+
hasNext: page * safeLimit < total,
|
|
210
|
+
hasPrev: page > 1
|
|
211
|
+
};
|
|
212
|
+
},
|
|
213
|
+
// Advanced read with full options
|
|
214
|
+
async advancedRead(collection, query = {}, options = {}, userId) {
|
|
215
|
+
const Model = getModel(collection);
|
|
216
|
+
let mQuery = Model.find(mapQuery(query));
|
|
217
|
+
if (userId)
|
|
218
|
+
mQuery = mQuery.where('userId', userId);
|
|
219
|
+
if (options.sort)
|
|
220
|
+
mQuery = mQuery.sort(mapSort(options.sort));
|
|
221
|
+
if (options.select)
|
|
222
|
+
mQuery = mQuery.select(options.select);
|
|
223
|
+
if (options.populate)
|
|
224
|
+
mQuery = mQuery.populate(options.populate);
|
|
225
|
+
if (options.offset !== undefined)
|
|
226
|
+
mQuery = mQuery.skip(options.offset);
|
|
227
|
+
const limit = options.limit ? Math.min(options.limit, maxLimit) : undefined;
|
|
228
|
+
if (limit)
|
|
229
|
+
mQuery = mQuery.limit(limit);
|
|
230
|
+
const docs = await mQuery.lean(leanByDefault);
|
|
135
231
|
return docs.map(mapDoc);
|
|
232
|
+
},
|
|
233
|
+
// Count
|
|
234
|
+
async count(collection, filter = {}, userId) {
|
|
235
|
+
const Model = getModel(collection);
|
|
236
|
+
const query = mapQuery(filter);
|
|
237
|
+
if (userId)
|
|
238
|
+
query.userId = userId;
|
|
239
|
+
return await Model.countDocuments(query);
|
|
240
|
+
},
|
|
241
|
+
// Exists
|
|
242
|
+
async exists(collection, filter = {}, userId) {
|
|
243
|
+
const count = await this.count(collection, filter, userId);
|
|
244
|
+
return count > 0;
|
|
136
245
|
}
|
|
137
246
|
};
|
|
138
|
-
//
|
|
247
|
+
// Attach model shortcuts
|
|
139
248
|
if (config.models) {
|
|
140
249
|
Object.keys(config.models).forEach((key) => {
|
|
141
250
|
adapter[key] = { adapter, collection: key };
|
|
142
251
|
});
|
|
143
252
|
}
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
adapter['User'] = { adapter, collection: 'User' };
|
|
147
|
-
}
|
|
148
|
-
if (config.RefreshToken && (!config.models || !config.models['RefreshToken'])) {
|
|
149
|
-
adapter['RefreshToken'] = { adapter, collection: 'RefreshToken' };
|
|
150
|
-
}
|
|
253
|
+
adapter.User = { adapter, collection: 'User' };
|
|
254
|
+
adapter.RefreshToken = { adapter, collection: 'RefreshToken' };
|
|
151
255
|
return adapter;
|
|
152
256
|
}
|
|
153
257
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../adapters/mongoose/index.ts"],"names":[],"mappings":";;AAQA,sDAsJC;AAtJD,SAAgB,qBAAqB,CAAC,MAA6B;IACjE,0DAA0D;IAC1D,MAAM,MAAM,GAAG,CAAC,GAAQ,EAAE,EAAE;QAC1B,IAAI,CAAC,GAAG;YAAE,OAAO,IAAI,CAAC;QACtB,MAAM,GAAG,GAAG,GAAG,CAAC,QAAQ,IAAI,OAAO,GAAG,CAAC,QAAQ,KAAK,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,EAAE,CAAC;QAC7F,IAAI,GAAG,CAAC,GAAG,EAAE,CAAC;YACZ,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;YAC5B,OAAO,GAAG,CAAC,GAAG,CAAC;QACjB,CAAC;QACD,OAAO,GAAG,CAAC,GAAG,CAAC;QACf,OAAO,GAAG,CAAC;IACb,CAAC,CAAC;IAEF,wDAAwD;IACxD,MAAM,QAAQ,GAAG,CAAC,KAAU,EAAE,EAAE;QAC9B,IAAI,CAAC,KAAK;YAAE,OAAO,EAAE,CAAC;QACtB,MAAM,MAAM,GAAQ,EAAE,CAAC;QACvB,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YAC/C,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;gBACjB,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC;YACtB,CAAC;iBAAM,IAAI,GAAG,KAAK,MAAM,IAAI,GAAG,KAAK,KAAK,EAAE,CAAC;gBAC3C,MAAM,CAAC,GAAG,CAAC,GAAI,GAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAC7C,CAAC;iBAAM,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC1E,MAAM,GAAG,GAAQ,EAAE,CAAC;gBACpB,KAAK,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;oBAC9C,IAAI,EAAE,KAAK,OAAO,EAAE,CAAC;wBACnB,GAAG,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC;wBACtB,GAAG,CAAC,UAAU,CAAC,GAAG,GAAG,CAAC;oBACxB,CAAC;yBAAM,CAAC;wBACN,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC;oBAClB,CAAC;gBACH,CAAC;gBACD,MAAM,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;YACpB,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;YACpB,CAAC;QACH,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC;IAEF,mDAAmD;IACnD,MAAM,OAAO,GAAG,CAAC,IAAqC,EAAE,EAAE;QACxD,IAAI,CAAC,IAAI;YAAE,OAAO,SAAS,CAAC;QAC5B,MAAM,MAAM,GAA2B,EAAE,CAAC;QAC1C,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1C,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACnC,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC;IAEF,sCAAsC;IACtC,MAAM,QAAQ,GAAG,CAAC,UAAkB,EAAc,EAAE;QAClD,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC;YACjD,MAAM,IAAI,KAAK,CAAC,yBAAyB,UAAU,sCAAsC,CAAC,CAAC;QAC7F,CAAC;QACD,OAAO,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IACnC,CAAC,CAAC;IAEF,MAAM,OAAO,GAAG;QACd,6CAA6C;QAC7C,iCAAiC;QACjC,6CAA6C;QAC7C,KAAK,CAAC,UAAU,CAAC,IAAS;YACxB,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAC5C,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC;QACtB,CAAC;QACD,KAAK,CAAC,eAAe,CAAC,KAAa;YACjC,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;YAClD,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC;QACtB,CAAC;QACD,KAAK,CAAC,YAAY,CAAC,EAAU;YAC3B,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;YAC5C,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC;QACtB,CAAC;QACD,KAAK,CAAC,UAAU,CAAC,EAAU,EAAE,IAAS;YACpC,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;YAC1E,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC;QACtB,CAAC;QACD,KAAK,CAAC,gBAAgB,CAAC,IAAS;YAC9B,MAAM,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACzC,CAAC;QACD,KAAK,CAAC,gBAAgB,CAAC,KAAa;YAClC,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;YACxD,OAAO,MAAM,CAAC,EAAE,CAAC,CAAC;QACpB,CAAC;QACD,KAAK,CAAC,kBAAkB,CAAC,KAAa;YACpC,MAAM,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;QACjD,CAAC;QAED,6CAA6C;QAC7C,uBAAuB;QACvB,6CAA6C;QAC7C,KAAK,CAAC,MAAM,CAAC,UAAkB,EAAE,IAAS;YACxC,MAAM,KAAK,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAC;YACnC,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACrC,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;QACrB,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,UAAkB,EAAE,KAAU;YACvC,MAAM,KAAK,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAC;YACnC,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;YAC/C,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC1B,CAAC;QACD,KAAK,CAAC,MAAM,CAAC,UAAkB,EAAE,KAAU,EAAE,IAAS;YACpD,MAAM,KAAK,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAC;YACnC,MAAM,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,CAAC;YAE9C,2EAA2E;YAC3E,6GAA6G;YAC7G,mGAAmG;YACnG,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,GAAG,KAAK,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC;YAC/D,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC1B,CAAC;QACD,KAAK,CAAC,MAAM,CAAC,UAAkB,EAAE,KAAU;YACzC,MAAM,KAAK,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAC;YACnC,MAAM,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;YACxC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAC3B,CAAC;QACD,KAAK,CAAC,YAAY,CAAC,UAAkB,EAAE,KAAU,EAAE,OAAY;YAC7D,MAAM,KAAK,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAC;YACnC,IAAI,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;YACzC,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;gBACjB,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;YAC9C,CAAC;YACD,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;gBACjC,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YACvC,CAAC;YACD,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;gBAChC,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YACvC,CAAC;YACD,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC;YAC1B,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC1B,CAAC;KACF,CAAC;IAEF,8EAA8E;IAC9E,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAClB,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;YACxC,OAAe,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC;QACvD,CAAC,CAAC,CAAC;IACL,CAAC;IAED,wFAAwF;IACxF,IAAI,MAAM,CAAC,IAAI,IAAI,CAAC,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC;QAC7D,OAAe,CAAC,MAAM,CAAC,GAAG,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC;IAC7D,CAAC;IACD,IAAI,MAAM,CAAC,YAAY,IAAI,CAAC,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC;QAC7E,OAAe,CAAC,cAAc,CAAC,GAAG,EAAE,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,CAAC;IAC7E,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../adapters/mongoose/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
package/dist/index.js
CHANGED
|
@@ -27,4 +27,5 @@ __exportStar(require("./server/server"), exports);
|
|
|
27
27
|
__exportStar(require("./router/router"), exports);
|
|
28
28
|
// Re-export Realtime
|
|
29
29
|
__exportStar(require("./realtime/index"), exports);
|
|
30
|
+
__exportStar(require("./swagger/swagger"), exports);
|
|
30
31
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,iBAAiB;AACjB,8CAA4B;AAC5B,uBAAuB;AACvB,0DAAwC;AACxC,8DAA8D;AAC9D,oCAMqB;AALnB,kGAAA,UAAU,OAAA;AAMZ,4BAA4B;AAC5B,kDAAgC;AAChC,kDAAgC;AAEhC,qBAAqB;AACrB,mDAAiC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,iBAAiB;AACjB,8CAA4B;AAC5B,uBAAuB;AACvB,0DAAwC;AACxC,8DAA8D;AAC9D,oCAMqB;AALnB,kGAAA,UAAU,OAAA;AAMZ,4BAA4B;AAC5B,kDAAgC;AAChC,kDAAgC;AAEhC,qBAAqB;AACrB,mDAAiC;AACjC,oDAAkC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export declare function zodToJsonSchema(schema: any): any;
|
|
3
|
+
export interface SwaggerConfig {
|
|
4
|
+
title: string;
|
|
5
|
+
version: string;
|
|
6
|
+
description?: string;
|
|
7
|
+
servers?: {
|
|
8
|
+
url: string;
|
|
9
|
+
description?: string;
|
|
10
|
+
}[];
|
|
11
|
+
modules: {
|
|
12
|
+
path: string;
|
|
13
|
+
method: "get" | "post" | "put" | "delete" | "patch";
|
|
14
|
+
summary?: string;
|
|
15
|
+
description?: string;
|
|
16
|
+
tags?: string[];
|
|
17
|
+
schema?: z.ZodTypeAny;
|
|
18
|
+
responseSchema?: z.ZodTypeAny;
|
|
19
|
+
params?: Record<string, "string" | "number" | "boolean">;
|
|
20
|
+
query?: Record<string, "string" | "number" | "boolean">;
|
|
21
|
+
}[];
|
|
22
|
+
}
|
|
23
|
+
export declare function generateSwagger(config: SwaggerConfig): {
|
|
24
|
+
openapi: string;
|
|
25
|
+
info: {
|
|
26
|
+
title: string;
|
|
27
|
+
version: string;
|
|
28
|
+
description: string;
|
|
29
|
+
};
|
|
30
|
+
servers: {
|
|
31
|
+
url: string;
|
|
32
|
+
description?: string;
|
|
33
|
+
}[];
|
|
34
|
+
paths: any;
|
|
35
|
+
};
|
|
36
|
+
export declare function serveSwaggerUI(swaggerJson: any, title?: string): string;
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.zodToJsonSchema = zodToJsonSchema;
|
|
4
|
+
exports.generateSwagger = generateSwagger;
|
|
5
|
+
exports.serveSwaggerUI = serveSwaggerUI;
|
|
6
|
+
function zodToJsonSchema(schema) {
|
|
7
|
+
if (!schema || !schema._def)
|
|
8
|
+
return { type: "string" };
|
|
9
|
+
const typeName = schema._def.typeName || schema._def.type;
|
|
10
|
+
// Convert standard Zod names or Zod Lite names
|
|
11
|
+
const normalizedType = typeof typeName === 'string' ? typeName.replace('Zod', '').toLowerCase() : '';
|
|
12
|
+
if (normalizedType === "string") {
|
|
13
|
+
return { type: "string" };
|
|
14
|
+
}
|
|
15
|
+
else if (normalizedType === "number") {
|
|
16
|
+
return { type: "number" };
|
|
17
|
+
}
|
|
18
|
+
else if (normalizedType === "boolean") {
|
|
19
|
+
return { type: "boolean" };
|
|
20
|
+
}
|
|
21
|
+
else if (normalizedType === "array") {
|
|
22
|
+
return {
|
|
23
|
+
type: "array",
|
|
24
|
+
items: zodToJsonSchema(schema._def.type || schema._def.element)
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
else if (normalizedType === "object") {
|
|
28
|
+
const rawShape = schema._def.shape;
|
|
29
|
+
const shape = typeof rawShape === "function" ? rawShape() : rawShape;
|
|
30
|
+
const properties = {};
|
|
31
|
+
const required = [];
|
|
32
|
+
for (const [key, propSchema] of Object.entries(shape || {})) {
|
|
33
|
+
const propDef = propSchema._def;
|
|
34
|
+
let innerSchema = propSchema;
|
|
35
|
+
let isRequired = true;
|
|
36
|
+
const propType = propDef?.typeName || propDef?.type;
|
|
37
|
+
const normPropType = typeof propType === 'string' ? propType.replace('Zod', '').toLowerCase() : '';
|
|
38
|
+
if (normPropType === "optional" || normPropType === "nullable") {
|
|
39
|
+
isRequired = false;
|
|
40
|
+
innerSchema = propDef.innerType;
|
|
41
|
+
}
|
|
42
|
+
properties[key] = zodToJsonSchema(innerSchema);
|
|
43
|
+
if (isRequired)
|
|
44
|
+
required.push(key);
|
|
45
|
+
}
|
|
46
|
+
const schemaObj = { type: "object", properties };
|
|
47
|
+
if (required.length > 0)
|
|
48
|
+
schemaObj.required = required;
|
|
49
|
+
return schemaObj;
|
|
50
|
+
}
|
|
51
|
+
else if (normalizedType === "optional" || normalizedType === "nullable") {
|
|
52
|
+
return zodToJsonSchema(schema._def.innerType);
|
|
53
|
+
}
|
|
54
|
+
else if (normalizedType === "enum") {
|
|
55
|
+
return { type: "string", enum: schema._def.values || schema._def.entries };
|
|
56
|
+
}
|
|
57
|
+
return { type: "string" }; // default fallback
|
|
58
|
+
}
|
|
59
|
+
function generateSwagger(config) {
|
|
60
|
+
const paths = {};
|
|
61
|
+
for (const mod of config.modules) {
|
|
62
|
+
if (!paths[mod.path])
|
|
63
|
+
paths[mod.path] = {};
|
|
64
|
+
const operation = {
|
|
65
|
+
summary: mod.summary || `Endpoint for ${mod.path}`,
|
|
66
|
+
description: mod.description,
|
|
67
|
+
tags: mod.tags || ["API"],
|
|
68
|
+
responses: {
|
|
69
|
+
"200": {
|
|
70
|
+
description: "Successful response"
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
};
|
|
74
|
+
const parameters = [];
|
|
75
|
+
if (mod.params) {
|
|
76
|
+
for (const [k, v] of Object.entries(mod.params)) {
|
|
77
|
+
parameters.push({ name: k, in: "path", required: true, schema: { type: v } });
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
if (mod.query) {
|
|
81
|
+
for (const [k, v] of Object.entries(mod.query)) {
|
|
82
|
+
parameters.push({ name: k, in: "query", required: false, schema: { type: v } });
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
if (parameters.length > 0) {
|
|
86
|
+
operation.parameters = parameters;
|
|
87
|
+
}
|
|
88
|
+
if (mod.schema && ['post', 'put', 'patch'].includes(mod.method.toLowerCase())) {
|
|
89
|
+
operation.requestBody = {
|
|
90
|
+
required: true,
|
|
91
|
+
content: {
|
|
92
|
+
"application/json": {
|
|
93
|
+
schema: zodToJsonSchema(mod.schema)
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
if (mod.responseSchema) {
|
|
99
|
+
operation.responses["200"].content = {
|
|
100
|
+
"application/json": {
|
|
101
|
+
schema: zodToJsonSchema(mod.responseSchema)
|
|
102
|
+
}
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
paths[mod.path][mod.method.toLowerCase()] = operation;
|
|
106
|
+
}
|
|
107
|
+
return {
|
|
108
|
+
openapi: "3.0.0",
|
|
109
|
+
info: {
|
|
110
|
+
title: config.title,
|
|
111
|
+
version: config.version,
|
|
112
|
+
description: config.description || "Auto-generated API Docs",
|
|
113
|
+
},
|
|
114
|
+
servers: config.servers || [{ url: "/" }],
|
|
115
|
+
paths
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
function serveSwaggerUI(swaggerJson, title = 'API Documentation') {
|
|
119
|
+
return `
|
|
120
|
+
<!DOCTYPE html>
|
|
121
|
+
<html lang="en">
|
|
122
|
+
<head>
|
|
123
|
+
<meta charset="UTF-8">
|
|
124
|
+
<title>${title}</title>
|
|
125
|
+
<link rel="stylesheet" href="https://unpkg.com/swagger-ui-dist@4/swagger-ui.css" />
|
|
126
|
+
<style>
|
|
127
|
+
body { margin: 0; padding: 0; }
|
|
128
|
+
.swagger-ui .topbar { display: none; }
|
|
129
|
+
</style>
|
|
130
|
+
</head>
|
|
131
|
+
<body>
|
|
132
|
+
<div id="swagger-ui"></div>
|
|
133
|
+
<script src="https://unpkg.com/swagger-ui-dist@4/swagger-ui-bundle.js"></script>
|
|
134
|
+
<script>
|
|
135
|
+
window.onload = () => {
|
|
136
|
+
window.ui = SwaggerUIBundle({
|
|
137
|
+
spec: ${JSON.stringify(swaggerJson)},
|
|
138
|
+
dom_id: '#swagger-ui',
|
|
139
|
+
deepLinking: true,
|
|
140
|
+
presets: [
|
|
141
|
+
SwaggerUIBundle.presets.apis,
|
|
142
|
+
SwaggerUIBundle.SwaggerUIStandalonePreset
|
|
143
|
+
],
|
|
144
|
+
layout: "BaseLayout"
|
|
145
|
+
});
|
|
146
|
+
};
|
|
147
|
+
</script>
|
|
148
|
+
</body>
|
|
149
|
+
</html>
|
|
150
|
+
`.trim();
|
|
151
|
+
}
|
|
152
|
+
//# sourceMappingURL=swagger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"swagger.js","sourceRoot":"","sources":["../../swagger/swagger.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dolphin-server-modules",
|
|
3
|
-
"version": "1.3.
|
|
3
|
+
"version": "1.3.8",
|
|
4
4
|
"homepage": "https://github.com/Phuyalshankar/dolphin-server-modules#readme",
|
|
5
5
|
"description": "Core utility modules for Auth, CRUD, and Controllers",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -26,7 +26,8 @@
|
|
|
26
26
|
"./realtime/core": "./dist/realtime/core.js",
|
|
27
27
|
"./realtime/trie": "./dist/realtime/trie.js",
|
|
28
28
|
"./realtime/codec": "./dist/realtime/codec.js",
|
|
29
|
-
"./realtime/plugins": "./dist/realtime/plugins.js"
|
|
29
|
+
"./realtime/plugins": "./dist/realtime/plugins.js",
|
|
30
|
+
"./swagger": "./dist/swagger/swagger.js"
|
|
30
31
|
},
|
|
31
32
|
"scripts": {
|
|
32
33
|
"build": "tsc",
|