semantic-typescript 0.7.0 → 0.7.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/dist/asynchronous/semantic.d.ts +4 -0
- package/dist/asynchronous/semantic.js +3 -0
- package/dist/factory.d.ts +24 -71
- package/dist/factory.js +161 -648
- package/dist/guard.d.ts +0 -3
- package/dist/guard.js +0 -19
- package/dist/hash.js +3 -0
- package/dist/synchronous/semantic.d.ts +4 -0
- package/dist/synchronous/semantic.js +4 -1
- package/package.json +1 -1
- package/readme.cn.md +185 -131
- package/readme.de.md +186 -132
- package/readme.es.md +186 -132
- package/readme.fr.md +188 -134
- package/readme.jp.md +185 -140
- package/readme.kr.md +184 -139
- package/readme.md +187 -130
- package/readme.ru.md +186 -143
- package/readme.tw.md +190 -146
- package/dist/main.d.ts +0 -1
- package/dist/main.js +0 -6
package/dist/factory.js
CHANGED
|
@@ -1,39 +1,9 @@
|
|
|
1
1
|
import { AsynchronousSemantic } from "./asynchronous/semantic";
|
|
2
|
-
import { isBigInt, isFunction, isIterable, isNumber, isObject, isPromise, isAsyncIterable, isString
|
|
2
|
+
import { isBigInt, isFunction, isIterable, isNumber, isObject, isPromise, isAsyncIterable, isString } from "./guard";
|
|
3
3
|
import { useCompare, useToBigInt, useToNumber, useTraverse } from "./hook";
|
|
4
|
-
import { Optional } from "./optional";
|
|
5
4
|
import { SynchronousSemantic } from "./synchronous/semantic";
|
|
6
5
|
import { invalidate, validate } from "./utility";
|
|
7
6
|
;
|
|
8
|
-
export let useAnimationFrame = (period, delay = 0) => {
|
|
9
|
-
if (period <= 0 || !Number.isFinite(period) || delay < 0 || !Number.isFinite(delay)) {
|
|
10
|
-
throw new TypeError("Period must be positive finite number and delay must be non-negative finite number.");
|
|
11
|
-
}
|
|
12
|
-
return new SynchronousSemantic((accept, interrupt) => {
|
|
13
|
-
try {
|
|
14
|
-
let start = performance.now();
|
|
15
|
-
let index = 0n;
|
|
16
|
-
let animate = () => {
|
|
17
|
-
if (performance.now() - start >= delay) {
|
|
18
|
-
requestAnimationFrame(animate);
|
|
19
|
-
}
|
|
20
|
-
else if (performance.now() - start < period) {
|
|
21
|
-
requestAnimationFrame(animate);
|
|
22
|
-
}
|
|
23
|
-
else {
|
|
24
|
-
if (interrupt(start, index)) {
|
|
25
|
-
return;
|
|
26
|
-
}
|
|
27
|
-
accept(performance.now(), index);
|
|
28
|
-
}
|
|
29
|
-
};
|
|
30
|
-
}
|
|
31
|
-
catch (error) {
|
|
32
|
-
throw error;
|
|
33
|
-
}
|
|
34
|
-
});
|
|
35
|
-
};
|
|
36
|
-
;
|
|
37
7
|
export let useAttribute = (target) => {
|
|
38
8
|
if (isObject(target)) {
|
|
39
9
|
return new SynchronousSemantic((accept, interrupt) => {
|
|
@@ -130,376 +100,6 @@ export let useBlob = (blob, chunk = 64n * 1024n) => {
|
|
|
130
100
|
}
|
|
131
101
|
});
|
|
132
102
|
};
|
|
133
|
-
;
|
|
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 => {
|
|
146
|
-
let listener = (event) => {
|
|
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;
|
|
161
|
-
}
|
|
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
|
-
}
|
|
173
|
-
accept(event, index);
|
|
174
|
-
index++;
|
|
175
|
-
return;
|
|
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++;
|
|
185
|
-
};
|
|
186
|
-
window.document.addEventListener(key, listener);
|
|
187
|
-
});
|
|
188
|
-
await until;
|
|
189
|
-
});
|
|
190
|
-
}
|
|
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 => {
|
|
200
|
-
for (let key of keys) {
|
|
201
|
-
if (!isString(key))
|
|
202
|
-
continue;
|
|
203
|
-
let listener = (event) => {
|
|
204
|
-
if (debounce > 0) {
|
|
205
|
-
if (timeOut) {
|
|
206
|
-
clearTimeout(timeOut);
|
|
207
|
-
}
|
|
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);
|
|
224
|
-
}
|
|
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);
|
|
236
|
-
}
|
|
237
|
-
});
|
|
238
|
-
await until;
|
|
239
|
-
});
|
|
240
|
-
}
|
|
241
|
-
throw new TypeError("Invalid arguments.");
|
|
242
|
-
};
|
|
243
|
-
;
|
|
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
|
-
}
|
|
323
|
-
if (isString(argument1)) {
|
|
324
|
-
let selector = argument1;
|
|
325
|
-
let elements = [...document.querySelectorAll(selector)];
|
|
326
|
-
if (isString(argument2)) {
|
|
327
|
-
let key = argument2;
|
|
328
|
-
return new AsynchronousSemantic(async (accept, interrupt) => {
|
|
329
|
-
let index = 0n;
|
|
330
|
-
let listeners = new WeakMap();
|
|
331
|
-
let until = new Promise((resolve) => {
|
|
332
|
-
for (let element of elements) {
|
|
333
|
-
if (validate(element)) {
|
|
334
|
-
let listener = (event) => {
|
|
335
|
-
if (interrupt(event, index)) {
|
|
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;
|
|
346
|
-
}
|
|
347
|
-
accept(event, index);
|
|
348
|
-
index++;
|
|
349
|
-
};
|
|
350
|
-
element.addEventListener(key, listener);
|
|
351
|
-
let map = new Map() || new Map();
|
|
352
|
-
map.set(key, listener);
|
|
353
|
-
listeners.set(element, map);
|
|
354
|
-
}
|
|
355
|
-
}
|
|
356
|
-
});
|
|
357
|
-
await until;
|
|
358
|
-
});
|
|
359
|
-
}
|
|
360
|
-
if (isIterable(argument2)) {
|
|
361
|
-
let keys = new Set(argument2);
|
|
362
|
-
return new AsynchronousSemantic(async (accept, interrupt) => {
|
|
363
|
-
let index = 0n;
|
|
364
|
-
let listeners = new Map();
|
|
365
|
-
let until = new Promise((resolve) => {
|
|
366
|
-
for (let element of elements) {
|
|
367
|
-
for (let key of keys) {
|
|
368
|
-
if (validate(element) && isString(key)) {
|
|
369
|
-
let listener = (event) => {
|
|
370
|
-
if (interrupt(event, index)) {
|
|
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;
|
|
378
|
-
}
|
|
379
|
-
accept(event, index);
|
|
380
|
-
index++;
|
|
381
|
-
};
|
|
382
|
-
element.addEventListener(key, listener);
|
|
383
|
-
listeners.set(key, listener);
|
|
384
|
-
}
|
|
385
|
-
}
|
|
386
|
-
}
|
|
387
|
-
});
|
|
388
|
-
await until;
|
|
389
|
-
});
|
|
390
|
-
}
|
|
391
|
-
}
|
|
392
|
-
if (isIterable(argument1)) {
|
|
393
|
-
let elementsOrSelectors = new Set(argument1);
|
|
394
|
-
if (isString(argument2)) {
|
|
395
|
-
let key = argument2;
|
|
396
|
-
return new AsynchronousSemantic(async (accept, interrupt) => {
|
|
397
|
-
let listeners = new Map();
|
|
398
|
-
let until = new Promise((resolve) => {
|
|
399
|
-
for (let elementOrSelector of elementsOrSelectors) {
|
|
400
|
-
if (validate(elementOrSelector)) {
|
|
401
|
-
if (isHTMLElemet(elementOrSelector)) {
|
|
402
|
-
let element = elementOrSelector;
|
|
403
|
-
let listener = (event) => {
|
|
404
|
-
if (interrupt(event, 0n)) {
|
|
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;
|
|
412
|
-
}
|
|
413
|
-
accept(event, 0n);
|
|
414
|
-
};
|
|
415
|
-
element.addEventListener(key, listener);
|
|
416
|
-
listeners.set(key, listener);
|
|
417
|
-
}
|
|
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)) {
|
|
423
|
-
let listener = (event) => {
|
|
424
|
-
if (interrupt(event, 0n)) {
|
|
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;
|
|
432
|
-
}
|
|
433
|
-
accept(event, 0n);
|
|
434
|
-
};
|
|
435
|
-
element.addEventListener(key, listener);
|
|
436
|
-
listeners.set(key, listener);
|
|
437
|
-
}
|
|
438
|
-
}
|
|
439
|
-
}
|
|
440
|
-
}
|
|
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)) {
|
|
453
|
-
let element = elementOrSelector;
|
|
454
|
-
for (let key of keys) {
|
|
455
|
-
if (isString(key)) {
|
|
456
|
-
let listener = (event) => {
|
|
457
|
-
if (interrupt(event, 0n)) {
|
|
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;
|
|
465
|
-
}
|
|
466
|
-
accept(event, 0n);
|
|
467
|
-
};
|
|
468
|
-
element.addEventListener(key, listener);
|
|
469
|
-
listeners.set(key, listener);
|
|
470
|
-
}
|
|
471
|
-
}
|
|
472
|
-
}
|
|
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);
|
|
492
|
-
}
|
|
493
|
-
}
|
|
494
|
-
}
|
|
495
|
-
}
|
|
496
|
-
});
|
|
497
|
-
await until;
|
|
498
|
-
});
|
|
499
|
-
}
|
|
500
|
-
}
|
|
501
|
-
throw new TypeError("Invalid arguments.");
|
|
502
|
-
};
|
|
503
103
|
export let useEmpty = () => {
|
|
504
104
|
return new SynchronousSemantic(() => { });
|
|
505
105
|
};
|
|
@@ -622,38 +222,159 @@ export let useInterval = (period, delay = 0) => {
|
|
|
622
222
|
}
|
|
623
223
|
throw new TypeError("Invalid arguments.");
|
|
624
224
|
};
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
225
|
+
;
|
|
226
|
+
export let useIterate = ((iterable) => {
|
|
227
|
+
if (isIterable(iterable)) {
|
|
228
|
+
return new SynchronousSemantic((accept, interrupt) => {
|
|
229
|
+
try {
|
|
230
|
+
let index = 0n;
|
|
231
|
+
for (let element of iterable) {
|
|
232
|
+
if (interrupt(element, index)) {
|
|
233
|
+
break;
|
|
234
|
+
}
|
|
235
|
+
accept(element, index);
|
|
236
|
+
index++;
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
catch (error) {
|
|
240
|
+
throw error;
|
|
241
|
+
}
|
|
242
|
+
});
|
|
243
|
+
}
|
|
244
|
+
if (isAsyncIterable(iterable)) {
|
|
245
|
+
return new AsynchronousSemantic(async (accept, interrupt) => {
|
|
246
|
+
return await new Promise(async (resolve, reject) => {
|
|
247
|
+
try {
|
|
248
|
+
let index = 0n;
|
|
249
|
+
for await (let element of iterable) {
|
|
250
|
+
if (interrupt(element, index)) {
|
|
251
|
+
break;
|
|
252
|
+
}
|
|
253
|
+
accept(element, index);
|
|
254
|
+
break;
|
|
255
|
+
}
|
|
256
|
+
resolve();
|
|
257
|
+
}
|
|
258
|
+
catch (error) {
|
|
259
|
+
reject(error);
|
|
260
|
+
}
|
|
261
|
+
});
|
|
262
|
+
});
|
|
633
263
|
}
|
|
634
264
|
throw new TypeError("Invalid arguments.");
|
|
635
|
-
};
|
|
265
|
+
});
|
|
266
|
+
;
|
|
636
267
|
export let usePromise = (promise) => {
|
|
637
268
|
if (isPromise(promise)) {
|
|
638
|
-
return new
|
|
639
|
-
|
|
269
|
+
return new AsynchronousSemantic(async (accept, interrupt) => {
|
|
270
|
+
return new Promise(async (resolve, reject) => {
|
|
640
271
|
promise.then((value) => {
|
|
641
272
|
if (interrupt(value, 0n)) {
|
|
642
|
-
|
|
273
|
+
reject(new Error("Promise was interrupted."));
|
|
274
|
+
}
|
|
275
|
+
else {
|
|
276
|
+
accept(value, 0n);
|
|
277
|
+
resolve();
|
|
643
278
|
}
|
|
644
|
-
accept(value, 0n);
|
|
645
|
-
}).catch((error) => {
|
|
646
|
-
throw error;
|
|
647
279
|
});
|
|
648
|
-
}
|
|
649
|
-
catch (error) {
|
|
650
|
-
throw error;
|
|
651
|
-
}
|
|
280
|
+
});
|
|
652
281
|
});
|
|
653
282
|
}
|
|
654
|
-
|
|
655
|
-
|
|
283
|
+
throw new TypeError("Invalid arguments.");
|
|
284
|
+
};
|
|
285
|
+
;
|
|
286
|
+
;
|
|
287
|
+
export let useSubscription = (argument1, argument2, argument3) => {
|
|
288
|
+
if (isObject(argument1) && isFunction(argument2)) {
|
|
289
|
+
let target = argument1;
|
|
290
|
+
try {
|
|
291
|
+
let subscriber = argument2();
|
|
292
|
+
if (isString(argument3)) {
|
|
293
|
+
let subscription = argument3;
|
|
294
|
+
return new AsynchronousSemantic(async (accept, interrupt) => {
|
|
295
|
+
try {
|
|
296
|
+
subscriber.mount(target);
|
|
297
|
+
let index = 0n;
|
|
298
|
+
let unsubscriptions = new Map();
|
|
299
|
+
return new Promise(async (resolve, reject) => {
|
|
300
|
+
try {
|
|
301
|
+
let handler = (event) => {
|
|
302
|
+
if (interrupt(event, index)) {
|
|
303
|
+
for (let [unsubscriptionKey, unsubscriptionValue] of unsubscriptions) {
|
|
304
|
+
subscriber.unsubscribe(unsubscriptionKey, unsubscriptionValue);
|
|
305
|
+
}
|
|
306
|
+
subscriber.unmount();
|
|
307
|
+
resolve();
|
|
308
|
+
}
|
|
309
|
+
else {
|
|
310
|
+
accept(event, index);
|
|
311
|
+
index++;
|
|
312
|
+
}
|
|
313
|
+
};
|
|
314
|
+
subscriber.subscribe(subscription, handler);
|
|
315
|
+
unsubscriptions.set(subscription, handler);
|
|
316
|
+
}
|
|
317
|
+
catch (error) {
|
|
318
|
+
for (let [unsubscriptionKey, unsubscriptionValue] of unsubscriptions) {
|
|
319
|
+
subscriber.unsubscribe(unsubscriptionKey, unsubscriptionValue);
|
|
320
|
+
}
|
|
321
|
+
subscriber.unmount();
|
|
322
|
+
reject(error);
|
|
323
|
+
}
|
|
324
|
+
});
|
|
325
|
+
}
|
|
326
|
+
catch (error) {
|
|
327
|
+
throw error;
|
|
328
|
+
}
|
|
329
|
+
});
|
|
330
|
+
}
|
|
331
|
+
if (isIterable(argument3)) {
|
|
332
|
+
let subscriptions = argument3;
|
|
333
|
+
return new AsynchronousSemantic(async (accept, interrupt) => {
|
|
334
|
+
try {
|
|
335
|
+
subscriber.mount(target);
|
|
336
|
+
let index = 0n;
|
|
337
|
+
let unsubscriptions = new Map();
|
|
338
|
+
return new Promise(async (resolve, reject) => {
|
|
339
|
+
try {
|
|
340
|
+
for (let subscription of subscriptions) {
|
|
341
|
+
let handler = (event) => {
|
|
342
|
+
if (interrupt(event, index)) {
|
|
343
|
+
for (let [unsubscriptionKey, unsubscriptionValue] of unsubscriptions) {
|
|
344
|
+
subscriber.unsubscribe(unsubscriptionKey, unsubscriptionValue);
|
|
345
|
+
}
|
|
346
|
+
subscriber.unmount();
|
|
347
|
+
resolve();
|
|
348
|
+
}
|
|
349
|
+
else {
|
|
350
|
+
accept(event, index);
|
|
351
|
+
index++;
|
|
352
|
+
}
|
|
353
|
+
};
|
|
354
|
+
subscriber.subscribe(subscription, handler);
|
|
355
|
+
unsubscriptions.set(subscription, handler);
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
catch (error) {
|
|
359
|
+
for (let [unsubscriptionKey, unsubscriptionValue] of unsubscriptions) {
|
|
360
|
+
subscriber.unsubscribe(unsubscriptionKey, unsubscriptionValue);
|
|
361
|
+
}
|
|
362
|
+
subscriber.unmount();
|
|
363
|
+
reject(error);
|
|
364
|
+
}
|
|
365
|
+
});
|
|
366
|
+
}
|
|
367
|
+
catch (error) {
|
|
368
|
+
throw error;
|
|
369
|
+
}
|
|
370
|
+
});
|
|
371
|
+
}
|
|
372
|
+
}
|
|
373
|
+
catch (error) {
|
|
374
|
+
throw error;
|
|
375
|
+
}
|
|
656
376
|
}
|
|
377
|
+
throw new TypeError("Invalid arguments.");
|
|
657
378
|
};
|
|
658
379
|
;
|
|
659
380
|
export let useOf = (...target) => {
|
|
@@ -722,11 +443,27 @@ export let useRange = (start, end, step = (isNumber(start) && isNumber(end) ? 1
|
|
|
722
443
|
;
|
|
723
444
|
export let useText = (argument1, argument2, argument3) => {
|
|
724
445
|
if (isString(argument1)) {
|
|
446
|
+
let text = argument1;
|
|
447
|
+
if (isString(argument2)) {
|
|
448
|
+
let delimeter = argument2;
|
|
449
|
+
return new SynchronousSemantic((accept, interrupt) => {
|
|
450
|
+
if (text.length > 0 && delimeter.length > 0) {
|
|
451
|
+
let splited = text.split(delimeter);
|
|
452
|
+
let index = 0n;
|
|
453
|
+
for (let split of splited) {
|
|
454
|
+
if (interrupt(split, index)) {
|
|
455
|
+
break;
|
|
456
|
+
}
|
|
457
|
+
accept(split, index);
|
|
458
|
+
}
|
|
459
|
+
}
|
|
460
|
+
});
|
|
461
|
+
}
|
|
725
462
|
if (isNumber(argument2) || isBigInt(argument2)) {
|
|
726
463
|
let start = useToNumber(argument2);
|
|
727
464
|
if (isNumber(argument3) || isBigInt(argument3)) {
|
|
728
465
|
let end = useToNumber(argument3);
|
|
729
|
-
let characters =
|
|
466
|
+
let characters = Array.from(argument1.substring(start, end));
|
|
730
467
|
return new SynchronousSemantic((accept, interrupt) => {
|
|
731
468
|
let index = 0n;
|
|
732
469
|
for (let character of characters) {
|
|
@@ -739,7 +476,7 @@ export let useText = (argument1, argument2, argument3) => {
|
|
|
739
476
|
});
|
|
740
477
|
}
|
|
741
478
|
else {
|
|
742
|
-
let characters =
|
|
479
|
+
let characters = Array.from(argument1.substring(start));
|
|
743
480
|
return new SynchronousSemantic((accept, interrupt) => {
|
|
744
481
|
let index = 0n;
|
|
745
482
|
for (let character of characters) {
|
|
@@ -755,227 +492,3 @@ export let useText = (argument1, argument2, argument3) => {
|
|
|
755
492
|
}
|
|
756
493
|
throw new TypeError("Invalid arguments.");
|
|
757
494
|
};
|
|
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)) {
|
|
772
|
-
let websocket = argument1;
|
|
773
|
-
if (isString(argument2)) {
|
|
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 => {
|
|
780
|
-
let listener = (event) => {
|
|
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;
|
|
795
|
-
}
|
|
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;
|
|
816
|
-
}
|
|
817
|
-
accept(event, index);
|
|
818
|
-
index++;
|
|
819
|
-
};
|
|
820
|
-
websocket.addEventListener(key, listener);
|
|
821
|
-
});
|
|
822
|
-
await until;
|
|
823
|
-
});
|
|
824
|
-
}
|
|
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 => {
|
|
833
|
-
for (let key of keys) {
|
|
834
|
-
if (!isString(key))
|
|
835
|
-
continue;
|
|
836
|
-
let listener = (event) => {
|
|
837
|
-
if (debounce > 0) {
|
|
838
|
-
if (timeOut) {
|
|
839
|
-
clearTimeout(timeOut);
|
|
840
|
-
}
|
|
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();
|
|
857
|
-
}
|
|
858
|
-
return;
|
|
859
|
-
}
|
|
860
|
-
accept(event, index);
|
|
861
|
-
index++;
|
|
862
|
-
};
|
|
863
|
-
websocket.addEventListener(key, listener);
|
|
864
|
-
}
|
|
865
|
-
});
|
|
866
|
-
await until;
|
|
867
|
-
});
|
|
868
|
-
}
|
|
869
|
-
}
|
|
870
|
-
throw new TypeError("Invalid arguments.");
|
|
871
|
-
};
|
|
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;
|
|
876
|
-
if (isString(argument1)) {
|
|
877
|
-
let key = argument1;
|
|
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 => {
|
|
883
|
-
let listener = (event) => {
|
|
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;
|
|
898
|
-
}
|
|
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;
|
|
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++;
|
|
922
|
-
};
|
|
923
|
-
window.addEventListener(key, listener);
|
|
924
|
-
});
|
|
925
|
-
await until;
|
|
926
|
-
});
|
|
927
|
-
}
|
|
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 => {
|
|
937
|
-
for (let key of keys) {
|
|
938
|
-
if (!isString(key))
|
|
939
|
-
continue;
|
|
940
|
-
let listener = (event) => {
|
|
941
|
-
if (debounce > 0) {
|
|
942
|
-
if (timeOut) {
|
|
943
|
-
clearTimeout(timeOut);
|
|
944
|
-
}
|
|
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);
|
|
961
|
-
}
|
|
962
|
-
listeners.clear();
|
|
963
|
-
if (--activeCount === 0) {
|
|
964
|
-
resolve();
|
|
965
|
-
}
|
|
966
|
-
return;
|
|
967
|
-
}
|
|
968
|
-
accept(event, index);
|
|
969
|
-
index++;
|
|
970
|
-
};
|
|
971
|
-
window.addEventListener(key, listener);
|
|
972
|
-
listeners.set(key, listener);
|
|
973
|
-
}
|
|
974
|
-
});
|
|
975
|
-
await until;
|
|
976
|
-
});
|
|
977
|
-
}
|
|
978
|
-
throw new TypeError("Invalid arguments.");
|
|
979
|
-
};
|
|
980
|
-
export let useNullable = (target) => Optional.ofNullable(target);
|
|
981
|
-
export let useNonNull = (target) => Optional.ofNonNull(target);
|