@ciscode/database-kit 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/CHANGELOG.md +206 -0
- package/LICENSE +21 -0
- package/README.md +446 -0
- package/dist/adapters/mongo.adapter.d.ts +44 -0
- package/dist/adapters/mongo.adapter.d.ts.map +1 -0
- package/dist/adapters/mongo.adapter.js +146 -0
- package/dist/adapters/mongo.adapter.js.map +1 -0
- package/dist/adapters/postgres.adapter.d.ts +49 -0
- package/dist/adapters/postgres.adapter.d.ts.map +1 -0
- package/dist/adapters/postgres.adapter.js +229 -0
- package/dist/adapters/postgres.adapter.js.map +1 -0
- package/dist/config/database.config.d.ts +55 -0
- package/dist/config/database.config.d.ts.map +1 -0
- package/dist/config/database.config.js +122 -0
- package/dist/config/database.config.js.map +1 -0
- package/dist/config/database.constants.d.ts +41 -0
- package/dist/config/database.constants.d.ts.map +1 -0
- package/dist/config/database.constants.js +45 -0
- package/dist/config/database.constants.js.map +1 -0
- package/dist/contracts/database.contracts.d.ts +191 -0
- package/dist/contracts/database.contracts.d.ts.map +1 -0
- package/dist/contracts/database.contracts.js +21 -0
- package/dist/contracts/database.contracts.js.map +1 -0
- package/dist/database-kit.module.d.ts +71 -0
- package/dist/database-kit.module.d.ts.map +1 -0
- package/dist/database-kit.module.js +158 -0
- package/dist/database-kit.module.js.map +1 -0
- package/dist/filters/database-exception.filter.d.ts +51 -0
- package/dist/filters/database-exception.filter.d.ts.map +1 -0
- package/dist/filters/database-exception.filter.js +236 -0
- package/dist/filters/database-exception.filter.js.map +1 -0
- package/dist/index.d.ts +19 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +78 -0
- package/dist/index.js.map +1 -0
- package/dist/middleware/database.decorators.d.ts +31 -0
- package/dist/middleware/database.decorators.d.ts.map +1 -0
- package/dist/middleware/database.decorators.js +39 -0
- package/dist/middleware/database.decorators.js.map +1 -0
- package/dist/services/database.service.d.ts +99 -0
- package/dist/services/database.service.d.ts.map +1 -0
- package/dist/services/database.service.js +205 -0
- package/dist/services/database.service.js.map +1 -0
- package/dist/services/logger.service.d.ts +63 -0
- package/dist/services/logger.service.d.ts.map +1 -0
- package/dist/services/logger.service.js +93 -0
- package/dist/services/logger.service.js.map +1 -0
- package/dist/utils/pagination.utils.d.ts +57 -0
- package/dist/utils/pagination.utils.d.ts.map +1 -0
- package/dist/utils/pagination.utils.js +113 -0
- package/dist/utils/pagination.utils.js.map +1 -0
- package/dist/utils/validation.utils.d.ts +60 -0
- package/dist/utils/validation.utils.d.ts.map +1 -0
- package/dist/utils/validation.utils.js +117 -0
- package/dist/utils/validation.utils.js.map +1 -0
- package/package.json +83 -0
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// src/utils/validation.utils.ts
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.isValidMongoId = isValidMongoId;
|
|
5
|
+
exports.isValidUuid = isValidUuid;
|
|
6
|
+
exports.isPositiveInteger = isPositiveInteger;
|
|
7
|
+
exports.sanitizeFilter = sanitizeFilter;
|
|
8
|
+
exports.validateRequiredFields = validateRequiredFields;
|
|
9
|
+
exports.pickFields = pickFields;
|
|
10
|
+
exports.omitFields = omitFields;
|
|
11
|
+
/**
|
|
12
|
+
* Utility functions for validation operations.
|
|
13
|
+
*/
|
|
14
|
+
/**
|
|
15
|
+
* Validates that a value is a valid MongoDB ObjectId string.
|
|
16
|
+
*
|
|
17
|
+
* @param id - The string to validate
|
|
18
|
+
* @returns True if valid ObjectId format
|
|
19
|
+
*/
|
|
20
|
+
function isValidMongoId(id) {
|
|
21
|
+
if (!id || typeof id !== 'string')
|
|
22
|
+
return false;
|
|
23
|
+
return /^[a-f\d]{24}$/i.test(id);
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Validates that a value is a valid UUID (v4).
|
|
27
|
+
*
|
|
28
|
+
* @param id - The string to validate
|
|
29
|
+
* @returns True if valid UUID format
|
|
30
|
+
*/
|
|
31
|
+
function isValidUuid(id) {
|
|
32
|
+
if (!id || typeof id !== 'string')
|
|
33
|
+
return false;
|
|
34
|
+
return /^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(id);
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Validates that a value is a positive integer.
|
|
38
|
+
*
|
|
39
|
+
* @param value - The value to validate
|
|
40
|
+
* @returns True if positive integer
|
|
41
|
+
*/
|
|
42
|
+
function isPositiveInteger(value) {
|
|
43
|
+
if (typeof value === 'number') {
|
|
44
|
+
return Number.isInteger(value) && value > 0;
|
|
45
|
+
}
|
|
46
|
+
if (typeof value === 'string') {
|
|
47
|
+
const parsed = parseInt(value, 10);
|
|
48
|
+
return !isNaN(parsed) && parsed > 0 && String(parsed) === value;
|
|
49
|
+
}
|
|
50
|
+
return false;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Sanitizes a filter object by removing undefined and null values.
|
|
54
|
+
*
|
|
55
|
+
* @param filter - The filter object to sanitize
|
|
56
|
+
* @returns Sanitized filter object
|
|
57
|
+
*/
|
|
58
|
+
function sanitizeFilter(filter) {
|
|
59
|
+
const sanitized = {};
|
|
60
|
+
for (const [key, value] of Object.entries(filter)) {
|
|
61
|
+
if (value !== undefined && value !== null) {
|
|
62
|
+
sanitized[key] = value;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
return sanitized;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Validates that all required fields are present in an object.
|
|
69
|
+
*
|
|
70
|
+
* @param obj - The object to validate
|
|
71
|
+
* @param requiredFields - Array of required field names
|
|
72
|
+
* @returns Object with isValid boolean and missing fields array
|
|
73
|
+
*/
|
|
74
|
+
function validateRequiredFields(obj, requiredFields) {
|
|
75
|
+
const missing = [];
|
|
76
|
+
for (const field of requiredFields) {
|
|
77
|
+
if (obj[field] === undefined || obj[field] === null || obj[field] === '') {
|
|
78
|
+
missing.push(field);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
return {
|
|
82
|
+
isValid: missing.length === 0,
|
|
83
|
+
missing,
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Extracts only allowed fields from an object.
|
|
88
|
+
* Useful for preventing mass assignment vulnerabilities.
|
|
89
|
+
*
|
|
90
|
+
* @param obj - The source object
|
|
91
|
+
* @param allowedFields - Array of allowed field names
|
|
92
|
+
* @returns New object with only allowed fields
|
|
93
|
+
*/
|
|
94
|
+
function pickFields(obj, allowedFields) {
|
|
95
|
+
const result = {};
|
|
96
|
+
for (const field of allowedFields) {
|
|
97
|
+
if (field in obj) {
|
|
98
|
+
result[field] = obj[field];
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
return result;
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Omits specified fields from an object.
|
|
105
|
+
*
|
|
106
|
+
* @param obj - The source object
|
|
107
|
+
* @param fieldsToOmit - Array of field names to omit
|
|
108
|
+
* @returns New object without the omitted fields
|
|
109
|
+
*/
|
|
110
|
+
function omitFields(obj, fieldsToOmit) {
|
|
111
|
+
const result = { ...obj };
|
|
112
|
+
for (const field of fieldsToOmit) {
|
|
113
|
+
delete result[field];
|
|
114
|
+
}
|
|
115
|
+
return result;
|
|
116
|
+
}
|
|
117
|
+
//# sourceMappingURL=validation.utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.utils.js","sourceRoot":"","sources":["../../src/utils/validation.utils.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@ciscode/database-kit",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "A NestJS-friendly, OOP-style database library providing a unified repository API for MongoDB and PostgreSQL.",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"types": "dist/index.d.ts",
|
|
7
|
+
"license": "MIT",
|
|
8
|
+
"author": "C International Service <info@ciscode.com>",
|
|
9
|
+
"repository": {
|
|
10
|
+
"type": "git",
|
|
11
|
+
"url": "https://github.com/CISCODE-MA/DatabaseKit.git"
|
|
12
|
+
},
|
|
13
|
+
"homepage": "https://github.com/CISCODE-MA/DatabaseKit#readme",
|
|
14
|
+
"bugs": {
|
|
15
|
+
"url": "https://github.com/CISCODE-MA/DatabaseKit/issues"
|
|
16
|
+
},
|
|
17
|
+
"scripts": {
|
|
18
|
+
"build": "tsc -p tsconfig.json && tsc-alias -p tsconfig.json",
|
|
19
|
+
"build:watch": "tsc -w -p tsconfig.json",
|
|
20
|
+
"clean": "rm -rf dist",
|
|
21
|
+
"lint": "eslint 'src/**/*.ts'",
|
|
22
|
+
"lint:fix": "eslint 'src/**/*.ts' --fix",
|
|
23
|
+
"test": "jest",
|
|
24
|
+
"test:watch": "jest --watch",
|
|
25
|
+
"test:cov": "jest --coverage",
|
|
26
|
+
"prepublishOnly": "npm run clean && npm run build"
|
|
27
|
+
},
|
|
28
|
+
"engines": {
|
|
29
|
+
"node": ">=18"
|
|
30
|
+
},
|
|
31
|
+
"keywords": [
|
|
32
|
+
"database",
|
|
33
|
+
"mongodb",
|
|
34
|
+
"mongoose",
|
|
35
|
+
"postgres",
|
|
36
|
+
"postgresql",
|
|
37
|
+
"knex",
|
|
38
|
+
"repository",
|
|
39
|
+
"nestjs",
|
|
40
|
+
"nest",
|
|
41
|
+
"crud",
|
|
42
|
+
"orm",
|
|
43
|
+
"data-access",
|
|
44
|
+
"ciscode"
|
|
45
|
+
],
|
|
46
|
+
"dependencies": {
|
|
47
|
+
"knex": "^3.1.0",
|
|
48
|
+
"mongoose": "^8.22.0",
|
|
49
|
+
"pg": "^8.18.0"
|
|
50
|
+
},
|
|
51
|
+
"peerDependencies": {
|
|
52
|
+
"@nestjs/common": "^10.0.0 || ^11.0.0",
|
|
53
|
+
"@nestjs/core": "^10.0.0 || ^11.0.0",
|
|
54
|
+
"reflect-metadata": "^0.2.0"
|
|
55
|
+
},
|
|
56
|
+
"devDependencies": {
|
|
57
|
+
"@eslint/js": "^9.28.0",
|
|
58
|
+
"@nestjs/common": "^11.1.12",
|
|
59
|
+
"@nestjs/core": "^11.1.12",
|
|
60
|
+
"@nestjs/testing": "^11.1.12",
|
|
61
|
+
"@types/jest": "^29.5.14",
|
|
62
|
+
"@types/node": "^22.15.29",
|
|
63
|
+
"eslint": "^9.28.0",
|
|
64
|
+
"globals": "^16.2.0",
|
|
65
|
+
"jest": "^29.7.0",
|
|
66
|
+
"reflect-metadata": "^0.2.2",
|
|
67
|
+
"ts-jest": "^29.4.0",
|
|
68
|
+
"ts-node": "^10.9.2",
|
|
69
|
+
"tsc-alias": "^1.8.15",
|
|
70
|
+
"typescript": "^5.8.3",
|
|
71
|
+
"typescript-eslint": "^8.33.1"
|
|
72
|
+
},
|
|
73
|
+
"type": "commonjs",
|
|
74
|
+
"files": [
|
|
75
|
+
"dist",
|
|
76
|
+
"README.md",
|
|
77
|
+
"CHANGELOG.md",
|
|
78
|
+
"LICENSE"
|
|
79
|
+
],
|
|
80
|
+
"publishConfig": {
|
|
81
|
+
"access": "public"
|
|
82
|
+
}
|
|
83
|
+
}
|