dolphin-server-modules 1.5.4 → 1.5.6

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/README.md CHANGED
@@ -1,125 +1,197 @@
1
- # 🐬 Dolphin Framework (v1.4.7)
2
-
3
- **Dolphin** is a 2026-ready, ultra-lightweight, and 100% modular backend ecosystem built on native Node.js. Its not just a framework; its a universal toolkit for Web, Microservices, and Industrial IoT.
4
-
5
- > "Native performance. Express compatibility. IoT-ready."
6
-
7
- ---
8
-
9
- ### 📘 Official Master Guide (Nepal)
10
- Dolphin Framework को विस्तृत र आधिकारिक गाइड अब उपलब्ध छ। यसमा **Auth, CRUD, Models, र Controllers** को १००% ट्युटोरियल समावेश छ।
11
-
12
- 👉 **[Dolphin Master Guide (Markdown)](https://github.com/Phuyalshankar/dolphin-server-modules/blob/main/DOLPHIN_MASTER_GUIDE_NEPALI.md)** *(Most Up-to-Date)*
13
- 👉 **[Dolphin Master Guide (PDF)](https://github.com/Phuyalshankar/dolphin-server-modules/blob/main/DOLPHIN_MASTER_GUIDE_NEPALI.pdf)**
14
-
15
- ---
16
-
17
- ## 🌟 Why Dolphin in 2026?
18
-
19
- - **Zero-Dependency Core**: Built on native `http` & `events`. No bloat.
20
- - **Universal Compatibility**: Use modules in Next.js, Express, or Fastify.
21
- - **Multi-Handler Middleware**: Support for Express-style middleware chains `(ctx, next)`.
22
- - **Auto-JSON Serialization**: Simply `return` an object from your handler!
23
- - **Industrial IoT (IIoT)**: Native support for HL7, Modbus, and DICOM via binary plugins.
24
- - **Unified Context (ctx)**: Modern developer experience with legacy middleware support.
25
-
26
- ---
27
-
28
- ## 📦 Installation
29
- ```bash
30
- npm install dolphin-server-modules
31
- ```
32
-
33
- ---
34
-
35
- ## 🚀 Quick Start: The "Universal" Way
36
-
37
- ### 1. High-Performance Web Server
38
- ```typescript
39
- import { createDolphinServer } from 'dolphin-server-modules/server';
40
-
41
- const app = createDolphinServer();
42
-
43
- // Returning an object automatically sends a JSON response! (v1.4.7)
44
- app.get('/ping', (ctx) => {
45
- return { message: 'pong', version: '1.4.7' };
46
- });
47
-
48
- app.listen(3000, () => console.log("🐬 Dolphin swimming on port 3000"));
49
- ```
50
-
51
- ### 2. Industrial IoT (Modbus/HL7) Support
52
- ```typescript
53
- import { RealtimeCore } from 'dolphin-server-modules/realtime';
54
- import { ModbusPlugin, HL7Plugin } from 'dolphin-server-modules/realtime/plugins';
55
-
56
- const rt = new RealtimeCore();
57
- rt.use(ModbusPlugin);
58
- rt.use(HL7Plugin);
59
-
60
- // Subscribing to factory sensors via Modbus
61
- rt.subscribe('factory/machine/+', (data) => {
62
- console.log(`Sensor Data:`, data.payload.value);
63
- });
64
- ```
65
-
66
- ---
67
-
68
- ## 🛠️ Modular Ecosystem
69
-
70
- | Module | Path | Description |
71
- | :--- | :--- | :--- |
72
- | **Server** | `/server` | Native-based server with `ctx` API & Auto-JSON. |
73
- | **Router** | `/router` | Standalone sub-routers with Multi-Handler support. |
74
- | **Auth** | `/auth` | Argon2/JWT based secure auth with 2FA support. |
75
- | **Realtime** | `/realtime` | Pub/Sub engine with `TopicTrie` & Binary Codecs. |
76
- | **Validation** | `/middleware/zod` | Type-safe validation for Express, Next.js, and Dolphin. |
77
- | **Swagger Docs** | `/swagger` | Auto-generated OpenAPI docs from Zod schemas. |
78
- | **IoT Plugins** | `/realtime/plugins` | Native parsers for HL7, Modbus, and DICOM. |
79
- | **DB Adapters** | `/adapters` | Mongoose and SQL adapters for rapid CRUD. |
80
-
81
- ---
82
-
83
- ## 🛣️ Advanced Middleware & Sub-Routing
84
- Cleanly organize large-scale applications with Express-style middleware:
85
-
86
- ```typescript
87
- import { createDolphinRouter } from 'dolphin-server-modules/router';
88
- import { createDolphinAuthController } from 'dolphin-server-modules/auth-controller';
89
-
90
- const auth = createDolphinAuthController(db, config);
91
- const apiV1 = createDolphinRouter();
92
-
93
- // ✅ NEW: Supports multiple handlers (middleware) per route
94
- apiV1.get('/me', auth.requireAuth, async (ctx) => {
95
- return { user: ctx.req.user }; // Context contains decoded token
96
- });
97
-
98
- const mainApp = createDolphinServer();
99
- mainApp.use('/api/v1', apiV1);
100
- ```
101
-
102
- ---
103
-
104
- ## 📊 2026 Performance Benchmarks
105
-
106
- | Framework | RPS (Req/sec) | Cold Start | Bundle Size |
107
- | :--- | :--- | :--- | :--- |
108
- | Express.js | ~15,000 | 180ms | 2.4 MB |
109
- | Fastify | ~35,000 | 90ms | 1.1 MB |
110
- | **Dolphin** | **45,000+** | **< 10ms** | **~80 KB** |
111
-
112
- ---
113
-
114
- ## 🗺️ Roadmap
115
- - [x] Universal Plugin System (HL7/Modbus/Binary)
116
- - [x] Recursive Sub-routing
117
- - [x] **Auto-Doc**: Automatic Swagger/OpenAPI generation from Zod schemas.
118
- - [x] **Middleware Chains**: Support for `(ctx, next)` in routes.
119
- - [x] **Auto-JSON**: Return objects directly from handlers.
120
- - [ ] **Dolphin CLI**: `npx dolphin init` for automated scaffolding.
121
-
122
- ---
123
-
124
- ## 📄 License
125
- ISC © 2026 Shankar Phuyal & Dolphin Team.
1
+ # 🐬 Dolphin Framework (v1.5.6)
2
+
3
+ **Dolphin** is a 2026-ready, ultra-lightweight, and 100% modular backend ecosystem built on native Node.js. It's not just a framework; it's a universal toolkit for Web, Microservices, and Industrial IoT.
4
+
5
+ > "Native performance. Express compatibility. IoT-ready."
6
+
7
+ ---
8
+
9
+ ### 📘 Official Master Guide (Nepal)
10
+ Dolphin Framework को विस्तृत र आधिकारिक गाइड उपलब्ध छ। यसमा **Auth, CRUD, Models, र Controllers** को १००% ट्युटोरियल समावेश छ।
11
+
12
+ 👉 **[Dolphin Master Guide (Markdown)](https://github.com/Phuyalshankar/dolphin-server-modules/blob/main/DOLPHIN_MASTER_GUIDE_NEPALI.md)** *(Most Up-to-Date)*
13
+ 👉 **[Dolphin Master Guide (PDF)](https://github.com/Phuyalshankar/dolphin-server-modules/blob/main/DOLPHIN_MASTER_GUIDE_NEPALI.pdf)**
14
+
15
+ ---
16
+
17
+ ## 🌟 Why Dolphin in 2026?
18
+
19
+ - **Zero-Dependency Core**: Built on native `http` & `events`. No bloat.
20
+ - **Universal Compatibility**: Works with Mongoose, Zod, WebSocket, and Express-compatible middleware.
21
+ - **Multi-Handler Middleware**: Support for Express-style middleware chains `(ctx, next)`.
22
+ - **Auto-JSON Serialization**: Simply `return` an object from your handler!
23
+ - **Industrial IoT (IIoT)**: Native support for HL7, Modbus, and DICOM via binary plugins.
24
+ - **Unified Context (ctx)**: Modern developer experience with legacy middleware support.
25
+
26
+ ---
27
+
28
+ ## 📦 Installation
29
+ ```bash
30
+ npm install dolphin-server-modules
31
+ ```
32
+
33
+ ---
34
+
35
+ ## 🚀 Quick Start
36
+
37
+ ### 1. High-Performance Web Server
38
+ ```typescript
39
+ import { createDolphinServer } from 'dolphin-server-modules/server';
40
+
41
+ const app = createDolphinServer();
42
+
43
+ app.get('/ping', (ctx) => {
44
+ return { message: 'pong', version: '1.5.6' };
45
+ });
46
+
47
+ app.listen(3000, () => console.log("🐬 Dolphin swimming on port 3000"));
48
+ ```
49
+
50
+ ### 2. Full CRUD API with Mongoose (v1.5.5)
51
+
52
+ > **Important:** Use `enforceOwnership: false` for public APIs (no auth required).
53
+ > Default is `true` — requires `userId` from auth middleware.
54
+
55
+ ```typescript
56
+ import { createDolphinServer } from 'dolphin-server-modules/server';
57
+ import { createMongooseAdapter } from 'dolphin-server-modules/adapters/mongoose';
58
+ import { createCRUD } from 'dolphin-server-modules/crud';
59
+ import mongoose from 'mongoose';
60
+
61
+ // 1. Connect MongoDB
62
+ await mongoose.connect(process.env.MONGO_URI!);
63
+
64
+ // 2. Define Model
65
+ const Product = mongoose.model('Product', new mongoose.Schema({
66
+ name: String, price: Number, category: String
67
+ }));
68
+
69
+ // 3. Create adapter + CRUD service
70
+ const db = createMongooseAdapter({ User, RefreshToken, models: { Product } });
71
+ const crud = createCRUD(db, { enforceOwnership: false }); // public API
72
+
73
+ // 4. Wire routes
74
+ const app = createDolphinServer();
75
+
76
+ app.get('/products', async (ctx) => ctx.json(await crud.read('Product')));
77
+ app.get('/products/:id', async (ctx) => {
78
+ const item = await crud.readOne('Product', ctx.params.id);
79
+ if (!item) return ctx.status(404).json({ error: 'Not Found' });
80
+ ctx.json(item);
81
+ });
82
+ app.post('/products', async (ctx) => ctx.status(201).json(await crud.create('Product', ctx.body)));
83
+ app.put('/products/:id', async (ctx) => ctx.json(await crud.updateOne('Product', ctx.params.id, ctx.body)));
84
+ app.delete('/products/:id', async (ctx) => ctx.json(await crud.deleteOne('Product', ctx.params.id)));
85
+
86
+ app.listen(3000);
87
+ ```
88
+
89
+ ### 3. Industrial IoT (Modbus/HL7) Support
90
+ ```typescript
91
+ import { RealtimeCore } from 'dolphin-server-modules/realtime';
92
+ import { ModbusPlugin, HL7Plugin } from 'dolphin-server-modules/realtime/plugins';
93
+
94
+ const rt = new RealtimeCore();
95
+ rt.use(ModbusPlugin);
96
+ rt.use(HL7Plugin);
97
+
98
+ rt.subscribe('factory/machine/+', (data) => {
99
+ console.log(`Sensor Data:`, data.payload.value);
100
+ });
101
+ ```
102
+
103
+ ---
104
+
105
+ ## 🛠️ Modular Ecosystem
106
+
107
+ | Module | Path | Description |
108
+ | :--- | :--- | :--- |
109
+ | **Server** | `/server` | Native HTTP server with `ctx` API & Auto-JSON. |
110
+ | **Router** | `/router` | Standalone sub-routers with multi-handler support. |
111
+ | **Auth** | `/auth` | Argon2/JWT based secure auth with 2FA (TOTP). |
112
+ | **CRUD** | `/curd` | Generic CRUD service with ownership & soft-delete. |
113
+ | **Auth Controller** | `/auth-controller` | Pre-built auth routes (register, login, refresh). |
114
+ | **Realtime** | `/realtime` | Pub/Sub engine with `TopicTrie` & binary codecs. |
115
+ | **Validation** | `/middleware/zod` | Type-safe Zod validation middleware. |
116
+ | **Swagger Docs** | `/swagger` | Auto-generated OpenAPI docs from Zod schemas. |
117
+ | **IoT Plugins** | `/realtime/plugins` | Native parsers for HL7, Modbus, and DICOM. |
118
+ | **Mongoose Adapter** | `/adapters/mongoose` | Full Mongoose CRUD bridge with query mapping. |
119
+
120
+ ---
121
+
122
+ ## ⚠️ Important: `enforceOwnership` Option
123
+
124
+ The `createCRUD` function has `enforceOwnership: true` by default. This means **every operation requires a `userId`** (from auth middleware). For public APIs, set it to `false`:
125
+
126
+ ```typescript
127
+ // Public API — no auth needed
128
+ const crud = createCRUD(db, { enforceOwnership: false });
129
+
130
+ // Protected API — requires auth middleware to set ctx.req.user
131
+ const crud = createCRUD(db, { enforceOwnership: true });
132
+ ```
133
+
134
+ ---
135
+
136
+ ## 🛣️ Advanced Middleware & Sub-Routing
137
+
138
+ ```typescript
139
+ import { createDolphinRouter } from 'dolphin-server-modules/router';
140
+ import { createDolphinAuthController } from 'dolphin-server-modules/auth-controller';
141
+
142
+ const auth = createDolphinAuthController(db, config);
143
+ const apiV1 = createDolphinRouter();
144
+
145
+ // Multi-handler: middleware + route handler
146
+ apiV1.get('/me', auth.requireAuth, async (ctx) => {
147
+ return { user: ctx.req.user };
148
+ });
149
+
150
+ const mainApp = createDolphinServer();
151
+ mainApp.use('/api/v1', apiV1);
152
+ ```
153
+
154
+ ---
155
+
156
+ ## 🧪 Testing
157
+
158
+ The project uses **Jest** with **ts-jest**. Integration tests use `mongodb-memory-server` for real Mongoose testing without an external database.
159
+
160
+ ```bash
161
+ npm test # Run all 167 tests (12 suites)
162
+ ```
163
+
164
+ | Suite | Tests |
165
+ | :--- | :--- |
166
+ | `adapters/mongoose/integration.test.ts` | 23 (real Mongoose) |
167
+ | `adapters/mongoose/index.test.ts` | 7 |
168
+ | `auth/auth.test.ts` | — |
169
+ | `curd/crud.test.ts` | — |
170
+ | + 8 more suites | — |
171
+
172
+ ---
173
+
174
+ ## 📊 2026 Performance Benchmarks
175
+
176
+ | Framework | RPS (Req/sec) | Cold Start | Bundle Size |
177
+ | :--- | :--- | :--- | :--- |
178
+ | Express.js | ~15,000 | 180ms | 2.4 MB |
179
+ | Fastify | ~35,000 | 90ms | 1.1 MB |
180
+ | **Dolphin** | **45,000+** | **< 10ms** | **~80 KB** |
181
+
182
+ ---
183
+
184
+ ## 🗺️ Roadmap
185
+ - [x] Universal Plugin System (HL7/Modbus/Binary)
186
+ - [x] Recursive Sub-routing
187
+ - [x] Auto-Doc: Automatic Swagger/OpenAPI generation from Zod schemas
188
+ - [x] Middleware Chains: Support for `(ctx, next)` in routes
189
+ - [x] Auto-JSON: Return objects directly from handlers
190
+ - [x] Real Mongoose adapter with `$like`, `id→_id` query mapping
191
+ - [x] Integration test suite with `mongodb-memory-server`
192
+ - [ ] **Dolphin CLI**: `npx dolphin init` for automated scaffolding
193
+
194
+ ---
195
+
196
+ ## 📄 License
197
+ ISC © 2026 Shankar Phuyal & Dolphin Team.
@@ -18,7 +18,7 @@ export declare function createMongooseAdapter(config: MongooseAdapterConfig): {
18
18
  deleteRefreshToken(token: string): Promise<void>;
19
19
  create(collection: string, data: any, userId?: string): Promise<any>;
20
20
  readOne(collection: string, id: string, userId?: string): Promise<any>;
21
- read(collection: string, query?: any, options?: any, userId?: string): Promise<any>;
21
+ readMany(collection: string, query?: any, options?: any, userId?: string): Promise<any>;
22
22
  updateOne(collection: string, id: string, data: any, userId?: string): Promise<any>;
23
23
  updateMany(collection: string, query: any, data: any, userId?: string): Promise<number>;
24
24
  deleteOne(collection: string, id: string, userId?: string): Promise<any>;
@@ -36,4 +36,7 @@ export declare function createMongooseAdapter(config: MongooseAdapterConfig): {
36
36
  advancedRead(collection: string, query?: any, options?: any, userId?: string): Promise<any>;
37
37
  count(collection: string, filter?: any, userId?: string): Promise<number>;
38
38
  exists(collection: string, filter?: any, userId?: string): Promise<boolean>;
39
+ read(collection: string, query?: any): Promise<any>;
40
+ update(collection: string, query: any, data: any): Promise<any>;
41
+ delete(collection: string, query: any): Promise<any>;
39
42
  };
@@ -74,7 +74,7 @@ function createMongooseAdapter(config) {
74
74
  return mapDoc(user);
75
75
  },
76
76
  async updateUser(id, data) {
77
- const user = await User.findByIdAndUpdate(id, data, { new: true }).lean(leanByDefault);
77
+ const user = await User.findByIdAndUpdate(id, data, { returnDocument: 'after' }).lean(leanByDefault);
78
78
  return mapDoc(user);
79
79
  },
80
80
  async saveRefreshToken(data) {
@@ -108,8 +108,8 @@ function createMongooseAdapter(config) {
108
108
  const doc = await Model.findOne(query).lean(leanByDefault);
109
109
  return mapDoc(doc);
110
110
  },
111
- // Read many
112
- async read(collection, query = {}, options = {}, userId) {
111
+ // Read many (internal use)
112
+ async readMany(collection, query = {}, options = {}, userId) {
113
113
  const Model = getModel(collection);
114
114
  const filter = mapQuery(query);
115
115
  if (userId)
@@ -135,7 +135,7 @@ function createMongooseAdapter(config) {
135
135
  query.userId = userId;
136
136
  if (softDelete)
137
137
  query[softDeleteField] = null;
138
- const doc = await Model.findOneAndUpdate(query, { ...data, updatedAt: new Date() }, { new: true }).lean(leanByDefault);
138
+ const doc = await Model.findOneAndUpdate(query, { ...data, updatedAt: new Date() }, { returnDocument: 'after' }).lean(leanByDefault);
139
139
  return mapDoc(doc);
140
140
  },
141
141
  // Update many
@@ -154,7 +154,7 @@ function createMongooseAdapter(config) {
154
154
  if (userId)
155
155
  query.userId = userId;
156
156
  if (softDelete) {
157
- const doc = await Model.findOneAndUpdate(query, { [softDeleteField]: new Date(), updatedAt: new Date() }, { new: true }).lean(leanByDefault);
157
+ const doc = await Model.findOneAndUpdate(query, { [softDeleteField]: new Date(), updatedAt: new Date() }, { returnDocument: 'after' }).lean(leanByDefault);
158
158
  return mapDoc(doc);
159
159
  }
160
160
  else {
@@ -185,7 +185,7 @@ function createMongooseAdapter(config) {
185
185
  const query = { _id: id, [softDeleteField]: { $ne: null } };
186
186
  if (userId)
187
187
  query.userId = userId;
188
- const doc = await Model.findOneAndUpdate(query, { [softDeleteField]: null, updatedAt: new Date() }, { new: true }).lean(leanByDefault);
188
+ const doc = await Model.findOneAndUpdate(query, { [softDeleteField]: null, updatedAt: new Date() }, { returnDocument: 'after' }).lean(leanByDefault);
189
189
  return mapDoc(doc);
190
190
  },
191
191
  // Pagination
@@ -242,6 +242,54 @@ function createMongooseAdapter(config) {
242
242
  async exists(collection, filter = {}, userId) {
243
243
  const count = await this.count(collection, filter, userId);
244
244
  return count > 0;
245
+ },
246
+ // ==================== CRUD CONTROLLER COMPATIBILITY METHODS (FIXED) ====================
247
+ // Read method for CRUD controller
248
+ async read(collection, query = {}) {
249
+ const Model = getModel(collection);
250
+ // mapQuery converts id→_id and $like→$regex across the whole query
251
+ const filter = mapQuery(query);
252
+ // Auto exclude soft deleted if enabled
253
+ if (softDelete && filter[softDeleteField] === undefined) {
254
+ filter[softDeleteField] = null;
255
+ }
256
+ const docs = await Model.find(filter).lean(leanByDefault);
257
+ return docs.map(mapDoc);
258
+ },
259
+ // Update method for CRUD controller
260
+ async update(collection, query, data) {
261
+ // If updating by id
262
+ if (query.id || query._id) {
263
+ const id = query.id || query._id;
264
+ return await this.updateOne(collection, id, data);
265
+ }
266
+ // Otherwise update many with mapQuery
267
+ const Model = getModel(collection);
268
+ const filter = mapQuery(query);
269
+ if (softDelete && filter[softDeleteField] === undefined) {
270
+ filter[softDeleteField] = null;
271
+ }
272
+ const result = await Model.updateMany(filter, { ...data, updatedAt: new Date() });
273
+ return result.modifiedCount;
274
+ },
275
+ // Delete method for CRUD controller
276
+ async delete(collection, query) {
277
+ // If deleting by id
278
+ if (query.id || query._id) {
279
+ const id = query.id || query._id;
280
+ return await this.deleteOne(collection, id);
281
+ }
282
+ // Otherwise delete many with mapQuery
283
+ const Model = getModel(collection);
284
+ const filter = mapQuery(query);
285
+ if (softDelete) {
286
+ const result = await Model.updateMany(filter, { [softDeleteField]: new Date(), updatedAt: new Date() });
287
+ return result.modifiedCount;
288
+ }
289
+ else {
290
+ const result = await Model.deleteMany(filter);
291
+ return result.deletedCount;
292
+ }
245
293
  }
246
294
  };
247
295
  // Attach model shortcuts
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../adapters/mongoose/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../adapters/mongoose/index.ts"],"names":[],"mappings":"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"}
@@ -1,50 +1,59 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ // adapters/mongoose/index.test.ts
3
4
  const index_1 = require("./index");
4
5
  describe('Mongoose Adapter', () => {
5
6
  let adapter;
6
7
  let mockModel;
8
+ let mockChainable;
7
9
  beforeEach(() => {
8
- // Helper to create chainable mock for mongoose queries (generic)
9
- const chainable = (result) => {
10
+ // Helper to create chainable mock for mongoose queries
11
+ const createChainable = (result) => {
10
12
  const chain = {
11
13
  sort: jest.fn().mockReturnThis(),
12
14
  skip: jest.fn().mockReturnThis(),
13
15
  limit: jest.fn().mockReturnThis(),
14
16
  select: jest.fn().mockReturnThis(),
15
- lean: jest.fn().mockResolvedValue(result),
16
- then: jest.fn().mockResolvedValue(result),
17
- exec: jest.fn().mockResolvedValue(result),
17
+ where: jest.fn().mockReturnThis(),
18
+ populate: jest.fn().mockReturnThis(),
19
+ lean: jest.fn().mockResolvedValue(result || []),
20
+ then: jest.fn().mockResolvedValue(result || []),
21
+ exec: jest.fn().mockResolvedValue(result || [])
18
22
  };
19
23
  return chain;
20
24
  };
25
+ mockChainable = createChainable();
21
26
  mockModel = {
22
27
  create: jest.fn(),
23
- find: jest.fn(() => chainable([])),
24
- findOne: jest.fn(() => chainable(undefined)),
25
- findById: jest.fn(() => chainable(undefined)),
26
- findByIdAndUpdate: jest.fn(() => chainable(undefined)),
27
- findByIdAndDelete: jest.fn(() => chainable(undefined)),
28
- findOneAndUpdate: jest.fn(() => chainable(undefined)),
29
- findOneAndDelete: jest.fn(() => chainable(undefined)),
30
- updateMany: jest.fn(),
31
- deleteMany: jest.fn(),
28
+ find: jest.fn(() => createChainable([])),
29
+ findOne: jest.fn(() => createChainable(null)),
30
+ findById: jest.fn(() => createChainable(null)),
31
+ findByIdAndUpdate: jest.fn(() => createChainable(null)),
32
+ findByIdAndDelete: jest.fn(() => createChainable(null)),
33
+ findOneAndUpdate: jest.fn(() => createChainable(null)),
34
+ findOneAndDelete: jest.fn(() => createChainable(null)),
35
+ updateMany: jest.fn().mockResolvedValue({ modifiedCount: 0 }),
36
+ deleteMany: jest.fn().mockResolvedValue({ deletedCount: 0 }),
32
37
  insertMany: jest.fn(),
33
- deleteOne: jest.fn(),
38
+ deleteOne: jest.fn().mockResolvedValue({ deletedCount: 0 }),
34
39
  countDocuments: jest.fn().mockResolvedValue(0),
40
+ updateOne: jest.fn().mockResolvedValue({ modifiedCount: 0 })
35
41
  };
36
42
  adapter = (0, index_1.createMongooseAdapter)({
37
43
  User: mockModel,
38
44
  RefreshToken: mockModel,
39
45
  models: { test: mockModel },
40
46
  leanByDefault: true,
47
+ softDelete: false
41
48
  });
42
49
  });
43
50
  it('should map id to _id and $like in queries', async () => {
51
+ // Call read with id and $like query
44
52
  await adapter.read('test', {
45
53
  id: '123',
46
54
  name: { $like: 'john' }
47
55
  });
56
+ // Verify find was called with converted query
48
57
  expect(mockModel.find).toHaveBeenCalledWith(expect.objectContaining({
49
58
  _id: '123',
50
59
  name: { $regex: 'john', $options: 'i' }
@@ -81,10 +90,19 @@ describe('Mongoose Adapter', () => {
81
90
  lean: jest.fn().mockResolvedValue(mockUpdated)
82
91
  });
83
92
  const result = await adapter.updateOne('test', '123', { name: 'Updated' });
84
- expect(mockModel.findOneAndUpdate).toHaveBeenCalledWith({ _id: '123' }, expect.objectContaining({ name: 'Updated' }), expect.objectContaining({ new: true }));
93
+ expect(mockModel.findOneAndUpdate).toHaveBeenCalledWith({ _id: '123' }, expect.objectContaining({ name: 'Updated', updatedAt: expect.any(Date) }), { returnDocument: 'after' });
85
94
  expect(result.id).toBe('123');
86
95
  });
87
96
  it('should support advancedRead with sort, offset and limit', async () => {
97
+ const mockDocs = [{ _id: '1', name: 'Test 1' }, { _id: '2', name: 'Test 2' }];
98
+ const mockFind = jest.fn().mockReturnValue({
99
+ sort: jest.fn().mockReturnThis(),
100
+ skip: jest.fn().mockReturnThis(),
101
+ limit: jest.fn().mockReturnThis(),
102
+ lean: jest.fn().mockResolvedValue(mockDocs),
103
+ where: jest.fn().mockReturnThis()
104
+ });
105
+ mockModel.find = mockFind;
88
106
  await adapter.advancedRead('test', { status: 'active' }, {
89
107
  sort: { createdAt: 'desc' },
90
108
  offset: 10,
@@ -99,5 +117,31 @@ describe('Mongoose Adapter', () => {
99
117
  expect(adapter.User.collection).toBe('User');
100
118
  expect(adapter.test.collection).toBe('test');
101
119
  });
120
+ // Additional test for read method with empty query
121
+ it('should handle read with empty query', async () => {
122
+ const mockDocs = [{ _id: '1', name: 'Test 1' }, { _id: '2', name: 'Test 2' }];
123
+ mockModel.find.mockReturnValueOnce({
124
+ lean: jest.fn().mockResolvedValue(mockDocs)
125
+ });
126
+ const results = await adapter.read('test', {});
127
+ expect(mockModel.find).toHaveBeenCalledWith({});
128
+ expect(results).toHaveLength(2);
129
+ expect(results[0]).toEqual({ id: '1', name: 'Test 1' });
130
+ expect(results[1]).toEqual({ id: '2', name: 'Test 2' });
131
+ });
132
+ // Test for update method (CRUD controller compatibility)
133
+ it('should support update method for CRUD controller', async () => {
134
+ mockModel.updateMany.mockResolvedValueOnce({ modifiedCount: 2 });
135
+ const result = await adapter.update('test', { category: 'Electronics' }, { price: 100 });
136
+ expect(mockModel.updateMany).toHaveBeenCalledWith({ category: 'Electronics' }, expect.objectContaining({ price: 100, updatedAt: expect.any(Date) }));
137
+ expect(result).toBe(2);
138
+ });
139
+ // Test for delete method (CRUD controller compatibility)
140
+ it('should support delete method for CRUD controller', async () => {
141
+ mockModel.deleteMany.mockResolvedValueOnce({ deletedCount: 3 });
142
+ const result = await adapter.delete('test', { category: 'Old' });
143
+ expect(mockModel.deleteMany).toHaveBeenCalledWith({ category: 'Old' });
144
+ expect(result).toBe(3);
145
+ });
102
146
  });
103
147
  //# sourceMappingURL=index.test.js.map