@nxgt/shared-mongo 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 (169) hide show
  1. package/README.md +15 -0
  2. package/dist/audit/audit.model.d.ts +209 -0
  3. package/dist/audit/audit.model.d.ts.map +1 -0
  4. package/dist/audit/audit.service.d.ts +17 -0
  5. package/dist/audit/audit.service.d.ts.map +1 -0
  6. package/dist/audit/audit.types.d.ts +29 -0
  7. package/dist/audit/audit.types.d.ts.map +1 -0
  8. package/dist/audit/audit.utils.d.ts +50 -0
  9. package/dist/audit/audit.utils.d.ts.map +1 -0
  10. package/dist/audit/index.d.ts +5 -0
  11. package/dist/audit/index.d.ts.map +1 -0
  12. package/dist/filters/filter.utils.d.ts +112 -0
  13. package/dist/filters/filter.utils.d.ts.map +1 -0
  14. package/dist/filters/index.d.ts +16 -0
  15. package/dist/filters/index.d.ts.map +1 -0
  16. package/dist/filters/index.js +199 -0
  17. package/dist/filters/index.js.map +10 -0
  18. package/dist/index.d.ts +14 -0
  19. package/dist/index.d.ts.map +1 -0
  20. package/dist/index.js +1847 -0
  21. package/dist/index.js.map +70 -0
  22. package/dist/integrity/index.d.ts +3 -0
  23. package/dist/integrity/index.d.ts.map +1 -0
  24. package/dist/integrity/integrity.registry.d.ts +38 -0
  25. package/dist/integrity/integrity.registry.d.ts.map +1 -0
  26. package/dist/integrity/integrity.types.d.ts +26 -0
  27. package/dist/integrity/integrity.types.d.ts.map +1 -0
  28. package/dist/migrations/cli.d.ts +28 -0
  29. package/dist/migrations/cli.d.ts.map +1 -0
  30. package/dist/migrations/disconnect.d.ts +8 -0
  31. package/dist/migrations/disconnect.d.ts.map +1 -0
  32. package/dist/migrations/index.d.ts +6 -0
  33. package/dist/migrations/index.d.ts.map +1 -0
  34. package/dist/migrations/migrate.d.ts +47 -0
  35. package/dist/migrations/migrate.d.ts.map +1 -0
  36. package/dist/migrations/migration.model.d.ts +7 -0
  37. package/dist/migrations/migration.model.d.ts.map +1 -0
  38. package/dist/migrations/migration.runner.d.ts +47 -0
  39. package/dist/migrations/migration.runner.d.ts.map +1 -0
  40. package/dist/migrations/migration.types.d.ts +48 -0
  41. package/dist/migrations/migration.types.d.ts.map +1 -0
  42. package/dist/migrations/migration.utils.d.ts +40 -0
  43. package/dist/migrations/migration.utils.d.ts.map +1 -0
  44. package/dist/models/index.d.ts +3 -0
  45. package/dist/models/index.d.ts.map +1 -0
  46. package/dist/models/pagination.d.ts +34 -0
  47. package/dist/models/pagination.d.ts.map +1 -0
  48. package/dist/models/postal-address.model.d.ts +64 -0
  49. package/dist/models/postal-address.model.d.ts.map +1 -0
  50. package/dist/mongoose.d.ts +3 -0
  51. package/dist/mongoose.d.ts.map +1 -0
  52. package/dist/plugins/consts.d.ts +6 -0
  53. package/dist/plugins/consts.d.ts.map +1 -0
  54. package/dist/plugins/errors.d.ts +3 -0
  55. package/dist/plugins/errors.d.ts.map +1 -0
  56. package/dist/plugins/index.d.ts +15 -0
  57. package/dist/plugins/index.d.ts.map +1 -0
  58. package/dist/plugins/pagination/index.d.ts +4 -0
  59. package/dist/plugins/pagination/index.d.ts.map +1 -0
  60. package/dist/plugins/pagination/types.d.ts +61 -0
  61. package/dist/plugins/pagination/types.d.ts.map +1 -0
  62. package/dist/plugins/pagination/utils.d.ts +24 -0
  63. package/dist/plugins/pagination/utils.d.ts.map +1 -0
  64. package/dist/plugins/shared/index.d.ts +3 -0
  65. package/dist/plugins/shared/index.d.ts.map +1 -0
  66. package/dist/plugins/shared/shared.d.ts +3 -0
  67. package/dist/plugins/shared/shared.d.ts.map +1 -0
  68. package/dist/plugins/soft-delete/index.d.ts +3 -0
  69. package/dist/plugins/soft-delete/index.d.ts.map +1 -0
  70. package/dist/plugins/soft-delete/soft-delete.d.ts +3 -0
  71. package/dist/plugins/soft-delete/soft-delete.d.ts.map +1 -0
  72. package/dist/services/crud.service.d.ts +88 -0
  73. package/dist/services/crud.service.d.ts.map +1 -0
  74. package/dist/services/index.d.ts +2 -0
  75. package/dist/services/index.d.ts.map +1 -0
  76. package/dist/types/index.d.ts +4 -0
  77. package/dist/types/index.d.ts.map +1 -0
  78. package/dist/types/pagination.d.ts +72 -0
  79. package/dist/types/shared.d.ts +49 -0
  80. package/dist/types/soft-delete.d.ts +627 -0
  81. package/dist/utils/clear-database.d.ts +24 -0
  82. package/dist/utils/clear-database.d.ts.map +1 -0
  83. package/dist/utils/error.utils.d.ts +4 -0
  84. package/dist/utils/error.utils.d.ts.map +1 -0
  85. package/dist/utils/filter.utils.d.ts +40 -0
  86. package/dist/utils/filter.utils.d.ts.map +1 -0
  87. package/dist/utils/helpers.d.ts +72 -0
  88. package/dist/utils/helpers.d.ts.map +1 -0
  89. package/dist/utils/index.d.ts +12 -0
  90. package/dist/utils/index.d.ts.map +1 -0
  91. package/dist/utils/mappers.d.ts +4 -0
  92. package/dist/utils/mappers.d.ts.map +1 -0
  93. package/dist/utils/models.d.ts +3 -0
  94. package/dist/utils/models.d.ts.map +1 -0
  95. package/dist/utils/mongo-utils.d.ts +45 -0
  96. package/dist/utils/mongo-utils.d.ts.map +1 -0
  97. package/dist/utils/object-id.utils.d.ts +16 -0
  98. package/dist/utils/object-id.utils.d.ts.map +1 -0
  99. package/dist/utils/pagination.utils.d.ts +6 -0
  100. package/dist/utils/pagination.utils.d.ts.map +1 -0
  101. package/dist/utils/schema.d.ts +2 -0
  102. package/dist/utils/schema.d.ts.map +1 -0
  103. package/dist/utils/sort.utils.d.ts +12 -0
  104. package/dist/utils/sort.utils.d.ts.map +1 -0
  105. package/dist/validation/index.d.ts +2 -0
  106. package/dist/validation/index.d.ts.map +1 -0
  107. package/dist/validation/validation.types.d.ts +36 -0
  108. package/dist/validation/validation.types.d.ts.map +1 -0
  109. package/dist/validation/validation.utils.d.ts +6 -0
  110. package/dist/validation/validation.utils.d.ts.map +1 -0
  111. package/dist/validation/validators/email.validator.d.ts +8 -0
  112. package/dist/validation/validators/email.validator.d.ts.map +1 -0
  113. package/dist/validation/validators/future.validator.d.ts +8 -0
  114. package/dist/validation/validators/future.validator.d.ts.map +1 -0
  115. package/dist/validation/validators/guid.validator.d.ts +6 -0
  116. package/dist/validation/validators/guid.validator.d.ts.map +1 -0
  117. package/dist/validation/validators/index.d.ts +30 -0
  118. package/dist/validation/validators/index.d.ts.map +1 -0
  119. package/dist/validation/validators/ip.validator.d.ts +6 -0
  120. package/dist/validation/validators/ip.validator.d.ts.map +1 -0
  121. package/dist/validation/validators/ipv4.validator.d.ts +6 -0
  122. package/dist/validation/validators/ipv4.validator.d.ts.map +1 -0
  123. package/dist/validation/validators/ipv6.validator.d.ts +6 -0
  124. package/dist/validation/validators/ipv6.validator.d.ts.map +1 -0
  125. package/dist/validation/validators/mac.validator.d.ts +6 -0
  126. package/dist/validation/validators/mac.validator.d.ts.map +1 -0
  127. package/dist/validation/validators/max-length.validator.d.ts +6 -0
  128. package/dist/validation/validators/max-length.validator.d.ts.map +1 -0
  129. package/dist/validation/validators/max.validator.d.ts +6 -0
  130. package/dist/validation/validators/max.validator.d.ts.map +1 -0
  131. package/dist/validation/validators/min-length.validator.d.ts +6 -0
  132. package/dist/validation/validators/min-length.validator.d.ts.map +1 -0
  133. package/dist/validation/validators/min.validator.d.ts +6 -0
  134. package/dist/validation/validators/min.validator.d.ts.map +1 -0
  135. package/dist/validation/validators/negative.validator.d.ts +6 -0
  136. package/dist/validation/validators/negative.validator.d.ts.map +1 -0
  137. package/dist/validation/validators/not-blank.validator.d.ts +6 -0
  138. package/dist/validation/validators/not-blank.validator.d.ts.map +1 -0
  139. package/dist/validation/validators/not-empty.validator.d.ts +6 -0
  140. package/dist/validation/validators/not-empty.validator.d.ts.map +1 -0
  141. package/dist/validation/validators/object-id.validator.d.ts +6 -0
  142. package/dist/validation/validators/object-id.validator.d.ts.map +1 -0
  143. package/dist/validation/validators/past.validator.d.ts +8 -0
  144. package/dist/validation/validators/past.validator.d.ts.map +1 -0
  145. package/dist/validation/validators/pattern.validator.d.ts +6 -0
  146. package/dist/validation/validators/pattern.validator.d.ts.map +1 -0
  147. package/dist/validation/validators/phone.validator.d.ts +6 -0
  148. package/dist/validation/validators/phone.validator.d.ts.map +1 -0
  149. package/dist/validation/validators/positive.validator.d.ts +6 -0
  150. package/dist/validation/validators/positive.validator.d.ts.map +1 -0
  151. package/dist/validation/validators/range.validator.d.ts +6 -0
  152. package/dist/validation/validators/range.validator.d.ts.map +1 -0
  153. package/dist/validation/validators/required.validator.d.ts +6 -0
  154. package/dist/validation/validators/required.validator.d.ts.map +1 -0
  155. package/dist/validation/validators/size.validator.d.ts +6 -0
  156. package/dist/validation/validators/size.validator.d.ts.map +1 -0
  157. package/dist/validation/validators/ssn.validator.d.ts +6 -0
  158. package/dist/validation/validators/ssn.validator.d.ts.map +1 -0
  159. package/dist/validation/validators/street.validator.d.ts +6 -0
  160. package/dist/validation/validators/street.validator.d.ts.map +1 -0
  161. package/dist/validation/validators/time.validator.d.ts +6 -0
  162. package/dist/validation/validators/time.validator.d.ts.map +1 -0
  163. package/dist/validation/validators/url.validator.d.ts +8 -0
  164. package/dist/validation/validators/url.validator.d.ts.map +1 -0
  165. package/dist/validation/validators/uuid.validator.d.ts +6 -0
  166. package/dist/validation/validators/uuid.validator.d.ts.map +1 -0
  167. package/dist/validation/validators/zip-code.validator.d.ts +6 -0
  168. package/dist/validation/validators/zip-code.validator.d.ts.map +1 -0
  169. package/package.json +68 -0
@@ -0,0 +1,199 @@
1
+ import { createRequire } from "node:module";
2
+ var __defProp = Object.defineProperty;
3
+ var __returnValue = (v) => v;
4
+ function __exportSetter(name, newValue) {
5
+ this[name] = __returnValue.bind(null, newValue);
6
+ }
7
+ var __export = (target, all) => {
8
+ for (var name in all)
9
+ __defProp(target, name, {
10
+ get: all[name],
11
+ enumerable: true,
12
+ configurable: true,
13
+ set: __exportSetter.bind(all, name)
14
+ });
15
+ };
16
+ var __require = /* @__PURE__ */ createRequire(import.meta.url);
17
+
18
+ // src/filters/filter.utils.ts
19
+ function buildStringFilter(filter) {
20
+ if (!filter)
21
+ return;
22
+ const { operator, value, values, caseSensitive = false } = filter;
23
+ switch (operator) {
24
+ case "EQ":
25
+ return caseSensitive ? value : { $regex: new RegExp(`^${escapeRegex(value || "")}$`, "i") };
26
+ case "NE":
27
+ return caseSensitive ? { $ne: value } : { $not: new RegExp(`^${escapeRegex(value || "")}$`, "i") };
28
+ case "CONTAINS":
29
+ return {
30
+ $regex: new RegExp(escapeRegex(value || ""), caseSensitive ? "" : "i")
31
+ };
32
+ case "STARTS_WITH":
33
+ return {
34
+ $regex: new RegExp(`^${escapeRegex(value || "")}`, caseSensitive ? "" : "i")
35
+ };
36
+ case "ENDS_WITH":
37
+ return {
38
+ $regex: new RegExp(`${escapeRegex(value || "")}$`, caseSensitive ? "" : "i")
39
+ };
40
+ case "REGEX":
41
+ return { $regex: new RegExp(value || "", caseSensitive ? "" : "i") };
42
+ case "IN":
43
+ return caseSensitive ? { $in: values || [] } : {
44
+ $in: (values || []).map((v) => new RegExp(`^${escapeRegex(v)}$`, "i"))
45
+ };
46
+ case "NOT_IN":
47
+ return caseSensitive ? { $nin: values || [] } : {
48
+ $not: {
49
+ $in: (values || []).map((v) => new RegExp(`^${escapeRegex(v)}$`, "i"))
50
+ }
51
+ };
52
+ default:
53
+ return;
54
+ }
55
+ }
56
+ function buildNumberFilter(filter) {
57
+ if (!filter)
58
+ return;
59
+ const { operator, value, values } = filter;
60
+ switch (operator) {
61
+ case "EQ":
62
+ return value;
63
+ case "NE":
64
+ return { $ne: value };
65
+ case "GT":
66
+ return { $gt: value };
67
+ case "GTE":
68
+ return { $gte: value };
69
+ case "LT":
70
+ return { $lt: value };
71
+ case "LTE":
72
+ return { $lte: value };
73
+ case "IN":
74
+ return { $in: values || [] };
75
+ case "NOT_IN":
76
+ return { $nin: values || [] };
77
+ default:
78
+ return;
79
+ }
80
+ }
81
+ function buildDateRangeFilter(filter) {
82
+ if (!filter)
83
+ return;
84
+ const query = {};
85
+ if (filter.eq) {
86
+ return new Date(filter.eq);
87
+ }
88
+ if (filter.from) {
89
+ query.$gte = new Date(filter.from);
90
+ }
91
+ if (filter.to) {
92
+ query.$lte = new Date(filter.to);
93
+ }
94
+ if (filter.before) {
95
+ query.$lt = new Date(filter.before);
96
+ }
97
+ if (filter.after) {
98
+ query.$gt = new Date(filter.after);
99
+ }
100
+ return Object.keys(query).length > 0 ? query : undefined;
101
+ }
102
+ function buildArrayFilter(filter) {
103
+ if (!filter)
104
+ return;
105
+ const { operator, values } = filter;
106
+ switch (operator ?? "ANY") {
107
+ case "ALL":
108
+ return { $all: values };
109
+ case "ANY":
110
+ return { $in: values };
111
+ case "NONE":
112
+ return { $nin: values };
113
+ case "EXACT":
114
+ return values;
115
+ default:
116
+ return;
117
+ }
118
+ }
119
+ function buildObjectIDFilter(filter) {
120
+ if (!filter)
121
+ return;
122
+ if (filter.exists !== undefined) {
123
+ return { $exists: filter.exists };
124
+ }
125
+ if (filter.eq) {
126
+ return filter.eq;
127
+ }
128
+ if (filter.ne) {
129
+ return { $ne: filter.ne };
130
+ }
131
+ if (filter.in) {
132
+ return { $in: filter.in };
133
+ }
134
+ if (filter.notIn) {
135
+ return { $nin: filter.notIn };
136
+ }
137
+ return;
138
+ }
139
+ function buildBooleanFilter(filter) {
140
+ if (!filter)
141
+ return;
142
+ return filter.eq;
143
+ }
144
+ function escapeRegex(str) {
145
+ return str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
146
+ }
147
+ function buildSort(sort) {
148
+ if (!sort)
149
+ return;
150
+ const mongoSort = {};
151
+ for (const [field, direction] of Object.entries(sort)) {
152
+ mongoSort[field] = direction === "ASC" ? 1 : -1;
153
+ }
154
+ return Object.keys(mongoSort).length > 0 ? mongoSort : undefined;
155
+ }
156
+ function buildLogicalFilter(filter, build) {
157
+ const mongoFilter = {};
158
+ if (!filter)
159
+ return mongoFilter;
160
+ const logical = filter;
161
+ const target = mongoFilter;
162
+ ["AND", "OR", "NOT"].forEach((logicalOp) => {
163
+ const subFilters = logical[logicalOp];
164
+ if (subFilters) {
165
+ target[`$${logicalOp.toLowerCase()}`] = Array.isArray(subFilters) ? subFilters.map((subFilter) => build(subFilter)) : build(subFilters);
166
+ }
167
+ });
168
+ return mongoFilter;
169
+ }
170
+ function combineFilters(filters, operator = "AND") {
171
+ const validFilters = filters.filter((f) => !!f && Object.keys(f).length > 0);
172
+ if (validFilters.length === 0) {
173
+ return {};
174
+ }
175
+ if (validFilters.length === 1) {
176
+ return validFilters[0] ?? {};
177
+ }
178
+ return operator === "AND" ? { $and: validFilters } : { $or: validFilters };
179
+ }
180
+ function addFilterCondition(query, field, condition) {
181
+ if (condition) {
182
+ query[field] = condition;
183
+ }
184
+ }
185
+ export {
186
+ addFilterCondition,
187
+ buildArrayFilter,
188
+ buildBooleanFilter,
189
+ buildDateRangeFilter,
190
+ buildLogicalFilter,
191
+ buildNumberFilter,
192
+ buildObjectIDFilter,
193
+ buildSort,
194
+ buildStringFilter,
195
+ combineFilters
196
+ };
197
+
198
+ //# debugId=665B256ADA9CBEA764756E2164756E21
199
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,10 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/filters/filter.utils.ts"],
4
+ "sourcesContent": [
5
+ "import type { QueryFilter } from 'mongoose';\n\nexport type SortDirection = 'ASC' | 'DESC';\n\nexport type SortObject = Record<string, SortDirection>;\n\nexport type LogicalOperator = 'AND' | 'OR';\n\nexport type NumberOperator =\n\t| 'EQ'\n\t| 'NE'\n\t| 'GT'\n\t| 'GTE'\n\t| 'LT'\n\t| 'LTE'\n\t| 'IN'\n\t| 'NOT_IN';\n\nexport type StringOperator =\n\t| 'EQ'\n\t| 'NE'\n\t| 'CONTAINS'\n\t| 'STARTS_WITH'\n\t| 'ENDS_WITH'\n\t| 'REGEX'\n\t| 'IN'\n\t| 'NOT_IN';\n\nexport type ArrayOperator = 'ALL' | 'ANY' | 'NONE' | 'EXACT';\n\nexport type ObjectIDOperator = 'EQ' | 'NE' | 'IN' | 'NOT_IN' | 'EXISTS';\n\n/**\n * Generic filter types matching GraphQL inputs\n */\nexport interface StringFilter {\n\toperator: StringOperator;\n\tvalue?: string | null;\n\tvalues?: string[] | null;\n\tcaseSensitive?: boolean | null;\n}\n\nexport interface NumberFilter {\n\toperator?: NumberOperator | null;\n\tvalue?: number | null;\n\tvalues?: number[] | null;\n}\n\nexport interface DateRangeFilter {\n\tfrom?: Date | string | null;\n\tto?: Date | string | null;\n\teq?: Date | string | null;\n\tbefore?: Date | string | null;\n\tafter?: Date | string | null;\n}\n\nexport interface ArrayFilter {\n\toperator?: ArrayOperator | null;\n\tvalues: string[];\n}\n\nexport interface ObjectIDFilter {\n\teq?: string | null;\n\tne?: string | null;\n\tin?: string[] | null;\n\tnotIn?: string[] | null;\n\texists?: boolean | null;\n}\n\nexport interface BooleanFilter {\n\teq: boolean;\n}\n\n/**\n * Build MongoDB query from StringFilter\n */\nexport function buildStringFilter(filter?: StringFilter | null): any {\n\tif (!filter) return undefined;\n\n\tconst { operator, value, values, caseSensitive = false } = filter;\n\n\tswitch (operator) {\n\t\tcase 'EQ':\n\t\t\treturn caseSensitive\n\t\t\t\t? value\n\t\t\t\t: { $regex: new RegExp(`^${escapeRegex(value || '')}$`, 'i') };\n\n\t\tcase 'NE':\n\t\t\treturn caseSensitive\n\t\t\t\t? { $ne: value }\n\t\t\t\t: { $not: new RegExp(`^${escapeRegex(value || '')}$`, 'i') };\n\n\t\tcase 'CONTAINS':\n\t\t\treturn {\n\t\t\t\t$regex: new RegExp(escapeRegex(value || ''), caseSensitive ? '' : 'i'),\n\t\t\t};\n\n\t\tcase 'STARTS_WITH':\n\t\t\treturn {\n\t\t\t\t$regex: new RegExp(\n\t\t\t\t\t`^${escapeRegex(value || '')}`,\n\t\t\t\t\tcaseSensitive ? '' : 'i',\n\t\t\t\t),\n\t\t\t};\n\n\t\tcase 'ENDS_WITH':\n\t\t\treturn {\n\t\t\t\t$regex: new RegExp(\n\t\t\t\t\t`${escapeRegex(value || '')}$`,\n\t\t\t\t\tcaseSensitive ? '' : 'i',\n\t\t\t\t),\n\t\t\t};\n\n\t\tcase 'REGEX':\n\t\t\treturn { $regex: new RegExp(value || '', caseSensitive ? '' : 'i') };\n\n\t\tcase 'IN':\n\t\t\treturn caseSensitive\n\t\t\t\t? { $in: values || [] }\n\t\t\t\t: {\n\t\t\t\t\t\t$in: (values || []).map(\n\t\t\t\t\t\t\t(v) => new RegExp(`^${escapeRegex(v)}$`, 'i'),\n\t\t\t\t\t\t),\n\t\t\t\t\t};\n\n\t\tcase 'NOT_IN':\n\t\t\treturn caseSensitive\n\t\t\t\t? { $nin: values || [] }\n\t\t\t\t: {\n\t\t\t\t\t\t$not: {\n\t\t\t\t\t\t\t$in: (values || []).map(\n\t\t\t\t\t\t\t\t(v) => new RegExp(`^${escapeRegex(v)}$`, 'i'),\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t},\n\t\t\t\t\t};\n\n\t\tdefault:\n\t\t\treturn undefined;\n\t}\n}\n\n/**\n * Build MongoDB query from NumberFilter\n */\nexport function buildNumberFilter(filter?: NumberFilter | null): any {\n\tif (!filter) return undefined;\n\n\tconst { operator, value, values } = filter;\n\n\tswitch (operator) {\n\t\tcase 'EQ':\n\t\t\treturn value;\n\t\tcase 'NE':\n\t\t\treturn { $ne: value };\n\t\tcase 'GT':\n\t\t\treturn { $gt: value };\n\t\tcase 'GTE':\n\t\t\treturn { $gte: value };\n\t\tcase 'LT':\n\t\t\treturn { $lt: value };\n\t\tcase 'LTE':\n\t\t\treturn { $lte: value };\n\t\tcase 'IN':\n\t\t\treturn { $in: values || [] };\n\t\tcase 'NOT_IN':\n\t\t\treturn { $nin: values || [] };\n\t\tdefault:\n\t\t\treturn undefined;\n\t}\n}\n\n/**\n * Build MongoDB query from DateRangeFilter\n */\nexport function buildDateRangeFilter(filter?: DateRangeFilter | null): any {\n\tif (!filter) return undefined;\n\n\tconst query: any = {};\n\n\tif (filter.eq) {\n\t\treturn new Date(filter.eq);\n\t}\n\n\tif (filter.from) {\n\t\tquery.$gte = new Date(filter.from);\n\t}\n\n\tif (filter.to) {\n\t\tquery.$lte = new Date(filter.to);\n\t}\n\n\tif (filter.before) {\n\t\tquery.$lt = new Date(filter.before);\n\t}\n\n\tif (filter.after) {\n\t\tquery.$gt = new Date(filter.after);\n\t}\n\n\treturn Object.keys(query).length > 0 ? query : undefined;\n}\n\n/**\n * Build MongoDB query from ArrayFilter\n */\nexport function buildArrayFilter(filter?: ArrayFilter | null): any {\n\tif (!filter) return undefined;\n\n\tconst { operator, values } = filter;\n\n\tswitch (operator ?? 'ANY') {\n\t\tcase 'ALL':\n\t\t\treturn { $all: values };\n\t\tcase 'ANY':\n\t\t\treturn { $in: values };\n\t\tcase 'NONE':\n\t\t\treturn { $nin: values };\n\t\tcase 'EXACT':\n\t\t\treturn values;\n\t\tdefault:\n\t\t\treturn undefined;\n\t}\n}\n\n/**\n * Build MongoDB query from ObjectIDFilter\n */\nexport function buildObjectIDFilter(filter?: ObjectIDFilter | null): any {\n\tif (!filter) return undefined;\n\n\tif (filter.exists !== undefined) {\n\t\treturn { $exists: filter.exists };\n\t}\n\n\tif (filter.eq) {\n\t\treturn filter.eq;\n\t}\n\n\tif (filter.ne) {\n\t\treturn { $ne: filter.ne };\n\t}\n\n\tif (filter.in) {\n\t\treturn { $in: filter.in };\n\t}\n\n\tif (filter.notIn) {\n\t\treturn { $nin: filter.notIn };\n\t}\n\n\treturn undefined;\n}\n\n/**\n * Build MongoDB query from BooleanFilter\n */\nexport function buildBooleanFilter(filter?: BooleanFilter | null): any {\n\tif (!filter) return undefined;\n\treturn filter.eq;\n}\n\n/**\n * Escape special regex characters\n */\nfunction escapeRegex(str: string): string {\n\treturn str.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n\n/**\n * Build MongoDB sort object from typed sort input\n * @param sort Object with field names as keys and 'ASC' or 'DESC' as values\n * @returns MongoDB sort object\n */\nexport function buildSort(sort?: SortObject | null): any {\n\tif (!sort) return undefined;\n\n\tconst mongoSort: Record<string, 1 | -1> = {};\n\n\tfor (const [field, direction] of Object.entries(sort)) {\n\t\tmongoSort[field] = direction === 'ASC' ? 1 : -1;\n\t}\n\n\treturn Object.keys(mongoSort).length > 0 ? mongoSort : undefined;\n}\n\n/**\n * Shape of the `AND`/`OR`/`NOT` combinators every generated GraphQL\n * `<Entity>Filter` input carries.\n */\nexport type LogicalFilterInput<TFilter> = {\n\tAND?: TFilter[] | TFilter | null;\n\tOR?: TFilter[] | TFilter | null;\n\tNOT?: TFilter[] | TFilter | null;\n};\n\n/**\n * Build the `$and`/`$or`/`$not` part of a Mongo filter from the recursive\n * `AND`/`OR`/`NOT` combinators of a generated GraphQL filter input.\n *\n * Every module's `build<Entity>Filter` starts with the exact same block; this\n * factors it out without changing behaviour. Call it first, then add the\n * module's own leaf conditions onto the returned object:\n *\n * ```ts\n * function buildBedFilter(filter?: BedFilter | null): QueryFilter<BedDocument> {\n * const mongoFilter = buildLogicalFilter(filter, buildBedFilter);\n * if (!filter) return mongoFilter;\n * addFilterCondition(mongoFilter, 'name', buildStringFilter(filter.name));\n * return mongoFilter;\n * }\n * ```\n *\n * Note `NOT` maps to `$not`, matching the behaviour of the hand-written\n * blocks this replaces.\n */\nexport function buildLogicalFilter<TFilter, TDoc = any>(\n\tfilter: TFilter | null | undefined,\n\tbuild: (filter?: TFilter | null) => QueryFilter<TDoc>,\n): QueryFilter<TDoc> {\n\tconst mongoFilter: QueryFilter<TDoc> = {};\n\n\tif (!filter) return mongoFilter;\n\n\tconst logical = filter as LogicalFilterInput<TFilter>;\n\tconst target = mongoFilter as Record<string, any>;\n\n\t(['AND', 'OR', 'NOT'] as const).forEach((logicalOp) => {\n\t\tconst subFilters = logical[logicalOp];\n\t\tif (subFilters) {\n\t\t\ttarget[`$${logicalOp.toLowerCase()}`] = Array.isArray(subFilters)\n\t\t\t\t? subFilters.map((subFilter) => build(subFilter))\n\t\t\t\t: build(subFilters);\n\t\t}\n\t});\n\n\treturn mongoFilter;\n}\n\n/**\n * Combine multiple filters with logical operator\n */\nexport function combineFilters(\n\tfilters: Array<QueryFilter<any> | undefined>,\n\toperator: LogicalOperator = 'AND',\n): QueryFilter<any> {\n\tconst validFilters = filters.filter((f) => !!f && Object.keys(f).length > 0);\n\n\tif (validFilters.length === 0) {\n\t\treturn {};\n\t}\n\n\tif (validFilters.length === 1) {\n\t\treturn validFilters[0] ?? {};\n\t}\n\n\treturn operator === 'AND'\n\t\t? { $and: validFilters as any }\n\t\t: { $or: validFilters as any };\n}\n\n/**\n * Helper to add a filter condition to a query object\n */\nexport function addFilterCondition(\n\tquery: QueryFilter<any>,\n\tfield: string,\n\tcondition: any,\n): void {\n\tif (condition) {\n\t\tquery[field] = condition;\n\t}\n}\n"
6
+ ],
7
+ "mappings": "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",
8
+ "debugId": "665B256ADA9CBEA764756E2164756E21",
9
+ "names": []
10
+ }
@@ -0,0 +1,14 @@
1
+ import './types';
2
+ export * from 'async-mutex';
3
+ export * from 'mongoose';
4
+ export * from './audit';
5
+ export * from './integrity';
6
+ export * from './migrations';
7
+ export * from './models';
8
+ export { mongoose } from './mongoose';
9
+ export * from './plugins';
10
+ export * from './services';
11
+ export * from './utils';
12
+ export * from './utils/schema';
13
+ export * from './validation';
14
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,CAAC;AAEjB,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC;AACzB,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,SAAS,CAAC;AACxB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC"}