liwi-subscribe-store 9.2.0 → 10.0.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.
@@ -1 +1 @@
1
- {"version":3,"file":"index-browser.es.js","sources":["../src/SubscribeStore.ts","../src/AbstractSubscribableStoreQuery.ts"],"sourcesContent":["/* 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 BaseModel,\n InsertType,\n Update,\n Criteria,\n Sort,\n QueryOptions,\n Transformer,\n AllowedKeyValue,\n OptionalBaseModelKeysForInsert,\n} from 'liwi-store';\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{\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(\n key: KeyValue,\n criteria?: Criteria<Model>,\n ): 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?: Update<Model>['$setOnInsert'],\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?: Update<Model>['$setOnInsert'],\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: KeyValue,\n partialUpdate: Update<Model>,\n criteria?: Criteria<Model>,\n ): Promise<Model> {\n return this.partialUpdateOne(\n (await this.findOne({\n [this.store.keyPath]: key,\n ...criteria,\n } as Criteria<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: KeyValue, 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 count(criteria?: Criteria<Model>): Promise<number> {\n return this.store.count(criteria);\n }\n\n async cursor<Result extends Partial<Model> = 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","import type {\n Query,\n SubscribeCallback,\n QuerySubscription,\n QueryResult,\n QueryParams,\n BaseModel,\n InsertType,\n AllowedKeyValue,\n} from 'liwi-store';\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{\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"],"names":["SubscribeStore","store","listeners","Set","keyPath","subscribe","callback","add","callSubscribed","action","forEach","listener","createQuerySingleItem","options","transformer","query","setSubscribeStore","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","Error","partialUpdateByKey","partialUpdate","partialUpdateOne","updated","partialUpdateMany","cursor","model","push","deleteByKey","deleteOne","deleteMany","toArray","count","overrideStore","connection","AbstractSubscribableStoreQuery","changeParams","changePartialParams","_subscribeStore","getSubscribeStore","fetchAndSubscribe","_subscribe"],"mappings":";;;;;AAAA;IA4BqBA;AAsBnB,EAAA,SAAA,cAAA,CAAYC,KAAZ,EAA0B;AAAA,IAAA,IAAA,CAJTC,SAIS,GAJyB,IAAIC,GAAJ,EAIzB,CAAA;IACxB,IAAKF,CAAAA,KAAL,GAAaA,KAAb,CAAA;AACA,IAAA,IAAA,CAAKG,OAAL,GAAeH,KAAK,CAACG,OAArB,CAAA;AACD,GAAA;;;;SAMDC,YAAA,SAAUC,SAAAA,CAAAA,QAAV,EAAiD;AAC/C,IAAA,IAAA,CAAKJ,SAAL,CAAeK,GAAf,CAAmBD,QAAnB,CAAA,CAAA;IACA,OAAO,YAAA;AAAA,MAAA,OAAM,IAAKJ,CAAAA,SAAL,CAAsBI,QAAAA,CAAAA,CAAAA,QAAtB,CAAN,CAAA;KAAP,CAAA;;;SAGFE,iBAAA,SAAeC,cAAAA,CAAAA,MAAf,EAA6C;AAC3C,IAAA,IAAA,CAAKP,SAAL,CAAeQ,OAAf,CAAuB,UAACC,QAAD,EAAA;MAAA,OAAcA,QAAQ,CAACF,MAAD,CAAtB,CAAA;KAAvB,CAAA,CAAA;;;AAGFG,EAAAA,MAAAA,CAAAA,wBAAA,SAAA,qBAAA,CAIEC,OAJF,EAKEC,WALF,EAaE;IACA,IAAMC,KAOL,GAAG,IAAA,CAAKd,KAAL,CAAWW,qBAAX,CAAiDC,OAAjD,EAA0DC,WAA1D,CAPJ,CAAA;IAQAC,KAAK,CAACC,iBAAN,CAAwB,IAAxB,CAAA,CAAA;AACA,IAAA,OAAOD,KAAP,CAAA;;;AAGFE,EAAAA,MAAAA,CAAAA,wBAAA,SAAA,qBAAA,CAIEJ,OAJF,EAKEC,WALF,EAaE;IACA,IAAMC,KAOL,GAAG,IAAA,CAAKd,KAAL,CAAWgB,qBAAX,CAA+CJ,OAA/C,EAAwDC,WAAxD,CAPJ,CAAA;IAQAC,KAAK,CAACC,iBAAN,CAAwB,IAAxB,CAAA,CAAA;AACA,IAAA,OAAOD,KAAP,CAAA;;;AAGFG,EAAAA,MAAAA,CAAAA,UAAA,SAAA,OAAA,CAAQC,QAAR,EAAoCC,IAApC,EAA0E;IACxE,OAAO,IAAA,CAAKnB,KAAL,CAAWiB,OAAX,CAAmBC,QAAnB,EAA6BC,IAA7B,CAAP,CAAA;;;AAGFC,EAAAA,MAAAA,CAAAA,YAAA,SAAA,SAAA,CACEC,GADF,EAEEH,QAFF,EAG8B;IAC5B,OAAO,IAAA,CAAKlB,KAAL,CAAWoB,SAAX,CAAqBC,GAArB,EAA0BH,QAA1B,CAAP,CAAA;;;AAGFI,EAAAA,MAAAA,CAAAA,UAAA,SAAA,OAAA,CACEJ,QADF,EAEEC,IAFF,EAG8B;IAC5B,OAAO,IAAA,CAAKnB,KAAL,CAAWsB,OAAX,CAAmBJ,QAAnB,EAA6BC,IAA7B,CAAP,CAAA;;;SAGII;AAAN,IAAA,IAAA,UAAA,GAAA,iBAAA,eAAA,mBAAA,EAAA,CAAA,IAAA,CAAA,SAAA,OAAA,CAAgBC,MAAhB,EAAA;AAAA,MAAA,IAAA,QAAA,CAAA;AAAA,MAAA,OAAA,mBAAA,EAAA,CAAA,IAAA,CAAA,SAAA,QAAA,CAAA,QAAA,EAAA;AAAA,QAAA,OAAA,CAAA,EAAA;AAAA,UAAA,QAAA,QAAA,CAAA,IAAA,GAAA,QAAA,CAAA,IAAA;AAAA,YAAA,KAAA,CAAA;AAAA,cAAA,QAAA,CAAA,IAAA,GAAA,CAAA,CAAA;AAAA,cAAA,OACyB,KAAKxB,KAAL,CAAWuB,SAAX,CAAqBC,MAArB,CADzB,CAAA;;AAAA,YAAA,KAAA,CAAA;cACQC,QADR,GAAA,QAAA,CAAA,IAAA,CAAA;AAEE,cAAA,IAAA,CAAKlB,cAAL,CAAoB;AAAEmB,gBAAAA,IAAI,EAAE,UAAR;gBAAoBC,IAAI,EAAE,CAACF,QAAD,CAAA;eAA9C,CAAA,CAAA;AAFF,cAAA,OAAA,QAAA,CAAA,MAAA,CAAA,QAAA,EAGSA,QAHT,CAAA,CAAA;;AAAA,YAAA,KAAA,CAAA,CAAA;AAAA,YAAA,KAAA,KAAA;AAAA,cAAA,OAAA,QAAA,CAAA,IAAA,EAAA,CAAA;AAAA,WAAA;AAAA,SAAA;AAAA,OAAA,EAAA,OAAA,EAAA,IAAA,CAAA,CAAA;;;;;;;;SAMMG;AAAN,IAAA,IAAA,WAAA,GAAA,iBAAA,eAAA,mBAAA,EAAA,CAAA,IAAA,CAAA,SAAA,QAAA,CAAiBJ,MAAjB,EAAA;AAAA,MAAA,IAAA,QAAA,CAAA;AAAA,MAAA,OAAA,mBAAA,EAAA,CAAA,IAAA,CAAA,SAAA,SAAA,CAAA,SAAA,EAAA;AAAA,QAAA,OAAA,CAAA,EAAA;AAAA,UAAA,QAAA,SAAA,CAAA,IAAA,GAAA,SAAA,CAAA,IAAA;AAAA,YAAA,KAAA,CAAA;AAAA,cAAA,SAAA,CAAA,IAAA,GAAA,CAAA,CAAA;AAAA,cAAA,OACyB,KAAKxB,KAAL,CAAW4B,UAAX,CAAsBJ,MAAtB,CADzB,CAAA;;AAAA,YAAA,KAAA,CAAA;cACQK,QADR,GAAA,SAAA,CAAA,IAAA,CAAA;AAEE,cAAA,IAAA,CAAKtB,cAAL,CAAoB;AAAEmB,gBAAAA,IAAI,EAAE,SAAR;AAAmBI,gBAAAA,OAAO,EAAE,CAAC,CAACN,MAAD,EAASK,QAAT,CAAD,CAAA;eAAhD,CAAA,CAAA;AAFF,cAAA,OAAA,SAAA,CAAA,MAAA,CAAA,QAAA,EAGSA,QAHT,CAAA,CAAA;;AAAA,YAAA,KAAA,CAAA,CAAA;AAAA,YAAA,KAAA,KAAA;AAAA,cAAA,OAAA,SAAA,CAAA,IAAA,EAAA,CAAA;AAAA,WAAA;AAAA,SAAA;AAAA,OAAA,EAAA,QAAA,EAAA,IAAA,CAAA,CAAA;;;;;;;;SAMME;AAAN,IAAA,IAAA,eAAA,GAAA,iBAAA,eAAA,mBAAA,EAAA,CAAA,IAAA,CAAA,SAAA,QAAA,CAAqBC,OAArB,EAAA;AAAA,MAAA,IAAA,eAAA,CAAA;AAAA,MAAA,OAAA,mBAAA,EAAA,CAAA,IAAA,CAAA,SAAA,SAAA,CAAA,SAAA,EAAA;AAAA,QAAA,OAAA,CAAA,EAAA;AAAA,UAAA,QAAA,SAAA,CAAA,IAAA,GAAA,SAAA,CAAA,IAAA;AAAA,YAAA,KAAA,CAAA;AAAA,cAAA,SAAA,CAAA,IAAA,GAAA,CAAA,CAAA;AAAA,cAAA,OACgC,KAAKhC,KAAL,CAAW+B,cAAX,CAA0BC,OAA1B,CADhC,CAAA;;AAAA,YAAA,KAAA,CAAA;cACQC,eADR,GAAA,SAAA,CAAA,IAAA,CAAA;AAEE,cAAA,IAAA,CAAK1B,cAAL,CAAoB;AAClBmB,gBAAAA,IAAI,EAAE,SADY;gBAElBI,OAAO,EAAEE,OAAO,CAACE,GAAR,CAAY,UAACC,IAAD,EAAOC,KAAP,EAAA;AAAA,kBAAA,OAAiB,CAACD,IAAD,EAAOF,eAAe,CAACG,KAAD,CAAtB,CAAjB,CAAA;iBAAZ,CAAA;eAFX,CAAA,CAAA;AAFF,cAAA,OAAA,SAAA,CAAA,MAAA,CAAA,QAAA,EAMSH,eANT,CAAA,CAAA;;AAAA,YAAA,KAAA,CAAA,CAAA;AAAA,YAAA,KAAA,KAAA;AAAA,cAAA,OAAA,SAAA,CAAA,IAAA,EAAA,CAAA;AAAA,WAAA;AAAA,SAAA;AAAA,OAAA,EAAA,QAAA,EAAA,IAAA,CAAA,CAAA;;;;;;;;SASMI;gFAAN,SAGEb,QAAAA,CAAAA,MAHF,EAIEc,wBAJF,EAAA;AAAA,MAAA,IAAA,MAAA,CAAA;AAAA,MAAA,OAAA,mBAAA,EAAA,CAAA,IAAA,CAAA,SAAA,SAAA,CAAA,SAAA,EAAA;AAAA,QAAA,OAAA,CAAA,EAAA;AAAA,UAAA,QAAA,SAAA,CAAA,IAAA,GAAA,SAAA,CAAA,IAAA;AAAA,YAAA,KAAA,CAAA;AAAA,cAAA,SAAA,CAAA,IAAA,GAAA,CAAA,CAAA;AAAA,cAAA,OAMuB,KAAKC,iBAAL,CACnBf,MADmB,EAEnBc,wBAFmB,CANvB,CAAA;;AAAA,YAAA,KAAA,CAAA;cAMQE,MANR,GAAA,SAAA,CAAA,IAAA,CAAA;cAAA,OAUSA,SAAAA,CAAAA,MAAAA,CAAAA,QAAAA,EAAAA,MAAM,CAAChB,MAVhB,CAAA,CAAA;;AAAA,YAAA,KAAA,CAAA,CAAA;AAAA,YAAA,KAAA,KAAA;AAAA,cAAA,OAAA,SAAA,CAAA,IAAA,EAAA,CAAA;AAAA,WAAA;AAAA,SAAA;AAAA,OAAA,EAAA,QAAA,EAAA,IAAA,CAAA,CAAA;;;;;;;;SAaMe;wFAAN,SAGEf,QAAAA,CAAAA,MAHF,EAIEc,wBAJF,EAAA;AAAA,MAAA,IAAA,gBAAA,CAAA;AAAA,MAAA,OAAA,mBAAA,EAAA,CAAA,IAAA,CAAA,SAAA,SAAA,CAAA,SAAA,EAAA;AAAA,QAAA,OAAA,CAAA,EAAA;AAAA,UAAA,QAAA,SAAA,CAAA,IAAA,GAAA,SAAA,CAAA,IAAA;AAAA,YAAA,KAAA,CAAA;AAAA,cAAA,SAAA,CAAA,IAAA,GAAA,CAAA,CAAA;cAAA,OAMiC,IAAA,CAAKtC,KAAL,CAAWuC,iBAAX,CAC7Bf,MAD6B,EAE7Bc,wBAF6B,CANjC,CAAA;;AAAA,YAAA,KAAA,CAAA;cAMQG,gBANR,GAAA,SAAA,CAAA,IAAA,CAAA;;cAAA,IAUMA,CAAAA,gBAAgB,CAAChB,QAVvB,EAAA;AAAA,gBAAA,SAAA,CAAA,IAAA,GAAA,CAAA,CAAA;AAAA,gBAAA,MAAA;AAAA,eAAA;;AAWI,cAAA,IAAA,CAAKlB,cAAL,CAAoB;AAClBmB,gBAAAA,IAAI,EAAE,UADY;AAElBC,gBAAAA,IAAI,EAAE,CAACc,gBAAgB,CAACjB,MAAlB,CAAA;eAFR,CAAA,CAAA;AAXJ,cAAA,SAAA,CAAA,IAAA,GAAA,CAAA,CAAA;AAAA,cAAA,MAAA;;AAAA,YAAA,KAAA,CAAA;AAAA,cAAA,MAgBU,IAAIkB,KAAJ,CAAU,MAAV,CAhBV,CAAA;;AAAA,YAAA,KAAA,CAAA;AAAA,cAAA,OAAA,SAAA,CAAA,MAAA,CAAA,QAAA,EAkBSD,gBAlBT,CAAA,CAAA;;AAAA,YAAA,KAAA,CAAA,CAAA;AAAA,YAAA,KAAA,KAAA;AAAA,cAAA,OAAA,SAAA,CAAA,IAAA,EAAA,CAAA;AAAA,WAAA;AAAA,SAAA;AAAA,OAAA,EAAA,QAAA,EAAA,IAAA,CAAA,CAAA;;;;;;;;SAqBME;AAAN,IAAA,IAAA,mBAAA,GAAA,iBAAA,eAAA,mBAAA,EAAA,CAAA,IAAA,CAAA,SAAA,QAAA,CACEtB,GADF,EAEEuB,aAFF,EAGE1B,QAHF,EAAA;AAAA,MAAA,IAAA,SAAA,CAAA;;AAAA,MAAA,OAAA,mBAAA,EAAA,CAAA,IAAA,CAAA,SAAA,SAAA,CAAA,SAAA,EAAA;AAAA,QAAA,OAAA,CAAA,EAAA;AAAA,UAAA,QAAA,SAAA,CAAA,IAAA,GAAA,SAAA,CAAA,IAAA;AAAA,YAAA,KAAA,CAAA;AAAA,cAAA,SAAA,CAAA,EAAA,GAKS,IALT,CAAA;AAAA,cAAA,SAAA,CAAA,IAAA,GAAA,CAAA,CAAA;cAAA,OAMW,IAAA,CAAKI,OAAL,CAAA,QAAA,EAAA,SAAA,GAAA,EAAA,EAAA,SAAA,CACJ,IAAKtB,CAAAA,KAAL,CAAWG,OADP,CACiBkB,GAAAA,GADjB,EAEFH,SAAAA,GAAAA,QAFE,CANX,CAAA,CAAA;;AAAA,YAAA,KAAA,CAAA;AAAA,cAAA,SAAA,CAAA,EAAA,GAAA,SAAA,CAAA,IAAA,CAAA;AAAA,cAAA,SAAA,CAAA,EAAA,GAUI0B,aAVJ,CAAA;AAAA,cAAA,OAAA,SAAA,CAAA,MAAA,CAAA,QAAA,EAAA,SAAA,CAAA,EAAA,CAKcC,gBALd,CAAA,IAAA,CAAA,SAAA,CAAA,EAAA,EAAA,SAAA,CAAA,EAAA,EAAA,SAAA,CAAA,EAAA,CAAA,CAAA,CAAA;;AAAA,YAAA,KAAA,CAAA,CAAA;AAAA,YAAA,KAAA,KAAA;AAAA,cAAA,OAAA,SAAA,CAAA,IAAA,EAAA,CAAA;AAAA,WAAA;AAAA,SAAA;AAAA,OAAA,EAAA,QAAA,EAAA,IAAA,CAAA,CAAA;;;;;;;;SAcMA;uFAAN,SACErB,QAAAA,CAAAA,MADF,EAEEoB,aAFF,EAAA;AAAA,MAAA,IAAA,OAAA,CAAA;AAAA,MAAA,OAAA,mBAAA,EAAA,CAAA,IAAA,CAAA,SAAA,SAAA,CAAA,SAAA,EAAA;AAAA,QAAA,OAAA,CAAA,EAAA;AAAA,UAAA,QAAA,SAAA,CAAA,IAAA,GAAA,SAAA,CAAA,IAAA;AAAA,YAAA,KAAA,CAAA;AAAA,cAAA,SAAA,CAAA,IAAA,GAAA,CAAA,CAAA;cAAA,OAIwB,IAAA,CAAK5C,KAAL,CAAW6C,gBAAX,CAA4BrB,MAA5B,EAAoCoB,aAApC,CAJxB,CAAA;;AAAA,YAAA,KAAA,CAAA;cAIQE,OAJR,GAAA,SAAA,CAAA,IAAA,CAAA;AAKE,cAAA,IAAA,CAAKvC,cAAL,CAAoB;AAAEmB,gBAAAA,IAAI,EAAE,SAAR;AAAmBI,gBAAAA,OAAO,EAAE,CAAC,CAACN,MAAD,EAASsB,OAAT,CAAD,CAAA;eAAhD,CAAA,CAAA;AALF,cAAA,OAAA,SAAA,CAAA,MAAA,CAAA,QAAA,EAMSA,OANT,CAAA,CAAA;;AAAA,YAAA,KAAA,CAAA,CAAA;AAAA,YAAA,KAAA,KAAA;AAAA,cAAA,OAAA,SAAA,CAAA,IAAA,EAAA,CAAA;AAAA,WAAA;AAAA,SAAA;AAAA,OAAA,EAAA,QAAA,EAAA,IAAA,CAAA,CAAA;;;;;;;;SASMC;wFAAN,SACE7B,QAAAA,CAAAA,QADF,EAEE0B,aAFF,EAAA;AAAA,MAAA,IAAA,MAAA,GAAA,IAAA,CAAA;;AAAA,MAAA,IAAA,MAAA,EAAA,OAAA,CAAA;AAAA,MAAA,OAAA,mBAAA,EAAA,CAAA,IAAA,CAAA,SAAA,SAAA,CAAA,SAAA,EAAA;AAAA,QAAA,OAAA,CAAA,EAAA;AAAA,UAAA,QAAA,SAAA,CAAA,IAAA,GAAA,SAAA,CAAA,IAAA;AAAA,YAAA,KAAA,CAAA;AAAA,cAAA,SAAA,CAAA,IAAA,GAAA,CAAA,CAAA;AAAA,cAAA,OAIuB,KAAK5C,KAAL,CAAWgD,MAAX,CAAkB9B,QAAlB,CAJvB,CAAA;;AAAA,YAAA,KAAA,CAAA;cAIQ8B,MAJR,GAAA,SAAA,CAAA,IAAA,CAAA;AAKQlB,cAAAA,OALR,GAKoC,EALpC,CAAA;AAAA,cAAA,SAAA,CAAA,IAAA,GAAA,CAAA,CAAA;cAAA,OAOQkB,MAAM,CAACvC,OAAP,eAAA,YAAA;AAAA,gBAAA,IAAA,IAAA,GAAA,iBAAA,eAAA,mBAAA,EAAA,CAAA,IAAA,CAAe,kBAAOwC,KAAP,EAAA;AAAA,kBAAA,IAAA,GAAA,EAAA,OAAA,CAAA;AAAA,kBAAA,OAAA,mBAAA,EAAA,CAAA,IAAA,CAAA,SAAA,SAAA,CAAA,SAAA,EAAA;AAAA,oBAAA,OAAA,CAAA,EAAA;AAAA,sBAAA,QAAA,SAAA,CAAA,IAAA,GAAA,SAAA,CAAA,IAAA;AAAA,wBAAA,KAAA,CAAA;0BACb5B,GADa,GACP4B,KAAK,CAAC,MAAI,CAACjD,KAAL,CAAWG,OAAZ,CADE,CAAA;AAAA,0BAAA,SAAA,CAAA,IAAA,GAAA,CAAA,CAAA;0BAAA,OAEG,MAAI,CAACH,KAAL,CAAW2C,kBAAX,CACpBtB,GADoB,EAEpBuB,aAFoB,EAGpB1B,QAHoB,CAFH,CAAA;;AAAA,wBAAA,KAAA,CAAA;0BAEb4B,OAFa,GAAA,SAAA,CAAA,IAAA,CAAA;AAOnBhB,0BAAAA,OAAO,CAACoB,IAAR,CAAa,CAACD,KAAD,EAAQH,OAAR,CAAb,CAAA,CAAA;;AAPmB,wBAAA,KAAA,CAAA,CAAA;AAAA,wBAAA,KAAA,KAAA;AAAA,0BAAA,OAAA,SAAA,CAAA,IAAA,EAAA,CAAA;AAAA,uBAAA;AAAA,qBAAA;AAAA,mBAAA,EAAA,QAAA,CAAA,CAAA;iBAAf,CAAA,CAAA,CAAA;;AAAA,gBAAA,OAAA,YAAA;AAAA,kBAAA,OAAA,IAAA,CAAA,KAAA,CAAA,IAAA,EAAA,SAAA,CAAA,CAAA;AAAA,iBAAA,CAAA;eAPR,EAAA,CAAA,CAAA;;AAAA,YAAA,KAAA,CAAA;AAgBE,cAAA,IAAA,CAAKvC,cAAL,CAAoB;AAAEmB,gBAAAA,IAAI,EAAE,SAAR;AAAmBI,gBAAAA,OAAO,EAAPA,OAAAA;eAAvC,CAAA,CAAA;;AAhBF,YAAA,KAAA,CAAA,CAAA;AAAA,YAAA,KAAA,KAAA;AAAA,cAAA,OAAA,SAAA,CAAA,IAAA,EAAA,CAAA;AAAA,WAAA;AAAA,SAAA;AAAA,OAAA,EAAA,QAAA,EAAA,IAAA,CAAA,CAAA;;;;;;;;SAmBMqB;kFAAN,SAAkB9B,SAAAA,CAAAA,GAAlB,EAAiCH,QAAjC,EAAA;AAAA,MAAA,OAAA,mBAAA,EAAA,CAAA,IAAA,CAAA,SAAA,UAAA,CAAA,UAAA,EAAA;AAAA,QAAA,OAAA,CAAA,EAAA;AAAA,UAAA,QAAA,UAAA,CAAA,IAAA,GAAA,UAAA,CAAA,IAAA;AAAA,YAAA,KAAA,CAAA;AAAA,cAAA,UAAA,CAAA,EAAA,GACS,IADT,CAAA;AAAA,cAAA,UAAA,CAAA,IAAA,GAAA,CAAA,CAAA;AAAA,cAAA,OAC+B,KAAKE,SAAL,CAAeC,GAAf,EAAoBH,QAApB,CAD/B,CAAA;;AAAA,YAAA,KAAA,CAAA;AAAA,cAAA,UAAA,CAAA,EAAA,GAAA,UAAA,CAAA,IAAA,CAAA;AAAA,cAAA,OAAA,UAAA,CAAA,MAAA,CAAA,QAAA,EAAA,UAAA,CAAA,EAAA,CACckC,SADd,CAAA,IAAA,CAAA,UAAA,CAAA,EAAA,EAAA,UAAA,CAAA,EAAA,CAAA,CAAA,CAAA;;AAAA,YAAA,KAAA,CAAA,CAAA;AAAA,YAAA,KAAA,KAAA;AAAA,cAAA,OAAA,UAAA,CAAA,IAAA,EAAA,CAAA;AAAA,WAAA;AAAA,SAAA;AAAA,OAAA,EAAA,SAAA,EAAA,IAAA,CAAA,CAAA;;;;;;;;SAIMA;AAAN,IAAA,IAAA,UAAA,GAAA,iBAAA,eAAA,mBAAA,EAAA,CAAA,IAAA,CAAA,SAAA,SAAA,CAAgB5B,MAAhB,EAAA;AAAA,MAAA,OAAA,mBAAA,EAAA,CAAA,IAAA,CAAA,SAAA,UAAA,CAAA,UAAA,EAAA;AAAA,QAAA,OAAA,CAAA,EAAA;AAAA,UAAA,QAAA,UAAA,CAAA,IAAA,GAAA,UAAA,CAAA,IAAA;AAAA,YAAA,KAAA,CAAA;AAAA,cAAA,UAAA,CAAA,IAAA,GAAA,CAAA,CAAA;AAAA,cAAA,OACQ,KAAKxB,KAAL,CAAWoD,SAAX,CAAqB5B,MAArB,CADR,CAAA;;AAAA,YAAA,KAAA,CAAA;AAEE,cAAA,IAAA,CAAKjB,cAAL,CAAoB;AAAEmB,gBAAAA,IAAI,EAAE,SAAR;gBAAmBS,IAAI,EAAE,CAACX,MAAD,CAAA;eAA7C,CAAA,CAAA;;AAFF,YAAA,KAAA,CAAA,CAAA;AAAA,YAAA,KAAA,KAAA;AAAA,cAAA,OAAA,UAAA,CAAA,IAAA,EAAA,CAAA;AAAA,WAAA;AAAA,SAAA;AAAA,OAAA,EAAA,SAAA,EAAA,IAAA,CAAA,CAAA;;;;;;;;SAKM6B;AAAN,IAAA,IAAA,WAAA,GAAA,iBAAA,eAAA,mBAAA,EAAA,CAAA,IAAA,CAAA,SAAA,SAAA,CAAiBnC,QAAjB,EAAA;AAAA,MAAA,IAAA,MAAA,EAAA,IAAA,CAAA;AAAA,MAAA,OAAA,mBAAA,EAAA,CAAA,IAAA,CAAA,SAAA,UAAA,CAAA,UAAA,EAAA;AAAA,QAAA,OAAA,CAAA,EAAA;AAAA,UAAA,QAAA,UAAA,CAAA,IAAA,GAAA,UAAA,CAAA,IAAA;AAAA,YAAA,KAAA,CAAA;AAAA,cAAA,UAAA,CAAA,IAAA,GAAA,CAAA,CAAA;AAAA,cAAA,OACuB,KAAKlB,KAAL,CAAWgD,MAAX,CAAkB9B,QAAlB,CADvB,CAAA;;AAAA,YAAA,KAAA,CAAA;cACQ8B,MADR,GAAA,UAAA,CAAA,IAAA,CAAA;AAAA,cAAA,UAAA,CAAA,IAAA,GAAA,CAAA,CAAA;cAAA,OAE8BA,MAAM,CAACM,OAAP,EAF9B,CAAA;;AAAA,YAAA,KAAA,CAAA;cAEQnB,IAFR,GAAA,UAAA,CAAA,IAAA,CAAA;AAAA,cAAA,UAAA,CAAA,IAAA,GAAA,CAAA,CAAA;AAAA,cAAA,OAGQ,KAAKnC,KAAL,CAAWqD,UAAX,CAAsBnC,QAAtB,CAHR,CAAA;;AAAA,YAAA,KAAA,CAAA;AAIE,cAAA,IAAA,CAAKX,cAAL,CAAoB;AAAEmB,gBAAAA,IAAI,EAAE,SAAR;AAAmBS,gBAAAA,IAAI,EAAJA,IAAAA;eAAvC,CAAA,CAAA;;AAJF,YAAA,KAAA,CAAA,CAAA;AAAA,YAAA,KAAA,KAAA;AAAA,cAAA,OAAA,UAAA,CAAA,IAAA,EAAA,CAAA;AAAA,WAAA;AAAA,SAAA;AAAA,OAAA,EAAA,SAAA,EAAA,IAAA,CAAA,CAAA;;;;;;;;SAOMoB;AAAN,IAAA,IAAA,MAAA,GAAA,iBAAA,eAAA,mBAAA,EAAA,CAAA,IAAA,CAAA,SAAA,SAAA,CAAYrC,QAAZ,EAAA;AAAA,MAAA,OAAA,mBAAA,EAAA,CAAA,IAAA,CAAA,SAAA,UAAA,CAAA,UAAA,EAAA;AAAA,QAAA,OAAA,CAAA,EAAA;AAAA,UAAA,QAAA,UAAA,CAAA,IAAA,GAAA,UAAA,CAAA,IAAA;AAAA,YAAA,KAAA,CAAA;AAAA,cAAA,OAAA,UAAA,CAAA,MAAA,CAAA,QAAA,EACS,KAAKlB,KAAL,CAAWuD,KAAX,CAAiBrC,QAAjB,CADT,CAAA,CAAA;;AAAA,YAAA,KAAA,CAAA,CAAA;AAAA,YAAA,KAAA,KAAA;AAAA,cAAA,OAAA,UAAA,CAAA,IAAA,EAAA,CAAA;AAAA,WAAA;AAAA,SAAA;AAAA,OAAA,EAAA,SAAA,EAAA,IAAA,CAAA,CAAA;;;;;;;;SAIM8B;6EAAN,SACE9B,SAAAA,CAAAA,QADF,EAEEC,IAFF,EAAA;AAAA,MAAA,IAAA,MAAA,CAAA;AAAA,MAAA,OAAA,mBAAA,EAAA,CAAA,IAAA,CAAA,SAAA,UAAA,CAAA,UAAA,EAAA;AAAA,QAAA,OAAA,CAAA,EAAA;AAAA,UAAA,QAAA,UAAA,CAAA,IAAA,GAAA,UAAA,CAAA,IAAA;AAAA,YAAA,KAAA,CAAA;AAAA,cAAA,UAAA,CAAA,IAAA,GAAA,CAAA,CAAA;cAAA,OAIuB,IAAA,CAAKnB,KAAL,CAAWgD,MAAX,CAA0B9B,QAA1B,EAAoCC,IAApC,CAJvB,CAAA;;AAAA,YAAA,KAAA,CAAA;cAIQ6B,MAJR,GAAA,UAAA,CAAA,IAAA,CAAA;cAKEA,MAAM,CAACQ,aAAP,CAAqB,IAArB,CAAA,CAAA;AALF,cAAA,OAAA,UAAA,CAAA,MAAA,CAAA,QAAA,EAMSR,MANT,CAAA,CAAA;;AAAA,YAAA,KAAA,CAAA,CAAA;AAAA,YAAA,KAAA,KAAA;AAAA,cAAA,OAAA,UAAA,CAAA,IAAA,EAAA,CAAA;AAAA,WAAA;AAAA,SAAA;AAAA,OAAA,EAAA,SAAA,EAAA,IAAA,CAAA,CAAA;;;;;;;;;;SAxMA,SAA6B,GAAA,GAAA;MAC3B,OAAO,IAAA,CAAKhD,KAAL,CAAWyD,UAAlB,CAAA;AACD,KAAA;;;;;;IC7C2BC;;;;;AAS5BC,EAAAA,MAAAA,CAAAA,eAAA,SAAoC,YAAA,GAAA;AAClC,IAAA,MAAM,IAAIjB,KAAJ,CAAU,kDAAV,CAAN,CAAA;;;AAGFkB,EAAAA,MAAAA,CAAAA,sBAAA,SAES,mBAAA,GAAA;AACP,IAAA,MAAM,IAAIlB,KAAJ,CAAU,kDAAV,CAAN,CAAA;;;SAYF3B,oBAAA,SACEf,iBAAAA,CAAAA,KADF,EAEQ;IACN,IAAK6D,CAAAA,eAAL,GAAuB7D,KAAvB,CAAA;;;AAGF8D,EAAAA,MAAAA,CAAAA,oBAAA,SAOE,iBAAA,GAAA;IACA,IAAI,CAAC,IAAKD,CAAAA,eAAV,EAA2B;AACzB,MAAA,MAAM,IAAInB,KAAJ,CAAU,oCAAV,CAAN,CAAA;AACD,KAAA;;AACD,IAAA,OAAO,KAAKmB,eAAZ,CAAA;;;SAOFE,oBAAA,SACE1D,iBAAAA,CAAAA,QADF,EAEqB;AACnB,IAAA,OAAO,KAAK2D,UAAL,CAAgB3D,QAAhB,EAA0B,IAA1B,CAAP,CAAA;;;SAGFD,YAAA,SAAUC,SAAAA,CAAAA,QAAV,EAA4E;AAC1E,IAAA,OAAO,KAAK2D,UAAL,CAAgB3D,QAAhB,EAA0B,KAA1B,CAAP,CAAA;;;;;;;;"}
1
+ {"version":3,"file":"index-browser.es.js","sources":["../src/SubscribeStore.ts","../src/AbstractSubscribableStoreQuery.ts"],"sourcesContent":["/* 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 BaseModel,\n InsertType,\n Update,\n Criteria,\n Sort,\n QueryOptions,\n Transformer,\n AllowedKeyValue,\n OptionalBaseModelKeysForInsert,\n} from 'liwi-store';\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{\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(\n key: KeyValue,\n criteria?: Criteria<Model>,\n ): 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?: Update<Model>['$setOnInsert'],\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?: Update<Model>['$setOnInsert'],\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: KeyValue,\n partialUpdate: Update<Model>,\n criteria?: Criteria<Model>,\n ): Promise<Model> {\n return this.partialUpdateOne(\n (await this.findOne({\n [this.store.keyPath]: key,\n ...criteria,\n } as Criteria<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: KeyValue, 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 count(criteria?: Criteria<Model>): Promise<number> {\n return this.store.count(criteria);\n }\n\n async cursor<Result extends Partial<Model> = 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","import type {\n Query,\n SubscribeCallback,\n QuerySubscription,\n QueryResult,\n QueryParams,\n BaseModel,\n InsertType,\n AllowedKeyValue,\n} from 'liwi-store';\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{\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"],"names":["SubscribeStore","store","listeners","Set","keyPath","subscribe","callback","add","callSubscribed","action","forEach","listener","createQuerySingleItem","options","transformer","query","setSubscribeStore","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","Error","partialUpdateByKey","partialUpdate","partialUpdateOne","updated","partialUpdateMany","cursor","model","push","deleteByKey","deleteOne","deleteMany","toArray","count","overrideStore","connection","AbstractSubscribableStoreQuery","changeParams","changePartialParams","_subscribeStore","getSubscribeStore","fetchAndSubscribe","_subscribe"],"mappings":"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"}
@@ -1,49 +1,40 @@
1
1
  /* eslint-disable max-lines */
2
+
2
3
  class SubscribeStore {
3
4
  listeners = new Set();
4
-
5
5
  constructor(store) {
6
6
  this.store = store;
7
7
  this.keyPath = store.keyPath;
8
8
  }
9
-
10
9
  get connection() {
11
10
  return this.store.connection;
12
11
  }
13
-
14
12
  subscribe(callback) {
15
13
  this.listeners.add(callback);
16
14
  return () => this.listeners.delete(callback);
17
15
  }
18
-
19
16
  callSubscribed(action) {
20
17
  this.listeners.forEach(listener => listener(action));
21
18
  }
22
-
23
19
  createQuerySingleItem(options, transformer) {
24
20
  const query = this.store.createQuerySingleItem(options, transformer);
25
21
  query.setSubscribeStore(this);
26
22
  return query;
27
23
  }
28
-
29
24
  createQueryCollection(options, transformer) {
30
25
  const query = this.store.createQueryCollection(options, transformer);
31
26
  query.setSubscribeStore(this);
32
27
  return query;
33
28
  }
34
-
35
29
  findAll(criteria, sort) {
36
30
  return this.store.findAll(criteria, sort);
37
31
  }
38
-
39
32
  findByKey(key, criteria) {
40
33
  return this.store.findByKey(key, criteria);
41
34
  }
42
-
43
35
  findOne(criteria, sort) {
44
36
  return this.store.findOne(criteria, sort);
45
37
  }
46
-
47
38
  async insertOne(object) {
48
39
  const inserted = await this.store.insertOne(object);
49
40
  this.callSubscribed({
@@ -52,7 +43,6 @@ class SubscribeStore {
52
43
  });
53
44
  return inserted;
54
45
  }
55
-
56
46
  async replaceOne(object) {
57
47
  const replaced = await this.store.replaceOne(object);
58
48
  this.callSubscribed({
@@ -61,7 +51,6 @@ class SubscribeStore {
61
51
  });
62
52
  return replaced;
63
53
  }
64
-
65
54
  async replaceSeveral(objects) {
66
55
  const replacedObjects = await this.store.replaceSeveral(objects);
67
56
  this.callSubscribed({
@@ -70,15 +59,12 @@ class SubscribeStore {
70
59
  });
71
60
  return replacedObjects;
72
61
  }
73
-
74
62
  async upsertOne(object, setOnInsertPartialObject) {
75
63
  const result = await this.upsertOneWithInfo(object, setOnInsertPartialObject);
76
64
  return result.object;
77
65
  }
78
-
79
66
  async upsertOneWithInfo(object, setOnInsertPartialObject) {
80
67
  const upsertedWithInfo = await this.store.upsertOneWithInfo(object, setOnInsertPartialObject);
81
-
82
68
  if (upsertedWithInfo.inserted) {
83
69
  this.callSubscribed({
84
70
  type: 'inserted',
@@ -87,17 +73,14 @@ class SubscribeStore {
87
73
  } else {
88
74
  throw new Error('TODO');
89
75
  }
90
-
91
76
  return upsertedWithInfo;
92
77
  }
93
-
94
78
  async partialUpdateByKey(key, partialUpdate, criteria) {
95
79
  return this.partialUpdateOne(await this.findOne({
96
80
  [this.store.keyPath]: key,
97
81
  ...criteria
98
82
  }), partialUpdate);
99
83
  }
100
-
101
84
  async partialUpdateOne(object, partialUpdate) {
102
85
  const updated = await this.store.partialUpdateOne(object, partialUpdate);
103
86
  this.callSubscribed({
@@ -106,7 +89,6 @@ class SubscribeStore {
106
89
  });
107
90
  return updated;
108
91
  }
109
-
110
92
  async partialUpdateMany(criteria, partialUpdate) {
111
93
  const cursor = await this.store.cursor(criteria);
112
94
  const changes = [];
@@ -120,11 +102,9 @@ class SubscribeStore {
120
102
  changes
121
103
  });
122
104
  }
123
-
124
105
  async deleteByKey(key, criteria) {
125
106
  return this.deleteOne(await this.findByKey(key, criteria));
126
107
  }
127
-
128
108
  async deleteOne(object) {
129
109
  await this.store.deleteOne(object);
130
110
  this.callSubscribed({
@@ -132,7 +112,6 @@ class SubscribeStore {
132
112
  prev: [object]
133
113
  });
134
114
  }
135
-
136
115
  async deleteMany(criteria) {
137
116
  const cursor = await this.store.cursor(criteria);
138
117
  const prev = await cursor.toArray();
@@ -142,48 +121,38 @@ class SubscribeStore {
142
121
  prev
143
122
  });
144
123
  }
145
-
146
124
  async count(criteria) {
147
125
  return this.store.count(criteria);
148
126
  }
149
-
150
127
  async cursor(criteria, sort) {
151
128
  const cursor = await this.store.cursor(criteria, sort);
152
129
  cursor.overrideStore(this);
153
130
  return cursor;
154
131
  }
155
-
156
132
  }
157
133
 
158
134
  class AbstractSubscribableStoreQuery {
159
135
  changeParams() {
160
136
  throw new Error('Method not supported. Please create a new query.');
161
137
  }
162
-
163
138
  changePartialParams() {
164
139
  throw new Error('Method not supported. Please create a new query.');
165
140
  }
166
-
167
141
  setSubscribeStore(store) {
168
142
  this._subscribeStore = store;
169
143
  }
170
-
171
144
  getSubscribeStore() {
172
145
  if (!this._subscribeStore) {
173
146
  throw new Error('_subscribeStore is not initialized');
174
147
  }
175
-
176
148
  return this._subscribeStore;
177
149
  }
178
-
179
150
  fetchAndSubscribe(callback) {
180
151
  return this._subscribe(callback, true);
181
152
  }
182
-
183
153
  subscribe(callback) {
184
154
  return this._subscribe(callback, false);
185
155
  }
186
-
187
156
  }
188
157
 
189
158
  export { AbstractSubscribableStoreQuery, SubscribeStore };
@@ -1 +1 @@
1
- {"version":3,"file":"index-browsermodern.es.js","sources":["../src/SubscribeStore.ts","../src/AbstractSubscribableStoreQuery.ts"],"sourcesContent":["/* 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 BaseModel,\n InsertType,\n Update,\n Criteria,\n Sort,\n QueryOptions,\n Transformer,\n AllowedKeyValue,\n OptionalBaseModelKeysForInsert,\n} from 'liwi-store';\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{\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(\n key: KeyValue,\n criteria?: Criteria<Model>,\n ): 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?: Update<Model>['$setOnInsert'],\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?: Update<Model>['$setOnInsert'],\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: KeyValue,\n partialUpdate: Update<Model>,\n criteria?: Criteria<Model>,\n ): Promise<Model> {\n return this.partialUpdateOne(\n (await this.findOne({\n [this.store.keyPath]: key,\n ...criteria,\n } as Criteria<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: KeyValue, 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 count(criteria?: Criteria<Model>): Promise<number> {\n return this.store.count(criteria);\n }\n\n async cursor<Result extends Partial<Model> = 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","import type {\n Query,\n SubscribeCallback,\n QuerySubscription,\n QueryResult,\n QueryParams,\n BaseModel,\n InsertType,\n AllowedKeyValue,\n} from 'liwi-store';\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{\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"],"names":["SubscribeStore","listeners","Set","constructor","store","keyPath","connection","subscribe","callback","add","delete","callSubscribed","action","forEach","listener","createQuerySingleItem","options","transformer","query","setSubscribeStore","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","Error","partialUpdateByKey","partialUpdate","partialUpdateOne","updated","partialUpdateMany","cursor","model","push","deleteByKey","deleteOne","deleteMany","toArray","count","overrideStore","AbstractSubscribableStoreQuery","changeParams","changePartialParams","_subscribeStore","getSubscribeStore","fetchAndSubscribe","_subscribe"],"mappings":"AAAA;AA4Be,MAAMA,cAAN,CAef;EAGmBC,SAAS,GAAyB,IAAIC,GAAJ,EAAzB,CAAA;;EAI1BC,WAAW,CAACC,KAAD,EAAe;IACxB,IAAKA,CAAAA,KAAL,GAAaA,KAAb,CAAA;AACA,IAAA,IAAA,CAAKC,OAAL,GAAeD,KAAK,CAACC,OAArB,CAAA;AACD,GAAA;;AAEa,EAAA,IAAVC,UAAU,GAAe;IAC3B,OAAO,IAAA,CAAKF,KAAL,CAAWE,UAAlB,CAAA;AACD,GAAA;;EAEDC,SAAS,CAACC,QAAD,EAAwC;AAC/C,IAAA,IAAA,CAAKP,SAAL,CAAeQ,GAAf,CAAmBD,QAAnB,CAAA,CAAA;AACA,IAAA,OAAO,MAAM,IAAKP,CAAAA,SAAL,CAAeS,MAAf,CAAsBF,QAAtB,CAAb,CAAA;AACD,GAAA;;EAEDG,cAAc,CAACC,MAAD,EAA+B;IAC3C,IAAKX,CAAAA,SAAL,CAAeY,OAAf,CAAwBC,QAAD,IAAcA,QAAQ,CAACF,MAAD,CAA7C,CAAA,CAAA;AACD,GAAA;;AAEDG,EAAAA,qBAAqB,CAInBC,OAJmB,EAKnBC,WALmB,EAanB;IACA,MAAMC,KAOL,GAAG,IAAA,CAAKd,KAAL,CAAWW,qBAAX,CAAiDC,OAAjD,EAA0DC,WAA1D,CAPJ,CAAA;IAQAC,KAAK,CAACC,iBAAN,CAAwB,IAAxB,CAAA,CAAA;AACA,IAAA,OAAOD,KAAP,CAAA;AACD,GAAA;;AAEDE,EAAAA,qBAAqB,CAInBJ,OAJmB,EAKnBC,WALmB,EAanB;IACA,MAAMC,KAOL,GAAG,IAAA,CAAKd,KAAL,CAAWgB,qBAAX,CAA+CJ,OAA/C,EAAwDC,WAAxD,CAPJ,CAAA;IAQAC,KAAK,CAACC,iBAAN,CAAwB,IAAxB,CAAA,CAAA;AACA,IAAA,OAAOD,KAAP,CAAA;AACD,GAAA;;AAEDG,EAAAA,OAAO,CAACC,QAAD,EAA6BC,IAA7B,EAAmE;IACxE,OAAO,IAAA,CAAKnB,KAAL,CAAWiB,OAAX,CAAmBC,QAAnB,EAA6BC,IAA7B,CAAP,CAAA;AACD,GAAA;;AAEDC,EAAAA,SAAS,CACPC,GADO,EAEPH,QAFO,EAGqB;IAC5B,OAAO,IAAA,CAAKlB,KAAL,CAAWoB,SAAX,CAAqBC,GAArB,EAA0BH,QAA1B,CAAP,CAAA;AACD,GAAA;;AAEDI,EAAAA,OAAO,CACLJ,QADK,EAELC,IAFK,EAGuB;IAC5B,OAAO,IAAA,CAAKnB,KAAL,CAAWsB,OAAX,CAAmBJ,QAAnB,EAA6BC,IAA7B,CAAP,CAAA;AACD,GAAA;;EAEc,MAATI,SAAS,CAACC,MAAD,EAA0C;IACvD,MAAMC,QAAQ,GAAG,MAAM,IAAA,CAAKzB,KAAL,CAAWuB,SAAX,CAAqBC,MAArB,CAAvB,CAAA;AACA,IAAA,IAAA,CAAKjB,cAAL,CAAoB;AAAEmB,MAAAA,IAAI,EAAE,UAAR;MAAoBC,IAAI,EAAE,CAACF,QAAD,CAAA;KAA9C,CAAA,CAAA;AACA,IAAA,OAAOA,QAAP,CAAA;AACD,GAAA;;EAEe,MAAVG,UAAU,CAACJ,MAAD,EAAgC;IAC9C,MAAMK,QAAQ,GAAG,MAAM,IAAA,CAAK7B,KAAL,CAAW4B,UAAX,CAAsBJ,MAAtB,CAAvB,CAAA;AACA,IAAA,IAAA,CAAKjB,cAAL,CAAoB;AAAEmB,MAAAA,IAAI,EAAE,SAAR;AAAmBI,MAAAA,OAAO,EAAE,CAAC,CAACN,MAAD,EAASK,QAAT,CAAD,CAAA;KAAhD,CAAA,CAAA;AACA,IAAA,OAAOA,QAAP,CAAA;AACD,GAAA;;EAEmB,MAAdE,cAAc,CAACC,OAAD,EAAqC;IACvD,MAAMC,eAAe,GAAG,MAAM,IAAA,CAAKjC,KAAL,CAAW+B,cAAX,CAA0BC,OAA1B,CAA9B,CAAA;AACA,IAAA,IAAA,CAAKzB,cAAL,CAAoB;AAClBmB,MAAAA,IAAI,EAAE,SADY;AAElBI,MAAAA,OAAO,EAAEE,OAAO,CAACE,GAAR,CAAY,CAACC,IAAD,EAAOC,KAAP,KAAiB,CAACD,IAAD,EAAOF,eAAe,CAACG,KAAD,CAAtB,CAA7B,CAAA;KAFX,CAAA,CAAA;AAIA,IAAA,OAAOH,eAAP,CAAA;AACD,GAAA;;AAEc,EAAA,MAATI,SAAS,CAGbb,MAHa,EAIbc,wBAJa,EAKG;IAChB,MAAMC,MAAM,GAAG,MAAM,IAAA,CAAKC,iBAAL,CACnBhB,MADmB,EAEnBc,wBAFmB,CAArB,CAAA;IAIA,OAAOC,MAAM,CAACf,MAAd,CAAA;AACD,GAAA;;AAEsB,EAAA,MAAjBgB,iBAAiB,CAGrBhB,MAHqB,EAIrBc,wBAJqB,EAKS;IAC9B,MAAMG,gBAAgB,GAAG,MAAM,IAAKzC,CAAAA,KAAL,CAAWwC,iBAAX,CAC7BhB,MAD6B,EAE7Bc,wBAF6B,CAA/B,CAAA;;IAIA,IAAIG,gBAAgB,CAAChB,QAArB,EAA+B;AAC7B,MAAA,IAAA,CAAKlB,cAAL,CAAoB;AAClBmB,QAAAA,IAAI,EAAE,UADY;AAElBC,QAAAA,IAAI,EAAE,CAACc,gBAAgB,CAACjB,MAAlB,CAAA;OAFR,CAAA,CAAA;AAID,KALD,MAKO;AACL,MAAA,MAAM,IAAIkB,KAAJ,CAAU,MAAV,CAAN,CAAA;AACD,KAAA;;AACD,IAAA,OAAOD,gBAAP,CAAA;AACD,GAAA;;AAEuB,EAAA,MAAlBE,kBAAkB,CACtBtB,GADsB,EAEtBuB,aAFsB,EAGtB1B,QAHsB,EAIN;AAChB,IAAA,OAAO,KAAK2B,gBAAL,CACJ,MAAM,IAAA,CAAKvB,OAAL,CAAa;AAClB,MAAA,CAAC,IAAKtB,CAAAA,KAAL,CAAWC,OAAZ,GAAsBoB,GADJ;MAElB,GAAGH,QAAAA;KAFE,CADF,EAKL0B,aALK,CAAP,CAAA;AAOD,GAAA;;AAEqB,EAAA,MAAhBC,gBAAgB,CACpBrB,MADoB,EAEpBoB,aAFoB,EAGJ;IAChB,MAAME,OAAO,GAAG,MAAM,IAAK9C,CAAAA,KAAL,CAAW6C,gBAAX,CAA4BrB,MAA5B,EAAoCoB,aAApC,CAAtB,CAAA;AACA,IAAA,IAAA,CAAKrC,cAAL,CAAoB;AAAEmB,MAAAA,IAAI,EAAE,SAAR;AAAmBI,MAAAA,OAAO,EAAE,CAAC,CAACN,MAAD,EAASsB,OAAT,CAAD,CAAA;KAAhD,CAAA,CAAA;AACA,IAAA,OAAOA,OAAP,CAAA;AACD,GAAA;;AAEsB,EAAA,MAAjBC,iBAAiB,CACrB7B,QADqB,EAErB0B,aAFqB,EAGN;IACf,MAAMI,MAAM,GAAG,MAAM,IAAA,CAAKhD,KAAL,CAAWgD,MAAX,CAAkB9B,QAAlB,CAArB,CAAA;IACA,MAAMY,OAAyB,GAAG,EAAlC,CAAA;AAEA,IAAA,MAAMkB,MAAM,CAACvC,OAAP,CAAe,MAAOwC,KAAP,IAAiB;MACpC,MAAM5B,GAAG,GAAG4B,KAAK,CAAC,KAAKjD,KAAL,CAAWC,OAAZ,CAAjB,CAAA;AACA,MAAA,MAAM6C,OAAO,GAAG,MAAM,IAAA,CAAK9C,KAAL,CAAW2C,kBAAX,CACpBtB,GADoB,EAEpBuB,aAFoB,EAGpB1B,QAHoB,CAAtB,CAAA;AAKAY,MAAAA,OAAO,CAACoB,IAAR,CAAa,CAACD,KAAD,EAAQH,OAAR,CAAb,CAAA,CAAA;AACD,KARK,CAAN,CAAA;AASA,IAAA,IAAA,CAAKvC,cAAL,CAAoB;AAAEmB,MAAAA,IAAI,EAAE,SAAR;AAAmBI,MAAAA,OAAAA;KAAvC,CAAA,CAAA;AACD,GAAA;;AAEgB,EAAA,MAAXqB,WAAW,CAAC9B,GAAD,EAAgBH,QAAhB,EAA2D;IAC1E,OAAO,IAAA,CAAKkC,SAAL,CAAgB,MAAM,IAAA,CAAKhC,SAAL,CAAeC,GAAf,EAAoBH,QAApB,CAAtB,CAAP,CAAA;AACD,GAAA;;EAEc,MAATkC,SAAS,CAAC5B,MAAD,EAA+B;AAC5C,IAAA,MAAM,KAAKxB,KAAL,CAAWoD,SAAX,CAAqB5B,MAArB,CAAN,CAAA;AACA,IAAA,IAAA,CAAKjB,cAAL,CAAoB;AAAEmB,MAAAA,IAAI,EAAE,SAAR;MAAmBS,IAAI,EAAE,CAACX,MAAD,CAAA;KAA7C,CAAA,CAAA;AACD,GAAA;;EAEe,MAAV6B,UAAU,CAACnC,QAAD,EAA2C;IACzD,MAAM8B,MAAM,GAAG,MAAM,IAAA,CAAKhD,KAAL,CAAWgD,MAAX,CAAkB9B,QAAlB,CAArB,CAAA;AACA,IAAA,MAAMiB,IAAa,GAAG,MAAMa,MAAM,CAACM,OAAP,EAA5B,CAAA;AACA,IAAA,MAAM,KAAKtD,KAAL,CAAWqD,UAAX,CAAsBnC,QAAtB,CAAN,CAAA;AACA,IAAA,IAAA,CAAKX,cAAL,CAAoB;AAAEmB,MAAAA,IAAI,EAAE,SAAR;AAAmBS,MAAAA,IAAAA;KAAvC,CAAA,CAAA;AACD,GAAA;;EAEU,MAALoB,KAAK,CAACrC,QAAD,EAA8C;AACvD,IAAA,OAAO,KAAKlB,KAAL,CAAWuD,KAAX,CAAiBrC,QAAjB,CAAP,CAAA;AACD,GAAA;;AAEW,EAAA,MAAN8B,MAAM,CACV9B,QADU,EAEVC,IAFU,EAGkD;IAC5D,MAAM6B,MAAM,GAAG,MAAM,IAAKhD,CAAAA,KAAL,CAAWgD,MAAX,CAA0B9B,QAA1B,EAAoCC,IAApC,CAArB,CAAA;IACA6B,MAAM,CAACQ,aAAP,CAAqB,IAArB,CAAA,CAAA;AACA,IAAA,OAAOR,MAAP,CAAA;AACD,GAAA;;AA3NH;;AC/Be,MAAeS,8BAAf,CAQf;AACEC,EAAAA,YAAY,GAAwB;AAClC,IAAA,MAAM,IAAIhB,KAAJ,CAAU,kDAAV,CAAN,CAAA;AACD,GAAA;;AAEDiB,EAAAA,mBAAmB,GAEV;AACP,IAAA,MAAM,IAAIjB,KAAJ,CAAU,kDAAV,CAAN,CAAA;AACD,GAAA;;EAWD3B,iBAAiB,CACff,KADe,EAET;IACN,IAAK4D,CAAAA,eAAL,GAAuB5D,KAAvB,CAAA;AACD,GAAA;;AAED6D,EAAAA,iBAAiB,GAOf;IACA,IAAI,CAAC,IAAKD,CAAAA,eAAV,EAA2B;AACzB,MAAA,MAAM,IAAIlB,KAAJ,CAAU,oCAAV,CAAN,CAAA;AACD,KAAA;;AACD,IAAA,OAAO,KAAKkB,eAAZ,CAAA;AACD,GAAA;;EAMDE,iBAAiB,CACf1D,QADe,EAEI;AACnB,IAAA,OAAO,KAAK2D,UAAL,CAAgB3D,QAAhB,EAA0B,IAA1B,CAAP,CAAA;AACD,GAAA;;EAEDD,SAAS,CAACC,QAAD,EAAmE;AAC1E,IAAA,OAAO,KAAK2D,UAAL,CAAgB3D,QAAhB,EAA0B,KAA1B,CAAP,CAAA;AACD,GAAA;;AApDH;;;;"}
1
+ {"version":3,"file":"index-browsermodern.es.js","sources":["../src/SubscribeStore.ts","../src/AbstractSubscribableStoreQuery.ts"],"sourcesContent":["/* 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 BaseModel,\n InsertType,\n Update,\n Criteria,\n Sort,\n QueryOptions,\n Transformer,\n AllowedKeyValue,\n OptionalBaseModelKeysForInsert,\n} from 'liwi-store';\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{\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(\n key: KeyValue,\n criteria?: Criteria<Model>,\n ): 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?: Update<Model>['$setOnInsert'],\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?: Update<Model>['$setOnInsert'],\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: KeyValue,\n partialUpdate: Update<Model>,\n criteria?: Criteria<Model>,\n ): Promise<Model> {\n return this.partialUpdateOne(\n (await this.findOne({\n [this.store.keyPath]: key,\n ...criteria,\n } as Criteria<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: KeyValue, 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 count(criteria?: Criteria<Model>): Promise<number> {\n return this.store.count(criteria);\n }\n\n async cursor<Result extends Partial<Model> = 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","import type {\n Query,\n SubscribeCallback,\n QuerySubscription,\n QueryResult,\n QueryParams,\n BaseModel,\n InsertType,\n AllowedKeyValue,\n} from 'liwi-store';\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{\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"],"names":["SubscribeStore","listeners","Set","constructor","store","keyPath","connection","subscribe","callback","add","delete","callSubscribed","action","forEach","listener","createQuerySingleItem","options","transformer","query","setSubscribeStore","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","Error","partialUpdateByKey","partialUpdate","partialUpdateOne","updated","partialUpdateMany","cursor","model","push","deleteByKey","deleteOne","deleteMany","toArray","count","overrideStore","AbstractSubscribableStoreQuery","changeParams","changePartialParams","_subscribeStore","getSubscribeStore","fetchAndSubscribe","_subscribe"],"mappings":"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"}
@@ -1,49 +1,40 @@
1
1
  /* eslint-disable max-lines */
2
+
2
3
  class SubscribeStore {
3
4
  listeners = new Set();
4
-
5
5
  constructor(store) {
6
6
  this.store = store;
7
7
  this.keyPath = store.keyPath;
8
8
  }
9
-
10
9
  get connection() {
11
10
  return this.store.connection;
12
11
  }
13
-
14
12
  subscribe(callback) {
15
13
  this.listeners.add(callback);
16
14
  return () => this.listeners.delete(callback);
17
15
  }
18
-
19
16
  callSubscribed(action) {
20
17
  this.listeners.forEach(listener => listener(action));
21
18
  }
22
-
23
19
  createQuerySingleItem(options, transformer) {
24
20
  const query = this.store.createQuerySingleItem(options, transformer);
25
21
  query.setSubscribeStore(this);
26
22
  return query;
27
23
  }
28
-
29
24
  createQueryCollection(options, transformer) {
30
25
  const query = this.store.createQueryCollection(options, transformer);
31
26
  query.setSubscribeStore(this);
32
27
  return query;
33
28
  }
34
-
35
29
  findAll(criteria, sort) {
36
30
  return this.store.findAll(criteria, sort);
37
31
  }
38
-
39
32
  findByKey(key, criteria) {
40
33
  return this.store.findByKey(key, criteria);
41
34
  }
42
-
43
35
  findOne(criteria, sort) {
44
36
  return this.store.findOne(criteria, sort);
45
37
  }
46
-
47
38
  async insertOne(object) {
48
39
  const inserted = await this.store.insertOne(object);
49
40
  this.callSubscribed({
@@ -52,7 +43,6 @@ class SubscribeStore {
52
43
  });
53
44
  return inserted;
54
45
  }
55
-
56
46
  async replaceOne(object) {
57
47
  const replaced = await this.store.replaceOne(object);
58
48
  this.callSubscribed({
@@ -61,7 +51,6 @@ class SubscribeStore {
61
51
  });
62
52
  return replaced;
63
53
  }
64
-
65
54
  async replaceSeveral(objects) {
66
55
  const replacedObjects = await this.store.replaceSeveral(objects);
67
56
  this.callSubscribed({
@@ -70,15 +59,12 @@ class SubscribeStore {
70
59
  });
71
60
  return replacedObjects;
72
61
  }
73
-
74
62
  async upsertOne(object, setOnInsertPartialObject) {
75
63
  const result = await this.upsertOneWithInfo(object, setOnInsertPartialObject);
76
64
  return result.object;
77
65
  }
78
-
79
66
  async upsertOneWithInfo(object, setOnInsertPartialObject) {
80
67
  const upsertedWithInfo = await this.store.upsertOneWithInfo(object, setOnInsertPartialObject);
81
-
82
68
  if (upsertedWithInfo.inserted) {
83
69
  this.callSubscribed({
84
70
  type: 'inserted',
@@ -87,17 +73,14 @@ class SubscribeStore {
87
73
  } else {
88
74
  throw new Error('TODO');
89
75
  }
90
-
91
76
  return upsertedWithInfo;
92
77
  }
93
-
94
78
  async partialUpdateByKey(key, partialUpdate, criteria) {
95
79
  return this.partialUpdateOne(await this.findOne({
96
80
  [this.store.keyPath]: key,
97
81
  ...criteria
98
82
  }), partialUpdate);
99
83
  }
100
-
101
84
  async partialUpdateOne(object, partialUpdate) {
102
85
  const updated = await this.store.partialUpdateOne(object, partialUpdate);
103
86
  this.callSubscribed({
@@ -106,7 +89,6 @@ class SubscribeStore {
106
89
  });
107
90
  return updated;
108
91
  }
109
-
110
92
  async partialUpdateMany(criteria, partialUpdate) {
111
93
  const cursor = await this.store.cursor(criteria);
112
94
  const changes = [];
@@ -120,11 +102,9 @@ class SubscribeStore {
120
102
  changes
121
103
  });
122
104
  }
123
-
124
105
  async deleteByKey(key, criteria) {
125
106
  return this.deleteOne(await this.findByKey(key, criteria));
126
107
  }
127
-
128
108
  async deleteOne(object) {
129
109
  await this.store.deleteOne(object);
130
110
  this.callSubscribed({
@@ -132,7 +112,6 @@ class SubscribeStore {
132
112
  prev: [object]
133
113
  });
134
114
  }
135
-
136
115
  async deleteMany(criteria) {
137
116
  const cursor = await this.store.cursor(criteria);
138
117
  const prev = await cursor.toArray();
@@ -142,49 +121,39 @@ class SubscribeStore {
142
121
  prev
143
122
  });
144
123
  }
145
-
146
124
  async count(criteria) {
147
125
  return this.store.count(criteria);
148
126
  }
149
-
150
127
  async cursor(criteria, sort) {
151
128
  const cursor = await this.store.cursor(criteria, sort);
152
129
  cursor.overrideStore(this);
153
130
  return cursor;
154
131
  }
155
-
156
132
  }
157
133
 
158
134
  class AbstractSubscribableStoreQuery {
159
135
  changeParams() {
160
136
  throw new Error('Method not supported. Please create a new query.');
161
137
  }
162
-
163
138
  changePartialParams() {
164
139
  throw new Error('Method not supported. Please create a new query.');
165
140
  }
166
-
167
141
  setSubscribeStore(store) {
168
142
  this._subscribeStore = store;
169
143
  }
170
-
171
144
  getSubscribeStore() {
172
145
  if (!this._subscribeStore) {
173
146
  throw new Error('_subscribeStore is not initialized');
174
147
  }
175
-
176
148
  return this._subscribeStore;
177
149
  }
178
-
179
150
  fetchAndSubscribe(callback) {
180
151
  return this._subscribe(callback, true);
181
152
  }
182
-
183
153
  subscribe(callback) {
184
154
  return this._subscribe(callback, false);
185
155
  }
186
-
187
156
  }
188
157
 
189
158
  export { AbstractSubscribableStoreQuery, SubscribeStore };
190
- //# sourceMappingURL=index-node14.mjs.map
159
+ //# sourceMappingURL=index-node16.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index-node14.mjs","sources":["../src/SubscribeStore.ts","../src/AbstractSubscribableStoreQuery.ts"],"sourcesContent":["/* 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 BaseModel,\n InsertType,\n Update,\n Criteria,\n Sort,\n QueryOptions,\n Transformer,\n AllowedKeyValue,\n OptionalBaseModelKeysForInsert,\n} from 'liwi-store';\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{\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(\n key: KeyValue,\n criteria?: Criteria<Model>,\n ): 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?: Update<Model>['$setOnInsert'],\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?: Update<Model>['$setOnInsert'],\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: KeyValue,\n partialUpdate: Update<Model>,\n criteria?: Criteria<Model>,\n ): Promise<Model> {\n return this.partialUpdateOne(\n (await this.findOne({\n [this.store.keyPath]: key,\n ...criteria,\n } as Criteria<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: KeyValue, 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 count(criteria?: Criteria<Model>): Promise<number> {\n return this.store.count(criteria);\n }\n\n async cursor<Result extends Partial<Model> = 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","import type {\n Query,\n SubscribeCallback,\n QuerySubscription,\n QueryResult,\n QueryParams,\n BaseModel,\n InsertType,\n AllowedKeyValue,\n} from 'liwi-store';\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{\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"],"names":["SubscribeStore","listeners","Set","constructor","store","keyPath","connection","subscribe","callback","add","delete","callSubscribed","action","forEach","listener","createQuerySingleItem","options","transformer","query","setSubscribeStore","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","Error","partialUpdateByKey","partialUpdate","partialUpdateOne","updated","partialUpdateMany","cursor","model","push","deleteByKey","deleteOne","deleteMany","toArray","count","overrideStore","AbstractSubscribableStoreQuery","changeParams","changePartialParams","_subscribeStore","getSubscribeStore","fetchAndSubscribe","_subscribe"],"mappings":"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"}
1
+ {"version":3,"file":"index-node16.mjs","sources":["../src/SubscribeStore.ts","../src/AbstractSubscribableStoreQuery.ts"],"sourcesContent":["/* 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 BaseModel,\n InsertType,\n Update,\n Criteria,\n Sort,\n QueryOptions,\n Transformer,\n AllowedKeyValue,\n OptionalBaseModelKeysForInsert,\n} from 'liwi-store';\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{\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(\n key: KeyValue,\n criteria?: Criteria<Model>,\n ): 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?: Update<Model>['$setOnInsert'],\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?: Update<Model>['$setOnInsert'],\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: KeyValue,\n partialUpdate: Update<Model>,\n criteria?: Criteria<Model>,\n ): Promise<Model> {\n return this.partialUpdateOne(\n (await this.findOne({\n [this.store.keyPath]: key,\n ...criteria,\n } as Criteria<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: KeyValue, 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 count(criteria?: Criteria<Model>): Promise<number> {\n return this.store.count(criteria);\n }\n\n async cursor<Result extends Partial<Model> = 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","import type {\n Query,\n SubscribeCallback,\n QuerySubscription,\n QueryResult,\n QueryParams,\n BaseModel,\n InsertType,\n AllowedKeyValue,\n} from 'liwi-store';\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{\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"],"names":["SubscribeStore","listeners","Set","constructor","store","keyPath","connection","subscribe","callback","add","delete","callSubscribed","action","forEach","listener","createQuerySingleItem","options","transformer","query","setSubscribeStore","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","Error","partialUpdateByKey","partialUpdate","partialUpdateOne","updated","partialUpdateMany","cursor","model","push","deleteByKey","deleteOne","deleteMany","toArray","count","overrideStore","AbstractSubscribableStoreQuery","changeParams","changePartialParams","_subscribeStore","getSubscribeStore","fetchAndSubscribe","_subscribe"],"mappings":"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"}