@semics-tech/mongolite 1.4.0 → 1.4.2

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.
@@ -0,0 +1,265 @@
1
+ /**
2
+ * In-memory aggregation expression evaluation, shared by $addFields, $project, $group,
3
+ * $replaceRoot and $match/$expr.
4
+ */
5
+ /** Safely reads a dotted path from a value. Returns undefined when any segment is missing. */
6
+ export function getPath(obj, path) {
7
+ let current = obj;
8
+ for (const key of path.split('.')) {
9
+ if (current === null || current === undefined)
10
+ return undefined;
11
+ if (Array.isArray(current)) {
12
+ if (/^\d+$/.test(key)) {
13
+ current = current[Number(key)];
14
+ continue;
15
+ }
16
+ // Mongo maps the remaining path over array elements
17
+ return current.map((el) => getPath(el, key)).filter((v) => v !== undefined);
18
+ }
19
+ if (typeof current !== 'object')
20
+ return undefined;
21
+ current = current[key];
22
+ }
23
+ return current;
24
+ }
25
+ function isPlainObject(v) {
26
+ return typeof v === 'object' && v !== null && !Array.isArray(v) && !(v instanceof Date);
27
+ }
28
+ /** True if `v` is an expression operator object such as `{ $add: [...] }`. */
29
+ export function isOperatorExpression(v) {
30
+ if (!isPlainObject(v))
31
+ return false;
32
+ const keys = Object.keys(v);
33
+ return keys.length === 1 && keys[0].startsWith('$');
34
+ }
35
+ function eq(a, b) {
36
+ if (a instanceof Date && b instanceof Date)
37
+ return a.getTime() === b.getTime();
38
+ return JSON.stringify(a) === JSON.stringify(b);
39
+ }
40
+ function cmp(a, b) {
41
+ if (a instanceof Date && b instanceof Date)
42
+ return a.getTime() - b.getTime();
43
+ const x = a;
44
+ const y = b;
45
+ return x < y ? -1 : x > y ? 1 : 0;
46
+ }
47
+ function truthy(v) {
48
+ return !(v === false || v === null || v === undefined || v === 0);
49
+ }
50
+ function num(v) {
51
+ return typeof v === 'number' ? v : null;
52
+ }
53
+ /**
54
+ * Evaluates an aggregation expression against a document.
55
+ * Supports field paths ("$a.b"), $$ROOT/$$CURRENT, literals, arrays, nested objects and a
56
+ * common subset of operators. Unsupported operators throw.
57
+ */
58
+ export function evaluateExpression(doc, expr) {
59
+ if (typeof expr === 'string') {
60
+ if (expr === '$$ROOT' || expr === '$$CURRENT')
61
+ return doc;
62
+ if (expr.startsWith('$$'))
63
+ throw new Error(`Unsupported aggregation variable: ${expr}`);
64
+ if (expr.startsWith('$'))
65
+ return getPath(doc, expr.slice(1));
66
+ return expr;
67
+ }
68
+ if (Array.isArray(expr))
69
+ return expr.map((e) => evaluateExpression(doc, e));
70
+ if (expr instanceof Date || !isPlainObject(expr))
71
+ return expr;
72
+ const keys = Object.keys(expr);
73
+ if (keys.length === 1 && keys[0].startsWith('$')) {
74
+ return evaluateOperator(doc, keys[0], expr[keys[0]]);
75
+ }
76
+ const out = {};
77
+ for (const [k, v] of Object.entries(expr)) {
78
+ if (k.startsWith('$')) {
79
+ throw new Error(`An object representing an expression must have exactly one field: ${k}`);
80
+ }
81
+ const val = evaluateExpression(doc, v);
82
+ if (val !== undefined)
83
+ out[k] = val;
84
+ }
85
+ return out;
86
+ }
87
+ function args(doc, raw) {
88
+ return (Array.isArray(raw) ? raw : [raw]).map((a) => evaluateExpression(doc, a));
89
+ }
90
+ function evaluateOperator(doc, op, raw) {
91
+ switch (op) {
92
+ case '$literal':
93
+ return raw;
94
+ case '$add': {
95
+ const vals = args(doc, raw);
96
+ if (vals.some((v) => v === null || v === undefined))
97
+ return null;
98
+ if (vals.some((v) => v instanceof Date)) {
99
+ return new Date(vals.reduce((s, v) => s + (v instanceof Date ? v.getTime() : v), 0));
100
+ }
101
+ return vals.reduce((s, v) => s + v, 0);
102
+ }
103
+ case '$subtract': {
104
+ const [a, b] = args(doc, raw);
105
+ if (a === null || a === undefined || b === null || b === undefined)
106
+ return null;
107
+ if (a instanceof Date && b instanceof Date)
108
+ return a.getTime() - b.getTime();
109
+ if (a instanceof Date)
110
+ return new Date(a.getTime() - b);
111
+ return a - b;
112
+ }
113
+ case '$multiply': {
114
+ const vals = args(doc, raw);
115
+ if (vals.some((v) => num(v) === null))
116
+ return null;
117
+ return vals.reduce((s, v) => s * v, 1);
118
+ }
119
+ case '$divide': {
120
+ const [a, b] = args(doc, raw);
121
+ if (num(a) === null || num(b) === null)
122
+ return null;
123
+ return a / b;
124
+ }
125
+ case '$mod': {
126
+ const [a, b] = args(doc, raw);
127
+ if (num(a) === null || num(b) === null)
128
+ return null;
129
+ return a % b;
130
+ }
131
+ case '$concat': {
132
+ const vals = args(doc, raw);
133
+ if (vals.some((v) => v === null || v === undefined))
134
+ return null;
135
+ return vals.join('');
136
+ }
137
+ case '$toUpper': {
138
+ const [v] = args(doc, raw);
139
+ return v === null || v === undefined ? '' : String(v).toUpperCase();
140
+ }
141
+ case '$toLower': {
142
+ const [v] = args(doc, raw);
143
+ return v === null || v === undefined ? '' : String(v).toLowerCase();
144
+ }
145
+ case '$eq': {
146
+ const [a, b] = args(doc, raw);
147
+ return eq(a, b);
148
+ }
149
+ case '$ne': {
150
+ const [a, b] = args(doc, raw);
151
+ return !eq(a, b);
152
+ }
153
+ case '$gt': {
154
+ const [a, b] = args(doc, raw);
155
+ return cmp(a, b) > 0;
156
+ }
157
+ case '$gte': {
158
+ const [a, b] = args(doc, raw);
159
+ return cmp(a, b) >= 0;
160
+ }
161
+ case '$lt': {
162
+ const [a, b] = args(doc, raw);
163
+ return cmp(a, b) < 0;
164
+ }
165
+ case '$lte': {
166
+ const [a, b] = args(doc, raw);
167
+ return cmp(a, b) <= 0;
168
+ }
169
+ case '$and':
170
+ return (Array.isArray(raw) ? raw : [raw]).every((e) => truthy(evaluateExpression(doc, e)));
171
+ case '$or':
172
+ return (Array.isArray(raw) ? raw : [raw]).some((e) => truthy(evaluateExpression(doc, e)));
173
+ case '$not': {
174
+ const [v] = args(doc, raw);
175
+ return !truthy(v);
176
+ }
177
+ case '$cond': {
178
+ let cond, thenE, elseE;
179
+ if (Array.isArray(raw))
180
+ [cond, thenE, elseE] = raw;
181
+ else {
182
+ const o = raw;
183
+ cond = o['if'];
184
+ thenE = o['then'];
185
+ elseE = o['else'];
186
+ }
187
+ return evaluateExpression(doc, truthy(evaluateExpression(doc, cond)) ? thenE : elseE);
188
+ }
189
+ case '$ifNull': {
190
+ const vals = Array.isArray(raw) ? raw : [raw];
191
+ for (let i = 0; i < vals.length - 1; i++) {
192
+ const v = evaluateExpression(doc, vals[i]);
193
+ if (v !== null && v !== undefined)
194
+ return v;
195
+ }
196
+ return evaluateExpression(doc, vals[vals.length - 1]);
197
+ }
198
+ case '$size': {
199
+ const [v] = args(doc, raw);
200
+ if (!Array.isArray(v))
201
+ throw new Error('The argument to $size must be an array');
202
+ return v.length;
203
+ }
204
+ case '$arrayElemAt': {
205
+ const [arr, idx] = args(doc, raw);
206
+ if (!Array.isArray(arr) || typeof idx !== 'number')
207
+ return null;
208
+ const i = idx < 0 ? arr.length + idx : idx;
209
+ return arr[i];
210
+ }
211
+ case '$first': {
212
+ const [arr] = args(doc, raw);
213
+ return Array.isArray(arr) ? arr[0] : null;
214
+ }
215
+ case '$last': {
216
+ const [arr] = args(doc, raw);
217
+ return Array.isArray(arr) ? arr[arr.length - 1] : null;
218
+ }
219
+ default:
220
+ throw new Error(`Unsupported aggregation expression operator: ${op}`);
221
+ }
222
+ }
223
+ /** Evaluates a $match `$expr` value to a boolean. */
224
+ export function evaluateExprFilter(doc, expr) {
225
+ return truthy(evaluateExpression(doc, expr));
226
+ }
227
+ /** True if a $match filter uses $expr anywhere in its logical tree. */
228
+ export function filterUsesExpr(filter) {
229
+ if (!isPlainObject(filter))
230
+ return false;
231
+ for (const [k, v] of Object.entries(filter)) {
232
+ if (k === '$expr')
233
+ return true;
234
+ if ((k === '$and' || k === '$or' || k === '$nor') && Array.isArray(v) && v.some(filterUsesExpr))
235
+ return true;
236
+ }
237
+ return false;
238
+ }
239
+ export const SUPPORTED_STAGES = [
240
+ '$match',
241
+ '$project',
242
+ '$addFields',
243
+ '$set',
244
+ '$sort',
245
+ '$limit',
246
+ '$skip',
247
+ '$count',
248
+ '$group',
249
+ '$unwind',
250
+ '$lookup',
251
+ '$replaceRoot',
252
+ '$replaceWith',
253
+ ];
254
+ export const SUPPORTED_ACCUMULATORS = [
255
+ '$sum',
256
+ '$avg',
257
+ '$min',
258
+ '$max',
259
+ '$push',
260
+ '$addToSet',
261
+ '$first',
262
+ '$last',
263
+ '$count',
264
+ ];
265
+ //# sourceMappingURL=aggregation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aggregation.js","sourceRoot":"","sources":["../../src/utils/aggregation.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,8FAA8F;AAC9F,MAAM,UAAU,OAAO,CAAC,GAAY,EAAE,IAAY;IAChD,IAAI,OAAO,GAAY,GAAG,CAAC;IAC3B,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;QAClC,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,SAAS;YAAE,OAAO,SAAS,CAAC;QAChE,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YAC3B,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;gBACtB,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC/B,SAAS;YACX,CAAC;YACD,oDAAoD;YACpD,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC;QAC9E,CAAC;QACD,IAAI,OAAO,OAAO,KAAK,QAAQ;YAAE,OAAO,SAAS,CAAC;QAClD,OAAO,GAAI,OAAe,CAAC,GAAG,CAAC,CAAC;IAClC,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,aAAa,CAAC,CAAU;IAC/B,OAAO,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC;AAC1F,CAAC;AAED,8EAA8E;AAC9E,MAAM,UAAU,oBAAoB,CAAC,CAAU;IAC7C,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IACpC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC5B,OAAO,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;AACtD,CAAC;AAED,SAAS,EAAE,CAAC,CAAU,EAAE,CAAU;IAChC,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,IAAI;QAAE,OAAO,CAAC,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC;IAC/E,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AACjD,CAAC;AAED,SAAS,GAAG,CAAC,CAAU,EAAE,CAAU;IACjC,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,IAAI;QAAE,OAAO,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC;IAC7E,MAAM,CAAC,GAAG,CAAW,CAAC;IACtB,MAAM,CAAC,GAAG,CAAW,CAAC;IACtB,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACpC,CAAC;AAED,SAAS,MAAM,CAAC,CAAU;IACxB,OAAO,CAAC,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AACpE,CAAC;AAED,SAAS,GAAG,CAAC,CAAU;IACrB,OAAO,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAC1C,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAAC,GAAQ,EAAE,IAAa;IACxD,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC7B,IAAI,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,WAAW;YAAE,OAAO,GAAG,CAAC;QAC1D,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,qCAAqC,IAAI,EAAE,CAAC,CAAC;QACxF,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,OAAO,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7D,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;IAC5E,IAAI,IAAI,YAAY,IAAI,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IAE9D,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC/B,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACjD,OAAO,gBAAgB,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACvD,CAAC;IACD,MAAM,GAAG,GAAQ,EAAE,CAAC;IACpB,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QAC1C,IAAI,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CAAC,qEAAqE,CAAC,EAAE,CAAC,CAAC;QAC5F,CAAC;QACD,MAAM,GAAG,GAAG,kBAAkB,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACvC,IAAI,GAAG,KAAK,SAAS;YAAE,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;IACtC,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,IAAI,CAAC,GAAQ,EAAE,GAAY;IAClC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;AACnF,CAAC;AAED,SAAS,gBAAgB,CAAC,GAAQ,EAAE,EAAU,EAAE,GAAY;IAC1D,QAAQ,EAAE,EAAE,CAAC;QACX,KAAK,UAAU;YACb,OAAO,GAAG,CAAC;QACb,KAAK,MAAM,CAAC,CAAC,CAAC;YACZ,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YAC5B,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,SAAS,CAAC;gBAAE,OAAO,IAAI,CAAC;YACjE,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,YAAY,IAAI,CAAC,EAAE,CAAC;gBACxC,OAAO,IAAI,IAAI,CACb,IAAI,CAAC,MAAM,CAAS,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAE,CAAY,CAAC,EAAE,CAAC,CAAC,CACxF,CAAC;YACJ,CAAC;YACD,OAAO,IAAI,CAAC,MAAM,CAAS,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAI,CAAY,EAAE,CAAC,CAAC,CAAC;QAC7D,CAAC;QACD,KAAK,WAAW,CAAC,CAAC,CAAC;YACjB,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YAC9B,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,SAAS;gBAAE,OAAO,IAAI,CAAC;YAChF,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,IAAI;gBAAE,OAAO,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC;YAC7E,IAAI,CAAC,YAAY,IAAI;gBAAE,OAAO,IAAI,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE,GAAI,CAAY,CAAC,CAAC;YACpE,OAAQ,CAAY,GAAI,CAAY,CAAC;QACvC,CAAC;QACD,KAAK,WAAW,CAAC,CAAC,CAAC;YACjB,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YAC5B,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;gBAAE,OAAO,IAAI,CAAC;YACnD,OAAO,IAAI,CAAC,MAAM,CAAS,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAI,CAAY,EAAE,CAAC,CAAC,CAAC;QAC7D,CAAC;QACD,KAAK,SAAS,CAAC,CAAC,CAAC;YACf,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YAC9B,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI;gBAAE,OAAO,IAAI,CAAC;YACpD,OAAQ,CAAY,GAAI,CAAY,CAAC;QACvC,CAAC;QACD,KAAK,MAAM,CAAC,CAAC,CAAC;YACZ,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YAC9B,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI;gBAAE,OAAO,IAAI,CAAC;YACpD,OAAQ,CAAY,GAAI,CAAY,CAAC;QACvC,CAAC;QACD,KAAK,SAAS,CAAC,CAAC,CAAC;YACf,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YAC5B,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,SAAS,CAAC;gBAAE,OAAO,IAAI,CAAC;YACjE,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACvB,CAAC;QACD,KAAK,UAAU,CAAC,CAAC,CAAC;YAChB,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YAC3B,OAAO,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;QACtE,CAAC;QACD,KAAK,UAAU,CAAC,CAAC,CAAC;YAChB,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YAC3B,OAAO,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;QACtE,CAAC;QACD,KAAK,KAAK,CAAC,CAAC,CAAC;YACX,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YAC9B,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,KAAK,KAAK,CAAC,CAAC,CAAC;YACX,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YAC9B,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACnB,CAAC;QACD,KAAK,KAAK,CAAC,CAAC,CAAC;YACX,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YAC9B,OAAO,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;QACvB,CAAC;QACD,KAAK,MAAM,CAAC,CAAC,CAAC;YACZ,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YAC9B,OAAO,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;QACxB,CAAC;QACD,KAAK,KAAK,CAAC,CAAC,CAAC;YACX,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YAC9B,OAAO,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;QACvB,CAAC;QACD,KAAK,MAAM,CAAC,CAAC,CAAC;YACZ,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YAC9B,OAAO,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;QACxB,CAAC;QACD,KAAK,MAAM;YACT,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,kBAAkB,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7F,KAAK,KAAK;YACR,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,kBAAkB,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5F,KAAK,MAAM,CAAC,CAAC,CAAC;YACZ,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YAC3B,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC;QACD,KAAK,OAAO,CAAC,CAAC,CAAC;YACb,IAAI,IAAa,EAAE,KAAc,EAAE,KAAc,CAAC;YAClD,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;gBAAE,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,GAAG,GAAG,CAAC;iBAC9C,CAAC;gBACJ,MAAM,CAAC,GAAG,GAAU,CAAC;gBACrB,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;gBACf,KAAK,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC;gBAClB,KAAK,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC;YACpB,CAAC;YACD,OAAO,kBAAkB,CAAC,GAAG,EAAE,MAAM,CAAC,kBAAkB,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QACxF,CAAC;QACD,KAAK,SAAS,CAAC,CAAC,CAAC;YACf,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YAC9C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBACzC,MAAM,CAAC,GAAG,kBAAkB,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC3C,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,SAAS;oBAAE,OAAO,CAAC,CAAC;YAC9C,CAAC;YACD,OAAO,kBAAkB,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;QACxD,CAAC;QACD,KAAK,OAAO,CAAC,CAAC,CAAC;YACb,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YAC3B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;YACjF,OAAO,CAAC,CAAC,MAAM,CAAC;QAClB,CAAC;QACD,KAAK,cAAc,CAAC,CAAC,CAAC;YACpB,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YAClC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,OAAO,GAAG,KAAK,QAAQ;gBAAE,OAAO,IAAI,CAAC;YAChE,MAAM,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;YAC3C,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC;QAChB,CAAC;QACD,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YAC7B,OAAO,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAC5C,CAAC;QACD,KAAK,OAAO,CAAC,CAAC,CAAC;YACb,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YAC7B,OAAO,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QACzD,CAAC;QACD;YACE,MAAM,IAAI,KAAK,CAAC,gDAAgD,EAAE,EAAE,CAAC,CAAC;IAC1E,CAAC;AACH,CAAC;AAED,qDAAqD;AACrD,MAAM,UAAU,kBAAkB,CAAC,GAAQ,EAAE,IAAa;IACxD,OAAO,MAAM,CAAC,kBAAkB,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC;AAC/C,CAAC;AAED,uEAAuE;AACvE,MAAM,UAAU,cAAc,CAAC,MAAe;IAC5C,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC;QAAE,OAAO,KAAK,CAAC;IACzC,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAC5C,IAAI,CAAC,KAAK,OAAO;YAAE,OAAO,IAAI,CAAC;QAC/B,IAAI,CAAC,CAAC,KAAK,MAAM,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC;YAC7F,OAAO,IAAI,CAAC;IAChB,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,QAAQ;IACR,UAAU;IACV,YAAY;IACZ,MAAM;IACN,OAAO;IACP,QAAQ;IACR,OAAO;IACP,QAAQ;IACR,QAAQ;IACR,SAAS;IACT,SAAS;IACT,cAAc;IACd,cAAc;CACN,CAAC;AAEX,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,OAAO;IACP,WAAW;IACX,QAAQ;IACR,OAAO;IACP,QAAQ;CACA,CAAC"}
@@ -4,7 +4,7 @@
4
4
  * find() filtering, so the two engines can't silently drift apart on what an operator means —
5
5
  * see tests/operator-coverage.test.ts, which runs the same filter through both engines.
6
6
  */
7
- export declare const SUPPORTED_QUERY_OPERATORS: readonly ["$eq", "$ne", "$gt", "$gte", "$lt", "$lte", "$in", "$nin", "$all", "$exists", "$not", "$regex", "$size", "$type", "$mod"];
7
+ export declare const SUPPORTED_QUERY_OPERATORS: readonly ["$eq", "$ne", "$gt", "$gte", "$lt", "$lte", "$in", "$nin", "$all", "$exists", "$not", "$regex", "$size", "$type", "$mod", "$elemMatch"];
8
8
  /**
9
9
  * Evaluates a single query operator against a document's field value. Used for in-memory
10
10
  * filtering (e.g. aggregation `$match`) — the SQL-generating side (`buildComparisonCondition`)
@@ -20,6 +20,7 @@ export const SUPPORTED_QUERY_OPERATORS = [
20
20
  '$size',
21
21
  '$type',
22
22
  '$mod',
23
+ '$elemMatch',
23
24
  ];
24
25
  function matchesBsonType(value, bsonType) {
25
26
  switch (bsonType) {
@@ -118,6 +119,14 @@ export function evaluateOperator(op, docValue, opValue, regexOptions) {
118
119
  const [divisor, remainder] = opValue;
119
120
  return Math.trunc(docValue) % divisor === remainder;
120
121
  }
122
+ case '$elemMatch': {
123
+ if (!Array.isArray(docValue) || typeof opValue !== 'object' || opValue === null)
124
+ return false;
125
+ const spec = opValue;
126
+ const keys = Object.keys(spec);
127
+ const scalarForm = keys.length > 0 && keys.every((k) => k.startsWith('$') && !LOGICAL.has(k));
128
+ return docValue.some((el) => scalarForm ? evaluateOperators(el, spec) : matchesElementFilter(el, spec));
129
+ }
121
130
  case '$options':
122
131
  return true; // consumed alongside $regex, not an independent predicate
123
132
  default:
@@ -135,4 +144,44 @@ export function evaluateOperators(docValue, ops) {
135
144
  }
136
145
  return true;
137
146
  }
147
+ const LOGICAL = new Set(['$and', '$or', '$nor']);
148
+ function getPathValue(obj, path) {
149
+ let cur = obj;
150
+ for (const k of path.split('.')) {
151
+ if (cur === null || typeof cur !== 'object')
152
+ return undefined;
153
+ cur = cur[k];
154
+ }
155
+ return cur;
156
+ }
157
+ /** Matches one array element (an object) against an $elemMatch sub-filter. */
158
+ function matchesElementFilter(el, filter) {
159
+ for (const [key, cond] of Object.entries(filter)) {
160
+ if ((key === '$and' || key === '$or' || key === '$nor') && Array.isArray(cond)) {
161
+ const results = cond.map((f) => matchesElementFilter(el, f));
162
+ if (key === '$and' && !results.every(Boolean))
163
+ return false;
164
+ if (key === '$or' && !results.some(Boolean))
165
+ return false;
166
+ if (key === '$nor' && results.some(Boolean))
167
+ return false;
168
+ continue;
169
+ }
170
+ const v = getPathValue(el, key);
171
+ const isOps = typeof cond === 'object' &&
172
+ cond !== null &&
173
+ !(cond instanceof RegExp) &&
174
+ !(cond instanceof Date) &&
175
+ !Array.isArray(cond) &&
176
+ Object.keys(cond).some((k) => k.startsWith('$'));
177
+ if (isOps) {
178
+ if (!evaluateOperators(v, cond))
179
+ return false;
180
+ }
181
+ else if (JSON.stringify(v) !== JSON.stringify(cond)) {
182
+ return false;
183
+ }
184
+ }
185
+ return true;
186
+ }
138
187
  //# sourceMappingURL=queryOperators.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"queryOperators.js","sourceRoot":"","sources":["../../src/utils/queryOperators.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"queryOperators.js","sourceRoot":"","sources":["../../src/utils/queryOperators.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@semics-tech/mongolite",
3
- "version": "1.4.0",
3
+ "version": "1.4.2",
4
4
  "description": "A MongoDB-like client using SQLite as a persistent store, written in TypeScript.",
5
5
  "main": "dist/cjs/index.js",
6
6
  "type": "module",
@@ -76,7 +76,7 @@
76
76
  },
77
77
  "homepage": "https://github.com/semics-tech/mongolite#readme",
78
78
  "devDependencies": {
79
- "@types/better-sqlite3": "^7.6.13",
79
+ "@types/better-sqlite3": "^9.6.0",
80
80
  "@types/node": "^26.1.2",
81
81
  "@typescript-eslint/eslint-plugin": "^8.58.1",
82
82
  "@typescript-eslint/parser": "^8.58.1",