@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.
- package/README.md +24 -20
- package/dist/bin/mongolite.js +3 -3
- package/dist/bin/mongolite.js.map +1 -1
- package/dist/cjs/bin/mongolite.js +3 -3
- package/dist/cjs/collection.js +215 -135
- package/dist/cjs/cursors/findCursor.js +58 -5
- package/dist/cjs/utils/aggregation.js +272 -0
- package/dist/cjs/utils/queryOperators.js +49 -0
- package/dist/collection.d.ts +9 -1
- package/dist/collection.js +215 -135
- package/dist/collection.js.map +1 -1
- package/dist/cursors/findCursor.d.ts +7 -1
- package/dist/cursors/findCursor.js +58 -5
- package/dist/cursors/findCursor.js.map +1 -1
- package/dist/utils/aggregation.d.ts +22 -0
- package/dist/utils/aggregation.js +265 -0
- package/dist/utils/aggregation.js.map +1 -0
- package/dist/utils/queryOperators.d.ts +1 -1
- package/dist/utils/queryOperators.js +49 -0
- package/dist/utils/queryOperators.js.map +1 -1
- package/package.json +2 -2
|
@@ -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":"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"}
|
|
@@ -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":"AAAA;;;;;GAKG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG;IACvC,KAAK;IACL,KAAK;IACL,KAAK;IACL,MAAM;IACN,KAAK;IACL,MAAM;IACN,KAAK;IACL,MAAM;IACN,MAAM;IACN,SAAS;IACT,MAAM;IACN,QAAQ;IACR,OAAO;IACP,OAAO;IACP,MAAM;
|
|
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.
|
|
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": "^
|
|
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",
|