liwi-subscribe-store 8.0.2 → 8.3.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/.eslintrc.json +1 -1
- package/CHANGELOG.md +41 -0
- package/dist/index-browser-dev.cjs.js +40 -35
- package/dist/index-browser-dev.cjs.js.map +1 -1
- package/dist/index-browser-dev.es.js +3 -3
- package/dist/index-browser-dev.es.js.map +1 -1
- package/dist/index-browser.cjs.js +40 -35
- package/dist/index-browser.cjs.js.map +1 -1
- package/dist/index-browser.es.js +3 -3
- package/dist/index-browser.es.js.map +1 -1
- package/dist/index-browsermodern-dev.es.js.map +1 -1
- package/dist/index-browsermodern.es.js.map +1 -1
- package/dist/index-node12-dev.cjs.js.map +1 -1
- package/dist/index-node12-dev.mjs.map +1 -1
- package/dist/index-node12.cjs.js.map +1 -1
- package/dist/index-node12.mjs.map +1 -1
- package/package.json +20 -14
- package/rollup.config.mjs +3 -0
- package/src/SubscribeStore.ts +2 -2
|
@@ -2,12 +2,17 @@
|
|
|
2
2
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
var _extends = require('@babel/runtime/helpers/esm/extends');
|
|
6
|
+
var _asyncToGenerator = require('@babel/runtime/helpers/esm/asyncToGenerator');
|
|
7
|
+
var _createClass = require('@babel/runtime/helpers/esm/createClass');
|
|
8
|
+
var _regeneratorRuntime = require('@babel/runtime/regenerator');
|
|
6
9
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
var
|
|
10
|
-
var
|
|
10
|
+
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e["default"] : e; }
|
|
11
|
+
|
|
12
|
+
var _extends__default = /*#__PURE__*/_interopDefaultLegacy(_extends);
|
|
13
|
+
var _asyncToGenerator__default = /*#__PURE__*/_interopDefaultLegacy(_asyncToGenerator);
|
|
14
|
+
var _createClass__default = /*#__PURE__*/_interopDefaultLegacy(_createClass);
|
|
15
|
+
var _regeneratorRuntime__default = /*#__PURE__*/_interopDefaultLegacy(_regeneratorRuntime);
|
|
11
16
|
|
|
12
17
|
var AbstractSubscribableStoreQuery = /*#__PURE__*/function () {
|
|
13
18
|
function AbstractSubscribableStoreQuery() {}
|
|
@@ -95,9 +100,9 @@ var SubscribeStore = /*#__PURE__*/function () {
|
|
|
95
100
|
};
|
|
96
101
|
|
|
97
102
|
_proto.insertOne = /*#__PURE__*/function () {
|
|
98
|
-
var _insertOne =
|
|
103
|
+
var _insertOne = _asyncToGenerator__default( /*#__PURE__*/_regeneratorRuntime__default.mark(function _callee(object) {
|
|
99
104
|
var inserted;
|
|
100
|
-
return
|
|
105
|
+
return _regeneratorRuntime__default.wrap(function _callee$(_context) {
|
|
101
106
|
while (1) {
|
|
102
107
|
switch (_context.prev = _context.next) {
|
|
103
108
|
case 0:
|
|
@@ -126,9 +131,9 @@ var SubscribeStore = /*#__PURE__*/function () {
|
|
|
126
131
|
}();
|
|
127
132
|
|
|
128
133
|
_proto.replaceOne = /*#__PURE__*/function () {
|
|
129
|
-
var _replaceOne =
|
|
134
|
+
var _replaceOne = _asyncToGenerator__default( /*#__PURE__*/_regeneratorRuntime__default.mark(function _callee2(object) {
|
|
130
135
|
var replaced;
|
|
131
|
-
return
|
|
136
|
+
return _regeneratorRuntime__default.wrap(function _callee2$(_context2) {
|
|
132
137
|
while (1) {
|
|
133
138
|
switch (_context2.prev = _context2.next) {
|
|
134
139
|
case 0:
|
|
@@ -157,9 +162,9 @@ var SubscribeStore = /*#__PURE__*/function () {
|
|
|
157
162
|
}();
|
|
158
163
|
|
|
159
164
|
_proto.replaceSeveral = /*#__PURE__*/function () {
|
|
160
|
-
var _replaceSeveral =
|
|
165
|
+
var _replaceSeveral = _asyncToGenerator__default( /*#__PURE__*/_regeneratorRuntime__default.mark(function _callee3(objects) {
|
|
161
166
|
var replacedObjects;
|
|
162
|
-
return
|
|
167
|
+
return _regeneratorRuntime__default.wrap(function _callee3$(_context3) {
|
|
163
168
|
while (1) {
|
|
164
169
|
switch (_context3.prev = _context3.next) {
|
|
165
170
|
case 0:
|
|
@@ -190,9 +195,9 @@ var SubscribeStore = /*#__PURE__*/function () {
|
|
|
190
195
|
}();
|
|
191
196
|
|
|
192
197
|
_proto.upsertOne = /*#__PURE__*/function () {
|
|
193
|
-
var _upsertOne =
|
|
198
|
+
var _upsertOne = _asyncToGenerator__default( /*#__PURE__*/_regeneratorRuntime__default.mark(function _callee4(object, setOnInsertPartialObject) {
|
|
194
199
|
var result;
|
|
195
|
-
return
|
|
200
|
+
return _regeneratorRuntime__default.wrap(function _callee4$(_context4) {
|
|
196
201
|
while (1) {
|
|
197
202
|
switch (_context4.prev = _context4.next) {
|
|
198
203
|
case 0:
|
|
@@ -217,9 +222,9 @@ var SubscribeStore = /*#__PURE__*/function () {
|
|
|
217
222
|
}();
|
|
218
223
|
|
|
219
224
|
_proto.upsertOneWithInfo = /*#__PURE__*/function () {
|
|
220
|
-
var _upsertOneWithInfo =
|
|
225
|
+
var _upsertOneWithInfo = _asyncToGenerator__default( /*#__PURE__*/_regeneratorRuntime__default.mark(function _callee5(object, setOnInsertPartialObject) {
|
|
221
226
|
var upsertedWithInfo;
|
|
222
|
-
return
|
|
227
|
+
return _regeneratorRuntime__default.wrap(function _callee5$(_context5) {
|
|
223
228
|
while (1) {
|
|
224
229
|
switch (_context5.prev = _context5.next) {
|
|
225
230
|
case 0:
|
|
@@ -261,14 +266,14 @@ var SubscribeStore = /*#__PURE__*/function () {
|
|
|
261
266
|
}();
|
|
262
267
|
|
|
263
268
|
_proto.partialUpdateByKey = /*#__PURE__*/function () {
|
|
264
|
-
var _partialUpdateByKey =
|
|
265
|
-
return
|
|
269
|
+
var _partialUpdateByKey = _asyncToGenerator__default( /*#__PURE__*/_regeneratorRuntime__default.mark(function _callee6(key, partialUpdate, criteria) {
|
|
270
|
+
return _regeneratorRuntime__default.wrap(function _callee6$(_context6) {
|
|
266
271
|
while (1) {
|
|
267
272
|
switch (_context6.prev = _context6.next) {
|
|
268
273
|
case 0:
|
|
269
274
|
_context6.t0 = this;
|
|
270
275
|
_context6.next = 3;
|
|
271
|
-
return this.findOne(
|
|
276
|
+
return this.findOne(_extends__default({
|
|
272
277
|
[this.store.keyPath]: key
|
|
273
278
|
}, criteria));
|
|
274
279
|
|
|
@@ -291,9 +296,9 @@ var SubscribeStore = /*#__PURE__*/function () {
|
|
|
291
296
|
}();
|
|
292
297
|
|
|
293
298
|
_proto.partialUpdateOne = /*#__PURE__*/function () {
|
|
294
|
-
var _partialUpdateOne =
|
|
299
|
+
var _partialUpdateOne = _asyncToGenerator__default( /*#__PURE__*/_regeneratorRuntime__default.mark(function _callee7(object, partialUpdate) {
|
|
295
300
|
var updated;
|
|
296
|
-
return
|
|
301
|
+
return _regeneratorRuntime__default.wrap(function _callee7$(_context7) {
|
|
297
302
|
while (1) {
|
|
298
303
|
switch (_context7.prev = _context7.next) {
|
|
299
304
|
case 0:
|
|
@@ -322,11 +327,11 @@ var SubscribeStore = /*#__PURE__*/function () {
|
|
|
322
327
|
}();
|
|
323
328
|
|
|
324
329
|
_proto.partialUpdateMany = /*#__PURE__*/function () {
|
|
325
|
-
var _partialUpdateMany =
|
|
330
|
+
var _partialUpdateMany = _asyncToGenerator__default( /*#__PURE__*/_regeneratorRuntime__default.mark(function _callee9(criteria, partialUpdate) {
|
|
326
331
|
var _this2 = this;
|
|
327
332
|
|
|
328
333
|
var cursor, changes;
|
|
329
|
-
return
|
|
334
|
+
return _regeneratorRuntime__default.wrap(function _callee9$(_context9) {
|
|
330
335
|
while (1) {
|
|
331
336
|
switch (_context9.prev = _context9.next) {
|
|
332
337
|
case 0:
|
|
@@ -338,9 +343,9 @@ var SubscribeStore = /*#__PURE__*/function () {
|
|
|
338
343
|
changes = [];
|
|
339
344
|
_context9.next = 6;
|
|
340
345
|
return cursor.forEach( /*#__PURE__*/function () {
|
|
341
|
-
var _ref =
|
|
346
|
+
var _ref = _asyncToGenerator__default( /*#__PURE__*/_regeneratorRuntime__default.mark(function _callee8(model) {
|
|
342
347
|
var key, updated;
|
|
343
|
-
return
|
|
348
|
+
return _regeneratorRuntime__default.wrap(function _callee8$(_context8) {
|
|
344
349
|
while (1) {
|
|
345
350
|
switch (_context8.prev = _context8.next) {
|
|
346
351
|
case 0:
|
|
@@ -368,7 +373,7 @@ var SubscribeStore = /*#__PURE__*/function () {
|
|
|
368
373
|
case 6:
|
|
369
374
|
this.callSubscribed({
|
|
370
375
|
type: 'updated',
|
|
371
|
-
changes
|
|
376
|
+
changes: changes
|
|
372
377
|
});
|
|
373
378
|
|
|
374
379
|
case 7:
|
|
@@ -385,8 +390,8 @@ var SubscribeStore = /*#__PURE__*/function () {
|
|
|
385
390
|
}();
|
|
386
391
|
|
|
387
392
|
_proto.deleteByKey = /*#__PURE__*/function () {
|
|
388
|
-
var _deleteByKey =
|
|
389
|
-
return
|
|
393
|
+
var _deleteByKey = _asyncToGenerator__default( /*#__PURE__*/_regeneratorRuntime__default.mark(function _callee10(key, criteria) {
|
|
394
|
+
return _regeneratorRuntime__default.wrap(function _callee10$(_context10) {
|
|
390
395
|
while (1) {
|
|
391
396
|
switch (_context10.prev = _context10.next) {
|
|
392
397
|
case 0:
|
|
@@ -412,8 +417,8 @@ var SubscribeStore = /*#__PURE__*/function () {
|
|
|
412
417
|
}();
|
|
413
418
|
|
|
414
419
|
_proto.deleteOne = /*#__PURE__*/function () {
|
|
415
|
-
var _deleteOne =
|
|
416
|
-
return
|
|
420
|
+
var _deleteOne = _asyncToGenerator__default( /*#__PURE__*/_regeneratorRuntime__default.mark(function _callee11(object) {
|
|
421
|
+
return _regeneratorRuntime__default.wrap(function _callee11$(_context11) {
|
|
417
422
|
while (1) {
|
|
418
423
|
switch (_context11.prev = _context11.next) {
|
|
419
424
|
case 0:
|
|
@@ -440,9 +445,9 @@ var SubscribeStore = /*#__PURE__*/function () {
|
|
|
440
445
|
}();
|
|
441
446
|
|
|
442
447
|
_proto.deleteMany = /*#__PURE__*/function () {
|
|
443
|
-
var _deleteMany =
|
|
448
|
+
var _deleteMany = _asyncToGenerator__default( /*#__PURE__*/_regeneratorRuntime__default.mark(function _callee12(criteria) {
|
|
444
449
|
var cursor, prev;
|
|
445
|
-
return
|
|
450
|
+
return _regeneratorRuntime__default.wrap(function _callee12$(_context12) {
|
|
446
451
|
while (1) {
|
|
447
452
|
switch (_context12.prev = _context12.next) {
|
|
448
453
|
case 0:
|
|
@@ -462,7 +467,7 @@ var SubscribeStore = /*#__PURE__*/function () {
|
|
|
462
467
|
case 8:
|
|
463
468
|
this.callSubscribed({
|
|
464
469
|
type: 'deleted',
|
|
465
|
-
prev
|
|
470
|
+
prev: prev
|
|
466
471
|
});
|
|
467
472
|
|
|
468
473
|
case 9:
|
|
@@ -479,9 +484,9 @@ var SubscribeStore = /*#__PURE__*/function () {
|
|
|
479
484
|
}();
|
|
480
485
|
|
|
481
486
|
_proto.cursor = /*#__PURE__*/function () {
|
|
482
|
-
var _cursor =
|
|
487
|
+
var _cursor = _asyncToGenerator__default( /*#__PURE__*/_regeneratorRuntime__default.mark(function _callee13(criteria, sort) {
|
|
483
488
|
var cursor;
|
|
484
|
-
return
|
|
489
|
+
return _regeneratorRuntime__default.wrap(function _callee13$(_context13) {
|
|
485
490
|
while (1) {
|
|
486
491
|
switch (_context13.prev = _context13.next) {
|
|
487
492
|
case 0:
|
|
@@ -506,7 +511,7 @@ var SubscribeStore = /*#__PURE__*/function () {
|
|
|
506
511
|
};
|
|
507
512
|
}();
|
|
508
513
|
|
|
509
|
-
|
|
514
|
+
_createClass__default(SubscribeStore, [{
|
|
510
515
|
key: "connection",
|
|
511
516
|
get: function get() {
|
|
512
517
|
return this.store.connection;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index-browser.cjs.js","sources":["../src/AbstractSubscribableStoreQuery.ts","../src/SubscribeStore.ts"],"sourcesContent":["import type {\n Query,\n SubscribeCallback,\n QuerySubscription,\n QueryResult,\n QueryParams,\n} from 'liwi-store';\nimport type { BaseModel, InsertType, AllowedKeyValue } from 'liwi-types';\nimport type SubscribeStore from './SubscribeStore';\n\nexport default abstract class AbstractSubscribableStoreQuery<\n KeyPath extends keyof Model,\n KeyValue extends AllowedKeyValue,\n Model extends BaseModel & Record<KeyPath, KeyValue>,\n ModelInsertType extends InsertType<Model, KeyPath>,\n Params extends QueryParams<Params> = never,\n Result = Model\n> implements Query<Result, Params, KeyValue> {\n changeParams(params: Params): never {\n throw new Error('Method not supported. Please create a new query.');\n }\n\n changePartialParams(\n params: Params extends undefined ? never : Partial<Params>,\n ): never {\n throw new Error('Method not supported. Please create a new query.');\n }\n\n private _subscribeStore?: SubscribeStore<\n KeyPath,\n KeyValue,\n Model,\n ModelInsertType,\n any,\n any\n >;\n\n setSubscribeStore(\n store: SubscribeStore<KeyPath, KeyValue, Model, ModelInsertType, any, any>,\n ): void {\n this._subscribeStore = store;\n }\n\n getSubscribeStore(): SubscribeStore<\n KeyPath,\n KeyValue,\n Model,\n ModelInsertType,\n any,\n any\n > {\n if (!this._subscribeStore) {\n throw new Error('_subscribeStore is not initialized');\n }\n return this._subscribeStore;\n }\n\n abstract fetch<T>(\n onFulfilled: (result: QueryResult<Result>) => T,\n ): Promise<T>;\n\n fetchAndSubscribe(\n callback: SubscribeCallback<KeyValue, Result>,\n ): QuerySubscription {\n return this._subscribe(callback, true);\n }\n\n subscribe(callback: SubscribeCallback<KeyValue, Result>): QuerySubscription {\n return this._subscribe(callback, false);\n }\n\n abstract _subscribe(\n callback: SubscribeCallback<KeyValue, Result>,\n _includeInitial: boolean,\n ): QuerySubscription;\n}\n","/* eslint-disable max-lines */\nimport type {\n Store as StoreInterface,\n AbstractConnection,\n UpsertResult,\n SubscribableStoreQuery,\n AbstractStoreCursor,\n SubscribableStore,\n QueryParams,\n UpsertPartialObject,\n} from 'liwi-store';\nimport type {\n BaseModel,\n InsertType,\n Update,\n Criteria,\n Sort,\n QueryOptions,\n Transformer,\n AllowedKeyValue,\n OptionalBaseModelKeysForInsert,\n} from 'liwi-types';\n\nexport type Actions<Model> =\n | { type: 'inserted'; next: Model[] }\n | { type: 'updated'; changes: [Model, Model][] }\n | { type: 'deleted'; prev: Model[] };\n\nexport type Listener<Model> = (action: Actions<Model>) => unknown;\n\nexport default class SubscribeStore<\n KeyPath extends keyof Model,\n KeyValue extends AllowedKeyValue,\n Model extends BaseModel & Record<KeyPath, KeyValue>,\n ModelInsertType extends InsertType<Model, KeyPath>,\n Connection extends AbstractConnection,\n Store extends SubscribableStore<\n KeyPath,\n KeyValue,\n Model,\n ModelInsertType,\n Connection\n >\n> implements\n StoreInterface<KeyPath, KeyValue, Model, ModelInsertType, Connection> {\n private readonly store: Store;\n\n private readonly listeners: Set<Listener<Model>> = new Set();\n\n readonly keyPath: KeyPath;\n\n constructor(store: Store) {\n this.store = store;\n this.keyPath = store.keyPath;\n }\n\n get connection(): Connection {\n return this.store.connection;\n }\n\n subscribe(callback: Listener<Model>): () => void {\n this.listeners.add(callback);\n return () => this.listeners.delete(callback);\n }\n\n callSubscribed(action: Actions<Model>): void {\n this.listeners.forEach((listener) => listener(action));\n }\n\n createQuerySingleItem<\n Result extends Record<KeyPath, KeyValue>,\n Params extends QueryParams<Params>\n >(\n options: QueryOptions<Model>,\n transformer?: Transformer<Model, Result>,\n ): SubscribableStoreQuery<\n KeyPath,\n KeyValue,\n Model,\n SubscribableStore<KeyPath, KeyValue, Model, ModelInsertType, Connection>,\n Result,\n Params\n > {\n const query: SubscribableStoreQuery<\n KeyPath,\n KeyValue,\n Model,\n SubscribableStore<KeyPath, KeyValue, Model, ModelInsertType, Connection>,\n Result,\n Params\n > = this.store.createQuerySingleItem<Result, Params>(options, transformer);\n query.setSubscribeStore(this);\n return query;\n }\n\n createQueryCollection<\n Item extends Record<KeyPath, KeyValue>,\n Params extends QueryParams<Params>\n >(\n options: QueryOptions<Model>,\n transformer?: Transformer<Model, Item>,\n ): SubscribableStoreQuery<\n KeyPath,\n KeyValue,\n Model,\n SubscribableStore<KeyPath, KeyValue, Model, ModelInsertType, Connection>,\n Item[],\n Params\n > {\n const query: SubscribableStoreQuery<\n KeyPath,\n KeyValue,\n Model,\n SubscribableStore<KeyPath, KeyValue, Model, ModelInsertType, Connection>,\n Item[],\n Params\n > = this.store.createQueryCollection<Item, Params>(options, transformer);\n query.setSubscribeStore(this);\n return query;\n }\n\n findAll(criteria?: Criteria<Model>, sort?: Sort<Model>): Promise<Model[]> {\n return this.store.findAll(criteria, sort);\n }\n\n findByKey(key: any, criteria?: Criteria<Model>): Promise<Model | undefined> {\n return this.store.findByKey(key, criteria);\n }\n\n findOne(\n criteria: Criteria<Model>,\n sort?: Sort<Model>,\n ): Promise<Model | undefined> {\n return this.store.findOne(criteria, sort);\n }\n\n async insertOne(object: ModelInsertType): Promise<Model> {\n const inserted = await this.store.insertOne(object);\n this.callSubscribed({ type: 'inserted', next: [inserted] });\n return inserted;\n }\n\n async replaceOne(object: Model): Promise<Model> {\n const replaced = await this.store.replaceOne(object);\n this.callSubscribed({ type: 'updated', changes: [[object, replaced]] });\n return replaced;\n }\n\n async replaceSeveral(objects: Model[]): Promise<Model[]> {\n const replacedObjects = await this.store.replaceSeveral(objects);\n this.callSubscribed({\n type: 'updated',\n changes: objects.map((prev, index) => [prev, replacedObjects[index]]),\n });\n return replacedObjects;\n }\n\n async upsertOne<\n K extends Exclude<keyof Model, KeyPath | OptionalBaseModelKeysForInsert>\n >(\n object: UpsertPartialObject<KeyPath, KeyValue, Model, K>,\n setOnInsertPartialObject?: Pick<Model, K>,\n ): Promise<Model> {\n const result = await this.upsertOneWithInfo(\n object,\n setOnInsertPartialObject,\n );\n return result.object;\n }\n\n async upsertOneWithInfo<\n K extends Exclude<keyof Model, KeyPath | OptionalBaseModelKeysForInsert>\n >(\n object: UpsertPartialObject<KeyPath, KeyValue, Model, K>,\n setOnInsertPartialObject?: Pick<Model, K>,\n ): Promise<UpsertResult<Model>> {\n const upsertedWithInfo = await this.store.upsertOneWithInfo(\n object,\n setOnInsertPartialObject,\n );\n if (upsertedWithInfo.inserted) {\n this.callSubscribed({\n type: 'inserted',\n next: [upsertedWithInfo.object],\n });\n } else {\n throw new Error('TODO');\n }\n return upsertedWithInfo;\n }\n\n async partialUpdateByKey(\n key: any,\n partialUpdate: Update<Model>,\n criteria?: Criteria<Model>,\n ): Promise<Model> {\n return this.partialUpdateOne(\n (await this.findOne({ [this.store.keyPath]: key, ...criteria })) as Model,\n partialUpdate,\n );\n }\n\n async partialUpdateOne(\n object: Model,\n partialUpdate: Update<Model>,\n ): Promise<Model> {\n const updated = await this.store.partialUpdateOne(object, partialUpdate);\n this.callSubscribed({ type: 'updated', changes: [[object, updated]] });\n return updated;\n }\n\n async partialUpdateMany(\n criteria: Criteria<Model>,\n partialUpdate: Update<Model>,\n ): Promise<void> {\n const cursor = await this.store.cursor(criteria);\n const changes: [Model, Model][] = [];\n\n await cursor.forEach(async (model) => {\n const key = model[this.store.keyPath];\n const updated = await this.store.partialUpdateByKey(\n key,\n partialUpdate,\n criteria,\n );\n changes.push([model, updated]);\n });\n this.callSubscribed({ type: 'updated', changes });\n }\n\n async deleteByKey(key: any, criteria?: Criteria<Model>): Promise<void> {\n return this.deleteOne((await this.findByKey(key, criteria)) as Model);\n }\n\n async deleteOne(object: Model): Promise<void> {\n await this.store.deleteOne(object);\n this.callSubscribed({ type: 'deleted', prev: [object] });\n }\n\n async deleteMany(criteria: Criteria<Model>): Promise<void> {\n const cursor = await this.store.cursor(criteria);\n const prev: Model[] = await cursor.toArray();\n await this.store.deleteMany(criteria);\n this.callSubscribed({ type: 'deleted', prev });\n }\n\n async cursor<Result = Model>(\n criteria?: Criteria<Model>,\n sort?: Sort<Model>,\n ): Promise<AbstractStoreCursor<any, KeyValue, Model, Result>> {\n const cursor = await this.store.cursor<Result>(criteria, sort);\n cursor.overrideStore(this);\n return cursor;\n }\n}\n"],"names":["AbstractSubscribableStoreQuery","changeParams","Error","changePartialParams","setSubscribeStore","store","_subscribeStore","getSubscribeStore","fetchAndSubscribe","callback","_subscribe","subscribe","SubscribeStore","listeners","Set","keyPath","add","delete","callSubscribed","action","forEach","listener","createQuerySingleItem","options","transformer","query","createQueryCollection","findAll","criteria","sort","findByKey","key","findOne","insertOne","object","inserted","type","next","replaceOne","replaced","changes","replaceSeveral","objects","replacedObjects","map","prev","index","upsertOne","setOnInsertPartialObject","upsertOneWithInfo","result","upsertedWithInfo","partialUpdateByKey","partialUpdate","partialUpdateOne","updated","partialUpdateMany","cursor","model","push","deleteByKey","deleteOne","deleteMany","toArray","overrideStore","connection"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index-browser.cjs.js","sources":["../src/AbstractSubscribableStoreQuery.ts","../src/SubscribeStore.ts"],"sourcesContent":["import type {\n Query,\n SubscribeCallback,\n QuerySubscription,\n QueryResult,\n QueryParams,\n} from 'liwi-store';\nimport type { BaseModel, InsertType, AllowedKeyValue } from 'liwi-types';\nimport type SubscribeStore from './SubscribeStore';\n\nexport default abstract class AbstractSubscribableStoreQuery<\n KeyPath extends keyof Model,\n KeyValue extends AllowedKeyValue,\n Model extends BaseModel & Record<KeyPath, KeyValue>,\n ModelInsertType extends InsertType<Model, KeyPath>,\n Params extends QueryParams<Params> = never,\n Result = Model\n> implements Query<Result, Params, KeyValue> {\n changeParams(params: Params): never {\n throw new Error('Method not supported. Please create a new query.');\n }\n\n changePartialParams(\n params: Params extends undefined ? never : Partial<Params>,\n ): never {\n throw new Error('Method not supported. Please create a new query.');\n }\n\n private _subscribeStore?: SubscribeStore<\n KeyPath,\n KeyValue,\n Model,\n ModelInsertType,\n any,\n any\n >;\n\n setSubscribeStore(\n store: SubscribeStore<KeyPath, KeyValue, Model, ModelInsertType, any, any>,\n ): void {\n this._subscribeStore = store;\n }\n\n getSubscribeStore(): SubscribeStore<\n KeyPath,\n KeyValue,\n Model,\n ModelInsertType,\n any,\n any\n > {\n if (!this._subscribeStore) {\n throw new Error('_subscribeStore is not initialized');\n }\n return this._subscribeStore;\n }\n\n abstract fetch<T>(\n onFulfilled: (result: QueryResult<Result>) => T,\n ): Promise<T>;\n\n fetchAndSubscribe(\n callback: SubscribeCallback<KeyValue, Result>,\n ): QuerySubscription {\n return this._subscribe(callback, true);\n }\n\n subscribe(callback: SubscribeCallback<KeyValue, Result>): QuerySubscription {\n return this._subscribe(callback, false);\n }\n\n abstract _subscribe(\n callback: SubscribeCallback<KeyValue, Result>,\n _includeInitial: boolean,\n ): QuerySubscription;\n}\n","/* eslint-disable max-lines */\nimport type {\n Store as StoreInterface,\n AbstractConnection,\n UpsertResult,\n SubscribableStoreQuery,\n AbstractStoreCursor,\n SubscribableStore,\n QueryParams,\n UpsertPartialObject,\n} from 'liwi-store';\nimport type {\n BaseModel,\n InsertType,\n Update,\n Criteria,\n Sort,\n QueryOptions,\n Transformer,\n AllowedKeyValue,\n OptionalBaseModelKeysForInsert,\n} from 'liwi-types';\n\nexport type Actions<Model> =\n | { type: 'inserted'; next: Model[] }\n | { type: 'updated'; changes: [Model, Model][] }\n | { type: 'deleted'; prev: Model[] };\n\nexport type Listener<Model> = (action: Actions<Model>) => unknown;\n\nexport default class SubscribeStore<\n KeyPath extends keyof Model,\n KeyValue extends AllowedKeyValue,\n Model extends BaseModel & Record<KeyPath, KeyValue>,\n ModelInsertType extends InsertType<Model, KeyPath>,\n Connection extends AbstractConnection,\n Store extends SubscribableStore<\n KeyPath,\n KeyValue,\n Model,\n ModelInsertType,\n Connection\n >\n> implements\n StoreInterface<KeyPath, KeyValue, Model, ModelInsertType, Connection> {\n private readonly store: Store;\n\n private readonly listeners: Set<Listener<Model>> = new Set();\n\n readonly keyPath: KeyPath;\n\n constructor(store: Store) {\n this.store = store;\n this.keyPath = store.keyPath;\n }\n\n get connection(): Connection {\n return this.store.connection;\n }\n\n subscribe(callback: Listener<Model>): () => void {\n this.listeners.add(callback);\n return () => this.listeners.delete(callback);\n }\n\n callSubscribed(action: Actions<Model>): void {\n this.listeners.forEach((listener) => listener(action));\n }\n\n createQuerySingleItem<\n Result extends Record<KeyPath, KeyValue>,\n Params extends QueryParams<Params>\n >(\n options: QueryOptions<Model>,\n transformer?: Transformer<Model, Result>,\n ): SubscribableStoreQuery<\n KeyPath,\n KeyValue,\n Model,\n SubscribableStore<KeyPath, KeyValue, Model, ModelInsertType, Connection>,\n Result,\n Params\n > {\n const query: SubscribableStoreQuery<\n KeyPath,\n KeyValue,\n Model,\n SubscribableStore<KeyPath, KeyValue, Model, ModelInsertType, Connection>,\n Result,\n Params\n > = this.store.createQuerySingleItem<Result, Params>(options, transformer);\n query.setSubscribeStore(this);\n return query;\n }\n\n createQueryCollection<\n Item extends Record<KeyPath, KeyValue>,\n Params extends QueryParams<Params>\n >(\n options: QueryOptions<Model>,\n transformer?: Transformer<Model, Item>,\n ): SubscribableStoreQuery<\n KeyPath,\n KeyValue,\n Model,\n SubscribableStore<KeyPath, KeyValue, Model, ModelInsertType, Connection>,\n Item[],\n Params\n > {\n const query: SubscribableStoreQuery<\n KeyPath,\n KeyValue,\n Model,\n SubscribableStore<KeyPath, KeyValue, Model, ModelInsertType, Connection>,\n Item[],\n Params\n > = this.store.createQueryCollection<Item, Params>(options, transformer);\n query.setSubscribeStore(this);\n return query;\n }\n\n findAll(criteria?: Criteria<Model>, sort?: Sort<Model>): Promise<Model[]> {\n return this.store.findAll(criteria, sort);\n }\n\n findByKey(key: any, criteria?: Criteria<Model>): Promise<Model | undefined> {\n return this.store.findByKey(key, criteria);\n }\n\n findOne(\n criteria: Criteria<Model>,\n sort?: Sort<Model>,\n ): Promise<Model | undefined> {\n return this.store.findOne(criteria, sort);\n }\n\n async insertOne(object: ModelInsertType): Promise<Model> {\n const inserted = await this.store.insertOne(object);\n this.callSubscribed({ type: 'inserted', next: [inserted] });\n return inserted;\n }\n\n async replaceOne(object: Model): Promise<Model> {\n const replaced = await this.store.replaceOne(object);\n this.callSubscribed({ type: 'updated', changes: [[object, replaced]] });\n return replaced;\n }\n\n async replaceSeveral(objects: Model[]): Promise<Model[]> {\n const replacedObjects = await this.store.replaceSeveral(objects);\n this.callSubscribed({\n type: 'updated',\n changes: objects.map((prev, index) => [prev, replacedObjects[index]]),\n });\n return replacedObjects;\n }\n\n async upsertOne<\n K extends Exclude<keyof Model, KeyPath | OptionalBaseModelKeysForInsert>\n >(\n object: UpsertPartialObject<KeyPath, KeyValue, Model, K>,\n setOnInsertPartialObject?: Pick<Model, K>,\n ): Promise<Model> {\n const result = await this.upsertOneWithInfo(\n object,\n setOnInsertPartialObject,\n );\n return result.object;\n }\n\n async upsertOneWithInfo<\n K extends Exclude<keyof Model, KeyPath | OptionalBaseModelKeysForInsert>\n >(\n object: UpsertPartialObject<KeyPath, KeyValue, Model, K>,\n setOnInsertPartialObject?: Pick<Model, K>,\n ): Promise<UpsertResult<Model>> {\n const upsertedWithInfo = await this.store.upsertOneWithInfo(\n object,\n setOnInsertPartialObject,\n );\n if (upsertedWithInfo.inserted) {\n this.callSubscribed({\n type: 'inserted',\n next: [upsertedWithInfo.object],\n });\n } else {\n throw new Error('TODO');\n }\n return upsertedWithInfo;\n }\n\n async partialUpdateByKey(\n key: any,\n partialUpdate: Update<Model>,\n criteria?: Criteria<Model>,\n ): Promise<Model> {\n return this.partialUpdateOne(\n (await this.findOne({ [this.store.keyPath]: key, ...criteria }))!,\n partialUpdate,\n );\n }\n\n async partialUpdateOne(\n object: Model,\n partialUpdate: Update<Model>,\n ): Promise<Model> {\n const updated = await this.store.partialUpdateOne(object, partialUpdate);\n this.callSubscribed({ type: 'updated', changes: [[object, updated]] });\n return updated;\n }\n\n async partialUpdateMany(\n criteria: Criteria<Model>,\n partialUpdate: Update<Model>,\n ): Promise<void> {\n const cursor = await this.store.cursor(criteria);\n const changes: [Model, Model][] = [];\n\n await cursor.forEach(async (model) => {\n const key = model[this.store.keyPath];\n const updated = await this.store.partialUpdateByKey(\n key,\n partialUpdate,\n criteria,\n );\n changes.push([model, updated]);\n });\n this.callSubscribed({ type: 'updated', changes });\n }\n\n async deleteByKey(key: any, criteria?: Criteria<Model>): Promise<void> {\n return this.deleteOne((await this.findByKey(key, criteria))!);\n }\n\n async deleteOne(object: Model): Promise<void> {\n await this.store.deleteOne(object);\n this.callSubscribed({ type: 'deleted', prev: [object] });\n }\n\n async deleteMany(criteria: Criteria<Model>): Promise<void> {\n const cursor = await this.store.cursor(criteria);\n const prev: Model[] = await cursor.toArray();\n await this.store.deleteMany(criteria);\n this.callSubscribed({ type: 'deleted', prev });\n }\n\n async cursor<Result = Model>(\n criteria?: Criteria<Model>,\n sort?: Sort<Model>,\n ): Promise<AbstractStoreCursor<any, KeyValue, Model, Result>> {\n const cursor = await this.store.cursor<Result>(criteria, sort);\n cursor.overrideStore(this);\n return cursor;\n }\n}\n"],"names":["AbstractSubscribableStoreQuery","changeParams","Error","changePartialParams","setSubscribeStore","store","_subscribeStore","getSubscribeStore","fetchAndSubscribe","callback","_subscribe","subscribe","SubscribeStore","listeners","Set","keyPath","add","delete","callSubscribed","action","forEach","listener","createQuerySingleItem","options","transformer","query","createQueryCollection","findAll","criteria","sort","findByKey","key","findOne","insertOne","object","inserted","type","next","replaceOne","replaced","changes","replaceSeveral","objects","replacedObjects","map","prev","index","upsertOne","setOnInsertPartialObject","upsertOneWithInfo","result","upsertedWithInfo","partialUpdateByKey","partialUpdate","partialUpdateOne","updated","partialUpdateMany","cursor","model","push","deleteByKey","deleteOne","deleteMany","toArray","overrideStore","connection"],"mappings":"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"}
|
package/dist/index-browser.es.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import _extends from '@babel/runtime/helpers/esm/extends';
|
|
2
|
-
import _regeneratorRuntime from '@babel/runtime/regenerator';
|
|
3
2
|
import _asyncToGenerator from '@babel/runtime/helpers/esm/asyncToGenerator';
|
|
4
3
|
import _createClass from '@babel/runtime/helpers/esm/createClass';
|
|
4
|
+
import _regeneratorRuntime from '@babel/runtime/regenerator';
|
|
5
5
|
|
|
6
6
|
var AbstractSubscribableStoreQuery = /*#__PURE__*/function () {
|
|
7
7
|
function AbstractSubscribableStoreQuery() {}
|
|
@@ -362,7 +362,7 @@ var SubscribeStore = /*#__PURE__*/function () {
|
|
|
362
362
|
case 6:
|
|
363
363
|
this.callSubscribed({
|
|
364
364
|
type: 'updated',
|
|
365
|
-
changes
|
|
365
|
+
changes: changes
|
|
366
366
|
});
|
|
367
367
|
|
|
368
368
|
case 7:
|
|
@@ -456,7 +456,7 @@ var SubscribeStore = /*#__PURE__*/function () {
|
|
|
456
456
|
case 8:
|
|
457
457
|
this.callSubscribed({
|
|
458
458
|
type: 'deleted',
|
|
459
|
-
prev
|
|
459
|
+
prev: prev
|
|
460
460
|
});
|
|
461
461
|
|
|
462
462
|
case 9:
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index-browser.es.js","sources":["../src/AbstractSubscribableStoreQuery.ts","../src/SubscribeStore.ts"],"sourcesContent":["import type {\n Query,\n SubscribeCallback,\n QuerySubscription,\n QueryResult,\n QueryParams,\n} from 'liwi-store';\nimport type { BaseModel, InsertType, AllowedKeyValue } from 'liwi-types';\nimport type SubscribeStore from './SubscribeStore';\n\nexport default abstract class AbstractSubscribableStoreQuery<\n KeyPath extends keyof Model,\n KeyValue extends AllowedKeyValue,\n Model extends BaseModel & Record<KeyPath, KeyValue>,\n ModelInsertType extends InsertType<Model, KeyPath>,\n Params extends QueryParams<Params> = never,\n Result = Model\n> implements Query<Result, Params, KeyValue> {\n changeParams(params: Params): never {\n throw new Error('Method not supported. Please create a new query.');\n }\n\n changePartialParams(\n params: Params extends undefined ? never : Partial<Params>,\n ): never {\n throw new Error('Method not supported. Please create a new query.');\n }\n\n private _subscribeStore?: SubscribeStore<\n KeyPath,\n KeyValue,\n Model,\n ModelInsertType,\n any,\n any\n >;\n\n setSubscribeStore(\n store: SubscribeStore<KeyPath, KeyValue, Model, ModelInsertType, any, any>,\n ): void {\n this._subscribeStore = store;\n }\n\n getSubscribeStore(): SubscribeStore<\n KeyPath,\n KeyValue,\n Model,\n ModelInsertType,\n any,\n any\n > {\n if (!this._subscribeStore) {\n throw new Error('_subscribeStore is not initialized');\n }\n return this._subscribeStore;\n }\n\n abstract fetch<T>(\n onFulfilled: (result: QueryResult<Result>) => T,\n ): Promise<T>;\n\n fetchAndSubscribe(\n callback: SubscribeCallback<KeyValue, Result>,\n ): QuerySubscription {\n return this._subscribe(callback, true);\n }\n\n subscribe(callback: SubscribeCallback<KeyValue, Result>): QuerySubscription {\n return this._subscribe(callback, false);\n }\n\n abstract _subscribe(\n callback: SubscribeCallback<KeyValue, Result>,\n _includeInitial: boolean,\n ): QuerySubscription;\n}\n","/* eslint-disable max-lines */\nimport type {\n Store as StoreInterface,\n AbstractConnection,\n UpsertResult,\n SubscribableStoreQuery,\n AbstractStoreCursor,\n SubscribableStore,\n QueryParams,\n UpsertPartialObject,\n} from 'liwi-store';\nimport type {\n BaseModel,\n InsertType,\n Update,\n Criteria,\n Sort,\n QueryOptions,\n Transformer,\n AllowedKeyValue,\n OptionalBaseModelKeysForInsert,\n} from 'liwi-types';\n\nexport type Actions<Model> =\n | { type: 'inserted'; next: Model[] }\n | { type: 'updated'; changes: [Model, Model][] }\n | { type: 'deleted'; prev: Model[] };\n\nexport type Listener<Model> = (action: Actions<Model>) => unknown;\n\nexport default class SubscribeStore<\n KeyPath extends keyof Model,\n KeyValue extends AllowedKeyValue,\n Model extends BaseModel & Record<KeyPath, KeyValue>,\n ModelInsertType extends InsertType<Model, KeyPath>,\n Connection extends AbstractConnection,\n Store extends SubscribableStore<\n KeyPath,\n KeyValue,\n Model,\n ModelInsertType,\n Connection\n >\n> implements\n StoreInterface<KeyPath, KeyValue, Model, ModelInsertType, Connection> {\n private readonly store: Store;\n\n private readonly listeners: Set<Listener<Model>> = new Set();\n\n readonly keyPath: KeyPath;\n\n constructor(store: Store) {\n this.store = store;\n this.keyPath = store.keyPath;\n }\n\n get connection(): Connection {\n return this.store.connection;\n }\n\n subscribe(callback: Listener<Model>): () => void {\n this.listeners.add(callback);\n return () => this.listeners.delete(callback);\n }\n\n callSubscribed(action: Actions<Model>): void {\n this.listeners.forEach((listener) => listener(action));\n }\n\n createQuerySingleItem<\n Result extends Record<KeyPath, KeyValue>,\n Params extends QueryParams<Params>\n >(\n options: QueryOptions<Model>,\n transformer?: Transformer<Model, Result>,\n ): SubscribableStoreQuery<\n KeyPath,\n KeyValue,\n Model,\n SubscribableStore<KeyPath, KeyValue, Model, ModelInsertType, Connection>,\n Result,\n Params\n > {\n const query: SubscribableStoreQuery<\n KeyPath,\n KeyValue,\n Model,\n SubscribableStore<KeyPath, KeyValue, Model, ModelInsertType, Connection>,\n Result,\n Params\n > = this.store.createQuerySingleItem<Result, Params>(options, transformer);\n query.setSubscribeStore(this);\n return query;\n }\n\n createQueryCollection<\n Item extends Record<KeyPath, KeyValue>,\n Params extends QueryParams<Params>\n >(\n options: QueryOptions<Model>,\n transformer?: Transformer<Model, Item>,\n ): SubscribableStoreQuery<\n KeyPath,\n KeyValue,\n Model,\n SubscribableStore<KeyPath, KeyValue, Model, ModelInsertType, Connection>,\n Item[],\n Params\n > {\n const query: SubscribableStoreQuery<\n KeyPath,\n KeyValue,\n Model,\n SubscribableStore<KeyPath, KeyValue, Model, ModelInsertType, Connection>,\n Item[],\n Params\n > = this.store.createQueryCollection<Item, Params>(options, transformer);\n query.setSubscribeStore(this);\n return query;\n }\n\n findAll(criteria?: Criteria<Model>, sort?: Sort<Model>): Promise<Model[]> {\n return this.store.findAll(criteria, sort);\n }\n\n findByKey(key: any, criteria?: Criteria<Model>): Promise<Model | undefined> {\n return this.store.findByKey(key, criteria);\n }\n\n findOne(\n criteria: Criteria<Model>,\n sort?: Sort<Model>,\n ): Promise<Model | undefined> {\n return this.store.findOne(criteria, sort);\n }\n\n async insertOne(object: ModelInsertType): Promise<Model> {\n const inserted = await this.store.insertOne(object);\n this.callSubscribed({ type: 'inserted', next: [inserted] });\n return inserted;\n }\n\n async replaceOne(object: Model): Promise<Model> {\n const replaced = await this.store.replaceOne(object);\n this.callSubscribed({ type: 'updated', changes: [[object, replaced]] });\n return replaced;\n }\n\n async replaceSeveral(objects: Model[]): Promise<Model[]> {\n const replacedObjects = await this.store.replaceSeveral(objects);\n this.callSubscribed({\n type: 'updated',\n changes: objects.map((prev, index) => [prev, replacedObjects[index]]),\n });\n return replacedObjects;\n }\n\n async upsertOne<\n K extends Exclude<keyof Model, KeyPath | OptionalBaseModelKeysForInsert>\n >(\n object: UpsertPartialObject<KeyPath, KeyValue, Model, K>,\n setOnInsertPartialObject?: Pick<Model, K>,\n ): Promise<Model> {\n const result = await this.upsertOneWithInfo(\n object,\n setOnInsertPartialObject,\n );\n return result.object;\n }\n\n async upsertOneWithInfo<\n K extends Exclude<keyof Model, KeyPath | OptionalBaseModelKeysForInsert>\n >(\n object: UpsertPartialObject<KeyPath, KeyValue, Model, K>,\n setOnInsertPartialObject?: Pick<Model, K>,\n ): Promise<UpsertResult<Model>> {\n const upsertedWithInfo = await this.store.upsertOneWithInfo(\n object,\n setOnInsertPartialObject,\n );\n if (upsertedWithInfo.inserted) {\n this.callSubscribed({\n type: 'inserted',\n next: [upsertedWithInfo.object],\n });\n } else {\n throw new Error('TODO');\n }\n return upsertedWithInfo;\n }\n\n async partialUpdateByKey(\n key: any,\n partialUpdate: Update<Model>,\n criteria?: Criteria<Model>,\n ): Promise<Model> {\n return this.partialUpdateOne(\n (await this.findOne({ [this.store.keyPath]: key, ...criteria })) as Model,\n partialUpdate,\n );\n }\n\n async partialUpdateOne(\n object: Model,\n partialUpdate: Update<Model>,\n ): Promise<Model> {\n const updated = await this.store.partialUpdateOne(object, partialUpdate);\n this.callSubscribed({ type: 'updated', changes: [[object, updated]] });\n return updated;\n }\n\n async partialUpdateMany(\n criteria: Criteria<Model>,\n partialUpdate: Update<Model>,\n ): Promise<void> {\n const cursor = await this.store.cursor(criteria);\n const changes: [Model, Model][] = [];\n\n await cursor.forEach(async (model) => {\n const key = model[this.store.keyPath];\n const updated = await this.store.partialUpdateByKey(\n key,\n partialUpdate,\n criteria,\n );\n changes.push([model, updated]);\n });\n this.callSubscribed({ type: 'updated', changes });\n }\n\n async deleteByKey(key: any, criteria?: Criteria<Model>): Promise<void> {\n return this.deleteOne((await this.findByKey(key, criteria)) as Model);\n }\n\n async deleteOne(object: Model): Promise<void> {\n await this.store.deleteOne(object);\n this.callSubscribed({ type: 'deleted', prev: [object] });\n }\n\n async deleteMany(criteria: Criteria<Model>): Promise<void> {\n const cursor = await this.store.cursor(criteria);\n const prev: Model[] = await cursor.toArray();\n await this.store.deleteMany(criteria);\n this.callSubscribed({ type: 'deleted', prev });\n }\n\n async cursor<Result = Model>(\n criteria?: Criteria<Model>,\n sort?: Sort<Model>,\n ): Promise<AbstractStoreCursor<any, KeyValue, Model, Result>> {\n const cursor = await this.store.cursor<Result>(criteria, sort);\n cursor.overrideStore(this);\n return cursor;\n }\n}\n"],"names":["AbstractSubscribableStoreQuery","changeParams","Error","changePartialParams","setSubscribeStore","store","_subscribeStore","getSubscribeStore","fetchAndSubscribe","callback","_subscribe","subscribe","SubscribeStore","listeners","Set","keyPath","add","delete","callSubscribed","action","forEach","listener","createQuerySingleItem","options","transformer","query","createQueryCollection","findAll","criteria","sort","findByKey","key","findOne","insertOne","object","inserted","type","next","replaceOne","replaced","changes","replaceSeveral","objects","replacedObjects","map","prev","index","upsertOne","setOnInsertPartialObject","upsertOneWithInfo","result","upsertedWithInfo","partialUpdateByKey","partialUpdate","partialUpdateOne","updated","partialUpdateMany","cursor","model","push","deleteByKey","deleteOne","deleteMany","toArray","overrideStore","connection"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index-browser.es.js","sources":["../src/AbstractSubscribableStoreQuery.ts","../src/SubscribeStore.ts"],"sourcesContent":["import type {\n Query,\n SubscribeCallback,\n QuerySubscription,\n QueryResult,\n QueryParams,\n} from 'liwi-store';\nimport type { BaseModel, InsertType, AllowedKeyValue } from 'liwi-types';\nimport type SubscribeStore from './SubscribeStore';\n\nexport default abstract class AbstractSubscribableStoreQuery<\n KeyPath extends keyof Model,\n KeyValue extends AllowedKeyValue,\n Model extends BaseModel & Record<KeyPath, KeyValue>,\n ModelInsertType extends InsertType<Model, KeyPath>,\n Params extends QueryParams<Params> = never,\n Result = Model\n> implements Query<Result, Params, KeyValue> {\n changeParams(params: Params): never {\n throw new Error('Method not supported. Please create a new query.');\n }\n\n changePartialParams(\n params: Params extends undefined ? never : Partial<Params>,\n ): never {\n throw new Error('Method not supported. Please create a new query.');\n }\n\n private _subscribeStore?: SubscribeStore<\n KeyPath,\n KeyValue,\n Model,\n ModelInsertType,\n any,\n any\n >;\n\n setSubscribeStore(\n store: SubscribeStore<KeyPath, KeyValue, Model, ModelInsertType, any, any>,\n ): void {\n this._subscribeStore = store;\n }\n\n getSubscribeStore(): SubscribeStore<\n KeyPath,\n KeyValue,\n Model,\n ModelInsertType,\n any,\n any\n > {\n if (!this._subscribeStore) {\n throw new Error('_subscribeStore is not initialized');\n }\n return this._subscribeStore;\n }\n\n abstract fetch<T>(\n onFulfilled: (result: QueryResult<Result>) => T,\n ): Promise<T>;\n\n fetchAndSubscribe(\n callback: SubscribeCallback<KeyValue, Result>,\n ): QuerySubscription {\n return this._subscribe(callback, true);\n }\n\n subscribe(callback: SubscribeCallback<KeyValue, Result>): QuerySubscription {\n return this._subscribe(callback, false);\n }\n\n abstract _subscribe(\n callback: SubscribeCallback<KeyValue, Result>,\n _includeInitial: boolean,\n ): QuerySubscription;\n}\n","/* eslint-disable max-lines */\nimport type {\n Store as StoreInterface,\n AbstractConnection,\n UpsertResult,\n SubscribableStoreQuery,\n AbstractStoreCursor,\n SubscribableStore,\n QueryParams,\n UpsertPartialObject,\n} from 'liwi-store';\nimport type {\n BaseModel,\n InsertType,\n Update,\n Criteria,\n Sort,\n QueryOptions,\n Transformer,\n AllowedKeyValue,\n OptionalBaseModelKeysForInsert,\n} from 'liwi-types';\n\nexport type Actions<Model> =\n | { type: 'inserted'; next: Model[] }\n | { type: 'updated'; changes: [Model, Model][] }\n | { type: 'deleted'; prev: Model[] };\n\nexport type Listener<Model> = (action: Actions<Model>) => unknown;\n\nexport default class SubscribeStore<\n KeyPath extends keyof Model,\n KeyValue extends AllowedKeyValue,\n Model extends BaseModel & Record<KeyPath, KeyValue>,\n ModelInsertType extends InsertType<Model, KeyPath>,\n Connection extends AbstractConnection,\n Store extends SubscribableStore<\n KeyPath,\n KeyValue,\n Model,\n ModelInsertType,\n Connection\n >\n> implements\n StoreInterface<KeyPath, KeyValue, Model, ModelInsertType, Connection> {\n private readonly store: Store;\n\n private readonly listeners: Set<Listener<Model>> = new Set();\n\n readonly keyPath: KeyPath;\n\n constructor(store: Store) {\n this.store = store;\n this.keyPath = store.keyPath;\n }\n\n get connection(): Connection {\n return this.store.connection;\n }\n\n subscribe(callback: Listener<Model>): () => void {\n this.listeners.add(callback);\n return () => this.listeners.delete(callback);\n }\n\n callSubscribed(action: Actions<Model>): void {\n this.listeners.forEach((listener) => listener(action));\n }\n\n createQuerySingleItem<\n Result extends Record<KeyPath, KeyValue>,\n Params extends QueryParams<Params>\n >(\n options: QueryOptions<Model>,\n transformer?: Transformer<Model, Result>,\n ): SubscribableStoreQuery<\n KeyPath,\n KeyValue,\n Model,\n SubscribableStore<KeyPath, KeyValue, Model, ModelInsertType, Connection>,\n Result,\n Params\n > {\n const query: SubscribableStoreQuery<\n KeyPath,\n KeyValue,\n Model,\n SubscribableStore<KeyPath, KeyValue, Model, ModelInsertType, Connection>,\n Result,\n Params\n > = this.store.createQuerySingleItem<Result, Params>(options, transformer);\n query.setSubscribeStore(this);\n return query;\n }\n\n createQueryCollection<\n Item extends Record<KeyPath, KeyValue>,\n Params extends QueryParams<Params>\n >(\n options: QueryOptions<Model>,\n transformer?: Transformer<Model, Item>,\n ): SubscribableStoreQuery<\n KeyPath,\n KeyValue,\n Model,\n SubscribableStore<KeyPath, KeyValue, Model, ModelInsertType, Connection>,\n Item[],\n Params\n > {\n const query: SubscribableStoreQuery<\n KeyPath,\n KeyValue,\n Model,\n SubscribableStore<KeyPath, KeyValue, Model, ModelInsertType, Connection>,\n Item[],\n Params\n > = this.store.createQueryCollection<Item, Params>(options, transformer);\n query.setSubscribeStore(this);\n return query;\n }\n\n findAll(criteria?: Criteria<Model>, sort?: Sort<Model>): Promise<Model[]> {\n return this.store.findAll(criteria, sort);\n }\n\n findByKey(key: any, criteria?: Criteria<Model>): Promise<Model | undefined> {\n return this.store.findByKey(key, criteria);\n }\n\n findOne(\n criteria: Criteria<Model>,\n sort?: Sort<Model>,\n ): Promise<Model | undefined> {\n return this.store.findOne(criteria, sort);\n }\n\n async insertOne(object: ModelInsertType): Promise<Model> {\n const inserted = await this.store.insertOne(object);\n this.callSubscribed({ type: 'inserted', next: [inserted] });\n return inserted;\n }\n\n async replaceOne(object: Model): Promise<Model> {\n const replaced = await this.store.replaceOne(object);\n this.callSubscribed({ type: 'updated', changes: [[object, replaced]] });\n return replaced;\n }\n\n async replaceSeveral(objects: Model[]): Promise<Model[]> {\n const replacedObjects = await this.store.replaceSeveral(objects);\n this.callSubscribed({\n type: 'updated',\n changes: objects.map((prev, index) => [prev, replacedObjects[index]]),\n });\n return replacedObjects;\n }\n\n async upsertOne<\n K extends Exclude<keyof Model, KeyPath | OptionalBaseModelKeysForInsert>\n >(\n object: UpsertPartialObject<KeyPath, KeyValue, Model, K>,\n setOnInsertPartialObject?: Pick<Model, K>,\n ): Promise<Model> {\n const result = await this.upsertOneWithInfo(\n object,\n setOnInsertPartialObject,\n );\n return result.object;\n }\n\n async upsertOneWithInfo<\n K extends Exclude<keyof Model, KeyPath | OptionalBaseModelKeysForInsert>\n >(\n object: UpsertPartialObject<KeyPath, KeyValue, Model, K>,\n setOnInsertPartialObject?: Pick<Model, K>,\n ): Promise<UpsertResult<Model>> {\n const upsertedWithInfo = await this.store.upsertOneWithInfo(\n object,\n setOnInsertPartialObject,\n );\n if (upsertedWithInfo.inserted) {\n this.callSubscribed({\n type: 'inserted',\n next: [upsertedWithInfo.object],\n });\n } else {\n throw new Error('TODO');\n }\n return upsertedWithInfo;\n }\n\n async partialUpdateByKey(\n key: any,\n partialUpdate: Update<Model>,\n criteria?: Criteria<Model>,\n ): Promise<Model> {\n return this.partialUpdateOne(\n (await this.findOne({ [this.store.keyPath]: key, ...criteria }))!,\n partialUpdate,\n );\n }\n\n async partialUpdateOne(\n object: Model,\n partialUpdate: Update<Model>,\n ): Promise<Model> {\n const updated = await this.store.partialUpdateOne(object, partialUpdate);\n this.callSubscribed({ type: 'updated', changes: [[object, updated]] });\n return updated;\n }\n\n async partialUpdateMany(\n criteria: Criteria<Model>,\n partialUpdate: Update<Model>,\n ): Promise<void> {\n const cursor = await this.store.cursor(criteria);\n const changes: [Model, Model][] = [];\n\n await cursor.forEach(async (model) => {\n const key = model[this.store.keyPath];\n const updated = await this.store.partialUpdateByKey(\n key,\n partialUpdate,\n criteria,\n );\n changes.push([model, updated]);\n });\n this.callSubscribed({ type: 'updated', changes });\n }\n\n async deleteByKey(key: any, criteria?: Criteria<Model>): Promise<void> {\n return this.deleteOne((await this.findByKey(key, criteria))!);\n }\n\n async deleteOne(object: Model): Promise<void> {\n await this.store.deleteOne(object);\n this.callSubscribed({ type: 'deleted', prev: [object] });\n }\n\n async deleteMany(criteria: Criteria<Model>): Promise<void> {\n const cursor = await this.store.cursor(criteria);\n const prev: Model[] = await cursor.toArray();\n await this.store.deleteMany(criteria);\n this.callSubscribed({ type: 'deleted', prev });\n }\n\n async cursor<Result = Model>(\n criteria?: Criteria<Model>,\n sort?: Sort<Model>,\n ): Promise<AbstractStoreCursor<any, KeyValue, Model, Result>> {\n const cursor = await this.store.cursor<Result>(criteria, sort);\n cursor.overrideStore(this);\n return cursor;\n }\n}\n"],"names":["AbstractSubscribableStoreQuery","changeParams","Error","changePartialParams","setSubscribeStore","store","_subscribeStore","getSubscribeStore","fetchAndSubscribe","callback","_subscribe","subscribe","SubscribeStore","listeners","Set","keyPath","add","delete","callSubscribed","action","forEach","listener","createQuerySingleItem","options","transformer","query","createQueryCollection","findAll","criteria","sort","findByKey","key","findOne","insertOne","object","inserted","type","next","replaceOne","replaced","changes","replaceSeveral","objects","replacedObjects","map","prev","index","upsertOne","setOnInsertPartialObject","upsertOneWithInfo","result","upsertedWithInfo","partialUpdateByKey","partialUpdate","partialUpdateOne","updated","partialUpdateMany","cursor","model","push","deleteByKey","deleteOne","deleteMany","toArray","overrideStore","connection"],"mappings":";;;;;IAU8BA;;;;;SAQ5BC,eAAA,wBAAoC;AAClC,UAAM,IAAIC,KAAJ,CAAU,kDAAV,CAAN;AACD;;SAEDC,sBAAA,+BAES;AACP,UAAM,IAAID,KAAJ,CAAU,kDAAV,CAAN;AACD;;SAWDE,oBAAA,2BACEC,KADF,EAEQ;AACN,SAAKC,eAAL,GAAuBD,KAAvB;AACD;;SAEDE,oBAAA,6BAOE;AACA,QAAI,CAAC,KAAKD,eAAV,EAA2B;AACzB,YAAM,IAAIJ,KAAJ,CAAU,oCAAV,CAAN;AACD;;AACD,WAAO,KAAKI,eAAZ;AACD;;SAMDE,oBAAA,2BACEC,QADF,EAEqB;AACnB,WAAO,KAAKC,UAAL,CAAgBD,QAAhB,EAA0B,IAA1B,CAAP;AACD;;SAEDE,YAAA,mBAAUF,QAAV,EAA4E;AAC1E,WAAO,KAAKC,UAAL,CAAgBD,QAAhB,EAA0B,KAA1B,CAAP;AACD;;;;;ACrEH;IA8BqBG;AAqBnB,0BAAYP,KAAZ,EAA0B;AAAA,SAJTQ,SAIS,GAJyB,IAAIC,GAAJ,EAIzB;AACxB,SAAKT,KAAL,GAAaA,KAAb;AACA,SAAKU,OAAL,GAAeV,KAAK,CAACU,OAArB;AACD;;;;SAMDJ,YAAA,mBAAUF,QAAV,EAAiD;AAAA;;AAC/C,SAAKI,SAAL,CAAeG,GAAf,CAAmBP,QAAnB;AACA,WAAO;AAAA,aAAM,KAAI,CAACI,SAAL,CAAeI,MAAf,CAAsBR,QAAtB,CAAN;AAAA,KAAP;AACD;;SAEDS,iBAAA,wBAAeC,MAAf,EAA6C;AAC3C,SAAKN,SAAL,CAAeO,OAAf,CAAuB,UAACC,QAAD;AAAA,aAAcA,QAAQ,CAACF,MAAD,CAAtB;AAAA,KAAvB;AACD;;SAEDG,wBAAA,+BAIEC,OAJF,EAKEC,WALF,EAaE;AACA,QAAMC,KAOL,GAAG,KAAKpB,KAAL,CAAWiB,qBAAX,CAAiDC,OAAjD,EAA0DC,WAA1D,CAPJ;AAQAC,IAAAA,KAAK,CAACrB,iBAAN,CAAwB,IAAxB;AACA,WAAOqB,KAAP;AACD;;SAEDC,wBAAA,+BAIEH,OAJF,EAKEC,WALF,EAaE;AACA,QAAMC,KAOL,GAAG,KAAKpB,KAAL,CAAWqB,qBAAX,CAA+CH,OAA/C,EAAwDC,WAAxD,CAPJ;AAQAC,IAAAA,KAAK,CAACrB,iBAAN,CAAwB,IAAxB;AACA,WAAOqB,KAAP;AACD;;SAEDE,UAAA,iBAAQC,QAAR,EAAoCC,IAApC,EAA0E;AACxE,WAAO,KAAKxB,KAAL,CAAWsB,OAAX,CAAmBC,QAAnB,EAA6BC,IAA7B,CAAP;AACD;;SAEDC,YAAA,mBAAUC,GAAV,EAAoBH,QAApB,EAA4E;AAC1E,WAAO,KAAKvB,KAAL,CAAWyB,SAAX,CAAqBC,GAArB,EAA0BH,QAA1B,CAAP;AACD;;SAEDI,UAAA,iBACEJ,QADF,EAEEC,IAFF,EAG8B;AAC5B,WAAO,KAAKxB,KAAL,CAAW2B,OAAX,CAAmBJ,QAAnB,EAA6BC,IAA7B,CAAP;AACD;;SAEKI;8EAAN,iBAAgBC,MAAhB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBACyB,KAAK7B,KAAL,CAAW4B,SAAX,CAAqBC,MAArB,CADzB;;AAAA;AACQC,cAAAA,QADR;AAEE,mBAAKjB,cAAL,CAAoB;AAAEkB,gBAAAA,IAAI,EAAE,UAAR;AAAoBC,gBAAAA,IAAI,EAAE,CAACF,QAAD;AAA1B,eAApB;AAFF,+CAGSA,QAHT;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;;;;SAMMG;+EAAN,kBAAiBJ,MAAjB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBACyB,KAAK7B,KAAL,CAAWiC,UAAX,CAAsBJ,MAAtB,CADzB;;AAAA;AACQK,cAAAA,QADR;AAEE,mBAAKrB,cAAL,CAAoB;AAAEkB,gBAAAA,IAAI,EAAE,SAAR;AAAmBI,gBAAAA,OAAO,EAAE,CAAC,CAACN,MAAD,EAASK,QAAT,CAAD;AAA5B,eAApB;AAFF,gDAGSA,QAHT;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;;;;SAMME;mFAAN,kBAAqBC,OAArB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBACgC,KAAKrC,KAAL,CAAWoC,cAAX,CAA0BC,OAA1B,CADhC;;AAAA;AACQC,cAAAA,eADR;AAEE,mBAAKzB,cAAL,CAAoB;AAClBkB,gBAAAA,IAAI,EAAE,SADY;AAElBI,gBAAAA,OAAO,EAAEE,OAAO,CAACE,GAAR,CAAY,UAACC,IAAD,EAAOC,KAAP;AAAA,yBAAiB,CAACD,IAAD,EAAOF,eAAe,CAACG,KAAD,CAAtB,CAAjB;AAAA,iBAAZ;AAFS,eAApB;AAFF,gDAMSH,eANT;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;;;;SASMI;8EAAN,kBAGEb,MAHF,EAIEc,wBAJF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAMuB,KAAKC,iBAAL,CACnBf,MADmB,EAEnBc,wBAFmB,CANvB;;AAAA;AAMQE,cAAAA,MANR;AAAA,gDAUSA,MAAM,CAAChB,MAVhB;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;;;;SAaMe;sFAAN,kBAGEf,MAHF,EAIEc,wBAJF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAMiC,KAAK3C,KAAL,CAAW4C,iBAAX,CAC7Bf,MAD6B,EAE7Bc,wBAF6B,CANjC;;AAAA;AAMQG,cAAAA,gBANR;;AAAA,mBAUMA,gBAAgB,CAAChB,QAVvB;AAAA;AAAA;AAAA;;AAWI,mBAAKjB,cAAL,CAAoB;AAClBkB,gBAAAA,IAAI,EAAE,UADY;AAElBC,gBAAAA,IAAI,EAAE,CAACc,gBAAgB,CAACjB,MAAlB;AAFY,eAApB;AAXJ;AAAA;;AAAA;AAAA,oBAgBU,IAAIhC,KAAJ,CAAU,MAAV,CAhBV;;AAAA;AAAA,gDAkBSiD,gBAlBT;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;;;;SAqBMC;uFAAN,kBACErB,GADF,EAEEsB,aAFF,EAGEzB,QAHF;AAAA;AAAA;AAAA;AAAA;AAAA,6BAKS,IALT;AAAA;AAAA,qBAMW,KAAKI,OAAL;AAAe,iBAAC,KAAK3B,KAAL,CAAWU,OAAZ,GAAsBgB;AAArC,iBAA6CH,QAA7C,EANX;;AAAA;AAAA;AAAA,6BAOIyB,aAPJ;AAAA,6DAKcC,gBALd;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;;;;SAWMA;qFAAN,kBACEpB,MADF,EAEEmB,aAFF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAIwB,KAAKhD,KAAL,CAAWiD,gBAAX,CAA4BpB,MAA5B,EAAoCmB,aAApC,CAJxB;;AAAA;AAIQE,cAAAA,OAJR;AAKE,mBAAKrC,cAAL,CAAoB;AAAEkB,gBAAAA,IAAI,EAAE,SAAR;AAAmBI,gBAAAA,OAAO,EAAE,CAAC,CAACN,MAAD,EAASqB,OAAT,CAAD;AAA5B,eAApB;AALF,gDAMSA,OANT;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;;;;SASMC;sFAAN,kBACE5B,QADF,EAEEyB,aAFF;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAIuB,KAAKhD,KAAL,CAAWoD,MAAX,CAAkB7B,QAAlB,CAJvB;;AAAA;AAIQ6B,cAAAA,MAJR;AAKQjB,cAAAA,OALR,GAKoC,EALpC;AAAA;AAAA,qBAOQiB,MAAM,CAACrC,OAAP;AAAA,oFAAe,kBAAOsC,KAAP;AAAA;AAAA;AAAA;AAAA;AAAA;AACb3B,0BAAAA,GADa,GACP2B,KAAK,CAAC,MAAI,CAACrD,KAAL,CAAWU,OAAZ,CADE;AAAA;AAAA,iCAEG,MAAI,CAACV,KAAL,CAAW+C,kBAAX,CACpBrB,GADoB,EAEpBsB,aAFoB,EAGpBzB,QAHoB,CAFH;;AAAA;AAEb2B,0BAAAA,OAFa;AAOnBf,0BAAAA,OAAO,CAACmB,IAAR,CAAa,CAACD,KAAD,EAAQH,OAAR,CAAb;;AAPmB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iBAAf;;AAAA;AAAA;AAAA;AAAA,kBAPR;;AAAA;AAgBE,mBAAKrC,cAAL,CAAoB;AAAEkB,gBAAAA,IAAI,EAAE,SAAR;AAAmBI,gBAAAA,OAAO,EAAPA;AAAnB,eAApB;;AAhBF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;;;;SAmBMoB;gFAAN,mBAAkB7B,GAAlB,EAA4BH,QAA5B;AAAA;AAAA;AAAA;AAAA;AAAA,8BACS,IADT;AAAA;AAAA,qBAC+B,KAAKE,SAAL,CAAeC,GAAf,EAAoBH,QAApB,CAD/B;;AAAA;AAAA;AAAA,+DACciC,SADd;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;;;;SAIMA;8EAAN,mBAAgB3B,MAAhB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBACQ,KAAK7B,KAAL,CAAWwD,SAAX,CAAqB3B,MAArB,CADR;;AAAA;AAEE,mBAAKhB,cAAL,CAAoB;AAAEkB,gBAAAA,IAAI,EAAE,SAAR;AAAmBS,gBAAAA,IAAI,EAAE,CAACX,MAAD;AAAzB,eAApB;;AAFF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;;;;SAKM4B;+EAAN,mBAAiBlC,QAAjB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBACuB,KAAKvB,KAAL,CAAWoD,MAAX,CAAkB7B,QAAlB,CADvB;;AAAA;AACQ6B,cAAAA,MADR;AAAA;AAAA,qBAE8BA,MAAM,CAACM,OAAP,EAF9B;;AAAA;AAEQlB,cAAAA,IAFR;AAAA;AAAA,qBAGQ,KAAKxC,KAAL,CAAWyD,UAAX,CAAsBlC,QAAtB,CAHR;;AAAA;AAIE,mBAAKV,cAAL,CAAoB;AAAEkB,gBAAAA,IAAI,EAAE,SAAR;AAAmBS,gBAAAA,IAAI,EAAJA;AAAnB,eAApB;;AAJF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;;;;SAOMY;2EAAN,mBACE7B,QADF,EAEEC,IAFF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAIuB,KAAKxB,KAAL,CAAWoD,MAAX,CAA0B7B,QAA1B,EAAoCC,IAApC,CAJvB;;AAAA;AAIQ4B,cAAAA,MAJR;AAKEA,cAAAA,MAAM,CAACO,aAAP,CAAqB,IAArB;AALF,iDAMSP,MANT;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;;;;;;SA9LA,eAA6B;AAC3B,aAAO,KAAKpD,KAAL,CAAW4D,UAAlB;AACD;;;;;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index-browsermodern-dev.es.js","sources":["../src/AbstractSubscribableStoreQuery.ts","../src/SubscribeStore.ts"],"sourcesContent":["import type {\n Query,\n SubscribeCallback,\n QuerySubscription,\n QueryResult,\n QueryParams,\n} from 'liwi-store';\nimport type { BaseModel, InsertType, AllowedKeyValue } from 'liwi-types';\nimport type SubscribeStore from './SubscribeStore';\n\nexport default abstract class AbstractSubscribableStoreQuery<\n KeyPath extends keyof Model,\n KeyValue extends AllowedKeyValue,\n Model extends BaseModel & Record<KeyPath, KeyValue>,\n ModelInsertType extends InsertType<Model, KeyPath>,\n Params extends QueryParams<Params> = never,\n Result = Model\n> implements Query<Result, Params, KeyValue> {\n changeParams(params: Params): never {\n throw new Error('Method not supported. Please create a new query.');\n }\n\n changePartialParams(\n params: Params extends undefined ? never : Partial<Params>,\n ): never {\n throw new Error('Method not supported. Please create a new query.');\n }\n\n private _subscribeStore?: SubscribeStore<\n KeyPath,\n KeyValue,\n Model,\n ModelInsertType,\n any,\n any\n >;\n\n setSubscribeStore(\n store: SubscribeStore<KeyPath, KeyValue, Model, ModelInsertType, any, any>,\n ): void {\n this._subscribeStore = store;\n }\n\n getSubscribeStore(): SubscribeStore<\n KeyPath,\n KeyValue,\n Model,\n ModelInsertType,\n any,\n any\n > {\n if (!this._subscribeStore) {\n throw new Error('_subscribeStore is not initialized');\n }\n return this._subscribeStore;\n }\n\n abstract fetch<T>(\n onFulfilled: (result: QueryResult<Result>) => T,\n ): Promise<T>;\n\n fetchAndSubscribe(\n callback: SubscribeCallback<KeyValue, Result>,\n ): QuerySubscription {\n return this._subscribe(callback, true);\n }\n\n subscribe(callback: SubscribeCallback<KeyValue, Result>): QuerySubscription {\n return this._subscribe(callback, false);\n }\n\n abstract _subscribe(\n callback: SubscribeCallback<KeyValue, Result>,\n _includeInitial: boolean,\n ): QuerySubscription;\n}\n","/* eslint-disable max-lines */\nimport type {\n Store as StoreInterface,\n AbstractConnection,\n UpsertResult,\n SubscribableStoreQuery,\n AbstractStoreCursor,\n SubscribableStore,\n QueryParams,\n UpsertPartialObject,\n} from 'liwi-store';\nimport type {\n BaseModel,\n InsertType,\n Update,\n Criteria,\n Sort,\n QueryOptions,\n Transformer,\n AllowedKeyValue,\n OptionalBaseModelKeysForInsert,\n} from 'liwi-types';\n\nexport type Actions<Model> =\n | { type: 'inserted'; next: Model[] }\n | { type: 'updated'; changes: [Model, Model][] }\n | { type: 'deleted'; prev: Model[] };\n\nexport type Listener<Model> = (action: Actions<Model>) => unknown;\n\nexport default class SubscribeStore<\n KeyPath extends keyof Model,\n KeyValue extends AllowedKeyValue,\n Model extends BaseModel & Record<KeyPath, KeyValue>,\n ModelInsertType extends InsertType<Model, KeyPath>,\n Connection extends AbstractConnection,\n Store extends SubscribableStore<\n KeyPath,\n KeyValue,\n Model,\n ModelInsertType,\n Connection\n >\n> implements\n StoreInterface<KeyPath, KeyValue, Model, ModelInsertType, Connection> {\n private readonly store: Store;\n\n private readonly listeners: Set<Listener<Model>> = new Set();\n\n readonly keyPath: KeyPath;\n\n constructor(store: Store) {\n this.store = store;\n this.keyPath = store.keyPath;\n }\n\n get connection(): Connection {\n return this.store.connection;\n }\n\n subscribe(callback: Listener<Model>): () => void {\n this.listeners.add(callback);\n return () => this.listeners.delete(callback);\n }\n\n callSubscribed(action: Actions<Model>): void {\n this.listeners.forEach((listener) => listener(action));\n }\n\n createQuerySingleItem<\n Result extends Record<KeyPath, KeyValue>,\n Params extends QueryParams<Params>\n >(\n options: QueryOptions<Model>,\n transformer?: Transformer<Model, Result>,\n ): SubscribableStoreQuery<\n KeyPath,\n KeyValue,\n Model,\n SubscribableStore<KeyPath, KeyValue, Model, ModelInsertType, Connection>,\n Result,\n Params\n > {\n const query: SubscribableStoreQuery<\n KeyPath,\n KeyValue,\n Model,\n SubscribableStore<KeyPath, KeyValue, Model, ModelInsertType, Connection>,\n Result,\n Params\n > = this.store.createQuerySingleItem<Result, Params>(options, transformer);\n query.setSubscribeStore(this);\n return query;\n }\n\n createQueryCollection<\n Item extends Record<KeyPath, KeyValue>,\n Params extends QueryParams<Params>\n >(\n options: QueryOptions<Model>,\n transformer?: Transformer<Model, Item>,\n ): SubscribableStoreQuery<\n KeyPath,\n KeyValue,\n Model,\n SubscribableStore<KeyPath, KeyValue, Model, ModelInsertType, Connection>,\n Item[],\n Params\n > {\n const query: SubscribableStoreQuery<\n KeyPath,\n KeyValue,\n Model,\n SubscribableStore<KeyPath, KeyValue, Model, ModelInsertType, Connection>,\n Item[],\n Params\n > = this.store.createQueryCollection<Item, Params>(options, transformer);\n query.setSubscribeStore(this);\n return query;\n }\n\n findAll(criteria?: Criteria<Model>, sort?: Sort<Model>): Promise<Model[]> {\n return this.store.findAll(criteria, sort);\n }\n\n findByKey(key: any, criteria?: Criteria<Model>): Promise<Model | undefined> {\n return this.store.findByKey(key, criteria);\n }\n\n findOne(\n criteria: Criteria<Model>,\n sort?: Sort<Model>,\n ): Promise<Model | undefined> {\n return this.store.findOne(criteria, sort);\n }\n\n async insertOne(object: ModelInsertType): Promise<Model> {\n const inserted = await this.store.insertOne(object);\n this.callSubscribed({ type: 'inserted', next: [inserted] });\n return inserted;\n }\n\n async replaceOne(object: Model): Promise<Model> {\n const replaced = await this.store.replaceOne(object);\n this.callSubscribed({ type: 'updated', changes: [[object, replaced]] });\n return replaced;\n }\n\n async replaceSeveral(objects: Model[]): Promise<Model[]> {\n const replacedObjects = await this.store.replaceSeveral(objects);\n this.callSubscribed({\n type: 'updated',\n changes: objects.map((prev, index) => [prev, replacedObjects[index]]),\n });\n return replacedObjects;\n }\n\n async upsertOne<\n K extends Exclude<keyof Model, KeyPath | OptionalBaseModelKeysForInsert>\n >(\n object: UpsertPartialObject<KeyPath, KeyValue, Model, K>,\n setOnInsertPartialObject?: Pick<Model, K>,\n ): Promise<Model> {\n const result = await this.upsertOneWithInfo(\n object,\n setOnInsertPartialObject,\n );\n return result.object;\n }\n\n async upsertOneWithInfo<\n K extends Exclude<keyof Model, KeyPath | OptionalBaseModelKeysForInsert>\n >(\n object: UpsertPartialObject<KeyPath, KeyValue, Model, K>,\n setOnInsertPartialObject?: Pick<Model, K>,\n ): Promise<UpsertResult<Model>> {\n const upsertedWithInfo = await this.store.upsertOneWithInfo(\n object,\n setOnInsertPartialObject,\n );\n if (upsertedWithInfo.inserted) {\n this.callSubscribed({\n type: 'inserted',\n next: [upsertedWithInfo.object],\n });\n } else {\n throw new Error('TODO');\n }\n return upsertedWithInfo;\n }\n\n async partialUpdateByKey(\n key: any,\n partialUpdate: Update<Model>,\n criteria?: Criteria<Model>,\n ): Promise<Model> {\n return this.partialUpdateOne(\n (await this.findOne({ [this.store.keyPath]: key, ...criteria })) as Model,\n partialUpdate,\n );\n }\n\n async partialUpdateOne(\n object: Model,\n partialUpdate: Update<Model>,\n ): Promise<Model> {\n const updated = await this.store.partialUpdateOne(object, partialUpdate);\n this.callSubscribed({ type: 'updated', changes: [[object, updated]] });\n return updated;\n }\n\n async partialUpdateMany(\n criteria: Criteria<Model>,\n partialUpdate: Update<Model>,\n ): Promise<void> {\n const cursor = await this.store.cursor(criteria);\n const changes: [Model, Model][] = [];\n\n await cursor.forEach(async (model) => {\n const key = model[this.store.keyPath];\n const updated = await this.store.partialUpdateByKey(\n key,\n partialUpdate,\n criteria,\n );\n changes.push([model, updated]);\n });\n this.callSubscribed({ type: 'updated', changes });\n }\n\n async deleteByKey(key: any, criteria?: Criteria<Model>): Promise<void> {\n return this.deleteOne((await this.findByKey(key, criteria)) as Model);\n }\n\n async deleteOne(object: Model): Promise<void> {\n await this.store.deleteOne(object);\n this.callSubscribed({ type: 'deleted', prev: [object] });\n }\n\n async deleteMany(criteria: Criteria<Model>): Promise<void> {\n const cursor = await this.store.cursor(criteria);\n const prev: Model[] = await cursor.toArray();\n await this.store.deleteMany(criteria);\n this.callSubscribed({ type: 'deleted', prev });\n }\n\n async cursor<Result = Model>(\n criteria?: Criteria<Model>,\n sort?: Sort<Model>,\n ): Promise<AbstractStoreCursor<any, KeyValue, Model, Result>> {\n const cursor = await this.store.cursor<Result>(criteria, sort);\n cursor.overrideStore(this);\n return cursor;\n }\n}\n"],"names":["AbstractSubscribableStoreQuery","changeParams","Error","changePartialParams","setSubscribeStore","store","_subscribeStore","getSubscribeStore","fetchAndSubscribe","callback","_subscribe","subscribe","SubscribeStore","constructor","listeners","Set","keyPath","connection","add","delete","callSubscribed","action","forEach","listener","createQuerySingleItem","options","transformer","query","createQueryCollection","findAll","criteria","sort","findByKey","key","findOne","insertOne","object","inserted","type","next","replaceOne","replaced","changes","replaceSeveral","objects","replacedObjects","map","prev","index","upsertOne","setOnInsertPartialObject","result","upsertOneWithInfo","upsertedWithInfo","partialUpdateByKey","partialUpdate","partialUpdateOne","updated","partialUpdateMany","cursor","model","push","deleteByKey","deleteOne","deleteMany","toArray","overrideStore"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index-browsermodern-dev.es.js","sources":["../src/AbstractSubscribableStoreQuery.ts","../src/SubscribeStore.ts"],"sourcesContent":["import type {\n Query,\n SubscribeCallback,\n QuerySubscription,\n QueryResult,\n QueryParams,\n} from 'liwi-store';\nimport type { BaseModel, InsertType, AllowedKeyValue } from 'liwi-types';\nimport type SubscribeStore from './SubscribeStore';\n\nexport default abstract class AbstractSubscribableStoreQuery<\n KeyPath extends keyof Model,\n KeyValue extends AllowedKeyValue,\n Model extends BaseModel & Record<KeyPath, KeyValue>,\n ModelInsertType extends InsertType<Model, KeyPath>,\n Params extends QueryParams<Params> = never,\n Result = Model\n> implements Query<Result, Params, KeyValue> {\n changeParams(params: Params): never {\n throw new Error('Method not supported. Please create a new query.');\n }\n\n changePartialParams(\n params: Params extends undefined ? never : Partial<Params>,\n ): never {\n throw new Error('Method not supported. Please create a new query.');\n }\n\n private _subscribeStore?: SubscribeStore<\n KeyPath,\n KeyValue,\n Model,\n ModelInsertType,\n any,\n any\n >;\n\n setSubscribeStore(\n store: SubscribeStore<KeyPath, KeyValue, Model, ModelInsertType, any, any>,\n ): void {\n this._subscribeStore = store;\n }\n\n getSubscribeStore(): SubscribeStore<\n KeyPath,\n KeyValue,\n Model,\n ModelInsertType,\n any,\n any\n > {\n if (!this._subscribeStore) {\n throw new Error('_subscribeStore is not initialized');\n }\n return this._subscribeStore;\n }\n\n abstract fetch<T>(\n onFulfilled: (result: QueryResult<Result>) => T,\n ): Promise<T>;\n\n fetchAndSubscribe(\n callback: SubscribeCallback<KeyValue, Result>,\n ): QuerySubscription {\n return this._subscribe(callback, true);\n }\n\n subscribe(callback: SubscribeCallback<KeyValue, Result>): QuerySubscription {\n return this._subscribe(callback, false);\n }\n\n abstract _subscribe(\n callback: SubscribeCallback<KeyValue, Result>,\n _includeInitial: boolean,\n ): QuerySubscription;\n}\n","/* eslint-disable max-lines */\nimport type {\n Store as StoreInterface,\n AbstractConnection,\n UpsertResult,\n SubscribableStoreQuery,\n AbstractStoreCursor,\n SubscribableStore,\n QueryParams,\n UpsertPartialObject,\n} from 'liwi-store';\nimport type {\n BaseModel,\n InsertType,\n Update,\n Criteria,\n Sort,\n QueryOptions,\n Transformer,\n AllowedKeyValue,\n OptionalBaseModelKeysForInsert,\n} from 'liwi-types';\n\nexport type Actions<Model> =\n | { type: 'inserted'; next: Model[] }\n | { type: 'updated'; changes: [Model, Model][] }\n | { type: 'deleted'; prev: Model[] };\n\nexport type Listener<Model> = (action: Actions<Model>) => unknown;\n\nexport default class SubscribeStore<\n KeyPath extends keyof Model,\n KeyValue extends AllowedKeyValue,\n Model extends BaseModel & Record<KeyPath, KeyValue>,\n ModelInsertType extends InsertType<Model, KeyPath>,\n Connection extends AbstractConnection,\n Store extends SubscribableStore<\n KeyPath,\n KeyValue,\n Model,\n ModelInsertType,\n Connection\n >\n> implements\n StoreInterface<KeyPath, KeyValue, Model, ModelInsertType, Connection> {\n private readonly store: Store;\n\n private readonly listeners: Set<Listener<Model>> = new Set();\n\n readonly keyPath: KeyPath;\n\n constructor(store: Store) {\n this.store = store;\n this.keyPath = store.keyPath;\n }\n\n get connection(): Connection {\n return this.store.connection;\n }\n\n subscribe(callback: Listener<Model>): () => void {\n this.listeners.add(callback);\n return () => this.listeners.delete(callback);\n }\n\n callSubscribed(action: Actions<Model>): void {\n this.listeners.forEach((listener) => listener(action));\n }\n\n createQuerySingleItem<\n Result extends Record<KeyPath, KeyValue>,\n Params extends QueryParams<Params>\n >(\n options: QueryOptions<Model>,\n transformer?: Transformer<Model, Result>,\n ): SubscribableStoreQuery<\n KeyPath,\n KeyValue,\n Model,\n SubscribableStore<KeyPath, KeyValue, Model, ModelInsertType, Connection>,\n Result,\n Params\n > {\n const query: SubscribableStoreQuery<\n KeyPath,\n KeyValue,\n Model,\n SubscribableStore<KeyPath, KeyValue, Model, ModelInsertType, Connection>,\n Result,\n Params\n > = this.store.createQuerySingleItem<Result, Params>(options, transformer);\n query.setSubscribeStore(this);\n return query;\n }\n\n createQueryCollection<\n Item extends Record<KeyPath, KeyValue>,\n Params extends QueryParams<Params>\n >(\n options: QueryOptions<Model>,\n transformer?: Transformer<Model, Item>,\n ): SubscribableStoreQuery<\n KeyPath,\n KeyValue,\n Model,\n SubscribableStore<KeyPath, KeyValue, Model, ModelInsertType, Connection>,\n Item[],\n Params\n > {\n const query: SubscribableStoreQuery<\n KeyPath,\n KeyValue,\n Model,\n SubscribableStore<KeyPath, KeyValue, Model, ModelInsertType, Connection>,\n Item[],\n Params\n > = this.store.createQueryCollection<Item, Params>(options, transformer);\n query.setSubscribeStore(this);\n return query;\n }\n\n findAll(criteria?: Criteria<Model>, sort?: Sort<Model>): Promise<Model[]> {\n return this.store.findAll(criteria, sort);\n }\n\n findByKey(key: any, criteria?: Criteria<Model>): Promise<Model | undefined> {\n return this.store.findByKey(key, criteria);\n }\n\n findOne(\n criteria: Criteria<Model>,\n sort?: Sort<Model>,\n ): Promise<Model | undefined> {\n return this.store.findOne(criteria, sort);\n }\n\n async insertOne(object: ModelInsertType): Promise<Model> {\n const inserted = await this.store.insertOne(object);\n this.callSubscribed({ type: 'inserted', next: [inserted] });\n return inserted;\n }\n\n async replaceOne(object: Model): Promise<Model> {\n const replaced = await this.store.replaceOne(object);\n this.callSubscribed({ type: 'updated', changes: [[object, replaced]] });\n return replaced;\n }\n\n async replaceSeveral(objects: Model[]): Promise<Model[]> {\n const replacedObjects = await this.store.replaceSeveral(objects);\n this.callSubscribed({\n type: 'updated',\n changes: objects.map((prev, index) => [prev, replacedObjects[index]]),\n });\n return replacedObjects;\n }\n\n async upsertOne<\n K extends Exclude<keyof Model, KeyPath | OptionalBaseModelKeysForInsert>\n >(\n object: UpsertPartialObject<KeyPath, KeyValue, Model, K>,\n setOnInsertPartialObject?: Pick<Model, K>,\n ): Promise<Model> {\n const result = await this.upsertOneWithInfo(\n object,\n setOnInsertPartialObject,\n );\n return result.object;\n }\n\n async upsertOneWithInfo<\n K extends Exclude<keyof Model, KeyPath | OptionalBaseModelKeysForInsert>\n >(\n object: UpsertPartialObject<KeyPath, KeyValue, Model, K>,\n setOnInsertPartialObject?: Pick<Model, K>,\n ): Promise<UpsertResult<Model>> {\n const upsertedWithInfo = await this.store.upsertOneWithInfo(\n object,\n setOnInsertPartialObject,\n );\n if (upsertedWithInfo.inserted) {\n this.callSubscribed({\n type: 'inserted',\n next: [upsertedWithInfo.object],\n });\n } else {\n throw new Error('TODO');\n }\n return upsertedWithInfo;\n }\n\n async partialUpdateByKey(\n key: any,\n partialUpdate: Update<Model>,\n criteria?: Criteria<Model>,\n ): Promise<Model> {\n return this.partialUpdateOne(\n (await this.findOne({ [this.store.keyPath]: key, ...criteria }))!,\n partialUpdate,\n );\n }\n\n async partialUpdateOne(\n object: Model,\n partialUpdate: Update<Model>,\n ): Promise<Model> {\n const updated = await this.store.partialUpdateOne(object, partialUpdate);\n this.callSubscribed({ type: 'updated', changes: [[object, updated]] });\n return updated;\n }\n\n async partialUpdateMany(\n criteria: Criteria<Model>,\n partialUpdate: Update<Model>,\n ): Promise<void> {\n const cursor = await this.store.cursor(criteria);\n const changes: [Model, Model][] = [];\n\n await cursor.forEach(async (model) => {\n const key = model[this.store.keyPath];\n const updated = await this.store.partialUpdateByKey(\n key,\n partialUpdate,\n criteria,\n );\n changes.push([model, updated]);\n });\n this.callSubscribed({ type: 'updated', changes });\n }\n\n async deleteByKey(key: any, criteria?: Criteria<Model>): Promise<void> {\n return this.deleteOne((await this.findByKey(key, criteria))!);\n }\n\n async deleteOne(object: Model): Promise<void> {\n await this.store.deleteOne(object);\n this.callSubscribed({ type: 'deleted', prev: [object] });\n }\n\n async deleteMany(criteria: Criteria<Model>): Promise<void> {\n const cursor = await this.store.cursor(criteria);\n const prev: Model[] = await cursor.toArray();\n await this.store.deleteMany(criteria);\n this.callSubscribed({ type: 'deleted', prev });\n }\n\n async cursor<Result = Model>(\n criteria?: Criteria<Model>,\n sort?: Sort<Model>,\n ): Promise<AbstractStoreCursor<any, KeyValue, Model, Result>> {\n const cursor = await this.store.cursor<Result>(criteria, sort);\n cursor.overrideStore(this);\n return cursor;\n }\n}\n"],"names":["AbstractSubscribableStoreQuery","changeParams","Error","changePartialParams","setSubscribeStore","store","_subscribeStore","getSubscribeStore","fetchAndSubscribe","callback","_subscribe","subscribe","SubscribeStore","constructor","listeners","Set","keyPath","connection","add","delete","callSubscribed","action","forEach","listener","createQuerySingleItem","options","transformer","query","createQueryCollection","findAll","criteria","sort","findByKey","key","findOne","insertOne","object","inserted","type","next","replaceOne","replaced","changes","replaceSeveral","objects","replacedObjects","map","prev","index","upsertOne","setOnInsertPartialObject","result","upsertOneWithInfo","upsertedWithInfo","partialUpdateByKey","partialUpdate","partialUpdateOne","updated","partialUpdateMany","cursor","model","push","deleteByKey","deleteOne","deleteMany","toArray","overrideStore"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index-browsermodern.es.js","sources":["../src/AbstractSubscribableStoreQuery.ts","../src/SubscribeStore.ts"],"sourcesContent":["import type {\n Query,\n SubscribeCallback,\n QuerySubscription,\n QueryResult,\n QueryParams,\n} from 'liwi-store';\nimport type { BaseModel, InsertType, AllowedKeyValue } from 'liwi-types';\nimport type SubscribeStore from './SubscribeStore';\n\nexport default abstract class AbstractSubscribableStoreQuery<\n KeyPath extends keyof Model,\n KeyValue extends AllowedKeyValue,\n Model extends BaseModel & Record<KeyPath, KeyValue>,\n ModelInsertType extends InsertType<Model, KeyPath>,\n Params extends QueryParams<Params> = never,\n Result = Model\n> implements Query<Result, Params, KeyValue> {\n changeParams(params: Params): never {\n throw new Error('Method not supported. Please create a new query.');\n }\n\n changePartialParams(\n params: Params extends undefined ? never : Partial<Params>,\n ): never {\n throw new Error('Method not supported. Please create a new query.');\n }\n\n private _subscribeStore?: SubscribeStore<\n KeyPath,\n KeyValue,\n Model,\n ModelInsertType,\n any,\n any\n >;\n\n setSubscribeStore(\n store: SubscribeStore<KeyPath, KeyValue, Model, ModelInsertType, any, any>,\n ): void {\n this._subscribeStore = store;\n }\n\n getSubscribeStore(): SubscribeStore<\n KeyPath,\n KeyValue,\n Model,\n ModelInsertType,\n any,\n any\n > {\n if (!this._subscribeStore) {\n throw new Error('_subscribeStore is not initialized');\n }\n return this._subscribeStore;\n }\n\n abstract fetch<T>(\n onFulfilled: (result: QueryResult<Result>) => T,\n ): Promise<T>;\n\n fetchAndSubscribe(\n callback: SubscribeCallback<KeyValue, Result>,\n ): QuerySubscription {\n return this._subscribe(callback, true);\n }\n\n subscribe(callback: SubscribeCallback<KeyValue, Result>): QuerySubscription {\n return this._subscribe(callback, false);\n }\n\n abstract _subscribe(\n callback: SubscribeCallback<KeyValue, Result>,\n _includeInitial: boolean,\n ): QuerySubscription;\n}\n","/* eslint-disable max-lines */\nimport type {\n Store as StoreInterface,\n AbstractConnection,\n UpsertResult,\n SubscribableStoreQuery,\n AbstractStoreCursor,\n SubscribableStore,\n QueryParams,\n UpsertPartialObject,\n} from 'liwi-store';\nimport type {\n BaseModel,\n InsertType,\n Update,\n Criteria,\n Sort,\n QueryOptions,\n Transformer,\n AllowedKeyValue,\n OptionalBaseModelKeysForInsert,\n} from 'liwi-types';\n\nexport type Actions<Model> =\n | { type: 'inserted'; next: Model[] }\n | { type: 'updated'; changes: [Model, Model][] }\n | { type: 'deleted'; prev: Model[] };\n\nexport type Listener<Model> = (action: Actions<Model>) => unknown;\n\nexport default class SubscribeStore<\n KeyPath extends keyof Model,\n KeyValue extends AllowedKeyValue,\n Model extends BaseModel & Record<KeyPath, KeyValue>,\n ModelInsertType extends InsertType<Model, KeyPath>,\n Connection extends AbstractConnection,\n Store extends SubscribableStore<\n KeyPath,\n KeyValue,\n Model,\n ModelInsertType,\n Connection\n >\n> implements\n StoreInterface<KeyPath, KeyValue, Model, ModelInsertType, Connection> {\n private readonly store: Store;\n\n private readonly listeners: Set<Listener<Model>> = new Set();\n\n readonly keyPath: KeyPath;\n\n constructor(store: Store) {\n this.store = store;\n this.keyPath = store.keyPath;\n }\n\n get connection(): Connection {\n return this.store.connection;\n }\n\n subscribe(callback: Listener<Model>): () => void {\n this.listeners.add(callback);\n return () => this.listeners.delete(callback);\n }\n\n callSubscribed(action: Actions<Model>): void {\n this.listeners.forEach((listener) => listener(action));\n }\n\n createQuerySingleItem<\n Result extends Record<KeyPath, KeyValue>,\n Params extends QueryParams<Params>\n >(\n options: QueryOptions<Model>,\n transformer?: Transformer<Model, Result>,\n ): SubscribableStoreQuery<\n KeyPath,\n KeyValue,\n Model,\n SubscribableStore<KeyPath, KeyValue, Model, ModelInsertType, Connection>,\n Result,\n Params\n > {\n const query: SubscribableStoreQuery<\n KeyPath,\n KeyValue,\n Model,\n SubscribableStore<KeyPath, KeyValue, Model, ModelInsertType, Connection>,\n Result,\n Params\n > = this.store.createQuerySingleItem<Result, Params>(options, transformer);\n query.setSubscribeStore(this);\n return query;\n }\n\n createQueryCollection<\n Item extends Record<KeyPath, KeyValue>,\n Params extends QueryParams<Params>\n >(\n options: QueryOptions<Model>,\n transformer?: Transformer<Model, Item>,\n ): SubscribableStoreQuery<\n KeyPath,\n KeyValue,\n Model,\n SubscribableStore<KeyPath, KeyValue, Model, ModelInsertType, Connection>,\n Item[],\n Params\n > {\n const query: SubscribableStoreQuery<\n KeyPath,\n KeyValue,\n Model,\n SubscribableStore<KeyPath, KeyValue, Model, ModelInsertType, Connection>,\n Item[],\n Params\n > = this.store.createQueryCollection<Item, Params>(options, transformer);\n query.setSubscribeStore(this);\n return query;\n }\n\n findAll(criteria?: Criteria<Model>, sort?: Sort<Model>): Promise<Model[]> {\n return this.store.findAll(criteria, sort);\n }\n\n findByKey(key: any, criteria?: Criteria<Model>): Promise<Model | undefined> {\n return this.store.findByKey(key, criteria);\n }\n\n findOne(\n criteria: Criteria<Model>,\n sort?: Sort<Model>,\n ): Promise<Model | undefined> {\n return this.store.findOne(criteria, sort);\n }\n\n async insertOne(object: ModelInsertType): Promise<Model> {\n const inserted = await this.store.insertOne(object);\n this.callSubscribed({ type: 'inserted', next: [inserted] });\n return inserted;\n }\n\n async replaceOne(object: Model): Promise<Model> {\n const replaced = await this.store.replaceOne(object);\n this.callSubscribed({ type: 'updated', changes: [[object, replaced]] });\n return replaced;\n }\n\n async replaceSeveral(objects: Model[]): Promise<Model[]> {\n const replacedObjects = await this.store.replaceSeveral(objects);\n this.callSubscribed({\n type: 'updated',\n changes: objects.map((prev, index) => [prev, replacedObjects[index]]),\n });\n return replacedObjects;\n }\n\n async upsertOne<\n K extends Exclude<keyof Model, KeyPath | OptionalBaseModelKeysForInsert>\n >(\n object: UpsertPartialObject<KeyPath, KeyValue, Model, K>,\n setOnInsertPartialObject?: Pick<Model, K>,\n ): Promise<Model> {\n const result = await this.upsertOneWithInfo(\n object,\n setOnInsertPartialObject,\n );\n return result.object;\n }\n\n async upsertOneWithInfo<\n K extends Exclude<keyof Model, KeyPath | OptionalBaseModelKeysForInsert>\n >(\n object: UpsertPartialObject<KeyPath, KeyValue, Model, K>,\n setOnInsertPartialObject?: Pick<Model, K>,\n ): Promise<UpsertResult<Model>> {\n const upsertedWithInfo = await this.store.upsertOneWithInfo(\n object,\n setOnInsertPartialObject,\n );\n if (upsertedWithInfo.inserted) {\n this.callSubscribed({\n type: 'inserted',\n next: [upsertedWithInfo.object],\n });\n } else {\n throw new Error('TODO');\n }\n return upsertedWithInfo;\n }\n\n async partialUpdateByKey(\n key: any,\n partialUpdate: Update<Model>,\n criteria?: Criteria<Model>,\n ): Promise<Model> {\n return this.partialUpdateOne(\n (await this.findOne({ [this.store.keyPath]: key, ...criteria })) as Model,\n partialUpdate,\n );\n }\n\n async partialUpdateOne(\n object: Model,\n partialUpdate: Update<Model>,\n ): Promise<Model> {\n const updated = await this.store.partialUpdateOne(object, partialUpdate);\n this.callSubscribed({ type: 'updated', changes: [[object, updated]] });\n return updated;\n }\n\n async partialUpdateMany(\n criteria: Criteria<Model>,\n partialUpdate: Update<Model>,\n ): Promise<void> {\n const cursor = await this.store.cursor(criteria);\n const changes: [Model, Model][] = [];\n\n await cursor.forEach(async (model) => {\n const key = model[this.store.keyPath];\n const updated = await this.store.partialUpdateByKey(\n key,\n partialUpdate,\n criteria,\n );\n changes.push([model, updated]);\n });\n this.callSubscribed({ type: 'updated', changes });\n }\n\n async deleteByKey(key: any, criteria?: Criteria<Model>): Promise<void> {\n return this.deleteOne((await this.findByKey(key, criteria)) as Model);\n }\n\n async deleteOne(object: Model): Promise<void> {\n await this.store.deleteOne(object);\n this.callSubscribed({ type: 'deleted', prev: [object] });\n }\n\n async deleteMany(criteria: Criteria<Model>): Promise<void> {\n const cursor = await this.store.cursor(criteria);\n const prev: Model[] = await cursor.toArray();\n await this.store.deleteMany(criteria);\n this.callSubscribed({ type: 'deleted', prev });\n }\n\n async cursor<Result = Model>(\n criteria?: Criteria<Model>,\n sort?: Sort<Model>,\n ): Promise<AbstractStoreCursor<any, KeyValue, Model, Result>> {\n const cursor = await this.store.cursor<Result>(criteria, sort);\n cursor.overrideStore(this);\n return cursor;\n }\n}\n"],"names":["AbstractSubscribableStoreQuery","changeParams","Error","changePartialParams","setSubscribeStore","store","_subscribeStore","getSubscribeStore","fetchAndSubscribe","callback","_subscribe","subscribe","SubscribeStore","constructor","listeners","Set","keyPath","connection","add","delete","callSubscribed","action","forEach","listener","createQuerySingleItem","options","transformer","query","createQueryCollection","findAll","criteria","sort","findByKey","key","findOne","insertOne","object","inserted","type","next","replaceOne","replaced","changes","replaceSeveral","objects","replacedObjects","map","prev","index","upsertOne","setOnInsertPartialObject","result","upsertOneWithInfo","upsertedWithInfo","partialUpdateByKey","partialUpdate","partialUpdateOne","updated","partialUpdateMany","cursor","model","push","deleteByKey","deleteOne","deleteMany","toArray","overrideStore"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index-browsermodern.es.js","sources":["../src/AbstractSubscribableStoreQuery.ts","../src/SubscribeStore.ts"],"sourcesContent":["import type {\n Query,\n SubscribeCallback,\n QuerySubscription,\n QueryResult,\n QueryParams,\n} from 'liwi-store';\nimport type { BaseModel, InsertType, AllowedKeyValue } from 'liwi-types';\nimport type SubscribeStore from './SubscribeStore';\n\nexport default abstract class AbstractSubscribableStoreQuery<\n KeyPath extends keyof Model,\n KeyValue extends AllowedKeyValue,\n Model extends BaseModel & Record<KeyPath, KeyValue>,\n ModelInsertType extends InsertType<Model, KeyPath>,\n Params extends QueryParams<Params> = never,\n Result = Model\n> implements Query<Result, Params, KeyValue> {\n changeParams(params: Params): never {\n throw new Error('Method not supported. Please create a new query.');\n }\n\n changePartialParams(\n params: Params extends undefined ? never : Partial<Params>,\n ): never {\n throw new Error('Method not supported. Please create a new query.');\n }\n\n private _subscribeStore?: SubscribeStore<\n KeyPath,\n KeyValue,\n Model,\n ModelInsertType,\n any,\n any\n >;\n\n setSubscribeStore(\n store: SubscribeStore<KeyPath, KeyValue, Model, ModelInsertType, any, any>,\n ): void {\n this._subscribeStore = store;\n }\n\n getSubscribeStore(): SubscribeStore<\n KeyPath,\n KeyValue,\n Model,\n ModelInsertType,\n any,\n any\n > {\n if (!this._subscribeStore) {\n throw new Error('_subscribeStore is not initialized');\n }\n return this._subscribeStore;\n }\n\n abstract fetch<T>(\n onFulfilled: (result: QueryResult<Result>) => T,\n ): Promise<T>;\n\n fetchAndSubscribe(\n callback: SubscribeCallback<KeyValue, Result>,\n ): QuerySubscription {\n return this._subscribe(callback, true);\n }\n\n subscribe(callback: SubscribeCallback<KeyValue, Result>): QuerySubscription {\n return this._subscribe(callback, false);\n }\n\n abstract _subscribe(\n callback: SubscribeCallback<KeyValue, Result>,\n _includeInitial: boolean,\n ): QuerySubscription;\n}\n","/* eslint-disable max-lines */\nimport type {\n Store as StoreInterface,\n AbstractConnection,\n UpsertResult,\n SubscribableStoreQuery,\n AbstractStoreCursor,\n SubscribableStore,\n QueryParams,\n UpsertPartialObject,\n} from 'liwi-store';\nimport type {\n BaseModel,\n InsertType,\n Update,\n Criteria,\n Sort,\n QueryOptions,\n Transformer,\n AllowedKeyValue,\n OptionalBaseModelKeysForInsert,\n} from 'liwi-types';\n\nexport type Actions<Model> =\n | { type: 'inserted'; next: Model[] }\n | { type: 'updated'; changes: [Model, Model][] }\n | { type: 'deleted'; prev: Model[] };\n\nexport type Listener<Model> = (action: Actions<Model>) => unknown;\n\nexport default class SubscribeStore<\n KeyPath extends keyof Model,\n KeyValue extends AllowedKeyValue,\n Model extends BaseModel & Record<KeyPath, KeyValue>,\n ModelInsertType extends InsertType<Model, KeyPath>,\n Connection extends AbstractConnection,\n Store extends SubscribableStore<\n KeyPath,\n KeyValue,\n Model,\n ModelInsertType,\n Connection\n >\n> implements\n StoreInterface<KeyPath, KeyValue, Model, ModelInsertType, Connection> {\n private readonly store: Store;\n\n private readonly listeners: Set<Listener<Model>> = new Set();\n\n readonly keyPath: KeyPath;\n\n constructor(store: Store) {\n this.store = store;\n this.keyPath = store.keyPath;\n }\n\n get connection(): Connection {\n return this.store.connection;\n }\n\n subscribe(callback: Listener<Model>): () => void {\n this.listeners.add(callback);\n return () => this.listeners.delete(callback);\n }\n\n callSubscribed(action: Actions<Model>): void {\n this.listeners.forEach((listener) => listener(action));\n }\n\n createQuerySingleItem<\n Result extends Record<KeyPath, KeyValue>,\n Params extends QueryParams<Params>\n >(\n options: QueryOptions<Model>,\n transformer?: Transformer<Model, Result>,\n ): SubscribableStoreQuery<\n KeyPath,\n KeyValue,\n Model,\n SubscribableStore<KeyPath, KeyValue, Model, ModelInsertType, Connection>,\n Result,\n Params\n > {\n const query: SubscribableStoreQuery<\n KeyPath,\n KeyValue,\n Model,\n SubscribableStore<KeyPath, KeyValue, Model, ModelInsertType, Connection>,\n Result,\n Params\n > = this.store.createQuerySingleItem<Result, Params>(options, transformer);\n query.setSubscribeStore(this);\n return query;\n }\n\n createQueryCollection<\n Item extends Record<KeyPath, KeyValue>,\n Params extends QueryParams<Params>\n >(\n options: QueryOptions<Model>,\n transformer?: Transformer<Model, Item>,\n ): SubscribableStoreQuery<\n KeyPath,\n KeyValue,\n Model,\n SubscribableStore<KeyPath, KeyValue, Model, ModelInsertType, Connection>,\n Item[],\n Params\n > {\n const query: SubscribableStoreQuery<\n KeyPath,\n KeyValue,\n Model,\n SubscribableStore<KeyPath, KeyValue, Model, ModelInsertType, Connection>,\n Item[],\n Params\n > = this.store.createQueryCollection<Item, Params>(options, transformer);\n query.setSubscribeStore(this);\n return query;\n }\n\n findAll(criteria?: Criteria<Model>, sort?: Sort<Model>): Promise<Model[]> {\n return this.store.findAll(criteria, sort);\n }\n\n findByKey(key: any, criteria?: Criteria<Model>): Promise<Model | undefined> {\n return this.store.findByKey(key, criteria);\n }\n\n findOne(\n criteria: Criteria<Model>,\n sort?: Sort<Model>,\n ): Promise<Model | undefined> {\n return this.store.findOne(criteria, sort);\n }\n\n async insertOne(object: ModelInsertType): Promise<Model> {\n const inserted = await this.store.insertOne(object);\n this.callSubscribed({ type: 'inserted', next: [inserted] });\n return inserted;\n }\n\n async replaceOne(object: Model): Promise<Model> {\n const replaced = await this.store.replaceOne(object);\n this.callSubscribed({ type: 'updated', changes: [[object, replaced]] });\n return replaced;\n }\n\n async replaceSeveral(objects: Model[]): Promise<Model[]> {\n const replacedObjects = await this.store.replaceSeveral(objects);\n this.callSubscribed({\n type: 'updated',\n changes: objects.map((prev, index) => [prev, replacedObjects[index]]),\n });\n return replacedObjects;\n }\n\n async upsertOne<\n K extends Exclude<keyof Model, KeyPath | OptionalBaseModelKeysForInsert>\n >(\n object: UpsertPartialObject<KeyPath, KeyValue, Model, K>,\n setOnInsertPartialObject?: Pick<Model, K>,\n ): Promise<Model> {\n const result = await this.upsertOneWithInfo(\n object,\n setOnInsertPartialObject,\n );\n return result.object;\n }\n\n async upsertOneWithInfo<\n K extends Exclude<keyof Model, KeyPath | OptionalBaseModelKeysForInsert>\n >(\n object: UpsertPartialObject<KeyPath, KeyValue, Model, K>,\n setOnInsertPartialObject?: Pick<Model, K>,\n ): Promise<UpsertResult<Model>> {\n const upsertedWithInfo = await this.store.upsertOneWithInfo(\n object,\n setOnInsertPartialObject,\n );\n if (upsertedWithInfo.inserted) {\n this.callSubscribed({\n type: 'inserted',\n next: [upsertedWithInfo.object],\n });\n } else {\n throw new Error('TODO');\n }\n return upsertedWithInfo;\n }\n\n async partialUpdateByKey(\n key: any,\n partialUpdate: Update<Model>,\n criteria?: Criteria<Model>,\n ): Promise<Model> {\n return this.partialUpdateOne(\n (await this.findOne({ [this.store.keyPath]: key, ...criteria }))!,\n partialUpdate,\n );\n }\n\n async partialUpdateOne(\n object: Model,\n partialUpdate: Update<Model>,\n ): Promise<Model> {\n const updated = await this.store.partialUpdateOne(object, partialUpdate);\n this.callSubscribed({ type: 'updated', changes: [[object, updated]] });\n return updated;\n }\n\n async partialUpdateMany(\n criteria: Criteria<Model>,\n partialUpdate: Update<Model>,\n ): Promise<void> {\n const cursor = await this.store.cursor(criteria);\n const changes: [Model, Model][] = [];\n\n await cursor.forEach(async (model) => {\n const key = model[this.store.keyPath];\n const updated = await this.store.partialUpdateByKey(\n key,\n partialUpdate,\n criteria,\n );\n changes.push([model, updated]);\n });\n this.callSubscribed({ type: 'updated', changes });\n }\n\n async deleteByKey(key: any, criteria?: Criteria<Model>): Promise<void> {\n return this.deleteOne((await this.findByKey(key, criteria))!);\n }\n\n async deleteOne(object: Model): Promise<void> {\n await this.store.deleteOne(object);\n this.callSubscribed({ type: 'deleted', prev: [object] });\n }\n\n async deleteMany(criteria: Criteria<Model>): Promise<void> {\n const cursor = await this.store.cursor(criteria);\n const prev: Model[] = await cursor.toArray();\n await this.store.deleteMany(criteria);\n this.callSubscribed({ type: 'deleted', prev });\n }\n\n async cursor<Result = Model>(\n criteria?: Criteria<Model>,\n sort?: Sort<Model>,\n ): Promise<AbstractStoreCursor<any, KeyValue, Model, Result>> {\n const cursor = await this.store.cursor<Result>(criteria, sort);\n cursor.overrideStore(this);\n return cursor;\n }\n}\n"],"names":["AbstractSubscribableStoreQuery","changeParams","Error","changePartialParams","setSubscribeStore","store","_subscribeStore","getSubscribeStore","fetchAndSubscribe","callback","_subscribe","subscribe","SubscribeStore","constructor","listeners","Set","keyPath","connection","add","delete","callSubscribed","action","forEach","listener","createQuerySingleItem","options","transformer","query","createQueryCollection","findAll","criteria","sort","findByKey","key","findOne","insertOne","object","inserted","type","next","replaceOne","replaced","changes","replaceSeveral","objects","replacedObjects","map","prev","index","upsertOne","setOnInsertPartialObject","result","upsertOneWithInfo","upsertedWithInfo","partialUpdateByKey","partialUpdate","partialUpdateOne","updated","partialUpdateMany","cursor","model","push","deleteByKey","deleteOne","deleteMany","toArray","overrideStore"],"mappings":"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"}
|