@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.
Files changed (56) hide show
  1. package/CHANGELOG.md +206 -0
  2. package/LICENSE +21 -0
  3. package/README.md +446 -0
  4. package/dist/adapters/mongo.adapter.d.ts +44 -0
  5. package/dist/adapters/mongo.adapter.d.ts.map +1 -0
  6. package/dist/adapters/mongo.adapter.js +146 -0
  7. package/dist/adapters/mongo.adapter.js.map +1 -0
  8. package/dist/adapters/postgres.adapter.d.ts +49 -0
  9. package/dist/adapters/postgres.adapter.d.ts.map +1 -0
  10. package/dist/adapters/postgres.adapter.js +229 -0
  11. package/dist/adapters/postgres.adapter.js.map +1 -0
  12. package/dist/config/database.config.d.ts +55 -0
  13. package/dist/config/database.config.d.ts.map +1 -0
  14. package/dist/config/database.config.js +122 -0
  15. package/dist/config/database.config.js.map +1 -0
  16. package/dist/config/database.constants.d.ts +41 -0
  17. package/dist/config/database.constants.d.ts.map +1 -0
  18. package/dist/config/database.constants.js +45 -0
  19. package/dist/config/database.constants.js.map +1 -0
  20. package/dist/contracts/database.contracts.d.ts +191 -0
  21. package/dist/contracts/database.contracts.d.ts.map +1 -0
  22. package/dist/contracts/database.contracts.js +21 -0
  23. package/dist/contracts/database.contracts.js.map +1 -0
  24. package/dist/database-kit.module.d.ts +71 -0
  25. package/dist/database-kit.module.d.ts.map +1 -0
  26. package/dist/database-kit.module.js +158 -0
  27. package/dist/database-kit.module.js.map +1 -0
  28. package/dist/filters/database-exception.filter.d.ts +51 -0
  29. package/dist/filters/database-exception.filter.d.ts.map +1 -0
  30. package/dist/filters/database-exception.filter.js +236 -0
  31. package/dist/filters/database-exception.filter.js.map +1 -0
  32. package/dist/index.d.ts +19 -0
  33. package/dist/index.d.ts.map +1 -0
  34. package/dist/index.js +78 -0
  35. package/dist/index.js.map +1 -0
  36. package/dist/middleware/database.decorators.d.ts +31 -0
  37. package/dist/middleware/database.decorators.d.ts.map +1 -0
  38. package/dist/middleware/database.decorators.js +39 -0
  39. package/dist/middleware/database.decorators.js.map +1 -0
  40. package/dist/services/database.service.d.ts +99 -0
  41. package/dist/services/database.service.d.ts.map +1 -0
  42. package/dist/services/database.service.js +205 -0
  43. package/dist/services/database.service.js.map +1 -0
  44. package/dist/services/logger.service.d.ts +63 -0
  45. package/dist/services/logger.service.d.ts.map +1 -0
  46. package/dist/services/logger.service.js +93 -0
  47. package/dist/services/logger.service.js.map +1 -0
  48. package/dist/utils/pagination.utils.d.ts +57 -0
  49. package/dist/utils/pagination.utils.d.ts.map +1 -0
  50. package/dist/utils/pagination.utils.js +113 -0
  51. package/dist/utils/pagination.utils.js.map +1 -0
  52. package/dist/utils/validation.utils.d.ts +60 -0
  53. package/dist/utils/validation.utils.d.ts.map +1 -0
  54. package/dist/utils/validation.utils.js +117 -0
  55. package/dist/utils/validation.utils.js.map +1 -0
  56. 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
+ }