@fireflysemantics/slice 17.0.12 → 17.0.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -5,6 +5,7 @@
5
5
  ## TOC
6
6
 
7
7
  - [Overview](#overview)
8
+ - [Why Slice](#why-slice)
8
9
  - [Install](#install)
9
10
  - [Object Store Core Use Cases](#object-store-core-use-cases)
10
11
  - [Entity Store Core Use Cases](#entity-store-core-use-cases)
@@ -18,8 +19,7 @@ Lightweight Javascript Reactive State Management for Angular Applications.
18
19
  The API is designed to be as minimal as possible and should deliver the same features as other comparable frameworks with about 1/3 the lines of code.
19
20
 
20
21
  It offers two types of reactive data stores:
21
- - Entity stores (EStore<E>) for structured entity like data (Customer, Product, User, ...)
22
- - Entity stores can be "Live filtered" by adding slices. For example separating Todo entities into complete and incomplete compartments. Slices are also obserable.
22
+ - Entity stores (EStore<E>) for structured entity like data (Customer, Product, User, ...). Entity stores can be "Live filtered" by adding slices. For example separating Todo entities into complete and incomplete compartments. Slices are also obserable.
23
23
  - Object store (Key value store) for unstructured data
24
24
 
25
25
  Even though Angular is used for prototype applications, it should work well in general for:
@@ -30,6 +30,42 @@ Even though Angular is used for prototype applications, it should work well in g
30
30
 
31
31
  If you like the [@fireflysemantics/slice API](https://fireflysemantics.github.io/slice/doc/) please star our [Github Repository](https://github.com/fireflysemantics/slice).
32
32
 
33
+ # Why Slice
34
+
35
+ We built Slice to make sharing state between Angular components, services, and other directives simple and in the process we targeted common use cases that should be handled by a state manager, such as updating a shopping cart count, emitting a search query, tracking active state, etc.
36
+
37
+ For performing state CRUD operations Slice uses a REST like API, which should be a familiar paradigm for most developers.
38
+
39
+ For example a `Todo` entity store tracking todo entities can create, read, update, and delete `Todo` entities as follows (This is just a tiny example of all the capabilities Slice has).
40
+
41
+ ```
42
+ let store: EStore<Todo> = new EStore<Todo>();
43
+ //============================================
44
+ // Post (Create) a Todo instance in the store
45
+ //============================================
46
+ store.post(todo);
47
+ //============================================
48
+ // Snapshot of all the Todo entities in the
49
+ // store
50
+ //============================================
51
+ let snapshot: Todo[] = store.allSnapshot();
52
+ //============================================
53
+ // Observe the array of Todo instances in the
54
+ // store
55
+ //============================================
56
+ store.obs.subscribe((todos: Todo[]) => {
57
+ console.log(`The store is initialized with these Todo entities ${todos}`);
58
+ });
59
+ //============================================
60
+ // Delete a Todo instance in the store
61
+ //============================================
62
+ todo.complete = false;
63
+ store.put(todo);
64
+ //============================================
65
+ // Delete a Todo instance in the store
66
+ //============================================
67
+ store.delete(todo);
68
+ ```
33
69
 
34
70
  # Install
35
71
 
@@ -142,4 +142,4 @@ export class OStore {
142
142
  return Array.from(this.entries.values()).length;
143
143
  }
144
144
  }
145
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiT1N0b3JlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvc2xpY2Uvc3JjL2xpYi9PU3RvcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGFBQWEsRUFBYyxNQUFNLE1BQU0sQ0FBQztBQTJCakQsTUFBTSxPQUFPLE1BQU07SUFPakIsWUFBWSxLQUFrQjtRQTJCOUI7OztXQUdHO1FBQ0ksWUFBTyxHQUFrQixJQUFJLEdBQUcsRUFBRSxDQUFDO1FBRTFDOztXQUVHO1FBQ0ssYUFBUSxHQUFpQyxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBbkN6RCxJQUFJLEtBQUssRUFBRTtZQUNULElBQUksQ0FBQyxDQUFDLEdBQU0sS0FBSyxDQUFDO1lBQ2xCLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDaEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO2dCQUNqQixNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFrQixDQUFDO2dCQUN0QyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQzFCLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUM5QixDQUFDLENBQUMsQ0FBQztTQUNKO0lBQ0gsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxLQUFLO1FBQ1YsSUFBSSxJQUFJLENBQUMsQ0FBQyxFQUFFO1lBQ1YsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDakMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO2dCQUNqQixNQUFNLEdBQUcsR0FBa0IsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDckMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ25ELENBQUMsQ0FBQyxDQUFDO1NBQ0o7SUFDSCxDQUFDO0lBYUQ7Ozs7Ozs7T0FPRztJQUNLLElBQUksQ0FBQyxHQUFrQixFQUFFLEtBQVU7UUFDekMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzdCLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzdDLGdEQUFnRDtRQUNoRCwwQkFBMEI7UUFDMUIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDdkMsSUFBSSxPQUFPLEVBQUU7WUFDWCxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ3JCO0lBQ0gsQ0FBQztJQUNEOzs7OztPQUtHO0lBQ0ksR0FBRyxDQUFDLEdBQVEsRUFBRSxLQUFVO1FBQzdCLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM3QixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN2QyxJQUFJLE9BQU8sRUFBRTtZQUNYLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDckI7SUFDSCxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksTUFBTSxDQUFDLEdBQVE7UUFDcEIsNkNBQTZDO1FBQzdDLG1CQUFtQjtRQUNuQiw2Q0FBNkM7UUFDN0MsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDekIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDdkMsSUFBSSxPQUFPLEVBQUU7WUFDWCxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1NBQ3pCO0lBQ0gsQ0FBQztJQUVEOzs7Ozs7OztPQVFHO0lBQ0ksS0FBSztRQUNWLEtBQUssSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUNqQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ3BCO0lBQ0gsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksT0FBTyxDQUFDLEdBQVE7UUFDckIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUM7WUFDM0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBRSxDQUFDLFlBQVksRUFBRTtZQUN4QyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBQ2hCLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNJLE1BQU0sQ0FBQyxHQUFRO1FBQ3BCLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSxRQUFRLENBQUMsR0FBUTtRQUN0QixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFFRDs7O09BR0c7SUFDSSxPQUFPO1FBQ1osT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksS0FBSztRQUNWLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDO0lBQ2xELENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFJlcGxheVN1YmplY3QsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcblxuLyoqXG4gKiBJbml0aWFsaXplIGh0ZSBzdG9yZSB3aXRoIHRoaXMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVmFsdWVSZXNldCB7XG4gIHZhbHVlOiBhbnk7XG4gIHJlc2V0PzogYW55O1xufVxuXG4vKipcbiAqIE9TdG9yZSBLZXkgVmFsdWUgUmVzZXRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPYnNWYWx1ZVJlc2V0IHtcbiAgdmFsdWU6IGFueTtcbiAgcmVzZXQ/OiBhbnk7XG4gIG9icz86IE9ic2VydmFibGU8YW55Pjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBLZXlPYnNWYWx1ZVJlc2V0IHtcbiAgW2tleTogc3RyaW5nXTogT2JzVmFsdWVSZXNldDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBPU3RvcmVTdGFydCB7XG4gIFtrZXk6IHN0cmluZ106IFZhbHVlUmVzZXQ7XG59XG5cbmV4cG9ydCBjbGFzcyBPU3RvcmU8RSBleHRlbmRzIEtleU9ic1ZhbHVlUmVzZXQ+IHtcbiAgLyoqXG4gICAqIFN0YXJ0IGtleXMgYW5kIHZhbHVlc1xuICAgKiBwYXNzZWQgaW4gdmlhIGNvbnN0cnVjdG9yLlxuICAgKi9cbiAgcHVibGljIFMhOiBFO1xuXG4gIGNvbnN0cnVjdG9yKHN0YXJ0OiBPU3RvcmVTdGFydCkge1xuICAgIGlmIChzdGFydCkge1xuICAgICAgdGhpcy5TID0gPEU+c3RhcnQ7XG4gICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoc3RhcnQpO1xuICAgICAga2V5cy5mb3JFYWNoKChrKSA9PiB7XG4gICAgICAgIGNvbnN0IG92ciA9IHN0YXJ0W2tdIGFzIE9ic1ZhbHVlUmVzZXQ7XG4gICAgICAgIHRoaXMucG9zdChvdnIsIG92ci52YWx1ZSk7XG4gICAgICAgIG92ci5vYnMgPSB0aGlzLm9ic2VydmUob3ZyKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNldCB0aGUgc3RhdGUgb2YgdGhlIE9TdG9yZSB0byB0aGVcbiAgICogdmFsdWVzIG9yIHJlc2V0IHByb3ZpZGVkIGluIHRoZSBjb25zdHJ1Y3RvclxuICAgKiB7QGxpbmsgT1N0b3JlU3RhcnR9IGluc3RhbmNlLlxuICAgKi9cbiAgcHVibGljIHJlc2V0KCkge1xuICAgIGlmICh0aGlzLlMpIHtcbiAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyh0aGlzLlMpO1xuICAgICAga2V5cy5mb3JFYWNoKChrKSA9PiB7XG4gICAgICAgIGNvbnN0IG92cjogT2JzVmFsdWVSZXNldCA9IHRoaXMuU1trXTtcbiAgICAgICAgdGhpcy5wdXQob3ZyLCBvdnIucmVzZXQgPyBvdnIucmVzZXQgOiBvdnIudmFsdWUpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE1hcCBvZiBLZXkgVmFsdWUgcGFpciBlbnRyaWVzXG4gICAqIGNvbnRhaW5pbmcgdmFsdWVzIHN0b3JlIGluIHRoaXMgc3RvcmUuXG4gICAqL1xuICBwdWJsaWMgZW50cmllczogTWFwPGFueSwgYW55PiA9IG5ldyBNYXAoKTtcblxuICAvKipcbiAgICogTWFwIG9mIHJlcGxheSBzdWJqZWN0IGlkIHRvIGBSZXBsYXlTdWJqZWN0YCBpbnN0YW5jZS5cbiAgICovXG4gIHByaXZhdGUgc3ViamVjdHM6IE1hcDxhbnksIFJlcGxheVN1YmplY3Q8YW55Pj4gPSBuZXcgTWFwKCk7XG5cbiAgLyoqXG4gICAqIFNldCBjcmVhdGUgYSBrZXkgdmFsdWUgcGFpciBlbnRyeSBhbmQgY3JlYXRlcyBhXG4gICAqIGNvcnJlc3BvbmRpbmcgcmVwbGF5IHN1YmplY3QgaW5zdGFuY2UgdGhhdCB3aWxsXG4gICAqIGJlIHVzZWQgdG8gYnJvYWRjYXN0IHVwZGF0ZXMuXG4gICAqXG4gICAqIEBwYXJhbSBrZXkgVGhlIGtleSBpZGVudGlmeWluZyB0aGUgdmFsdWVcbiAgICogQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZVxuICAgKi9cbiAgcHJpdmF0ZSBwb3N0KGtleTogT2JzVmFsdWVSZXNldCwgdmFsdWU6IGFueSkge1xuICAgIHRoaXMuZW50cmllcy5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgdGhpcy5zdWJqZWN0cy5zZXQoa2V5LCBuZXcgUmVwbGF5U3ViamVjdCgxKSk7XG4gICAgLy9FbWl0IGltbWVkaWF0ZWx5IHNvIHRoYXQgT2JzZXJ2ZXJzIGNhbiByZWNlaXZlXG4gICAgLy90aGUgdmFsdWUgc3RyYWlnaHQgYXdheS5cbiAgICBjb25zdCBzdWJqZWN0ID0gdGhpcy5zdWJqZWN0cy5nZXQoa2V5KTtcbiAgICBpZiAoc3ViamVjdCkge1xuICAgICAgc3ViamVjdC5uZXh0KHZhbHVlKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFVwZGF0ZSBhIHZhbHVlIGFuZCBub3RpZnkgc3Vic2NyaWJlcnMuXG4gICAqXG4gICAqIEBwYXJhbSBrZXlcbiAgICogQHBhcmFtIHZhbHVlXG4gICAqL1xuICBwdWJsaWMgcHV0KGtleTogYW55LCB2YWx1ZTogYW55KSB7XG4gICAgdGhpcy5lbnRyaWVzLnNldChrZXksIHZhbHVlKTtcbiAgICBjb25zdCBzdWJqZWN0ID0gdGhpcy5zdWJqZWN0cy5nZXQoa2V5KTtcbiAgICBpZiAoc3ViamVjdCkge1xuICAgICAgc3ViamVjdC5uZXh0KHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlcyBib3RoIHRoZSB2YWx1ZSBlbnRyeSBhbmQgdGhlIGNvcnJlc3BvbmRpbmcge0BsaW5rIFJlcGxheVN1YmplY3R9LlxuICAgKiBXaWxsIHVuc3Vic2NyaWJlIHRoZSB7QGxpbmsgUmVwbGF5U3ViamVjdH0gcHJpb3IgdG8gZGVsZXRpbmcgaXQsXG4gICAqIHNldmVyaW5nIGNvbW11bmljYXRpb24gd2l0aCBjb3JyZXNwb25kaW5nIHtAbGluayBPYnNlcnZhYmxlfXMuXG4gICAqXG4gICAqIEBwYXJhbSBrZXlcbiAgICovXG4gIHB1YmxpYyBkZWxldGUoa2V5OiBhbnkpIHtcbiAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAvLyBEZWxldGUgdGhlIGVudHJ5XG4gICAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgdGhpcy5lbnRyaWVzLmRlbGV0ZShrZXkpO1xuICAgIGNvbnN0IHN1YmplY3QgPSB0aGlzLnN1YmplY3RzLmdldChrZXkpO1xuICAgIGlmIChzdWJqZWN0KSB7XG4gICAgICBzdWJqZWN0Lm5leHQodW5kZWZpbmVkKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2xlYXIgYWxsIGVudHJpZXMuICBcbiAgICogXG4gICAqIE5vdGUgdGhhdCBcbiAgICogdGhpcyB3aWxsIGNhbGwgZGVsZXRlIGZvciBvbiBhbGxcbiAgICoga2V5cyBkZWZpbmVkIHdoaWNoIGFsc28gYWxzbyBcbiAgICogdW5zdWJzY3JpYmVzIGFuZCBkZWxldGVzIFxuICAgKiBhbGwgdGhlIHNidWplY3RzLlxuICAgKi9cbiAgcHVibGljIGNsZWFyKCkge1xuICAgIGZvciAobGV0IGtleSBvZiB0aGlzLmVudHJpZXMua2V5cygpKSB7XG4gICAgICAgIHRoaXMuZGVsZXRlKGtleSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE9ic2VydmUgY2hhbmdlcyB0byB0aGUgdmFsdWVzLlxuICAgKlxuICAgKiBAcGFyYW0ga2V5XG4gICAqIEByZXR1cm4gQW4ge0BsaW5rIE9ic2VydmFibGV9IG9mIHRoZSB2YWx1ZVxuICAgKi9cbiAgcHVibGljIG9ic2VydmUoa2V5OiBhbnkpOiBPYnNlcnZhYmxlPGFueT4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnN1YmplY3RzLmdldChrZXkpXG4gICAgICA/IHRoaXMuc3ViamVjdHMuZ2V0KGtleSkhLmFzT2JzZXJ2YWJsZSgpXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayB3aGV0aGVyIGEgdmFsdWUgZXhpc3RzLlxuICAgKlxuICAgKiBAcGFyYW0ga2V5XG4gICAqIEByZXR1cm4gVHJ1ZSBpZiB0aGUgZW50cnkgZXhpc3RzICggSXMgbm90IG51bGwgb3IgdW5kZWZpbmVkICkgYW5kIGZhbHNlIG90aGVyd2lzZS5cbiAgICovXG4gIHB1YmxpYyBleGlzdHMoa2V5OiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLmVudHJpZXMuZ2V0KGtleSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmUgYSBzbmFwc2hvdCBvZiB0aGVcbiAgICogdmFsdWUuXG4gICAqXG4gICAqIEBwYXJhbSBrZXlcbiAgICogQHJldHVybiBBIHNuYXBzaG90IG9mIHRoZSB2YWx1ZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBrZXkuXG4gICAqL1xuICBwdWJsaWMgc25hcHNob3Qoa2V5OiBhbnkpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmVudHJpZXMuZ2V0KGtleSk7XG4gIH1cblxuICAvKipcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIHN0b3JlIGlzIGVtcHR5LlxuICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIHN0b3JlIGlzIGVtcHR5LCBmYWxzZSBvdGhlcndpc2UuXG4gICAqL1xuICBwdWJsaWMgaXNFbXB0eSgpIHtcbiAgICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLmVudHJpZXMudmFsdWVzKCkpLmxlbmd0aCA9PSAwO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIG51bWJlciBvZiBrZXkgdmFsdWUgcGFpcnMgY29udGFpbmVkLlxuICAgKlxuICAgKiBAcmV0dXJuIHRoZSBudW1iZXIgb2YgZW50cmllcyBpbiB0aGUgc3RvcmUuXG4gICAqL1xuICBwdWJsaWMgY291bnQoKSB7XG4gICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy5lbnRyaWVzLnZhbHVlcygpKS5sZW5ndGg7XG4gIH1cbn0iXX0=
145
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiT1N0b3JlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvc2xpY2Uvc3JjL2xpYi9PU3RvcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGFBQWEsRUFBYyxNQUFNLE1BQU0sQ0FBQztBQTJCakQsTUFBTSxPQUFPLE1BQU07SUFPakIsWUFBWSxLQUFrQjtRQTJCOUI7OztXQUdHO1FBQ0ksWUFBTyxHQUFrQixJQUFJLEdBQUcsRUFBRSxDQUFDO1FBRTFDOztXQUVHO1FBQ0ssYUFBUSxHQUFpQyxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBbkN6RCxJQUFJLEtBQUssRUFBRTtZQUNULElBQUksQ0FBQyxDQUFDLEdBQU0sS0FBSyxDQUFDO1lBQ2xCLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDaEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO2dCQUNqQixNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFrQixDQUFDO2dCQUN0QyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQzFCLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUUsQ0FBQztZQUMvQixDQUFDLENBQUMsQ0FBQztTQUNKO0lBQ0gsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxLQUFLO1FBQ1YsSUFBSSxJQUFJLENBQUMsQ0FBQyxFQUFFO1lBQ1YsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDakMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO2dCQUNqQixNQUFNLEdBQUcsR0FBa0IsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFD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QUFDO0lBQ2xELENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFJlcGxheVN1YmplY3QsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcblxuLyoqXG4gKiBJbml0aWFsaXplIGh0ZSBzdG9yZSB3aXRoIHRoaXMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVmFsdWVSZXNldCB7XG4gIHZhbHVlOiBhbnk7XG4gIHJlc2V0PzogYW55O1xufVxuXG4vKipcbiAqIE9TdG9yZSBLZXkgVmFsdWUgUmVzZXRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPYnNWYWx1ZVJlc2V0IHtcbiAgdmFsdWU6IGFueTtcbiAgcmVzZXQ/OiBhbnk7XG4gIG9iczogT2JzZXJ2YWJsZTxhbnk+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEtleU9ic1ZhbHVlUmVzZXQge1xuICBba2V5OiBzdHJpbmddOiBPYnNWYWx1ZVJlc2V0O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE9TdG9yZVN0YXJ0IHtcbiAgW2tleTogc3RyaW5nXTogVmFsdWVSZXNldDtcbn1cblxuZXhwb3J0IGNsYXNzIE9TdG9yZTxFIGV4dGVuZHMgS2V5T2JzVmFsdWVSZXNldD4ge1xuICAvKipcbiAgICogU3RhcnQga2V5cyBhbmQgdmFsdWVzXG4gICAqIHBhc3NlZCBpbiB2aWEgY29uc3RydWN0b3IuXG4gICAqL1xuICBwdWJsaWMgUyE6IEU7XG5cbiAgY29uc3RydWN0b3Ioc3RhcnQ6IE9TdG9yZVN0YXJ0KSB7XG4gICAgaWYgKHN0YXJ0KSB7XG4gICAgICB0aGlzLlMgPSA8RT5zdGFydDtcbiAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhzdGFydCk7XG4gICAgICBrZXlzLmZvckVhY2goKGspID0+IHtcbiAgICAgICAgY29uc3Qgb3ZyID0gc3RhcnRba10gYXMgT2JzVmFsdWVSZXNldDtcbiAgICAgICAgdGhpcy5wb3N0KG92ciwgb3ZyLnZhbHVlKTtcbiAgICAgICAgb3ZyLm9icyA9IHRoaXMub2JzZXJ2ZShvdnIpITtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNldCB0aGUgc3RhdGUgb2YgdGhlIE9TdG9yZSB0byB0aGVcbiAgICogdmFsdWVzIG9yIHJlc2V0IHByb3ZpZGVkIGluIHRoZSBjb25zdHJ1Y3RvclxuICAgKiB7QGxpbmsgT1N0b3JlU3RhcnR9IGluc3RhbmNlLlxuICAgKi9cbiAgcHVibGljIHJlc2V0KCkge1xuICAgIGlmICh0aGlzLlMpIHtcbiAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyh0aGlzLlMpO1xuICAgICAga2V5cy5mb3JFYWNoKChrKSA9PiB7XG4gICAgICAgIGNvbnN0IG92cjogT2JzVmFsdWVSZXNldCA9IHRoaXMuU1trXTtcbiAgICAgICAgdGhpcy5wdXQob3ZyLCBvdnIucmVzZXQgPyBvdnIucmVzZXQgOiBvdnIudmFsdWUpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE1hcCBvZiBLZXkgVmFsdWUgcGFpciBlbnRyaWVzXG4gICAqIGNvbnRhaW5pbmcgdmFsdWVzIHN0b3JlIGluIHRoaXMgc3RvcmUuXG4gICAqL1xuICBwdWJsaWMgZW50cmllczogTWFwPGFueSwgYW55PiA9IG5ldyBNYXAoKTtcblxuICAvKipcbiAgICogTWFwIG9mIHJlcGxheSBzdWJqZWN0IGlkIHRvIGBSZXBsYXlTdWJqZWN0YCBpbnN0YW5jZS5cbiAgICovXG4gIHByaXZhdGUgc3ViamVjdHM6IE1hcDxhbnksIFJlcGxheVN1YmplY3Q8YW55Pj4gPSBuZXcgTWFwKCk7XG5cbiAgLyoqXG4gICAqIFNldCBjcmVhdGUgYSBrZXkgdmFsdWUgcGFpciBlbnRyeSBhbmQgY3JlYXRlcyBhXG4gICAqIGNvcnJlc3BvbmRpbmcgcmVwbGF5IHN1YmplY3QgaW5zdGFuY2UgdGhhdCB3aWxsXG4gICAqIGJlIHVzZWQgdG8gYnJvYWRjYXN0IHVwZGF0ZXMuXG4gICAqXG4gICAqIEBwYXJhbSBrZXkgVGhlIGtleSBpZGVudGlmeWluZyB0aGUgdmFsdWVcbiAgICogQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZVxuICAgKi9cbiAgcHJpdmF0ZSBwb3N0KGtleTogT2JzVmFsdWVSZXNldCwgdmFsdWU6IGFueSkge1xuICAgIHRoaXMuZW50cmllcy5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgdGhpcy5zdWJqZWN0cy5zZXQoa2V5LCBuZXcgUmVwbGF5U3ViamVjdCgxKSk7XG4gICAgLy9FbWl0IGltbWVkaWF0ZWx5IHNvIHRoYXQgT2JzZXJ2ZXJzIGNhbiByZWNlaXZlXG4gICAgLy90aGUgdmFsdWUgc3RyYWlnaHQgYXdheS5cbiAgICBjb25zdCBzdWJqZWN0ID0gdGhpcy5zdWJqZWN0cy5nZXQoa2V5KTtcbiAgICBpZiAoc3ViamVjdCkge1xuICAgICAgc3ViamVjdC5uZXh0KHZhbHVlKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFVwZGF0ZSBhIHZhbHVlIGFuZCBub3RpZnkgc3Vic2NyaWJlcnMuXG4gICAqXG4gICAqIEBwYXJhbSBrZXlcbiAgICogQHBhcmFtIHZhbHVlXG4gICAqL1xuICBwdWJsaWMgcHV0KGtleTogYW55LCB2YWx1ZTogYW55KSB7XG4gICAgdGhpcy5lbnRyaWVzLnNldChrZXksIHZhbHVlKTtcbiAgICBjb25zdCBzdWJqZWN0ID0gdGhpcy5zdWJqZWN0cy5nZXQoa2V5KTtcbiAgICBpZiAoc3ViamVjdCkge1xuICAgICAgc3ViamVjdC5uZXh0KHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlcyBib3RoIHRoZSB2YWx1ZSBlbnRyeSBhbmQgdGhlIGNvcnJlc3BvbmRpbmcge0BsaW5rIFJlcGxheVN1YmplY3R9LlxuICAgKiBXaWxsIHVuc3Vic2NyaWJlIHRoZSB7QGxpbmsgUmVwbGF5U3ViamVjdH0gcHJpb3IgdG8gZGVsZXRpbmcgaXQsXG4gICAqIHNldmVyaW5nIGNvbW11bmljYXRpb24gd2l0aCBjb3JyZXNwb25kaW5nIHtAbGluayBPYnNlcnZhYmxlfXMuXG4gICAqXG4gICAqIEBwYXJhbSBrZXlcbiAgICovXG4gIHB1YmxpYyBkZWxldGUoa2V5OiBhbnkpIHtcbiAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAvLyBEZWxldGUgdGhlIGVudHJ5XG4gICAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgdGhpcy5lbnRyaWVzLmRlbGV0ZShrZXkpO1xuICAgIGNvbnN0IHN1YmplY3QgPSB0aGlzLnN1YmplY3RzLmdldChrZXkpO1xuICAgIGlmIChzdWJqZWN0KSB7XG4gICAgICBzdWJqZWN0Lm5leHQodW5kZWZpbmVkKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2xlYXIgYWxsIGVudHJpZXMuICBcbiAgICogXG4gICAqIE5vdGUgdGhhdCBcbiAgICogdGhpcyB3aWxsIGNhbGwgZGVsZXRlIGZvciBvbiBhbGxcbiAgICoga2V5cyBkZWZpbmVkIHdoaWNoIGFsc28gYWxzbyBcbiAgICogdW5zdWJzY3JpYmVzIGFuZCBkZWxldGVzIFxuICAgKiBhbGwgdGhlIHNidWplY3RzLlxuICAgKi9cbiAgcHVibGljIGNsZWFyKCkge1xuICAgIGZvciAobGV0IGtleSBvZiB0aGlzLmVudHJpZXMua2V5cygpKSB7XG4gICAgICAgIHRoaXMuZGVsZXRlKGtleSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE9ic2VydmUgY2hhbmdlcyB0byB0aGUgdmFsdWVzLlxuICAgKlxuICAgKiBAcGFyYW0ga2V5XG4gICAqIEByZXR1cm4gQW4ge0BsaW5rIE9ic2VydmFibGV9IG9mIHRoZSB2YWx1ZVxuICAgKi9cbiAgcHVibGljIG9ic2VydmUoa2V5OiBhbnkpOiBPYnNlcnZhYmxlPGFueT4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnN1YmplY3RzLmdldChrZXkpXG4gICAgICA/IHRoaXMuc3ViamVjdHMuZ2V0KGtleSkhLmFzT2JzZXJ2YWJsZSgpXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayB3aGV0aGVyIGEgdmFsdWUgZXhpc3RzLlxuICAgKlxuICAgKiBAcGFyYW0ga2V5XG4gICAqIEByZXR1cm4gVHJ1ZSBpZiB0aGUgZW50cnkgZXhpc3RzICggSXMgbm90IG51bGwgb3IgdW5kZWZpbmVkICkgYW5kIGZhbHNlIG90aGVyd2lzZS5cbiAgICovXG4gIHB1YmxpYyBleGlzdHMoa2V5OiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLmVudHJpZXMuZ2V0KGtleSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmUgYSBzbmFwc2hvdCBvZiB0aGVcbiAgICogdmFsdWUuXG4gICAqXG4gICAqIEBwYXJhbSBrZXlcbiAgICogQHJldHVybiBBIHNuYXBzaG90IG9mIHRoZSB2YWx1ZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBrZXkuXG4gICAqL1xuICBwdWJsaWMgc25hcHNob3Qoa2V5OiBhbnkpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmVudHJpZXMuZ2V0KGtleSk7XG4gIH1cblxuICAvKipcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIHN0b3JlIGlzIGVtcHR5LlxuICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIHN0b3JlIGlzIGVtcHR5LCBmYWxzZSBvdGhlcndpc2UuXG4gICAqL1xuICBwdWJsaWMgaXNFbXB0eSgpIHtcbiAgICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLmVudHJpZXMudmFsdWVzKCkpLmxlbmd0aCA9PSAwO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIG51bWJlciBvZiBrZXkgdmFsdWUgcGFpcnMgY29udGFpbmVkLlxuICAgKlxuICAgKiBAcmV0dXJuIHRoZSBudW1iZXIgb2YgZW50cmllcyBpbiB0aGUgc3RvcmUuXG4gICAqL1xuICBwdWJsaWMgY291bnQoKSB7XG4gICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy5lbnRyaWVzLnZhbHVlcygpKS5sZW5ndGg7XG4gIH1cbn0iXX0=
@@ -1 +1 @@
1
- {"version":3,"file":"fireflysemantics-slice.mjs","sources":["../../../projects/slice/src/lib/models/StoreConfig.ts","../../../projects/slice/src/lib/models/Entity.ts","../../../projects/slice/src/lib/models/constants.ts","../../../projects/slice/src/lib/AbstractStore.ts","../../../projects/slice/src/lib/utilities.ts","../../../projects/slice/src/lib/Slice.ts","../../../projects/slice/src/lib/EStore.ts","../../../projects/slice/src/lib/OStore.ts","../../../projects/slice/src/public-api.ts","../../../projects/slice/src/fireflysemantics-slice.ts"],"sourcesContent":["/**\n * The configuration interface for the entity store\n * defines the strings for the ID Key and Global ID key.\n */\nexport interface StoreConfig {\n idKey: string;\n guidKey: string;\n};\n ","\n/**\n * Abstract Entity base class with the \n * gid and id properties declared.\n */\nexport abstract class Entity {\n public gid?:string\n public id?:string \n}","export const SCROLL_UP_DEBOUNCE_TIME_20 = 20;\nexport const SEARCH_DEBOUNCE_TIME_300 = 300;\n","import { ReplaySubject, Observable } from \"rxjs\"\nimport { map } from \"rxjs/operators\"\nimport { Delta, Predicate } from \"./models\"\nimport { StoreConfig } from \"./models/StoreConfig\"\n\nconst { freeze } = Object\n\nconst ESTORE_DEFAULT_ID_KEY = \"id\"\nconst ESTORE_DEFAULT_GID_KEY = \"gid\"\n\nexport const ESTORE_CONFIG_DEFAULT: StoreConfig = freeze({\n idKey: ESTORE_DEFAULT_ID_KEY,\n guidKey: ESTORE_DEFAULT_GID_KEY\n});\n\nexport abstract class AbstractStore<E> {\n\n /**\n * The configuration for the store.\n */\n public config: StoreConfig;\n\n constructor(config?: StoreConfig) {\n this.config = config\n ? freeze({ ...ESTORE_CONFIG_DEFAULT, ...config })\n : ESTORE_CONFIG_DEFAULT;\n }\n \n /**\n * Notifies observers of the store query.\n */\n protected notifyQuery = new ReplaySubject<string>(1);\n\n /**\n * The current query state.\n */\n protected _query: string = '';\n\n /**\n * Sets the current query state and notifies observers.\n */\n set query(query: string) {\n this._query = query;\n this.notifyQuery.next(this._query);\n }\n\n /**\n * @return A snapshot of the query state.\n */\n get query() {\n return this._query;\n }\n\n /**\n * Observe the query.\n * @example\n <pre>\n let query$ = source.observeQuery();\n </pre>\n */\n public observeQuery() {\n return this.notifyQuery.asObservable();\n }\n\n\n /**\n * The current id key for the EStore instance.\n * @return this.config.idKey;\n */\n get ID_KEY(): string {\n return this.config.idKey\n }\n /**\n * The current guid key for the EStore instance.\n * @return this.config.guidKey;\n */\n get GUID_KEY(): string {\n return this.config.guidKey\n }\n\n /**\n * Primary index for the stores elements.\n */\n public entries: Map<string, E> = new Map()\n\n /**\n * The element entries that are keyed by\n * an id generated on the server.\n */\n public idEntries: Map<string, E> = new Map()\n\n /**\n * Create notifications that broacast\n * the entire set of entries.\n */\n protected notify = new ReplaySubject<E[]>(1)\n\n /**\n * Create notifications that broacast\n * store or slice delta state changes.\n */\n protected notifyDelta = new ReplaySubject<Delta<E>>(1)\n\n /**\n * Call all the notifiers at once.\n *\n * @param v\n * @param delta\n */\n protected notifyAll(v: E[], delta: Delta<E>) {\n this.notify.next(v);\n this.notifyDelta.next(delta);\n }\n\n /**\n * Observe store state changes.\n * @param sort Optional sorting function yielding a sorted observable.\n * @example\n```\nlet todos$ = source.observe();\n//or with a sort by title function\nlet todos$ = source.observe((a, b)=>(a.title > b.title ? -1 : 1));\n```\n */\n public observe(sort?: (a: any, b: any) => number): Observable<E[]> {\n if (sort) {\n return this.notify.pipe(map((e: E[]) => e.sort(sort)));\n }\n return this.notify.asObservable();\n }\n\n /**\n * An Observable<E[]> reference\n * to the entities in the store or\n * Slice instance.\n * \n */\n public obs: Observable<E[]> = this.observe()\n\n\n\n /**\n * Observe delta updates.\n * @example\n <pre>\n let todos$ = source.observeDelta();\n </pre>\n */\n public observeDelta(): Observable<Delta<E>> {\n return this.notifyDelta.asObservable();\n }\n\n /**\n * Check whether the store is empty.\n * \n * @return A hot {@link Observable} that indicates whether the store is empty.\n * \n * @example\n <pre>\n source.isEmpty();\n </pre>\n */\n isEmpty(): Observable<boolean> {\n return this.notify.pipe(\n map((entries: E[]) => entries.length == 0)\n );\n }\n\n /**\n * Check whether the store is empty.\n * \n * @return A snapshot that indicates whether the store is empty.\n * \n * @example\n <pre>\n source.isEmpty();\n </pre>\n */\n isEmptySnapshot(): boolean {\n return Array.from(this.entries.values()).length == 0;\n }\n\n /**\n * Returns the number of entries contained.\n * @param p The predicate to apply in order to filter the count\n */\n count(p?: Predicate<E>): Observable<number> {\n if (p) {\n return this.notify.pipe(\n map((e: E[]) => e.reduce((total, e) => total + (p(e) ? 1 : 0), 0))\n );\n }\n return this.notify.pipe(map((entries: E[]) => entries.length));\n }\n\n /**\n * Returns a snapshot of the number of entries contained in the store.\n * @param p The predicate to apply in order to filter the count\n */\n countSnapshot(p?: Predicate<E>): number {\n if (p) {\n return Array.from(this.entries.values()).filter(p).length;\n }\n return Array.from(this.entries.values()).length;\n }\n\n /**\n * Snapshot of all entries.\n * \n * @return Snapshot array of all the elements the entities the store contains.\n * \n * @example Observe a snapshot of all the entities in the store.\n```\nlet selectedTodos:Todo[] = source.allSnapshot();\n```\n */\n allSnapshot(): E[] {\n return Array.from(this.entries.values());\n }\n\n /**\n * Returns true if the entries contain the identified instance.\n * \n * @param target Either an instance of type `E` or a `guid` identifying the instance. \n * @param byId Whether the lookup should be performed with the `id` key rather than the `guid`.\n * @returns true if the instance identified by the guid exists, false otherwise.\n * \n * @example\n <pre>\n let contains:boolean = source.contains(guid);\n </pre>\n */\n contains(target: E | string):boolean {\n if (typeof target === \"string\") {\n return this.entries.get(target) ? true : false;\n }\n const guid: string = (<any>target)[this.config.guidKey];\n return this.entries.get(guid) ? true : false;\n }\n\n /**\n * Returns true if the entries contain the identified instance.\n * \n * @param target Either an instance of type `E` or a `id` identifying the instance. \n * @returns true if the instance identified by the `id` exists, false otherwise.\n * \n * @example\n <pre>\n let contains:boolean = source.contains(guid);\n </pre>\n */\n containsById(target: E | string):boolean {\n if (typeof target === \"string\") {\n return this.idEntries.get(target) ? true : false;\n }\n const id: string = (<any>target)[this.config.idKey];\n return this.idEntries.get(id) ? true : false;\n }\n\n /**\n * Find and return the entity identified by the GUID parameter\n * if it exists and return it.\n *\n * @param guid\n * @return The entity instance if it exists, null otherwise\n */\n findOne(guid: string): E | undefined{\n return this.entries.get(guid);\n }\n\n /**\n * Find and return the entity identified by the ID parameter\n * if it exists and return it.\n *\n * @param id\n * @return The entity instance if it exists, null otherwise\n */\n findOneByID(id: string): E | undefined {\n return this.idEntries.get(id);\n }\n\n /**\n * Snapshot of the entries that match the predicate.\n *\n * @param p The predicate used to query for the selection.\n * @return A snapshot array containing the entities that match the predicate.\n * \n * @example Select all the `Todo` instance where the `title` length is greater than 100. \n```\nlet todos:Todo[]=store.select(todo=>todo.title.length>100);\n```\n */\n select(p: Predicate<E>): E[] {\n const selected: E[] = [];\n Array.from(this.entries.values()).forEach(e => {\n if (p(e)) {\n selected.push(e);\n }\n });\n return selected;\n }\n\n /** \n * Compare entities by GUID \n * @param e1 The first entity\n * @param e2 The second entity\n * @return true if the two entities have equal GUID ids\n * @example Compare `todo1` with `todo2` by `gid`.\n```\nif (equalsByGUID(todo1, todo2)){...};\n```\n */\n equalsByGUID(e1:any, e2:any) {\n return e1[this.GUID_KEY] == e2[this.GUID_KEY];\n }\n\n /**\n * Compare entities by ID \n * @param e1 The first entity\n * @param e2 The second entity\n * @return true if the two entities have equal ID ids\n * @example Compare `todo1` with `todo2` by `id`.\n```\nif (equalsByID(todo1, todo2)){...};\n```\n */\n equalsByID(e1:any, e2:any) {\n return e1[this.ID_KEY] == e2[this.ID_KEY];\n }\n /**\n * Calls complete on all {@link BehaviorSubject} instances.\n * \n * Call destroy when disposing of the store.\n */\n destroy() {\n this.notify.complete();\n this.notifyDelta.complete();\n this.notifyQuery.complete();\n }\n}","import { ESTORE_CONFIG_DEFAULT } from \"./AbstractStore\";\nimport { Observable, fromEvent, of } from 'rxjs'\nimport { switchMap, pairwise, debounceTime, distinctUntilChanged, map, filter } from 'rxjs/operators'\nimport { nanoid} from \"nanoid\"\nimport { scrollPosition } from \"./models/scrollPosition\";\n\n/**\n * Returns all the entities are distinct by the \n * `property` value argument. \n * \n * Note that the implementation uses a `Map<string, E>` to\n * index the entities by key. Therefore the more recent occurences \n * matching a key instance will overwrite the previous ones.\n * \n * @param property The name of the property to check for distinct values by.\n * @param entities The entities in the array.\n * \n * @example\n ```\n let todos: Todo[] = [\n { id: 1, title: \"Lets do it!\" },\n { id: 1, title: \"Lets do it again!\" },\n { id: 2, title: \"All done!\" }\n ];\n\n let todos2: Todo[] = [\n { id: 1, title: \"Lets do it!\" },\n { id: 2, title: \"All done!\" }\n ];\n\n expect(distinct(todos, \"id\").length).toEqual(2);\n expect(distinct(todos2, \"id\").length).toEqual(2);\n\n ```\n */\nexport function distinct<E, K extends keyof E>(entities: E[], property: K): E[] {\n const entitiesByProperty = new Map(entities.map(e => [e[property], e] as [E[K], E]));\n return Array.from(entitiesByProperty.values());\n}\n\n/**\n * Returns true if all the entities are distinct by the \n * `property` value argument.\n * \n * @param property The name of the property to check for distinct values by.\n * @param entities The entities in the array.\n * \n * @example\n * \n ```\n let todos: Todo[] = [\n { id: 1, title: \"Lets do it!\" },\n { id: 1, title: \"Lets do it again!\" },\n { id: 2, title: \"All done!\" }\n ];\n\n let todos2: Todo[] = [\n { id: 1, title: \"Lets do it!\" },\n { id: 2, title: \"All done!\" }\n ];\n\n expect(unique(todos, \"id\")).toBeFalsy();\n expect(unique(todos2, \"id\")).toBeTruthy();\n ```\n */\nexport function unique<E>(entities: E[], property: keyof E):boolean {\n return entities.length == distinct(entities, property).length ? true : false;\n}\n\n/**\n * Create a global ID\n * @return The global id.\n * \n * @example\n * let e.guid = GUID();\n */\nexport function GUID() {\n return nanoid();\n}\n\n/**\n * Set the global identfication property on the instance.\n * \n * @param e Entity we want to set the global identifier on.\n * @param gid The name of the `gid` property. If not specified it defaults to `ESTORE_CONFIG_DEFAULT.guidKey`.\n */\nexport function attachGUID<E>(e: E, gid?: string): string {\n const guidKey = gid ? gid : ESTORE_CONFIG_DEFAULT.guidKey\n let id: string = nanoid();\n (<any>e)[guidKey] = id\n return id\n}\n\n/**\n * Set the global identfication property on the instance.\n * \n * @param e[] Entity array we want to set the global identifiers on.\n * @param gid The name of the `gid` property. If not specified it defaults to `gid`.\n */\nexport function attachGUIDs<E>(e: E[], gid?: string) {\n e.forEach(e => {\n attachGUID(e, gid);\n });\n}\n\n/**\n * Create a shallow copy of the argument.\n * @param o The object to copy\n */\nexport function shallowCopy<E>(o: E) {\n return { ...o };\n}\n\n/**\n * Create a deep copy of the argument.\n * @param o The object to copy\n */\nexport function deepCopy<E>(o: E) {\n return JSON.parse(JSON.stringify(o));\n}\n\n/**\n * Gets the current active value from the `active`\n * Map. \n * \n * This is used for the scenario where we are managing\n * a single active instance. For example \n * when selecting a book from a collection of books. \n * \n * The selected `Book` instance becomes the active value.\n * \n * @example\n * const book:Book = getActiveValue(bookStore.active);\n * @param m \n */\nexport function getActiveValue<E>(m: Map<any, E>) {\n if (m.size) {\n return m.entries().next().value[1];\n }\n return null;\n}\n\n/**\n * The method can be used to exclude keys from an instance\n * of type `E`. \n * \n * We can use this to exclude values when searching an object.\n * \n * @param entity An instance of type E\n * @param exclude The keys to exclude\n * \n * @example\n * todo = { id: '1', description: 'Do it!' }\n * let keys = excludeKeys<Todo>(todo, ['id]);\n * // keys = ['description']\n */\nexport function excludeKeys<E>(entity: any, exclude: string[]) {\n const keys: string[] = Object.keys(entity);\n return keys.filter((key) => {\n return exclude.indexOf(key) < 0;\n });\n}\n\n/**\n * \n * @param entities The entity to search\n * @param exclude Keys to exclude from each entity\n * \n * @return E[] Array of entities with properties containing the search term.\n */\nexport function search<E>(query: string = '', entities: E[], exclude: string[] = []): E[] {\n const { isArray } = Array\n\n query = query.toLowerCase();\n\n\n return entities.filter(function (e: E) {\n //Do the keys calculation on each instance e:E\n //because an instance can have optional parameters,\n //and thus we have to check each instance, not just\n //the first one in the array.\n const keys = excludeKeys(e, exclude)\n return keys.some( (key) => {\n const value = (e as any)[key];\n if (!value) {\n return false;\n }\n if (isArray(value)) {\n return value.some(v => {\n return String(v).toLowerCase().includes(query);\n });\n }\n else {\n return String(value).toLowerCase().includes(query);\n }\n })\n });\n}\n\n/**\n * @param scrollable The element being scrolled\n * @param debounceMS The number of milliseconds to debounce scroll events\n * @param sp The function returning the scroll position coordinates.\n * @return A boolean valued observable indicating whether the element is scrolling up or down\n */\nexport function scrollingUp(\n scrollable: any, \n debounceMS: number, \n sp: scrollPosition): Observable<boolean> {\n return fromEvent(scrollable, 'scroll').pipe(\n debounceTime(debounceMS), \n distinctUntilChanged(), \n map(v => sp()), \n pairwise(), \n switchMap(p => {\n const y1 = p[0][1]\n const y2 = p[1][1]\n return y1 - y2 > 0 ? of(false) : of(true)\n }))\n}\n\n/**\n * Filters the entities properties to the set contained in the \n * `keys` array.\n * \n * @param keys The array of keys that the entity be limited to\n * @param entity The entity to map\n * @return An entity instance that has only the keys provided in the keys array \n */\nexport function mapEntity(keys:string[], entity:any) {\n const result:any = {}\n keys.forEach(k=>{\n result[k] = entity[k]\n })\n return result\n}\n\n/**\n * Returns an `Observable<E>` instance that \n * filters for arguments where the property \n * value matches the provided value.\n * \n * @param value The value targeted\n * @param propertyName The name of the property to contain the value\n * @param obs The Slice Object Store Observable\n * @returns Observable<E>\n */\n export function onFilteredEvent<E>(\n value: any,\n propertyName: string,\n obs: Observable<E>\n): Observable<E> {\n return obs.pipe(filter((e:any) => !!(e && e[propertyName] === value)));\n}","import { Delta, ActionTypes, Predicate } from \"./models\"\nimport { AbstractStore } from \"./AbstractStore\"\nimport { EStore } from \"./EStore\";\n\nconst { isArray } = Array\n\nexport class Slice<E> extends AbstractStore<E> {\n\n\n /* The slice element entries */\n public override entries: Map<string, E> = new Map();\n\n /**\n * perform initial notification to all observers,\n * such that operations like {@link combineLatest}{}\n * will execute at least once.\n * \n * @param label The slice label\n * @param predicate The slice predicate\n * @param eStore The EStore instance containing the elements considered for slicing\n * \n * @example \n <pre>\n //Empty slice\n new Slice<Todo>(Todo.COMPLETE, todo=>!todo.complete);\n \n //Initialized slice\n let todos = [new Todo(false, \"You complete me!\"), \n new Todo(true, \"You completed me!\")];\n new Slice<Todo>(Todo.COMPLETE, todo=>!todo.complete, todos);\n </pre>\n */\n constructor(\n public label: string,\n public predicate: Predicate<E>,\n public eStore: EStore<E>) {\n super();\n const entities: E[] = eStore.allSnapshot()\n this.config = eStore.config\n let passed: E[] = this.test(predicate, entities);\n const delta: Delta<E> = { type: ActionTypes.INTIALIZE, entries: passed };\n this.post(passed);\n this.notifyDelta.next(delta)\n }\n\n /**\n * Add the element if it satisfies the predicate\n * and notify subscribers that an element was added.\n *\n * @param e The element to be considered for slicing\n */\n post(e: E | E[]) {\n if (isArray(e)) {\n this.postA(e)\n }\n else {\n if (this.predicate(e)) {\n const id = (<any>e)[this.config.guidKey];\n this.entries.set(id, e);\n const delta: Delta<E> = { type: ActionTypes.POST, entries: [e] };\n this.notifyAll([...Array.from(this.entries.values())], delta);\n }\n }\n }\n\n /**\n * Add the elements if they satisfy the predicate\n * and notify subscribers that elements were added.\n *\n * @param e The element to be considered for slicing\n */\n postN(...e: E[]) {\n this.postA(e);\n }\n\n /**\n * Add the elements if they satisfy the predicate\n * and notify subscribers that elements were added.\n *\n * @param e The element to be considered for slicing\n */\n postA(e: E[]) {\n const d: E[] = [];\n e.forEach(e => {\n if (this.predicate(e)) {\n const id = (<any>e)[this.config.guidKey];\n this.entries.set(id, e);\n d.push(e);\n }\n });\n const delta: Delta<E> = { type: ActionTypes.POST, entries: d };\n this.notifyAll([...Array.from(this.entries.values())], delta);\n }\n\n /**\n * Delete an element from the slice.\n *\n * @param e The element to be deleted if it satisfies the predicate\n */\n delete(e: E | E[]) {\n if (isArray(e)) {\n this.deleteA(e)\n }\n else {\n if (this.predicate(e)) {\n const id = (<any>e)[this.config.guidKey]\n this.entries.delete(id)\n const delta: Delta<E> = { type: ActionTypes.DELETE, entries: [e] }\n this.notifyAll(Array.from(this.entries.values()), delta)\n }\n }\n }\n\n /**\n * @param e The elements to be deleted if it satisfies the predicate\n */\n deleteN(...e: E[]) {\n this.deleteA(e);\n }\n\n /**\n * @param e The elements to be deleted if they satisfy the predicate\n */\n deleteA(e: E[]) {\n const d: E[] = []\n e.forEach(e => {\n if (this.predicate(e)) {\n const id = (<any>e)[this.config.guidKey]\n d.push(this.entries.get(id)!)\n this.entries.delete(id)\n }\n });\n const delta: Delta<E> = { type: ActionTypes.DELETE, entries: d };\n this.notifyAll([...Array.from(this.entries.values())], delta);\n }\n\n /**\n * Update the slice when an Entity instance mutates.\n *\n * @param e The element to be added or deleted depending on predicate reevaluation\n */\n put(e: E | E[]) {\n if (isArray(e)) {\n this.putA(e)\n }\n else {\n const id = (<any>e)[this.config.guidKey];\n if (this.entries.get(id)) {\n if (!this.predicate(e)) {\n //Note that this is a ActionTypes.DELETE because we are removing the\n //entity from the slice.\n const delta: Delta<E> = { type: ActionTypes.DELETE, entries: [e] };\n this.entries.delete(id);\n this.notifyAll([...Array.from(this.entries.values())], delta);\n }\n } else if (this.predicate(e)) {\n this.entries.set(id, e);\n const delta: Delta<E> = { type: ActionTypes.PUT, entries: [e] };\n this.notifyAll([...Array.from(this.entries.values())], delta);\n } \n }\n }\n\n /**\n * Update the slice with mutated Entity instances.\n *\n * @param e The elements to be deleted if it satisfies the predicate\n */\n putN(...e: E[]) {\n this.putA(e);\n }\n\n /**\n * @param e The elements to be put\n */\n putA(e: E[]) {\n const d: E[] = []; //instances to delete\n const u: E[] = []; //instances to update\n e.forEach(e => {\n const id = (<any>e)[this.config.guidKey];\n if (this.entries.get(id)) {\n if (!this.predicate(e)) {\n d.push(this.entries.get(id)!);\n }\n } else if (this.predicate(e)) {\n u.push(e);\n }\n });\n if (d.length > 0) {\n d.forEach(e => {\n this.entries.delete((<any>e)[this.config.guidKey])\n });\n const delta: Delta<E> = { type: ActionTypes.DELETE, entries: d };\n this.notifyAll([...Array.from(this.entries.values())], delta);\n }\n if (u.length > 0) {\n u.forEach(e => {\n this.entries.set((<any>e)[this.config.guidKey], e);\n });\n const delta: Delta<E> = { type: ActionTypes.PUT, entries: u };\n this.notifyAll([...Array.from(this.entries.values())], delta);\n }\n }\n\n /**\n * Resets the slice to empty.\n */\n reset() {\n let delta: Delta<E> = {\n type: ActionTypes.RESET,\n entries: [...Array.from(this.entries.values())]\n };\n this.notifyAll([], delta);\n this.entries = new Map();\n }\n\n /**\n * Utility method that applies the predicate to an array\n * of entities and return the ones that pass the test.\n *\n * Used to create an initial set of values\n * that should be part of the `Slice`.\n *\n * @param p\n * @param e\n * @return The the array of entities that pass the predicate test.\n */\n public test(p: Predicate<E>, e: E[]): E[] {\n let v: E[] = [];\n e.forEach((e: E) => {\n if (p(e)) {\n v.push(e);\n }\n });\n return v;\n }\n}\n","import { AbstractStore } from './AbstractStore';\nimport { StoreConfig } from './models/StoreConfig';\nimport { GUID } from './utilities';\n\nimport { ActionTypes, Predicate, Delta } from './models/';\nimport { ReplaySubject, of, Observable } from 'rxjs';\nimport { takeWhile, filter, switchMap } from 'rxjs/operators';\nimport { Slice } from './Slice';\n\n/**\n * This `todoFactory` code will be used to illustrate the API examples. The following\n * utilities are used in the tests and the API Typedoc examples contained here.\n * @example Utilities for API Examples\n```\nexport const enum TodoSliceEnum {\n COMPLETE = \"Complete\",\n INCOMPLETE = \"Incomplete\"\n}\n\nexport class Todo {\n constructor(public complete: boolean, public title: string,public gid?:string, public id?:string) {}\n}\n\nexport let todos = [new Todo(false, \"You complete me!\"), new Todo(true, \"You completed me!\")];\n\nexport function todosFactory():Todo[] {\n return [new Todo(false, \"You complete me!\"), new Todo(true, \"You completed me!\")];\n}\n ``` \n */\n\nexport class EStore<E> extends AbstractStore<E> {\n /**\n * Store constructor (Initialization with element is optional)\n *\n * perform initial notification to all observers,\n * such that function like {@link combineLatest}{}\n * will execute at least once.\n * @param entities\n * @example Dynamic `EStore<Todo>` Creation \n```\n// Initialize the Store\nlet store: EStore<Todo> = new EStore<Todo>(todosFactory());\n```*/\n constructor(entities: E[] = [], config?: StoreConfig) {\n super(config);\n const delta: Delta<E> = { type: ActionTypes.INTIALIZE, entries: entities };\n this.post(entities)\n this.notifyDelta.next(delta);\n }\n\n /**\n * Calls complete on all {@link BehaviorSubject} instances.\n * \n * Call destroy when disposing of the store.\n */\n override destroy() {\n super.destroy()\n this.notifyLoading.complete()\n this.notifyActive.complete()\n this.slices.forEach(slice => slice.destroy())\n }\n\n /**\n * Toggles the entity:\n * \n * If the store contains the entity\n * it will be deleted. If the store \n * does not contains the entity,\n * it is added.\n * @param e \n * @example Toggle the `Todo` instance\n```\nestore.post(todo);\n// Remove todo\nestore.toggle(todo);\n// Add it back\nestore.toggle(todo);\n\n```\n */\n public toggle(e: E) {\n if (this.contains(e)) {\n this.delete(e);\n } else {\n this.post(e);\n }\n }\n\n /**\n * Notifies observers when the store is empty.\n */\n private notifyActive = new ReplaySubject<Map<string, E>>(1);\n\n\n /**\n * `Map` of active entties. The instance is public and can be used\n * directly to add and remove active entities, however we recommend\n * using the {@link addActive} and {@link deleteActive} methods.\n */\n public active: Map<string, E> = new Map();\n\n /**\n * Add multiple entity entities to active.\n * \n * If the entity is not contained in the store it is added\n * to the store before it is added to `active`.\n * \n * Also we clone the map prior to broadcasting it with\n * `notifyActive` to make sure we will trigger Angular \n * change detection in the event that it maintains \n * a reference to the `active` state `Map` instance.\n * \n * @example Add a `todo1` and `todo2` as active\n```\naddActive(todo1);\naddActive(todo2);\n```\n */\n public addActive(e: E) {\n if (this.contains(e)) {\n this.active.set((<any>e).gid, e);\n this.notifyActive.next(new Map(this.active));\n }\n else {\n this.post(e);\n this.active.set((<any>e).gid, e);\n this.notifyActive.next(new Map(this.active));\n }\n }\n\n /**\n * Delete an entity as active.\n * \n * Also we clone the map prior to broadcasting it with\n * `notifyActive` to make sure we will trigger Angular \n * change detection in the event that it maintains \n * a reference to the `active` state `Map` instance.\n * \n * @example Mark a `todo` instance as active\n ```\ndeleteActive(todo1);\ndeleteActive(todo2);\n ```\n */\n public deleteActive(e: E) {\n this.active.delete((<any>e).gid);\n this.notifyActive.next(new Map(this.active));\n }\n\n /**\n * Clear / reset the active entity map.\n * \n * Also we clone the map prior to broadcasting it with\n * `notifyActive` to make sure we will trigger Angular \n * change detection in the event that it maintains \n * a reference to the `active` state `Map` instance.\n * \n * @example Mark a `todo` instance as active\n ```\ndeleteActive(todo1);\ndeleteActive(todo2);\n ```\n */\n clearActive() {\n this.active.clear();\n this.notifyActive.next(new Map(this.active));\n }\n\n /**\n * Observe the active entity.\n * @example\n <pre>\n let active$ = source.observeActive();\n </pre>\n */\n public observeActive() {\n return this.notifyActive.asObservable()\n }\n\n /**\n * Observe the active entity.\n * @example\n <pre>\n let active$ = source.activeSnapshot();\n </pre>\n */\n public activeSnapshot() {\n return Array.from(this.active.values())\n }\n\n\n //================================================\n // LOADING\n //================================================\n\n /**\n * Observable of errors occurred during a load request.\n * \n * The error Observable should be created by the \n * client.\n */\n public loadingError!: Observable<any>;\n\n /**\n * Notifies observers when the store is loading.\n * \n * This is a common pattern found when implementing\n * `Observable` data sources.\n */\n private notifyLoading = new ReplaySubject<boolean>(1);\n\n /**\n * The current loading state. Use loading when fetching new\n * data for the store. The default loading state is `true`.\n * \n * This is such that if data is fetched asynchronously \n * in a service, components can wait on loading notification\n * before attempting to retrieve data from the service.\n *\n * Loading could be based on a composite response. For example\n * when the stock and mutual funds have loaded, set loading to `false`.\n */\n private _loading: boolean = true;\n\n /**\n * Sets the current loading state and notifies observers.\n */\n set loading(loading: boolean) {\n this._loading = loading;\n this.notifyLoading.next(this._loading);\n }\n\n /**\n * @return A snapshot of the loading state.\n */\n get loading() {\n return this._loading;\n }\n\n /**\n * Observe loading.\n * @example\n <pre>\n let loading$ = source.observeLoading();\n </pre>\n\n Note that this obverable piped through\n `takeWhile(v->v, true), such that it will \n complete after each emission.\n\n See:\n https://medium.com/@ole.ersoy/waiting-on-estore-to-load-8dcbe161613c\n\n For more details.\n */\n public observeLoading() {\n return this.notifyLoading.asObservable().\n pipe(takeWhile(v => v, true));\n }\n\n /**\n * Notfiies when loading has completed.\n */\n public observeLoadingComplete() {\n return this.observeLoading().pipe(\n filter(loading => loading == false),\n switchMap(() => of(true)))\n }\n\n\n\n\n\n\n //================================================\n // SEARCHING\n //================================================\n /**\n * Observable of errors occurred during a search request.\n * \n * The error Observable should be created by the \n * client.\n */\n public searchError!: Observable<any>;\n\n /**\n * Notifies observers that a search is in progress.\n * \n * This is a common pattern found when implementing\n * `Observable` data sources.\n */\n private notifySearching = new ReplaySubject<boolean>(1);\n\n /**\n * The current `searching` state. Use `searching`\n * for example to display a spinnner \n * when performing a search. \n * The default `searching` state is `false`.\n */\n private _searching: boolean = false;\n\n /**\n * Sets the current searching state and notifies observers.\n */\n set searching(searching: boolean) {\n this._searching = searching;\n this.notifySearching.next(this._searching);\n }\n\n /**\n * @return A snapshot of the searching state.\n */\n get searching() {\n return this._searching;\n }\n\n /**\n * Observe searching.\n * @example\n <pre>\n let searching$ = source.observeSearching();\n </pre>\n \n Note that this obverable piped through\n `takeWhile(v->v, true), such that it will \n complete after each emission.\n \n See:\n https://medium.com/@ole.ersoy/waiting-on-estore-to-load-8dcbe161613c\n \n For more details.\n */\n public observeSearching(): Observable<boolean> {\n return this.notifySearching.asObservable().\n pipe(takeWhile(v => v, true));\n }\n\n /**\n * Notfiies when searching has completed.\n */\n public observeSearchingComplete(): Observable<boolean> {\n return this.observeSearching().pipe(\n filter(searching => searching == false),\n switchMap(() => of(true)))\n }\n\n /**\n * Store slices\n */\n private slices: Map<string, Slice<E>> = new Map();\n\n /**\n * Adds a slice to the store and keys it by the slices label.\n *\n * @param p\n * @param label\n * \n * @example Setup a Todo Slice for COMPLETE Todos\n```\nsource.addSlice(todo => todo.complete, TodoSlices.COMPLETE);\n```\n */\n addSlice(p: Predicate<E>, label: string) {\n const slice: Slice<E> = new Slice(\n label,\n p,\n this)\n this.slices.set(slice.label, slice)\n }\n\n /**\n * Remove a slice\n * @param label The label identifying the slice\n * \n * @example Remove the TodoSlices.COMPLETE Slice\n```\nsource.removeSlice(TodoSlices.COMPLETE);\n```\n */\n removeSlice(label: string) {\n this.slices.delete(label);\n }\n\n /**\n * Get a slice\n * @param label The label identifying the slice\n * @return The Slice instance or undefined \n * \n * @example Get the TodoSlices.COMPLETE slice\n```\nsource.getSlice(TodoSlices.COMPLETE);\n```\n */\n getSlice(label: string): Slice<E> | undefined {\n return this.slices.get(label);\n }\n\n /**\n * Post (Add a new) element(s) to the store.\n * @param e An indiidual entity or an array of entities\n * @example Post a `todo`.\n```\nstore.post(todo);\n```\n */\n post(e: E | E[]) {\n if (!Array.isArray(e)) {\n const guid: string = (<any>e)[this.GUID_KEY]\n ? (<any>e)[this.GUID_KEY]\n : GUID();\n (<any>e)[this.GUID_KEY] = guid;\n this.entries.set(guid, e);\n this.updateIDEntry(e);\n Array.from(this.slices.values()).forEach(s => {\n s.post(e);\n });\n //Create a new array reference to trigger Angular change detection.\n let v: E[] = [...Array.from(this.entries.values())];\n const delta: Delta<E> = { type: ActionTypes.POST, entries: [e] };\n this.notifyAll(v, delta);\n }\n else {\n this.postA(e)\n }\n }\n\n /**\n * Post elements to the store.\n * @param ...e\n * @example Post two `Todo` instances.\n```\nstore.post(todo1, todo2);\n```\n */\n postN(...e: E[]) {\n e.forEach(e => {\n const guid: string = (<any>e)[this.GUID_KEY]\n ? (<any>e)[this.GUID_KEY]\n : GUID();\n (<any>e)[this.GUID_KEY] = guid;\n this.entries.set(guid, e);\n this.updateIDEntry(e);\n });\n Array.from(this.slices.values()).forEach(s => {\n s.postA(e);\n });\n //Create a new array reference to trigger Angular change detection.\n let v: E[] = [...Array.from(this.entries.values())];\n const delta: Delta<E> = { type: ActionTypes.POST, entries: e };\n this.notifyAll(v, delta);\n }\n\n /**\n * Post (Add) an array of elements to the store.\n * @param e\n * @example Post a `Todo` array.\n```\nstore.post([todo1, todo2]);\n```\n */\n postA(e: E[]) {\n this.postN(...e);\n }\n\n /**\n * Put (Update) an element.\n * @param e\n * @example Put a Todo instance.\n```\nstore.put(todo1);\n```\n */\n put(e: E | E[]) {\n if (!Array.isArray(e)) {\n let id: string = (<any>e)[this.GUID_KEY];\n this.entries.set(id, e);\n this.updateIDEntry(e);\n let v: E[] = [...Array.from(this.entries.values())];\n this.notify.next(v);\n const delta: Delta<E> = { type: ActionTypes.PUT, entries: [e] };\n this.notifyDelta.next(delta);\n Array.from(this.slices.values()).forEach(s => {\n s.put(e);\n });\n }\n else {\n this.putA(e)\n }\n }\n\n /**\n * Put (Update) an element or add an element that was read from a persistence source\n * and thus already has an assigned global id`.\n * @param e\n * @example Put Todo instances.\n```\nstore.put(todo1, todo2);\n```\n */\n putN(...e: E[]) {\n this.putA(e);\n }\n\n /**\n * Put (Update) the array of elements.\n * @param e\n * @example Put Todo instances.\n```\nstore.put([todo1, todo2]);\n```\n */\n putA(e: E[]) {\n e.forEach(e => {\n let guid: string = (<any>e)[this.GUID_KEY]\n this.entries.set(guid, e)\n this.updateIDEntry(e);\n });\n //Create a new array reference to trigger Angular change detection.\n let v: E[] = [...Array.from(this.entries.values())];\n this.notify.next(v);\n const delta: Delta<E> = { type: ActionTypes.PUT, entries: e };\n this.notifyDelta.next(delta);\n Array.from(this.slices.values()).forEach(s => {\n s.putA(e);\n });\n }\n\n /**\n * Delete (Update) the array of elements.\n * @param e\n * @example Delete todo1.\n```\nstore.delete(todo1]);\n```\n */\n delete(e: E | E[]) {\n if (!Array.isArray(e)) {\n this.deleteActive(e);\n const guid = (<any>e)[this.GUID_KEY];\n this.entries.delete(guid);\n this.deleteIDEntry(e);\n Array.from(this.slices.values()).forEach(s => {\n s.entries.delete(guid);\n });\n //Create a new array reference to trigger Angular change detection.\n let v: E[] = [...Array.from(this.entries.values())];\n const delta: Delta<E> = { type: ActionTypes.DELETE, entries: [e] };\n this.notifyAll(v, delta);\n Array.from(this.slices.values()).forEach(s => {\n s.delete(e);\n });\n }\n else {\n this.deleteA(e)\n }\n\n }\n\n /**\n * Delete N elements.\n * @param ...e\n * @example Put Todo instances.\n```\nstore.delete(todo1, todo2);\n```\n */\n deleteN(...e: E[]) {\n this.deleteA(e);\n }\n\n /**\n * Delete N elements.\n * @param ...e\n * @example Put Todo instances.\n```\nstore.delete(todo1, todo2);\n```\n */\n deleteA(e: E[]) {\n e.forEach(e => {\n this.deleteActive(e);\n const guid = (<any>e)[this.GUID_KEY];\n this.entries.delete(guid);\n this.deleteIDEntry(e);\n Array.from(this.slices.values()).forEach(s => {\n s.entries.delete(guid);\n });\n });\n //Create a new array reference to trigger Angular change detection.\n let v: E[] = [...Array.from(this.entries.values())];\n const delta: Delta<E> = { type: ActionTypes.DELETE, entries: e };\n this.notifyAll(v, delta);\n Array.from(this.slices.values()).forEach(s => {\n s.deleteA(e);\n });\n }\n\n /**\n * Delete elements by {@link Predicate}.\n * @param p The predicate.\n * @example Put Todo instances.\n```\nstore.delete(todo1, todo2);\n```\n */\n deleteP(p: Predicate<E>) {\n const d: E[] = [];\n Array.from(this.entries.values()).forEach(e => {\n if (p(e)) {\n d.push(e);\n const id = (<any>e)[this.GUID_KEY];\n this.entries.delete(id);\n this.deleteActive(e);\n this.deleteIDEntry(e);\n }\n });\n //Create a new array reference to trigger Angular change detection.\n let v: E[] = [...Array.from(this.entries.values())];\n const delta: Delta<E> = { type: ActionTypes.DELETE, entries: d };\n this.notifyAll(v, delta);\n Array.from(this.slices.values()).forEach(s => {\n s.deleteA(d);\n });\n }\n\n /**\n * If the entity has the `id` key initialized with a value,\n * then also add the entity to the `idEntries`.\n *\n * @param e The element to be added to the `idEntries`.\n */\n private updateIDEntry(e: E) {\n if ((<any>e)[this.ID_KEY]) {\n this.idEntries.set((<any>e)[this.ID_KEY], e);\n }\n }\n\n /**\n * If the entity has the `id` key initialized with a value,\n * then also delete the entity to the `idEntries`.\n *\n * @param e The element to be added to the `idEntries`.\n */\n private deleteIDEntry(e: E) {\n if ((<any>e)[this.ID_KEY]) {\n this.idEntries.delete((<any>e)[this.ID_KEY]);\n }\n }\n\n /**\n * Resets the store and all contained slice instances to empty.\n * Also perform delta notification that sends all current store entries.\n * The ActionType.RESET code is sent with the delta notification. Slices\n * send their own delta notification.\n * \n * @example Reset the store.\n```\nstore.reset();\n```\n */\n reset() {\n const delta: Delta<E> = {\n type: ActionTypes.RESET,\n entries: Array.from(this.entries.values())\n };\n this.notifyAll([], delta);\n this.entries = new Map();\n Array.from(this.slices.values()).forEach(s => {\n s.reset();\n });\n }\n\n /**\n * Call all the notifiers at once.\n *\n * @param v\n * @param delta\n */\n protected override notifyAll(v: E[], delta: Delta<E>) {\n super.notifyAll(v, delta);\n this.notifyLoading.next(this.loading);\n }\n}","import { ReplaySubject, Observable } from 'rxjs';\n\n/**\n * Initialize hte store with this.\n */\nexport interface ValueReset {\n value: any;\n reset?: any;\n}\n\n/**\n * OStore Key Value Reset\n */\nexport interface ObsValueReset {\n value: any;\n reset?: any;\n obs?: Observable<any>;\n}\n\nexport interface KeyObsValueReset {\n [key: string]: ObsValueReset;\n}\n\nexport interface OStoreStart {\n [key: string]: ValueReset;\n}\n\nexport class OStore<E extends KeyObsValueReset> {\n /**\n * Start keys and values\n * passed in via constructor.\n */\n public S!: E;\n\n constructor(start: OStoreStart) {\n if (start) {\n this.S = <E>start;\n const keys = Object.keys(start);\n keys.forEach((k) => {\n const ovr = start[k] as ObsValueReset;\n this.post(ovr, ovr.value);\n ovr.obs = this.observe(ovr);\n });\n }\n }\n\n /**\n * Reset the state of the OStore to the\n * values or reset provided in the constructor\n * {@link OStoreStart} instance.\n */\n public reset() {\n if (this.S) {\n const keys = Object.keys(this.S);\n keys.forEach((k) => {\n const ovr: ObsValueReset = this.S[k];\n this.put(ovr, ovr.reset ? ovr.reset : ovr.value);\n });\n }\n }\n\n /**\n * Map of Key Value pair entries\n * containing values store in this store.\n */\n public entries: Map<any, any> = new Map();\n\n /**\n * Map of replay subject id to `ReplaySubject` instance.\n */\n private subjects: Map<any, ReplaySubject<any>> = new Map();\n\n /**\n * Set create a key value pair entry and creates a\n * corresponding replay subject instance that will\n * be used to broadcast updates.\n *\n * @param key The key identifying the value\n * @param value The value\n */\n private post(key: ObsValueReset, value: any) {\n this.entries.set(key, value);\n this.subjects.set(key, new ReplaySubject(1));\n //Emit immediately so that Observers can receive\n //the value straight away.\n const subject = this.subjects.get(key);\n if (subject) {\n subject.next(value);\n }\n }\n /**\n * Update a value and notify subscribers.\n *\n * @param key\n * @param value\n */\n public put(key: any, value: any) {\n this.entries.set(key, value);\n const subject = this.subjects.get(key);\n if (subject) {\n subject.next(value);\n }\n }\n\n /**\n * Deletes both the value entry and the corresponding {@link ReplaySubject}.\n * Will unsubscribe the {@link ReplaySubject} prior to deleting it,\n * severing communication with corresponding {@link Observable}s.\n *\n * @param key\n */\n public delete(key: any) {\n //===========================================\n // Delete the entry\n //===========================================\n this.entries.delete(key);\n const subject = this.subjects.get(key);\n if (subject) {\n subject.next(undefined);\n }\n }\n\n /**\n * Clear all entries. \n * \n * Note that \n * this will call delete for on all\n * keys defined which also also \n * unsubscribes and deletes \n * all the sbujects.\n */\n public clear() {\n for (let key of this.entries.keys()) {\n this.delete(key);\n }\n }\n\n /**\n * Observe changes to the values.\n *\n * @param key\n * @return An {@link Observable} of the value\n */\n public observe(key: any): Observable<any> | undefined {\n return this.subjects.get(key)\n ? this.subjects.get(key)!.asObservable()\n : undefined;\n }\n\n /**\n * Check whether a value exists.\n *\n * @param key\n * @return True if the entry exists ( Is not null or undefined ) and false otherwise.\n */\n public exists(key: any): boolean {\n return !!this.entries.get(key);\n }\n\n /**\n * Retrieve a snapshot of the\n * value.\n *\n * @param key\n * @return A snapshot of the value corresponding to the key.\n */\n public snapshot(key: any): any {\n return this.entries.get(key);\n }\n\n /**\n * Indicates whether the store is empty.\n * @return true if the store is empty, false otherwise.\n */\n public isEmpty() {\n return Array.from(this.entries.values()).length == 0;\n }\n\n /**\n * Returns the number of key value pairs contained.\n *\n * @return the number of entries in the store.\n */\n public count() {\n return Array.from(this.entries.values()).length;\n }\n}","/*\n * Public API Surface of slice\n */\n\nexport * from './lib/models/'\nexport * from './lib/AbstractStore'\nexport * from './lib/EStore'\nexport * from './lib/OStore'\nexport * from './lib/Slice'\nexport * from './lib/utilities'\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fireflysemantics-slice.mjs","sources":["../../../projects/slice/src/lib/models/StoreConfig.ts","../../../projects/slice/src/lib/models/Entity.ts","../../../projects/slice/src/lib/models/constants.ts","../../../projects/slice/src/lib/AbstractStore.ts","../../../projects/slice/src/lib/utilities.ts","../../../projects/slice/src/lib/Slice.ts","../../../projects/slice/src/lib/EStore.ts","../../../projects/slice/src/lib/OStore.ts","../../../projects/slice/src/public-api.ts","../../../projects/slice/src/fireflysemantics-slice.ts"],"sourcesContent":["/**\n * The configuration interface for the entity store\n * defines the strings for the ID Key and Global ID key.\n */\nexport interface StoreConfig {\n idKey: string;\n guidKey: string;\n};\n ","\n/**\n * Abstract Entity base class with the \n * gid and id properties declared.\n */\nexport abstract class Entity {\n public gid?:string\n public id?:string \n}","export const SCROLL_UP_DEBOUNCE_TIME_20 = 20;\nexport const SEARCH_DEBOUNCE_TIME_300 = 300;\n","import { ReplaySubject, Observable } from \"rxjs\"\nimport { map } from \"rxjs/operators\"\nimport { Delta, Predicate } from \"./models\"\nimport { StoreConfig } from \"./models/StoreConfig\"\n\nconst { freeze } = Object\n\nconst ESTORE_DEFAULT_ID_KEY = \"id\"\nconst ESTORE_DEFAULT_GID_KEY = \"gid\"\n\nexport const ESTORE_CONFIG_DEFAULT: StoreConfig = freeze({\n idKey: ESTORE_DEFAULT_ID_KEY,\n guidKey: ESTORE_DEFAULT_GID_KEY\n});\n\nexport abstract class AbstractStore<E> {\n\n /**\n * The configuration for the store.\n */\n public config: StoreConfig;\n\n constructor(config?: StoreConfig) {\n this.config = config\n ? freeze({ ...ESTORE_CONFIG_DEFAULT, ...config })\n : ESTORE_CONFIG_DEFAULT;\n }\n \n /**\n * Notifies observers of the store query.\n */\n protected notifyQuery = new ReplaySubject<string>(1);\n\n /**\n * The current query state.\n */\n protected _query: string = '';\n\n /**\n * Sets the current query state and notifies observers.\n */\n set query(query: string) {\n this._query = query;\n this.notifyQuery.next(this._query);\n }\n\n /**\n * @return A snapshot of the query state.\n */\n get query() {\n return this._query;\n }\n\n /**\n * Observe the query.\n * @example\n <pre>\n let query$ = source.observeQuery();\n </pre>\n */\n public observeQuery() {\n return this.notifyQuery.asObservable();\n }\n\n\n /**\n * The current id key for the EStore instance.\n * @return this.config.idKey;\n */\n get ID_KEY(): string {\n return this.config.idKey\n }\n /**\n * The current guid key for the EStore instance.\n * @return this.config.guidKey;\n */\n get GUID_KEY(): string {\n return this.config.guidKey\n }\n\n /**\n * Primary index for the stores elements.\n */\n public entries: Map<string, E> = new Map()\n\n /**\n * The element entries that are keyed by\n * an id generated on the server.\n */\n public idEntries: Map<string, E> = new Map()\n\n /**\n * Create notifications that broacast\n * the entire set of entries.\n */\n protected notify = new ReplaySubject<E[]>(1)\n\n /**\n * Create notifications that broacast\n * store or slice delta state changes.\n */\n protected notifyDelta = new ReplaySubject<Delta<E>>(1)\n\n /**\n * Call all the notifiers at once.\n *\n * @param v\n * @param delta\n */\n protected notifyAll(v: E[], delta: Delta<E>) {\n this.notify.next(v);\n this.notifyDelta.next(delta);\n }\n\n /**\n * Observe store state changes.\n * @param sort Optional sorting function yielding a sorted observable.\n * @example\n```\nlet todos$ = source.observe();\n//or with a sort by title function\nlet todos$ = source.observe((a, b)=>(a.title > b.title ? -1 : 1));\n```\n */\n public observe(sort?: (a: any, b: any) => number): Observable<E[]> {\n if (sort) {\n return this.notify.pipe(map((e: E[]) => e.sort(sort)));\n }\n return this.notify.asObservable();\n }\n\n /**\n * An Observable<E[]> reference\n * to the entities in the store or\n * Slice instance.\n * \n */\n public obs: Observable<E[]> = this.observe()\n\n\n\n /**\n * Observe delta updates.\n * @example\n <pre>\n let todos$ = source.observeDelta();\n </pre>\n */\n public observeDelta(): Observable<Delta<E>> {\n return this.notifyDelta.asObservable();\n }\n\n /**\n * Check whether the store is empty.\n * \n * @return A hot {@link Observable} that indicates whether the store is empty.\n * \n * @example\n <pre>\n source.isEmpty();\n </pre>\n */\n isEmpty(): Observable<boolean> {\n return this.notify.pipe(\n map((entries: E[]) => entries.length == 0)\n );\n }\n\n /**\n * Check whether the store is empty.\n * \n * @return A snapshot that indicates whether the store is empty.\n * \n * @example\n <pre>\n source.isEmpty();\n </pre>\n */\n isEmptySnapshot(): boolean {\n return Array.from(this.entries.values()).length == 0;\n }\n\n /**\n * Returns the number of entries contained.\n * @param p The predicate to apply in order to filter the count\n */\n count(p?: Predicate<E>): Observable<number> {\n if (p) {\n return this.notify.pipe(\n map((e: E[]) => e.reduce((total, e) => total + (p(e) ? 1 : 0), 0))\n );\n }\n return this.notify.pipe(map((entries: E[]) => entries.length));\n }\n\n /**\n * Returns a snapshot of the number of entries contained in the store.\n * @param p The predicate to apply in order to filter the count\n */\n countSnapshot(p?: Predicate<E>): number {\n if (p) {\n return Array.from(this.entries.values()).filter(p).length;\n }\n return Array.from(this.entries.values()).length;\n }\n\n /**\n * Snapshot of all entries.\n * \n * @return Snapshot array of all the elements the entities the store contains.\n * \n * @example Observe a snapshot of all the entities in the store.\n```\nlet selectedTodos:Todo[] = source.allSnapshot();\n```\n */\n allSnapshot(): E[] {\n return Array.from(this.entries.values());\n }\n\n /**\n * Returns true if the entries contain the identified instance.\n * \n * @param target Either an instance of type `E` or a `guid` identifying the instance. \n * @param byId Whether the lookup should be performed with the `id` key rather than the `guid`.\n * @returns true if the instance identified by the guid exists, false otherwise.\n * \n * @example\n <pre>\n let contains:boolean = source.contains(guid);\n </pre>\n */\n contains(target: E | string):boolean {\n if (typeof target === \"string\") {\n return this.entries.get(target) ? true : false;\n }\n const guid: string = (<any>target)[this.config.guidKey];\n return this.entries.get(guid) ? true : false;\n }\n\n /**\n * Returns true if the entries contain the identified instance.\n * \n * @param target Either an instance of type `E` or a `id` identifying the instance. \n * @returns true if the instance identified by the `id` exists, false otherwise.\n * \n * @example\n <pre>\n let contains:boolean = source.contains(guid);\n </pre>\n */\n containsById(target: E | string):boolean {\n if (typeof target === \"string\") {\n return this.idEntries.get(target) ? true : false;\n }\n const id: string = (<any>target)[this.config.idKey];\n return this.idEntries.get(id) ? true : false;\n }\n\n /**\n * Find and return the entity identified by the GUID parameter\n * if it exists and return it.\n *\n * @param guid\n * @return The entity instance if it exists, null otherwise\n */\n findOne(guid: string): E | undefined{\n return this.entries.get(guid);\n }\n\n /**\n * Find and return the entity identified by the ID parameter\n * if it exists and return it.\n *\n * @param id\n * @return The entity instance if it exists, null otherwise\n */\n findOneByID(id: string): E | undefined {\n return this.idEntries.get(id);\n }\n\n /**\n * Snapshot of the entries that match the predicate.\n *\n * @param p The predicate used to query for the selection.\n * @return A snapshot array containing the entities that match the predicate.\n * \n * @example Select all the `Todo` instance where the `title` length is greater than 100. \n```\nlet todos:Todo[]=store.select(todo=>todo.title.length>100);\n```\n */\n select(p: Predicate<E>): E[] {\n const selected: E[] = [];\n Array.from(this.entries.values()).forEach(e => {\n if (p(e)) {\n selected.push(e);\n }\n });\n return selected;\n }\n\n /** \n * Compare entities by GUID \n * @param e1 The first entity\n * @param e2 The second entity\n * @return true if the two entities have equal GUID ids\n * @example Compare `todo1` with `todo2` by `gid`.\n```\nif (equalsByGUID(todo1, todo2)){...};\n```\n */\n equalsByGUID(e1:any, e2:any) {\n return e1[this.GUID_KEY] == e2[this.GUID_KEY];\n }\n\n /**\n * Compare entities by ID \n * @param e1 The first entity\n * @param e2 The second entity\n * @return true if the two entities have equal ID ids\n * @example Compare `todo1` with `todo2` by `id`.\n```\nif (equalsByID(todo1, todo2)){...};\n```\n */\n equalsByID(e1:any, e2:any) {\n return e1[this.ID_KEY] == e2[this.ID_KEY];\n }\n /**\n * Calls complete on all {@link BehaviorSubject} instances.\n * \n * Call destroy when disposing of the store.\n */\n destroy() {\n this.notify.complete();\n this.notifyDelta.complete();\n this.notifyQuery.complete();\n }\n}","import { ESTORE_CONFIG_DEFAULT } from \"./AbstractStore\";\nimport { Observable, fromEvent, of } from 'rxjs'\nimport { switchMap, pairwise, debounceTime, distinctUntilChanged, map, filter } from 'rxjs/operators'\nimport { nanoid} from \"nanoid\"\nimport { scrollPosition } from \"./models/scrollPosition\";\n\n/**\n * Returns all the entities are distinct by the \n * `property` value argument. \n * \n * Note that the implementation uses a `Map<string, E>` to\n * index the entities by key. Therefore the more recent occurences \n * matching a key instance will overwrite the previous ones.\n * \n * @param property The name of the property to check for distinct values by.\n * @param entities The entities in the array.\n * \n * @example\n ```\n let todos: Todo[] = [\n { id: 1, title: \"Lets do it!\" },\n { id: 1, title: \"Lets do it again!\" },\n { id: 2, title: \"All done!\" }\n ];\n\n let todos2: Todo[] = [\n { id: 1, title: \"Lets do it!\" },\n { id: 2, title: \"All done!\" }\n ];\n\n expect(distinct(todos, \"id\").length).toEqual(2);\n expect(distinct(todos2, \"id\").length).toEqual(2);\n\n ```\n */\nexport function distinct<E, K extends keyof E>(entities: E[], property: K): E[] {\n const entitiesByProperty = new Map(entities.map(e => [e[property], e] as [E[K], E]));\n return Array.from(entitiesByProperty.values());\n}\n\n/**\n * Returns true if all the entities are distinct by the \n * `property` value argument.\n * \n * @param property The name of the property to check for distinct values by.\n * @param entities The entities in the array.\n * \n * @example\n * \n ```\n let todos: Todo[] = [\n { id: 1, title: \"Lets do it!\" },\n { id: 1, title: \"Lets do it again!\" },\n { id: 2, title: \"All done!\" }\n ];\n\n let todos2: Todo[] = [\n { id: 1, title: \"Lets do it!\" },\n { id: 2, title: \"All done!\" }\n ];\n\n expect(unique(todos, \"id\")).toBeFalsy();\n expect(unique(todos2, \"id\")).toBeTruthy();\n ```\n */\nexport function unique<E>(entities: E[], property: keyof E):boolean {\n return entities.length == distinct(entities, property).length ? true : false;\n}\n\n/**\n * Create a global ID\n * @return The global id.\n * \n * @example\n * let e.guid = GUID();\n */\nexport function GUID() {\n return nanoid();\n}\n\n/**\n * Set the global identfication property on the instance.\n * \n * @param e Entity we want to set the global identifier on.\n * @param gid The name of the `gid` property. If not specified it defaults to `ESTORE_CONFIG_DEFAULT.guidKey`.\n */\nexport function attachGUID<E>(e: E, gid?: string): string {\n const guidKey = gid ? gid : ESTORE_CONFIG_DEFAULT.guidKey\n let id: string = nanoid();\n (<any>e)[guidKey] = id\n return id\n}\n\n/**\n * Set the global identfication property on the instance.\n * \n * @param e[] Entity array we want to set the global identifiers on.\n * @param gid The name of the `gid` property. If not specified it defaults to `gid`.\n */\nexport function attachGUIDs<E>(e: E[], gid?: string) {\n e.forEach(e => {\n attachGUID(e, gid);\n });\n}\n\n/**\n * Create a shallow copy of the argument.\n * @param o The object to copy\n */\nexport function shallowCopy<E>(o: E) {\n return { ...o };\n}\n\n/**\n * Create a deep copy of the argument.\n * @param o The object to copy\n */\nexport function deepCopy<E>(o: E) {\n return JSON.parse(JSON.stringify(o));\n}\n\n/**\n * Gets the current active value from the `active`\n * Map. \n * \n * This is used for the scenario where we are managing\n * a single active instance. For example \n * when selecting a book from a collection of books. \n * \n * The selected `Book` instance becomes the active value.\n * \n * @example\n * const book:Book = getActiveValue(bookStore.active);\n * @param m \n */\nexport function getActiveValue<E>(m: Map<any, E>) {\n if (m.size) {\n return m.entries().next().value[1];\n }\n return null;\n}\n\n/**\n * The method can be used to exclude keys from an instance\n * of type `E`. \n * \n * We can use this to exclude values when searching an object.\n * \n * @param entity An instance of type E\n * @param exclude The keys to exclude\n * \n * @example\n * todo = { id: '1', description: 'Do it!' }\n * let keys = excludeKeys<Todo>(todo, ['id]);\n * // keys = ['description']\n */\nexport function excludeKeys<E>(entity: any, exclude: string[]) {\n const keys: string[] = Object.keys(entity);\n return keys.filter((key) => {\n return exclude.indexOf(key) < 0;\n });\n}\n\n/**\n * \n * @param entities The entity to search\n * @param exclude Keys to exclude from each entity\n * \n * @return E[] Array of entities with properties containing the search term.\n */\nexport function search<E>(query: string = '', entities: E[], exclude: string[] = []): E[] {\n const { isArray } = Array\n\n query = query.toLowerCase();\n\n\n return entities.filter(function (e: E) {\n //Do the keys calculation on each instance e:E\n //because an instance can have optional parameters,\n //and thus we have to check each instance, not just\n //the first one in the array.\n const keys = excludeKeys(e, exclude)\n return keys.some( (key) => {\n const value = (e as any)[key];\n if (!value) {\n return false;\n }\n if (isArray(value)) {\n return value.some(v => {\n return String(v).toLowerCase().includes(query);\n });\n }\n else {\n return String(value).toLowerCase().includes(query);\n }\n })\n });\n}\n\n/**\n * @param scrollable The element being scrolled\n * @param debounceMS The number of milliseconds to debounce scroll events\n * @param sp The function returning the scroll position coordinates.\n * @return A boolean valued observable indicating whether the element is scrolling up or down\n */\nexport function scrollingUp(\n scrollable: any, \n debounceMS: number, \n sp: scrollPosition): Observable<boolean> {\n return fromEvent(scrollable, 'scroll').pipe(\n debounceTime(debounceMS), \n distinctUntilChanged(), \n map(v => sp()), \n pairwise(), \n switchMap(p => {\n const y1 = p[0][1]\n const y2 = p[1][1]\n return y1 - y2 > 0 ? of(false) : of(true)\n }))\n}\n\n/**\n * Filters the entities properties to the set contained in the \n * `keys` array.\n * \n * @param keys The array of keys that the entity be limited to\n * @param entity The entity to map\n * @return An entity instance that has only the keys provided in the keys array \n */\nexport function mapEntity(keys:string[], entity:any) {\n const result:any = {}\n keys.forEach(k=>{\n result[k] = entity[k]\n })\n return result\n}\n\n/**\n * Returns an `Observable<E>` instance that \n * filters for arguments where the property \n * value matches the provided value.\n * \n * @param value The value targeted\n * @param propertyName The name of the property to contain the value\n * @param obs The Slice Object Store Observable\n * @returns Observable<E>\n */\n export function onFilteredEvent<E>(\n value: any,\n propertyName: string,\n obs: Observable<E>\n): Observable<E> {\n return obs.pipe(filter((e:any) => !!(e && e[propertyName] === value)));\n}","import { Delta, ActionTypes, Predicate } from \"./models\"\nimport { AbstractStore } from \"./AbstractStore\"\nimport { EStore } from \"./EStore\";\n\nconst { isArray } = Array\n\nexport class Slice<E> extends AbstractStore<E> {\n\n\n /* The slice element entries */\n public override entries: Map<string, E> = new Map();\n\n /**\n * perform initial notification to all observers,\n * such that operations like {@link combineLatest}{}\n * will execute at least once.\n * \n * @param label The slice label\n * @param predicate The slice predicate\n * @param eStore The EStore instance containing the elements considered for slicing\n * \n * @example \n <pre>\n //Empty slice\n new Slice<Todo>(Todo.COMPLETE, todo=>!todo.complete);\n \n //Initialized slice\n let todos = [new Todo(false, \"You complete me!\"), \n new Todo(true, \"You completed me!\")];\n new Slice<Todo>(Todo.COMPLETE, todo=>!todo.complete, todos);\n </pre>\n */\n constructor(\n public label: string,\n public predicate: Predicate<E>,\n public eStore: EStore<E>) {\n super();\n const entities: E[] = eStore.allSnapshot()\n this.config = eStore.config\n let passed: E[] = this.test(predicate, entities);\n const delta: Delta<E> = { type: ActionTypes.INTIALIZE, entries: passed };\n this.post(passed);\n this.notifyDelta.next(delta)\n }\n\n /**\n * Add the element if it satisfies the predicate\n * and notify subscribers that an element was added.\n *\n * @param e The element to be considered for slicing\n */\n post(e: E | E[]) {\n if (isArray(e)) {\n this.postA(e)\n }\n else {\n if (this.predicate(e)) {\n const id = (<any>e)[this.config.guidKey];\n this.entries.set(id, e);\n const delta: Delta<E> = { type: ActionTypes.POST, entries: [e] };\n this.notifyAll([...Array.from(this.entries.values())], delta);\n }\n }\n }\n\n /**\n * Add the elements if they satisfy the predicate\n * and notify subscribers that elements were added.\n *\n * @param e The element to be considered for slicing\n */\n postN(...e: E[]) {\n this.postA(e);\n }\n\n /**\n * Add the elements if they satisfy the predicate\n * and notify subscribers that elements were added.\n *\n * @param e The element to be considered for slicing\n */\n postA(e: E[]) {\n const d: E[] = [];\n e.forEach(e => {\n if (this.predicate(e)) {\n const id = (<any>e)[this.config.guidKey];\n this.entries.set(id, e);\n d.push(e);\n }\n });\n const delta: Delta<E> = { type: ActionTypes.POST, entries: d };\n this.notifyAll([...Array.from(this.entries.values())], delta);\n }\n\n /**\n * Delete an element from the slice.\n *\n * @param e The element to be deleted if it satisfies the predicate\n */\n delete(e: E | E[]) {\n if (isArray(e)) {\n this.deleteA(e)\n }\n else {\n if (this.predicate(e)) {\n const id = (<any>e)[this.config.guidKey]\n this.entries.delete(id)\n const delta: Delta<E> = { type: ActionTypes.DELETE, entries: [e] }\n this.notifyAll(Array.from(this.entries.values()), delta)\n }\n }\n }\n\n /**\n * @param e The elements to be deleted if it satisfies the predicate\n */\n deleteN(...e: E[]) {\n this.deleteA(e);\n }\n\n /**\n * @param e The elements to be deleted if they satisfy the predicate\n */\n deleteA(e: E[]) {\n const d: E[] = []\n e.forEach(e => {\n if (this.predicate(e)) {\n const id = (<any>e)[this.config.guidKey]\n d.push(this.entries.get(id)!)\n this.entries.delete(id)\n }\n });\n const delta: Delta<E> = { type: ActionTypes.DELETE, entries: d };\n this.notifyAll([...Array.from(this.entries.values())], delta);\n }\n\n /**\n * Update the slice when an Entity instance mutates.\n *\n * @param e The element to be added or deleted depending on predicate reevaluation\n */\n put(e: E | E[]) {\n if (isArray(e)) {\n this.putA(e)\n }\n else {\n const id = (<any>e)[this.config.guidKey];\n if (this.entries.get(id)) {\n if (!this.predicate(e)) {\n //Note that this is a ActionTypes.DELETE because we are removing the\n //entity from the slice.\n const delta: Delta<E> = { type: ActionTypes.DELETE, entries: [e] };\n this.entries.delete(id);\n this.notifyAll([...Array.from(this.entries.values())], delta);\n }\n } else if (this.predicate(e)) {\n this.entries.set(id, e);\n const delta: Delta<E> = { type: ActionTypes.PUT, entries: [e] };\n this.notifyAll([...Array.from(this.entries.values())], delta);\n } \n }\n }\n\n /**\n * Update the slice with mutated Entity instances.\n *\n * @param e The elements to be deleted if it satisfies the predicate\n */\n putN(...e: E[]) {\n this.putA(e);\n }\n\n /**\n * @param e The elements to be put\n */\n putA(e: E[]) {\n const d: E[] = []; //instances to delete\n const u: E[] = []; //instances to update\n e.forEach(e => {\n const id = (<any>e)[this.config.guidKey];\n if (this.entries.get(id)) {\n if (!this.predicate(e)) {\n d.push(this.entries.get(id)!);\n }\n } else if (this.predicate(e)) {\n u.push(e);\n }\n });\n if (d.length > 0) {\n d.forEach(e => {\n this.entries.delete((<any>e)[this.config.guidKey])\n });\n const delta: Delta<E> = { type: ActionTypes.DELETE, entries: d };\n this.notifyAll([...Array.from(this.entries.values())], delta);\n }\n if (u.length > 0) {\n u.forEach(e => {\n this.entries.set((<any>e)[this.config.guidKey], e);\n });\n const delta: Delta<E> = { type: ActionTypes.PUT, entries: u };\n this.notifyAll([...Array.from(this.entries.values())], delta);\n }\n }\n\n /**\n * Resets the slice to empty.\n */\n reset() {\n let delta: Delta<E> = {\n type: ActionTypes.RESET,\n entries: [...Array.from(this.entries.values())]\n };\n this.notifyAll([], delta);\n this.entries = new Map();\n }\n\n /**\n * Utility method that applies the predicate to an array\n * of entities and return the ones that pass the test.\n *\n * Used to create an initial set of values\n * that should be part of the `Slice`.\n *\n * @param p\n * @param e\n * @return The the array of entities that pass the predicate test.\n */\n public test(p: Predicate<E>, e: E[]): E[] {\n let v: E[] = [];\n e.forEach((e: E) => {\n if (p(e)) {\n v.push(e);\n }\n });\n return v;\n }\n}\n","import { AbstractStore } from './AbstractStore';\nimport { StoreConfig } from './models/StoreConfig';\nimport { GUID } from './utilities';\n\nimport { ActionTypes, Predicate, Delta } from './models/';\nimport { ReplaySubject, of, Observable } from 'rxjs';\nimport { takeWhile, filter, switchMap } from 'rxjs/operators';\nimport { Slice } from './Slice';\n\n/**\n * This `todoFactory` code will be used to illustrate the API examples. The following\n * utilities are used in the tests and the API Typedoc examples contained here.\n * @example Utilities for API Examples\n```\nexport const enum TodoSliceEnum {\n COMPLETE = \"Complete\",\n INCOMPLETE = \"Incomplete\"\n}\n\nexport class Todo {\n constructor(public complete: boolean, public title: string,public gid?:string, public id?:string) {}\n}\n\nexport let todos = [new Todo(false, \"You complete me!\"), new Todo(true, \"You completed me!\")];\n\nexport function todosFactory():Todo[] {\n return [new Todo(false, \"You complete me!\"), new Todo(true, \"You completed me!\")];\n}\n ``` \n */\n\nexport class EStore<E> extends AbstractStore<E> {\n /**\n * Store constructor (Initialization with element is optional)\n *\n * perform initial notification to all observers,\n * such that function like {@link combineLatest}{}\n * will execute at least once.\n * @param entities\n * @example Dynamic `EStore<Todo>` Creation \n```\n// Initialize the Store\nlet store: EStore<Todo> = new EStore<Todo>(todosFactory());\n```*/\n constructor(entities: E[] = [], config?: StoreConfig) {\n super(config);\n const delta: Delta<E> = { type: ActionTypes.INTIALIZE, entries: entities };\n this.post(entities)\n this.notifyDelta.next(delta);\n }\n\n /**\n * Calls complete on all {@link BehaviorSubject} instances.\n * \n * Call destroy when disposing of the store.\n */\n override destroy() {\n super.destroy()\n this.notifyLoading.complete()\n this.notifyActive.complete()\n this.slices.forEach(slice => slice.destroy())\n }\n\n /**\n * Toggles the entity:\n * \n * If the store contains the entity\n * it will be deleted. If the store \n * does not contains the entity,\n * it is added.\n * @param e \n * @example Toggle the `Todo` instance\n```\nestore.post(todo);\n// Remove todo\nestore.toggle(todo);\n// Add it back\nestore.toggle(todo);\n\n```\n */\n public toggle(e: E) {\n if (this.contains(e)) {\n this.delete(e);\n } else {\n this.post(e);\n }\n }\n\n /**\n * Notifies observers when the store is empty.\n */\n private notifyActive = new ReplaySubject<Map<string, E>>(1);\n\n\n /**\n * `Map` of active entties. The instance is public and can be used\n * directly to add and remove active entities, however we recommend\n * using the {@link addActive} and {@link deleteActive} methods.\n */\n public active: Map<string, E> = new Map();\n\n /**\n * Add multiple entity entities to active.\n * \n * If the entity is not contained in the store it is added\n * to the store before it is added to `active`.\n * \n * Also we clone the map prior to broadcasting it with\n * `notifyActive` to make sure we will trigger Angular \n * change detection in the event that it maintains \n * a reference to the `active` state `Map` instance.\n * \n * @example Add a `todo1` and `todo2` as active\n```\naddActive(todo1);\naddActive(todo2);\n```\n */\n public addActive(e: E) {\n if (this.contains(e)) {\n this.active.set((<any>e).gid, e);\n this.notifyActive.next(new Map(this.active));\n }\n else {\n this.post(e);\n this.active.set((<any>e).gid, e);\n this.notifyActive.next(new Map(this.active));\n }\n }\n\n /**\n * Delete an entity as active.\n * \n * Also we clone the map prior to broadcasting it with\n * `notifyActive` to make sure we will trigger Angular \n * change detection in the event that it maintains \n * a reference to the `active` state `Map` instance.\n * \n * @example Mark a `todo` instance as active\n ```\ndeleteActive(todo1);\ndeleteActive(todo2);\n ```\n */\n public deleteActive(e: E) {\n this.active.delete((<any>e).gid);\n this.notifyActive.next(new Map(this.active));\n }\n\n /**\n * Clear / reset the active entity map.\n * \n * Also we clone the map prior to broadcasting it with\n * `notifyActive` to make sure we will trigger Angular \n * change detection in the event that it maintains \n * a reference to the `active` state `Map` instance.\n * \n * @example Mark a `todo` instance as active\n ```\ndeleteActive(todo1);\ndeleteActive(todo2);\n ```\n */\n clearActive() {\n this.active.clear();\n this.notifyActive.next(new Map(this.active));\n }\n\n /**\n * Observe the active entity.\n * @example\n <pre>\n let active$ = source.observeActive();\n </pre>\n */\n public observeActive() {\n return this.notifyActive.asObservable()\n }\n\n /**\n * Observe the active entity.\n * @example\n <pre>\n let active$ = source.activeSnapshot();\n </pre>\n */\n public activeSnapshot() {\n return Array.from(this.active.values())\n }\n\n\n //================================================\n // LOADING\n //================================================\n\n /**\n * Observable of errors occurred during a load request.\n * \n * The error Observable should be created by the \n * client.\n */\n public loadingError!: Observable<any>;\n\n /**\n * Notifies observers when the store is loading.\n * \n * This is a common pattern found when implementing\n * `Observable` data sources.\n */\n private notifyLoading = new ReplaySubject<boolean>(1);\n\n /**\n * The current loading state. Use loading when fetching new\n * data for the store. The default loading state is `true`.\n * \n * This is such that if data is fetched asynchronously \n * in a service, components can wait on loading notification\n * before attempting to retrieve data from the service.\n *\n * Loading could be based on a composite response. For example\n * when the stock and mutual funds have loaded, set loading to `false`.\n */\n private _loading: boolean = true;\n\n /**\n * Sets the current loading state and notifies observers.\n */\n set loading(loading: boolean) {\n this._loading = loading;\n this.notifyLoading.next(this._loading);\n }\n\n /**\n * @return A snapshot of the loading state.\n */\n get loading() {\n return this._loading;\n }\n\n /**\n * Observe loading.\n * @example\n <pre>\n let loading$ = source.observeLoading();\n </pre>\n\n Note that this obverable piped through\n `takeWhile(v->v, true), such that it will \n complete after each emission.\n\n See:\n https://medium.com/@ole.ersoy/waiting-on-estore-to-load-8dcbe161613c\n\n For more details.\n */\n public observeLoading() {\n return this.notifyLoading.asObservable().\n pipe(takeWhile(v => v, true));\n }\n\n /**\n * Notfiies when loading has completed.\n */\n public observeLoadingComplete() {\n return this.observeLoading().pipe(\n filter(loading => loading == false),\n switchMap(() => of(true)))\n }\n\n\n\n\n\n\n //================================================\n // SEARCHING\n //================================================\n /**\n * Observable of errors occurred during a search request.\n * \n * The error Observable should be created by the \n * client.\n */\n public searchError!: Observable<any>;\n\n /**\n * Notifies observers that a search is in progress.\n * \n * This is a common pattern found when implementing\n * `Observable` data sources.\n */\n private notifySearching = new ReplaySubject<boolean>(1);\n\n /**\n * The current `searching` state. Use `searching`\n * for example to display a spinnner \n * when performing a search. \n * The default `searching` state is `false`.\n */\n private _searching: boolean = false;\n\n /**\n * Sets the current searching state and notifies observers.\n */\n set searching(searching: boolean) {\n this._searching = searching;\n this.notifySearching.next(this._searching);\n }\n\n /**\n * @return A snapshot of the searching state.\n */\n get searching() {\n return this._searching;\n }\n\n /**\n * Observe searching.\n * @example\n <pre>\n let searching$ = source.observeSearching();\n </pre>\n \n Note that this obverable piped through\n `takeWhile(v->v, true), such that it will \n complete after each emission.\n \n See:\n https://medium.com/@ole.ersoy/waiting-on-estore-to-load-8dcbe161613c\n \n For more details.\n */\n public observeSearching(): Observable<boolean> {\n return this.notifySearching.asObservable().\n pipe(takeWhile(v => v, true));\n }\n\n /**\n * Notfiies when searching has completed.\n */\n public observeSearchingComplete(): Observable<boolean> {\n return this.observeSearching().pipe(\n filter(searching => searching == false),\n switchMap(() => of(true)))\n }\n\n /**\n * Store slices\n */\n private slices: Map<string, Slice<E>> = new Map();\n\n /**\n * Adds a slice to the store and keys it by the slices label.\n *\n * @param p\n * @param label\n * \n * @example Setup a Todo Slice for COMPLETE Todos\n```\nsource.addSlice(todo => todo.complete, TodoSlices.COMPLETE);\n```\n */\n addSlice(p: Predicate<E>, label: string) {\n const slice: Slice<E> = new Slice(\n label,\n p,\n this)\n this.slices.set(slice.label, slice)\n }\n\n /**\n * Remove a slice\n * @param label The label identifying the slice\n * \n * @example Remove the TodoSlices.COMPLETE Slice\n```\nsource.removeSlice(TodoSlices.COMPLETE);\n```\n */\n removeSlice(label: string) {\n this.slices.delete(label);\n }\n\n /**\n * Get a slice\n * @param label The label identifying the slice\n * @return The Slice instance or undefined \n * \n * @example Get the TodoSlices.COMPLETE slice\n```\nsource.getSlice(TodoSlices.COMPLETE);\n```\n */\n getSlice(label: string): Slice<E> | undefined {\n return this.slices.get(label);\n }\n\n /**\n * Post (Add a new) element(s) to the store.\n * @param e An indiidual entity or an array of entities\n * @example Post a `todo`.\n```\nstore.post(todo);\n```\n */\n post(e: E | E[]) {\n if (!Array.isArray(e)) {\n const guid: string = (<any>e)[this.GUID_KEY]\n ? (<any>e)[this.GUID_KEY]\n : GUID();\n (<any>e)[this.GUID_KEY] = guid;\n this.entries.set(guid, e);\n this.updateIDEntry(e);\n Array.from(this.slices.values()).forEach(s => {\n s.post(e);\n });\n //Create a new array reference to trigger Angular change detection.\n let v: E[] = [...Array.from(this.entries.values())];\n const delta: Delta<E> = { type: ActionTypes.POST, entries: [e] };\n this.notifyAll(v, delta);\n }\n else {\n this.postA(e)\n }\n }\n\n /**\n * Post elements to the store.\n * @param ...e\n * @example Post two `Todo` instances.\n```\nstore.post(todo1, todo2);\n```\n */\n postN(...e: E[]) {\n e.forEach(e => {\n const guid: string = (<any>e)[this.GUID_KEY]\n ? (<any>e)[this.GUID_KEY]\n : GUID();\n (<any>e)[this.GUID_KEY] = guid;\n this.entries.set(guid, e);\n this.updateIDEntry(e);\n });\n Array.from(this.slices.values()).forEach(s => {\n s.postA(e);\n });\n //Create a new array reference to trigger Angular change detection.\n let v: E[] = [...Array.from(this.entries.values())];\n const delta: Delta<E> = { type: ActionTypes.POST, entries: e };\n this.notifyAll(v, delta);\n }\n\n /**\n * Post (Add) an array of elements to the store.\n * @param e\n * @example Post a `Todo` array.\n```\nstore.post([todo1, todo2]);\n```\n */\n postA(e: E[]) {\n this.postN(...e);\n }\n\n /**\n * Put (Update) an element.\n * @param e\n * @example Put a Todo instance.\n```\nstore.put(todo1);\n```\n */\n put(e: E | E[]) {\n if (!Array.isArray(e)) {\n let id: string = (<any>e)[this.GUID_KEY];\n this.entries.set(id, e);\n this.updateIDEntry(e);\n let v: E[] = [...Array.from(this.entries.values())];\n this.notify.next(v);\n const delta: Delta<E> = { type: ActionTypes.PUT, entries: [e] };\n this.notifyDelta.next(delta);\n Array.from(this.slices.values()).forEach(s => {\n s.put(e);\n });\n }\n else {\n this.putA(e)\n }\n }\n\n /**\n * Put (Update) an element or add an element that was read from a persistence source\n * and thus already has an assigned global id`.\n * @param e\n * @example Put Todo instances.\n```\nstore.put(todo1, todo2);\n```\n */\n putN(...e: E[]) {\n this.putA(e);\n }\n\n /**\n * Put (Update) the array of elements.\n * @param e\n * @example Put Todo instances.\n```\nstore.put([todo1, todo2]);\n```\n */\n putA(e: E[]) {\n e.forEach(e => {\n let guid: string = (<any>e)[this.GUID_KEY]\n this.entries.set(guid, e)\n this.updateIDEntry(e);\n });\n //Create a new array reference to trigger Angular change detection.\n let v: E[] = [...Array.from(this.entries.values())];\n this.notify.next(v);\n const delta: Delta<E> = { type: ActionTypes.PUT, entries: e };\n this.notifyDelta.next(delta);\n Array.from(this.slices.values()).forEach(s => {\n s.putA(e);\n });\n }\n\n /**\n * Delete (Update) the array of elements.\n * @param e\n * @example Delete todo1.\n```\nstore.delete(todo1]);\n```\n */\n delete(e: E | E[]) {\n if (!Array.isArray(e)) {\n this.deleteActive(e);\n const guid = (<any>e)[this.GUID_KEY];\n this.entries.delete(guid);\n this.deleteIDEntry(e);\n Array.from(this.slices.values()).forEach(s => {\n s.entries.delete(guid);\n });\n //Create a new array reference to trigger Angular change detection.\n let v: E[] = [...Array.from(this.entries.values())];\n const delta: Delta<E> = { type: ActionTypes.DELETE, entries: [e] };\n this.notifyAll(v, delta);\n Array.from(this.slices.values()).forEach(s => {\n s.delete(e);\n });\n }\n else {\n this.deleteA(e)\n }\n\n }\n\n /**\n * Delete N elements.\n * @param ...e\n * @example Put Todo instances.\n```\nstore.delete(todo1, todo2);\n```\n */\n deleteN(...e: E[]) {\n this.deleteA(e);\n }\n\n /**\n * Delete N elements.\n * @param ...e\n * @example Put Todo instances.\n```\nstore.delete(todo1, todo2);\n```\n */\n deleteA(e: E[]) {\n e.forEach(e => {\n this.deleteActive(e);\n const guid = (<any>e)[this.GUID_KEY];\n this.entries.delete(guid);\n this.deleteIDEntry(e);\n Array.from(this.slices.values()).forEach(s => {\n s.entries.delete(guid);\n });\n });\n //Create a new array reference to trigger Angular change detection.\n let v: E[] = [...Array.from(this.entries.values())];\n const delta: Delta<E> = { type: ActionTypes.DELETE, entries: e };\n this.notifyAll(v, delta);\n Array.from(this.slices.values()).forEach(s => {\n s.deleteA(e);\n });\n }\n\n /**\n * Delete elements by {@link Predicate}.\n * @param p The predicate.\n * @example Put Todo instances.\n```\nstore.delete(todo1, todo2);\n```\n */\n deleteP(p: Predicate<E>) {\n const d: E[] = [];\n Array.from(this.entries.values()).forEach(e => {\n if (p(e)) {\n d.push(e);\n const id = (<any>e)[this.GUID_KEY];\n this.entries.delete(id);\n this.deleteActive(e);\n this.deleteIDEntry(e);\n }\n });\n //Create a new array reference to trigger Angular change detection.\n let v: E[] = [...Array.from(this.entries.values())];\n const delta: Delta<E> = { type: ActionTypes.DELETE, entries: d };\n this.notifyAll(v, delta);\n Array.from(this.slices.values()).forEach(s => {\n s.deleteA(d);\n });\n }\n\n /**\n * If the entity has the `id` key initialized with a value,\n * then also add the entity to the `idEntries`.\n *\n * @param e The element to be added to the `idEntries`.\n */\n private updateIDEntry(e: E) {\n if ((<any>e)[this.ID_KEY]) {\n this.idEntries.set((<any>e)[this.ID_KEY], e);\n }\n }\n\n /**\n * If the entity has the `id` key initialized with a value,\n * then also delete the entity to the `idEntries`.\n *\n * @param e The element to be added to the `idEntries`.\n */\n private deleteIDEntry(e: E) {\n if ((<any>e)[this.ID_KEY]) {\n this.idEntries.delete((<any>e)[this.ID_KEY]);\n }\n }\n\n /**\n * Resets the store and all contained slice instances to empty.\n * Also perform delta notification that sends all current store entries.\n * The ActionType.RESET code is sent with the delta notification. Slices\n * send their own delta notification.\n * \n * @example Reset the store.\n```\nstore.reset();\n```\n */\n reset() {\n const delta: Delta<E> = {\n type: ActionTypes.RESET,\n entries: Array.from(this.entries.values())\n };\n this.notifyAll([], delta);\n this.entries = new Map();\n Array.from(this.slices.values()).forEach(s => {\n s.reset();\n });\n }\n\n /**\n * Call all the notifiers at once.\n *\n * @param v\n * @param delta\n */\n protected override notifyAll(v: E[], delta: Delta<E>) {\n super.notifyAll(v, delta);\n this.notifyLoading.next(this.loading);\n }\n}","import { ReplaySubject, Observable } from 'rxjs';\n\n/**\n * Initialize hte store with this.\n */\nexport interface ValueReset {\n value: any;\n reset?: any;\n}\n\n/**\n * OStore Key Value Reset\n */\nexport interface ObsValueReset {\n value: any;\n reset?: any;\n obs: Observable<any>;\n}\n\nexport interface KeyObsValueReset {\n [key: string]: ObsValueReset;\n}\n\nexport interface OStoreStart {\n [key: string]: ValueReset;\n}\n\nexport class OStore<E extends KeyObsValueReset> {\n /**\n * Start keys and values\n * passed in via constructor.\n */\n public S!: E;\n\n constructor(start: OStoreStart) {\n if (start) {\n this.S = <E>start;\n const keys = Object.keys(start);\n keys.forEach((k) => {\n const ovr = start[k] as ObsValueReset;\n this.post(ovr, ovr.value);\n ovr.obs = this.observe(ovr)!;\n });\n }\n }\n\n /**\n * Reset the state of the OStore to the\n * values or reset provided in the constructor\n * {@link OStoreStart} instance.\n */\n public reset() {\n if (this.S) {\n const keys = Object.keys(this.S);\n keys.forEach((k) => {\n const ovr: ObsValueReset = this.S[k];\n this.put(ovr, ovr.reset ? ovr.reset : ovr.value);\n });\n }\n }\n\n /**\n * Map of Key Value pair entries\n * containing values store in this store.\n */\n public entries: Map<any, any> = new Map();\n\n /**\n * Map of replay subject id to `ReplaySubject` instance.\n */\n private subjects: Map<any, ReplaySubject<any>> = new Map();\n\n /**\n * Set create a key value pair entry and creates a\n * corresponding replay subject instance that will\n * be used to broadcast updates.\n *\n * @param key The key identifying the value\n * @param value The value\n */\n private post(key: ObsValueReset, value: any) {\n this.entries.set(key, value);\n this.subjects.set(key, new ReplaySubject(1));\n //Emit immediately so that Observers can receive\n //the value straight away.\n const subject = this.subjects.get(key);\n if (subject) {\n subject.next(value);\n }\n }\n /**\n * Update a value and notify subscribers.\n *\n * @param key\n * @param value\n */\n public put(key: any, value: any) {\n this.entries.set(key, value);\n const subject = this.subjects.get(key);\n if (subject) {\n subject.next(value);\n }\n }\n\n /**\n * Deletes both the value entry and the corresponding {@link ReplaySubject}.\n * Will unsubscribe the {@link ReplaySubject} prior to deleting it,\n * severing communication with corresponding {@link Observable}s.\n *\n * @param key\n */\n public delete(key: any) {\n //===========================================\n // Delete the entry\n //===========================================\n this.entries.delete(key);\n const subject = this.subjects.get(key);\n if (subject) {\n subject.next(undefined);\n }\n }\n\n /**\n * Clear all entries. \n * \n * Note that \n * this will call delete for on all\n * keys defined which also also \n * unsubscribes and deletes \n * all the sbujects.\n */\n public clear() {\n for (let key of this.entries.keys()) {\n this.delete(key);\n }\n }\n\n /**\n * Observe changes to the values.\n *\n * @param key\n * @return An {@link Observable} of the value\n */\n public observe(key: any): Observable<any> | undefined {\n return this.subjects.get(key)\n ? this.subjects.get(key)!.asObservable()\n : undefined;\n }\n\n /**\n * Check whether a value exists.\n *\n * @param key\n * @return True if the entry exists ( Is not null or undefined ) and false otherwise.\n */\n public exists(key: any): boolean {\n return !!this.entries.get(key);\n }\n\n /**\n * Retrieve a snapshot of the\n * value.\n *\n * @param key\n * @return A snapshot of the value corresponding to the key.\n */\n public snapshot(key: any): any {\n return this.entries.get(key);\n }\n\n /**\n * Indicates whether the store is empty.\n * @return true if the store is empty, false otherwise.\n */\n public isEmpty() {\n return Array.from(this.entries.values()).length == 0;\n }\n\n /**\n * Returns the number of key value pairs contained.\n *\n * @return the number of entries in the store.\n */\n public count() {\n return Array.from(this.entries.values()).length;\n }\n}","/*\n * Public API Surface of slice\n */\n\nexport * from './lib/models/'\nexport * from './lib/AbstractStore'\nexport * from './lib/EStore'\nexport * from './lib/OStore'\nexport * from './lib/Slice'\nexport * from './lib/utilities'\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
package/lib/OStore.d.ts CHANGED
@@ -12,7 +12,7 @@ export interface ValueReset {
12
12
  export interface ObsValueReset {
13
13
  value: any;
14
14
  reset?: any;
15
- obs?: Observable<any>;
15
+ obs: Observable<any>;
16
16
  }
17
17
  export interface KeyObsValueReset {
18
18
  [key: string]: ObsValueReset;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fireflysemantics/slice",
3
- "version": "17.0.12",
3
+ "version": "17.0.14",
4
4
  "peerDependencies": {
5
5
  "nanoid": "^5.0.4",
6
6
  "@types/nanoid": "*",