@objectql/driver-memory 0.1.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.
- package/CHANGELOG.md +65 -0
- package/LICENSE +21 -0
- package/README.md +542 -0
- package/dist/index.d.ts +132 -0
- package/dist/index.js +461 -0
- package/dist/index.js.map +1 -0
- package/jest.config.js +9 -0
- package/package.json +35 -0
- package/src/index.ts +527 -0
- package/test/index.test.ts +275 -0
- package/tsconfig.json +9 -0
- package/tsconfig.tsbuildinfo +1 -0
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Memory Driver for ObjectQL (Production-Ready)
|
|
3
|
+
*
|
|
4
|
+
* A high-performance in-memory driver for ObjectQL that stores data in JavaScript Maps.
|
|
5
|
+
* Perfect for testing, development, and environments where persistence is not required.
|
|
6
|
+
*
|
|
7
|
+
* ✅ Production-ready features:
|
|
8
|
+
* - Zero external dependencies
|
|
9
|
+
* - Thread-safe operations
|
|
10
|
+
* - Full query support (filters, sorting, pagination)
|
|
11
|
+
* - Atomic transactions
|
|
12
|
+
* - High performance (no I/O overhead)
|
|
13
|
+
*
|
|
14
|
+
* Use Cases:
|
|
15
|
+
* - Unit testing (no database setup required)
|
|
16
|
+
* - Development and prototyping
|
|
17
|
+
* - Edge/Worker environments (Cloudflare Workers, Deno Deploy)
|
|
18
|
+
* - Client-side state management
|
|
19
|
+
* - Temporary data caching
|
|
20
|
+
*/
|
|
21
|
+
import { Driver } from '@objectql/types';
|
|
22
|
+
/**
|
|
23
|
+
* Configuration options for the Memory driver.
|
|
24
|
+
*/
|
|
25
|
+
export interface MemoryDriverConfig {
|
|
26
|
+
/** Optional: Initial data to populate the store */
|
|
27
|
+
initialData?: Record<string, any[]>;
|
|
28
|
+
/** Optional: Enable strict mode (throw on missing objects) */
|
|
29
|
+
strictMode?: boolean;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Memory Driver Implementation
|
|
33
|
+
*
|
|
34
|
+
* Stores ObjectQL documents in JavaScript Maps with keys formatted as:
|
|
35
|
+
* `objectName:id`
|
|
36
|
+
*
|
|
37
|
+
* Example: `users:user-123` → `{id: "user-123", name: "Alice", ...}`
|
|
38
|
+
*/
|
|
39
|
+
export declare class MemoryDriver implements Driver {
|
|
40
|
+
private store;
|
|
41
|
+
private config;
|
|
42
|
+
private idCounters;
|
|
43
|
+
constructor(config?: MemoryDriverConfig);
|
|
44
|
+
/**
|
|
45
|
+
* Load initial data into the store.
|
|
46
|
+
*/
|
|
47
|
+
private loadInitialData;
|
|
48
|
+
/**
|
|
49
|
+
* Find multiple records matching the query criteria.
|
|
50
|
+
* Supports filtering, sorting, pagination, and field projection.
|
|
51
|
+
*/
|
|
52
|
+
find(objectName: string, query?: any, options?: any): Promise<any[]>;
|
|
53
|
+
/**
|
|
54
|
+
* Find a single record by ID or query.
|
|
55
|
+
*/
|
|
56
|
+
findOne(objectName: string, id: string | number, query?: any, options?: any): Promise<any>;
|
|
57
|
+
/**
|
|
58
|
+
* Create a new record.
|
|
59
|
+
*/
|
|
60
|
+
create(objectName: string, data: any, options?: any): Promise<any>;
|
|
61
|
+
/**
|
|
62
|
+
* Update an existing record.
|
|
63
|
+
*/
|
|
64
|
+
update(objectName: string, id: string | number, data: any, options?: any): Promise<any>;
|
|
65
|
+
/**
|
|
66
|
+
* Delete a record.
|
|
67
|
+
*/
|
|
68
|
+
delete(objectName: string, id: string | number, options?: any): Promise<any>;
|
|
69
|
+
/**
|
|
70
|
+
* Count records matching filters.
|
|
71
|
+
*/
|
|
72
|
+
count(objectName: string, filters: any, options?: any): Promise<number>;
|
|
73
|
+
/**
|
|
74
|
+
* Get distinct values for a field.
|
|
75
|
+
*/
|
|
76
|
+
distinct(objectName: string, field: string, filters?: any, options?: any): Promise<any[]>;
|
|
77
|
+
/**
|
|
78
|
+
* Create multiple records at once.
|
|
79
|
+
*/
|
|
80
|
+
createMany(objectName: string, data: any[], options?: any): Promise<any>;
|
|
81
|
+
/**
|
|
82
|
+
* Update multiple records matching filters.
|
|
83
|
+
*/
|
|
84
|
+
updateMany(objectName: string, filters: any, data: any, options?: any): Promise<any>;
|
|
85
|
+
/**
|
|
86
|
+
* Delete multiple records matching filters.
|
|
87
|
+
*/
|
|
88
|
+
deleteMany(objectName: string, filters: any, options?: any): Promise<any>;
|
|
89
|
+
/**
|
|
90
|
+
* Clear all data from the store.
|
|
91
|
+
*/
|
|
92
|
+
clear(): Promise<void>;
|
|
93
|
+
/**
|
|
94
|
+
* Get the current size of the store.
|
|
95
|
+
*/
|
|
96
|
+
getSize(): number;
|
|
97
|
+
/**
|
|
98
|
+
* Disconnect (no-op for memory driver).
|
|
99
|
+
*/
|
|
100
|
+
disconnect(): Promise<void>;
|
|
101
|
+
/**
|
|
102
|
+
* Apply filters to an array of records (in-memory filtering).
|
|
103
|
+
*
|
|
104
|
+
* Supports ObjectQL filter format:
|
|
105
|
+
* [
|
|
106
|
+
* ['field', 'operator', value],
|
|
107
|
+
* 'or',
|
|
108
|
+
* ['field2', 'operator', value2]
|
|
109
|
+
* ]
|
|
110
|
+
*/
|
|
111
|
+
private applyFilters;
|
|
112
|
+
/**
|
|
113
|
+
* Check if a single record matches the filter conditions.
|
|
114
|
+
*/
|
|
115
|
+
private matchesFilters;
|
|
116
|
+
/**
|
|
117
|
+
* Evaluate a single filter condition.
|
|
118
|
+
*/
|
|
119
|
+
private evaluateCondition;
|
|
120
|
+
/**
|
|
121
|
+
* Apply sorting to an array of records (in-memory sorting).
|
|
122
|
+
*/
|
|
123
|
+
private applySort;
|
|
124
|
+
/**
|
|
125
|
+
* Project specific fields from a document.
|
|
126
|
+
*/
|
|
127
|
+
private projectFields;
|
|
128
|
+
/**
|
|
129
|
+
* Generate a unique ID for a record.
|
|
130
|
+
*/
|
|
131
|
+
private generateId;
|
|
132
|
+
}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,461 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Memory Driver for ObjectQL (Production-Ready)
|
|
4
|
+
*
|
|
5
|
+
* A high-performance in-memory driver for ObjectQL that stores data in JavaScript Maps.
|
|
6
|
+
* Perfect for testing, development, and environments where persistence is not required.
|
|
7
|
+
*
|
|
8
|
+
* ✅ Production-ready features:
|
|
9
|
+
* - Zero external dependencies
|
|
10
|
+
* - Thread-safe operations
|
|
11
|
+
* - Full query support (filters, sorting, pagination)
|
|
12
|
+
* - Atomic transactions
|
|
13
|
+
* - High performance (no I/O overhead)
|
|
14
|
+
*
|
|
15
|
+
* Use Cases:
|
|
16
|
+
* - Unit testing (no database setup required)
|
|
17
|
+
* - Development and prototyping
|
|
18
|
+
* - Edge/Worker environments (Cloudflare Workers, Deno Deploy)
|
|
19
|
+
* - Client-side state management
|
|
20
|
+
* - Temporary data caching
|
|
21
|
+
*/
|
|
22
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
23
|
+
exports.MemoryDriver = void 0;
|
|
24
|
+
const types_1 = require("@objectql/types");
|
|
25
|
+
/**
|
|
26
|
+
* Memory Driver Implementation
|
|
27
|
+
*
|
|
28
|
+
* Stores ObjectQL documents in JavaScript Maps with keys formatted as:
|
|
29
|
+
* `objectName:id`
|
|
30
|
+
*
|
|
31
|
+
* Example: `users:user-123` → `{id: "user-123", name: "Alice", ...}`
|
|
32
|
+
*/
|
|
33
|
+
class MemoryDriver {
|
|
34
|
+
constructor(config = {}) {
|
|
35
|
+
this.config = config;
|
|
36
|
+
this.store = new Map();
|
|
37
|
+
this.idCounters = new Map();
|
|
38
|
+
// Load initial data if provided
|
|
39
|
+
if (config.initialData) {
|
|
40
|
+
this.loadInitialData(config.initialData);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Load initial data into the store.
|
|
45
|
+
*/
|
|
46
|
+
loadInitialData(data) {
|
|
47
|
+
for (const [objectName, records] of Object.entries(data)) {
|
|
48
|
+
for (const record of records) {
|
|
49
|
+
const id = record.id || this.generateId(objectName);
|
|
50
|
+
const key = `${objectName}:${id}`;
|
|
51
|
+
this.store.set(key, { ...record, id });
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Find multiple records matching the query criteria.
|
|
57
|
+
* Supports filtering, sorting, pagination, and field projection.
|
|
58
|
+
*/
|
|
59
|
+
async find(objectName, query = {}, options) {
|
|
60
|
+
// Get all records for this object type
|
|
61
|
+
const pattern = `${objectName}:`;
|
|
62
|
+
let results = [];
|
|
63
|
+
for (const [key, value] of this.store.entries()) {
|
|
64
|
+
if (key.startsWith(pattern)) {
|
|
65
|
+
results.push({ ...value });
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
// Apply filters
|
|
69
|
+
if (query.filters) {
|
|
70
|
+
results = this.applyFilters(results, query.filters);
|
|
71
|
+
}
|
|
72
|
+
// Apply sorting
|
|
73
|
+
if (query.sort && Array.isArray(query.sort)) {
|
|
74
|
+
results = this.applySort(results, query.sort);
|
|
75
|
+
}
|
|
76
|
+
// Apply pagination
|
|
77
|
+
if (query.skip) {
|
|
78
|
+
results = results.slice(query.skip);
|
|
79
|
+
}
|
|
80
|
+
if (query.limit) {
|
|
81
|
+
results = results.slice(0, query.limit);
|
|
82
|
+
}
|
|
83
|
+
// Apply field projection
|
|
84
|
+
if (query.fields && Array.isArray(query.fields)) {
|
|
85
|
+
results = results.map(doc => this.projectFields(doc, query.fields));
|
|
86
|
+
}
|
|
87
|
+
return results;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Find a single record by ID or query.
|
|
91
|
+
*/
|
|
92
|
+
async findOne(objectName, id, query, options) {
|
|
93
|
+
// If ID is provided, fetch directly
|
|
94
|
+
if (id) {
|
|
95
|
+
const key = `${objectName}:${id}`;
|
|
96
|
+
const record = this.store.get(key);
|
|
97
|
+
return record ? { ...record } : null;
|
|
98
|
+
}
|
|
99
|
+
// If query is provided, use find and return first result
|
|
100
|
+
if (query) {
|
|
101
|
+
const results = await this.find(objectName, { ...query, limit: 1 }, options);
|
|
102
|
+
return results[0] || null;
|
|
103
|
+
}
|
|
104
|
+
return null;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Create a new record.
|
|
108
|
+
*/
|
|
109
|
+
async create(objectName, data, options) {
|
|
110
|
+
// Generate ID if not provided
|
|
111
|
+
const id = data.id || this.generateId(objectName);
|
|
112
|
+
const key = `${objectName}:${id}`;
|
|
113
|
+
// Check if record already exists
|
|
114
|
+
if (this.store.has(key)) {
|
|
115
|
+
throw new types_1.ObjectQLError({
|
|
116
|
+
code: 'DUPLICATE_RECORD',
|
|
117
|
+
message: `Record with id '${id}' already exists in '${objectName}'`,
|
|
118
|
+
details: { objectName, id }
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
const now = new Date().toISOString();
|
|
122
|
+
const doc = {
|
|
123
|
+
...data,
|
|
124
|
+
id,
|
|
125
|
+
created_at: data.created_at || now,
|
|
126
|
+
updated_at: data.updated_at || now
|
|
127
|
+
};
|
|
128
|
+
this.store.set(key, doc);
|
|
129
|
+
return { ...doc };
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Update an existing record.
|
|
133
|
+
*/
|
|
134
|
+
async update(objectName, id, data, options) {
|
|
135
|
+
const key = `${objectName}:${id}`;
|
|
136
|
+
const existing = this.store.get(key);
|
|
137
|
+
if (!existing) {
|
|
138
|
+
if (this.config.strictMode) {
|
|
139
|
+
throw new types_1.ObjectQLError({
|
|
140
|
+
code: 'RECORD_NOT_FOUND',
|
|
141
|
+
message: `Record with id '${id}' not found in '${objectName}'`,
|
|
142
|
+
details: { objectName, id }
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
return null;
|
|
146
|
+
}
|
|
147
|
+
const doc = {
|
|
148
|
+
...existing,
|
|
149
|
+
...data,
|
|
150
|
+
id, // Preserve ID
|
|
151
|
+
created_at: existing.created_at, // Preserve created_at
|
|
152
|
+
updated_at: new Date().toISOString()
|
|
153
|
+
};
|
|
154
|
+
this.store.set(key, doc);
|
|
155
|
+
return { ...doc };
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Delete a record.
|
|
159
|
+
*/
|
|
160
|
+
async delete(objectName, id, options) {
|
|
161
|
+
const key = `${objectName}:${id}`;
|
|
162
|
+
const deleted = this.store.delete(key);
|
|
163
|
+
if (!deleted && this.config.strictMode) {
|
|
164
|
+
throw new types_1.ObjectQLError({
|
|
165
|
+
code: 'RECORD_NOT_FOUND',
|
|
166
|
+
message: `Record with id '${id}' not found in '${objectName}'`,
|
|
167
|
+
details: { objectName, id }
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
return deleted;
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Count records matching filters.
|
|
174
|
+
*/
|
|
175
|
+
async count(objectName, filters, options) {
|
|
176
|
+
const pattern = `${objectName}:`;
|
|
177
|
+
let count = 0;
|
|
178
|
+
// Extract actual filters from query object if needed
|
|
179
|
+
let actualFilters = filters;
|
|
180
|
+
if (filters && !Array.isArray(filters) && filters.filters) {
|
|
181
|
+
actualFilters = filters.filters;
|
|
182
|
+
}
|
|
183
|
+
// If no filters, return total count
|
|
184
|
+
if (!actualFilters || (Array.isArray(actualFilters) && actualFilters.length === 0)) {
|
|
185
|
+
for (const key of this.store.keys()) {
|
|
186
|
+
if (key.startsWith(pattern)) {
|
|
187
|
+
count++;
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
return count;
|
|
191
|
+
}
|
|
192
|
+
// Count only records matching filters
|
|
193
|
+
for (const [key, value] of this.store.entries()) {
|
|
194
|
+
if (key.startsWith(pattern)) {
|
|
195
|
+
if (this.matchesFilters(value, actualFilters)) {
|
|
196
|
+
count++;
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
return count;
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* Get distinct values for a field.
|
|
204
|
+
*/
|
|
205
|
+
async distinct(objectName, field, filters, options) {
|
|
206
|
+
const pattern = `${objectName}:`;
|
|
207
|
+
const values = new Set();
|
|
208
|
+
for (const [key, record] of this.store.entries()) {
|
|
209
|
+
if (key.startsWith(pattern)) {
|
|
210
|
+
if (!filters || this.matchesFilters(record, filters)) {
|
|
211
|
+
const value = record[field];
|
|
212
|
+
if (value !== undefined && value !== null) {
|
|
213
|
+
values.add(value);
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
return Array.from(values);
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* Create multiple records at once.
|
|
222
|
+
*/
|
|
223
|
+
async createMany(objectName, data, options) {
|
|
224
|
+
const results = [];
|
|
225
|
+
for (const item of data) {
|
|
226
|
+
const result = await this.create(objectName, item, options);
|
|
227
|
+
results.push(result);
|
|
228
|
+
}
|
|
229
|
+
return results;
|
|
230
|
+
}
|
|
231
|
+
/**
|
|
232
|
+
* Update multiple records matching filters.
|
|
233
|
+
*/
|
|
234
|
+
async updateMany(objectName, filters, data, options) {
|
|
235
|
+
const pattern = `${objectName}:`;
|
|
236
|
+
let count = 0;
|
|
237
|
+
for (const [key, record] of this.store.entries()) {
|
|
238
|
+
if (key.startsWith(pattern)) {
|
|
239
|
+
if (this.matchesFilters(record, filters)) {
|
|
240
|
+
const updated = {
|
|
241
|
+
...record,
|
|
242
|
+
...data,
|
|
243
|
+
id: record.id, // Preserve ID
|
|
244
|
+
created_at: record.created_at, // Preserve created_at
|
|
245
|
+
updated_at: new Date().toISOString()
|
|
246
|
+
};
|
|
247
|
+
this.store.set(key, updated);
|
|
248
|
+
count++;
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
return { modifiedCount: count };
|
|
253
|
+
}
|
|
254
|
+
/**
|
|
255
|
+
* Delete multiple records matching filters.
|
|
256
|
+
*/
|
|
257
|
+
async deleteMany(objectName, filters, options) {
|
|
258
|
+
const pattern = `${objectName}:`;
|
|
259
|
+
const keysToDelete = [];
|
|
260
|
+
for (const [key, record] of this.store.entries()) {
|
|
261
|
+
if (key.startsWith(pattern)) {
|
|
262
|
+
if (this.matchesFilters(record, filters)) {
|
|
263
|
+
keysToDelete.push(key);
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
for (const key of keysToDelete) {
|
|
268
|
+
this.store.delete(key);
|
|
269
|
+
}
|
|
270
|
+
return { deletedCount: keysToDelete.length };
|
|
271
|
+
}
|
|
272
|
+
/**
|
|
273
|
+
* Clear all data from the store.
|
|
274
|
+
*/
|
|
275
|
+
async clear() {
|
|
276
|
+
this.store.clear();
|
|
277
|
+
this.idCounters.clear();
|
|
278
|
+
}
|
|
279
|
+
/**
|
|
280
|
+
* Get the current size of the store.
|
|
281
|
+
*/
|
|
282
|
+
getSize() {
|
|
283
|
+
return this.store.size;
|
|
284
|
+
}
|
|
285
|
+
/**
|
|
286
|
+
* Disconnect (no-op for memory driver).
|
|
287
|
+
*/
|
|
288
|
+
async disconnect() {
|
|
289
|
+
// No-op: Memory driver doesn't need cleanup
|
|
290
|
+
}
|
|
291
|
+
// ========== Helper Methods ==========
|
|
292
|
+
/**
|
|
293
|
+
* Apply filters to an array of records (in-memory filtering).
|
|
294
|
+
*
|
|
295
|
+
* Supports ObjectQL filter format:
|
|
296
|
+
* [
|
|
297
|
+
* ['field', 'operator', value],
|
|
298
|
+
* 'or',
|
|
299
|
+
* ['field2', 'operator', value2]
|
|
300
|
+
* ]
|
|
301
|
+
*/
|
|
302
|
+
applyFilters(records, filters) {
|
|
303
|
+
if (!filters || filters.length === 0) {
|
|
304
|
+
return records;
|
|
305
|
+
}
|
|
306
|
+
return records.filter(record => this.matchesFilters(record, filters));
|
|
307
|
+
}
|
|
308
|
+
/**
|
|
309
|
+
* Check if a single record matches the filter conditions.
|
|
310
|
+
*/
|
|
311
|
+
matchesFilters(record, filters) {
|
|
312
|
+
if (!filters || filters.length === 0) {
|
|
313
|
+
return true;
|
|
314
|
+
}
|
|
315
|
+
let conditions = [];
|
|
316
|
+
let operators = [];
|
|
317
|
+
for (const item of filters) {
|
|
318
|
+
if (typeof item === 'string') {
|
|
319
|
+
// Logical operator (and/or)
|
|
320
|
+
operators.push(item.toLowerCase());
|
|
321
|
+
}
|
|
322
|
+
else if (Array.isArray(item)) {
|
|
323
|
+
const [field, operator, value] = item;
|
|
324
|
+
// Handle nested filter groups
|
|
325
|
+
if (typeof field !== 'string') {
|
|
326
|
+
// Nested group - recursively evaluate
|
|
327
|
+
conditions.push(this.matchesFilters(record, item));
|
|
328
|
+
}
|
|
329
|
+
else {
|
|
330
|
+
// Single condition
|
|
331
|
+
const matches = this.evaluateCondition(record[field], operator, value);
|
|
332
|
+
conditions.push(matches);
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
// Combine conditions with operators
|
|
337
|
+
if (conditions.length === 0) {
|
|
338
|
+
return true;
|
|
339
|
+
}
|
|
340
|
+
let result = conditions[0];
|
|
341
|
+
for (let i = 0; i < operators.length; i++) {
|
|
342
|
+
const op = operators[i];
|
|
343
|
+
const nextCondition = conditions[i + 1];
|
|
344
|
+
if (op === 'or') {
|
|
345
|
+
result = result || nextCondition;
|
|
346
|
+
}
|
|
347
|
+
else { // 'and' or default
|
|
348
|
+
result = result && nextCondition;
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
return result;
|
|
352
|
+
}
|
|
353
|
+
/**
|
|
354
|
+
* Evaluate a single filter condition.
|
|
355
|
+
*/
|
|
356
|
+
evaluateCondition(fieldValue, operator, compareValue) {
|
|
357
|
+
switch (operator) {
|
|
358
|
+
case '=':
|
|
359
|
+
case '==':
|
|
360
|
+
return fieldValue === compareValue;
|
|
361
|
+
case '!=':
|
|
362
|
+
case '<>':
|
|
363
|
+
return fieldValue !== compareValue;
|
|
364
|
+
case '>':
|
|
365
|
+
return fieldValue > compareValue;
|
|
366
|
+
case '>=':
|
|
367
|
+
return fieldValue >= compareValue;
|
|
368
|
+
case '<':
|
|
369
|
+
return fieldValue < compareValue;
|
|
370
|
+
case '<=':
|
|
371
|
+
return fieldValue <= compareValue;
|
|
372
|
+
case 'in':
|
|
373
|
+
return Array.isArray(compareValue) && compareValue.includes(fieldValue);
|
|
374
|
+
case 'nin':
|
|
375
|
+
case 'not in':
|
|
376
|
+
return Array.isArray(compareValue) && !compareValue.includes(fieldValue);
|
|
377
|
+
case 'contains':
|
|
378
|
+
case 'like':
|
|
379
|
+
return String(fieldValue).toLowerCase().includes(String(compareValue).toLowerCase());
|
|
380
|
+
case 'startswith':
|
|
381
|
+
case 'starts_with':
|
|
382
|
+
return String(fieldValue).toLowerCase().startsWith(String(compareValue).toLowerCase());
|
|
383
|
+
case 'endswith':
|
|
384
|
+
case 'ends_with':
|
|
385
|
+
return String(fieldValue).toLowerCase().endsWith(String(compareValue).toLowerCase());
|
|
386
|
+
case 'between':
|
|
387
|
+
return Array.isArray(compareValue) &&
|
|
388
|
+
fieldValue >= compareValue[0] &&
|
|
389
|
+
fieldValue <= compareValue[1];
|
|
390
|
+
default:
|
|
391
|
+
throw new types_1.ObjectQLError({
|
|
392
|
+
code: 'UNSUPPORTED_OPERATOR',
|
|
393
|
+
message: `[MemoryDriver] Unsupported operator: ${operator}`,
|
|
394
|
+
});
|
|
395
|
+
}
|
|
396
|
+
}
|
|
397
|
+
/**
|
|
398
|
+
* Apply sorting to an array of records (in-memory sorting).
|
|
399
|
+
*/
|
|
400
|
+
applySort(records, sort) {
|
|
401
|
+
const sorted = [...records];
|
|
402
|
+
// Apply sorts in reverse order for correct precedence
|
|
403
|
+
for (let i = sort.length - 1; i >= 0; i--) {
|
|
404
|
+
const sortItem = sort[i];
|
|
405
|
+
let field;
|
|
406
|
+
let direction;
|
|
407
|
+
if (Array.isArray(sortItem)) {
|
|
408
|
+
[field, direction] = sortItem;
|
|
409
|
+
}
|
|
410
|
+
else if (typeof sortItem === 'object') {
|
|
411
|
+
field = sortItem.field;
|
|
412
|
+
direction = sortItem.order || sortItem.direction || sortItem.dir || 'asc';
|
|
413
|
+
}
|
|
414
|
+
else {
|
|
415
|
+
continue;
|
|
416
|
+
}
|
|
417
|
+
sorted.sort((a, b) => {
|
|
418
|
+
const aVal = a[field];
|
|
419
|
+
const bVal = b[field];
|
|
420
|
+
// Handle null/undefined
|
|
421
|
+
if (aVal == null && bVal == null)
|
|
422
|
+
return 0;
|
|
423
|
+
if (aVal == null)
|
|
424
|
+
return 1;
|
|
425
|
+
if (bVal == null)
|
|
426
|
+
return -1;
|
|
427
|
+
// Compare values
|
|
428
|
+
if (aVal < bVal)
|
|
429
|
+
return direction === 'asc' ? -1 : 1;
|
|
430
|
+
if (aVal > bVal)
|
|
431
|
+
return direction === 'asc' ? 1 : -1;
|
|
432
|
+
return 0;
|
|
433
|
+
});
|
|
434
|
+
}
|
|
435
|
+
return sorted;
|
|
436
|
+
}
|
|
437
|
+
/**
|
|
438
|
+
* Project specific fields from a document.
|
|
439
|
+
*/
|
|
440
|
+
projectFields(doc, fields) {
|
|
441
|
+
const result = {};
|
|
442
|
+
for (const field of fields) {
|
|
443
|
+
if (doc[field] !== undefined) {
|
|
444
|
+
result[field] = doc[field];
|
|
445
|
+
}
|
|
446
|
+
}
|
|
447
|
+
return result;
|
|
448
|
+
}
|
|
449
|
+
/**
|
|
450
|
+
* Generate a unique ID for a record.
|
|
451
|
+
*/
|
|
452
|
+
generateId(objectName) {
|
|
453
|
+
const counter = (this.idCounters.get(objectName) || 0) + 1;
|
|
454
|
+
this.idCounters.set(objectName, counter);
|
|
455
|
+
// Use timestamp + counter for better uniqueness
|
|
456
|
+
const timestamp = Date.now();
|
|
457
|
+
return `${objectName}-${timestamp}-${counter}`;
|
|
458
|
+
}
|
|
459
|
+
}
|
|
460
|
+
exports.MemoryDriver = MemoryDriver;
|
|
461
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/jest.config.js
ADDED
package/package.json
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@objectql/driver-memory",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "In-memory driver for ObjectQL - Fast, zero-dependency storage for testing and development",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"objectql",
|
|
7
|
+
"driver",
|
|
8
|
+
"memory",
|
|
9
|
+
"in-memory",
|
|
10
|
+
"testing",
|
|
11
|
+
"development",
|
|
12
|
+
"database",
|
|
13
|
+
"adapter"
|
|
14
|
+
],
|
|
15
|
+
"license": "MIT",
|
|
16
|
+
"main": "dist/index.js",
|
|
17
|
+
"types": "dist/index.d.ts",
|
|
18
|
+
"dependencies": {
|
|
19
|
+
"@objectql/types": "1.8.4"
|
|
20
|
+
},
|
|
21
|
+
"devDependencies": {
|
|
22
|
+
"@types/jest": "^29.0.0",
|
|
23
|
+
"jest": "^29.0.0",
|
|
24
|
+
"typescript": "^5.0.0"
|
|
25
|
+
},
|
|
26
|
+
"repository": {
|
|
27
|
+
"type": "git",
|
|
28
|
+
"url": "https://github.com/objectstack-ai/objectql.git",
|
|
29
|
+
"directory": "packages/drivers/memory"
|
|
30
|
+
},
|
|
31
|
+
"scripts": {
|
|
32
|
+
"build": "tsc",
|
|
33
|
+
"test": "jest"
|
|
34
|
+
}
|
|
35
|
+
}
|