@exyconn/common 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 (88) hide show
  1. package/README.md +259 -0
  2. package/dist/client/http/index.d.mts +85 -0
  3. package/dist/client/http/index.d.ts +85 -0
  4. package/dist/client/http/index.js +127 -0
  5. package/dist/client/http/index.js.map +1 -0
  6. package/dist/client/http/index.mjs +109 -0
  7. package/dist/client/http/index.mjs.map +1 -0
  8. package/dist/client/index.d.mts +7 -0
  9. package/dist/client/index.d.ts +7 -0
  10. package/dist/client/index.js +964 -0
  11. package/dist/client/index.js.map +1 -0
  12. package/dist/client/index.mjs +889 -0
  13. package/dist/client/index.mjs.map +1 -0
  14. package/dist/client/logger/index.d.mts +53 -0
  15. package/dist/client/logger/index.d.ts +53 -0
  16. package/dist/client/logger/index.js +120 -0
  17. package/dist/client/logger/index.js.map +1 -0
  18. package/dist/client/logger/index.mjs +116 -0
  19. package/dist/client/logger/index.mjs.map +1 -0
  20. package/dist/client/utils/index.d.mts +285 -0
  21. package/dist/client/utils/index.d.ts +285 -0
  22. package/dist/client/utils/index.js +403 -0
  23. package/dist/client/utils/index.js.map +1 -0
  24. package/dist/client/utils/index.mjs +362 -0
  25. package/dist/client/utils/index.mjs.map +1 -0
  26. package/dist/index-BNdT-2X4.d.ts +229 -0
  27. package/dist/index-CcrANHAQ.d.mts +59 -0
  28. package/dist/index-ClWtDfwk.d.ts +833 -0
  29. package/dist/index-DSW6JfD-.d.mts +833 -0
  30. package/dist/index-Du0LLt9f.d.mts +229 -0
  31. package/dist/index-iTKxFa78.d.ts +59 -0
  32. package/dist/index.d.mts +171 -0
  33. package/dist/index.d.ts +171 -0
  34. package/dist/index.js +3806 -0
  35. package/dist/index.js.map +1 -0
  36. package/dist/index.mjs +3792 -0
  37. package/dist/index.mjs.map +1 -0
  38. package/dist/response.types-D--UhLJq.d.mts +67 -0
  39. package/dist/response.types-D--UhLJq.d.ts +67 -0
  40. package/dist/server/db/index.d.mts +38 -0
  41. package/dist/server/db/index.d.ts +38 -0
  42. package/dist/server/db/index.js +68 -0
  43. package/dist/server/db/index.js.map +1 -0
  44. package/dist/server/db/index.mjs +60 -0
  45. package/dist/server/db/index.mjs.map +1 -0
  46. package/dist/server/enums/index.d.mts +46 -0
  47. package/dist/server/enums/index.d.ts +46 -0
  48. package/dist/server/enums/index.js +48 -0
  49. package/dist/server/enums/index.js.map +1 -0
  50. package/dist/server/enums/index.mjs +43 -0
  51. package/dist/server/enums/index.mjs.map +1 -0
  52. package/dist/server/index.d.mts +9 -0
  53. package/dist/server/index.d.ts +9 -0
  54. package/dist/server/index.js +569 -0
  55. package/dist/server/index.js.map +1 -0
  56. package/dist/server/index.mjs +523 -0
  57. package/dist/server/index.mjs.map +1 -0
  58. package/dist/server/logger/index.d.mts +34 -0
  59. package/dist/server/logger/index.d.ts +34 -0
  60. package/dist/server/logger/index.js +125 -0
  61. package/dist/server/logger/index.js.map +1 -0
  62. package/dist/server/logger/index.mjs +113 -0
  63. package/dist/server/logger/index.mjs.map +1 -0
  64. package/dist/server/middleware/index.d.mts +56 -0
  65. package/dist/server/middleware/index.d.ts +56 -0
  66. package/dist/server/middleware/index.js +128 -0
  67. package/dist/server/middleware/index.js.map +1 -0
  68. package/dist/server/middleware/index.mjs +118 -0
  69. package/dist/server/middleware/index.mjs.map +1 -0
  70. package/dist/server/response/index.d.mts +86 -0
  71. package/dist/server/response/index.d.ts +86 -0
  72. package/dist/server/response/index.js +140 -0
  73. package/dist/server/response/index.js.map +1 -0
  74. package/dist/server/response/index.mjs +126 -0
  75. package/dist/server/response/index.mjs.map +1 -0
  76. package/dist/server/utils/index.d.mts +69 -0
  77. package/dist/server/utils/index.d.ts +69 -0
  78. package/dist/server/utils/index.js +114 -0
  79. package/dist/server/utils/index.js.map +1 -0
  80. package/dist/server/utils/index.mjs +106 -0
  81. package/dist/server/utils/index.mjs.map +1 -0
  82. package/dist/shared/index.d.mts +4 -0
  83. package/dist/shared/index.d.ts +4 -0
  84. package/dist/shared/index.js +933 -0
  85. package/dist/shared/index.js.map +1 -0
  86. package/dist/shared/index.mjs +612 -0
  87. package/dist/shared/index.mjs.map +1 -0
  88. package/package.json +202 -0
@@ -0,0 +1,69 @@
1
+ /**
2
+ * Filter Builder Options
3
+ */
4
+ interface FilterOptions {
5
+ organizationId?: string;
6
+ search?: string;
7
+ searchFields?: string[];
8
+ dateField?: string;
9
+ startDate?: string;
10
+ endDate?: string;
11
+ status?: string;
12
+ isActive?: boolean;
13
+ [key: string]: unknown;
14
+ }
15
+ /**
16
+ * Pagination Options
17
+ */
18
+ interface PaginationOptions {
19
+ page?: number;
20
+ limit?: number;
21
+ defaultLimit?: number;
22
+ maxLimit?: number;
23
+ }
24
+ /**
25
+ * Pagination Result
26
+ */
27
+ interface PaginationResult {
28
+ skip: number;
29
+ limit: number;
30
+ page: number;
31
+ }
32
+ /**
33
+ * Build MongoDB filter query dynamically
34
+ */
35
+ declare const buildFilter: (options: FilterOptions) => Record<string, unknown>;
36
+ /**
37
+ * Calculate pagination values
38
+ */
39
+ declare const buildPagination: (options: PaginationOptions) => PaginationResult;
40
+ /**
41
+ * Calculate pagination metadata for response
42
+ */
43
+ declare const buildPaginationMeta: (total: number, page: number, limit: number) => {
44
+ total: number;
45
+ page: number;
46
+ limit: number;
47
+ totalPages: number;
48
+ hasNextPage: boolean;
49
+ hasPrevPage: boolean;
50
+ };
51
+
52
+ /**
53
+ * Sanitize user object by removing sensitive fields
54
+ */
55
+ declare const sanitizeUser: <T extends Record<string, unknown>>(user: T | null | undefined, additionalFieldsToRemove?: string[]) => Omit<T, "password" | "__v" | "_id"> | null;
56
+ /**
57
+ * Sanitize document by removing specified fields
58
+ */
59
+ declare const sanitizeDocument: <T extends Record<string, unknown>>(doc: T | null | undefined, fieldsToRemove: string[]) => Partial<T> | null;
60
+ /**
61
+ * Pick specific fields from an object
62
+ */
63
+ declare const pickFields: <T extends Record<string, unknown>>(obj: T | null | undefined, fieldsToPick: (keyof T)[]) => Partial<T> | null;
64
+ /**
65
+ * Omit specific fields from an object
66
+ */
67
+ declare const omitFields: <T extends Record<string, unknown>, K extends keyof T>(obj: T | null | undefined, fieldsToOmit: K[]) => Omit<T, K> | null;
68
+
69
+ export { type FilterOptions, type PaginationOptions, type PaginationResult, buildFilter, buildPagination, buildPaginationMeta, omitFields, pickFields, sanitizeDocument, sanitizeUser };
@@ -0,0 +1,69 @@
1
+ /**
2
+ * Filter Builder Options
3
+ */
4
+ interface FilterOptions {
5
+ organizationId?: string;
6
+ search?: string;
7
+ searchFields?: string[];
8
+ dateField?: string;
9
+ startDate?: string;
10
+ endDate?: string;
11
+ status?: string;
12
+ isActive?: boolean;
13
+ [key: string]: unknown;
14
+ }
15
+ /**
16
+ * Pagination Options
17
+ */
18
+ interface PaginationOptions {
19
+ page?: number;
20
+ limit?: number;
21
+ defaultLimit?: number;
22
+ maxLimit?: number;
23
+ }
24
+ /**
25
+ * Pagination Result
26
+ */
27
+ interface PaginationResult {
28
+ skip: number;
29
+ limit: number;
30
+ page: number;
31
+ }
32
+ /**
33
+ * Build MongoDB filter query dynamically
34
+ */
35
+ declare const buildFilter: (options: FilterOptions) => Record<string, unknown>;
36
+ /**
37
+ * Calculate pagination values
38
+ */
39
+ declare const buildPagination: (options: PaginationOptions) => PaginationResult;
40
+ /**
41
+ * Calculate pagination metadata for response
42
+ */
43
+ declare const buildPaginationMeta: (total: number, page: number, limit: number) => {
44
+ total: number;
45
+ page: number;
46
+ limit: number;
47
+ totalPages: number;
48
+ hasNextPage: boolean;
49
+ hasPrevPage: boolean;
50
+ };
51
+
52
+ /**
53
+ * Sanitize user object by removing sensitive fields
54
+ */
55
+ declare const sanitizeUser: <T extends Record<string, unknown>>(user: T | null | undefined, additionalFieldsToRemove?: string[]) => Omit<T, "password" | "__v" | "_id"> | null;
56
+ /**
57
+ * Sanitize document by removing specified fields
58
+ */
59
+ declare const sanitizeDocument: <T extends Record<string, unknown>>(doc: T | null | undefined, fieldsToRemove: string[]) => Partial<T> | null;
60
+ /**
61
+ * Pick specific fields from an object
62
+ */
63
+ declare const pickFields: <T extends Record<string, unknown>>(obj: T | null | undefined, fieldsToPick: (keyof T)[]) => Partial<T> | null;
64
+ /**
65
+ * Omit specific fields from an object
66
+ */
67
+ declare const omitFields: <T extends Record<string, unknown>, K extends keyof T>(obj: T | null | undefined, fieldsToOmit: K[]) => Omit<T, K> | null;
68
+
69
+ export { type FilterOptions, type PaginationOptions, type PaginationResult, buildFilter, buildPagination, buildPaginationMeta, omitFields, pickFields, sanitizeDocument, sanitizeUser };
@@ -0,0 +1,114 @@
1
+ 'use strict';
2
+
3
+ // src/server/utils/filter-builder.ts
4
+ var buildFilter = (options) => {
5
+ const {
6
+ organizationId,
7
+ search,
8
+ searchFields = [],
9
+ dateField = "createdAt",
10
+ startDate,
11
+ endDate,
12
+ status,
13
+ isActive,
14
+ ...additionalFilters
15
+ } = options;
16
+ const filter = {};
17
+ if (organizationId) {
18
+ filter.organizationId = organizationId;
19
+ }
20
+ if (search && search.trim().length >= 2 && searchFields.length > 0) {
21
+ const searchRegex = new RegExp(search.trim(), "i");
22
+ filter.$or = searchFields.map((field) => ({ [field]: searchRegex }));
23
+ }
24
+ if (startDate || endDate) {
25
+ filter[dateField] = {};
26
+ if (startDate) {
27
+ filter[dateField].$gte = new Date(startDate);
28
+ }
29
+ if (endDate) {
30
+ filter[dateField].$lte = new Date(endDate);
31
+ }
32
+ }
33
+ if (status !== void 0) {
34
+ filter.status = status;
35
+ }
36
+ if (isActive !== void 0) {
37
+ filter.isActive = isActive;
38
+ }
39
+ Object.entries(additionalFilters).forEach(([key, value]) => {
40
+ if (value !== void 0 && value !== null && value !== "") {
41
+ filter[key] = value;
42
+ }
43
+ });
44
+ return filter;
45
+ };
46
+ var buildPagination = (options) => {
47
+ const { page = 1, limit, defaultLimit = 10, maxLimit = 100 } = options;
48
+ const finalPage = Math.max(1, page);
49
+ const finalLimit = Math.min(maxLimit, Math.max(1, limit || defaultLimit));
50
+ const skip = (finalPage - 1) * finalLimit;
51
+ return {
52
+ skip,
53
+ limit: finalLimit,
54
+ page: finalPage
55
+ };
56
+ };
57
+ var buildPaginationMeta = (total, page, limit) => {
58
+ const totalPages = Math.ceil(total / limit);
59
+ return {
60
+ total,
61
+ page,
62
+ limit,
63
+ totalPages,
64
+ hasNextPage: page < totalPages,
65
+ hasPrevPage: page > 1
66
+ };
67
+ };
68
+
69
+ // src/server/utils/sanitize.ts
70
+ var sanitizeUser = (user, additionalFieldsToRemove = []) => {
71
+ if (!user) return null;
72
+ const fieldsToRemove = ["password", "__v", "_id", ...additionalFieldsToRemove];
73
+ const obj = typeof user.toObject === "function" ? user.toObject() : { ...user };
74
+ fieldsToRemove.forEach((field) => {
75
+ delete obj[field];
76
+ });
77
+ return obj;
78
+ };
79
+ var sanitizeDocument = (doc, fieldsToRemove) => {
80
+ if (!doc) return null;
81
+ const obj = typeof doc.toObject === "function" ? doc.toObject() : { ...doc };
82
+ fieldsToRemove.forEach((field) => {
83
+ delete obj[field];
84
+ });
85
+ return obj;
86
+ };
87
+ var pickFields = (obj, fieldsToPick) => {
88
+ if (!obj) return null;
89
+ const result = {};
90
+ fieldsToPick.forEach((field) => {
91
+ if (field in obj) {
92
+ result[field] = obj[field];
93
+ }
94
+ });
95
+ return result;
96
+ };
97
+ var omitFields = (obj, fieldsToOmit) => {
98
+ if (!obj) return null;
99
+ const result = { ...obj };
100
+ fieldsToOmit.forEach((field) => {
101
+ delete result[field];
102
+ });
103
+ return result;
104
+ };
105
+
106
+ exports.buildFilter = buildFilter;
107
+ exports.buildPagination = buildPagination;
108
+ exports.buildPaginationMeta = buildPaginationMeta;
109
+ exports.omitFields = omitFields;
110
+ exports.pickFields = pickFields;
111
+ exports.sanitizeDocument = sanitizeDocument;
112
+ exports.sanitizeUser = sanitizeUser;
113
+ //# sourceMappingURL=index.js.map
114
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/server/utils/filter-builder.ts","../../../src/server/utils/sanitize.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["/**\r\n * Filter Builder Options\r\n */\r\nexport interface FilterOptions {\r\n organizationId?: string;\r\n search?: string;\r\n searchFields?: string[];\r\n dateField?: string;\r\n startDate?: string;\r\n endDate?: string;\r\n status?: string;\r\n isActive?: boolean;\r\n [key: string]: unknown;\r\n}\r\n\r\n/**\r\n * Pagination Options\r\n */\r\nexport interface PaginationOptions {\r\n page?: number;\r\n limit?: number;\r\n defaultLimit?: number;\r\n maxLimit?: number;\r\n}\r\n\r\n/**\r\n * Pagination Result\r\n */\r\nexport interface PaginationResult {\r\n skip: number;\r\n limit: number;\r\n page: number;\r\n}\r\n\r\n/**\r\n * Build MongoDB filter query dynamically\r\n */\r\nexport const buildFilter = (options: FilterOptions): Record<string, unknown> => {\r\n const {\r\n organizationId,\r\n search,\r\n searchFields = [],\r\n dateField = 'createdAt',\r\n startDate,\r\n endDate,\r\n status,\r\n isActive,\r\n ...additionalFilters\r\n } = options;\r\n\r\n const filter: Record<string, unknown> = {};\r\n\r\n // Add organizationId if provided\r\n if (organizationId) {\r\n filter.organizationId = organizationId;\r\n }\r\n\r\n // Handle text search with regex (min 2 characters)\r\n if (search && search.trim().length >= 2 && searchFields.length > 0) {\r\n const searchRegex = new RegExp(search.trim(), 'i');\r\n filter.$or = searchFields.map((field) => ({ [field]: searchRegex }));\r\n }\r\n\r\n // Handle date range filtering\r\n if (startDate || endDate) {\r\n filter[dateField] = {};\r\n if (startDate) {\r\n (filter[dateField] as Record<string, unknown>).$gte = new Date(startDate);\r\n }\r\n if (endDate) {\r\n (filter[dateField] as Record<string, unknown>).$lte = new Date(endDate);\r\n }\r\n }\r\n\r\n // Handle status filter\r\n if (status !== undefined) {\r\n filter.status = status;\r\n }\r\n\r\n // Handle isActive filter\r\n if (isActive !== undefined) {\r\n filter.isActive = isActive;\r\n }\r\n\r\n // Add any additional filters\r\n Object.entries(additionalFilters).forEach(([key, value]) => {\r\n if (value !== undefined && value !== null && value !== '') {\r\n filter[key] = value;\r\n }\r\n });\r\n\r\n return filter;\r\n};\r\n\r\n/**\r\n * Calculate pagination values\r\n */\r\nexport const buildPagination = (options: PaginationOptions): PaginationResult => {\r\n const { page = 1, limit, defaultLimit = 10, maxLimit = 100 } = options;\r\n\r\n const finalPage = Math.max(1, page);\r\n const finalLimit = Math.min(maxLimit, Math.max(1, limit || defaultLimit));\r\n const skip = (finalPage - 1) * finalLimit;\r\n\r\n return {\r\n skip,\r\n limit: finalLimit,\r\n page: finalPage,\r\n };\r\n};\r\n\r\n/**\r\n * Calculate pagination metadata for response\r\n */\r\nexport const buildPaginationMeta = (\r\n total: number,\r\n page: number,\r\n limit: number\r\n): {\r\n total: number;\r\n page: number;\r\n limit: number;\r\n totalPages: number;\r\n hasNextPage: boolean;\r\n hasPrevPage: boolean;\r\n} => {\r\n const totalPages = Math.ceil(total / limit);\r\n\r\n return {\r\n total,\r\n page,\r\n limit,\r\n totalPages,\r\n hasNextPage: page < totalPages,\r\n hasPrevPage: page > 1,\r\n };\r\n};\r\n\r\nexport default {\r\n buildFilter,\r\n buildPagination,\r\n buildPaginationMeta,\r\n};\r\n","/**\r\n * Sanitize user object by removing sensitive fields\r\n */\r\nexport const sanitizeUser = <T extends Record<string, unknown>>(\r\n user: T | null | undefined,\r\n additionalFieldsToRemove: string[] = []\r\n): Omit<T, 'password' | '__v' | '_id'> | null => {\r\n if (!user) return null;\r\n\r\n const fieldsToRemove = ['password', '__v', '_id', ...additionalFieldsToRemove];\r\n\r\n // Handle mongoose documents\r\n const obj = typeof (user as any).toObject === 'function' \r\n ? (user as any).toObject() \r\n : { ...user };\r\n\r\n fieldsToRemove.forEach((field) => {\r\n delete obj[field];\r\n });\r\n\r\n return obj;\r\n};\r\n\r\n/**\r\n * Sanitize document by removing specified fields\r\n */\r\nexport const sanitizeDocument = <T extends Record<string, unknown>>(\r\n doc: T | null | undefined,\r\n fieldsToRemove: string[]\r\n): Partial<T> | null => {\r\n if (!doc) return null;\r\n\r\n // Handle mongoose documents\r\n const obj = typeof (doc as any).toObject === 'function' \r\n ? (doc as any).toObject() \r\n : { ...doc };\r\n\r\n fieldsToRemove.forEach((field) => {\r\n delete obj[field];\r\n });\r\n\r\n return obj;\r\n};\r\n\r\n/**\r\n * Pick specific fields from an object\r\n */\r\nexport const pickFields = <T extends Record<string, unknown>>(\r\n obj: T | null | undefined,\r\n fieldsToPick: (keyof T)[]\r\n): Partial<T> | null => {\r\n if (!obj) return null;\r\n\r\n const result: Partial<T> = {};\r\n\r\n fieldsToPick.forEach((field) => {\r\n if (field in obj) {\r\n result[field] = obj[field];\r\n }\r\n });\r\n\r\n return result;\r\n};\r\n\r\n/**\r\n * Omit specific fields from an object\r\n */\r\nexport const omitFields = <T extends Record<string, unknown>, K extends keyof T>(\r\n obj: T | null | undefined,\r\n fieldsToOmit: K[]\r\n): Omit<T, K> | null => {\r\n if (!obj) return null;\r\n\r\n const result = { ...obj };\r\n\r\n fieldsToOmit.forEach((field) => {\r\n delete result[field];\r\n });\r\n\r\n return result as Omit<T, K>;\r\n};\r\n\r\nexport default {\r\n sanitizeUser,\r\n sanitizeDocument,\r\n pickFields,\r\n omitFields,\r\n};\r\n"]}
@@ -0,0 +1,106 @@
1
+ // src/server/utils/filter-builder.ts
2
+ var buildFilter = (options) => {
3
+ const {
4
+ organizationId,
5
+ search,
6
+ searchFields = [],
7
+ dateField = "createdAt",
8
+ startDate,
9
+ endDate,
10
+ status,
11
+ isActive,
12
+ ...additionalFilters
13
+ } = options;
14
+ const filter = {};
15
+ if (organizationId) {
16
+ filter.organizationId = organizationId;
17
+ }
18
+ if (search && search.trim().length >= 2 && searchFields.length > 0) {
19
+ const searchRegex = new RegExp(search.trim(), "i");
20
+ filter.$or = searchFields.map((field) => ({ [field]: searchRegex }));
21
+ }
22
+ if (startDate || endDate) {
23
+ filter[dateField] = {};
24
+ if (startDate) {
25
+ filter[dateField].$gte = new Date(startDate);
26
+ }
27
+ if (endDate) {
28
+ filter[dateField].$lte = new Date(endDate);
29
+ }
30
+ }
31
+ if (status !== void 0) {
32
+ filter.status = status;
33
+ }
34
+ if (isActive !== void 0) {
35
+ filter.isActive = isActive;
36
+ }
37
+ Object.entries(additionalFilters).forEach(([key, value]) => {
38
+ if (value !== void 0 && value !== null && value !== "") {
39
+ filter[key] = value;
40
+ }
41
+ });
42
+ return filter;
43
+ };
44
+ var buildPagination = (options) => {
45
+ const { page = 1, limit, defaultLimit = 10, maxLimit = 100 } = options;
46
+ const finalPage = Math.max(1, page);
47
+ const finalLimit = Math.min(maxLimit, Math.max(1, limit || defaultLimit));
48
+ const skip = (finalPage - 1) * finalLimit;
49
+ return {
50
+ skip,
51
+ limit: finalLimit,
52
+ page: finalPage
53
+ };
54
+ };
55
+ var buildPaginationMeta = (total, page, limit) => {
56
+ const totalPages = Math.ceil(total / limit);
57
+ return {
58
+ total,
59
+ page,
60
+ limit,
61
+ totalPages,
62
+ hasNextPage: page < totalPages,
63
+ hasPrevPage: page > 1
64
+ };
65
+ };
66
+
67
+ // src/server/utils/sanitize.ts
68
+ var sanitizeUser = (user, additionalFieldsToRemove = []) => {
69
+ if (!user) return null;
70
+ const fieldsToRemove = ["password", "__v", "_id", ...additionalFieldsToRemove];
71
+ const obj = typeof user.toObject === "function" ? user.toObject() : { ...user };
72
+ fieldsToRemove.forEach((field) => {
73
+ delete obj[field];
74
+ });
75
+ return obj;
76
+ };
77
+ var sanitizeDocument = (doc, fieldsToRemove) => {
78
+ if (!doc) return null;
79
+ const obj = typeof doc.toObject === "function" ? doc.toObject() : { ...doc };
80
+ fieldsToRemove.forEach((field) => {
81
+ delete obj[field];
82
+ });
83
+ return obj;
84
+ };
85
+ var pickFields = (obj, fieldsToPick) => {
86
+ if (!obj) return null;
87
+ const result = {};
88
+ fieldsToPick.forEach((field) => {
89
+ if (field in obj) {
90
+ result[field] = obj[field];
91
+ }
92
+ });
93
+ return result;
94
+ };
95
+ var omitFields = (obj, fieldsToOmit) => {
96
+ if (!obj) return null;
97
+ const result = { ...obj };
98
+ fieldsToOmit.forEach((field) => {
99
+ delete result[field];
100
+ });
101
+ return result;
102
+ };
103
+
104
+ export { buildFilter, buildPagination, buildPaginationMeta, omitFields, pickFields, sanitizeDocument, sanitizeUser };
105
+ //# sourceMappingURL=index.mjs.map
106
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/server/utils/filter-builder.ts","../../../src/server/utils/sanitize.ts"],"names":[],"mappings":"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","file":"index.mjs","sourcesContent":["/**\r\n * Filter Builder Options\r\n */\r\nexport interface FilterOptions {\r\n organizationId?: string;\r\n search?: string;\r\n searchFields?: string[];\r\n dateField?: string;\r\n startDate?: string;\r\n endDate?: string;\r\n status?: string;\r\n isActive?: boolean;\r\n [key: string]: unknown;\r\n}\r\n\r\n/**\r\n * Pagination Options\r\n */\r\nexport interface PaginationOptions {\r\n page?: number;\r\n limit?: number;\r\n defaultLimit?: number;\r\n maxLimit?: number;\r\n}\r\n\r\n/**\r\n * Pagination Result\r\n */\r\nexport interface PaginationResult {\r\n skip: number;\r\n limit: number;\r\n page: number;\r\n}\r\n\r\n/**\r\n * Build MongoDB filter query dynamically\r\n */\r\nexport const buildFilter = (options: FilterOptions): Record<string, unknown> => {\r\n const {\r\n organizationId,\r\n search,\r\n searchFields = [],\r\n dateField = 'createdAt',\r\n startDate,\r\n endDate,\r\n status,\r\n isActive,\r\n ...additionalFilters\r\n } = options;\r\n\r\n const filter: Record<string, unknown> = {};\r\n\r\n // Add organizationId if provided\r\n if (organizationId) {\r\n filter.organizationId = organizationId;\r\n }\r\n\r\n // Handle text search with regex (min 2 characters)\r\n if (search && search.trim().length >= 2 && searchFields.length > 0) {\r\n const searchRegex = new RegExp(search.trim(), 'i');\r\n filter.$or = searchFields.map((field) => ({ [field]: searchRegex }));\r\n }\r\n\r\n // Handle date range filtering\r\n if (startDate || endDate) {\r\n filter[dateField] = {};\r\n if (startDate) {\r\n (filter[dateField] as Record<string, unknown>).$gte = new Date(startDate);\r\n }\r\n if (endDate) {\r\n (filter[dateField] as Record<string, unknown>).$lte = new Date(endDate);\r\n }\r\n }\r\n\r\n // Handle status filter\r\n if (status !== undefined) {\r\n filter.status = status;\r\n }\r\n\r\n // Handle isActive filter\r\n if (isActive !== undefined) {\r\n filter.isActive = isActive;\r\n }\r\n\r\n // Add any additional filters\r\n Object.entries(additionalFilters).forEach(([key, value]) => {\r\n if (value !== undefined && value !== null && value !== '') {\r\n filter[key] = value;\r\n }\r\n });\r\n\r\n return filter;\r\n};\r\n\r\n/**\r\n * Calculate pagination values\r\n */\r\nexport const buildPagination = (options: PaginationOptions): PaginationResult => {\r\n const { page = 1, limit, defaultLimit = 10, maxLimit = 100 } = options;\r\n\r\n const finalPage = Math.max(1, page);\r\n const finalLimit = Math.min(maxLimit, Math.max(1, limit || defaultLimit));\r\n const skip = (finalPage - 1) * finalLimit;\r\n\r\n return {\r\n skip,\r\n limit: finalLimit,\r\n page: finalPage,\r\n };\r\n};\r\n\r\n/**\r\n * Calculate pagination metadata for response\r\n */\r\nexport const buildPaginationMeta = (\r\n total: number,\r\n page: number,\r\n limit: number\r\n): {\r\n total: number;\r\n page: number;\r\n limit: number;\r\n totalPages: number;\r\n hasNextPage: boolean;\r\n hasPrevPage: boolean;\r\n} => {\r\n const totalPages = Math.ceil(total / limit);\r\n\r\n return {\r\n total,\r\n page,\r\n limit,\r\n totalPages,\r\n hasNextPage: page < totalPages,\r\n hasPrevPage: page > 1,\r\n };\r\n};\r\n\r\nexport default {\r\n buildFilter,\r\n buildPagination,\r\n buildPaginationMeta,\r\n};\r\n","/**\r\n * Sanitize user object by removing sensitive fields\r\n */\r\nexport const sanitizeUser = <T extends Record<string, unknown>>(\r\n user: T | null | undefined,\r\n additionalFieldsToRemove: string[] = []\r\n): Omit<T, 'password' | '__v' | '_id'> | null => {\r\n if (!user) return null;\r\n\r\n const fieldsToRemove = ['password', '__v', '_id', ...additionalFieldsToRemove];\r\n\r\n // Handle mongoose documents\r\n const obj = typeof (user as any).toObject === 'function' \r\n ? (user as any).toObject() \r\n : { ...user };\r\n\r\n fieldsToRemove.forEach((field) => {\r\n delete obj[field];\r\n });\r\n\r\n return obj;\r\n};\r\n\r\n/**\r\n * Sanitize document by removing specified fields\r\n */\r\nexport const sanitizeDocument = <T extends Record<string, unknown>>(\r\n doc: T | null | undefined,\r\n fieldsToRemove: string[]\r\n): Partial<T> | null => {\r\n if (!doc) return null;\r\n\r\n // Handle mongoose documents\r\n const obj = typeof (doc as any).toObject === 'function' \r\n ? (doc as any).toObject() \r\n : { ...doc };\r\n\r\n fieldsToRemove.forEach((field) => {\r\n delete obj[field];\r\n });\r\n\r\n return obj;\r\n};\r\n\r\n/**\r\n * Pick specific fields from an object\r\n */\r\nexport const pickFields = <T extends Record<string, unknown>>(\r\n obj: T | null | undefined,\r\n fieldsToPick: (keyof T)[]\r\n): Partial<T> | null => {\r\n if (!obj) return null;\r\n\r\n const result: Partial<T> = {};\r\n\r\n fieldsToPick.forEach((field) => {\r\n if (field in obj) {\r\n result[field] = obj[field];\r\n }\r\n });\r\n\r\n return result;\r\n};\r\n\r\n/**\r\n * Omit specific fields from an object\r\n */\r\nexport const omitFields = <T extends Record<string, unknown>, K extends keyof T>(\r\n obj: T | null | undefined,\r\n fieldsToOmit: K[]\r\n): Omit<T, K> | null => {\r\n if (!obj) return null;\r\n\r\n const result = { ...obj };\r\n\r\n fieldsToOmit.forEach((field) => {\r\n delete result[field];\r\n });\r\n\r\n return result as Omit<T, K>;\r\n};\r\n\r\nexport default {\r\n sanitizeUser,\r\n sanitizeDocument,\r\n pickFields,\r\n omitFields,\r\n};\r\n"]}
@@ -0,0 +1,4 @@
1
+ export { A as ApiErrorResponse, a as ApiResponse, b as ApiSuccessResponse, B as BaseFilterParams, C as CreateResponse, D as DeleteResponse, F as FilterWithPagination, G as GetResponse, L as ListResponse, P as PaginatedResponse, c as PaginationMeta, d as PaginationParams, U as UpdateResponse } from '../response.types-D--UhLJq.mjs';
2
+ export { e as AuditableEntity, b as AuthResponse, A as AuthTokens, d as BaseEntity, B as BaseUser, C as ChangePasswordRequest, W as DATE_FORMATS, M as DateInput, E as EnvConfig, F as ForgotPasswordRequest, H as HTTP_STATUS, s as HTTP_STATUS_MESSAGES, r as HttpStatusCode, I as ID, J as JwtPayload, K as KeyValuePair, L as LoginCredentials, N as Nullable, f as ObjectId, g as Optional, O as OrganizationEntity, P as PAGINATION, y as ROLES, R as RegisterCredentials, h as RequiredFields, c as ResetPasswordRequest, z as RoleValue, t as STATUS, j as SelectOption, S as SoftDeleteEntity, l as SortConfig, k as SortOrder, u as StatusValue, D as TOKEN_TYPES, T as Timestamps, G as TokenType, w as USER_STATUS, a as UserRole, x as UserStatusValue, U as UserWithRole, az as VALIDATION_MESSAGES, as as VALIDATION_PATTERNS, aA as VALIDATION_RULES, a6 as addTime, ar as combineDateAndTime, _ as dateTime, am as daysSince, al as daysUntil, ah as doDateRangesOverlap, X as formatDate, Z as formatDateInTimezone, a1 as formatDateRange, Y as formatDateTime, $ as formatRelativeTime, a0 as formatSmartDate, a3 as fromTimezone, ai as getAge, a8 as getDateDifference, ac as getDayBoundaries, a9 as getDaysInRange, m as getEnv, n as getEnvOptional, ae as getMonthBoundaries, ab as getMonthsInRange, a5 as getTimezoneDifference, ad as getWeekBoundaries, aa as getWeeksInRange, af as getYearBoundaries, ag as isDateBetween, p as isDev, o as isProd, q as isTest, V as isValidDate, at as isValidEmail, au as isValidPassword, av as isValidPhone, ay as isValidSlug, aw as isValidUrl, ax as isValidUsername, ak as isWeekday, aj as isWeekend, a4 as nowInTimezone, Q as parseDate, aq as setTime, a7 as subtractTime, an as toDateInputValue, ao as toDateTimeInputValue, ap as toTimeInputValue, a2 as toTimezone, v as validateEnv } from '../index-DSW6JfD-.mjs';
3
+ export { addDays, addHours, addMinutes, addMonths, addWeeks, addYears, differenceInDays, differenceInHours, differenceInMinutes, differenceInMonths, differenceInSeconds, differenceInWeeks, differenceInYears, eachDayOfInterval, eachMonthOfInterval, eachWeekOfInterval, endOfDay, endOfMonth, endOfWeek, endOfYear, format, formatDistance, formatDistanceToNow, formatDuration, formatRelative, getDate, getDay, getHours, getMinutes, getMonth, getSeconds, getYear, intervalToDuration, isAfter, isBefore, isEqual, isFuture, isPast, isSameDay, isSameMonth, isSameWeek, isSameYear, isThisMonth, isThisWeek, isThisYear, isToday, isTomorrow, isValid, isYesterday, parseISO, setHours, setMinutes, setSeconds, startOfDay, startOfMonth, startOfWeek, startOfYear, subDays, subHours, subMinutes, subMonths, subWeeks, subYears } from 'date-fns';
4
+ export { formatInTimeZone, fromZonedTime, toZonedTime } from 'date-fns-tz';
@@ -0,0 +1,4 @@
1
+ export { A as ApiErrorResponse, a as ApiResponse, b as ApiSuccessResponse, B as BaseFilterParams, C as CreateResponse, D as DeleteResponse, F as FilterWithPagination, G as GetResponse, L as ListResponse, P as PaginatedResponse, c as PaginationMeta, d as PaginationParams, U as UpdateResponse } from '../response.types-D--UhLJq.js';
2
+ export { e as AuditableEntity, b as AuthResponse, A as AuthTokens, d as BaseEntity, B as BaseUser, C as ChangePasswordRequest, W as DATE_FORMATS, M as DateInput, E as EnvConfig, F as ForgotPasswordRequest, H as HTTP_STATUS, s as HTTP_STATUS_MESSAGES, r as HttpStatusCode, I as ID, J as JwtPayload, K as KeyValuePair, L as LoginCredentials, N as Nullable, f as ObjectId, g as Optional, O as OrganizationEntity, P as PAGINATION, y as ROLES, R as RegisterCredentials, h as RequiredFields, c as ResetPasswordRequest, z as RoleValue, t as STATUS, j as SelectOption, S as SoftDeleteEntity, l as SortConfig, k as SortOrder, u as StatusValue, D as TOKEN_TYPES, T as Timestamps, G as TokenType, w as USER_STATUS, a as UserRole, x as UserStatusValue, U as UserWithRole, az as VALIDATION_MESSAGES, as as VALIDATION_PATTERNS, aA as VALIDATION_RULES, a6 as addTime, ar as combineDateAndTime, _ as dateTime, am as daysSince, al as daysUntil, ah as doDateRangesOverlap, X as formatDate, Z as formatDateInTimezone, a1 as formatDateRange, Y as formatDateTime, $ as formatRelativeTime, a0 as formatSmartDate, a3 as fromTimezone, ai as getAge, a8 as getDateDifference, ac as getDayBoundaries, a9 as getDaysInRange, m as getEnv, n as getEnvOptional, ae as getMonthBoundaries, ab as getMonthsInRange, a5 as getTimezoneDifference, ad as getWeekBoundaries, aa as getWeeksInRange, af as getYearBoundaries, ag as isDateBetween, p as isDev, o as isProd, q as isTest, V as isValidDate, at as isValidEmail, au as isValidPassword, av as isValidPhone, ay as isValidSlug, aw as isValidUrl, ax as isValidUsername, ak as isWeekday, aj as isWeekend, a4 as nowInTimezone, Q as parseDate, aq as setTime, a7 as subtractTime, an as toDateInputValue, ao as toDateTimeInputValue, ap as toTimeInputValue, a2 as toTimezone, v as validateEnv } from '../index-ClWtDfwk.js';
3
+ export { addDays, addHours, addMinutes, addMonths, addWeeks, addYears, differenceInDays, differenceInHours, differenceInMinutes, differenceInMonths, differenceInSeconds, differenceInWeeks, differenceInYears, eachDayOfInterval, eachMonthOfInterval, eachWeekOfInterval, endOfDay, endOfMonth, endOfWeek, endOfYear, format, formatDistance, formatDistanceToNow, formatDuration, formatRelative, getDate, getDay, getHours, getMinutes, getMonth, getSeconds, getYear, intervalToDuration, isAfter, isBefore, isEqual, isFuture, isPast, isSameDay, isSameMonth, isSameWeek, isSameYear, isThisMonth, isThisWeek, isThisYear, isToday, isTomorrow, isValid, isYesterday, parseISO, setHours, setMinutes, setSeconds, startOfDay, startOfMonth, startOfWeek, startOfYear, subDays, subHours, subMinutes, subMonths, subWeeks, subYears } from 'date-fns';
4
+ export { formatInTimeZone, fromZonedTime, toZonedTime } from 'date-fns-tz';