mongolite-ts 0.4.0 → 0.5.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.
@@ -0,0 +1,358 @@
1
+ export class QueryBuilder {
2
+ constructor(options = {}) {
3
+ this.options = options;
4
+ }
5
+ /**
6
+ * Converts a field path to a JSON path for SQLite's json_extract function.
7
+ */
8
+ parseJsonPath(path) {
9
+ return `'$.${path.replace(/\./g, '.')}'`;
10
+ }
11
+ /**
12
+ * Builds a WHERE clause for a filter object.
13
+ * @param filter The filter object.
14
+ * @param params An array to collect query parameters.
15
+ * @returns A SQL WHERE clause.
16
+ */
17
+ buildWhereClause(filter, params) {
18
+ const conditions = [];
19
+ // Handle $and, $or, $nor logical operators at the top level
20
+ for (const key of Object.keys(filter)) {
21
+ if (key === '$and' && filter.$and) {
22
+ const condition = filter.$and;
23
+ const andConditions = condition
24
+ .map((subFilter) => `(${this.buildWhereClause(subFilter, params)})`)
25
+ .join(' AND ');
26
+ conditions.push(`(${andConditions})`);
27
+ }
28
+ else if (key === '$or' && filter.$or) {
29
+ const condition = filter.$or;
30
+ const orConditions = condition
31
+ .map((subFilter) => `(${this.buildWhereClause(subFilter, params)})`)
32
+ .join(' OR ');
33
+ conditions.push(`(${orConditions})`);
34
+ }
35
+ else if (key === '$nor' && filter.$nor) {
36
+ const condition = filter.$nor;
37
+ const norConditions = condition
38
+ .map((subFilter) => `(${this.buildWhereClause(subFilter, params)})`)
39
+ .join(' OR ');
40
+ conditions.push(`NOT (${norConditions})`);
41
+ }
42
+ else if (key === '$text' && filter.$text) {
43
+ // Handle text search (basic implementation)
44
+ const search = filter.$text.$search;
45
+ if (typeof search === 'string' && search.trim() !== '') {
46
+ conditions.push(`data LIKE ?`);
47
+ params.push(`%${search}%`); // Simple LIKE search
48
+ }
49
+ else {
50
+ conditions.push('1=0'); // No valid search term, nothing matches
51
+ }
52
+ }
53
+ else if (key === '$exists' && filter.$exists) {
54
+ // Handle existence check
55
+ const existsConditions = Object.entries(filter.$exists)
56
+ .map(([field, exists]) => {
57
+ const jsonPath = this.parseJsonPath(field);
58
+ if (exists) {
59
+ return `json_extract(data, ${jsonPath}) IS NOT NULL`;
60
+ }
61
+ else {
62
+ return `json_extract(data, ${jsonPath}) IS NULL`;
63
+ }
64
+ })
65
+ .join(' AND ');
66
+ conditions.push(`(${existsConditions})`);
67
+ }
68
+ else if (key === '$not' && filter.$not) {
69
+ // Handle negation of conditions
70
+ const notConditions = filter.$not;
71
+ const notClause = this.buildWhereClause(notConditions, params);
72
+ conditions.push(`NOT (${notClause})`);
73
+ }
74
+ else if (key === '$all' && filter.$all) {
75
+ // Handle array all match
76
+ const allConditions = Object.entries(filter.$all)
77
+ .map(([field, values]) => {
78
+ const arrayPath = this.parseJsonPath(field);
79
+ if (Array.isArray(values) && values.length > 0) {
80
+ const inConditions = values
81
+ .map(() => `json_extract(data, ${arrayPath}) = ?`)
82
+ .join(' AND ');
83
+ params.push(...values);
84
+ return `(${inConditions})`;
85
+ }
86
+ else {
87
+ return '1=0'; // Empty $all means nothing matches
88
+ }
89
+ })
90
+ .join(' AND ');
91
+ conditions.push(`(${allConditions})`);
92
+ }
93
+ else if (key === '$elemMatch' && filter.$elemMatch) {
94
+ // Handle array element match
95
+ const elemMatchConditions = Object.entries(filter.$elemMatch)
96
+ .map(([field, subFilter]) => {
97
+ const arrayPath = this.parseJsonPath(field);
98
+ // First check if the field exists and is an array
99
+ const checkArrayCondition = `json_type(json_extract(data, ${arrayPath})) = 'array'`;
100
+ // Use a subquery with json_each to find at least one array element matching all conditions
101
+ let elemMatchSubquery = `EXISTS (
102
+ SELECT 1 FROM json_each(json_extract(data, ${arrayPath})) as elements
103
+ WHERE `;
104
+ // Process the conditions for the array elements
105
+ if (typeof subFilter === 'object' && subFilter !== null) {
106
+ const elemConditions = Object.entries(subFilter)
107
+ .map(([subField, subValue]) => {
108
+ if (typeof subValue === 'object' && subValue !== null) {
109
+ // Handle operators in the subfilter
110
+ const subConditions = [];
111
+ for (const op in subValue) {
112
+ const opValue = subValue[op];
113
+ switch (op) {
114
+ case '$eq':
115
+ subConditions.push(`json_extract(elements.value, '$.${subField}') = ?`);
116
+ params.push(opValue);
117
+ break;
118
+ case '$gt':
119
+ subConditions.push(`json_extract(elements.value, '$.${subField}') > ?`);
120
+ params.push(opValue);
121
+ break;
122
+ case '$gte':
123
+ subConditions.push(`json_extract(elements.value, '$.${subField}') >= ?`);
124
+ params.push(opValue);
125
+ break;
126
+ case '$lt':
127
+ subConditions.push(`json_extract(elements.value, '$.${subField}') < ?`);
128
+ params.push(opValue);
129
+ break;
130
+ case '$lte':
131
+ subConditions.push(`json_extract(elements.value, '$.${subField}') <= ?`);
132
+ params.push(opValue);
133
+ break;
134
+ // Add other operators as needed
135
+ }
136
+ }
137
+ return subConditions.join(' AND ');
138
+ }
139
+ else {
140
+ // Simple equality for direct value
141
+ params.push(subValue);
142
+ return `json_extract(elements.value, '$.${subField}') = ?`;
143
+ }
144
+ })
145
+ .join(' AND ');
146
+ elemMatchSubquery += elemConditions;
147
+ }
148
+ else {
149
+ // Simple equality check for the entire element
150
+ params.push(subFilter);
151
+ elemMatchSubquery += `elements.value = ?`;
152
+ }
153
+ elemMatchSubquery += ')';
154
+ return `${checkArrayCondition} AND ${elemMatchSubquery}`;
155
+ })
156
+ .join(' AND ');
157
+ conditions.push(`(${elemMatchConditions})`);
158
+ }
159
+ else {
160
+ // Handle field conditions
161
+ if (key.startsWith('$'))
162
+ continue; // Skip logical operators already handled
163
+ const value = filter[key];
164
+ if (key === '_id') {
165
+ if (typeof value === 'string') {
166
+ conditions.push('_id = ?');
167
+ params.push(value);
168
+ }
169
+ else if (typeof value === 'object' &&
170
+ value !== null &&
171
+ value.$in) {
172
+ const inValues = value.$in;
173
+ if (inValues.length > 0) {
174
+ conditions.push(`_id IN (${inValues.map(() => '?').join(',')})`);
175
+ params.push(...inValues);
176
+ }
177
+ else {
178
+ conditions.push('1=0'); // No values in $in means nothing matches
179
+ }
180
+ }
181
+ else if (typeof value === 'object' &&
182
+ value !== null &&
183
+ value.$ne) {
184
+ conditions.push('_id <> ?');
185
+ params.push(value.$ne);
186
+ }
187
+ // Add other _id specific operators if needed
188
+ }
189
+ else {
190
+ const jsonPath = this.parseJsonPath(key);
191
+ if (typeof value === 'object' && value !== null) {
192
+ // Handle operators like $gt, $lt, $in, $exists, $not etc.
193
+ for (const op in value) {
194
+ const opValue = value[op];
195
+ switch (op) {
196
+ case '$eq':
197
+ conditions.push(`json_extract(data, ${jsonPath}) = ?`);
198
+ params.push(opValue);
199
+ break;
200
+ case '$ne':
201
+ if (opValue === null) {
202
+ conditions.push(`json_extract(data, ${jsonPath}) IS NOT NULL`);
203
+ }
204
+ else {
205
+ conditions.push(`json_extract(data, ${jsonPath}) != ?`);
206
+ params.push(opValue);
207
+ }
208
+ break;
209
+ case '$gt':
210
+ conditions.push(`json_extract(data, ${jsonPath}) > ?`);
211
+ params.push(opValue);
212
+ break;
213
+ case '$gte':
214
+ conditions.push(`json_extract(data, ${jsonPath}) >= ?`);
215
+ params.push(opValue);
216
+ break;
217
+ case '$lt':
218
+ conditions.push(`json_extract(data, ${jsonPath}) < ?`);
219
+ params.push(opValue);
220
+ break;
221
+ case '$lte':
222
+ conditions.push(`json_extract(data, ${jsonPath}) <= ?`);
223
+ params.push(opValue);
224
+ break;
225
+ case '$in':
226
+ if (Array.isArray(opValue) && opValue.length > 0) {
227
+ const inConditions = opValue
228
+ .map(() => `json_extract(data, ${jsonPath}) = ?`)
229
+ .join(' OR ');
230
+ conditions.push(`(${inConditions})`);
231
+ opValue.forEach((val) => params.push(val));
232
+ }
233
+ else {
234
+ conditions.push('1=0'); // Empty $in array, nothing will match
235
+ }
236
+ break;
237
+ case '$nin':
238
+ if (Array.isArray(opValue) && opValue.length > 0) {
239
+ const ninConditions = opValue
240
+ .map(() => `json_extract(data, ${jsonPath}) != ?`)
241
+ .join(' AND ');
242
+ conditions.push(`(${ninConditions})`);
243
+ opValue.forEach((val) => params.push(val));
244
+ }
245
+ // Empty $nin array means match everything, so no condition needed
246
+ break;
247
+ case '$exists':
248
+ if (opValue === true) {
249
+ conditions.push(`json_extract(data, ${jsonPath}) IS NOT NULL`);
250
+ }
251
+ else {
252
+ conditions.push(`json_extract(data, ${jsonPath}) IS NULL`);
253
+ }
254
+ break;
255
+ case '$not':
256
+ // Handle negation of conditions
257
+ const notCondition = this.buildWhereClause({ [key]: opValue }, params);
258
+ conditions.push(`NOT (${notCondition})`);
259
+ break;
260
+ case '$all':
261
+ if (Array.isArray(opValue) && opValue.length > 0) {
262
+ // Check if the field is an array
263
+ const arrayTypeCheck = `json_type(json_extract(data, ${jsonPath})) = 'array'`;
264
+ // For each value in the $all array, create a subquery to check if it exists in the array
265
+ const allConditions = opValue
266
+ .map(() => {
267
+ return `EXISTS (SELECT 1 FROM json_each(json_extract(data, ${jsonPath})) WHERE json_each.value = ?)`;
268
+ })
269
+ .join(' AND ');
270
+ conditions.push(`(${arrayTypeCheck} AND ${allConditions})`);
271
+ opValue.forEach((val) => params.push(val));
272
+ }
273
+ else {
274
+ conditions.push('1=0'); // Empty $all array, nothing will match
275
+ }
276
+ break;
277
+ case '$elemMatch':
278
+ // Handle array element match
279
+ // For nested.items we need to check for conditions on the same array element
280
+ // Build a query that checks if there's at least one array element that satisfies all conditions
281
+ const arrayPath = this.parseJsonPath(key);
282
+ let elemMatchSubquery = `EXISTS (
283
+ SELECT 1
284
+ FROM json_each(json_extract(data, ${arrayPath})) as array_elements
285
+ WHERE `;
286
+ // Process each condition in the $elemMatch
287
+ if (typeof opValue === 'object' && opValue !== null) {
288
+ const subConditions = Object.entries(opValue)
289
+ .map(([sfKey, sfValue]) => {
290
+ if (typeof sfValue === 'object' && sfValue !== null) {
291
+ // Handle operators in the subfilter
292
+ const subOpConditions = [];
293
+ for (const op in sfValue) {
294
+ const opVal = sfValue[op];
295
+ switch (op) {
296
+ case '$eq':
297
+ subOpConditions.push(`json_extract(array_elements.value, '$.${sfKey}') = ?`);
298
+ params.push(opVal);
299
+ break;
300
+ case '$gt':
301
+ subOpConditions.push(`json_extract(array_elements.value, '$.${sfKey}') > ?`);
302
+ params.push(opVal);
303
+ break;
304
+ case '$gte':
305
+ subOpConditions.push(`json_extract(array_elements.value, '$.${sfKey}') >= ?`);
306
+ params.push(opVal);
307
+ break;
308
+ case '$lt':
309
+ subOpConditions.push(`json_extract(array_elements.value, '$.${sfKey}') < ?`);
310
+ params.push(opVal);
311
+ break;
312
+ case '$lte':
313
+ subOpConditions.push(`json_extract(array_elements.value, '$.${sfKey}') <= ?`);
314
+ params.push(opVal);
315
+ break;
316
+ // Add other operators as needed
317
+ }
318
+ }
319
+ return subOpConditions.join(' AND ');
320
+ }
321
+ else {
322
+ // Simple equality for direct value
323
+ params.push(sfValue);
324
+ return `json_extract(array_elements.value, '$.${sfKey}') = ?`;
325
+ }
326
+ })
327
+ .join(' AND ');
328
+ elemMatchSubquery += subConditions;
329
+ }
330
+ else {
331
+ // Simple equality check for the entire element
332
+ params.push(opValue);
333
+ elemMatchSubquery += `array_elements.value = ?`;
334
+ }
335
+ elemMatchSubquery += ')';
336
+ conditions.push(elemMatchSubquery);
337
+ break;
338
+ // Add other operators as needed
339
+ }
340
+ }
341
+ }
342
+ else {
343
+ // Direct equality for non-object values
344
+ if (value === null) {
345
+ conditions.push(`json_extract(data, ${jsonPath}) IS NULL`);
346
+ }
347
+ else {
348
+ conditions.push(`json_extract(data, ${jsonPath}) = ?`);
349
+ params.push(value);
350
+ }
351
+ }
352
+ }
353
+ }
354
+ }
355
+ return conditions.length > 0 ? conditions.join(' AND ') : '1=1';
356
+ }
357
+ }
358
+ //# sourceMappingURL=query-builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query-builder.js","sourceRoot":"","sources":["../src/query-builder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import { DocumentWithId, UpdateFilter } from './types.js';
2
+ /**
3
+ * Class to handle update operations on documents
4
+ */
5
+ export declare class UpdateOperationHandler<T extends DocumentWithId> {
6
+ /**
7
+ * Apply update operations to a document
8
+ * @param doc The document to modify
9
+ * @param update The update operations to apply
10
+ * @returns Whether the document was modified
11
+ */
12
+ applyUpdateOperations(doc: Record<string, any>, update: UpdateFilter<T>): boolean;
13
+ /**
14
+ * Check if a value matches a filter condition
15
+ */
16
+ private matchesFilterValue;
17
+ }
@@ -0,0 +1,147 @@
1
+ import { getNestedValue, setNestedValue, unsetNestedValue } from './document-utils.js';
2
+ /**
3
+ * Class to handle update operations on documents
4
+ */
5
+ export class UpdateOperationHandler {
6
+ /**
7
+ * Apply update operations to a document
8
+ * @param doc The document to modify
9
+ * @param update The update operations to apply
10
+ * @returns Whether the document was modified
11
+ */
12
+ applyUpdateOperations(doc, update) {
13
+ let modified = false;
14
+ // Process update operators
15
+ for (const operator in update) {
16
+ const opArgs = update[operator];
17
+ if (!opArgs)
18
+ continue;
19
+ switch (operator) {
20
+ case '$set':
21
+ for (const path in opArgs) {
22
+ const value = opArgs[path];
23
+ setNestedValue(doc, path, value);
24
+ modified = true;
25
+ }
26
+ break;
27
+ case '$unset':
28
+ for (const path in opArgs) {
29
+ unsetNestedValue(doc, path);
30
+ modified = true;
31
+ }
32
+ break;
33
+ case '$inc':
34
+ for (const path in opArgs) {
35
+ const value = opArgs[path];
36
+ if (typeof value === 'number') {
37
+ const currentValue = getNestedValue(doc, path) || 0;
38
+ if (typeof currentValue === 'number') {
39
+ setNestedValue(doc, path, currentValue + value);
40
+ modified = true;
41
+ }
42
+ }
43
+ }
44
+ break;
45
+ case '$push':
46
+ for (const path in opArgs) {
47
+ const value = opArgs[path];
48
+ const currentValue = getNestedValue(doc, path);
49
+ if (Array.isArray(currentValue)) {
50
+ if (typeof value === 'object' && value !== null && '$each' in value) {
51
+ if (Array.isArray(value.$each)) {
52
+ currentValue.push(...value.$each);
53
+ modified = true;
54
+ }
55
+ }
56
+ else {
57
+ currentValue.push(value);
58
+ modified = true;
59
+ }
60
+ }
61
+ else if (currentValue === undefined) {
62
+ // If the field doesn't exist, create it as an array
63
+ if (typeof value === 'object' && value !== null && '$each' in value) {
64
+ if (Array.isArray(value.$each)) {
65
+ setNestedValue(doc, path, [...value.$each]);
66
+ modified = true;
67
+ }
68
+ }
69
+ else {
70
+ setNestedValue(doc, path, [value]);
71
+ modified = true;
72
+ }
73
+ }
74
+ }
75
+ break;
76
+ case '$pull':
77
+ for (const path in opArgs) {
78
+ const value = opArgs[path];
79
+ const currentValue = getNestedValue(doc, path);
80
+ if (Array.isArray(currentValue)) {
81
+ // Simple equality pull
82
+ const newArray = currentValue.filter((item) => {
83
+ if (typeof value === 'object' && value !== null) {
84
+ // For objects, we need to check all criteria
85
+ for (const key in value) {
86
+ if (typeof item === 'object' &&
87
+ item !== null &&
88
+ !this.matchesFilterValue(item[key], value[key])) {
89
+ return true; // Keep the item if it doesn't match the criteria
90
+ }
91
+ }
92
+ return false; // Remove if all criteria match
93
+ }
94
+ else {
95
+ // Simple equality check for primitives
96
+ return item !== value;
97
+ }
98
+ });
99
+ if (newArray.length !== currentValue.length) {
100
+ setNestedValue(doc, path, newArray);
101
+ modified = true;
102
+ }
103
+ }
104
+ }
105
+ break;
106
+ }
107
+ }
108
+ return modified;
109
+ }
110
+ /**
111
+ * Check if a value matches a filter condition
112
+ */
113
+ matchesFilterValue(value, condition) {
114
+ if (typeof condition === 'object' && condition !== null) {
115
+ // Check for operators
116
+ // This is a simplified version, in a real implementation you'd handle many operators
117
+ if ('$eq' in condition) {
118
+ return value === condition.$eq;
119
+ }
120
+ else if ('$ne' in condition) {
121
+ return value !== condition.$ne;
122
+ }
123
+ else if ('$gt' in condition) {
124
+ return value > condition.$gt;
125
+ }
126
+ else if ('$gte' in condition) {
127
+ return value >= condition.$gte;
128
+ }
129
+ else if ('$lt' in condition) {
130
+ return value < condition.$lt;
131
+ }
132
+ else if ('$lte' in condition) {
133
+ return value <= condition.$lte;
134
+ }
135
+ else if ('$in' in condition && Array.isArray(condition.$in)) {
136
+ return condition.$in.includes(value);
137
+ }
138
+ else if ('$nin' in condition && Array.isArray(condition.$nin)) {
139
+ return !condition.$nin.includes(value);
140
+ }
141
+ // For a complete implementation, handle more operators
142
+ }
143
+ // Default to simple equality
144
+ return value === condition;
145
+ }
146
+ }
147
+ //# sourceMappingURL=update-operations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update-operations.js","sourceRoot":"","sources":["../src/update-operations.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mongolite-ts",
3
- "version": "0.4.0",
3
+ "version": "0.5.0",
4
4
  "description": "A MongoDB-like client using SQLite as a persistent store, written in TypeScript.",
5
5
  "main": "dist/index.js",
6
6
  "type": "module",