@fireflysemantics/slice 16.2.14 → 16.2.16
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 +15 -5
- package/esm2020/lib/OStore.mjs +145 -0
- package/fesm2015/fireflysemantics-slice.mjs +1506 -0
- package/fesm2015/fireflysemantics-slice.mjs.map +1 -0
- package/{fesm2022 → fesm2020}/fireflysemantics-slice.mjs +28 -16
- package/{fesm2022 → fesm2020}/fireflysemantics-slice.mjs.map +1 -1
- package/lib/OStore.d.ts +18 -12
- package/package.json +11 -5
- package/esm2022/lib/OStore.mjs +0 -133
- /package/{esm2022 → esm2020}/fireflysemantics-slice.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/AbstractStore.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/EStore.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/Slice.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/models/ActionTypes.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/models/Delta.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/models/Entity.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/models/Predicate.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/models/StoreConfig.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/models/constants.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/models/index.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/models/scrollPosition.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/utilities.mjs +0 -0
- /package/{esm2022 → esm2020}/public-api.mjs +0 -0
package/README.md
CHANGED
@@ -1,19 +1,29 @@
|
|
1
|
-
[](https://travis-ci.org/fireflysemantics/slice)
|
2
|
-
|
3
1
|

|
4
2
|
|
5
3
|
# @fireflysemantics/slice
|
6
4
|
|
7
|
-
Lightweight Javascript Reactive State Management for
|
5
|
+
Lightweight Javascript Reactive State Management for Angular Applications.
|
8
6
|
|
9
7
|
If you like the [@fireflysemantics/slice API](https://fireflysemantics.github.io/slice/doc/) please star our [Github Repository](https://github.com/fireflysemantics/slice).
|
10
8
|
|
11
9
|
# Install
|
12
10
|
|
13
|
-
|
11
|
+
|
12
|
+
Install Slice with the `nanoid` peer dependency:
|
13
|
+
|
14
|
+
- `v17.0.x` for Angular 17
|
15
|
+
- `v16.2.x` for Angular 16
|
16
|
+
- `v15.2.x` for Angular 15
|
17
|
+
|
18
|
+
So for example for an Angular 15 project run.
|
19
|
+
|
20
|
+
```
|
21
|
+
npm i @fireflysemantics/slice@15.2.x nanoid
|
22
|
+
```
|
23
|
+
For Angular 17 run.
|
14
24
|
|
15
25
|
```
|
16
|
-
npm i @fireflysemantics/slice
|
26
|
+
npm i @fireflysemantics/slice@lastest nanoid
|
17
27
|
```
|
18
28
|
|
19
29
|
# Firefly Semantics Slice Development Center Media and Documentation
|
@@ -0,0 +1,145 @@
|
|
1
|
+
import { ReplaySubject } from 'rxjs';
|
2
|
+
export class OStore {
|
3
|
+
constructor(start) {
|
4
|
+
/**
|
5
|
+
* Map of Key Value pair entries
|
6
|
+
* containing values store in this store.
|
7
|
+
*/
|
8
|
+
this.entries = new Map();
|
9
|
+
/**
|
10
|
+
* Map of replay subject id to `ReplaySubject` instance.
|
11
|
+
*/
|
12
|
+
this.subjects = new Map();
|
13
|
+
if (start) {
|
14
|
+
this.S = start;
|
15
|
+
const keys = Object.keys(start);
|
16
|
+
keys.forEach((k) => {
|
17
|
+
const ovr = start[k];
|
18
|
+
this.post(ovr, ovr.value);
|
19
|
+
ovr.obs = this.observe(ovr);
|
20
|
+
});
|
21
|
+
}
|
22
|
+
}
|
23
|
+
/**
|
24
|
+
* Reset the state of the OStore to the
|
25
|
+
* values or reset provided in the constructor
|
26
|
+
* {@link OStoreStart} instance.
|
27
|
+
*/
|
28
|
+
reset() {
|
29
|
+
if (this.S) {
|
30
|
+
const keys = Object.keys(this.S);
|
31
|
+
keys.forEach((k) => {
|
32
|
+
const ovr = this.S[k];
|
33
|
+
this.put(ovr, ovr.reset ? ovr.reset : ovr.value);
|
34
|
+
});
|
35
|
+
}
|
36
|
+
}
|
37
|
+
/**
|
38
|
+
* Set create a key value pair entry and creates a
|
39
|
+
* corresponding replay subject instance that will
|
40
|
+
* be used to broadcast updates.
|
41
|
+
*
|
42
|
+
* @param key The key identifying the value
|
43
|
+
* @param value The value
|
44
|
+
*/
|
45
|
+
post(key, value) {
|
46
|
+
this.entries.set(key, value);
|
47
|
+
this.subjects.set(key, new ReplaySubject(1));
|
48
|
+
//Emit immediately so that Observers can receive
|
49
|
+
//the value straight away.
|
50
|
+
const subject = this.subjects.get(key);
|
51
|
+
if (subject) {
|
52
|
+
subject.next(value);
|
53
|
+
}
|
54
|
+
}
|
55
|
+
/**
|
56
|
+
* Update a value and notify subscribers.
|
57
|
+
*
|
58
|
+
* @param key
|
59
|
+
* @param value
|
60
|
+
*/
|
61
|
+
put(key, value) {
|
62
|
+
this.entries.set(key, value);
|
63
|
+
const subject = this.subjects.get(key);
|
64
|
+
if (subject) {
|
65
|
+
subject.next(value);
|
66
|
+
}
|
67
|
+
}
|
68
|
+
/**
|
69
|
+
* Deletes both the value entry and the corresponding {@link ReplaySubject}.
|
70
|
+
* Will unsubscribe the {@link ReplaySubject} prior to deleting it,
|
71
|
+
* severing communication with corresponding {@link Observable}s.
|
72
|
+
*
|
73
|
+
* @param key
|
74
|
+
*/
|
75
|
+
delete(key) {
|
76
|
+
//===========================================
|
77
|
+
// Delete the entry
|
78
|
+
//===========================================
|
79
|
+
this.entries.delete(key);
|
80
|
+
const subject = this.subjects.get(key);
|
81
|
+
if (subject) {
|
82
|
+
subject.next(undefined);
|
83
|
+
}
|
84
|
+
}
|
85
|
+
/**
|
86
|
+
* Clear all entries.
|
87
|
+
*
|
88
|
+
* Note that
|
89
|
+
* this will call delete for on all
|
90
|
+
* keys defined which also also
|
91
|
+
* unsubscribes and deletes
|
92
|
+
* all the sbujects.
|
93
|
+
*/
|
94
|
+
clear() {
|
95
|
+
for (let key of this.entries.keys()) {
|
96
|
+
this.delete(key);
|
97
|
+
}
|
98
|
+
}
|
99
|
+
/**
|
100
|
+
* Observe changes to the values.
|
101
|
+
*
|
102
|
+
* @param key
|
103
|
+
* @return An {@link Observable} of the value
|
104
|
+
*/
|
105
|
+
observe(key) {
|
106
|
+
return this.subjects.get(key)
|
107
|
+
? this.subjects.get(key).asObservable()
|
108
|
+
: undefined;
|
109
|
+
}
|
110
|
+
/**
|
111
|
+
* Check whether a value exists.
|
112
|
+
*
|
113
|
+
* @param key
|
114
|
+
* @return True if the entry exists ( Is not null or undefined ) and false otherwise.
|
115
|
+
*/
|
116
|
+
exists(key) {
|
117
|
+
return !!this.entries.get(key);
|
118
|
+
}
|
119
|
+
/**
|
120
|
+
* Retrieve a snapshot of the
|
121
|
+
* value.
|
122
|
+
*
|
123
|
+
* @param key
|
124
|
+
* @return A snapshot of the value corresponding to the key.
|
125
|
+
*/
|
126
|
+
snapshot(key) {
|
127
|
+
return this.entries.get(key);
|
128
|
+
}
|
129
|
+
/**
|
130
|
+
* Indicates whether the store is empty.
|
131
|
+
* @return true if the store is empty, false otherwise.
|
132
|
+
*/
|
133
|
+
isEmpty() {
|
134
|
+
return Array.from(this.entries.values()).length == 0;
|
135
|
+
}
|
136
|
+
/**
|
137
|
+
* Returns the number of key value pairs contained.
|
138
|
+
*
|
139
|
+
* @return the number of entries in the store.
|
140
|
+
*/
|
141
|
+
count() {
|
142
|
+
return Array.from(this.entries.values()).length;
|
143
|
+
}
|
144
|
+
}
|
145
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiT1N0b3JlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvc2xpY2Uvc3JjL2xpYi9PU3RvcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGFBQWEsRUFBYyxNQUFNLE1BQU0sQ0FBQztBQTJCakQsTUFBTSxPQUFPLE1BQU07SUFPakIsWUFBWSxLQUFrQjtRQTJCOUI7OztXQUdHO1FBQ0ksWUFBTyxHQUFrQixJQUFJLEdBQUcsRUFBRSxDQUFDO1FBRTFDOztXQUVHO1FBQ0ssYUFBUSxHQUFpQyxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBbkN6RCxJQUFJLEtBQUssRUFBRTtZQUNULElBQUksQ0FBQyxDQUFDLEdBQU0sS0FBSyxDQUFDO1lBQ2xCLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDaEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO2dCQUNqQixNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFrQixDQUFDO2dCQUN0QyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQzFCLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUM5QixDQUFDLENBQUMsQ0FBQztTQUNKO0lBQ0gsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxLQUFLO1FBQ1YsSUFBSSxJQUFJLENBQUMsQ0FBQyxFQUFFO1lBQ1YsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDakMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO2dCQUNqQixNQUFNLEdBQUcsR0FBa0IsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFD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QUFDO0lBQ2xELENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFJlcGxheVN1YmplY3QsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcblxuLyoqXG4gKiBJbml0aWFsaXplIGh0ZSBzdG9yZSB3aXRoIHRoaXMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVmFsdWVSZXNldCB7XG4gIHZhbHVlOiBhbnk7XG4gIHJlc2V0PzogYW55O1xufVxuXG4vKipcbiAqIE9TdG9yZSBLZXkgVmFsdWUgUmVzZXRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPYnNWYWx1ZVJlc2V0IHtcbiAgdmFsdWU6IGFueTtcbiAgcmVzZXQ/OiBhbnk7XG4gIG9icz86IE9ic2VydmFibGU8YW55Pjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBLZXlPYnNWYWx1ZVJlc2V0IHtcbiAgW2tleTogc3RyaW5nXTogT2JzVmFsdWVSZXNldDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBPU3RvcmVTdGFydCB7XG4gIFtrZXk6IHN0cmluZ106IFZhbHVlUmVzZXQ7XG59XG5cbmV4cG9ydCBjbGFzcyBPU3RvcmU8RSBleHRlbmRzIEtleU9ic1ZhbHVlUmVzZXQ+IHtcbiAgLyoqXG4gICAqIFN0YXJ0IGtleXMgYW5kIHZhbHVlc1xuICAgKiBwYXNzZWQgaW4gdmlhIGNvbnN0cnVjdG9yLlxuICAgKi9cbiAgcHVibGljIFMhOiBFO1xuXG4gIGNvbnN0cnVjdG9yKHN0YXJ0OiBPU3RvcmVTdGFydCkge1xuICAgIGlmIChzdGFydCkge1xuICAgICAgdGhpcy5TID0gPEU+c3RhcnQ7XG4gICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoc3RhcnQpO1xuICAgICAga2V5cy5mb3JFYWNoKChrKSA9PiB7XG4gICAgICAgIGNvbnN0IG92ciA9IHN0YXJ0W2tdIGFzIE9ic1ZhbHVlUmVzZXQ7XG4gICAgICAgIHRoaXMucG9zdChvdnIsIG92ci52YWx1ZSk7XG4gICAgICAgIG92ci5vYnMgPSB0aGlzLm9ic2VydmUob3ZyKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNldCB0aGUgc3RhdGUgb2YgdGhlIE9TdG9yZSB0byB0aGVcbiAgICogdmFsdWVzIG9yIHJlc2V0IHByb3ZpZGVkIGluIHRoZSBjb25zdHJ1Y3RvclxuICAgKiB7QGxpbmsgT1N0b3JlU3RhcnR9IGluc3RhbmNlLlxuICAgKi9cbiAgcHVibGljIHJlc2V0KCkge1xuICAgIGlmICh0aGlzLlMpIHtcbiAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyh0aGlzLlMpO1xuICAgICAga2V5cy5mb3JFYWNoKChrKSA9PiB7XG4gICAgICAgIGNvbnN0IG92cjogT2JzVmFsdWVSZXNldCA9IHRoaXMuU1trXTtcbiAgICAgICAgdGhpcy5wdXQob3ZyLCBvdnIucmVzZXQgPyBvdnIucmVzZXQgOiBvdnIudmFsdWUpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE1hcCBvZiBLZXkgVmFsdWUgcGFpciBlbnRyaWVzXG4gICAqIGNvbnRhaW5pbmcgdmFsdWVzIHN0b3JlIGluIHRoaXMgc3RvcmUuXG4gICAqL1xuICBwdWJsaWMgZW50cmllczogTWFwPGFueSwgYW55PiA9IG5ldyBNYXAoKTtcblxuICAvKipcbiAgICogTWFwIG9mIHJlcGxheSBzdWJqZWN0IGlkIHRvIGBSZXBsYXlTdWJqZWN0YCBpbnN0YW5jZS5cbiAgICovXG4gIHByaXZhdGUgc3ViamVjdHM6IE1hcDxhbnksIFJlcGxheVN1YmplY3Q8YW55Pj4gPSBuZXcgTWFwKCk7XG5cbiAgLyoqXG4gICAqIFNldCBjcmVhdGUgYSBrZXkgdmFsdWUgcGFpciBlbnRyeSBhbmQgY3JlYXRlcyBhXG4gICAqIGNvcnJlc3BvbmRpbmcgcmVwbGF5IHN1YmplY3QgaW5zdGFuY2UgdGhhdCB3aWxsXG4gICAqIGJlIHVzZWQgdG8gYnJvYWRjYXN0IHVwZGF0ZXMuXG4gICAqXG4gICAqIEBwYXJhbSBrZXkgVGhlIGtleSBpZGVudGlmeWluZyB0aGUgdmFsdWVcbiAgICogQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZVxuICAgKi9cbiAgcHJpdmF0ZSBwb3N0KGtleTogT2JzVmFsdWVSZXNldCwgdmFsdWU6IGFueSkge1xuICAgIHRoaXMuZW50cmllcy5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgdGhpcy5zdWJqZWN0cy5zZXQoa2V5LCBuZXcgUmVwbGF5U3ViamVjdCgxKSk7XG4gICAgLy9FbWl0IGltbWVkaWF0ZWx5IHNvIHRoYXQgT2JzZXJ2ZXJzIGNhbiByZWNlaXZlXG4gICAgLy90aGUgdmFsdWUgc3RyYWlnaHQgYXdheS5cbiAgICBjb25zdCBzdWJqZWN0ID0gdGhpcy5zdWJqZWN0cy5nZXQoa2V5KTtcbiAgICBpZiAoc3ViamVjdCkge1xuICAgICAgc3ViamVjdC5uZXh0KHZhbHVlKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFVwZGF0ZSBhIHZhbHVlIGFuZCBub3RpZnkgc3Vic2NyaWJlcnMuXG4gICAqXG4gICAqIEBwYXJhbSBrZXlcbiAgICogQHBhcmFtIHZhbHVlXG4gICAqL1xuICBwdWJsaWMgcHV0KGtleTogYW55LCB2YWx1ZTogYW55KSB7XG4gICAgdGhpcy5lbnRyaWVzLnNldChrZXksIHZhbHVlKTtcbiAgICBjb25zdCBzdWJqZWN0ID0gdGhpcy5zdWJqZWN0cy5nZXQoa2V5KTtcbiAgICBpZiAoc3ViamVjdCkge1xuICAgICAgc3ViamVjdC5uZXh0KHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlcyBib3RoIHRoZSB2YWx1ZSBlbnRyeSBhbmQgdGhlIGNvcnJlc3BvbmRpbmcge0BsaW5rIFJlcGxheVN1YmplY3R9LlxuICAgKiBXaWxsIHVuc3Vic2NyaWJlIHRoZSB7QGxpbmsgUmVwbGF5U3ViamVjdH0gcHJpb3IgdG8gZGVsZXRpbmcgaXQsXG4gICAqIHNldmVyaW5nIGNvbW11bmljYXRpb24gd2l0aCBjb3JyZXNwb25kaW5nIHtAbGluayBPYnNlcnZhYmxlfXMuXG4gICAqXG4gICAqIEBwYXJhbSBrZXlcbiAgICovXG4gIHB1YmxpYyBkZWxldGUoa2V5OiBhbnkpIHtcbiAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAvLyBEZWxldGUgdGhlIGVudHJ5XG4gICAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgdGhpcy5lbnRyaWVzLmRlbGV0ZShrZXkpO1xuICAgIGNvbnN0IHN1YmplY3QgPSB0aGlzLnN1YmplY3RzLmdldChrZXkpO1xuICAgIGlmIChzdWJqZWN0KSB7XG4gICAgICBzdWJqZWN0Lm5leHQodW5kZWZpbmVkKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2xlYXIgYWxsIGVudHJpZXMuICBcbiAgICogXG4gICAqIE5vdGUgdGhhdCBcbiAgICogdGhpcyB3aWxsIGNhbGwgZGVsZXRlIGZvciBvbiBhbGxcbiAgICoga2V5cyBkZWZpbmVkIHdoaWNoIGFsc28gYWxzbyBcbiAgICogdW5zdWJzY3JpYmVzIGFuZCBkZWxldGVzIFxuICAgKiBhbGwgdGhlIHNidWplY3RzLlxuICAgKi9cbiAgcHVibGljIGNsZWFyKCkge1xuICAgIGZvciAobGV0IGtleSBvZiB0aGlzLmVudHJpZXMua2V5cygpKSB7XG4gICAgICAgIHRoaXMuZGVsZXRlKGtleSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE9ic2VydmUgY2hhbmdlcyB0byB0aGUgdmFsdWVzLlxuICAgKlxuICAgKiBAcGFyYW0ga2V5XG4gICAqIEByZXR1cm4gQW4ge0BsaW5rIE9ic2VydmFibGV9IG9mIHRoZSB2YWx1ZVxuICAgKi9cbiAgcHVibGljIG9ic2VydmUoa2V5OiBhbnkpOiBPYnNlcnZhYmxlPGFueT4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnN1YmplY3RzLmdldChrZXkpXG4gICAgICA/IHRoaXMuc3ViamVjdHMuZ2V0KGtleSkhLmFzT2JzZXJ2YWJsZSgpXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayB3aGV0aGVyIGEgdmFsdWUgZXhpc3RzLlxuICAgKlxuICAgKiBAcGFyYW0ga2V5XG4gICAqIEByZXR1cm4gVHJ1ZSBpZiB0aGUgZW50cnkgZXhpc3RzICggSXMgbm90IG51bGwgb3IgdW5kZWZpbmVkICkgYW5kIGZhbHNlIG90aGVyd2lzZS5cbiAgICovXG4gIHB1YmxpYyBleGlzdHMoa2V5OiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLmVudHJpZXMuZ2V0KGtleSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmUgYSBzbmFwc2hvdCBvZiB0aGVcbiAgICogdmFsdWUuXG4gICAqXG4gICAqIEBwYXJhbSBrZXlcbiAgICogQHJldHVybiBBIHNuYXBzaG90IG9mIHRoZSB2YWx1ZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBrZXkuXG4gICAqL1xuICBwdWJsaWMgc25hcHNob3Qoa2V5OiBhbnkpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmVudHJpZXMuZ2V0KGtleSk7XG4gIH1cblxuICAvKipcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIHN0b3JlIGlzIGVtcHR5LlxuICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIHN0b3JlIGlzIGVtcHR5LCBmYWxzZSBvdGhlcndpc2UuXG4gICAqL1xuICBwdWJsaWMgaXNFbXB0eSgpIHtcbiAgICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLmVudHJpZXMudmFsdWVzKCkpLmxlbmd0aCA9PSAwO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIG51bWJlciBvZiBrZXkgdmFsdWUgcGFpcnMgY29udGFpbmVkLlxuICAgKlxuICAgKiBAcmV0dXJuIHRoZSBudW1iZXIgb2YgZW50cmllcyBpbiB0aGUgc3RvcmUuXG4gICAqL1xuICBwdWJsaWMgY291bnQoKSB7XG4gICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy5lbnRyaWVzLnZhbHVlcygpKS5sZW5ndGg7XG4gIH1cbn1cbiJdfQ==
|