dolphin-server-modules 1.0.0
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/auth/auth.ts +685 -0
- package/controller/controller.ts +248 -0
- package/curd/crud.ts +267 -0
- package/dist/auth/auth.d.ts +81 -0
- package/dist/auth/auth.js +565 -0
- package/dist/auth/auth.js.map +1 -0
- package/dist/controller/controller.d.ts +36 -0
- package/dist/controller/controller.js +185 -0
- package/dist/controller/controller.js.map +1 -0
- package/dist/curd/crud.d.ts +71 -0
- package/dist/curd/crud.js +217 -0
- package/dist/curd/crud.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.js +25 -0
- package/dist/index.js.map +1 -0
- package/dist/middleware/zod.d.ts +20 -0
- package/dist/middleware/zod.js +76 -0
- package/dist/middleware/zod.js.map +1 -0
- package/index.ts +12 -0
- package/middleware/zod.ts +73 -0
- package/package.json +39 -0
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// packages/core/controller.ts
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.createNextDynamicHandler = exports.createNextAppRoute = exports.createNextPagesHandler = exports.createDolphinController = void 0;
|
|
5
|
+
const createDolphinController = (crud, collection, options) => {
|
|
6
|
+
const controller = {
|
|
7
|
+
async list(req, userId) {
|
|
8
|
+
const { page, limit, ...filter } = req.query || {};
|
|
9
|
+
if (page !== undefined || limit !== undefined) {
|
|
10
|
+
return await crud.paginate(collection, filter, Number(page) || 1, Number(limit) || 100, userId);
|
|
11
|
+
}
|
|
12
|
+
return await crud.read(collection, filter, {}, userId);
|
|
13
|
+
},
|
|
14
|
+
async get(req, userId) {
|
|
15
|
+
const id = req.params?.id || req.query?.id;
|
|
16
|
+
return await crud.readOne(collection, id, userId);
|
|
17
|
+
},
|
|
18
|
+
async create(req, userId) {
|
|
19
|
+
const data = req.body || {};
|
|
20
|
+
return await crud.create(collection, data, userId);
|
|
21
|
+
},
|
|
22
|
+
async update(req, userId) {
|
|
23
|
+
const id = req.params?.id || req.query?.id;
|
|
24
|
+
const data = req.body || {};
|
|
25
|
+
return await crud.updateOne(collection, id, data, userId);
|
|
26
|
+
},
|
|
27
|
+
async delete(req, userId) {
|
|
28
|
+
const id = req.params?.id || req.query?.id;
|
|
29
|
+
return await crud.deleteOne(collection, id, userId);
|
|
30
|
+
},
|
|
31
|
+
};
|
|
32
|
+
if (options?.softDelete) {
|
|
33
|
+
controller.restore = async (req, userId) => {
|
|
34
|
+
const id = req.params?.id || req.query?.id;
|
|
35
|
+
return await crud.restore(collection, id, userId);
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
if (options?.bulkOps) {
|
|
39
|
+
controller.bulkUpdate = async (req, userId) => {
|
|
40
|
+
const { filter, data } = req.body || {};
|
|
41
|
+
return await crud.updateMany(collection, filter, data, userId);
|
|
42
|
+
};
|
|
43
|
+
controller.bulkDelete = async (req, userId) => {
|
|
44
|
+
const { filter } = req.body || {};
|
|
45
|
+
return await crud.deleteMany(collection, filter, userId);
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
return controller;
|
|
49
|
+
};
|
|
50
|
+
exports.createDolphinController = createDolphinController;
|
|
51
|
+
// ===== PAGES ROUTER HANDLER (req, res) =====
|
|
52
|
+
const createNextPagesHandler = (controller, options) => {
|
|
53
|
+
return async (req, res) => {
|
|
54
|
+
try {
|
|
55
|
+
const { method } = req;
|
|
56
|
+
let result;
|
|
57
|
+
const userId = req.user?.id;
|
|
58
|
+
switch (method) {
|
|
59
|
+
case 'GET':
|
|
60
|
+
if (req.query?.id) {
|
|
61
|
+
result = await controller.get(req, userId);
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
result = await controller.list(req, userId);
|
|
65
|
+
}
|
|
66
|
+
break;
|
|
67
|
+
case 'POST':
|
|
68
|
+
result = await controller.create(req, userId);
|
|
69
|
+
break;
|
|
70
|
+
case 'PUT':
|
|
71
|
+
case 'PATCH':
|
|
72
|
+
result = await controller.update(req, userId);
|
|
73
|
+
break;
|
|
74
|
+
case 'DELETE':
|
|
75
|
+
result = await controller.delete(req, userId);
|
|
76
|
+
break;
|
|
77
|
+
default:
|
|
78
|
+
return res.status(405).json({ error: 'Method not allowed' });
|
|
79
|
+
}
|
|
80
|
+
return res.status(200).json(result);
|
|
81
|
+
}
|
|
82
|
+
catch (error) {
|
|
83
|
+
const status = error.status || 500;
|
|
84
|
+
return res.status(status).json({ error: error.message });
|
|
85
|
+
}
|
|
86
|
+
};
|
|
87
|
+
};
|
|
88
|
+
exports.createNextPagesHandler = createNextPagesHandler;
|
|
89
|
+
// ===== APP ROUTER HANDLER (Request, Response) =====
|
|
90
|
+
const createNextAppRoute = (controller) => {
|
|
91
|
+
const handler = async (req, context) => {
|
|
92
|
+
try {
|
|
93
|
+
const url = new URL(req.url);
|
|
94
|
+
const method = req.method;
|
|
95
|
+
// Query params parse
|
|
96
|
+
const query = Object.fromEntries(url.searchParams.entries());
|
|
97
|
+
// JSON body handle — safe parsing
|
|
98
|
+
let body = {};
|
|
99
|
+
if (['POST', 'PUT', 'PATCH'].includes(method)) {
|
|
100
|
+
try {
|
|
101
|
+
body = await req.json();
|
|
102
|
+
}
|
|
103
|
+
catch {
|
|
104
|
+
body = {};
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
// Mock request object for controller
|
|
108
|
+
const mockReq = {
|
|
109
|
+
query,
|
|
110
|
+
params: context.params || {},
|
|
111
|
+
body,
|
|
112
|
+
headers: Object.fromEntries(req.headers.entries()),
|
|
113
|
+
};
|
|
114
|
+
// User from header (auth middleware le set gareko)
|
|
115
|
+
const userId = req.headers.get('x-user-id') || undefined;
|
|
116
|
+
let result;
|
|
117
|
+
switch (method) {
|
|
118
|
+
case 'GET':
|
|
119
|
+
if (context.params?.id || query.id) {
|
|
120
|
+
result = await controller.get(mockReq, userId);
|
|
121
|
+
}
|
|
122
|
+
else {
|
|
123
|
+
result = await controller.list(mockReq, userId);
|
|
124
|
+
}
|
|
125
|
+
break;
|
|
126
|
+
case 'POST':
|
|
127
|
+
result = await controller.create(mockReq, userId);
|
|
128
|
+
break;
|
|
129
|
+
case 'PUT':
|
|
130
|
+
case 'PATCH':
|
|
131
|
+
result = await controller.update(mockReq, userId);
|
|
132
|
+
break;
|
|
133
|
+
case 'DELETE':
|
|
134
|
+
result = await controller.delete(mockReq, userId);
|
|
135
|
+
break;
|
|
136
|
+
default:
|
|
137
|
+
return new Response(JSON.stringify({ error: 'Method not allowed' }), { status: 405, headers: { 'Content-Type': 'application/json' } });
|
|
138
|
+
}
|
|
139
|
+
return new Response(JSON.stringify(result), { status: 200, headers: { 'Content-Type': 'application/json' } });
|
|
140
|
+
}
|
|
141
|
+
catch (error) {
|
|
142
|
+
const status = error.status || 500;
|
|
143
|
+
return new Response(JSON.stringify({ error: error.message }), { status, headers: { 'Content-Type': 'application/json' } });
|
|
144
|
+
}
|
|
145
|
+
};
|
|
146
|
+
// Return route handlers for App Router
|
|
147
|
+
return {
|
|
148
|
+
GET: handler,
|
|
149
|
+
POST: handler,
|
|
150
|
+
PUT: handler,
|
|
151
|
+
PATCH: handler,
|
|
152
|
+
DELETE: handler,
|
|
153
|
+
};
|
|
154
|
+
};
|
|
155
|
+
exports.createNextAppRoute = createNextAppRoute;
|
|
156
|
+
// ===== DYNAMIC ROUTE HANDLER (for [id].ts) =====
|
|
157
|
+
const createNextDynamicHandler = (controller) => {
|
|
158
|
+
return async (req, res) => {
|
|
159
|
+
try {
|
|
160
|
+
const { method } = req;
|
|
161
|
+
const userId = req.user?.id;
|
|
162
|
+
let result;
|
|
163
|
+
switch (method) {
|
|
164
|
+
case 'GET':
|
|
165
|
+
result = await controller.get(req, userId);
|
|
166
|
+
break;
|
|
167
|
+
case 'PUT':
|
|
168
|
+
case 'PATCH':
|
|
169
|
+
result = await controller.update(req, userId);
|
|
170
|
+
break;
|
|
171
|
+
case 'DELETE':
|
|
172
|
+
result = await controller.delete(req, userId);
|
|
173
|
+
break;
|
|
174
|
+
default:
|
|
175
|
+
return res.status(405).json({ error: 'Method not allowed' });
|
|
176
|
+
}
|
|
177
|
+
return res.status(200).json(result);
|
|
178
|
+
}
|
|
179
|
+
catch (error) {
|
|
180
|
+
return res.status(error.status || 500).json({ error: error.message });
|
|
181
|
+
}
|
|
182
|
+
};
|
|
183
|
+
};
|
|
184
|
+
exports.createNextDynamicHandler = createNextDynamicHandler;
|
|
185
|
+
//# sourceMappingURL=controller.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"controller.js","sourceRoot":"","sources":["../../controller/controller.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
export interface DatabaseAdapter {
|
|
2
|
+
createUser(data: any): Promise<any>;
|
|
3
|
+
findUserByEmail(email: string): Promise<any>;
|
|
4
|
+
findUserById(id: string): Promise<any>;
|
|
5
|
+
updateUser(id: string, data: any): Promise<any>;
|
|
6
|
+
saveRefreshToken(data: any): Promise<void>;
|
|
7
|
+
findRefreshToken(token: string): Promise<any>;
|
|
8
|
+
deleteRefreshToken(token: string): Promise<void>;
|
|
9
|
+
create(collection: string, data: any): Promise<any>;
|
|
10
|
+
read(collection: string, query: any): Promise<any[]>;
|
|
11
|
+
update(collection: string, query: any, data: any): Promise<any>;
|
|
12
|
+
delete(collection: string, query: any): Promise<any>;
|
|
13
|
+
advancedRead?(collection: string, query: any, options: any): Promise<any[]>;
|
|
14
|
+
}
|
|
15
|
+
export interface BaseDocument {
|
|
16
|
+
id: string;
|
|
17
|
+
userId?: string;
|
|
18
|
+
createdAt?: string;
|
|
19
|
+
updatedAt?: string;
|
|
20
|
+
deletedAt?: string | null;
|
|
21
|
+
[key: string]: any;
|
|
22
|
+
}
|
|
23
|
+
export type QueryFilter<T extends BaseDocument = BaseDocument> = {
|
|
24
|
+
[K in keyof T]?: T[K] | {
|
|
25
|
+
$eq?: T[K];
|
|
26
|
+
$ne?: T[K];
|
|
27
|
+
$gt?: T[K];
|
|
28
|
+
$gte?: T[K];
|
|
29
|
+
$lt?: T[K];
|
|
30
|
+
$lte?: T[K];
|
|
31
|
+
$in?: T[K][];
|
|
32
|
+
$nin?: T[K][];
|
|
33
|
+
$like?: string;
|
|
34
|
+
};
|
|
35
|
+
} & {
|
|
36
|
+
$and?: QueryFilter<T>[];
|
|
37
|
+
$or?: QueryFilter<T>[];
|
|
38
|
+
};
|
|
39
|
+
export interface PaginationOptions {
|
|
40
|
+
limit?: number;
|
|
41
|
+
offset?: number;
|
|
42
|
+
sort?: {
|
|
43
|
+
[key: string]: 'asc' | 'desc';
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
export declare function createCRUD<T extends BaseDocument = BaseDocument>(db: DatabaseAdapter, options?: {
|
|
47
|
+
enforceOwnership?: boolean;
|
|
48
|
+
softDelete?: boolean;
|
|
49
|
+
defaultLimit?: number;
|
|
50
|
+
}): {
|
|
51
|
+
create(collection: string, data: Partial<T>, userId?: string): Promise<T>;
|
|
52
|
+
createMany(collection: string, items: Array<Partial<T>>, userId?: string): Promise<T[]>;
|
|
53
|
+
readOne(collection: string, id: string, userId?: string): Promise<T | null>;
|
|
54
|
+
read(collection: string, filter?: QueryFilter<T>, options?: PaginationOptions, userId?: string): Promise<T[]>;
|
|
55
|
+
updateOne(collection: string, id: string, data: Partial<T>, userId?: string): Promise<T | null>;
|
|
56
|
+
updateMany(collection: string, filter: QueryFilter<T>, data: Partial<T>, userId?: string): Promise<number>;
|
|
57
|
+
deleteOne(collection: string, id: string, userId?: string): Promise<T | null>;
|
|
58
|
+
deleteMany(collection: string, filter: QueryFilter<T>, userId?: string): Promise<number>;
|
|
59
|
+
restore(collection: string, id: string, userId?: string): Promise<T | null>;
|
|
60
|
+
count(collection: string, filter?: QueryFilter<T>, userId?: string): Promise<number>;
|
|
61
|
+
exists(collection: string, filter: QueryFilter<T>, userId?: string): Promise<boolean>;
|
|
62
|
+
paginate(collection: string, filter?: QueryFilter<T>, page?: number, limit?: number, userId?: string): Promise<{
|
|
63
|
+
items: T[];
|
|
64
|
+
total: number;
|
|
65
|
+
page: number;
|
|
66
|
+
limit: number;
|
|
67
|
+
totalPages: number;
|
|
68
|
+
hasNext: boolean;
|
|
69
|
+
hasPrev: boolean;
|
|
70
|
+
}>;
|
|
71
|
+
};
|
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// crud-lite.ts — World-class lightweight CRUD (2026 style, full-featured)
|
|
3
|
+
// Compatible with your auth DatabaseAdapter
|
|
4
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
5
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
6
|
+
};
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.createCRUD = createCRUD;
|
|
9
|
+
const node_crypto_1 = __importDefault(require("node:crypto"));
|
|
10
|
+
// ===== CRUD Factory =====
|
|
11
|
+
function createCRUD(db, options = {}) {
|
|
12
|
+
const { enforceOwnership = true, softDelete = false, defaultLimit = 100 } = options;
|
|
13
|
+
const generateId = () => node_crypto_1.default.randomBytes(12).toString('hex');
|
|
14
|
+
const applyOwnership = (query, userId) => {
|
|
15
|
+
if (!enforceOwnership || !userId)
|
|
16
|
+
return query;
|
|
17
|
+
return { ...query, userId: { $eq: userId } };
|
|
18
|
+
};
|
|
19
|
+
const matchFilter = (item, filter) => {
|
|
20
|
+
const ops = (field, val, cond) => {
|
|
21
|
+
if (cond === undefined)
|
|
22
|
+
return val !== undefined;
|
|
23
|
+
if (typeof cond !== 'object')
|
|
24
|
+
return val === cond;
|
|
25
|
+
if ('$eq' in cond)
|
|
26
|
+
return val === cond.$eq;
|
|
27
|
+
if ('$ne' in cond)
|
|
28
|
+
return val !== cond.$ne;
|
|
29
|
+
if ('$gt' in cond)
|
|
30
|
+
return val > cond.$gt;
|
|
31
|
+
if ('$gte' in cond)
|
|
32
|
+
return val >= cond.$gte;
|
|
33
|
+
if ('$lt' in cond)
|
|
34
|
+
return val < cond.$lt;
|
|
35
|
+
if ('$lte' in cond)
|
|
36
|
+
return val <= cond.$lte;
|
|
37
|
+
if ('$in' in cond)
|
|
38
|
+
return Array.isArray(cond.$in) && cond.$in.includes(val);
|
|
39
|
+
if ('$nin' in cond)
|
|
40
|
+
return Array.isArray(cond.$nin) && !cond.$nin.includes(val);
|
|
41
|
+
if ('$like' in cond)
|
|
42
|
+
return typeof val === 'string' && val.includes(String(cond.$like));
|
|
43
|
+
return true;
|
|
44
|
+
};
|
|
45
|
+
const keys = Object.keys(filter);
|
|
46
|
+
for (const key of keys) {
|
|
47
|
+
const fval = filter[key];
|
|
48
|
+
if (key === '$and') {
|
|
49
|
+
if (!Array.isArray(fval) || !fval.every((f) => matchFilter(item, f)))
|
|
50
|
+
return false;
|
|
51
|
+
}
|
|
52
|
+
else if (key === '$or') {
|
|
53
|
+
if (!Array.isArray(fval) || !fval.some((f) => matchFilter(item, f)))
|
|
54
|
+
return false;
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
if (!ops(key, item[key], fval))
|
|
58
|
+
return false;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
return true;
|
|
62
|
+
};
|
|
63
|
+
const applySoftDelete = (items) => {
|
|
64
|
+
if (!softDelete)
|
|
65
|
+
return items;
|
|
66
|
+
return items.filter(i => !i.deletedAt);
|
|
67
|
+
};
|
|
68
|
+
const applySort = (items, sort) => {
|
|
69
|
+
if (!sort)
|
|
70
|
+
return items;
|
|
71
|
+
const keys = Object.keys(sort);
|
|
72
|
+
return [...items].sort((a, b) => {
|
|
73
|
+
for (const k of keys) {
|
|
74
|
+
const aVal = a[k];
|
|
75
|
+
const bVal = b[k];
|
|
76
|
+
if (aVal === bVal)
|
|
77
|
+
continue;
|
|
78
|
+
return sort[k] === 'asc' ? (aVal > bVal ? 1 : -1) : (aVal > bVal ? -1 : 1);
|
|
79
|
+
}
|
|
80
|
+
return 0;
|
|
81
|
+
});
|
|
82
|
+
};
|
|
83
|
+
return {
|
|
84
|
+
async create(collection, data, userId) {
|
|
85
|
+
const now = new Date().toISOString();
|
|
86
|
+
const doc = {
|
|
87
|
+
id: generateId(),
|
|
88
|
+
createdAt: now,
|
|
89
|
+
updatedAt: now,
|
|
90
|
+
...(userId && { userId }),
|
|
91
|
+
...data
|
|
92
|
+
};
|
|
93
|
+
return db.create(collection, doc);
|
|
94
|
+
},
|
|
95
|
+
async createMany(collection, items, userId) {
|
|
96
|
+
const now = new Date().toISOString();
|
|
97
|
+
const docs = items.map(item => ({
|
|
98
|
+
id: generateId(),
|
|
99
|
+
createdAt: now,
|
|
100
|
+
updatedAt: now,
|
|
101
|
+
...(userId && { userId }),
|
|
102
|
+
...item
|
|
103
|
+
}));
|
|
104
|
+
const results = [];
|
|
105
|
+
for (const doc of docs) {
|
|
106
|
+
results.push(await db.create(collection, doc));
|
|
107
|
+
}
|
|
108
|
+
return results;
|
|
109
|
+
},
|
|
110
|
+
async readOne(collection, id, userId) {
|
|
111
|
+
const filter = applyOwnership({ id }, userId);
|
|
112
|
+
const results = await db.read(collection, filter);
|
|
113
|
+
const filtered = applySoftDelete(results);
|
|
114
|
+
return filtered[0] || null;
|
|
115
|
+
},
|
|
116
|
+
async read(collection, filter = {}, options = {}, userId) {
|
|
117
|
+
const safeFilter = applyOwnership(filter, userId);
|
|
118
|
+
let items = [];
|
|
119
|
+
if (db.advancedRead) {
|
|
120
|
+
items = await db.advancedRead(collection, safeFilter, options);
|
|
121
|
+
}
|
|
122
|
+
else {
|
|
123
|
+
const raw = await db.read(collection, {});
|
|
124
|
+
items = applySoftDelete(raw).filter(i => matchFilter(i, safeFilter));
|
|
125
|
+
}
|
|
126
|
+
if (options.sort)
|
|
127
|
+
items = applySort(items, options.sort);
|
|
128
|
+
if (options.offset || options.limit !== undefined) {
|
|
129
|
+
const start = options.offset || 0;
|
|
130
|
+
const end = start + (options.limit ?? items.length);
|
|
131
|
+
items = items.slice(start, end);
|
|
132
|
+
}
|
|
133
|
+
return items;
|
|
134
|
+
},
|
|
135
|
+
async updateOne(collection, id, data, userId) {
|
|
136
|
+
const filter = applyOwnership({ id }, userId);
|
|
137
|
+
const results = await db.read(collection, filter);
|
|
138
|
+
if (results.length === 0)
|
|
139
|
+
return null;
|
|
140
|
+
const updateData = { ...data, updatedAt: new Date().toISOString() };
|
|
141
|
+
await db.update(collection, filter, updateData);
|
|
142
|
+
return { ...results[0], ...updateData };
|
|
143
|
+
},
|
|
144
|
+
async updateMany(collection, filter, data, userId) {
|
|
145
|
+
const safeFilter = applyOwnership(filter, userId);
|
|
146
|
+
const items = await this.read(collection, safeFilter, {}, userId);
|
|
147
|
+
const updateData = { ...data, updatedAt: new Date().toISOString() };
|
|
148
|
+
for (const item of items) {
|
|
149
|
+
await db.update(collection, { id: item.id }, updateData);
|
|
150
|
+
}
|
|
151
|
+
return items.length;
|
|
152
|
+
},
|
|
153
|
+
async deleteOne(collection, id, userId) {
|
|
154
|
+
const filter = applyOwnership({ id }, userId);
|
|
155
|
+
const results = await db.read(collection, filter);
|
|
156
|
+
if (results.length === 0)
|
|
157
|
+
return null;
|
|
158
|
+
if (softDelete) {
|
|
159
|
+
await db.update(collection, filter, { deletedAt: new Date().toISOString() });
|
|
160
|
+
return results[0];
|
|
161
|
+
}
|
|
162
|
+
else {
|
|
163
|
+
await db.delete(collection, filter);
|
|
164
|
+
return results[0];
|
|
165
|
+
}
|
|
166
|
+
},
|
|
167
|
+
async deleteMany(collection, filter, userId) {
|
|
168
|
+
const safeFilter = applyOwnership(filter, userId);
|
|
169
|
+
const items = await this.read(collection, safeFilter, {}, userId);
|
|
170
|
+
if (softDelete) {
|
|
171
|
+
for (const item of items) {
|
|
172
|
+
await db.update(collection, { id: item.id }, { deletedAt: new Date().toISOString() });
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
else {
|
|
176
|
+
await db.delete(collection, safeFilter);
|
|
177
|
+
}
|
|
178
|
+
return items.length;
|
|
179
|
+
},
|
|
180
|
+
async restore(collection, id, userId) {
|
|
181
|
+
if (!softDelete)
|
|
182
|
+
throw new Error('Soft delete not enabled');
|
|
183
|
+
const filter = applyOwnership({ id, deletedAt: { $ne: null } }, userId);
|
|
184
|
+
const results = await db.read(collection, filter);
|
|
185
|
+
if (results.length === 0)
|
|
186
|
+
return null;
|
|
187
|
+
// ✅ FIX: Set deletedAt to null to explicitly restore
|
|
188
|
+
const updateData = { ...results[0], deletedAt: null, updatedAt: new Date().toISOString() };
|
|
189
|
+
await db.update(collection, filter, updateData);
|
|
190
|
+
return this.readOne(collection, id, userId);
|
|
191
|
+
},
|
|
192
|
+
async count(collection, filter = {}, userId) {
|
|
193
|
+
const safeFilter = applyOwnership(filter, userId);
|
|
194
|
+
const raw = await db.read(collection, {});
|
|
195
|
+
return applySoftDelete(raw).filter(i => matchFilter(i, safeFilter)).length;
|
|
196
|
+
},
|
|
197
|
+
async exists(collection, filter, userId) {
|
|
198
|
+
const count = await this.count(collection, filter, userId);
|
|
199
|
+
return count > 0;
|
|
200
|
+
},
|
|
201
|
+
async paginate(collection, filter = {}, page = 1, limit = defaultLimit, userId) {
|
|
202
|
+
const offset = (page - 1) * limit;
|
|
203
|
+
const items = await this.read(collection, filter, { limit, offset }, userId);
|
|
204
|
+
const total = await this.count(collection, filter, userId);
|
|
205
|
+
return {
|
|
206
|
+
items,
|
|
207
|
+
total,
|
|
208
|
+
page,
|
|
209
|
+
limit,
|
|
210
|
+
totalPages: Math.ceil(total / limit),
|
|
211
|
+
hasNext: page * limit < total,
|
|
212
|
+
hasPrev: page > 1
|
|
213
|
+
};
|
|
214
|
+
}
|
|
215
|
+
};
|
|
216
|
+
}
|
|
217
|
+
//# sourceMappingURL=crud.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crud.js","sourceRoot":"","sources":["../../curd/crud.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
package/dist/index.js
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.createCRUD = void 0;
|
|
18
|
+
// Re-export Auth
|
|
19
|
+
__exportStar(require("./auth/auth"), exports);
|
|
20
|
+
// Re-export Controller
|
|
21
|
+
__exportStar(require("./controller/controller"), exports);
|
|
22
|
+
// Re-export CRUD but alias DatabaseAdapter to avoid conflicts
|
|
23
|
+
var crud_1 = require("./curd/crud");
|
|
24
|
+
Object.defineProperty(exports, "createCRUD", { enumerable: true, get: function () { return crud_1.createCRUD; } });
|
|
25
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
/**
|
|
3
|
+
* Framework-agnostic validation utility.
|
|
4
|
+
* Validates any given data against a provided Zod schema.
|
|
5
|
+
*/
|
|
6
|
+
export declare const validateStructure: <T>(schema: z.ZodSchema<T>, data: unknown) => T;
|
|
7
|
+
/**
|
|
8
|
+
* Express / Next.js Pages API Middleware
|
|
9
|
+
* Validates request body, query, and params.
|
|
10
|
+
*/
|
|
11
|
+
export declare const validatePagesRequest: (schemas: {
|
|
12
|
+
body?: z.ZodSchema<any>;
|
|
13
|
+
query?: z.ZodSchema<any>;
|
|
14
|
+
params?: z.ZodSchema<any>;
|
|
15
|
+
}) => (req: any, res: any, next: Function) => any;
|
|
16
|
+
/**
|
|
17
|
+
* App Router Route Handler Wrapper
|
|
18
|
+
* Used to wrap a standard Route Handler function to ensure request validation.
|
|
19
|
+
*/
|
|
20
|
+
export declare const validateAppRoute: (schema: z.ZodSchema<any>, handler: (req: Request, validatedData: any, ...args: any[]) => Promise<Response> | Response) => (req: Request, ...args: any[]) => Promise<Response>;
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.validateAppRoute = exports.validatePagesRequest = exports.validateStructure = void 0;
|
|
4
|
+
const zod_1 = require("zod");
|
|
5
|
+
/**
|
|
6
|
+
* Framework-agnostic validation utility.
|
|
7
|
+
* Validates any given data against a provided Zod schema.
|
|
8
|
+
*/
|
|
9
|
+
const validateStructure = (schema, data) => {
|
|
10
|
+
try {
|
|
11
|
+
return schema.parse(data);
|
|
12
|
+
}
|
|
13
|
+
catch (err) {
|
|
14
|
+
if (err instanceof zod_1.ZodError) {
|
|
15
|
+
const zodErr = err;
|
|
16
|
+
throw {
|
|
17
|
+
status: 400,
|
|
18
|
+
message: 'Validation Error',
|
|
19
|
+
errors: zodErr.issues.map((e) => ({ field: e.path.join('.'), message: e.message }))
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
throw err;
|
|
23
|
+
}
|
|
24
|
+
};
|
|
25
|
+
exports.validateStructure = validateStructure;
|
|
26
|
+
/**
|
|
27
|
+
* Express / Next.js Pages API Middleware
|
|
28
|
+
* Validates request body, query, and params.
|
|
29
|
+
*/
|
|
30
|
+
const validatePagesRequest = (schemas) => {
|
|
31
|
+
return (req, res, next) => {
|
|
32
|
+
try {
|
|
33
|
+
if (schemas.body)
|
|
34
|
+
req.body = (0, exports.validateStructure)(schemas.body, req.body);
|
|
35
|
+
if (schemas.query)
|
|
36
|
+
req.query = (0, exports.validateStructure)(schemas.query, req.query);
|
|
37
|
+
if (schemas.params)
|
|
38
|
+
req.params = (0, exports.validateStructure)(schemas.params, req.params);
|
|
39
|
+
next();
|
|
40
|
+
}
|
|
41
|
+
catch (err) {
|
|
42
|
+
return res.status(err.status || 400).json(err);
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
};
|
|
46
|
+
exports.validatePagesRequest = validatePagesRequest;
|
|
47
|
+
/**
|
|
48
|
+
* App Router Route Handler Wrapper
|
|
49
|
+
* Used to wrap a standard Route Handler function to ensure request validation.
|
|
50
|
+
*/
|
|
51
|
+
const validateAppRoute = (schema, handler) => {
|
|
52
|
+
return async (req, ...args) => {
|
|
53
|
+
try {
|
|
54
|
+
// Typically we validate the body for App Router POST/PUT requests
|
|
55
|
+
let body;
|
|
56
|
+
if (req.method === 'POST' || req.method === 'PUT' || req.method === 'PATCH') {
|
|
57
|
+
body = await req.json().catch(() => ({}));
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
const url = new URL(req.url);
|
|
61
|
+
body = Object.fromEntries(url.searchParams.entries());
|
|
62
|
+
}
|
|
63
|
+
const validatedData = (0, exports.validateStructure)(schema, body);
|
|
64
|
+
return handler(req, validatedData, ...args);
|
|
65
|
+
}
|
|
66
|
+
catch (err) {
|
|
67
|
+
const status = err.status || 400;
|
|
68
|
+
return new Response(JSON.stringify(err), {
|
|
69
|
+
status,
|
|
70
|
+
headers: { 'Content-Type': 'application/json' }
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
};
|
|
74
|
+
};
|
|
75
|
+
exports.validateAppRoute = validateAppRoute;
|
|
76
|
+
//# sourceMappingURL=zod.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"zod.js","sourceRoot":"","sources":["../../middleware/zod.ts"],"names":[],"mappings":"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"}
|
package/index.ts
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
// Re-export Auth
|
|
2
|
+
export * from './auth/auth';
|
|
3
|
+
// Re-export Controller
|
|
4
|
+
export * from './controller/controller';
|
|
5
|
+
// Re-export CRUD but alias DatabaseAdapter to avoid conflicts
|
|
6
|
+
export {
|
|
7
|
+
createCRUD,
|
|
8
|
+
BaseDocument,
|
|
9
|
+
QueryFilter,
|
|
10
|
+
PaginationOptions,
|
|
11
|
+
DatabaseAdapter as CrudDatabaseAdapter
|
|
12
|
+
} from './curd/crud';
|