dolphin-server-modules 2.11.1 → 2.11.3
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/TUTORIAL_NEPALI.md +181 -0
- package/dist/adapters/mongoose/index.test.d.ts +1 -0
- package/dist/adapters/mongoose/index.test.js +145 -0
- package/dist/adapters/mongoose/index.test.js.map +1 -0
- package/dist/adapters/mongoose/integration.test.d.ts +5 -0
- package/dist/adapters/mongoose/integration.test.js +217 -0
- package/dist/adapters/mongoose/integration.test.js.map +1 -0
- package/dist/ai/dolphin-agent/agent.d.ts +5 -0
- package/dist/ai/dolphin-agent/agent.js +93 -46
- package/dist/ai/dolphin-agent/agent.js.map +1 -1
- package/dist/ai/dolphin-agent/config.js +19 -23
- package/dist/ai/dolphin-agent/config.js.map +1 -1
- package/dist/auth/auth.test.d.ts +1 -0
- package/dist/auth/auth.test.js +286 -0
- package/dist/auth/auth.test.js.map +1 -0
- package/dist/authController/authController.test.d.ts +1 -0
- package/dist/authController/authController.test.js +359 -0
- package/dist/authController/authController.test.js.map +1 -0
- package/dist/bin/cli.js +494 -131
- package/dist/bin/cli.js.map +1 -1
- package/dist/client.test.d.ts +22 -0
- package/dist/client.test.js +573 -0
- package/dist/client.test.js.map +1 -0
- package/dist/controller/controller.test.d.ts +1 -0
- package/dist/controller/controller.test.js +37 -0
- package/dist/controller/controller.test.js.map +1 -0
- package/dist/curd/crud.test.d.ts +1 -0
- package/dist/curd/crud.test.js +104 -0
- package/dist/curd/crud.test.js.map +1 -0
- package/dist/demo-server.d.ts +1 -0
- package/dist/demo-server.js +191 -0
- package/dist/demo-server.js.map +1 -0
- package/dist/djson/djson.test.d.ts +1 -0
- package/dist/djson/djson.test.js +200 -0
- package/dist/djson/djson.test.js.map +1 -0
- package/dist/dolphin-bench.d.ts +1 -0
- package/dist/dolphin-bench.js +63 -0
- package/dist/dolphin-bench.js.map +1 -0
- package/dist/hard-performance-test.d.ts +1 -0
- package/dist/hard-performance-test.js +97 -0
- package/dist/hard-performance-test.js.map +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.js +11 -0
- package/dist/index.js.map +1 -1
- package/dist/middleware/zod.test.d.ts +1 -0
- package/dist/middleware/zod.test.js +74 -0
- package/dist/middleware/zod.test.js.map +1 -0
- package/dist/performance-test.d.ts +1 -0
- package/dist/performance-test.js +92 -0
- package/dist/performance-test.js.map +1 -0
- package/dist/real-test-mongoose.d.ts +1 -0
- package/dist/real-test-mongoose.js +104 -0
- package/dist/real-test-mongoose.js.map +1 -0
- package/dist/realtime/camera.d.ts +119 -0
- package/dist/realtime/camera.js +299 -0
- package/dist/realtime/camera.js.map +1 -0
- package/dist/realtime/camera.test.d.ts +1 -0
- package/dist/realtime/camera.test.js +345 -0
- package/dist/realtime/camera.test.js.map +1 -0
- package/dist/realtime/core.d.ts +4 -4
- package/dist/realtime/core.js +5 -5
- package/dist/realtime/core.js.map +1 -1
- package/dist/realtime/index.d.ts +2 -0
- package/dist/realtime/index.js +2 -0
- package/dist/realtime/index.js.map +1 -1
- package/dist/realtime/realtime.test.d.ts +1 -0
- package/dist/realtime/realtime.test.js +623 -0
- package/dist/realtime/realtime.test.js.map +1 -0
- package/dist/realtime/rtsp.d.ts +65 -0
- package/dist/realtime/rtsp.js +410 -0
- package/dist/realtime/rtsp.js.map +1 -0
- package/dist/realtime/rtsp.test.d.ts +1 -0
- package/dist/realtime/rtsp.test.js +361 -0
- package/dist/realtime/rtsp.test.js.map +1 -0
- package/dist/router/router.test.d.ts +1 -0
- package/dist/router/router.test.js +45 -0
- package/dist/router/router.test.js.map +1 -0
- package/dist/server/server.d.ts +8 -8
- package/dist/server/server.js +1 -10
- package/dist/server/server.js.map +1 -1
- package/dist/server/server.test.d.ts +1 -0
- package/dist/server/server.test.js +299 -0
- package/dist/server/server.test.js.map +1 -0
- package/dist/services/ai-service.js +22 -11
- package/dist/services/ai-service.js.map +1 -1
- package/dist/signaling/signaling.test.d.ts +1 -0
- package/dist/signaling/signaling.test.js +112 -0
- package/dist/signaling/signaling.test.js.map +1 -0
- package/dist/swagger/swagger.test.d.ts +1 -0
- package/dist/swagger/swagger.test.js +38 -0
- package/dist/swagger/swagger.test.js.map +1 -0
- package/dist/templates/index.d.ts +6 -0
- package/dist/templates/index.js +247 -70
- package/dist/templates/index.js.map +1 -1
- package/dist/test-2fa-real.d.ts +1 -0
- package/dist/test-2fa-real.js +105 -0
- package/dist/test-2fa-real.js.map +1 -0
- package/dist/test-dolphin.d.ts +1 -0
- package/dist/test-dolphin.js +98 -0
- package/dist/test-dolphin.js.map +1 -0
- package/dist/utils/ctx.d.ts +50 -0
- package/dist/utils/ctx.js +82 -0
- package/dist/utils/ctx.js.map +1 -0
- package/package.json +171 -65
- package/scripts/client.js +838 -703
- package/scripts/benchmark.js +0 -12
- package/scripts/benchmark.ts +0 -12
- package/scripts/list-models.js +0 -34
- package/scripts/run-real-ai-test.js +0 -79
- package/scripts/test-ai-logic.js +0 -44
- package/scripts/test-client.js +0 -105
- package/scripts/test-dolphin.js +0 -36
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { createDolphinController, createNextPagesHandler } from './controller';
|
|
2
|
+
describe('Controller Factory', () => {
|
|
3
|
+
let mockCrud;
|
|
4
|
+
beforeEach(() => {
|
|
5
|
+
mockCrud = {
|
|
6
|
+
paginate: jest.fn().mockResolvedValue({ items: [], total: 0 }),
|
|
7
|
+
read: jest.fn().mockResolvedValue([{ id: '1' }]),
|
|
8
|
+
readOne: jest.fn().mockResolvedValue({ id: '1' }),
|
|
9
|
+
create: jest.fn().mockImplementation((col, data) => Promise.resolve({ id: '2', ...data })),
|
|
10
|
+
updateOne: jest.fn().mockImplementation((col, id, data) => Promise.resolve({ id, ...data })),
|
|
11
|
+
deleteOne: jest.fn().mockResolvedValue(true),
|
|
12
|
+
};
|
|
13
|
+
});
|
|
14
|
+
it('maps standard controller methods to CRUD operations', async () => {
|
|
15
|
+
const ctrl = createDolphinController(mockCrud, 'posts', { softDelete: false });
|
|
16
|
+
const listRes = await ctrl.list({ query: { category: 'news' } });
|
|
17
|
+
expect(mockCrud.read).toHaveBeenCalledWith('posts', { category: 'news' }, {}, undefined);
|
|
18
|
+
expect(listRes).toEqual([{ id: '1' }]);
|
|
19
|
+
const createRes = await ctrl.create({ body: { title: 'Test' } });
|
|
20
|
+
expect(mockCrud.create).toHaveBeenCalledWith('posts', { title: 'Test' }, undefined);
|
|
21
|
+
expect(createRes.title).toBe('Test');
|
|
22
|
+
});
|
|
23
|
+
it('maps next pages handler correctly', async () => {
|
|
24
|
+
const ctrl = createDolphinController(mockCrud, 'posts');
|
|
25
|
+
const handler = createNextPagesHandler(ctrl);
|
|
26
|
+
const req = { method: 'GET', query: { id: '1' } };
|
|
27
|
+
const res = {
|
|
28
|
+
status: jest.fn().mockReturnThis(),
|
|
29
|
+
json: jest.fn()
|
|
30
|
+
};
|
|
31
|
+
await handler(req, res);
|
|
32
|
+
expect(res.status).toHaveBeenCalledWith(200);
|
|
33
|
+
expect(res.json).toHaveBeenCalledWith({ id: '1' });
|
|
34
|
+
expect(mockCrud.readOne).toHaveBeenCalledWith('posts', '1', undefined);
|
|
35
|
+
});
|
|
36
|
+
});
|
|
37
|
+
//# sourceMappingURL=controller.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"controller.test.js","sourceRoot":"","sources":["../../src/controller/controller.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
// curd/crud.test.ts
|
|
2
|
+
import { createCRUD } from './crud';
|
|
3
|
+
// Simple in-memory adapter for testing
|
|
4
|
+
class TestAdapter {
|
|
5
|
+
data = {};
|
|
6
|
+
async create(collection, doc) {
|
|
7
|
+
if (!this.data[collection])
|
|
8
|
+
this.data[collection] = [];
|
|
9
|
+
this.data[collection].push(doc);
|
|
10
|
+
return doc;
|
|
11
|
+
}
|
|
12
|
+
async read(collection, query) {
|
|
13
|
+
const items = this.data[collection] || [];
|
|
14
|
+
if (!query || Object.keys(query).length === 0)
|
|
15
|
+
return items;
|
|
16
|
+
return items.filter((item) => {
|
|
17
|
+
for (const [key, val] of Object.entries(query)) {
|
|
18
|
+
if (key === 'id' && item.id !== val)
|
|
19
|
+
return false;
|
|
20
|
+
if (key === '_id' && item.id !== val)
|
|
21
|
+
return false;
|
|
22
|
+
if (item[key] !== val)
|
|
23
|
+
return false;
|
|
24
|
+
}
|
|
25
|
+
return true;
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
async update(collection, query, data) {
|
|
29
|
+
const items = this.data[collection] || [];
|
|
30
|
+
for (let i = 0; i < items.length; i++) {
|
|
31
|
+
if (query.id && items[i].id === query.id) {
|
|
32
|
+
this.data[collection][i] = { ...items[i], ...data };
|
|
33
|
+
return this.data[collection][i];
|
|
34
|
+
}
|
|
35
|
+
if (query._id && items[i].id === query._id) {
|
|
36
|
+
this.data[collection][i] = { ...items[i], ...data };
|
|
37
|
+
return this.data[collection][i];
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
return null;
|
|
41
|
+
}
|
|
42
|
+
async delete(collection, query) {
|
|
43
|
+
if (!this.data[collection])
|
|
44
|
+
return null;
|
|
45
|
+
if (query.id) {
|
|
46
|
+
this.data[collection] = this.data[collection].filter((d) => d.id !== query.id);
|
|
47
|
+
return { deleted: true };
|
|
48
|
+
}
|
|
49
|
+
if (query._id) {
|
|
50
|
+
this.data[collection] = this.data[collection].filter((d) => d.id !== query._id);
|
|
51
|
+
return { deleted: true };
|
|
52
|
+
}
|
|
53
|
+
if (Object.keys(query).length === 0) {
|
|
54
|
+
this.data[collection] = [];
|
|
55
|
+
return { deleted: true };
|
|
56
|
+
}
|
|
57
|
+
return null;
|
|
58
|
+
}
|
|
59
|
+
// Required methods for DatabaseAdapter interface
|
|
60
|
+
async createUser() { return {}; }
|
|
61
|
+
async findUserByEmail() { return null; }
|
|
62
|
+
async findUserById() { return null; }
|
|
63
|
+
async updateUser() { return {}; }
|
|
64
|
+
async saveRefreshToken() { }
|
|
65
|
+
async findRefreshToken() { return null; }
|
|
66
|
+
async deleteRefreshToken() { }
|
|
67
|
+
}
|
|
68
|
+
describe('CRUD Tests', () => {
|
|
69
|
+
let crud;
|
|
70
|
+
let db;
|
|
71
|
+
beforeEach(() => {
|
|
72
|
+
db = new TestAdapter();
|
|
73
|
+
crud = createCRUD(db, { softDelete: false, enforceOwnership: false });
|
|
74
|
+
});
|
|
75
|
+
it('should create item', async () => {
|
|
76
|
+
const item = await crud.create('products', { name: 'Test', price: 100 });
|
|
77
|
+
expect(item.id).toBeDefined();
|
|
78
|
+
expect(item.name).toBe('Test');
|
|
79
|
+
});
|
|
80
|
+
it('should read items', async () => {
|
|
81
|
+
await crud.create('products', { name: 'Product 1' });
|
|
82
|
+
await crud.create('products', { name: 'Product 2' });
|
|
83
|
+
const items = await crud.read('products');
|
|
84
|
+
expect(items).toHaveLength(2);
|
|
85
|
+
});
|
|
86
|
+
it('should update item', async () => {
|
|
87
|
+
const created = await crud.create('products', { name: 'Old' });
|
|
88
|
+
const updated = await crud.updateOne('products', created.id, { name: 'New' });
|
|
89
|
+
expect(updated?.name).toBe('New');
|
|
90
|
+
});
|
|
91
|
+
it('should delete item', async () => {
|
|
92
|
+
const created = await crud.create('products', { name: 'Delete Me' });
|
|
93
|
+
await crud.deleteOne('products', created.id);
|
|
94
|
+
const items = await crud.read('products');
|
|
95
|
+
expect(items).toHaveLength(0);
|
|
96
|
+
});
|
|
97
|
+
it('should read one item by id', async () => {
|
|
98
|
+
const created = await crud.create('products', { name: 'Find Me' });
|
|
99
|
+
const found = await crud.readOne('products', created.id);
|
|
100
|
+
expect(found).toBeDefined();
|
|
101
|
+
expect(found.name).toBe('Find Me');
|
|
102
|
+
});
|
|
103
|
+
});
|
|
104
|
+
//# sourceMappingURL=crud.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crud.test.js","sourceRoot":"","sources":["../../src/curd/crud.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
import mongoose, { Schema } from 'mongoose';
|
|
2
|
+
import { MongoMemoryServer } from 'mongodb-memory-server';
|
|
3
|
+
import { createDolphinServer } from './server/server.js';
|
|
4
|
+
import { createCRUD } from './curd/crud.js';
|
|
5
|
+
import { createMongooseAdapter } from './adapters/mongoose/index.js';
|
|
6
|
+
import { RealtimeCore } from './realtime/core.js';
|
|
7
|
+
import path from 'path';
|
|
8
|
+
// ===== Mongoose Models =====
|
|
9
|
+
const ProductSchema = new Schema({
|
|
10
|
+
id: { type: String },
|
|
11
|
+
name: { type: String, required: true },
|
|
12
|
+
price: { type: Number },
|
|
13
|
+
category: { type: String },
|
|
14
|
+
userId: { type: String },
|
|
15
|
+
createdAt: { type: String },
|
|
16
|
+
updatedAt: { type: String },
|
|
17
|
+
}, { timestamps: false });
|
|
18
|
+
const UserSchema = new Schema({ email: String, password: String });
|
|
19
|
+
const RefreshTokenSchema = new Schema({ token: String, userId: String });
|
|
20
|
+
const Product = mongoose.model('Product', ProductSchema);
|
|
21
|
+
const User = mongoose.model('User', UserSchema);
|
|
22
|
+
const RefreshToken = mongoose.model('RefreshToken', RefreshTokenSchema);
|
|
23
|
+
async function bootstrap() {
|
|
24
|
+
// 1. Start in-process MongoDB (real Mongoose engine, no external server needed)
|
|
25
|
+
console.log('⏳ MongoDB इन्जिन start गर्दै...');
|
|
26
|
+
const mongod = await MongoMemoryServer.create();
|
|
27
|
+
const uri = mongod.getUri();
|
|
28
|
+
await mongoose.connect(uri);
|
|
29
|
+
console.log('✅ MongoDB connected:', uri);
|
|
30
|
+
// 2. Build real Mongoose adapter
|
|
31
|
+
const mongoAdapter = createMongooseAdapter({
|
|
32
|
+
User,
|
|
33
|
+
RefreshToken,
|
|
34
|
+
models: { Product },
|
|
35
|
+
leanByDefault: true,
|
|
36
|
+
softDelete: false,
|
|
37
|
+
});
|
|
38
|
+
// 3. CRUD service — enforceOwnership: false (auth नचाहिने)
|
|
39
|
+
const service = createCRUD(mongoAdapter, { enforceOwnership: false });
|
|
40
|
+
const COLLECTION = 'Product';
|
|
41
|
+
// 4. Realtime Setup
|
|
42
|
+
const rt = new RealtimeCore({ debug: true });
|
|
43
|
+
rt.pubFile('test-file-id', path.join(process.cwd(), 'test-file.txt'));
|
|
44
|
+
// 5. Dolphin server
|
|
45
|
+
const app = createDolphinServer({ realtime: rt });
|
|
46
|
+
// ===== CORRECT ROUTE MAPPINGS =====
|
|
47
|
+
// GET all products
|
|
48
|
+
app.get('/products', async (ctx) => {
|
|
49
|
+
const { limit, offset, ...filters } = ctx.query;
|
|
50
|
+
const results = await service.read(COLLECTION, filters, {
|
|
51
|
+
limit: limit ? parseInt(limit) : undefined,
|
|
52
|
+
offset: offset ? parseInt(offset) : undefined,
|
|
53
|
+
});
|
|
54
|
+
ctx.json(results);
|
|
55
|
+
});
|
|
56
|
+
// GET single product by ID
|
|
57
|
+
app.get('/products/:id', async (ctx) => {
|
|
58
|
+
const result = await service.readOne(COLLECTION, ctx.params.id);
|
|
59
|
+
if (!result)
|
|
60
|
+
return ctx.status(404).json({ error: 'Product not found' });
|
|
61
|
+
ctx.json(result);
|
|
62
|
+
});
|
|
63
|
+
// POST create product
|
|
64
|
+
app.post('/products', async (ctx) => {
|
|
65
|
+
const result = await service.create(COLLECTION, ctx.body);
|
|
66
|
+
ctx.status(201).json(result);
|
|
67
|
+
});
|
|
68
|
+
// PUT update product by ID
|
|
69
|
+
app.put('/products/:id', async (ctx) => {
|
|
70
|
+
const result = await service.updateOne(COLLECTION, ctx.params.id, ctx.body);
|
|
71
|
+
if (!result)
|
|
72
|
+
return ctx.status(404).json({ error: 'Product not found' });
|
|
73
|
+
ctx.json(result);
|
|
74
|
+
});
|
|
75
|
+
// DELETE product by ID
|
|
76
|
+
app.delete('/products/:id', async (ctx) => {
|
|
77
|
+
const result = await service.deleteOne(COLLECTION, ctx.params.id);
|
|
78
|
+
if (!result)
|
|
79
|
+
return ctx.status(404).json({ error: 'Product not found' });
|
|
80
|
+
ctx.json({ success: true, deleted: result });
|
|
81
|
+
});
|
|
82
|
+
// ===== Utility Routes =====
|
|
83
|
+
app.get('/api/health', (ctx) => {
|
|
84
|
+
ctx.json({
|
|
85
|
+
status: 'ok',
|
|
86
|
+
db: mongoose.connection.readyState === 1 ? 'connected' : 'disconnected',
|
|
87
|
+
uptime: process.uptime(),
|
|
88
|
+
timestamp: new Date().toISOString(),
|
|
89
|
+
});
|
|
90
|
+
});
|
|
91
|
+
app.post('/api/echo', (ctx) => {
|
|
92
|
+
ctx.json({ echo: ctx.body, received_at: new Date().toISOString() });
|
|
93
|
+
});
|
|
94
|
+
app.get('/api/info', (ctx) => {
|
|
95
|
+
ctx.json({
|
|
96
|
+
name: 'Dolphin Framework',
|
|
97
|
+
version: '1.5.5',
|
|
98
|
+
adapter: 'Real Mongoose (mongodb-memory-server)',
|
|
99
|
+
mongoUri: uri,
|
|
100
|
+
});
|
|
101
|
+
});
|
|
102
|
+
app.get('/', (ctx) => {
|
|
103
|
+
ctx.html(`<!DOCTYPE html>
|
|
104
|
+
<html lang="en">
|
|
105
|
+
<head>
|
|
106
|
+
<meta charset="UTF-8">
|
|
107
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
108
|
+
<title>Dolphin Framework — Mongoose</title>
|
|
109
|
+
<style>
|
|
110
|
+
* { box-sizing: border-box; margin: 0; padding: 0; }
|
|
111
|
+
body {
|
|
112
|
+
font-family: 'Segoe UI', system-ui, sans-serif;
|
|
113
|
+
background: linear-gradient(135deg, #0f2027, #203a43, #2c5364);
|
|
114
|
+
min-height: 100vh; color: #fff; padding: 2rem;
|
|
115
|
+
}
|
|
116
|
+
.container { max-width: 860px; margin: 0 auto; }
|
|
117
|
+
.header { text-align: center; margin-bottom: 2.5rem; }
|
|
118
|
+
.logo { font-size: 4rem; }
|
|
119
|
+
h1 { font-size: 2.3rem; font-weight: 700; margin: 0.5rem 0; }
|
|
120
|
+
.tagline { color: #a0c4d8; font-size: 1rem; }
|
|
121
|
+
.badge {
|
|
122
|
+
display: inline-block; background: rgba(255,255,255,0.1);
|
|
123
|
+
border: 1px solid rgba(255,255,255,0.2); padding: 0.25rem 0.75rem;
|
|
124
|
+
border-radius: 999px; font-size: 0.82rem; margin: 0.2rem;
|
|
125
|
+
}
|
|
126
|
+
.green { border-color: #4ade80; color: #4ade80; }
|
|
127
|
+
.section { margin-bottom: 2rem; }
|
|
128
|
+
.section h2 { font-size: 1rem; color: #7ecfff; margin-bottom: 0.8rem; border-bottom: 1px solid rgba(255,255,255,0.1); padding-bottom: 0.4rem; }
|
|
129
|
+
.ep {
|
|
130
|
+
display: flex; align-items: center; gap: 0.8rem;
|
|
131
|
+
padding: 0.6rem 1rem; background: rgba(255,255,255,0.05);
|
|
132
|
+
border-radius: 8px; margin-bottom: 0.4rem; font-size: 0.87rem;
|
|
133
|
+
}
|
|
134
|
+
.method {
|
|
135
|
+
font-weight: bold; font-size: 0.72rem; padding: 0.2rem 0.45rem;
|
|
136
|
+
border-radius: 4px; min-width: 55px; text-align: center; flex-shrink: 0;
|
|
137
|
+
}
|
|
138
|
+
.get { background: #1a6b3f; color: #4ade80; }
|
|
139
|
+
.post { background: #1a3b6b; color: #60a5fa; }
|
|
140
|
+
.put { background: #5c3a00; color: #fbbf24; }
|
|
141
|
+
.del { background: #6b1a1a; color: #f87171; }
|
|
142
|
+
code { background: rgba(255,255,255,0.1); padding: 0.1rem 0.4rem; border-radius: 3px; font-family: monospace; }
|
|
143
|
+
.note { font-size: 0.8rem; color: #7a9fb0; margin-top: 0.5rem; }
|
|
144
|
+
</style>
|
|
145
|
+
</head>
|
|
146
|
+
<body>
|
|
147
|
+
<div class="container">
|
|
148
|
+
<div class="header">
|
|
149
|
+
<div class="logo">🐬</div>
|
|
150
|
+
<h1>Dolphin Framework</h1>
|
|
151
|
+
<p class="tagline">Real Mongoose Adapter · MongoDB Engine · CRUD Verified</p>
|
|
152
|
+
<div style="margin-top:1rem;">
|
|
153
|
+
<span class="badge green">✅ MongoDB Connected</span>
|
|
154
|
+
<span class="badge">Mongoose ORM</span>
|
|
155
|
+
<span class="badge">enforceOwnership: false</span>
|
|
156
|
+
</div>
|
|
157
|
+
</div>
|
|
158
|
+
|
|
159
|
+
<div class="section">
|
|
160
|
+
<h2>Products CRUD API (Real Mongoose)</h2>
|
|
161
|
+
<div class="ep"><span class="method get">GET</span><code>/products</code><span>सबै products ल्याउनु</span></div>
|
|
162
|
+
<div class="ep"><span class="method get">GET</span><code>/products/:id</code><span>ID बाट एउटा product ल्याउनु</span></div>
|
|
163
|
+
<div class="ep"><span class="method post">POST</span><code>/products</code><span>नयाँ product बनाउनु (body: JSON)</span></div>
|
|
164
|
+
<div class="ep"><span class="method put">PUT</span><code>/products/:id</code><span>ID बाट product update गर्नु</span></div>
|
|
165
|
+
<div class="ep"><span class="method del">DELETE</span><code>/products/:id</code><span>ID बाट product मेटाउनु</span></div>
|
|
166
|
+
<p class="note">* mongodb-memory-server — Real Mongoose engine, server restart भएमा data reset हुन्छ</p>
|
|
167
|
+
</div>
|
|
168
|
+
|
|
169
|
+
<div class="section">
|
|
170
|
+
<h2>Utility Endpoints</h2>
|
|
171
|
+
<div class="ep"><span class="method get">GET</span><code>/api/health</code><span>Health + DB status</span></div>
|
|
172
|
+
<div class="ep"><span class="method get">GET</span><code>/api/info</code><span>Framework + adapter info</span></div>
|
|
173
|
+
<div class="ep"><span class="method post">POST</span><code>/api/echo</code><span>Request body echo</span></div>
|
|
174
|
+
</div>
|
|
175
|
+
</div>
|
|
176
|
+
</body>
|
|
177
|
+
</html>`);
|
|
178
|
+
});
|
|
179
|
+
// 5. Start server
|
|
180
|
+
const PORT = 5000;
|
|
181
|
+
app.listen(PORT, () => {
|
|
182
|
+
console.log(`🐬 Dolphin + Real Mongoose running at http://0.0.0.0:${PORT}`);
|
|
183
|
+
console.log(` MongoDB URI: ${uri}`);
|
|
184
|
+
console.log(` CRUD: GET/POST /products | GET/PUT/DELETE /products/:id`);
|
|
185
|
+
});
|
|
186
|
+
}
|
|
187
|
+
bootstrap().catch(err => {
|
|
188
|
+
console.error('❌ Bootstrap failed:', err);
|
|
189
|
+
process.exit(1);
|
|
190
|
+
});
|
|
191
|
+
//# sourceMappingURL=demo-server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"demo-server.js","sourceRoot":"","sources":["../src/demo-server.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,EAAE,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,8BAA8B;AAC9B,MAAM,aAAa,GAAG,IAAI,MAAM,CAAC;IAC/B,EAAE,EAAS,EAAE,IAAI,EAAE,MAAM,EAAE;IAC3B,IAAI,EAAO,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE;IAC3C,KAAK,EAAM,EAAE,IAAI,EAAE,MAAM,EAAE;IAC3B,QAAQ,EAAG,EAAE,IAAI,EAAE,MAAM,EAAE;IAC3B,MAAM,EAAK,EAAE,IAAI,EAAE,MAAM,EAAE;IAC3B,SAAS,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;IAC3B,SAAS,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;CAC5B,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAC;AAE1B,MAAM,UAAU,GAAG,IAAI,MAAM,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;AACnE,MAAM,kBAAkB,GAAG,IAAI,MAAM,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;AAEzE,MAAM,OAAO,GAAQ,QAAQ,CAAC,KAAK,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;AAC9D,MAAM,IAAI,GAAW,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;AACxD,MAAM,YAAY,GAAG,QAAQ,CAAC,KAAK,CAAC,cAAc,EAAE,kBAAkB,CAAC,CAAC;AAExE,KAAK,UAAU,SAAS;IACtB,gFAAgF;IAChF,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;IAC/C,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,MAAM,EAAE,CAAC;IAChD,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;IAC5B,MAAM,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC5B,OAAO,CAAC,GAAG,CAAC,sBAAsB,EAAE,GAAG,CAAC,CAAC;IAEzC,iCAAiC;IACjC,MAAM,YAAY,GAAG,qBAAqB,CAAC;QACzC,IAAI;QACJ,YAAY;QACZ,MAAM,EAAE,EAAE,OAAO,EAAE;QACnB,aAAa,EAAE,IAAI;QACnB,UAAU,EAAE,KAAK;KAClB,CAAC,CAAC;IAEH,2DAA2D;IAC3D,MAAM,OAAO,GAAG,UAAU,CAAC,YAAmB,EAAE,EAAE,gBAAgB,EAAE,KAAK,EAAE,CAAC,CAAC;IAC7E,MAAM,UAAU,GAAG,SAAS,CAAC;IAE7B,oBAAoB;IACpB,MAAM,EAAE,GAAG,IAAI,YAAY,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7C,EAAE,CAAC,OAAO,CAAC,cAAc,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,eAAe,CAAC,CAAC,CAAC;IAEtE,oBAAoB;IACpB,MAAM,GAAG,GAAG,mBAAmB,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC;IAElD,qCAAqC;IAErC,mBAAmB;IACnB,GAAG,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,EAAE,GAAQ,EAAE,EAAE;QACtC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC;QAChD,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,IAAI,CAChC,UAAU,EACV,OAAO,EACP;YACE,KAAK,EAAG,KAAK,CAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAE,CAAC,CAAC,SAAS;YAC7C,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS;SAC9C,CACF,CAAC;QACF,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACpB,CAAC,CAAC,CAAC;IAEH,2BAA2B;IAC3B,GAAG,CAAC,GAAG,CAAC,eAAe,EAAE,KAAK,EAAE,GAAQ,EAAE,EAAE;QAC1C,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAChE,IAAI,CAAC,MAAM;YAAE,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,mBAAmB,EAAE,CAAC,CAAC;QACzE,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACnB,CAAC,CAAC,CAAC;IAEH,sBAAsB;IACtB,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,EAAE,GAAQ,EAAE,EAAE;QACvC,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;QAC1D,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC/B,CAAC,CAAC,CAAC;IAEH,2BAA2B;IAC3B,GAAG,CAAC,GAAG,CAAC,eAAe,EAAE,KAAK,EAAE,GAAQ,EAAE,EAAE;QAC1C,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,SAAS,CAAC,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;QAC5E,IAAI,CAAC,MAAM;YAAE,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,mBAAmB,EAAE,CAAC,CAAC;QACzE,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACnB,CAAC,CAAC,CAAC;IAEH,uBAAuB;IACvB,GAAG,CAAC,MAAM,CAAC,eAAe,EAAE,KAAK,EAAE,GAAQ,EAAE,EAAE;QAC7C,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,SAAS,CAAC,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAClE,IAAI,CAAC,MAAM;YAAE,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,mBAAmB,EAAE,CAAC,CAAC;QACzE,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,6BAA6B;IAC7B,GAAG,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC,GAAQ,EAAE,EAAE;QAClC,GAAG,CAAC,IAAI,CAAC;YACP,MAAM,EAAE,IAAI;YACZ,EAAE,EAAE,QAAQ,CAAC,UAAU,CAAC,UAAU,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,cAAc;YACvE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE;YACxB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACpC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,GAAQ,EAAE,EAAE;QACjC,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;IACtE,CAAC,CAAC,CAAC;IAEH,GAAG,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,GAAQ,EAAE,EAAE;QAChC,GAAG,CAAC,IAAI,CAAC;YACP,IAAI,EAAE,mBAAmB;YACzB,OAAO,EAAE,OAAO;YAChB,OAAO,EAAE,uCAAuC;YAChD,QAAQ,EAAE,GAAG;SACd,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAQ,EAAE,EAAE;QACxB,GAAG,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QA0EL,CAAC,CAAC;IACR,CAAC,CAAC,CAAC;IAEH,kBAAkB;IAClB,MAAM,IAAI,GAAG,IAAI,CAAC;IAClB,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE;QACpB,OAAO,CAAC,GAAG,CAAC,wDAAwD,IAAI,EAAE,CAAC,CAAC;QAC5E,OAAO,CAAC,GAAG,CAAC,mBAAmB,GAAG,EAAE,CAAC,CAAC;QACtC,OAAO,CAAC,GAAG,CAAC,8DAA8D,CAAC,CAAC;IAC9E,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;IACtB,OAAO,CAAC,KAAK,CAAC,qBAAqB,EAAE,GAAG,CAAC,CAAC;IAC1C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
// djson/test/djson.test.ts
|
|
2
|
+
import { describe, it, expect, beforeEach } from '@jest/globals';
|
|
3
|
+
import DJSON, { djson, djsonSafe, dencode, toBuffer, toQueryString, toKeyValue, toHex, toBase64 } from './djson';
|
|
4
|
+
describe('DJSON Library', () => {
|
|
5
|
+
beforeEach(() => {
|
|
6
|
+
DJSON.configure({ strict: false, autoDetect: true });
|
|
7
|
+
});
|
|
8
|
+
describe('JSON Parsing', () => {
|
|
9
|
+
it('should parse valid JSON', () => {
|
|
10
|
+
const result = DJSON.parse('{"name":"test","value":123}');
|
|
11
|
+
expect(result).toEqual({ name: 'test', value: 123 });
|
|
12
|
+
});
|
|
13
|
+
it('should parse JSON array', () => {
|
|
14
|
+
const result = DJSON.parse('[1,2,3]');
|
|
15
|
+
expect(result).toEqual([1, 2, 3]);
|
|
16
|
+
});
|
|
17
|
+
it('should handle already parsed object', () => {
|
|
18
|
+
const obj = { foo: 'bar' };
|
|
19
|
+
const result = DJSON.parse(obj);
|
|
20
|
+
expect(result).toBe(obj);
|
|
21
|
+
});
|
|
22
|
+
it('should handle null values', () => {
|
|
23
|
+
const result = DJSON.parse(null);
|
|
24
|
+
expect(result).toBeNull();
|
|
25
|
+
});
|
|
26
|
+
});
|
|
27
|
+
describe('QueryString Parsing', () => {
|
|
28
|
+
it('should parse querystring', () => {
|
|
29
|
+
const result = DJSON.parse('name=John&age=30', 'querystring');
|
|
30
|
+
expect(result).toEqual({ name: 'John', age: 30 });
|
|
31
|
+
});
|
|
32
|
+
it('should parse querystring with special characters', () => {
|
|
33
|
+
const result = DJSON.parse('name=John%20Doe&city=NYC', 'querystring');
|
|
34
|
+
expect(result).toEqual({ name: 'John Doe', city: 'NYC' });
|
|
35
|
+
});
|
|
36
|
+
});
|
|
37
|
+
describe('Key-Value Parsing', () => {
|
|
38
|
+
it('should parse space-separated key-value pairs', () => {
|
|
39
|
+
const result = DJSON.parse('temp=25.5 humidity=60', 'keyvalue');
|
|
40
|
+
expect(result).toEqual({ temp: 25.5, humidity: 60 });
|
|
41
|
+
});
|
|
42
|
+
});
|
|
43
|
+
describe('Hex Parsing', () => {
|
|
44
|
+
it('should parse hex string', () => {
|
|
45
|
+
const result = DJSON.parse('48656c6c6f', 'hex');
|
|
46
|
+
expect(result._type).toBe('hex');
|
|
47
|
+
expect(result.ascii).toBe('Hello');
|
|
48
|
+
});
|
|
49
|
+
it('should handle empty hex string', () => {
|
|
50
|
+
const result = DJSON.parse('', 'hex');
|
|
51
|
+
expect(result._type).toBe('hex');
|
|
52
|
+
expect(result.hex).toBe('');
|
|
53
|
+
expect(result.length).toBe(0);
|
|
54
|
+
});
|
|
55
|
+
});
|
|
56
|
+
describe('Base64 Parsing', () => {
|
|
57
|
+
it('should parse base64 string', () => {
|
|
58
|
+
const result = DJSON.parse('SGVsbG8gV29ybGQ=', 'base64');
|
|
59
|
+
expect(result._type).toBe('base64');
|
|
60
|
+
expect(result.ascii).toBe('Hello World');
|
|
61
|
+
});
|
|
62
|
+
});
|
|
63
|
+
describe('Auto Detection', () => {
|
|
64
|
+
it('should auto-detect JSON', () => {
|
|
65
|
+
const result = DJSON.parse('{"auto":"detected"}');
|
|
66
|
+
expect(result).toEqual({ auto: 'detected' });
|
|
67
|
+
});
|
|
68
|
+
it('should auto-detect querystring', () => {
|
|
69
|
+
const result = DJSON.parse('key1=value1&key2=value2');
|
|
70
|
+
expect(result).toEqual({ key1: 'value1', key2: 'value2' });
|
|
71
|
+
});
|
|
72
|
+
it('should auto-detect key-value pairs', () => {
|
|
73
|
+
const result = DJSON.parse('temp=25.5 humidity=60');
|
|
74
|
+
expect(result).toEqual({ temp: 25.5, humidity: 60 });
|
|
75
|
+
});
|
|
76
|
+
it('should auto-detect hex', () => {
|
|
77
|
+
const result = DJSON.parse('48656c6c6f576f726c64');
|
|
78
|
+
expect(result._type).toBe('hex');
|
|
79
|
+
});
|
|
80
|
+
it('should auto-detect base64', () => {
|
|
81
|
+
const result = DJSON.parse('SGVsbG8gV29ybGQ=');
|
|
82
|
+
expect(result._type).toBe('base64');
|
|
83
|
+
});
|
|
84
|
+
});
|
|
85
|
+
describe('Safe Parsing', () => {
|
|
86
|
+
it('should return success for valid input', () => {
|
|
87
|
+
const result = djsonSafe('{"valid":true}');
|
|
88
|
+
expect(result.success).toBe(true);
|
|
89
|
+
expect(result.data).toEqual({ valid: true });
|
|
90
|
+
});
|
|
91
|
+
it('should return error for invalid JSON', () => {
|
|
92
|
+
const result = djsonSafe('{invalid: json}');
|
|
93
|
+
expect(result.success).toBe(false);
|
|
94
|
+
expect(result.error).toBeDefined();
|
|
95
|
+
});
|
|
96
|
+
it('should handle invalid hex string', () => {
|
|
97
|
+
const result = DJSON.parseSafe('invalidhex', 'hex');
|
|
98
|
+
expect(result.success).toBe(false);
|
|
99
|
+
expect(result.error).toBe('Invalid Hex');
|
|
100
|
+
});
|
|
101
|
+
it('should handle invalid base64', () => {
|
|
102
|
+
const result = DJSON.parseSafe('!!!invalid!!!', 'base64');
|
|
103
|
+
expect(result.success).toBe(false);
|
|
104
|
+
expect(result.error).toBe('Invalid Base64');
|
|
105
|
+
});
|
|
106
|
+
});
|
|
107
|
+
describe('Encoding', () => {
|
|
108
|
+
const testData = { name: 'Test', value: 123 };
|
|
109
|
+
it('should encode to JSON', () => {
|
|
110
|
+
const result = dencode(testData, 'json');
|
|
111
|
+
expect(result).toBe('{"name":"Test","value":123}');
|
|
112
|
+
});
|
|
113
|
+
it('should encode to querystring', () => {
|
|
114
|
+
const result = toQueryString(testData);
|
|
115
|
+
expect(result).toBe('name=Test&value=123');
|
|
116
|
+
});
|
|
117
|
+
it('should encode to keyvalue', () => {
|
|
118
|
+
const result = toKeyValue(testData);
|
|
119
|
+
expect(result).toBe('name=Test value=123');
|
|
120
|
+
});
|
|
121
|
+
it('should encode to hex', () => {
|
|
122
|
+
const result = toHex('Hello');
|
|
123
|
+
expect(result).toBe('48656c6c6f');
|
|
124
|
+
});
|
|
125
|
+
it('should encode to base64', () => {
|
|
126
|
+
const result = toBase64('Hello World');
|
|
127
|
+
expect(result).toBe('SGVsbG8gV29ybGQ=');
|
|
128
|
+
});
|
|
129
|
+
it('should encode to buffer', () => {
|
|
130
|
+
const result = toBuffer(testData);
|
|
131
|
+
expect(Buffer.isBuffer(result)).toBe(true);
|
|
132
|
+
});
|
|
133
|
+
});
|
|
134
|
+
describe('Shortcut Functions', () => {
|
|
135
|
+
it('djson() should work', () => {
|
|
136
|
+
const result = djson('{"shortcut":true}');
|
|
137
|
+
expect(result).toEqual({ shortcut: true });
|
|
138
|
+
});
|
|
139
|
+
it('dencode() should work', () => {
|
|
140
|
+
const result = dencode({ test: 'data' }, 'keyvalue');
|
|
141
|
+
expect(result).toBe('test=data');
|
|
142
|
+
});
|
|
143
|
+
});
|
|
144
|
+
describe('Edge Cases', () => {
|
|
145
|
+
it('should handle empty string', () => {
|
|
146
|
+
const result = DJSON.parse('');
|
|
147
|
+
expect(result).toEqual({ raw: '' });
|
|
148
|
+
});
|
|
149
|
+
it('should handle very long string as plain text', () => {
|
|
150
|
+
const longString = 'x'.repeat(10000);
|
|
151
|
+
const result = DJSON.parse(longString);
|
|
152
|
+
// When auto-detection fails, it returns { raw: string }
|
|
153
|
+
expect(result).toEqual({ raw: longString });
|
|
154
|
+
});
|
|
155
|
+
it('should handle number input', () => {
|
|
156
|
+
const result = DJSON.parse(123);
|
|
157
|
+
expect(result).toEqual({ raw: '123' });
|
|
158
|
+
});
|
|
159
|
+
it('should handle boolean input', () => {
|
|
160
|
+
const result = DJSON.parse(true);
|
|
161
|
+
expect(result).toEqual({ raw: 'true' });
|
|
162
|
+
});
|
|
163
|
+
it('should handle Buffer input', () => {
|
|
164
|
+
const buffer = Buffer.from('test data');
|
|
165
|
+
const result = DJSON.parse(buffer);
|
|
166
|
+
expect(result).toEqual({ raw: 'test data' });
|
|
167
|
+
});
|
|
168
|
+
});
|
|
169
|
+
describe('Strict Mode', () => {
|
|
170
|
+
it('should throw error in strict mode on invalid input', () => {
|
|
171
|
+
DJSON.configure({ strict: true });
|
|
172
|
+
expect(() => DJSON.parse('invalid json')).toThrow();
|
|
173
|
+
DJSON.configure({ strict: false }); // Reset
|
|
174
|
+
});
|
|
175
|
+
it('should return error object in non-strict mode', () => {
|
|
176
|
+
DJSON.configure({ strict: false });
|
|
177
|
+
const result = DJSON.parse('invalid json');
|
|
178
|
+
expect(result).toHaveProperty('error');
|
|
179
|
+
expect(result).toHaveProperty('raw');
|
|
180
|
+
});
|
|
181
|
+
});
|
|
182
|
+
describe('Type Conversion', () => {
|
|
183
|
+
it('should convert boolean strings to booleans', () => {
|
|
184
|
+
const result = DJSON.parse('flag1=true&flag2=false', 'querystring');
|
|
185
|
+
expect(result.flag1).toBe(true);
|
|
186
|
+
expect(result.flag2).toBe(false);
|
|
187
|
+
});
|
|
188
|
+
it('should convert null strings to null', () => {
|
|
189
|
+
const result = DJSON.parse('value=null', 'querystring');
|
|
190
|
+
expect(result.value).toBeNull();
|
|
191
|
+
});
|
|
192
|
+
it('should convert numeric strings to numbers', () => {
|
|
193
|
+
const result = DJSON.parse('int=42 float=3.14 negative=-10', 'keyvalue');
|
|
194
|
+
expect(result.int).toBe(42);
|
|
195
|
+
expect(result.float).toBe(3.14);
|
|
196
|
+
expect(result.negative).toBe(-10);
|
|
197
|
+
});
|
|
198
|
+
});
|
|
199
|
+
});
|
|
200
|
+
//# sourceMappingURL=djson.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"djson.test.js","sourceRoot":"","sources":["../../src/djson/djson.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|