semantic-typescript 0.6.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/collector.d.ts +62 -58
- package/dist/asynchronous/collector.js +16 -5
- package/dist/asynchronous/semantic.d.ts +6 -2
- package/dist/asynchronous/semantic.js +19 -6
- package/dist/factory.d.ts +32 -71
- package/dist/factory.js +192 -603
- package/dist/guard.d.ts +0 -3
- package/dist/guard.js +0 -19
- package/dist/hash.js +3 -0
- package/dist/hook.d.ts +6 -1
- package/dist/hook.js +20 -3
- package/dist/synchronous/collector.d.ts +8 -4
- package/dist/synchronous/collector.js +74 -59
- package/dist/synchronous/semantic.d.ts +31 -23
- package/dist/synchronous/semantic.js +218 -286
- package/package.json +3 -2
- package/readme.cn.md +267 -214
- package/readme.de.md +225 -172
- package/readme.es.md +229 -170
- package/readme.fr.md +233 -170
- package/readme.jp.md +232 -169
- package/readme.kr.md +227 -169
- package/readme.md +270 -214
- package/readme.ru.md +231 -169
- package/readme.tw.md +225 -172
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
|
-
console.error(error);
|
|
33
|
-
}
|
|
34
|
-
});
|
|
35
|
-
};
|
|
36
|
-
;
|
|
37
7
|
export let useAttribute = (target) => {
|
|
38
8
|
if (isObject(target)) {
|
|
39
9
|
return new SynchronousSemantic((accept, interrupt) => {
|
|
@@ -53,7 +23,7 @@ export let useAttribute = (target) => {
|
|
|
53
23
|
});
|
|
54
24
|
}
|
|
55
25
|
catch (error) {
|
|
56
|
-
|
|
26
|
+
throw error;
|
|
57
27
|
}
|
|
58
28
|
});
|
|
59
29
|
}
|
|
@@ -115,7 +85,7 @@ export let useBlob = (blob, chunk = 64n * 1024n) => {
|
|
|
115
85
|
}
|
|
116
86
|
}
|
|
117
87
|
catch (error) {
|
|
118
|
-
|
|
88
|
+
throw error;
|
|
119
89
|
}
|
|
120
90
|
finally {
|
|
121
91
|
if (stoppable) {
|
|
@@ -126,346 +96,10 @@ export let useBlob = (blob, chunk = 64n * 1024n) => {
|
|
|
126
96
|
})();
|
|
127
97
|
}
|
|
128
98
|
catch (error) {
|
|
129
|
-
|
|
99
|
+
throw error;
|
|
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 until = new Promise(resolve => {
|
|
199
|
-
for (let key of keys) {
|
|
200
|
-
if (!isString(key))
|
|
201
|
-
continue;
|
|
202
|
-
let listener = (event) => {
|
|
203
|
-
if (debounce > 0) {
|
|
204
|
-
if (timeOut) {
|
|
205
|
-
clearTimeout(timeOut);
|
|
206
|
-
}
|
|
207
|
-
timeOut = setTimeout(() => handleEvent(event, key), debounce);
|
|
208
|
-
return;
|
|
209
|
-
}
|
|
210
|
-
if (throttle > 0) {
|
|
211
|
-
let now = performance.now();
|
|
212
|
-
if (now - lastEmitTime < throttle)
|
|
213
|
-
return;
|
|
214
|
-
lastEmitTime = now;
|
|
215
|
-
}
|
|
216
|
-
handleEvent(event, key);
|
|
217
|
-
};
|
|
218
|
-
let handleEvent = (event, currentKey) => {
|
|
219
|
-
if (interrupt(event, index)) {
|
|
220
|
-
window.document.removeEventListener(currentKey, listener);
|
|
221
|
-
if (--activeCount === 0) {
|
|
222
|
-
resolve();
|
|
223
|
-
}
|
|
224
|
-
return;
|
|
225
|
-
}
|
|
226
|
-
accept(event, index);
|
|
227
|
-
index++;
|
|
228
|
-
};
|
|
229
|
-
window.document.addEventListener(key, listener);
|
|
230
|
-
}
|
|
231
|
-
});
|
|
232
|
-
await until;
|
|
233
|
-
});
|
|
234
|
-
}
|
|
235
|
-
throw new TypeError("Invalid arguments.");
|
|
236
|
-
};
|
|
237
|
-
;
|
|
238
|
-
export let useHTMLElement = (argument1, argument2, argument3 = {}) => {
|
|
239
|
-
let throttle = isObject(argument3) && isNumber(argument3.throttle) ? argument3.throttle : 0;
|
|
240
|
-
let debounce = isObject(argument3) && isNumber(argument3.debounce) ? argument3.debounce : 0;
|
|
241
|
-
if (debounce > 0 && throttle > 0) {
|
|
242
|
-
throw new TypeError("throttle and debounce cannot be used together");
|
|
243
|
-
}
|
|
244
|
-
if (debounce < 0 || throttle < 0) {
|
|
245
|
-
throw new TypeError("throttle/debounce must be non-negative");
|
|
246
|
-
}
|
|
247
|
-
if (isHTMLElemet(argument1)) {
|
|
248
|
-
let element = argument1;
|
|
249
|
-
if (isString(argument2)) {
|
|
250
|
-
let key = argument2;
|
|
251
|
-
return new AsynchronousSemantic(async (accept, interrupt) => {
|
|
252
|
-
let timeOut = null;
|
|
253
|
-
let lastEmit = 0;
|
|
254
|
-
let index = 0n;
|
|
255
|
-
let until = new Promise((resolve) => {
|
|
256
|
-
let listener = (event) => {
|
|
257
|
-
if (debounce > 0) {
|
|
258
|
-
if (timeOut)
|
|
259
|
-
clearTimeout(timeOut);
|
|
260
|
-
timeOut = setTimeout(() => handle(event), debounce);
|
|
261
|
-
return;
|
|
262
|
-
}
|
|
263
|
-
if (throttle > 0) {
|
|
264
|
-
let now = performance.now();
|
|
265
|
-
if (now - lastEmit < throttle)
|
|
266
|
-
return;
|
|
267
|
-
lastEmit = now;
|
|
268
|
-
}
|
|
269
|
-
handle(event);
|
|
270
|
-
};
|
|
271
|
-
let handle = (event) => {
|
|
272
|
-
if (interrupt(event, index)) {
|
|
273
|
-
element.removeEventListener(key, listener);
|
|
274
|
-
if (timeOut)
|
|
275
|
-
clearTimeout(timeOut);
|
|
276
|
-
resolve();
|
|
277
|
-
return;
|
|
278
|
-
}
|
|
279
|
-
accept(event, index);
|
|
280
|
-
index++;
|
|
281
|
-
};
|
|
282
|
-
element.addEventListener(key, listener);
|
|
283
|
-
});
|
|
284
|
-
await until;
|
|
285
|
-
});
|
|
286
|
-
}
|
|
287
|
-
if (isIterable(argument2)) {
|
|
288
|
-
let keys = [...new Set(argument2)];
|
|
289
|
-
return new AsynchronousSemantic(async (accept, interrupt) => {
|
|
290
|
-
let active = keys.length;
|
|
291
|
-
let index = 0n;
|
|
292
|
-
let until = new Promise((resolve) => {
|
|
293
|
-
for (let key of keys) {
|
|
294
|
-
let listener = (event) => {
|
|
295
|
-
if (interrupt(event, index)) {
|
|
296
|
-
element.removeEventListener(key, listener);
|
|
297
|
-
if (--active === 0) {
|
|
298
|
-
resolve();
|
|
299
|
-
}
|
|
300
|
-
return;
|
|
301
|
-
}
|
|
302
|
-
accept(event, index);
|
|
303
|
-
index++;
|
|
304
|
-
};
|
|
305
|
-
element.addEventListener(key, listener);
|
|
306
|
-
}
|
|
307
|
-
});
|
|
308
|
-
await until;
|
|
309
|
-
});
|
|
310
|
-
}
|
|
311
|
-
}
|
|
312
|
-
if (isString(argument1)) {
|
|
313
|
-
let selector = argument1;
|
|
314
|
-
let elements = [...document.querySelectorAll(selector)];
|
|
315
|
-
if (isString(argument2)) {
|
|
316
|
-
let key = argument2;
|
|
317
|
-
return new AsynchronousSemantic(async (accept, interrupt) => {
|
|
318
|
-
let active = elements.length;
|
|
319
|
-
let index = 0n;
|
|
320
|
-
let until = new Promise((resolve) => {
|
|
321
|
-
for (let element of elements) {
|
|
322
|
-
if (validate(element)) {
|
|
323
|
-
let listener = (event) => {
|
|
324
|
-
if (interrupt(event, index)) {
|
|
325
|
-
element.removeEventListener(key, listener);
|
|
326
|
-
if (--active === 0) {
|
|
327
|
-
resolve();
|
|
328
|
-
}
|
|
329
|
-
return;
|
|
330
|
-
}
|
|
331
|
-
accept(event, index);
|
|
332
|
-
index++;
|
|
333
|
-
};
|
|
334
|
-
element.addEventListener(key, listener);
|
|
335
|
-
}
|
|
336
|
-
}
|
|
337
|
-
});
|
|
338
|
-
await until;
|
|
339
|
-
});
|
|
340
|
-
}
|
|
341
|
-
if (isIterable(argument2)) {
|
|
342
|
-
let keys = new Set(argument2);
|
|
343
|
-
return new AsynchronousSemantic(async (accept, interrupt) => {
|
|
344
|
-
let active = elements.length * keys.size;
|
|
345
|
-
let index = 0n;
|
|
346
|
-
let until = new Promise((resolve) => {
|
|
347
|
-
for (let element of elements) {
|
|
348
|
-
for (let key of keys) {
|
|
349
|
-
if (validate(element) && isString(key)) {
|
|
350
|
-
let listener = (event) => {
|
|
351
|
-
if (interrupt(event, index)) {
|
|
352
|
-
element.removeEventListener(key, listener);
|
|
353
|
-
if (--active === 0) {
|
|
354
|
-
resolve();
|
|
355
|
-
}
|
|
356
|
-
return;
|
|
357
|
-
}
|
|
358
|
-
accept(event, index);
|
|
359
|
-
index++;
|
|
360
|
-
};
|
|
361
|
-
element.addEventListener(key, listener);
|
|
362
|
-
}
|
|
363
|
-
}
|
|
364
|
-
}
|
|
365
|
-
});
|
|
366
|
-
await until;
|
|
367
|
-
});
|
|
368
|
-
}
|
|
369
|
-
}
|
|
370
|
-
if (isIterable(argument1)) {
|
|
371
|
-
let elementsOrSelectors = new Set(argument1);
|
|
372
|
-
if (isString(argument2)) {
|
|
373
|
-
let key = argument2;
|
|
374
|
-
return new AsynchronousSemantic(async (accept, interrupt) => {
|
|
375
|
-
let active = elementsOrSelectors.size;
|
|
376
|
-
let until = new Promise((resolve) => {
|
|
377
|
-
for (let elementOrSelector of elementsOrSelectors) {
|
|
378
|
-
if (validate(elementOrSelector)) {
|
|
379
|
-
if (isHTMLElemet(elementOrSelector)) {
|
|
380
|
-
let element = elementOrSelector;
|
|
381
|
-
let listener = (event) => {
|
|
382
|
-
if (interrupt(event, 0n)) {
|
|
383
|
-
element.removeEventListener(key, listener);
|
|
384
|
-
if (--active === 0) {
|
|
385
|
-
resolve();
|
|
386
|
-
}
|
|
387
|
-
return;
|
|
388
|
-
}
|
|
389
|
-
accept(event, 0n);
|
|
390
|
-
};
|
|
391
|
-
element.addEventListener(key, listener);
|
|
392
|
-
}
|
|
393
|
-
else if (isString(elementOrSelector)) {
|
|
394
|
-
let selector = elementOrSelector;
|
|
395
|
-
let elements = [...document.querySelectorAll(selector)].filter((item) => isHTMLElemet(item));
|
|
396
|
-
for (let element of elements) {
|
|
397
|
-
if (validate(element)) {
|
|
398
|
-
let listener = (event) => {
|
|
399
|
-
if (interrupt(event, 0n)) {
|
|
400
|
-
element.removeEventListener(key, listener);
|
|
401
|
-
if (--active === 0) {
|
|
402
|
-
resolve();
|
|
403
|
-
}
|
|
404
|
-
return;
|
|
405
|
-
}
|
|
406
|
-
accept(event, 0n);
|
|
407
|
-
};
|
|
408
|
-
element.addEventListener(key, listener);
|
|
409
|
-
}
|
|
410
|
-
}
|
|
411
|
-
}
|
|
412
|
-
}
|
|
413
|
-
}
|
|
414
|
-
});
|
|
415
|
-
await until;
|
|
416
|
-
});
|
|
417
|
-
}
|
|
418
|
-
if (isIterable(argument2)) {
|
|
419
|
-
let keys = new Set(argument2);
|
|
420
|
-
return new AsynchronousSemantic(async (accept, interrupt) => {
|
|
421
|
-
let active = elementsOrSelectors.size * keys.size;
|
|
422
|
-
let until = new Promise((resolve) => {
|
|
423
|
-
for (let elementOrSelector of elementsOrSelectors) {
|
|
424
|
-
if (isHTMLElemet(elementOrSelector)) {
|
|
425
|
-
let element = elementOrSelector;
|
|
426
|
-
for (let key of keys) {
|
|
427
|
-
if (isString(key)) {
|
|
428
|
-
let listener = (event) => {
|
|
429
|
-
if (interrupt(event, 0n)) {
|
|
430
|
-
element.removeEventListener(key, listener);
|
|
431
|
-
if (--active === 0) {
|
|
432
|
-
resolve();
|
|
433
|
-
}
|
|
434
|
-
return;
|
|
435
|
-
}
|
|
436
|
-
accept(event, 0n);
|
|
437
|
-
};
|
|
438
|
-
element.addEventListener(key, listener);
|
|
439
|
-
}
|
|
440
|
-
}
|
|
441
|
-
}
|
|
442
|
-
else if (isString(elementOrSelector)) {
|
|
443
|
-
let selector = elementOrSelector;
|
|
444
|
-
let elements = [...document.querySelectorAll(selector)].filter((item) => isHTMLElemet(item));
|
|
445
|
-
for (let element of elements) {
|
|
446
|
-
for (let key of keys) {
|
|
447
|
-
let listener = (event) => {
|
|
448
|
-
if (interrupt(event, 0n)) {
|
|
449
|
-
element.removeEventListener(key, listener);
|
|
450
|
-
if (--active === 0) {
|
|
451
|
-
resolve();
|
|
452
|
-
}
|
|
453
|
-
return;
|
|
454
|
-
}
|
|
455
|
-
accept(event, 0n);
|
|
456
|
-
};
|
|
457
|
-
element.addEventListener(key, listener);
|
|
458
|
-
}
|
|
459
|
-
}
|
|
460
|
-
}
|
|
461
|
-
}
|
|
462
|
-
});
|
|
463
|
-
await until;
|
|
464
|
-
});
|
|
465
|
-
}
|
|
466
|
-
}
|
|
467
|
-
throw new TypeError("Invalid arguments.");
|
|
468
|
-
};
|
|
469
103
|
export let useEmpty = () => {
|
|
470
104
|
return new SynchronousSemantic(() => { });
|
|
471
105
|
};
|
|
@@ -483,7 +117,7 @@ export let useFill = (element, count) => {
|
|
|
483
117
|
}
|
|
484
118
|
}
|
|
485
119
|
catch (error) {
|
|
486
|
-
|
|
120
|
+
throw error;
|
|
487
121
|
}
|
|
488
122
|
});
|
|
489
123
|
}
|
|
@@ -504,7 +138,7 @@ export let useFrom = (iterable) => {
|
|
|
504
138
|
}
|
|
505
139
|
}
|
|
506
140
|
catch (error) {
|
|
507
|
-
|
|
141
|
+
throw error;
|
|
508
142
|
}
|
|
509
143
|
});
|
|
510
144
|
}
|
|
@@ -521,7 +155,7 @@ export let useFrom = (iterable) => {
|
|
|
521
155
|
}
|
|
522
156
|
}
|
|
523
157
|
catch (error) {
|
|
524
|
-
|
|
158
|
+
throw error;
|
|
525
159
|
}
|
|
526
160
|
});
|
|
527
161
|
}
|
|
@@ -543,7 +177,7 @@ export let useGenerate = (supplier, interrupt) => {
|
|
|
543
177
|
}
|
|
544
178
|
}
|
|
545
179
|
catch (error) {
|
|
546
|
-
|
|
180
|
+
throw error;
|
|
547
181
|
}
|
|
548
182
|
});
|
|
549
183
|
}
|
|
@@ -582,44 +216,165 @@ export let useInterval = (period, delay = 0) => {
|
|
|
582
216
|
}
|
|
583
217
|
}
|
|
584
218
|
catch (error) {
|
|
585
|
-
|
|
219
|
+
throw error;
|
|
586
220
|
}
|
|
587
221
|
});
|
|
588
222
|
}
|
|
589
223
|
throw new TypeError("Invalid arguments.");
|
|
590
224
|
};
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
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
|
+
});
|
|
599
263
|
}
|
|
600
264
|
throw new TypeError("Invalid arguments.");
|
|
601
|
-
};
|
|
265
|
+
});
|
|
266
|
+
;
|
|
602
267
|
export let usePromise = (promise) => {
|
|
603
268
|
if (isPromise(promise)) {
|
|
604
|
-
return new
|
|
605
|
-
|
|
269
|
+
return new AsynchronousSemantic(async (accept, interrupt) => {
|
|
270
|
+
return new Promise(async (resolve, reject) => {
|
|
606
271
|
promise.then((value) => {
|
|
607
272
|
if (interrupt(value, 0n)) {
|
|
608
|
-
|
|
273
|
+
reject(new Error("Promise was interrupted."));
|
|
274
|
+
}
|
|
275
|
+
else {
|
|
276
|
+
accept(value, 0n);
|
|
277
|
+
resolve();
|
|
609
278
|
}
|
|
610
|
-
accept(value, 0n);
|
|
611
|
-
}).catch((error) => {
|
|
612
|
-
console.error(error);
|
|
613
279
|
});
|
|
614
|
-
}
|
|
615
|
-
catch (error) {
|
|
616
|
-
console.error(error);
|
|
617
|
-
}
|
|
280
|
+
});
|
|
618
281
|
});
|
|
619
282
|
}
|
|
620
|
-
|
|
621
|
-
|
|
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
|
+
}
|
|
622
376
|
}
|
|
377
|
+
throw new TypeError("Invalid arguments.");
|
|
623
378
|
};
|
|
624
379
|
;
|
|
625
380
|
export let useOf = (...target) => {
|
|
@@ -636,7 +391,7 @@ export let useOf = (...target) => {
|
|
|
636
391
|
}
|
|
637
392
|
}
|
|
638
393
|
catch (error) {
|
|
639
|
-
|
|
394
|
+
throw error;
|
|
640
395
|
}
|
|
641
396
|
});
|
|
642
397
|
}
|
|
@@ -661,7 +416,7 @@ export let useRange = (start, end, step = (isNumber(start) && isNumber(end) ? 1
|
|
|
661
416
|
}
|
|
662
417
|
}
|
|
663
418
|
catch (error) {
|
|
664
|
-
|
|
419
|
+
throw error;
|
|
665
420
|
}
|
|
666
421
|
});
|
|
667
422
|
}
|
|
@@ -679,227 +434,61 @@ export let useRange = (start, end, step = (isNumber(start) && isNumber(end) ? 1
|
|
|
679
434
|
}
|
|
680
435
|
}
|
|
681
436
|
catch (error) {
|
|
682
|
-
|
|
437
|
+
throw error;
|
|
683
438
|
}
|
|
684
439
|
});
|
|
685
440
|
}
|
|
686
441
|
throw new TypeError("Invalid arguments.");
|
|
687
442
|
};
|
|
688
443
|
;
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
let throttle = 0;
|
|
693
|
-
if (isObject(argument2)) {
|
|
694
|
-
debounce = Reflect.has(argument2, "debounce") ? Reflect.get(argument2, "debounce") : 0;
|
|
695
|
-
throttle = Reflect.has(argument2, "throttle") ? Reflect.get(argument2, "throttle") : 0;
|
|
696
|
-
}
|
|
697
|
-
else {
|
|
698
|
-
debounce = validate(argument3) && isNumber(argument3.debounce) ? argument3.debounce : 0;
|
|
699
|
-
throttle = validate(argument3) && isNumber(argument3.throttle) ? argument3.throttle : 0;
|
|
700
|
-
}
|
|
701
|
-
if (validate(argument1)) {
|
|
702
|
-
let websocket = argument1;
|
|
444
|
+
export let useText = (argument1, argument2, argument3) => {
|
|
445
|
+
if (isString(argument1)) {
|
|
446
|
+
let text = argument1;
|
|
703
447
|
if (isString(argument2)) {
|
|
704
|
-
let
|
|
705
|
-
return new
|
|
706
|
-
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
if (timeOut) {
|
|
713
|
-
clearTimeout(timeOut);
|
|
714
|
-
}
|
|
715
|
-
timeOut = setTimeout(() => {
|
|
716
|
-
if (interrupt(event, index)) {
|
|
717
|
-
websocket.removeEventListener(key, listener);
|
|
718
|
-
resolve();
|
|
719
|
-
return;
|
|
720
|
-
}
|
|
721
|
-
accept(event, index);
|
|
722
|
-
index++;
|
|
723
|
-
}, debounce);
|
|
724
|
-
return;
|
|
725
|
-
}
|
|
726
|
-
if (throttle > 0) {
|
|
727
|
-
let now = performance.now();
|
|
728
|
-
if (now - lastEmitTime < throttle) {
|
|
729
|
-
return;
|
|
730
|
-
}
|
|
731
|
-
lastEmitTime = now;
|
|
732
|
-
if (interrupt(event, index)) {
|
|
733
|
-
websocket.removeEventListener(key, listener);
|
|
734
|
-
resolve();
|
|
735
|
-
return;
|
|
736
|
-
}
|
|
737
|
-
accept(event, index);
|
|
738
|
-
index++;
|
|
739
|
-
return;
|
|
740
|
-
}
|
|
741
|
-
if (interrupt(event, index)) {
|
|
742
|
-
websocket.removeEventListener(key, listener);
|
|
743
|
-
resolve();
|
|
744
|
-
accept(event, -1n);
|
|
745
|
-
return;
|
|
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;
|
|
746
456
|
}
|
|
747
|
-
accept(
|
|
748
|
-
index++;
|
|
749
|
-
};
|
|
750
|
-
websocket.addEventListener(key, listener);
|
|
751
|
-
});
|
|
752
|
-
await until;
|
|
753
|
-
});
|
|
754
|
-
}
|
|
755
|
-
if (isIterable(argument2)) {
|
|
756
|
-
let keys = new Set(...argument1);
|
|
757
|
-
return new AsynchronousSemantic(async (accept, interrupt) => {
|
|
758
|
-
let lastEmitTime = 0;
|
|
759
|
-
let timeOut = null;
|
|
760
|
-
let index = 0n;
|
|
761
|
-
let activeCount = keys.size;
|
|
762
|
-
let until = new Promise(resolve => {
|
|
763
|
-
for (let key of keys) {
|
|
764
|
-
if (!isString(key))
|
|
765
|
-
continue;
|
|
766
|
-
let listener = (event) => {
|
|
767
|
-
if (debounce > 0) {
|
|
768
|
-
if (timeOut) {
|
|
769
|
-
clearTimeout(timeOut);
|
|
770
|
-
}
|
|
771
|
-
timeOut = setTimeout(() => handleEvent(event, key), debounce);
|
|
772
|
-
return;
|
|
773
|
-
}
|
|
774
|
-
if (throttle > 0) {
|
|
775
|
-
let now = performance.now();
|
|
776
|
-
if (now - lastEmitTime < throttle)
|
|
777
|
-
return;
|
|
778
|
-
lastEmitTime = now;
|
|
779
|
-
}
|
|
780
|
-
handleEvent(event, key);
|
|
781
|
-
};
|
|
782
|
-
let handleEvent = (event, currentKey) => {
|
|
783
|
-
if (interrupt(event, index)) {
|
|
784
|
-
websocket.removeEventListener(currentKey, listener);
|
|
785
|
-
if (--activeCount === 0) {
|
|
786
|
-
resolve();
|
|
787
|
-
}
|
|
788
|
-
return;
|
|
789
|
-
}
|
|
790
|
-
accept(event, index);
|
|
791
|
-
index++;
|
|
792
|
-
};
|
|
793
|
-
websocket.addEventListener(key, listener);
|
|
457
|
+
accept(split, index);
|
|
794
458
|
}
|
|
795
|
-
}
|
|
796
|
-
await until;
|
|
459
|
+
}
|
|
797
460
|
});
|
|
798
461
|
}
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
|
|
803
|
-
|
|
804
|
-
|
|
805
|
-
|
|
806
|
-
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
let timeOut = null;
|
|
810
|
-
let lastEmitTime = 0;
|
|
811
|
-
let index = 0n;
|
|
812
|
-
let until = new Promise(resolve => {
|
|
813
|
-
let listener = (event) => {
|
|
814
|
-
if (debounce > 0) {
|
|
815
|
-
if (timeOut) {
|
|
816
|
-
clearTimeout(timeOut);
|
|
817
|
-
}
|
|
818
|
-
timeOut = setTimeout(() => {
|
|
819
|
-
if (interrupt(event, index)) {
|
|
820
|
-
window.removeEventListener(key, listener);
|
|
821
|
-
resolve();
|
|
822
|
-
return;
|
|
823
|
-
}
|
|
824
|
-
accept(event, index);
|
|
825
|
-
index++;
|
|
826
|
-
}, debounce);
|
|
827
|
-
return;
|
|
828
|
-
}
|
|
829
|
-
if (throttle > 0) {
|
|
830
|
-
let now = performance.now();
|
|
831
|
-
if (now - lastEmitTime < throttle) {
|
|
832
|
-
return;
|
|
833
|
-
}
|
|
834
|
-
lastEmitTime = now;
|
|
835
|
-
if (interrupt(event, index)) {
|
|
836
|
-
window.removeEventListener(key, listener);
|
|
837
|
-
resolve();
|
|
838
|
-
return;
|
|
462
|
+
if (isNumber(argument2) || isBigInt(argument2)) {
|
|
463
|
+
let start = useToNumber(argument2);
|
|
464
|
+
if (isNumber(argument3) || isBigInt(argument3)) {
|
|
465
|
+
let end = useToNumber(argument3);
|
|
466
|
+
let characters = Array.from(argument1.substring(start, end));
|
|
467
|
+
return new SynchronousSemantic((accept, interrupt) => {
|
|
468
|
+
let index = 0n;
|
|
469
|
+
for (let character of characters) {
|
|
470
|
+
if (interrupt(character, index)) {
|
|
471
|
+
break;
|
|
839
472
|
}
|
|
840
|
-
accept(
|
|
473
|
+
accept(character, index);
|
|
841
474
|
index++;
|
|
842
|
-
return;
|
|
843
475
|
}
|
|
844
|
-
|
|
845
|
-
|
|
846
|
-
|
|
847
|
-
|
|
848
|
-
|
|
849
|
-
|
|
850
|
-
|
|
851
|
-
|
|
852
|
-
|
|
853
|
-
window.addEventListener(key, listener);
|
|
854
|
-
});
|
|
855
|
-
await until;
|
|
856
|
-
});
|
|
857
|
-
}
|
|
858
|
-
if (isIterable(argument1)) {
|
|
859
|
-
let keys = new Set(...argument1);
|
|
860
|
-
return new AsynchronousSemantic(async (accept, interrupt) => {
|
|
861
|
-
let lastEmitTime = 0;
|
|
862
|
-
let timeOut = null;
|
|
863
|
-
let index = 0n;
|
|
864
|
-
let activeCount = keys.size;
|
|
865
|
-
let until = new Promise(resolve => {
|
|
866
|
-
for (let key of keys) {
|
|
867
|
-
if (!isString(key))
|
|
868
|
-
continue;
|
|
869
|
-
let listener = (event) => {
|
|
870
|
-
if (debounce > 0) {
|
|
871
|
-
if (timeOut) {
|
|
872
|
-
clearTimeout(timeOut);
|
|
873
|
-
}
|
|
874
|
-
timeOut = setTimeout(() => handleEvent(event, key), debounce);
|
|
875
|
-
return;
|
|
876
|
-
}
|
|
877
|
-
if (throttle > 0) {
|
|
878
|
-
let now = performance.now();
|
|
879
|
-
if (now - lastEmitTime < throttle)
|
|
880
|
-
return;
|
|
881
|
-
lastEmitTime = now;
|
|
882
|
-
}
|
|
883
|
-
handleEvent(event, key);
|
|
884
|
-
};
|
|
885
|
-
let handleEvent = (event, currentKey) => {
|
|
886
|
-
if (interrupt(event, index)) {
|
|
887
|
-
window.removeEventListener(currentKey, listener);
|
|
888
|
-
if (--activeCount === 0) {
|
|
889
|
-
resolve();
|
|
890
|
-
}
|
|
891
|
-
return;
|
|
476
|
+
});
|
|
477
|
+
}
|
|
478
|
+
else {
|
|
479
|
+
let characters = Array.from(argument1.substring(start));
|
|
480
|
+
return new SynchronousSemantic((accept, interrupt) => {
|
|
481
|
+
let index = 0n;
|
|
482
|
+
for (let character of characters) {
|
|
483
|
+
if (interrupt(character, index)) {
|
|
484
|
+
break;
|
|
892
485
|
}
|
|
893
|
-
accept(
|
|
486
|
+
accept(character, index);
|
|
894
487
|
index++;
|
|
895
|
-
}
|
|
896
|
-
|
|
897
|
-
|
|
898
|
-
|
|
899
|
-
await until;
|
|
900
|
-
});
|
|
488
|
+
}
|
|
489
|
+
});
|
|
490
|
+
}
|
|
491
|
+
}
|
|
901
492
|
}
|
|
902
493
|
throw new TypeError("Invalid arguments.");
|
|
903
494
|
};
|
|
904
|
-
export let useNullable = (target) => Optional.ofNullable(target);
|
|
905
|
-
export let useNonNull = (target) => Optional.ofNonNull(target);
|