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.
@@ -2,12 +2,17 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
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
- var _extends = _interopDefault(require('@babel/runtime/helpers/esm/extends'));
8
- var _regeneratorRuntime = _interopDefault(require('@babel/runtime/regenerator'));
9
- var _asyncToGenerator = _interopDefault(require('@babel/runtime/helpers/esm/asyncToGenerator'));
10
- var _createClass = _interopDefault(require('@babel/runtime/helpers/esm/createClass'));
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 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(object) {
103
+ var _insertOne = _asyncToGenerator__default( /*#__PURE__*/_regeneratorRuntime__default.mark(function _callee(object) {
99
104
  var inserted;
100
- return _regeneratorRuntime.wrap(function _callee$(_context) {
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 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee2(object) {
134
+ var _replaceOne = _asyncToGenerator__default( /*#__PURE__*/_regeneratorRuntime__default.mark(function _callee2(object) {
130
135
  var replaced;
131
- return _regeneratorRuntime.wrap(function _callee2$(_context2) {
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 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee3(objects) {
165
+ var _replaceSeveral = _asyncToGenerator__default( /*#__PURE__*/_regeneratorRuntime__default.mark(function _callee3(objects) {
161
166
  var replacedObjects;
162
- return _regeneratorRuntime.wrap(function _callee3$(_context3) {
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 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee4(object, setOnInsertPartialObject) {
198
+ var _upsertOne = _asyncToGenerator__default( /*#__PURE__*/_regeneratorRuntime__default.mark(function _callee4(object, setOnInsertPartialObject) {
194
199
  var result;
195
- return _regeneratorRuntime.wrap(function _callee4$(_context4) {
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 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee5(object, setOnInsertPartialObject) {
225
+ var _upsertOneWithInfo = _asyncToGenerator__default( /*#__PURE__*/_regeneratorRuntime__default.mark(function _callee5(object, setOnInsertPartialObject) {
221
226
  var upsertedWithInfo;
222
- return _regeneratorRuntime.wrap(function _callee5$(_context5) {
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 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee6(key, partialUpdate, criteria) {
265
- return _regeneratorRuntime.wrap(function _callee6$(_context6) {
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(_extends({
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 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee7(object, partialUpdate) {
299
+ var _partialUpdateOne = _asyncToGenerator__default( /*#__PURE__*/_regeneratorRuntime__default.mark(function _callee7(object, partialUpdate) {
295
300
  var updated;
296
- return _regeneratorRuntime.wrap(function _callee7$(_context7) {
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 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee9(criteria, partialUpdate) {
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 _regeneratorRuntime.wrap(function _callee9$(_context9) {
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 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee8(model) {
346
+ var _ref = _asyncToGenerator__default( /*#__PURE__*/_regeneratorRuntime__default.mark(function _callee8(model) {
342
347
  var key, updated;
343
- return _regeneratorRuntime.wrap(function _callee8$(_context8) {
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 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee10(key, criteria) {
389
- return _regeneratorRuntime.wrap(function _callee10$(_context10) {
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 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee11(object) {
416
- return _regeneratorRuntime.wrap(function _callee11$(_context11) {
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 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee12(criteria) {
448
+ var _deleteMany = _asyncToGenerator__default( /*#__PURE__*/_regeneratorRuntime__default.mark(function _callee12(criteria) {
444
449
  var cursor, prev;
445
- return _regeneratorRuntime.wrap(function _callee12$(_context12) {
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 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee13(criteria, sort) {
487
+ var _cursor = _asyncToGenerator__default( /*#__PURE__*/_regeneratorRuntime__default.mark(function _callee13(criteria, sort) {
483
488
  var cursor;
484
- return _regeneratorRuntime.wrap(function _callee13$(_context13) {
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
- _createClass(SubscribeStore, [{
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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"}
@@ -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":"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"}
@@ -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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"}