@igo2/utils 18.0.1-next.1 → 18.0.1
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/esm2022/igo2-utils.mjs +5 -0
- package/esm2022/lib/base64.mjs +85 -0
- package/esm2022/lib/cache.utils.mjs +10 -0
- package/esm2022/lib/change.interface.mjs +7 -0
- package/esm2022/lib/change.mjs +87 -0
- package/esm2022/lib/clipboard.mjs +52 -0
- package/esm2022/lib/compression/compressedData.interface.mjs +2 -0
- package/esm2022/lib/compression/compression.utils.mjs +124 -0
- package/esm2022/lib/compression/index.mjs +3 -0
- package/esm2022/lib/date.utils.mjs +10 -0
- package/esm2022/lib/dom.utils.mjs +16 -0
- package/esm2022/lib/files/excel.mjs +37 -0
- package/esm2022/lib/files/file.mjs +45 -0
- package/esm2022/lib/files/index.mjs +3 -0
- package/esm2022/lib/index.mjs +19 -0
- package/esm2022/lib/number-utils.mjs +7 -0
- package/esm2022/lib/object-utils.mjs +249 -0
- package/esm2022/lib/strenum.mjs +8 -0
- package/esm2022/lib/string-utils.mjs +115 -0
- package/esm2022/lib/theme.utils.mjs +23 -0
- package/esm2022/lib/tree/index.mjs +2 -0
- package/esm2022/lib/tree/tree.mjs +208 -0
- package/esm2022/lib/user-agent.mjs +3 -0
- package/esm2022/lib/uuid.mjs +8 -0
- package/esm2022/lib/watcher.mjs +37 -0
- package/esm2022/public_api.mjs +5 -0
- package/fesm2022/igo2-utils.mjs.map +1 -1
- package/package.json +6 -4
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
export const TREE_SEPERATOR = '.';
|
|
2
|
+
export class Tree {
|
|
3
|
+
config;
|
|
4
|
+
_data;
|
|
5
|
+
getChildren;
|
|
6
|
+
getId;
|
|
7
|
+
getLevel;
|
|
8
|
+
constructor(initialData, config) {
|
|
9
|
+
this.config = config;
|
|
10
|
+
this.getChildren = config.getChildren;
|
|
11
|
+
this.getId = config.getId;
|
|
12
|
+
this.getLevel = config.getLevel;
|
|
13
|
+
this._data = this.sortDeep(initialData);
|
|
14
|
+
}
|
|
15
|
+
get data() {
|
|
16
|
+
return this._data;
|
|
17
|
+
}
|
|
18
|
+
get flattened() {
|
|
19
|
+
return this.flatten([...this.data]);
|
|
20
|
+
}
|
|
21
|
+
add(...nodes) {
|
|
22
|
+
this.sortDeep(nodes);
|
|
23
|
+
this._data.unshift(...nodes);
|
|
24
|
+
return nodes;
|
|
25
|
+
}
|
|
26
|
+
addBefore(beforeId, ...nodes) {
|
|
27
|
+
this.sortDeep(nodes);
|
|
28
|
+
this._addBefore(beforeId, this._data, ...nodes);
|
|
29
|
+
}
|
|
30
|
+
remove(...nodes) {
|
|
31
|
+
return this._remove(...nodes);
|
|
32
|
+
}
|
|
33
|
+
clear() {
|
|
34
|
+
this._data = [];
|
|
35
|
+
}
|
|
36
|
+
exist(node) {
|
|
37
|
+
const id = this.getId(node);
|
|
38
|
+
return this.flattened.some((layer) => this.getId(layer) === id);
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Move a node to a different position
|
|
42
|
+
* @param node
|
|
43
|
+
* @param beforeTo The position of index into the tree. If -1 move at the end
|
|
44
|
+
*/
|
|
45
|
+
moveTo(beforeTo, ...nodes) {
|
|
46
|
+
const clonedBeforeTo = [...beforeTo];
|
|
47
|
+
const lastIndex = clonedBeforeTo.pop();
|
|
48
|
+
const recipient = this.getAncestorAtPosition(clonedBeforeTo);
|
|
49
|
+
const beforeId = lastIndex === -1 || lastIndex >= recipient.length
|
|
50
|
+
? null
|
|
51
|
+
: this.getId(recipient[lastIndex]);
|
|
52
|
+
const nodesToMove = nodes.filter((node) => beforeId !== this.getId(node));
|
|
53
|
+
return this.move(beforeId, recipient, ...nodesToMove);
|
|
54
|
+
}
|
|
55
|
+
getPosition(node) {
|
|
56
|
+
const id = this.getId(node);
|
|
57
|
+
return this._getPosition(id);
|
|
58
|
+
}
|
|
59
|
+
_addBefore(beforeId, recipient = this._data, ...nodes) {
|
|
60
|
+
if (!beforeId) {
|
|
61
|
+
recipient.push(...nodes);
|
|
62
|
+
return nodes;
|
|
63
|
+
}
|
|
64
|
+
const beforeIndex = this.getIndex(beforeId, recipient);
|
|
65
|
+
recipient.splice(beforeIndex, 0, ...nodes);
|
|
66
|
+
return nodes;
|
|
67
|
+
}
|
|
68
|
+
_remove(...nodes) {
|
|
69
|
+
return nodes.reduce((acc, node) => {
|
|
70
|
+
const ancestor = this.getNodeAncestor(node);
|
|
71
|
+
if (!ancestor) {
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
const index = this.getIndex(this.getId(node), ancestor);
|
|
75
|
+
if (index === -1) {
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
ancestor.splice(index, 1);
|
|
79
|
+
return acc.concat(node);
|
|
80
|
+
}, []);
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Move an node before an id
|
|
84
|
+
* @param node Node to be move
|
|
85
|
+
* @param recipient
|
|
86
|
+
* @param beforeId
|
|
87
|
+
*/
|
|
88
|
+
move(beforeId, recipient, ...nodes) {
|
|
89
|
+
this._remove(...nodes);
|
|
90
|
+
return this._addBefore(beforeId, recipient, ...nodes);
|
|
91
|
+
}
|
|
92
|
+
_getPosition(id, ancestorsIndex = [], values = this._data) {
|
|
93
|
+
let indexList;
|
|
94
|
+
values.some((value, index) => {
|
|
95
|
+
if (this.getId(value) === id) {
|
|
96
|
+
indexList = ancestorsIndex.concat(index);
|
|
97
|
+
return true;
|
|
98
|
+
}
|
|
99
|
+
const children = this.getChildren(value);
|
|
100
|
+
if (children) {
|
|
101
|
+
const groupIndexList = this._getPosition(id, ancestorsIndex.concat(index), children);
|
|
102
|
+
if (groupIndexList) {
|
|
103
|
+
indexList = groupIndexList;
|
|
104
|
+
return true;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
return false;
|
|
108
|
+
});
|
|
109
|
+
return indexList;
|
|
110
|
+
}
|
|
111
|
+
getAncestorAtPosition(position) {
|
|
112
|
+
if (!position.length) {
|
|
113
|
+
return this._data;
|
|
114
|
+
}
|
|
115
|
+
const node = this.getNodeByPosition(position);
|
|
116
|
+
return this.getChildren(node);
|
|
117
|
+
}
|
|
118
|
+
/** Recursive */
|
|
119
|
+
sortDeep(data = this._data) {
|
|
120
|
+
data.forEach((node) => {
|
|
121
|
+
const children = this.getChildren(node);
|
|
122
|
+
if (children) {
|
|
123
|
+
this.sortDeep(children);
|
|
124
|
+
}
|
|
125
|
+
});
|
|
126
|
+
return this.sort(data);
|
|
127
|
+
}
|
|
128
|
+
sort(children) {
|
|
129
|
+
const sorted = children.sort((a, b) => this.getLevel(a) - this.getLevel(b));
|
|
130
|
+
return this.config.reverse ? sorted.reverse() : sorted;
|
|
131
|
+
}
|
|
132
|
+
/** Recursive */
|
|
133
|
+
_getNodeById(id, data = this._data) {
|
|
134
|
+
let node;
|
|
135
|
+
data.some((item) => {
|
|
136
|
+
if (this.getId(item) === id) {
|
|
137
|
+
node = item;
|
|
138
|
+
return true;
|
|
139
|
+
}
|
|
140
|
+
const children = this.getChildren(item);
|
|
141
|
+
if (children) {
|
|
142
|
+
node = this._getNodeById(id, children);
|
|
143
|
+
if (node) {
|
|
144
|
+
return true;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
return false;
|
|
148
|
+
});
|
|
149
|
+
return node;
|
|
150
|
+
}
|
|
151
|
+
getNodeByPosition(indexes) {
|
|
152
|
+
if (indexes.length > 1) {
|
|
153
|
+
return indexes.reduce((previousValue, index) => {
|
|
154
|
+
const ancestor = previousValue
|
|
155
|
+
? this.getChildren(previousValue)
|
|
156
|
+
: this._data;
|
|
157
|
+
return this._getByIndex(index, ancestor);
|
|
158
|
+
}, null);
|
|
159
|
+
}
|
|
160
|
+
else {
|
|
161
|
+
return this._getByIndex(indexes[0]);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
_getByIndex(index, ancestor = this._data) {
|
|
165
|
+
return ancestor[index];
|
|
166
|
+
}
|
|
167
|
+
getNodeAncestor(node) {
|
|
168
|
+
const id = this.getId(node);
|
|
169
|
+
return this.getAncestorById(id);
|
|
170
|
+
}
|
|
171
|
+
/** Recursive */
|
|
172
|
+
getAncestorById(id, data = this._data) {
|
|
173
|
+
let ancestor;
|
|
174
|
+
data.some((item) => {
|
|
175
|
+
if (this.getId(item) === id) {
|
|
176
|
+
ancestor = data;
|
|
177
|
+
return true;
|
|
178
|
+
}
|
|
179
|
+
const children = this.getChildren(item);
|
|
180
|
+
if (children) {
|
|
181
|
+
ancestor = this.getAncestorById(id, children);
|
|
182
|
+
if (ancestor) {
|
|
183
|
+
return true;
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
return false;
|
|
187
|
+
});
|
|
188
|
+
return ancestor;
|
|
189
|
+
}
|
|
190
|
+
/** Recursive */
|
|
191
|
+
flatten(nodes) {
|
|
192
|
+
return nodes.reduce((list, node) => {
|
|
193
|
+
const children = this.getChildren(node);
|
|
194
|
+
if (children) {
|
|
195
|
+
const flattened = this.flatten(children);
|
|
196
|
+
list.push(node, ...flattened);
|
|
197
|
+
}
|
|
198
|
+
else {
|
|
199
|
+
list.push(node);
|
|
200
|
+
}
|
|
201
|
+
return list;
|
|
202
|
+
}, []);
|
|
203
|
+
}
|
|
204
|
+
getIndex(id, ancestor) {
|
|
205
|
+
return ancestor.findIndex((node) => this.getId(node) === id);
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3V0aWxzL3NyYy9saWIvdHJlZS90cmVlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQU9BLE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxHQUFHLENBQUM7QUFFbEMsTUFBTSxPQUFPLElBQUk7SUFTTDtJQVJGLEtBQUssQ0FBTTtJQUVuQixXQUFXLENBQTBDO0lBQ3JELEtBQUssQ0FBMEI7SUFDL0IsUUFBUSxDQUEwQjtJQUVsQyxZQUNFLFdBQWdCLEVBQ1IsTUFBc0I7UUFBdEIsV0FBTSxHQUFOLE1BQU0sQ0FBZ0I7UUFFOUIsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDO1FBQ3RDLElBQUksQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQztRQUMxQixJQUFJLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUM7UUFFaEMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFFRCxJQUFJLElBQUk7UUFDTixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDcEIsQ0FBQztJQUVELElBQUksU0FBUztRQUNYLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVELEdBQUcsQ0FBQyxHQUFHLEtBQVU7UUFDZixJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3JCLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUM7UUFDN0IsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsU0FBUyxDQUFDLFFBQTRCLEVBQUUsR0FBRyxLQUFVO1FBQ25ELElBQUksQ0FBQyxRQUFRLENBQUMsS0FB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O1lBQ2pDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDeEMsSUFBSSxRQUFRLEVBQUUsQ0FBQztnQkFDYixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUN6QyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxHQUFHLFNBQVMsQ0FBQyxDQUFDO1lBQ2hDLENBQUM7aUJBQU0sQ0FBQztnQkFDTixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2xCLENBQUM7WUFDRCxPQUFPLElBQUksQ0FBQztRQUNkLENBQUMsRUFBRSxFQUFTLENBQUMsQ0FBQztJQUNoQixDQUFDO0lBRU8sUUFBUSxDQUFDLEVBQVUsRUFBRSxRQUFhO1FBQ3hDLE9BQU8sUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUMvRCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbnRlcmZhY2UgSVRyZWVDb25maWc8VD4ge1xuICBnZXRDaGlsZHJlbjogKGRhdGFOb2RlOiBUKSA9PiBUW10gfCB1bmRlZmluZWQgfCBudWxsO1xuICBnZXRJZDogKGRhdGFOb2RlOiBUKSA9PiBzdHJpbmc7XG4gIGdldExldmVsOiAoZGF0YU5vZGU6IFQpID0+IG51bWJlcjtcbiAgcmV2ZXJzZT86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBjb25zdCBUUkVFX1NFUEVSQVRPUiA9ICcuJztcblxuZXhwb3J0IGNsYXNzIFRyZWU8VD4ge1xuICBwcml2YXRlIF9kYXRhOiBUW107XG5cbiAgZ2V0Q2hpbGRyZW46IChkYXRhTm9kZTogVCkgPT4gVFtdIHwgdW5kZWZpbmVkIHwgbnVsbDtcbiAgZ2V0SWQ6IChkYXRhTm9kZTogVCkgPT4gc3RyaW5nO1xuICBnZXRMZXZlbDogKGRhdGFOb2RlOiBUKSA9PiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgaW5pdGlhbERhdGE6IFRbXSxcbiAgICBwcml2YXRlIGNvbmZpZzogSVRyZWVDb25maWc8VD5cbiAgKSB7XG4gICAgdGhpcy5nZXRDaGlsZHJlbiA9IGNvbmZpZy5nZXRDaGlsZHJlbjtcbiAgICB0aGlzLmdldElkID0gY29uZmlnLmdldElkO1xuICAgIHRoaXMuZ2V0TGV2ZWwgPSBjb25maWcuZ2V0TGV2ZWw7XG5cbiAgICB0aGlzLl9kYXRhID0gdGhpcy5zb3J0RGVlcChpbml0aWFsRGF0YSk7XG4gIH1cblxuICBnZXQgZGF0YSgpOiByZWFkb25seSBUW10ge1xuICAgIHJldHVybiB0aGlzLl9kYXRhO1xuICB9XG5cbiAgZ2V0IGZsYXR0ZW5lZCgpOiByZWFkb25seSBUW10ge1xuICAgIHJldHVybiB0aGlzLmZsYXR0ZW4oWy4uLnRoaXMuZGF0YV0pO1xuICB9XG5cbiAgYWRkKC4uLm5vZGVzOiBUW10pOiBUW10ge1xuICAgIHRoaXMuc29ydERlZXAobm9kZXMpO1xuICAgIHRoaXMuX2RhdGEudW5zaGlmdCguLi5ub2Rlcyk7XG4gICAgcmV0dXJuIG5vZGVzO1xuICB9XG5cbiAgYWRkQmVmb3JlKGJlZm9yZUlkOiBzdHJpbmcgfCB1bmRlZmluZWQsIC4uLm5vZGVzOiBUW10pOiB2b2lkIHtcbiAgICB0aGlzLnNvcnREZWVwKG5vZGVzKTtcbiAgICB0aGlzLl9hZGRCZWZvcmUoYmVmb3JlSWQsIHRoaXMuX2RhdGEsIC4uLm5vZGVzKTtcbiAgfVxuXG4gIHJlbW92ZSguLi5ub2RlczogVFtdKTogVFtdIHtcbiAgICByZXR1cm4gdGhpcy5fcmVtb3ZlKC4uLm5vZGVzKTtcbiAgfVxuXG4gIGNsZWFyKCk6IHZvaWQge1xuICAgIHRoaXMuX2RhdGEgPSBbXTtcbiAgfVxuXG4gIGV4aXN0KG5vZGU6IFQpOiBib29sZWFuIHtcbiAgICBjb25zdCBpZCA9IHRoaXMuZ2V0SWQobm9kZSk7XG4gICAgcmV0dXJuIHRoaXMuZmxhdHRlbmVkLnNvbWUoKGxheWVyKSA9PiB0aGlzLmdldElkKGxheWVyKSA9PT0gaWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIE1vdmUgYSBub2RlIHRvIGEgZGlmZmVyZW50IHBvc2l0aW9uXG4gICAqIEBwYXJhbSBub2RlXG4gICAqIEBwYXJhbSBiZWZvcmVUbyBUaGUgcG9zaXRpb24gb2YgaW5kZXggaW50byB0aGUgdHJlZS4gSWYgLTEgbW92ZSBhdCB0aGUgZW5kXG4gICAqL1xuICBtb3ZlVG8oYmVmb3JlVG86IG51bWJlcltdLCAuLi5ub2RlczogVFtdKTogVFtdIHtcbiAgICBjb25zdCBjbG9uZWRCZWZvcmVUbyA9IFsuLi5iZWZvcmVUb107XG4gICAgY29uc3QgbGFzdEluZGV4ID0gY2xvbmVkQmVmb3JlVG8ucG9wKCk7XG4gICAgY29uc3QgcmVjaXBpZW50ID0gdGhpcy5nZXRBbmNlc3RvckF0UG9zaXRpb24oY2xvbmVkQmVmb3JlVG8pO1xuICAgIGNvbnN0IGJlZm9yZUlkID1cbiAgICAgIGxhc3RJbmRleCA9PT0gLTEgfHwgbGFzdEluZGV4ID49IHJlY2lwaWVudC5sZW5ndGhcbiAgICAgICAgPyBudWxsXG4gICAgICAgIDogdGhpcy5nZXRJZChyZWNpcGllbnRbbGFzdEluZGV4XSk7XG5cbiAgICBjb25zdCBub2Rlc1RvTW92ZSA9IG5vZGVzLmZpbHRlcigobm9kZSkgPT4gYmVmb3JlSWQgIT09IHRoaXMuZ2V0SWQobm9kZSkpO1xuICAgIHJldHVybiB0aGlzLm1vdmUoYmVmb3JlSWQsIHJlY2lwaWVudCwgLi4ubm9kZXNUb01vdmUpO1xuICB9XG5cbiAgZ2V0UG9zaXRpb24obm9kZTogVCk6IG51bWJlcltdIHtcbiAgICBjb25zdCBpZCA9IHRoaXMuZ2V0SWQobm9kZSk7XG4gICAgcmV0dXJuIHRoaXMuX2dldFBvc2l0aW9uKGlkKTtcbiAgfVxuXG4gIHByaXZhdGUgX2FkZEJlZm9yZShcbiAgICBiZWZvcmVJZDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICAgIHJlY2lwaWVudCA9IHRoaXMuX2RhdGEsXG4gICAgLi4ubm9kZXM6IFRbXVxuICApOiBUW10ge1xuICAgIGlmICghYmVmb3JlSWQpIHtcbiAgICAgIHJlY2lwaWVudC5wdXNoKC4uLm5vZGVzKTtcbiAgICAgIHJldHVybiBub2RlcztcbiAgICB9XG5cbiAgICBjb25zdCBiZWZvcmVJbmRleCA9IHRoaXMuZ2V0SW5kZXgoYmVmb3JlSWQsIHJlY2lwaWVudCk7XG4gICAgcmVjaXBpZW50LnNwbGljZShiZWZvcmVJbmRleCwgMCwgLi4ubm9kZXMpO1xuXG4gICAgcmV0dXJuIG5vZGVzO1xuICB9XG5cbiAgcHJpdmF0ZSBfcmVtb3ZlKC4uLm5vZGVzOiBUW10pOiBUW10ge1xuICAgIHJldHVybiBub2Rlcy5yZWR1Y2UoKGFjYzogVFtdLCBub2RlKSA9PiB7XG4gICAgICBjb25zdCBhbmNlc3RvciA9IHRoaXMuZ2V0Tm9kZUFuY2VzdG9yKG5vZGUpO1xuICAgICAgaWYgKCFhbmNlc3Rvcikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5nZXRJbmRleCh0aGlzLmdldElkKG5vZGUpLCBhbmNlc3Rvcik7XG4gICAgICBpZiAoaW5kZXggPT09IC0xKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGFuY2VzdG9yLnNwbGljZShpbmRleCwgMSk7XG5cbiAgICAgIHJldHVybiBhY2MuY29uY2F0KG5vZGUpO1xuICAgIH0sIFtdKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNb3ZlIGFuIG5vZGUgYmVmb3JlIGFuIGlkXG4gICAqIEBwYXJhbSBub2RlIE5vZGUgdG8gYmUgbW92ZVxuICAgKiBAcGFyYW0gcmVjaXBpZW50XG4gICAqIEBwYXJhbSBiZWZvcmVJZFxuICAgKi9cbiAgcHJpdmF0ZSBtb3ZlKFxuICAgIGJlZm9yZUlkOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gICAgcmVjaXBpZW50OiBUW10sXG4gICAgLi4ubm9kZXM6IFRbXVxuICApOiBUW10ge1xuICAgIHRoaXMuX3JlbW92ZSguLi5ub2Rlcyk7XG4gICAgcmV0dXJuIHRoaXMuX2FkZEJlZm9yZShiZWZvcmVJZCwgcmVjaXBpZW50LCAuLi5ub2Rlcyk7XG4gIH1cblxuICBwcml2YXRlIF9nZXRQb3NpdGlvbihcbiAgICBpZDogc3RyaW5nLFxuICAgIGFuY2VzdG9yc0luZGV4OiBudW1iZXJbXSA9IFtdLFxuICAgIHZhbHVlcyA9IHRoaXMuX2RhdGFcbiAgKSB7XG4gICAgbGV0IGluZGV4TGlzdDogbnVtYmVyW107XG4gICAgdmFsdWVzLnNvbWUoKHZhbHVlLCBpbmRleCkgPT4ge1xuICAgICAgaWYgKHRoaXMuZ2V0SWQodmFsdWUpID09PSBpZCkge1xuICAgICAgICBpbmRleExpc3QgPSBhbmNlc3RvcnNJbmRleC5jb25jYXQoaW5kZXgpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY2hpbGRyZW4gPSB0aGlzLmdldENoaWxkcmVuKHZhbHVlKTtcbiAgICAgIGlmIChjaGlsZHJlbikge1xuICAgICAgICBjb25zdCBncm91cEluZGV4TGlzdCA9IHRoaXMuX2dldFBvc2l0aW9uKFxuICAgICAgICAgIGlkLFxuICAgICAgICAgIGFuY2VzdG9yc0luZGV4LmNvbmNhdChpbmRleCksXG4gICAgICAgICAgY2hpbGRyZW5cbiAgICAgICAgKTtcbiAgICAgICAgaWYgKGdyb3VwSW5kZXhMaXN0KSB7XG4gICAgICAgICAgaW5kZXhMaXN0ID0gZ3JvdXBJbmRleExpc3Q7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0pO1xuICAgIHJldHVybiBpbmRleExpc3Q7XG4gIH1cblxuICBwcml2YXRlIGdldEFuY2VzdG9yQXRQb3NpdGlvbihwb3NpdGlvbjogbnVtYmVyW10pIHtcbiAgICBpZiAoIXBvc2l0aW9uLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2RhdGE7XG4gICAgfVxuICAgIGNvbnN0IG5vZGUgPSB0aGlzLmdldE5vZGVCeVBvc2l0aW9uKHBvc2l0aW9uKTtcbiAgICByZXR1cm4gdGhpcy5nZXRDaGlsZHJlbihub2RlKTtcbiAgfVxuXG4gIC8qKiBSZWN1cnNpdmUgKi9cbiAgcHJpdmF0ZSBzb3J0RGVlcChkYXRhID0gdGhpcy5fZGF0YSk6IFRbXSB7XG4gICAgZGF0YS5mb3JFYWNoKChub2RlKSA9PiB7XG4gICAgICBjb25zdCBjaGlsZHJlbiA9IHRoaXMuZ2V0Q2hpbGRyZW4obm9kZSk7XG4gICAgICBpZiAoY2hpbGRyZW4pIHtcbiAgICAgICAgdGhpcy5zb3J0RGVlcChjaGlsZHJlbik7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMuc29ydChkYXRhKTtcbiAgfVxuXG4gIHByaXZhdGUgc29ydChjaGlsZHJlbjogVFtdKTogVFtdIHtcbiAgICBjb25zdCBzb3J0ZWQgPSBjaGlsZHJlbi5zb3J0KChhLCBiKSA9PiB0aGlzLmdldExldmVsKGEpIC0gdGhpcy5nZXRMZXZlbChiKSk7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLnJldmVyc2UgPyBzb3J0ZWQucmV2ZXJzZSgpIDogc29ydGVkO1xuICB9XG5cbiAgLyoqIFJlY3Vyc2l2ZSAqL1xuICBwcml2YXRlIF9nZXROb2RlQnlJZChpZDogc3RyaW5nLCBkYXRhID0gdGhpcy5fZGF0YSk6IFQge1xuICAgIGxldCBub2RlOiBUO1xuICAgIGRhdGEuc29tZSgoaXRlbSkgPT4ge1xuICAgICAgaWYgKHRoaXMuZ2V0SWQoaXRlbSkgPT09IGlkKSB7XG4gICAgICAgIG5vZGUgPSBpdGVtO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY2hpbGRyZW4gPSB0aGlzLmdldENoaWxkcmVuKGl0ZW0pO1xuICAgICAgaWYgKGNoaWxkcmVuKSB7XG4gICAgICAgIG5vZGUgPSB0aGlzLl9nZXROb2RlQnlJZChpZCwgY2hpbGRyZW4pO1xuICAgICAgICBpZiAobm9kZSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9KTtcbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuXG4gIGdldE5vZGVCeVBvc2l0aW9uKGluZGV4ZXM6IG51bWJlcltdKTogVCB7XG4gICAgaWYgKGluZGV4ZXMubGVuZ3RoID4gMSkge1xuICAgICAgcmV0dXJuIGluZGV4ZXMucmVkdWNlKChwcmV2aW91c1ZhbHVlOiBULCBpbmRleCkgPT4ge1xuICAgICAgICBjb25zdCBhbmNlc3RvciA9IHByZXZpb3VzVmFsdWVcbiAgICAgICAgICA/IHRoaXMuZ2V0Q2hpbGRyZW4ocHJldmlvdXNWYWx1ZSlcbiAgICAgICAgICA6IHRoaXMuX2RhdGE7XG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRCeUluZGV4KGluZGV4LCBhbmNlc3Rvcik7XG4gICAgICB9LCBudWxsKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuX2dldEJ5SW5kZXgoaW5kZXhlc1swXSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0QnlJbmRleChpbmRleDogbnVtYmVyLCBhbmNlc3RvciA9IHRoaXMuX2RhdGEpIHtcbiAgICByZXR1cm4gYW5jZXN0b3JbaW5kZXhdO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXROb2RlQW5jZXN0b3Iobm9kZTogVCk6IFRbXSB7XG4gICAgY29uc3QgaWQgPSB0aGlzLmdldElkKG5vZGUpO1xuICAgIHJldHVybiB0aGlzLmdldEFuY2VzdG9yQnlJZChpZCk7XG4gIH1cblxuICAvKiogUmVjdXJzaXZlICovXG4gIHByaXZhdGUgZ2V0QW5jZXN0b3JCeUlkKGlkOiBzdHJpbmcsIGRhdGEgPSB0aGlzLl9kYXRhKTogVFtdIHwgdW5kZWZpbmVkIHtcbiAgICBsZXQgYW5jZXN0b3I6IFRbXTtcbiAgICBkYXRhLnNvbWUoKGl0ZW0pID0+IHtcbiAgICAgIGlmICh0aGlzLmdldElkKGl0ZW0pID09PSBpZCkge1xuICAgICAgICBhbmNlc3RvciA9IGRhdGE7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjaGlsZHJlbiA9IHRoaXMuZ2V0Q2hpbGRyZW4oaXRlbSk7XG4gICAgICBpZiAoY2hpbGRyZW4pIHtcbiAgICAgICAgYW5jZXN0b3IgPSB0aGlzLmdldEFuY2VzdG9yQnlJZChpZCwgY2hpbGRyZW4pO1xuICAgICAgICBpZiAoYW5jZXN0b3IpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSk7XG4gICAgcmV0dXJuIGFuY2VzdG9yO1xuICB9XG5cbiAgLyoqIFJlY3Vyc2l2ZSAqL1xuICBwcml2YXRlIGZsYXR0ZW4obm9kZXM6IFRbXSk6IFRbXSB7XG4gICAgcmV0dXJuIG5vZGVzLnJlZHVjZSgobGlzdCwgbm9kZSkgPT4ge1xuICAgICAgY29uc3QgY2hpbGRyZW4gPSB0aGlzLmdldENoaWxkcmVuKG5vZGUpO1xuICAgICAgaWYgKGNoaWxkcmVuKSB7XG4gICAgICAgIGNvbnN0IGZsYXR0ZW5lZCA9IHRoaXMuZmxhdHRlbihjaGlsZHJlbik7XG4gICAgICAgIGxpc3QucHVzaChub2RlLCAuLi5mbGF0dGVuZWQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGlzdC5wdXNoKG5vZGUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGxpc3Q7XG4gICAgfSwgW10gYXMgVFtdKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0SW5kZXgoaWQ6IHN0cmluZywgYW5jZXN0b3I6IFRbXSk6IG51bWJlciB7XG4gICAgcmV0dXJuIGFuY2VzdG9yLmZpbmRJbmRleCgobm9kZSkgPT4gdGhpcy5nZXRJZChub2RlKSA9PT0gaWQpO1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import Bowser from 'bowser';
|
|
2
|
+
export const userAgent = Bowser.getParser(window.navigator.userAgent);
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1hZ2VudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL3V0aWxzL3NyYy9saWIvdXNlci1hZ2VudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFNNUIsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQ3ZDLE1BQU0sQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUNkLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQm93c2VyIGZyb20gJ2Jvd3Nlcic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVXNlckFnZW50IGV4dGVuZHMgQm93c2VyLlBhcnNlci5QYXJzZXIge1xuICBjb21wYXJlVmVyc2lvbjogKHZlcnNpb246IHN0cmluZykgPT4gYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNvbnN0IHVzZXJBZ2VudCA9IEJvd3Nlci5nZXRQYXJzZXIoXG4gIHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50XG4pIGFzIFVzZXJBZ2VudDtcbiJdfQ==
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export function S4() {
|
|
2
|
+
return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1);
|
|
3
|
+
}
|
|
4
|
+
export function uuid() {
|
|
5
|
+
const id = `${S4()}${S4()}-${S4()}-${S4()}-${S4()}-${S4()}${S4()}${S4()}`;
|
|
6
|
+
return id.toLowerCase();
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXVpZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL3V0aWxzL3NyYy9saWIvdXVpZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLFVBQVUsRUFBRTtJQUNoQixPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pFLENBQUM7QUFFRCxNQUFNLFVBQVUsSUFBSTtJQUNsQixNQUFNLEVBQUUsR0FBRyxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDMUUsT0FBTyxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDMUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBmdW5jdGlvbiBTNCgpIHtcbiAgcmV0dXJuICgoKDEgKyBNYXRoLnJhbmRvbSgpKSAqIDB4MTAwMDApIHwgMCkudG9TdHJpbmcoMTYpLnN1YnN0cmluZygxKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHV1aWQoKSB7XG4gIGNvbnN0IGlkID0gYCR7UzQoKX0ke1M0KCl9LSR7UzQoKX0tJHtTNCgpfS0ke1M0KCl9LSR7UzQoKX0ke1M0KCl9JHtTNCgpfWA7XG4gIHJldHVybiBpZC50b0xvd2VyQ2FzZSgpO1xufVxuIl19
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { Subject } from 'rxjs';
|
|
2
|
+
import { distinctUntilChanged } from 'rxjs/operators';
|
|
3
|
+
export var SubjectStatus;
|
|
4
|
+
(function (SubjectStatus) {
|
|
5
|
+
SubjectStatus[SubjectStatus["Error"] = 0] = "Error";
|
|
6
|
+
SubjectStatus[SubjectStatus["Done"] = 1] = "Done";
|
|
7
|
+
SubjectStatus[SubjectStatus["Working"] = 2] = "Working";
|
|
8
|
+
SubjectStatus[SubjectStatus["Waiting"] = 3] = "Waiting";
|
|
9
|
+
})(SubjectStatus || (SubjectStatus = {}));
|
|
10
|
+
export class Watcher {
|
|
11
|
+
status$ = new Subject();
|
|
12
|
+
status$$;
|
|
13
|
+
get status() {
|
|
14
|
+
return this._status;
|
|
15
|
+
}
|
|
16
|
+
set status(value) {
|
|
17
|
+
this._status = value;
|
|
18
|
+
this.status$.next(value);
|
|
19
|
+
}
|
|
20
|
+
_status;
|
|
21
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-function-type
|
|
22
|
+
subscribe(callback, scope) {
|
|
23
|
+
this.watch();
|
|
24
|
+
this.status$$ = this.status$.pipe(distinctUntilChanged()).subscribe(() => {
|
|
25
|
+
callback.call(scope, this);
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
unsubscribe() {
|
|
29
|
+
this.unwatch();
|
|
30
|
+
if (this.status$$ !== undefined) {
|
|
31
|
+
this.status$$.unsubscribe();
|
|
32
|
+
this.status$$ = undefined;
|
|
33
|
+
}
|
|
34
|
+
this.status = SubjectStatus.Waiting;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2F0Y2hlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL3V0aWxzL3NyYy9saWIvd2F0Y2hlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUM3QyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV0RCxNQUFNLENBQU4sSUFBWSxhQUtYO0FBTEQsV0FBWSxhQUFhO0lBQ3ZCLG1EQUFTLENBQUE7SUFDVCxpREFBUSxDQUFBO0lBQ1IsdURBQVcsQ0FBQTtJQUNYLHVEQUFXLENBQUE7QUFDYixDQUFDLEVBTFcsYUFBYSxLQUFiLGFBQWEsUUFLeEI7QUFFRCxNQUFNLE9BQWdCLE9BQU87SUFDcEIsT0FBTyxHQUFHLElBQUksT0FBTyxFQUFpQixDQUFDO0lBQ3BDLFFBQVEsQ0FBZTtJQUVqQyxJQUFJLE1BQU07UUFDUixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDdEIsQ0FBQztJQUNELElBQUksTUFBTSxDQUFDLEtBQW9CO1FBQzdCLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ3JCLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzNCLENBQUM7SUFDTyxPQUFPLENBQWdCO0lBTS9CLHNFQUFzRTtJQUN0RSxTQUFTLENBQUMsUUFBa0IsRUFBRSxLQUFXO1FBQ3ZDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUViLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDdkUsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDN0IsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNmLElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUNoQyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQzVCLElBQUksQ0FBQyxRQUFRLEdBQUcsU0FBUyxDQUFDO1FBQzVCLENBQUM7UUFDRCxJQUFJLENBQUMsTUFBTSxHQUFHLGFBQWEsQ0FBQyxPQUFPLENBQUM7SUFDdEMsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkaXN0aW5jdFVudGlsQ2hhbmdlZCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuZXhwb3J0IGVudW0gU3ViamVjdFN0YXR1cyB7XG4gIEVycm9yID0gMCxcbiAgRG9uZSA9IDEsXG4gIFdvcmtpbmcgPSAyLFxuICBXYWl0aW5nID0gM1xufVxuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgV2F0Y2hlciB7XG4gIHB1YmxpYyBzdGF0dXMkID0gbmV3IFN1YmplY3Q8U3ViamVjdFN0YXR1cz4oKTtcbiAgcHJvdGVjdGVkIHN0YXR1cyQkOiBTdWJzY3JpcHRpb247XG5cbiAgZ2V0IHN0YXR1cygpOiBTdWJqZWN0U3RhdHVzIHtcbiAgICByZXR1cm4gdGhpcy5fc3RhdHVzO1xuICB9XG4gIHNldCBzdGF0dXModmFsdWU6IFN1YmplY3RTdGF0dXMpIHtcbiAgICB0aGlzLl9zdGF0dXMgPSB2YWx1ZTtcbiAgICB0aGlzLnN0YXR1cyQubmV4dCh2YWx1ZSk7XG4gIH1cbiAgcHJpdmF0ZSBfc3RhdHVzOiBTdWJqZWN0U3RhdHVzO1xuXG4gIHByb3RlY3RlZCBhYnN0cmFjdCB3YXRjaCgpO1xuXG4gIHByb3RlY3RlZCBhYnN0cmFjdCB1bndhdGNoKCk7XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtZnVuY3Rpb24tdHlwZVxuICBzdWJzY3JpYmUoY2FsbGJhY2s6IEZ1bmN0aW9uLCBzY29wZT86IGFueSkge1xuICAgIHRoaXMud2F0Y2goKTtcblxuICAgIHRoaXMuc3RhdHVzJCQgPSB0aGlzLnN0YXR1cyQucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgY2FsbGJhY2suY2FsbChzY29wZSwgdGhpcyk7XG4gICAgfSk7XG4gIH1cblxuICB1bnN1YnNjcmliZSgpIHtcbiAgICB0aGlzLnVud2F0Y2goKTtcbiAgICBpZiAodGhpcy5zdGF0dXMkJCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnN0YXR1cyQkLnVuc3Vic2NyaWJlKCk7XG4gICAgICB0aGlzLnN0YXR1cyQkID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICB0aGlzLnN0YXR1cyA9IFN1YmplY3RTdGF0dXMuV2FpdGluZztcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Public API Surface of utils
|
|
3
|
+
*/
|
|
4
|
+
export * from './lib';
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX2FwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3BhY2thZ2VzL3V0aWxzL3NyYy9wdWJsaWNfYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxPQUFPLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogUHVibGljIEFQSSBTdXJmYWNlIG9mIHV0aWxzXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9saWInO1xuIl19
|