semantic-typescript 0.5.3 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/asynchronous/collector.d.ts +235 -0
- package/dist/asynchronous/collector.js +811 -0
- package/dist/asynchronous/semantic.d.ts +257 -0
- package/dist/asynchronous/semantic.js +1863 -0
- package/dist/factory.d.ts +79 -37
- package/dist/factory.js +534 -277
- package/dist/guard.d.ts +24 -14
- package/dist/guard.js +73 -19
- package/dist/hook.d.ts +11 -6
- package/dist/hook.js +22 -5
- package/dist/index.d.ts +2 -2
- package/dist/index.js +2 -2
- package/dist/main.js +6 -4
- package/dist/optional.d.ts +2 -2
- package/dist/symbol.d.ts +19 -10
- package/dist/symbol.js +19 -10
- package/dist/synchronous/collector.d.ts +236 -0
- package/dist/{collector.js → synchronous/collector.js} +217 -193
- package/dist/{semantic.d.ts → synchronous/semantic.d.ts} +125 -130
- package/dist/{semantic.js → synchronous/semantic.js} +465 -574
- package/dist/utility.d.ts +7 -1
- package/dist/utility.js +1 -0
- package/package.json +3 -2
- package/readme.cn.md +213 -753
- package/readme.de.md +171 -441
- package/readme.es.md +171 -436
- package/readme.fr.md +170 -443
- package/readme.jp.md +177 -439
- package/readme.kr.md +177 -433
- package/readme.md +213 -1066
- package/readme.ru.md +174 -420
- package/readme.tw.md +175 -441
- package/dist/collector.d.ts +0 -236
- package/dist/map.d.ts +0 -76
- package/dist/map.js +0 -245
- package/dist/node.d.ts +0 -182
- package/dist/node.js +0 -918
- package/dist/set.d.ts +0 -19
- package/dist/set.js +0 -65
- package/dist/tree.d.ts +0 -82
- package/dist/tree.js +0 -257
package/dist/factory.js
CHANGED
|
@@ -1,14 +1,15 @@
|
|
|
1
|
+
import { AsynchronousSemantic } from "./asynchronous/semantic";
|
|
1
2
|
import { isBigInt, isFunction, isIterable, isNumber, isObject, isPromise, isAsyncIterable, isString, isHTMLElemet } from "./guard";
|
|
2
3
|
import { useCompare, useToBigInt, useToNumber, useTraverse } from "./hook";
|
|
3
4
|
import { Optional } from "./optional";
|
|
4
|
-
import {
|
|
5
|
+
import { SynchronousSemantic } from "./synchronous/semantic";
|
|
5
6
|
import { invalidate, validate } from "./utility";
|
|
6
7
|
;
|
|
7
8
|
export let useAnimationFrame = (period, delay = 0) => {
|
|
8
9
|
if (period <= 0 || !Number.isFinite(period) || delay < 0 || !Number.isFinite(delay)) {
|
|
9
10
|
throw new TypeError("Period must be positive finite number and delay must be non-negative finite number.");
|
|
10
11
|
}
|
|
11
|
-
return new
|
|
12
|
+
return new SynchronousSemantic((accept, interrupt) => {
|
|
12
13
|
try {
|
|
13
14
|
let start = performance.now();
|
|
14
15
|
let index = 0n;
|
|
@@ -28,14 +29,14 @@ export let useAnimationFrame = (period, delay = 0) => {
|
|
|
28
29
|
};
|
|
29
30
|
}
|
|
30
31
|
catch (error) {
|
|
31
|
-
|
|
32
|
+
throw error;
|
|
32
33
|
}
|
|
33
34
|
});
|
|
34
35
|
};
|
|
35
36
|
;
|
|
36
37
|
export let useAttribute = (target) => {
|
|
37
38
|
if (isObject(target)) {
|
|
38
|
-
return new
|
|
39
|
+
return new SynchronousSemantic((accept, interrupt) => {
|
|
39
40
|
try {
|
|
40
41
|
let index = 0n;
|
|
41
42
|
useTraverse(target, (key, value) => {
|
|
@@ -52,7 +53,7 @@ export let useAttribute = (target) => {
|
|
|
52
53
|
});
|
|
53
54
|
}
|
|
54
55
|
catch (error) {
|
|
55
|
-
|
|
56
|
+
throw error;
|
|
56
57
|
}
|
|
57
58
|
});
|
|
58
59
|
}
|
|
@@ -67,7 +68,7 @@ export let useBlob = (blob, chunk = 64n * 1024n) => {
|
|
|
67
68
|
if (invalidate(blob)) {
|
|
68
69
|
throw new TypeError("Blob is invalid.");
|
|
69
70
|
}
|
|
70
|
-
return new
|
|
71
|
+
return new SynchronousSemantic((accept, interrupt) => {
|
|
71
72
|
try {
|
|
72
73
|
let index = 0n;
|
|
73
74
|
let stoppable = false;
|
|
@@ -114,7 +115,7 @@ export let useBlob = (blob, chunk = 64n * 1024n) => {
|
|
|
114
115
|
}
|
|
115
116
|
}
|
|
116
117
|
catch (error) {
|
|
117
|
-
|
|
118
|
+
throw error;
|
|
118
119
|
}
|
|
119
120
|
finally {
|
|
120
121
|
if (stoppable) {
|
|
@@ -125,270 +126,387 @@ export let useBlob = (blob, chunk = 64n * 1024n) => {
|
|
|
125
126
|
})();
|
|
126
127
|
}
|
|
127
128
|
catch (error) {
|
|
128
|
-
|
|
129
|
+
throw error;
|
|
129
130
|
}
|
|
130
131
|
});
|
|
131
132
|
};
|
|
132
133
|
;
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
134
|
+
;
|
|
135
|
+
export let useDocument = (argument1, argument2 = {}) => {
|
|
136
|
+
let options = argument2;
|
|
137
|
+
let debounce = isObject(options) && isNumber(options.debounce) ? options.debounce : 0;
|
|
138
|
+
let throttle = isObject(options) && isNumber(options.throttle) ? options.throttle : 0;
|
|
139
|
+
if (isString(argument1)) {
|
|
140
|
+
let key = argument1;
|
|
141
|
+
return new AsynchronousSemantic(async (accept, interrupt) => {
|
|
142
|
+
let timeOut = null;
|
|
143
|
+
let lastEmitTime = 0;
|
|
144
|
+
let index = 0n;
|
|
145
|
+
let until = new Promise(resolve => {
|
|
139
146
|
let listener = (event) => {
|
|
140
|
-
if (
|
|
141
|
-
|
|
147
|
+
if (debounce > 0) {
|
|
148
|
+
if (timeOut) {
|
|
149
|
+
clearTimeout(timeOut);
|
|
150
|
+
}
|
|
151
|
+
timeOut = setTimeout(() => {
|
|
152
|
+
if (interrupt(event, index)) {
|
|
153
|
+
window.document.removeEventListener(key, listener);
|
|
154
|
+
resolve();
|
|
155
|
+
return;
|
|
156
|
+
}
|
|
157
|
+
accept(event, index);
|
|
158
|
+
index++;
|
|
159
|
+
}, debounce);
|
|
160
|
+
return;
|
|
142
161
|
}
|
|
143
|
-
|
|
162
|
+
if (throttle > 0) {
|
|
163
|
+
let now = performance.now();
|
|
164
|
+
if (now - lastEmitTime < throttle) {
|
|
165
|
+
return;
|
|
166
|
+
}
|
|
167
|
+
lastEmitTime = now;
|
|
168
|
+
if (interrupt(event, index)) {
|
|
169
|
+
window.document.removeEventListener(key, listener);
|
|
170
|
+
resolve();
|
|
171
|
+
return;
|
|
172
|
+
}
|
|
144
173
|
accept(event, index);
|
|
145
174
|
index++;
|
|
175
|
+
return;
|
|
146
176
|
}
|
|
177
|
+
if (interrupt(event, index)) {
|
|
178
|
+
window.document.removeEventListener(key, listener);
|
|
179
|
+
resolve();
|
|
180
|
+
accept(event, -1n);
|
|
181
|
+
return;
|
|
182
|
+
}
|
|
183
|
+
accept(event, index);
|
|
184
|
+
index++;
|
|
147
185
|
};
|
|
148
186
|
window.document.addEventListener(key, listener);
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
console.error(error);
|
|
152
|
-
}
|
|
187
|
+
});
|
|
188
|
+
await until;
|
|
153
189
|
});
|
|
154
190
|
}
|
|
155
|
-
if (isIterable(
|
|
156
|
-
let keys = new Set(
|
|
157
|
-
return new
|
|
158
|
-
|
|
159
|
-
|
|
191
|
+
if (isIterable(argument1)) {
|
|
192
|
+
let keys = new Set(...argument1);
|
|
193
|
+
return new AsynchronousSemantic(async (accept, interrupt) => {
|
|
194
|
+
let lastEmitTime = 0;
|
|
195
|
+
let timeOut = null;
|
|
196
|
+
let index = 0n;
|
|
197
|
+
let activeCount = keys.size;
|
|
198
|
+
let listeners = new Map();
|
|
199
|
+
let until = new Promise(resolve => {
|
|
160
200
|
for (let key of keys) {
|
|
161
|
-
if (isString(key))
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
201
|
+
if (!isString(key))
|
|
202
|
+
continue;
|
|
203
|
+
let listener = (event) => {
|
|
204
|
+
if (debounce > 0) {
|
|
205
|
+
if (timeOut) {
|
|
206
|
+
clearTimeout(timeOut);
|
|
165
207
|
}
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
208
|
+
timeOut = setTimeout(() => handleEvent(event, key), debounce);
|
|
209
|
+
return;
|
|
210
|
+
}
|
|
211
|
+
if (throttle > 0) {
|
|
212
|
+
let now = performance.now();
|
|
213
|
+
if (now - lastEmitTime < throttle)
|
|
214
|
+
return;
|
|
215
|
+
lastEmitTime = now;
|
|
216
|
+
}
|
|
217
|
+
handleEvent(event, key);
|
|
218
|
+
};
|
|
219
|
+
let handleEvent = (event, currentKey) => {
|
|
220
|
+
if (interrupt(event, index)) {
|
|
221
|
+
window.document.removeEventListener(currentKey, listener);
|
|
222
|
+
for (let [k, l] of listeners) {
|
|
223
|
+
window.document.removeEventListener(k, l);
|
|
169
224
|
}
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
225
|
+
listeners.clear();
|
|
226
|
+
if (--activeCount === 0) {
|
|
227
|
+
resolve();
|
|
228
|
+
}
|
|
229
|
+
return;
|
|
230
|
+
}
|
|
231
|
+
accept(event, index);
|
|
232
|
+
index++;
|
|
233
|
+
};
|
|
234
|
+
window.document.addEventListener(key, listener);
|
|
235
|
+
listeners.set(key, listener);
|
|
173
236
|
}
|
|
174
|
-
}
|
|
175
|
-
|
|
176
|
-
console.error(error);
|
|
177
|
-
}
|
|
237
|
+
});
|
|
238
|
+
await until;
|
|
178
239
|
});
|
|
179
240
|
}
|
|
180
|
-
throw new TypeError("
|
|
241
|
+
throw new TypeError("Invalid arguments.");
|
|
181
242
|
};
|
|
182
243
|
;
|
|
183
|
-
export let useHTMLElement = (argument1, argument2) => {
|
|
244
|
+
export let useHTMLElement = (argument1, argument2, argument3 = {}) => {
|
|
245
|
+
let throttle = isObject(argument3) && isNumber(argument3.throttle) ? argument3.throttle : 0;
|
|
246
|
+
let debounce = isObject(argument3) && isNumber(argument3.debounce) ? argument3.debounce : 0;
|
|
247
|
+
if (debounce > 0 && throttle > 0) {
|
|
248
|
+
throw new TypeError("throttle and debounce cannot be used together");
|
|
249
|
+
}
|
|
250
|
+
if (debounce < 0 || throttle < 0) {
|
|
251
|
+
throw new TypeError("throttle/debounce must be non-negative");
|
|
252
|
+
}
|
|
253
|
+
if (isHTMLElemet(argument1)) {
|
|
254
|
+
let element = argument1;
|
|
255
|
+
if (isString(argument2)) {
|
|
256
|
+
let key = argument2;
|
|
257
|
+
return new AsynchronousSemantic(async (accept, interrupt) => {
|
|
258
|
+
let timeOut = null;
|
|
259
|
+
let lastEmit = 0;
|
|
260
|
+
let index = 0n;
|
|
261
|
+
let until = new Promise((resolve) => {
|
|
262
|
+
let listener = (event) => {
|
|
263
|
+
if (debounce > 0) {
|
|
264
|
+
if (timeOut) {
|
|
265
|
+
clearTimeout(timeOut);
|
|
266
|
+
}
|
|
267
|
+
timeOut = setTimeout(() => handle(event), debounce);
|
|
268
|
+
return;
|
|
269
|
+
}
|
|
270
|
+
if (throttle > 0) {
|
|
271
|
+
let now = performance.now();
|
|
272
|
+
if (now - lastEmit < throttle)
|
|
273
|
+
return;
|
|
274
|
+
lastEmit = now;
|
|
275
|
+
}
|
|
276
|
+
handle(event);
|
|
277
|
+
};
|
|
278
|
+
let handle = (event) => {
|
|
279
|
+
if (interrupt(event, index)) {
|
|
280
|
+
element.removeEventListener(key, listener);
|
|
281
|
+
if (timeOut) {
|
|
282
|
+
clearTimeout(timeOut);
|
|
283
|
+
}
|
|
284
|
+
resolve();
|
|
285
|
+
return;
|
|
286
|
+
}
|
|
287
|
+
accept(event, index);
|
|
288
|
+
index++;
|
|
289
|
+
};
|
|
290
|
+
element.addEventListener(key, listener);
|
|
291
|
+
});
|
|
292
|
+
await until;
|
|
293
|
+
});
|
|
294
|
+
}
|
|
295
|
+
if (isIterable(argument2)) {
|
|
296
|
+
let keys = [...new Set(argument2)];
|
|
297
|
+
return new AsynchronousSemantic(async (accept, interrupt) => {
|
|
298
|
+
let index = 0n;
|
|
299
|
+
let listeners = new Map();
|
|
300
|
+
let until = new Promise((resolve) => {
|
|
301
|
+
for (let key of keys) {
|
|
302
|
+
let listener = (event) => {
|
|
303
|
+
if (interrupt(event, index)) {
|
|
304
|
+
element.removeEventListener(key, listener);
|
|
305
|
+
for (let [k, l] of listeners) {
|
|
306
|
+
element.removeEventListener(k, l);
|
|
307
|
+
}
|
|
308
|
+
listeners.clear();
|
|
309
|
+
resolve();
|
|
310
|
+
return;
|
|
311
|
+
}
|
|
312
|
+
accept(event, index);
|
|
313
|
+
index++;
|
|
314
|
+
};
|
|
315
|
+
element.addEventListener(key, listener);
|
|
316
|
+
listeners.set(key, listener);
|
|
317
|
+
}
|
|
318
|
+
});
|
|
319
|
+
await until;
|
|
320
|
+
});
|
|
321
|
+
}
|
|
322
|
+
}
|
|
184
323
|
if (isString(argument1)) {
|
|
185
324
|
let selector = argument1;
|
|
325
|
+
let elements = [...document.querySelectorAll(selector)];
|
|
186
326
|
if (isString(argument2)) {
|
|
187
327
|
let key = argument2;
|
|
188
|
-
return new
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
328
|
+
return new AsynchronousSemantic(async (accept, interrupt) => {
|
|
329
|
+
let index = 0n;
|
|
330
|
+
let listeners = new WeakMap();
|
|
331
|
+
let until = new Promise((resolve) => {
|
|
192
332
|
for (let element of elements) {
|
|
193
333
|
if (validate(element)) {
|
|
194
334
|
let listener = (event) => {
|
|
195
335
|
if (interrupt(event, index)) {
|
|
196
336
|
element.removeEventListener(key, listener);
|
|
337
|
+
let map = listeners.get(element);
|
|
338
|
+
if (validate(map)) {
|
|
339
|
+
for (let [k, l] of map) {
|
|
340
|
+
element.removeEventListener(k, l);
|
|
341
|
+
}
|
|
342
|
+
map.clear();
|
|
343
|
+
}
|
|
344
|
+
resolve();
|
|
345
|
+
return;
|
|
197
346
|
}
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
index++;
|
|
201
|
-
}
|
|
347
|
+
accept(event, index);
|
|
348
|
+
index++;
|
|
202
349
|
};
|
|
203
350
|
element.addEventListener(key, listener);
|
|
351
|
+
let map = new Map() || new Map();
|
|
352
|
+
map.set(key, listener);
|
|
353
|
+
listeners.set(element, map);
|
|
204
354
|
}
|
|
205
355
|
}
|
|
206
|
-
}
|
|
207
|
-
|
|
208
|
-
console.error(error);
|
|
209
|
-
}
|
|
356
|
+
});
|
|
357
|
+
await until;
|
|
210
358
|
});
|
|
211
359
|
}
|
|
212
360
|
if (isIterable(argument2)) {
|
|
213
361
|
let keys = new Set(argument2);
|
|
214
|
-
return new
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
362
|
+
return new AsynchronousSemantic(async (accept, interrupt) => {
|
|
363
|
+
let index = 0n;
|
|
364
|
+
let listeners = new Map();
|
|
365
|
+
let until = new Promise((resolve) => {
|
|
218
366
|
for (let element of elements) {
|
|
219
367
|
for (let key of keys) {
|
|
220
|
-
if (isString(key)) {
|
|
368
|
+
if (validate(element) && isString(key)) {
|
|
221
369
|
let listener = (event) => {
|
|
222
370
|
if (interrupt(event, index)) {
|
|
223
371
|
element.removeEventListener(key, listener);
|
|
372
|
+
for (let [k, l] of listeners) {
|
|
373
|
+
element.removeEventListener(k, l);
|
|
374
|
+
}
|
|
375
|
+
listeners.clear();
|
|
376
|
+
resolve();
|
|
377
|
+
return;
|
|
224
378
|
}
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
index++;
|
|
228
|
-
}
|
|
379
|
+
accept(event, index);
|
|
380
|
+
index++;
|
|
229
381
|
};
|
|
230
382
|
element.addEventListener(key, listener);
|
|
383
|
+
listeners.set(key, listener);
|
|
231
384
|
}
|
|
232
385
|
}
|
|
233
386
|
}
|
|
234
|
-
}
|
|
235
|
-
|
|
236
|
-
console.error(error);
|
|
237
|
-
}
|
|
387
|
+
});
|
|
388
|
+
await until;
|
|
238
389
|
});
|
|
239
390
|
}
|
|
240
391
|
}
|
|
241
392
|
if (isIterable(argument1)) {
|
|
242
|
-
let elementsOrSelectors = argument1;
|
|
393
|
+
let elementsOrSelectors = new Set(argument1);
|
|
243
394
|
if (isString(argument2)) {
|
|
244
395
|
let key = argument2;
|
|
245
|
-
return new
|
|
246
|
-
|
|
247
|
-
|
|
396
|
+
return new AsynchronousSemantic(async (accept, interrupt) => {
|
|
397
|
+
let listeners = new Map();
|
|
398
|
+
let until = new Promise((resolve) => {
|
|
248
399
|
for (let elementOrSelector of elementsOrSelectors) {
|
|
249
|
-
if (
|
|
250
|
-
|
|
251
|
-
|
|
400
|
+
if (validate(elementOrSelector)) {
|
|
401
|
+
if (isHTMLElemet(elementOrSelector)) {
|
|
402
|
+
let element = elementOrSelector;
|
|
252
403
|
let listener = (event) => {
|
|
253
|
-
if (interrupt(event,
|
|
404
|
+
if (interrupt(event, 0n)) {
|
|
254
405
|
element.removeEventListener(key, listener);
|
|
406
|
+
for (let [k, l] of listeners) {
|
|
407
|
+
element.removeEventListener(k, l);
|
|
408
|
+
}
|
|
409
|
+
listeners.clear();
|
|
410
|
+
resolve();
|
|
411
|
+
return;
|
|
255
412
|
}
|
|
256
|
-
|
|
257
|
-
accept(event, index);
|
|
258
|
-
index++;
|
|
259
|
-
}
|
|
413
|
+
accept(event, 0n);
|
|
260
414
|
};
|
|
261
415
|
element.addEventListener(key, listener);
|
|
416
|
+
listeners.set(key, listener);
|
|
262
417
|
}
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
element.removeEventListener(key, listener);
|
|
269
|
-
}
|
|
270
|
-
else {
|
|
271
|
-
accept(event, index);
|
|
272
|
-
index++;
|
|
273
|
-
}
|
|
274
|
-
};
|
|
275
|
-
element.addEventListener(key, listener);
|
|
276
|
-
}
|
|
277
|
-
}
|
|
278
|
-
}
|
|
279
|
-
catch (error) {
|
|
280
|
-
console.error(error);
|
|
281
|
-
}
|
|
282
|
-
});
|
|
283
|
-
}
|
|
284
|
-
if (isIterable(argument2)) {
|
|
285
|
-
let keys = argument2;
|
|
286
|
-
return new Semantic((accept, interrupt) => {
|
|
287
|
-
try {
|
|
288
|
-
let index = 0n;
|
|
289
|
-
for (let elementOrSelector of elementsOrSelectors) {
|
|
290
|
-
if (isString(elementOrSelector)) {
|
|
291
|
-
let element = window.document.querySelector(elementOrSelector);
|
|
292
|
-
if (validate(element)) {
|
|
293
|
-
for (let key of keys) {
|
|
294
|
-
if (isString(key)) {
|
|
418
|
+
else if (isString(elementOrSelector)) {
|
|
419
|
+
let selector = elementOrSelector;
|
|
420
|
+
let elements = [...document.querySelectorAll(selector)].filter((item) => isHTMLElemet(item));
|
|
421
|
+
for (let element of elements) {
|
|
422
|
+
if (validate(element)) {
|
|
295
423
|
let listener = (event) => {
|
|
296
|
-
if (interrupt(event,
|
|
424
|
+
if (interrupt(event, 0n)) {
|
|
297
425
|
element.removeEventListener(key, listener);
|
|
426
|
+
for (let [k, l] of listeners) {
|
|
427
|
+
element.removeEventListener(k, l);
|
|
428
|
+
}
|
|
429
|
+
listeners.clear();
|
|
430
|
+
resolve();
|
|
431
|
+
return;
|
|
298
432
|
}
|
|
299
|
-
|
|
300
|
-
accept(event, index);
|
|
301
|
-
index++;
|
|
302
|
-
}
|
|
433
|
+
accept(event, 0n);
|
|
303
434
|
};
|
|
304
435
|
element.addEventListener(key, listener);
|
|
436
|
+
listeners.set(key, listener);
|
|
305
437
|
}
|
|
306
438
|
}
|
|
307
439
|
}
|
|
308
440
|
}
|
|
309
|
-
|
|
441
|
+
}
|
|
442
|
+
});
|
|
443
|
+
await until;
|
|
444
|
+
});
|
|
445
|
+
}
|
|
446
|
+
if (isIterable(argument2)) {
|
|
447
|
+
let keys = new Set(argument2);
|
|
448
|
+
return new AsynchronousSemantic(async (accept, interrupt) => {
|
|
449
|
+
let listeners = new Map();
|
|
450
|
+
let until = new Promise((resolve) => {
|
|
451
|
+
for (let elementOrSelector of elementsOrSelectors) {
|
|
452
|
+
if (isHTMLElemet(elementOrSelector)) {
|
|
310
453
|
let element = elementOrSelector;
|
|
311
454
|
for (let key of keys) {
|
|
312
455
|
if (isString(key)) {
|
|
313
456
|
let listener = (event) => {
|
|
314
|
-
if (interrupt(event,
|
|
457
|
+
if (interrupt(event, 0n)) {
|
|
315
458
|
element.removeEventListener(key, listener);
|
|
459
|
+
for (let [k, l] of listeners) {
|
|
460
|
+
element.removeEventListener(k, l);
|
|
461
|
+
}
|
|
462
|
+
listeners.clear();
|
|
463
|
+
resolve();
|
|
464
|
+
return;
|
|
316
465
|
}
|
|
317
|
-
|
|
318
|
-
accept(event, index);
|
|
319
|
-
index++;
|
|
320
|
-
}
|
|
466
|
+
accept(event, 0n);
|
|
321
467
|
};
|
|
322
468
|
element.addEventListener(key, listener);
|
|
469
|
+
listeners.set(key, listener);
|
|
323
470
|
}
|
|
324
471
|
}
|
|
325
472
|
}
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
else {
|
|
346
|
-
accept(event, index);
|
|
347
|
-
index++;
|
|
348
|
-
}
|
|
349
|
-
};
|
|
350
|
-
element.addEventListener(key, listener);
|
|
351
|
-
}
|
|
352
|
-
catch (error) {
|
|
353
|
-
console.error(error);
|
|
354
|
-
}
|
|
355
|
-
});
|
|
356
|
-
}
|
|
357
|
-
if (isIterable(argument2)) {
|
|
358
|
-
let keys = argument2;
|
|
359
|
-
return new Semantic((accept, interrupt) => {
|
|
360
|
-
try {
|
|
361
|
-
let index = 0n;
|
|
362
|
-
for (let key of keys) {
|
|
363
|
-
if (isString(key)) {
|
|
364
|
-
let listener = (event) => {
|
|
365
|
-
if (interrupt(event, index)) {
|
|
366
|
-
element.removeEventListener(key, listener);
|
|
367
|
-
}
|
|
368
|
-
else {
|
|
369
|
-
accept(event, index);
|
|
370
|
-
index++;
|
|
473
|
+
else if (isString(elementOrSelector)) {
|
|
474
|
+
let selector = elementOrSelector;
|
|
475
|
+
let elements = [...document.querySelectorAll(selector)].filter((item) => isHTMLElemet(item));
|
|
476
|
+
for (let element of elements) {
|
|
477
|
+
for (let key of keys) {
|
|
478
|
+
let listener = (event) => {
|
|
479
|
+
if (interrupt(event, 0n)) {
|
|
480
|
+
element.removeEventListener(key, listener);
|
|
481
|
+
for (let [k, l] of listeners) {
|
|
482
|
+
element.removeEventListener(k, l);
|
|
483
|
+
}
|
|
484
|
+
listeners.clear();
|
|
485
|
+
resolve();
|
|
486
|
+
return;
|
|
487
|
+
}
|
|
488
|
+
accept(event, 0n);
|
|
489
|
+
};
|
|
490
|
+
element.addEventListener(key, listener);
|
|
491
|
+
listeners.set(key, listener);
|
|
371
492
|
}
|
|
372
|
-
}
|
|
373
|
-
element.addEventListener(key, listener);
|
|
493
|
+
}
|
|
374
494
|
}
|
|
375
495
|
}
|
|
376
|
-
}
|
|
377
|
-
|
|
378
|
-
console.error(error);
|
|
379
|
-
}
|
|
496
|
+
});
|
|
497
|
+
await until;
|
|
380
498
|
});
|
|
381
499
|
}
|
|
382
500
|
}
|
|
383
501
|
throw new TypeError("Invalid arguments.");
|
|
384
502
|
};
|
|
385
503
|
export let useEmpty = () => {
|
|
386
|
-
return new
|
|
504
|
+
return new SynchronousSemantic(() => { });
|
|
387
505
|
};
|
|
388
506
|
;
|
|
389
507
|
export let useFill = (element, count) => {
|
|
390
508
|
if (validate(element) && count > 0n) {
|
|
391
|
-
return new
|
|
509
|
+
return new SynchronousSemantic((accept, interrupt) => {
|
|
392
510
|
try {
|
|
393
511
|
for (let i = 0n; i < count; i++) {
|
|
394
512
|
let item = isFunction(element) ? element() : element;
|
|
@@ -399,7 +517,7 @@ export let useFill = (element, count) => {
|
|
|
399
517
|
}
|
|
400
518
|
}
|
|
401
519
|
catch (error) {
|
|
402
|
-
|
|
520
|
+
throw error;
|
|
403
521
|
}
|
|
404
522
|
});
|
|
405
523
|
}
|
|
@@ -408,7 +526,7 @@ export let useFill = (element, count) => {
|
|
|
408
526
|
;
|
|
409
527
|
export let useFrom = (iterable) => {
|
|
410
528
|
if (isIterable(iterable)) {
|
|
411
|
-
return new
|
|
529
|
+
return new SynchronousSemantic((accept, interrupt) => {
|
|
412
530
|
try {
|
|
413
531
|
let index = 0n;
|
|
414
532
|
for (let element of iterable) {
|
|
@@ -420,12 +538,12 @@ export let useFrom = (iterable) => {
|
|
|
420
538
|
}
|
|
421
539
|
}
|
|
422
540
|
catch (error) {
|
|
423
|
-
|
|
541
|
+
throw error;
|
|
424
542
|
}
|
|
425
543
|
});
|
|
426
544
|
}
|
|
427
545
|
else if (isAsyncIterable(iterable)) {
|
|
428
|
-
return new
|
|
546
|
+
return new SynchronousSemantic(async (accept, interrupt) => {
|
|
429
547
|
try {
|
|
430
548
|
let index = 0n;
|
|
431
549
|
for await (let element of iterable) {
|
|
@@ -437,7 +555,7 @@ export let useFrom = (iterable) => {
|
|
|
437
555
|
}
|
|
438
556
|
}
|
|
439
557
|
catch (error) {
|
|
440
|
-
|
|
558
|
+
throw error;
|
|
441
559
|
}
|
|
442
560
|
});
|
|
443
561
|
}
|
|
@@ -446,7 +564,7 @@ export let useFrom = (iterable) => {
|
|
|
446
564
|
;
|
|
447
565
|
export let useGenerate = (supplier, interrupt) => {
|
|
448
566
|
if (isFunction(supplier) && isFunction(interrupt)) {
|
|
449
|
-
return new
|
|
567
|
+
return new SynchronousSemantic((accept, interrupt) => {
|
|
450
568
|
try {
|
|
451
569
|
let index = 0n;
|
|
452
570
|
while (true) {
|
|
@@ -459,7 +577,7 @@ export let useGenerate = (supplier, interrupt) => {
|
|
|
459
577
|
}
|
|
460
578
|
}
|
|
461
579
|
catch (error) {
|
|
462
|
-
|
|
580
|
+
throw error;
|
|
463
581
|
}
|
|
464
582
|
});
|
|
465
583
|
}
|
|
@@ -468,7 +586,7 @@ export let useGenerate = (supplier, interrupt) => {
|
|
|
468
586
|
;
|
|
469
587
|
export let useInterval = (period, delay = 0) => {
|
|
470
588
|
if (period > 0 && delay >= 0) {
|
|
471
|
-
return new
|
|
589
|
+
return new SynchronousSemantic((accept, interrupt) => {
|
|
472
590
|
try {
|
|
473
591
|
if (delay > 0) {
|
|
474
592
|
setTimeout(() => {
|
|
@@ -498,7 +616,7 @@ export let useInterval = (period, delay = 0) => {
|
|
|
498
616
|
}
|
|
499
617
|
}
|
|
500
618
|
catch (error) {
|
|
501
|
-
|
|
619
|
+
throw error;
|
|
502
620
|
}
|
|
503
621
|
});
|
|
504
622
|
}
|
|
@@ -507,17 +625,17 @@ export let useInterval = (period, delay = 0) => {
|
|
|
507
625
|
export let useIterate = (generator) => {
|
|
508
626
|
if (isFunction(generator)) {
|
|
509
627
|
try {
|
|
510
|
-
return new
|
|
628
|
+
return new SynchronousSemantic(generator);
|
|
511
629
|
}
|
|
512
630
|
catch (error) {
|
|
513
|
-
|
|
631
|
+
throw error;
|
|
514
632
|
}
|
|
515
633
|
}
|
|
516
634
|
throw new TypeError("Invalid arguments.");
|
|
517
635
|
};
|
|
518
636
|
export let usePromise = (promise) => {
|
|
519
637
|
if (isPromise(promise)) {
|
|
520
|
-
return new
|
|
638
|
+
return new SynchronousSemantic((accept, interrupt) => {
|
|
521
639
|
try {
|
|
522
640
|
promise.then((value) => {
|
|
523
641
|
if (interrupt(value, 0n)) {
|
|
@@ -525,11 +643,11 @@ export let usePromise = (promise) => {
|
|
|
525
643
|
}
|
|
526
644
|
accept(value, 0n);
|
|
527
645
|
}).catch((error) => {
|
|
528
|
-
|
|
646
|
+
throw error;
|
|
529
647
|
});
|
|
530
648
|
}
|
|
531
649
|
catch (error) {
|
|
532
|
-
|
|
650
|
+
throw error;
|
|
533
651
|
}
|
|
534
652
|
});
|
|
535
653
|
}
|
|
@@ -540,7 +658,7 @@ export let usePromise = (promise) => {
|
|
|
540
658
|
;
|
|
541
659
|
export let useOf = (...target) => {
|
|
542
660
|
if (Array.isArray(target)) {
|
|
543
|
-
return new
|
|
661
|
+
return new SynchronousSemantic((accept, interrupt) => {
|
|
544
662
|
try {
|
|
545
663
|
let index = 0n;
|
|
546
664
|
for (let element of target) {
|
|
@@ -552,7 +670,7 @@ export let useOf = (...target) => {
|
|
|
552
670
|
}
|
|
553
671
|
}
|
|
554
672
|
catch (error) {
|
|
555
|
-
|
|
673
|
+
throw error;
|
|
556
674
|
}
|
|
557
675
|
});
|
|
558
676
|
}
|
|
@@ -565,7 +683,7 @@ export let useRange = (start, end, step = (isNumber(start) && isNumber(end) ? 1
|
|
|
565
683
|
}
|
|
566
684
|
if (isNumber(start) && isNumber(end)) {
|
|
567
685
|
let trusted = useToNumber(step);
|
|
568
|
-
return new
|
|
686
|
+
return new SynchronousSemantic((accept, interrupt) => {
|
|
569
687
|
try {
|
|
570
688
|
let index = 0n;
|
|
571
689
|
for (let i = start; i < end; i += trusted) {
|
|
@@ -577,13 +695,13 @@ export let useRange = (start, end, step = (isNumber(start) && isNumber(end) ? 1
|
|
|
577
695
|
}
|
|
578
696
|
}
|
|
579
697
|
catch (error) {
|
|
580
|
-
|
|
698
|
+
throw error;
|
|
581
699
|
}
|
|
582
700
|
});
|
|
583
701
|
}
|
|
584
702
|
else if (isBigInt(start) && isBigInt(end)) {
|
|
585
703
|
let trusted = useToBigInt(step);
|
|
586
|
-
return new
|
|
704
|
+
return new SynchronousSemantic((accept, interrupt) => {
|
|
587
705
|
try {
|
|
588
706
|
let index = 0n;
|
|
589
707
|
for (let i = start; i < end; i += trusted) {
|
|
@@ -595,127 +713,266 @@ export let useRange = (start, end, step = (isNumber(start) && isNumber(end) ? 1
|
|
|
595
713
|
}
|
|
596
714
|
}
|
|
597
715
|
catch (error) {
|
|
598
|
-
|
|
716
|
+
throw error;
|
|
599
717
|
}
|
|
600
718
|
});
|
|
601
719
|
}
|
|
602
720
|
throw new TypeError("Invalid arguments.");
|
|
603
721
|
};
|
|
604
722
|
;
|
|
605
|
-
export let
|
|
606
|
-
if (
|
|
723
|
+
export let useText = (argument1, argument2, argument3) => {
|
|
724
|
+
if (isString(argument1)) {
|
|
725
|
+
if (isNumber(argument2) || isBigInt(argument2)) {
|
|
726
|
+
let start = useToNumber(argument2);
|
|
727
|
+
if (isNumber(argument3) || isBigInt(argument3)) {
|
|
728
|
+
let end = useToNumber(argument3);
|
|
729
|
+
let characters = [...(argument1.substring(start, end))];
|
|
730
|
+
return new SynchronousSemantic((accept, interrupt) => {
|
|
731
|
+
let index = 0n;
|
|
732
|
+
for (let character of characters) {
|
|
733
|
+
if (interrupt(character, index)) {
|
|
734
|
+
break;
|
|
735
|
+
}
|
|
736
|
+
accept(character, index);
|
|
737
|
+
index++;
|
|
738
|
+
}
|
|
739
|
+
});
|
|
740
|
+
}
|
|
741
|
+
else {
|
|
742
|
+
let characters = [...(argument1.substring(start))];
|
|
743
|
+
return new SynchronousSemantic((accept, interrupt) => {
|
|
744
|
+
let index = 0n;
|
|
745
|
+
for (let character of characters) {
|
|
746
|
+
if (interrupt(character, index)) {
|
|
747
|
+
break;
|
|
748
|
+
}
|
|
749
|
+
accept(character, index);
|
|
750
|
+
index++;
|
|
751
|
+
}
|
|
752
|
+
});
|
|
753
|
+
}
|
|
754
|
+
}
|
|
755
|
+
}
|
|
756
|
+
throw new TypeError("Invalid arguments.");
|
|
757
|
+
};
|
|
758
|
+
;
|
|
759
|
+
;
|
|
760
|
+
export let useWebSocket = (argument1, argument2, argument3) => {
|
|
761
|
+
let debounce = 0;
|
|
762
|
+
let throttle = 0;
|
|
763
|
+
if (isObject(argument2)) {
|
|
764
|
+
debounce = Reflect.has(argument2, "debounce") ? Reflect.get(argument2, "debounce") : 0;
|
|
765
|
+
throttle = Reflect.has(argument2, "throttle") ? Reflect.get(argument2, "throttle") : 0;
|
|
766
|
+
}
|
|
767
|
+
else {
|
|
768
|
+
debounce = validate(argument3) && isNumber(argument3.debounce) ? argument3.debounce : 0;
|
|
769
|
+
throttle = validate(argument3) && isNumber(argument3.throttle) ? argument3.throttle : 0;
|
|
770
|
+
}
|
|
771
|
+
if (validate(argument1)) {
|
|
607
772
|
let websocket = argument1;
|
|
608
773
|
if (isString(argument2)) {
|
|
609
|
-
let key =
|
|
610
|
-
return new
|
|
611
|
-
|
|
774
|
+
let key = argument1;
|
|
775
|
+
return new AsynchronousSemantic(async (accept, interrupt) => {
|
|
776
|
+
let timeOut = null;
|
|
777
|
+
let lastEmitTime = 0;
|
|
778
|
+
let index = 0n;
|
|
779
|
+
let until = new Promise(resolve => {
|
|
612
780
|
let listener = (event) => {
|
|
613
|
-
if (
|
|
614
|
-
|
|
781
|
+
if (debounce > 0) {
|
|
782
|
+
if (timeOut) {
|
|
783
|
+
clearTimeout(timeOut);
|
|
784
|
+
}
|
|
785
|
+
timeOut = setTimeout(() => {
|
|
786
|
+
if (interrupt(event, index)) {
|
|
787
|
+
websocket.removeEventListener(key, listener);
|
|
788
|
+
resolve();
|
|
789
|
+
return;
|
|
790
|
+
}
|
|
791
|
+
accept(event, index);
|
|
792
|
+
index++;
|
|
793
|
+
}, debounce);
|
|
794
|
+
return;
|
|
615
795
|
}
|
|
616
|
-
|
|
617
|
-
|
|
796
|
+
if (throttle > 0) {
|
|
797
|
+
let now = performance.now();
|
|
798
|
+
if (now - lastEmitTime < throttle) {
|
|
799
|
+
return;
|
|
800
|
+
}
|
|
801
|
+
lastEmitTime = now;
|
|
802
|
+
if (interrupt(event, index)) {
|
|
803
|
+
websocket.removeEventListener(key, listener);
|
|
804
|
+
resolve();
|
|
805
|
+
return;
|
|
806
|
+
}
|
|
807
|
+
accept(event, index);
|
|
808
|
+
index++;
|
|
809
|
+
return;
|
|
810
|
+
}
|
|
811
|
+
if (interrupt(event, index)) {
|
|
812
|
+
websocket.removeEventListener(key, listener);
|
|
813
|
+
resolve();
|
|
814
|
+
accept(event, -1n);
|
|
815
|
+
return;
|
|
618
816
|
}
|
|
817
|
+
accept(event, index);
|
|
818
|
+
index++;
|
|
619
819
|
};
|
|
620
820
|
websocket.addEventListener(key, listener);
|
|
621
|
-
}
|
|
622
|
-
|
|
623
|
-
console.error(error);
|
|
624
|
-
}
|
|
821
|
+
});
|
|
822
|
+
await until;
|
|
625
823
|
});
|
|
626
824
|
}
|
|
627
|
-
|
|
628
|
-
let keys =
|
|
629
|
-
return new
|
|
630
|
-
|
|
825
|
+
if (isIterable(argument2)) {
|
|
826
|
+
let keys = new Set(...argument1);
|
|
827
|
+
return new AsynchronousSemantic(async (accept, interrupt) => {
|
|
828
|
+
let lastEmitTime = 0;
|
|
829
|
+
let timeOut = null;
|
|
830
|
+
let index = 0n;
|
|
831
|
+
let activeCount = keys.size;
|
|
832
|
+
let until = new Promise(resolve => {
|
|
631
833
|
for (let key of keys) {
|
|
632
|
-
if (isString(key))
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
834
|
+
if (!isString(key))
|
|
835
|
+
continue;
|
|
836
|
+
let listener = (event) => {
|
|
837
|
+
if (debounce > 0) {
|
|
838
|
+
if (timeOut) {
|
|
839
|
+
clearTimeout(timeOut);
|
|
636
840
|
}
|
|
637
|
-
|
|
638
|
-
|
|
841
|
+
timeOut = setTimeout(() => handleEvent(event, key), debounce);
|
|
842
|
+
return;
|
|
843
|
+
}
|
|
844
|
+
if (throttle > 0) {
|
|
845
|
+
let now = performance.now();
|
|
846
|
+
if (now - lastEmitTime < throttle)
|
|
847
|
+
return;
|
|
848
|
+
lastEmitTime = now;
|
|
849
|
+
}
|
|
850
|
+
handleEvent(event, key);
|
|
851
|
+
};
|
|
852
|
+
let handleEvent = (event, currentKey) => {
|
|
853
|
+
if (interrupt(event, index)) {
|
|
854
|
+
websocket.removeEventListener(currentKey, listener);
|
|
855
|
+
if (--activeCount === 0) {
|
|
856
|
+
resolve();
|
|
639
857
|
}
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
858
|
+
return;
|
|
859
|
+
}
|
|
860
|
+
accept(event, index);
|
|
861
|
+
index++;
|
|
862
|
+
};
|
|
863
|
+
websocket.addEventListener(key, listener);
|
|
643
864
|
}
|
|
644
|
-
}
|
|
645
|
-
|
|
646
|
-
console.error(error);
|
|
647
|
-
}
|
|
865
|
+
});
|
|
866
|
+
await until;
|
|
648
867
|
});
|
|
649
868
|
}
|
|
650
|
-
let keys = ["open", "message", "close", "error"];
|
|
651
|
-
return new Semantic((accept, interrupt) => {
|
|
652
|
-
try {
|
|
653
|
-
for (let key of keys) {
|
|
654
|
-
let listener = (event) => {
|
|
655
|
-
if (interrupt(event, 0n)) {
|
|
656
|
-
websocket.removeEventListener(key, listener);
|
|
657
|
-
}
|
|
658
|
-
else {
|
|
659
|
-
accept(event, 0n);
|
|
660
|
-
}
|
|
661
|
-
};
|
|
662
|
-
websocket.addEventListener(key, listener);
|
|
663
|
-
}
|
|
664
|
-
}
|
|
665
|
-
catch (error) {
|
|
666
|
-
console.error(error);
|
|
667
|
-
}
|
|
668
|
-
});
|
|
669
869
|
}
|
|
670
870
|
throw new TypeError("Invalid arguments.");
|
|
671
871
|
};
|
|
672
|
-
|
|
673
|
-
|
|
872
|
+
export let useWindow = (argument1, argument2 = {}) => {
|
|
873
|
+
let options = argument2;
|
|
874
|
+
let debounce = isObject(options) && isNumber(options.debounce) ? options.debounce : 0;
|
|
875
|
+
let throttle = isObject(options) && isNumber(options.throttle) ? options.throttle : 0;
|
|
674
876
|
if (isString(argument1)) {
|
|
675
877
|
let key = argument1;
|
|
676
|
-
return new
|
|
677
|
-
|
|
878
|
+
return new AsynchronousSemantic(async (accept, interrupt) => {
|
|
879
|
+
let timeOut = null;
|
|
880
|
+
let lastEmitTime = 0;
|
|
881
|
+
let index = 0n;
|
|
882
|
+
let until = new Promise(resolve => {
|
|
678
883
|
let listener = (event) => {
|
|
679
|
-
if (
|
|
680
|
-
|
|
884
|
+
if (debounce > 0) {
|
|
885
|
+
if (timeOut) {
|
|
886
|
+
clearTimeout(timeOut);
|
|
887
|
+
}
|
|
888
|
+
timeOut = setTimeout(() => {
|
|
889
|
+
if (interrupt(event, index)) {
|
|
890
|
+
window.removeEventListener(key, listener);
|
|
891
|
+
resolve();
|
|
892
|
+
return;
|
|
893
|
+
}
|
|
894
|
+
accept(event, index);
|
|
895
|
+
index++;
|
|
896
|
+
}, debounce);
|
|
897
|
+
return;
|
|
681
898
|
}
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
|
|
899
|
+
if (throttle > 0) {
|
|
900
|
+
let now = performance.now();
|
|
901
|
+
if (now - lastEmitTime < throttle) {
|
|
902
|
+
return;
|
|
903
|
+
}
|
|
904
|
+
lastEmitTime = now;
|
|
905
|
+
if (interrupt(event, index)) {
|
|
906
|
+
window.removeEventListener(key, listener);
|
|
907
|
+
resolve();
|
|
908
|
+
return;
|
|
909
|
+
}
|
|
910
|
+
accept(event, index);
|
|
911
|
+
index++;
|
|
912
|
+
return;
|
|
685
913
|
}
|
|
914
|
+
if (interrupt(event, index)) {
|
|
915
|
+
window.removeEventListener(key, listener);
|
|
916
|
+
resolve();
|
|
917
|
+
accept(event, -1n);
|
|
918
|
+
return;
|
|
919
|
+
}
|
|
920
|
+
accept(event, index);
|
|
921
|
+
index++;
|
|
686
922
|
};
|
|
687
923
|
window.addEventListener(key, listener);
|
|
688
|
-
}
|
|
689
|
-
|
|
690
|
-
console.error(error);
|
|
691
|
-
}
|
|
924
|
+
});
|
|
925
|
+
await until;
|
|
692
926
|
});
|
|
693
927
|
}
|
|
694
|
-
|
|
695
|
-
let keys = new Set(argument1);
|
|
696
|
-
return new
|
|
697
|
-
|
|
698
|
-
|
|
928
|
+
if (isIterable(argument1)) {
|
|
929
|
+
let keys = new Set(...argument1);
|
|
930
|
+
return new AsynchronousSemantic(async (accept, interrupt) => {
|
|
931
|
+
let lastEmitTime = 0;
|
|
932
|
+
let timeOut = null;
|
|
933
|
+
let index = 0n;
|
|
934
|
+
let activeCount = keys.size;
|
|
935
|
+
let listeners = new Map();
|
|
936
|
+
let until = new Promise(resolve => {
|
|
699
937
|
for (let key of keys) {
|
|
700
|
-
if (isString(key))
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
|
|
938
|
+
if (!isString(key))
|
|
939
|
+
continue;
|
|
940
|
+
let listener = (event) => {
|
|
941
|
+
if (debounce > 0) {
|
|
942
|
+
if (timeOut) {
|
|
943
|
+
clearTimeout(timeOut);
|
|
705
944
|
}
|
|
706
|
-
|
|
707
|
-
|
|
708
|
-
|
|
945
|
+
timeOut = setTimeout(() => handleEvent(event, key), debounce);
|
|
946
|
+
return;
|
|
947
|
+
}
|
|
948
|
+
if (throttle > 0) {
|
|
949
|
+
let now = performance.now();
|
|
950
|
+
if (now - lastEmitTime < throttle)
|
|
951
|
+
return;
|
|
952
|
+
lastEmitTime = now;
|
|
953
|
+
}
|
|
954
|
+
handleEvent(event, key);
|
|
955
|
+
};
|
|
956
|
+
let handleEvent = (event, currentKey) => {
|
|
957
|
+
if (interrupt(event, index)) {
|
|
958
|
+
window.removeEventListener(currentKey, listener);
|
|
959
|
+
for (let [k, l] of listeners) {
|
|
960
|
+
window.removeEventListener(k, l);
|
|
709
961
|
}
|
|
710
|
-
|
|
962
|
+
listeners.clear();
|
|
963
|
+
if (--activeCount === 0) {
|
|
964
|
+
resolve();
|
|
965
|
+
}
|
|
966
|
+
return;
|
|
967
|
+
}
|
|
968
|
+
accept(event, index);
|
|
711
969
|
index++;
|
|
712
|
-
|
|
713
|
-
|
|
970
|
+
};
|
|
971
|
+
window.addEventListener(key, listener);
|
|
972
|
+
listeners.set(key, listener);
|
|
714
973
|
}
|
|
715
|
-
}
|
|
716
|
-
|
|
717
|
-
console.error(error);
|
|
718
|
-
}
|
|
974
|
+
});
|
|
975
|
+
await until;
|
|
719
976
|
});
|
|
720
977
|
}
|
|
721
978
|
throw new TypeError("Invalid arguments.");
|