@furystack/core 12.0.0 → 12.0.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.
Files changed (61) hide show
  1. package/{types → esm}/create-physical-store-tests.d.ts +1 -1
  2. package/{types → esm}/create-physical-store-tests.d.ts.map +1 -1
  3. package/esm/create-physical-store-tests.js +446 -0
  4. package/esm/create-physical-store-tests.js.map +1 -0
  5. package/esm/errors/aggregated-error.js +11 -0
  6. package/esm/errors/aggregated-error.js.map +1 -0
  7. package/esm/errors/authorization-error.js +3 -0
  8. package/esm/errors/authorization-error.js.map +1 -0
  9. package/esm/errors/index.d.ts +3 -0
  10. package/esm/errors/index.d.ts.map +1 -0
  11. package/esm/errors/index.js +3 -0
  12. package/esm/errors/index.js.map +1 -0
  13. package/esm/global-disposables.js +26 -0
  14. package/esm/global-disposables.js.map +1 -0
  15. package/{types → esm}/helpers.d.ts +4 -4
  16. package/{types → esm}/helpers.d.ts.map +1 -1
  17. package/esm/helpers.js +38 -0
  18. package/esm/helpers.js.map +1 -0
  19. package/{types → esm}/identity-context.d.ts +1 -1
  20. package/esm/identity-context.d.ts.map +1 -0
  21. package/esm/identity-context.js +23 -0
  22. package/esm/identity-context.js.map +1 -0
  23. package/{types → esm}/in-memory-store.d.ts +1 -1
  24. package/{types → esm}/in-memory-store.d.ts.map +1 -1
  25. package/esm/in-memory-store.js +185 -0
  26. package/esm/in-memory-store.js.map +1 -0
  27. package/esm/index.d.ts +9 -0
  28. package/esm/index.d.ts.map +1 -0
  29. package/esm/index.js +9 -0
  30. package/esm/index.js.map +1 -0
  31. package/esm/models/physical-store.js +30 -0
  32. package/esm/models/physical-store.js.map +1 -0
  33. package/esm/models/user.js +6 -0
  34. package/esm/models/user.js.map +1 -0
  35. package/{types → esm}/store-manager.d.ts +1 -1
  36. package/{types → esm}/store-manager.d.ts.map +1 -1
  37. package/esm/store-manager.js +59 -0
  38. package/esm/store-manager.js.map +1 -0
  39. package/package.json +7 -17
  40. package/src/create-physical-store-tests.ts +1 -1
  41. package/src/errors/index.ts +2 -2
  42. package/src/helpers.ts +4 -4
  43. package/src/identity-context.ts +1 -1
  44. package/src/in-memory-store.ts +2 -2
  45. package/src/index.ts +8 -8
  46. package/src/store-manager.ts +2 -2
  47. package/types/errors/index.d.ts +0 -3
  48. package/types/errors/index.d.ts.map +0 -1
  49. package/types/identity-context.d.ts.map +0 -1
  50. package/types/index.d.ts +0 -9
  51. package/types/index.d.ts.map +0 -1
  52. /package/{types → esm}/errors/aggregated-error.d.ts +0 -0
  53. /package/{types → esm}/errors/aggregated-error.d.ts.map +0 -0
  54. /package/{types → esm}/errors/authorization-error.d.ts +0 -0
  55. /package/{types → esm}/errors/authorization-error.d.ts.map +0 -0
  56. /package/{types → esm}/global-disposables.d.ts +0 -0
  57. /package/{types → esm}/global-disposables.d.ts.map +0 -0
  58. /package/{types → esm}/models/physical-store.d.ts +0 -0
  59. /package/{types → esm}/models/physical-store.d.ts.map +0 -0
  60. /package/{types → esm}/models/user.d.ts +0 -0
  61. /package/{types → esm}/models/user.d.ts.map +0 -0
@@ -1,4 +1,4 @@
1
- import type { PhysicalStore } from './models/physical-store';
1
+ import type { PhysicalStore } from './models/physical-store.js';
2
2
  import { Injector } from '@furystack/inject';
3
3
  export declare class TestClass {
4
4
  id: number;
@@ -1 +1 @@
1
- {"version":3,"file":"create-physical-store-tests.d.ts","sourceRoot":"","sources":["../src/create-physical-store-tests.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAA;AAE5D,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAG5C,qBAAa,SAAS;IACpB,EAAE,EAAG,MAAM,CAAA;IACX,YAAY,EAAG,MAAM,CAAA;IACrB,YAAY,EAAG,MAAM,CAAA;IACrB,YAAY,EAAG,MAAM,CAAA;IACrB,YAAY,EAAG,MAAM,CAAA;IACrB,YAAY,EAAG,OAAO,CAAA;IACtB,SAAS,EAAG,IAAI,CAAA;CACjB;AAGD,eAAO,MAAM,gBAAgB,UAAW,QAAQ,SAAS,CAAC,cAUzC,CAAA;AAEjB,MAAM,WAAW,gBAAgB,CAAC,CAAC,EAAE,WAAW,SAAS,MAAM,CAAC;IAC9D,QAAQ,EAAE,MAAM,CAAA;IAChB,WAAW,EAAE,CAAC,CAAC,EAAE,QAAQ,KAAK,aAAa,CAAC,CAAC,EAAE,WAAW,CAAC,CAAA;IAC3D,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,eAAe,CAAC,EAAE,OAAO,CAAA;CAC1B;AAED,eAAO,MAAM,eAAe,YAAa,iBAAiB,SAAS,EAAE,IAAI,CAAC,SAikBzE,CAAA"}
1
+ {"version":3,"file":"create-physical-store-tests.d.ts","sourceRoot":"","sources":["../src/create-physical-store-tests.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AAE/D,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAG5C,qBAAa,SAAS;IACpB,EAAE,EAAG,MAAM,CAAA;IACX,YAAY,EAAG,MAAM,CAAA;IACrB,YAAY,EAAG,MAAM,CAAA;IACrB,YAAY,EAAG,MAAM,CAAA;IACrB,YAAY,EAAG,MAAM,CAAA;IACrB,YAAY,EAAG,OAAO,CAAA;IACtB,SAAS,EAAG,IAAI,CAAA;CACjB;AAGD,eAAO,MAAM,gBAAgB,UAAW,QAAQ,SAAS,CAAC,cAUzC,CAAA;AAEjB,MAAM,WAAW,gBAAgB,CAAC,CAAC,EAAE,WAAW,SAAS,MAAM,CAAC;IAC9D,QAAQ,EAAE,MAAM,CAAA;IAChB,WAAW,EAAE,CAAC,CAAC,EAAE,QAAQ,KAAK,aAAa,CAAC,CAAC,EAAE,WAAW,CAAC,CAAA;IAC3D,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,eAAe,CAAC,EAAE,OAAO,CAAA;CAC1B;AAED,eAAO,MAAM,eAAe,YAAa,iBAAiB,SAAS,EAAE,IAAI,CAAC,SAikBzE,CAAA"}
@@ -0,0 +1,446 @@
1
+ import { usingAsync } from '@furystack/utils';
2
+ import { Injector } from '@furystack/inject';
3
+ import { describe, it, expect } from 'vitest';
4
+ export class TestClass {
5
+ }
6
+ let idIndex = 0;
7
+ export const createMockEntity = (part) => ({
8
+ id: idIndex++,
9
+ stringValue1: 'foo',
10
+ stringValue2: 'bar',
11
+ numberValue1: Math.round(Math.random() * 1000),
12
+ numberValue2: Math.round(Math.random() * 10000) / 100,
13
+ booleanValue: true,
14
+ dateValue: new Date(),
15
+ ...part,
16
+ });
17
+ export const createStoreTest = (options) => {
18
+ describe(`Standard Physical Store tests for '${options.typeName}'`, () => {
19
+ describe('General CRUD', () => {
20
+ it('Should be created with empty by default', async () => {
21
+ await usingAsync(new Injector(), async (i) => {
22
+ const store = options.createStore(i);
23
+ const count = await store.count();
24
+ expect(count).toBe(0);
25
+ });
26
+ });
27
+ it('Should be able to store an entity', async () => {
28
+ await usingAsync(new Injector(), async (i) => {
29
+ const store = options.createStore(i);
30
+ const entity = createMockEntity();
31
+ await store.add(entity);
32
+ const count = await store.count();
33
+ expect(count).toBe(1);
34
+ });
35
+ });
36
+ it('Should be able to store an entity without providing an unique Id', async () => {
37
+ await usingAsync(new Injector(), async (i) => {
38
+ const store = options.createStore(i);
39
+ const { id, ...entityWithoutId } = createMockEntity();
40
+ const { created } = await store.add(entityWithoutId);
41
+ expect(created.length).toBe(1);
42
+ const count = await store.count();
43
+ expect(count).toBe(1);
44
+ const retrieved = await store.get(created[0].id);
45
+ expect(retrieved).toEqual(created[0]);
46
+ });
47
+ });
48
+ it('Should be able to store multiple entities', async () => {
49
+ await usingAsync(new Injector(), async (i) => {
50
+ const store = options.createStore(i);
51
+ const entity1 = createMockEntity();
52
+ const entity2 = createMockEntity();
53
+ await store.add(entity1, entity2);
54
+ const count = await store.count();
55
+ expect(count).toBe(2);
56
+ });
57
+ });
58
+ it('Add should throw and skip adding on duplicate IDs', async () => {
59
+ await usingAsync(new Injector(), async (i) => {
60
+ const store = options.createStore(i);
61
+ const entity = createMockEntity();
62
+ await store.add(entity);
63
+ await expect(store.add(entity)).rejects.toThrow();
64
+ const count = await store.count();
65
+ expect(count).toBe(1);
66
+ });
67
+ });
68
+ it('Should return undefined if no entry has been found', async () => {
69
+ await usingAsync(new Injector(), async (i) => {
70
+ const store = options.createStore(i);
71
+ const entity = await store.get(1);
72
+ expect(entity).toBeUndefined();
73
+ });
74
+ });
75
+ it('Should be able to retrieve an added entity', async () => {
76
+ await usingAsync(new Injector(), async (i) => {
77
+ const store = options.createStore(i);
78
+ const entity = createMockEntity();
79
+ await store.add(entity);
80
+ const retrieved = await store.get(entity.id);
81
+ expect(retrieved).toEqual(entity);
82
+ });
83
+ });
84
+ it('Should be able to retrieve an added entity with projection', async () => {
85
+ await usingAsync(new Injector(), async (i) => {
86
+ const store = options.createStore(i);
87
+ const entity = createMockEntity();
88
+ await store.add(entity);
89
+ const retrieved = await store.get(entity.id, ['id', 'stringValue1']);
90
+ expect(retrieved).not.toEqual(entity);
91
+ expect(Object.keys(retrieved)).toEqual(['id', 'stringValue1']);
92
+ expect(retrieved?.id).toBe(entity.id);
93
+ expect(retrieved?.stringValue1).toBe(entity.stringValue1);
94
+ });
95
+ });
96
+ it('Should be able to update an added entity', async () => {
97
+ await usingAsync(new Injector(), async (i) => {
98
+ const store = options.createStore(i);
99
+ const entity = createMockEntity();
100
+ await store.add(entity);
101
+ await store.update(entity.id, { stringValue1: 'modified' });
102
+ const retrieved = await store.get(entity.id);
103
+ expect(retrieved?.stringValue1).toEqual('modified');
104
+ });
105
+ });
106
+ it('Update should throw an error if the entity does not exists', async () => {
107
+ await usingAsync(new Injector(), async (i) => {
108
+ const store = options.createStore(i);
109
+ const entity = createMockEntity();
110
+ await expect(store.update(entity.id, entity)).rejects.toThrow('Entity not found');
111
+ });
112
+ });
113
+ it('Should remove an entity', async () => {
114
+ await usingAsync(new Injector(), async (i) => {
115
+ const store = options.createStore(i);
116
+ const entity = createMockEntity();
117
+ await store.add(entity);
118
+ const count = await store.count();
119
+ expect(count).toBe(1);
120
+ await store.remove(entity.id);
121
+ const countAferDelete = await store.count();
122
+ expect(countAferDelete).toBe(0);
123
+ });
124
+ });
125
+ it('Should remove multiple entities at once', async () => {
126
+ await usingAsync(new Injector(), async (i) => {
127
+ const store = options.createStore(i);
128
+ const entity1 = createMockEntity();
129
+ const entity2 = createMockEntity();
130
+ const entity3 = createMockEntity();
131
+ await store.add(entity1, entity2, entity3);
132
+ const count = await store.count();
133
+ expect(count).toBe(3);
134
+ await store.remove(entity1.id, entity2.id);
135
+ const countAferDelete = await store.count();
136
+ expect(countAferDelete).toBe(1);
137
+ await store.remove(entity3.id);
138
+ const countAferDeleteAll = await store.count();
139
+ expect(countAferDeleteAll).toBe(0);
140
+ });
141
+ });
142
+ });
143
+ describe('Top, skip', () => {
144
+ it('Should respect top and skip', async () => {
145
+ await usingAsync(new Injector(), async (injector) => {
146
+ const store = options.createStore(injector);
147
+ for (let i = 0; i < 10; i++) {
148
+ await store.add(createMockEntity({ id: i }));
149
+ }
150
+ const zeroToThree = await store.find({ top: 4, select: ['id'] });
151
+ expect(zeroToThree).toEqual([{ id: 0 }, { id: 1 }, { id: 2 }, { id: 3 }]);
152
+ const fiveToEight = await store.find({ skip: 5, top: 4, select: ['id'] });
153
+ expect(fiveToEight).toEqual([{ id: 5 }, { id: 6 }, { id: 7 }, { id: 8 }]);
154
+ const eightNine = await store.find({ skip: 8, select: ['id'] });
155
+ expect(eightNine).toEqual([{ id: 8 }, { id: 9 }]);
156
+ });
157
+ });
158
+ });
159
+ describe('Ordering', () => {
160
+ it('Should sort by numeric values', async () => {
161
+ await usingAsync(new Injector(), async (injector) => {
162
+ const store = options.createStore(injector);
163
+ for (let i = 0; i < 10; i++) {
164
+ await store.add(createMockEntity({ id: i, numberValue1: Math.random(), numberValue2: Math.random() }));
165
+ }
166
+ // For equality
167
+ await store.add(createMockEntity({ id: 20, numberValue1: 0, numberValue2: 0 }));
168
+ await store.add(createMockEntity({ id: 21, numberValue1: 0, numberValue2: 0 }));
169
+ const orderByValue1Asc = await store.find({ order: { numberValue1: 'ASC' } });
170
+ let min = 0;
171
+ for (const currentValue of orderByValue1Asc) {
172
+ if (min > currentValue.numberValue1) {
173
+ throw Error('Order failed!');
174
+ }
175
+ min = currentValue.numberValue1;
176
+ }
177
+ const orderByValue1Desc = await store.find({ order: { numberValue1: 'DESC' } });
178
+ let max = Number.MAX_SAFE_INTEGER;
179
+ for (const currentValue of orderByValue1Desc) {
180
+ if (max < currentValue.numberValue1) {
181
+ throw Error('Order failed!');
182
+ }
183
+ max = currentValue.numberValue1;
184
+ }
185
+ });
186
+ });
187
+ });
188
+ describe('Filtering', () => {
189
+ it('should filter strings with $eq', async () => {
190
+ await usingAsync(new Injector(), async (i) => {
191
+ const store = options.createStore(i);
192
+ await store.add(createMockEntity({ id: 1, stringValue1: 'asd' }), createMockEntity({ id: 2, stringValue1: 'def' }), createMockEntity({ id: 3, stringValue1: 'def' }));
193
+ const result = await store.find({ filter: { stringValue1: { $eq: 'def' } } });
194
+ expect(result.length).toBe(2);
195
+ });
196
+ });
197
+ it('should filter numbers with $eq', async () => {
198
+ await usingAsync(new Injector(), async (i) => {
199
+ const store = options.createStore(i);
200
+ await store.add(createMockEntity({ id: 1, numberValue1: 1 }), createMockEntity({ id: 2, numberValue1: 2 }), createMockEntity({ id: 3, numberValue1: 2 }));
201
+ const result = await store.find({ filter: { numberValue1: { $eq: 2 } } });
202
+ expect(result.length).toBe(2);
203
+ });
204
+ });
205
+ it('filter should return the corresponding entries for multiple props', async () => {
206
+ await usingAsync(new Injector(), async (i) => {
207
+ const store = options.createStore(i);
208
+ await store.add(createMockEntity({ id: 1, stringValue1: 'asd' }), createMockEntity({ id: 2, stringValue1: 'def', stringValue2: 'def' }), createMockEntity({ id: 3, stringValue1: 'def' }));
209
+ const result = await store.find({ filter: { stringValue1: { $eq: 'def' }, stringValue2: { $eq: 'def' } } });
210
+ expect(result.length).toBe(1);
211
+ });
212
+ });
213
+ it('filter should return the corresponding entries with $in statement', async () => {
214
+ await usingAsync(new Injector(), async (i) => {
215
+ const store = options.createStore(i);
216
+ await store.add(createMockEntity({ stringValue1: 'asd' }), createMockEntity({ stringValue1: 'def' }), createMockEntity({ stringValue1: 'sdf' }));
217
+ const result = await store.find({ filter: { stringValue1: { $in: ['asd', 'def'] } } });
218
+ expect(result.length).toBe(2);
219
+ expect(result.map((r) => r.stringValue1)).toEqual(['asd', 'def']);
220
+ });
221
+ });
222
+ it('filter should return the corresponding entries with $nin statement', async () => {
223
+ await usingAsync(new Injector(), async (i) => {
224
+ const store = options.createStore(i);
225
+ await store.add(createMockEntity({ id: 1, stringValue1: 'asd' }), createMockEntity({ id: 2, stringValue1: 'def' }), createMockEntity({ id: 3, stringValue1: 'sdf' }));
226
+ const result = await store.find({ filter: { stringValue1: { $nin: ['asd', 'def'] } } });
227
+ expect(result.length).toBe(1);
228
+ expect(result.map((r) => r.stringValue1)).toEqual(['sdf']);
229
+ });
230
+ });
231
+ it('filter should return the corresponding entries with $ne statement', async () => {
232
+ await usingAsync(new Injector(), async (i) => {
233
+ const store = options.createStore(i);
234
+ await store.add(createMockEntity({ id: 1, stringValue1: 'asd' }), createMockEntity({ id: 2, stringValue1: 'def' }), createMockEntity({ id: 3, stringValue1: 'sdf' }));
235
+ const result = await store.find({ filter: { stringValue1: { $ne: 'asd' } } });
236
+ expect(result.length).toBe(2);
237
+ expect(result.map((r) => r.stringValue1)).toEqual(['def', 'sdf']);
238
+ });
239
+ });
240
+ it('filter should return the corresponding entries with $lt statement', async () => {
241
+ await usingAsync(new Injector(), async (i) => {
242
+ const store = options.createStore(i);
243
+ const { created } = await store.add(createMockEntity({ id: 1, numberValue1: 1 }), createMockEntity({ id: 2, numberValue1: 2 }), createMockEntity({ id: 3, numberValue1: 3 }));
244
+ const result = await store.find({ filter: { numberValue1: { $lt: 2 } } });
245
+ expect(result.length).toBe(1);
246
+ expect(result).toEqual([created[0]]);
247
+ });
248
+ });
249
+ it('filter should return the corresponding entries with $lte statement', async () => {
250
+ await usingAsync(new Injector(), async (i) => {
251
+ const store = options.createStore(i);
252
+ const { created } = await store.add(createMockEntity({ id: 1, numberValue1: 1 }), createMockEntity({ id: 2, numberValue1: 2 }), createMockEntity({ id: 3, numberValue1: 3 }));
253
+ const result = await store.find({ filter: { numberValue1: { $lte: 2 } } });
254
+ expect(result.length).toBe(2);
255
+ expect(result).toEqual([created[0], created[1]]);
256
+ });
257
+ });
258
+ it('filter should return the corresponding entries with $gt statement', async () => {
259
+ await usingAsync(new Injector(), async (i) => {
260
+ const store = options.createStore(i);
261
+ const { created } = await store.add(createMockEntity({ id: 1, numberValue1: 1 }), createMockEntity({ id: 2, numberValue1: 2 }), createMockEntity({ id: 3, numberValue1: 3 }));
262
+ const result = await store.find({ filter: { numberValue1: { $gt: 2 } } });
263
+ expect(result.length).toBe(1);
264
+ expect(result).toEqual([created[2]]);
265
+ });
266
+ });
267
+ it('filter should return the corresponding entries with $gte statement', async () => {
268
+ await usingAsync(new Injector(), async (i) => {
269
+ const store = options.createStore(i);
270
+ const { created } = await store.add(createMockEntity({ id: 1, numberValue1: 1 }), createMockEntity({ id: 2, numberValue1: 2 }), createMockEntity({ id: 3, numberValue1: 3 }));
271
+ const result = await store.find({ filter: { numberValue1: { $gte: 2 } } });
272
+ expect(result.length).toBe(2);
273
+ expect(result).toEqual([created[1], created[2]]);
274
+ });
275
+ });
276
+ it('filter should return the corresponding entries with $in AND $eq statement', async () => {
277
+ await usingAsync(new Injector(), async (i) => {
278
+ const store = options.createStore(i);
279
+ await store.add(createMockEntity({ id: 1, stringValue1: 'asd' }), createMockEntity({ id: 2, stringValue1: 'def' }), createMockEntity({ id: 3, stringValue1: 'sdf' }));
280
+ const result = await store.find({ filter: { stringValue1: { $in: ['asd', 'def'], $eq: 'asd' } } });
281
+ expect(result.length).toBe(1);
282
+ expect(result.map((r) => r.stringValue1)).toEqual(['asd']);
283
+ });
284
+ });
285
+ describe('logical $and statements', () => {
286
+ it('should filter $and logical statements with $eq statements', async () => {
287
+ await usingAsync(new Injector(), async (i) => {
288
+ const store = options.createStore(i);
289
+ const { created } = await store.add(createMockEntity({ id: 1, numberValue1: 1, numberValue2: 1 }), createMockEntity({ id: 2, numberValue1: 2, numberValue2: 1 }), createMockEntity({ id: 3, numberValue1: 3, numberValue2: 1 }));
290
+ const result = await store.find({
291
+ filter: { $and: [{ numberValue1: { $eq: 2 } }, { numberValue2: { $eq: 1 } }] },
292
+ });
293
+ expect(result.length).toBe(1);
294
+ expect(result[0]).toEqual(created[1]);
295
+ });
296
+ });
297
+ it('should filter $and logical statements with $ne statements', async () => {
298
+ await usingAsync(new Injector(), async (i) => {
299
+ const store = options.createStore(i);
300
+ const { created } = await store.add(createMockEntity({ id: 1, numberValue1: 1, numberValue2: 2 }), createMockEntity({ id: 2, numberValue1: 2, numberValue2: 3 }), createMockEntity({ id: 3, numberValue1: 3, numberValue2: 1 }));
301
+ const result = await store.find({
302
+ filter: { $and: [{ numberValue1: { $ne: 2 } }, { numberValue2: { $ne: 1 } }] },
303
+ });
304
+ expect(result.length).toBe(1);
305
+ expect(result[0]).toEqual(created[0]);
306
+ });
307
+ });
308
+ it('should filter $and logical statements with $lt/$gt statements', async () => {
309
+ await usingAsync(new Injector(), async (i) => {
310
+ const store = options.createStore(i);
311
+ const { created } = await store.add(createMockEntity({ id: 1, numberValue1: 1, numberValue2: 2 }), createMockEntity({ id: 2, numberValue1: 2, numberValue2: 3 }), createMockEntity({ id: 3, numberValue1: 3, numberValue2: 1 }));
312
+ const result = await store.find({
313
+ filter: { $and: [{ numberValue1: { $lt: 3 } }, { numberValue2: { $gt: 2 } }] },
314
+ });
315
+ expect(result.length).toBe(1);
316
+ expect(result[0]).toEqual(created[1]);
317
+ });
318
+ });
319
+ it('should filter $and logical statements with $lte/$gte statements', async () => {
320
+ await usingAsync(new Injector(), async (i) => {
321
+ const store = options.createStore(i);
322
+ const { created } = await store.add(createMockEntity({ id: 1, numberValue1: 1, numberValue2: 1 }), createMockEntity({ id: 2, numberValue1: 2, numberValue2: 2 }), createMockEntity({ id: 3, numberValue1: 3, numberValue2: 3 }));
323
+ const result = await store.find({
324
+ filter: { $and: [{ numberValue1: { $lte: 2 } }, { numberValue2: { $gte: 2 } }] },
325
+ });
326
+ expect(result.length).toBe(1);
327
+ expect(result[0]).toEqual(created[1]);
328
+ });
329
+ });
330
+ });
331
+ describe('logical $or statements', () => {
332
+ it('should filter logical $or statements with $eq statements', async () => {
333
+ await usingAsync(new Injector(), async (i) => {
334
+ const store = options.createStore(i);
335
+ const { created } = await store.add(createMockEntity({ id: 1, stringValue1: 'asd' }), createMockEntity({ id: 2, stringValue1: 'aaa' }), createMockEntity({ id: 3, stringValue1: 'bbb' }));
336
+ const result = await store.find({
337
+ filter: { $or: [{ stringValue1: { $eq: 'aaa' } }, { stringValue1: { $eq: 'bbb' } }] },
338
+ });
339
+ expect(result.length).toBe(2);
340
+ expect(result).toEqual([created[1], created[2]]);
341
+ });
342
+ });
343
+ it('should filter logical $or statements with $neq statements', async () => {
344
+ await usingAsync(new Injector(), async (i) => {
345
+ const store = options.createStore(i);
346
+ const { created } = await store.add(createMockEntity({ id: 1, stringValue1: 'asd' }), createMockEntity({ id: 2, stringValue1: 'aaa' }), createMockEntity({ id: 3, stringValue1: 'bbb' }));
347
+ const result = await store.find({
348
+ filter: { $or: [{ stringValue1: { $ne: 'aaa' } }, { stringValue1: { $ne: 'bbb' } }] },
349
+ });
350
+ expect(result.length).toBe(3);
351
+ expect(result).toEqual(created);
352
+ });
353
+ });
354
+ });
355
+ describe('Nested $or and $and logical operators', () => {
356
+ it('should filter $and operators inside $or-s', async () => {
357
+ await usingAsync(new Injector(), async (i) => {
358
+ const store = options.createStore(i);
359
+ const { created } = await store.add(createMockEntity({ id: 1, numberValue1: 1, numberValue2: 3, booleanValue: true }), createMockEntity({ id: 2, numberValue1: 2, numberValue2: 2, booleanValue: false }), createMockEntity({ id: 3, numberValue1: 3, numberValue2: 1, booleanValue: true }));
360
+ const result = await store.find({
361
+ filter: {
362
+ $or: [
363
+ {
364
+ $and: [{ numberValue1: { $ne: 2 } }, { numberValue2: { $eq: 1 } }],
365
+ },
366
+ {
367
+ $and: [{ numberValue1: { $ne: 3 } }, { booleanValue: { $ne: true } }],
368
+ },
369
+ ],
370
+ },
371
+ });
372
+ expect(result.length).toBe(2);
373
+ expect(result).toEqual([created[1], created[2]]);
374
+ });
375
+ });
376
+ });
377
+ if (!options.skipRegexTests) {
378
+ it('filter should return the corresponding entries with $regex', async () => {
379
+ await usingAsync(new Injector(), async (i) => {
380
+ const store = options.createStore(i);
381
+ await store.add(createMockEntity({ id: 1, stringValue1: 'asd' }), createMockEntity({ id: 2, stringValue1: 'aaa' }), createMockEntity({ id: 3, stringValue1: 'bbb' }));
382
+ const result = await store.find({ filter: { stringValue1: { $regex: '([a])' } } });
383
+ expect(result.length).toBe(2);
384
+ expect(result.map((r) => r.stringValue1)).toEqual(['asd', 'aaa']);
385
+ });
386
+ });
387
+ }
388
+ if (!options.skipStringTests) {
389
+ it('filter should return the corresponding entries with $startsWith', async () => {
390
+ await usingAsync(new Injector(), async (i) => {
391
+ const store = options.createStore(i);
392
+ await store.add(createMockEntity({ id: 1, stringValue1: 'asd' }), createMockEntity({ id: 2, stringValue1: 'aaa' }), createMockEntity({ id: 3, stringValue1: 'bbb' }));
393
+ const result = await store.find({ filter: { stringValue1: { $startsWith: 'aa' } } });
394
+ expect(result.length).toBe(1);
395
+ expect(result.map((r) => r.stringValue1)).toEqual(['aaa']);
396
+ });
397
+ });
398
+ it('filter should return the corresponding entries with $endsWith', async () => {
399
+ await usingAsync(new Injector(), async (i) => {
400
+ const store = options.createStore(i);
401
+ await store.add(createMockEntity({ id: 1, stringValue1: 'asd' }), createMockEntity({ id: 2, stringValue1: 'aaa' }), createMockEntity({ id: 3, stringValue1: 'bbb' }));
402
+ const result = await store.find({ filter: { stringValue1: { $endsWith: 'bb' } } });
403
+ expect(result.length).toBe(1);
404
+ expect(result.map((r) => r.stringValue1)).toEqual(['bbb']);
405
+ });
406
+ });
407
+ it('filter should return the corresponding entries with $like', async () => {
408
+ await usingAsync(new Injector(), async (i) => {
409
+ const store = options.createStore(i);
410
+ await store.add(createMockEntity({ id: 1, stringValue1: 'asd' }), createMockEntity({ id: 2, stringValue1: 'aaa' }), createMockEntity({ id: 3, stringValue1: 'bbb' }));
411
+ const result = await store.find({ filter: { stringValue1: { $like: '%a%' } } });
412
+ expect(result.length).toBe(2);
413
+ expect(result.map((r) => r.stringValue1)).toEqual(['asd', 'aaa']);
414
+ const endsWithAResult = await store.find({ filter: { stringValue1: { $like: '%a' } } });
415
+ expect(endsWithAResult.length).toBe(1);
416
+ expect(endsWithAResult.map((r) => r.stringValue1)).toEqual(['aaa']);
417
+ const startsWithAResult = await store.find({ filter: { stringValue1: { $like: 'a%' } } });
418
+ expect(startsWithAResult.length).toBe(2);
419
+ expect(startsWithAResult.map((r) => r.stringValue1)).toEqual(['asd', 'aaa']);
420
+ });
421
+ });
422
+ }
423
+ });
424
+ describe('Count', () => {
425
+ it('Should return the count', async () => {
426
+ await usingAsync(new Injector(), async (i) => {
427
+ const store = options.createStore(i);
428
+ await store.add(createMockEntity(), createMockEntity(), createMockEntity());
429
+ const count = await store.count();
430
+ expect(count).toBe(3);
431
+ });
432
+ });
433
+ it('Should respect filters', async () => {
434
+ await usingAsync(new Injector(), async (i) => {
435
+ const store = options.createStore(i);
436
+ await store.add(createMockEntity({ numberValue1: 1 }), createMockEntity({ numberValue1: 1 }), createMockEntity({ numberValue1: 2 }));
437
+ const count = await store.count({ numberValue1: { $eq: 1 } });
438
+ expect(count).toBe(2);
439
+ const count2 = await store.count({ numberValue1: { $eq: 2 } });
440
+ expect(count2).toBe(1);
441
+ });
442
+ });
443
+ });
444
+ });
445
+ };
446
+ //# sourceMappingURL=create-physical-store-tests.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-physical-store-tests.js","sourceRoot":"","sources":["../src/create-physical-store-tests.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ export class AggregatedError extends Error {
2
+ /**
3
+ * @param message The error message
4
+ * @param rejections Collection of the Rejections
5
+ */
6
+ constructor(message, rejections) {
7
+ super(message);
8
+ this.rejections = rejections;
9
+ }
10
+ }
11
+ //# sourceMappingURL=aggregated-error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aggregated-error.js","sourceRoot":"","sources":["../../src/errors/aggregated-error.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,eAAgB,SAAQ,KAAK;IACxC;;;OAGG;IACH,YAAY,OAAe,EAAkB,UAAmC;QAC9E,KAAK,CAAC,OAAO,CAAC,CAAA;QAD6B,eAAU,GAAV,UAAU,CAAyB;IAEhF,CAAC;CACF"}
@@ -0,0 +1,3 @@
1
+ export class AuthorizationError extends Error {
2
+ }
3
+ //# sourceMappingURL=authorization-error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authorization-error.js","sourceRoot":"","sources":["../../src/errors/authorization-error.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,kBAAmB,SAAQ,KAAK;CAAG"}
@@ -0,0 +1,3 @@
1
+ export * from './authorization-error.js';
2
+ export * from './aggregated-error.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/errors/index.ts"],"names":[],"mappings":"AAAA,cAAc,0BAA0B,CAAA;AACxC,cAAc,uBAAuB,CAAA"}
@@ -0,0 +1,3 @@
1
+ export * from './authorization-error.js';
2
+ export * from './aggregated-error.js';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/errors/index.ts"],"names":[],"mappings":"AAAA,cAAc,0BAA0B,CAAA;AACxC,cAAc,uBAAuB,CAAA"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Readonly set that stores references of the disposables that should be disposed on process exit
3
+ */
4
+ export const globalDisposables = new Set();
5
+ /**
6
+ * Will be triggered via process event listeners
7
+ */
8
+ export const exitHandler = (async () => {
9
+ const result = await Promise.allSettled([...globalDisposables].map((d) => d.dispose()));
10
+ const fails = result.filter((r) => r.status === 'rejected');
11
+ if (fails && fails.length) {
12
+ console.warn(`There was an error during disposing '${fails.length}' global disposable objects`, fails);
13
+ }
14
+ }).bind(null);
15
+ // do something when app is closing
16
+ globalThis.process?.on?.('exit', exitHandler);
17
+ // catches ctrl+c event
18
+ globalThis.process?.on?.('SIGINT', exitHandler);
19
+ globalThis.process?.on?.('SIGTERM', () => exitHandler);
20
+ // catches "kill pid" (for example: nodemon restart)
21
+ globalThis.process?.on?.('SIGUSR1', exitHandler);
22
+ globalThis.process?.on?.('SIGUSR2', exitHandler);
23
+ // catches uncaught exceptions
24
+ globalThis.process?.on?.('uncaughtException', exitHandler);
25
+ globalThis.window?.addEventListener('beforeunload', exitHandler);
26
+ //# sourceMappingURL=global-disposables.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"global-disposables.js","sourceRoot":"","sources":["../src/global-disposables.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAoB,IAAI,GAAG,EAAE,CAAA;AAE3D;;GAEG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,KAAK,IAAI,EAAE;IACrC,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,CAAC,GAAG,iBAAiB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAA;IACvF,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,UAAU,CAAC,CAAA;IAC3D,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,EAAE;QACzB,OAAO,CAAC,IAAI,CAAC,wCAAwC,KAAK,CAAC,MAAM,6BAA6B,EAAE,KAAK,CAAC,CAAA;KACvG;AACH,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AAEb,mCAAmC;AACnC,UAAU,CAAC,OAAO,EAAE,EAAE,EAAE,CAAC,MAAM,EAAE,WAAW,CAAC,CAAA;AAE7C,uBAAuB;AACvB,UAAU,CAAC,OAAO,EAAE,EAAE,EAAE,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAA;AAE/C,UAAU,CAAC,OAAO,EAAE,EAAE,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,CAAA;AAEtD,oDAAoD;AACpD,UAAU,CAAC,OAAO,EAAE,EAAE,EAAE,CAAC,SAAS,EAAE,WAAW,CAAC,CAAA;AAChD,UAAU,CAAC,OAAO,EAAE,EAAE,EAAE,CAAC,SAAS,EAAE,WAAW,CAAC,CAAA;AAEhD,8BAA8B;AAC9B,UAAU,CAAC,OAAO,EAAE,EAAE,EAAE,CAAC,mBAAmB,EAAE,WAAW,CAAC,CAGzD;AAAC,UAAkB,CAAC,MAAM,EAAE,gBAAgB,CAAC,cAAc,EAAE,WAAW,CAAC,CAAA"}
@@ -1,7 +1,7 @@
1
1
  import type { Injector } from '@furystack/inject';
2
2
  import type { Disposable } from '@furystack/utils';
3
- import { StoreManager } from './store-manager';
4
- import type { PhysicalStore } from './models/physical-store';
3
+ import { StoreManager } from './store-manager.js';
4
+ import type { PhysicalStore } from './models/physical-store.js';
5
5
  /**
6
6
  * The disposable will be disposed on process exit
7
7
  * @param disposable The Disposable object to dispose on process exit
@@ -23,7 +23,7 @@ export declare const isAuthorized: (injector: Injector, ...roles: string[]) => P
23
23
  * @param injector The Injector instance
24
24
  * @returns The current user from the identity context
25
25
  */
26
- export declare const getCurrentUser: (injector: Injector) => Promise<import(".").User>;
26
+ export declare const getCurrentUser: (injector: Injector) => Promise<import("./index.js").User>;
27
27
  /**
28
28
  * @param injector The Injector instance
29
29
  * @returns A Store Manager instance to setup stores
@@ -35,5 +35,5 @@ export declare const getStoreManager: (injector: Injector) => StoreManager;
35
35
  * @param store The store to add
36
36
  * @returns The Store Manager instance for chaining
37
37
  */
38
- export declare const addStore: <T, TPrimaryKey extends keyof T>(injector: Injector, store: PhysicalStore<T, TPrimaryKey, import("./models/physical-store").WithOptionalId<T, TPrimaryKey>>) => StoreManager;
38
+ export declare const addStore: <T, TPrimaryKey extends keyof T>(injector: Injector, store: PhysicalStore<T, TPrimaryKey, import("./models/physical-store.js").WithOptionalId<T, TPrimaryKey>>) => StoreManager;
39
39
  //# sourceMappingURL=helpers.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAGjD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAC9C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAA;AAE5D;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,eAAgB,UAAU,oBAAsC,CAAA;AAEjG;;;GAGG;AACH,eAAO,MAAM,eAAe,aAAoB,QAAQ,qBAA4D,CAAA;AAEpH;;;;GAIG;AACH,eAAO,MAAM,YAAY,aAAoB,QAAQ,YAAY,MAAM,EAAE,qBACX,CAAA;AAE9D;;;GAGG;AACH,eAAO,MAAM,cAAc,aAAoB,QAAQ,8BAA2D,CAAA;AAElH;;;GAGG;AACH,eAAO,MAAM,eAAe,aAAc,QAAQ,iBAAuC,CAAA;AAEzF;;;;;GAKG;AACH,eAAO,MAAM,QAAQ,6CAA8C,QAAQ,yHAChC,CAAA"}
1
+ {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAGjD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AAE/D;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,eAAgB,UAAU,oBAAsC,CAAA;AAEjG;;;GAGG;AACH,eAAO,MAAM,eAAe,aAAoB,QAAQ,qBAA4D,CAAA;AAEpH;;;;GAIG;AACH,eAAO,MAAM,YAAY,aAAoB,QAAQ,YAAY,MAAM,EAAE,qBACX,CAAA;AAE9D;;;GAGG;AACH,eAAO,MAAM,cAAc,aAAoB,QAAQ,uCAA2D,CAAA;AAElH;;;GAGG;AACH,eAAO,MAAM,eAAe,aAAc,QAAQ,iBAAuC,CAAA;AAEzF;;;;;GAKG;AACH,eAAO,MAAM,QAAQ,6CAA8C,QAAQ,4HAChC,CAAA"}