semantic-typescript 0.5.0 → 0.6.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 +231 -0
- package/dist/asynchronous/collector.js +800 -0
- package/dist/asynchronous/semantic.d.ts +257 -0
- package/dist/asynchronous/semantic.js +1853 -0
- package/dist/factory.d.ts +110 -32
- package/dist/factory.js +582 -189
- package/dist/guard.d.ts +24 -27
- package/dist/guard.js +37 -43
- package/dist/hook.d.ts +11 -7
- package/dist/hook.js +74 -21
- package/dist/index.d.ts +2 -3
- package/dist/index.js +2 -3
- package/dist/optional.d.ts +5 -5
- package/dist/optional.js +14 -10
- package/dist/symbol.d.ts +19 -23
- package/dist/symbol.js +19 -23
- package/dist/synchronous/collector.d.ts +232 -0
- package/dist/{collector.js → synchronous/collector.js} +160 -170
- package/dist/{collectable.d.ts → synchronous/semantic.d.ts} +114 -71
- package/dist/{collectable.js → synchronous/semantic.js} +761 -294
- package/dist/utility.d.ts +8 -2
- package/dist/utility.js +1 -0
- package/package.json +1 -1
- package/readme.cn.md +158 -697
- package/readme.de.md +163 -432
- package/readme.es.md +163 -433
- package/readme.fr.md +162 -444
- package/readme.jp.md +162 -442
- package/readme.kr.md +161 -430
- package/readme.md +157 -799
- package/readme.ru.md +161 -426
- package/readme.tw.md +161 -436
- package/dist/collector.d.ts +0 -245
- package/dist/map.d.ts +0 -76
- package/dist/map.js +0 -253
- package/dist/node.d.ts +0 -182
- package/dist/node.js +0 -918
- package/dist/semantic.d.ts +0 -52
- package/dist/semantic.js +0 -504
- package/dist/set.d.ts +0 -19
- package/dist/set.js +0 -65
- package/dist/statistics.d.ts +0 -97
- package/dist/statistics.js +0 -483
- package/dist/tree.d.ts +0 -82
- package/dist/tree.js +0 -257
- package/dist/window.d.ts +0 -12
- package/dist/window.js +0 -72
package/dist/factory.js
CHANGED
|
@@ -1,12 +1,15 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
1
|
+
import { AsynchronousSemantic } from "./asynchronous/semantic";
|
|
2
|
+
import { isBigInt, isFunction, isIterable, isNumber, isObject, isPromise, isAsyncIterable, isString, isHTMLElemet } from "./guard";
|
|
3
|
+
import { useCompare, useToBigInt, useToNumber, useTraverse } from "./hook";
|
|
4
|
+
import { Optional } from "./optional";
|
|
5
|
+
import { SynchronousSemantic } from "./synchronous/semantic";
|
|
4
6
|
import { invalidate, validate } from "./utility";
|
|
5
|
-
|
|
7
|
+
;
|
|
8
|
+
export let useAnimationFrame = (period, delay = 0) => {
|
|
6
9
|
if (period <= 0 || !Number.isFinite(period) || delay < 0 || !Number.isFinite(delay)) {
|
|
7
10
|
throw new TypeError("Period must be positive finite number and delay must be non-negative finite number.");
|
|
8
11
|
}
|
|
9
|
-
return new
|
|
12
|
+
return new SynchronousSemantic((accept, interrupt) => {
|
|
10
13
|
try {
|
|
11
14
|
let start = performance.now();
|
|
12
15
|
let index = 0n;
|
|
@@ -26,14 +29,14 @@ export let animationFrame = (period, delay = 0) => {
|
|
|
26
29
|
};
|
|
27
30
|
}
|
|
28
31
|
catch (error) {
|
|
29
|
-
|
|
32
|
+
console.error(error);
|
|
30
33
|
}
|
|
31
34
|
});
|
|
32
35
|
};
|
|
33
36
|
;
|
|
34
|
-
export let
|
|
37
|
+
export let useAttribute = (target) => {
|
|
35
38
|
if (isObject(target)) {
|
|
36
|
-
return new
|
|
39
|
+
return new SynchronousSemantic((accept, interrupt) => {
|
|
37
40
|
try {
|
|
38
41
|
let index = 0n;
|
|
39
42
|
useTraverse(target, (key, value) => {
|
|
@@ -50,13 +53,14 @@ export let attribute = (target) => {
|
|
|
50
53
|
});
|
|
51
54
|
}
|
|
52
55
|
catch (error) {
|
|
53
|
-
|
|
56
|
+
console.error(error);
|
|
54
57
|
}
|
|
55
58
|
});
|
|
56
59
|
}
|
|
57
60
|
throw new TypeError("Target must be an object.");
|
|
58
61
|
};
|
|
59
|
-
|
|
62
|
+
;
|
|
63
|
+
export let useBlob = (blob, chunk = 64n * 1024n) => {
|
|
60
64
|
let size = Number(chunk);
|
|
61
65
|
if (size <= 0 || !Number.isSafeInteger(size)) {
|
|
62
66
|
throw new RangeError("Chunk size must be a safe positive integer.");
|
|
@@ -64,7 +68,7 @@ export let blob = (blob, chunk = 64n * 1024n) => {
|
|
|
64
68
|
if (invalidate(blob)) {
|
|
65
69
|
throw new TypeError("Blob is invalid.");
|
|
66
70
|
}
|
|
67
|
-
return new
|
|
71
|
+
return new SynchronousSemantic((accept, interrupt) => {
|
|
68
72
|
try {
|
|
69
73
|
let index = 0n;
|
|
70
74
|
let stoppable = false;
|
|
@@ -122,174 +126,353 @@ export let blob = (blob, chunk = 64n * 1024n) => {
|
|
|
122
126
|
})();
|
|
123
127
|
}
|
|
124
128
|
catch (error) {
|
|
125
|
-
|
|
129
|
+
console.error(error);
|
|
126
130
|
}
|
|
127
131
|
});
|
|
128
132
|
};
|
|
129
|
-
export let empty = () => {
|
|
130
|
-
return new Semantic(() => { });
|
|
131
|
-
};
|
|
132
133
|
;
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
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);
|
|
144
150
|
}
|
|
145
|
-
|
|
151
|
+
timeOut = setTimeout(() => {
|
|
152
|
+
if (interrupt(event, index)) {
|
|
153
|
+
window.document.removeEventListener(key, listener);
|
|
154
|
+
resolve();
|
|
155
|
+
return;
|
|
156
|
+
}
|
|
146
157
|
accept(event, index);
|
|
147
158
|
index++;
|
|
159
|
+
}, debounce);
|
|
160
|
+
return;
|
|
161
|
+
}
|
|
162
|
+
if (throttle > 0) {
|
|
163
|
+
let now = performance.now();
|
|
164
|
+
if (now - lastEmitTime < throttle) {
|
|
165
|
+
return;
|
|
148
166
|
}
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
}
|
|
155
|
-
});
|
|
156
|
-
}
|
|
157
|
-
if (isIterable(argument2)) {
|
|
158
|
-
let keys = argument2;
|
|
159
|
-
return new Semantic((accept, interrupt) => {
|
|
160
|
-
try {
|
|
161
|
-
let index = 0n;
|
|
162
|
-
for (let key of keys) {
|
|
163
|
-
if (isString(key)) {
|
|
164
|
-
let listener = (event) => {
|
|
165
|
-
if (interrupt(event, index)) {
|
|
166
|
-
target.removeEventListener(key, listener);
|
|
167
|
-
}
|
|
168
|
-
else {
|
|
169
|
-
accept(event, index);
|
|
170
|
-
index++;
|
|
171
|
-
}
|
|
172
|
-
};
|
|
173
|
-
target.addEventListener(key, listener);
|
|
167
|
+
lastEmitTime = now;
|
|
168
|
+
if (interrupt(event, index)) {
|
|
169
|
+
window.document.removeEventListener(key, listener);
|
|
170
|
+
resolve();
|
|
171
|
+
return;
|
|
174
172
|
}
|
|
173
|
+
accept(event, index);
|
|
174
|
+
index++;
|
|
175
|
+
return;
|
|
175
176
|
}
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
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);
|
|
179
230
|
}
|
|
180
231
|
});
|
|
181
|
-
|
|
232
|
+
await until;
|
|
233
|
+
});
|
|
182
234
|
}
|
|
183
|
-
|
|
184
|
-
|
|
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;
|
|
185
249
|
if (isString(argument2)) {
|
|
186
250
|
let key = argument2;
|
|
187
|
-
return new
|
|
188
|
-
|
|
189
|
-
|
|
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) => {
|
|
190
256
|
let listener = (event) => {
|
|
191
|
-
if (
|
|
192
|
-
|
|
257
|
+
if (debounce > 0) {
|
|
258
|
+
if (timeOut)
|
|
259
|
+
clearTimeout(timeOut);
|
|
260
|
+
timeOut = setTimeout(() => handle(event), debounce);
|
|
261
|
+
return;
|
|
193
262
|
}
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
263
|
+
if (throttle > 0) {
|
|
264
|
+
let now = performance.now();
|
|
265
|
+
if (now - lastEmit < throttle)
|
|
266
|
+
return;
|
|
267
|
+
lastEmit = now;
|
|
197
268
|
}
|
|
269
|
+
handle(event);
|
|
198
270
|
};
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
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;
|
|
204
285
|
});
|
|
205
286
|
}
|
|
206
287
|
if (isIterable(argument2)) {
|
|
207
|
-
let keys = argument2;
|
|
208
|
-
return new
|
|
209
|
-
|
|
210
|
-
|
|
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) => {
|
|
211
293
|
for (let key of keys) {
|
|
212
|
-
|
|
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)) {
|
|
213
323
|
let listener = (event) => {
|
|
214
324
|
if (interrupt(event, index)) {
|
|
215
|
-
|
|
325
|
+
element.removeEventListener(key, listener);
|
|
326
|
+
if (--active === 0) {
|
|
327
|
+
resolve();
|
|
328
|
+
}
|
|
329
|
+
return;
|
|
216
330
|
}
|
|
217
|
-
|
|
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
|
+
}
|
|
218
358
|
accept(event, index);
|
|
219
359
|
index++;
|
|
220
|
-
}
|
|
221
|
-
|
|
222
|
-
|
|
360
|
+
};
|
|
361
|
+
element.addEventListener(key, listener);
|
|
362
|
+
}
|
|
223
363
|
}
|
|
224
364
|
}
|
|
225
|
-
}
|
|
226
|
-
|
|
227
|
-
throw new Error("Uncaught error as creating event semantic.");
|
|
228
|
-
}
|
|
365
|
+
});
|
|
366
|
+
await until;
|
|
229
367
|
});
|
|
230
368
|
}
|
|
231
369
|
}
|
|
232
370
|
if (isIterable(argument1)) {
|
|
233
|
-
let
|
|
371
|
+
let elementsOrSelectors = new Set(argument1);
|
|
234
372
|
if (isString(argument2)) {
|
|
235
373
|
let key = argument2;
|
|
236
|
-
return new
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
for (let
|
|
240
|
-
if (
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
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
|
+
}
|
|
247
410
|
}
|
|
248
|
-
}
|
|
249
|
-
target.addEventListener(key, listener);
|
|
411
|
+
}
|
|
250
412
|
}
|
|
251
413
|
}
|
|
252
|
-
}
|
|
253
|
-
|
|
254
|
-
throw new Error("Uncaught error as creating event semantic.");
|
|
255
|
-
}
|
|
414
|
+
});
|
|
415
|
+
await until;
|
|
256
416
|
});
|
|
257
417
|
}
|
|
258
418
|
if (isIterable(argument2)) {
|
|
259
|
-
let keys = argument2;
|
|
260
|
-
return new
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
for (let
|
|
264
|
-
if (
|
|
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;
|
|
265
426
|
for (let key of keys) {
|
|
266
427
|
if (isString(key)) {
|
|
267
428
|
let listener = (event) => {
|
|
268
|
-
if (interrupt(event,
|
|
269
|
-
|
|
429
|
+
if (interrupt(event, 0n)) {
|
|
430
|
+
element.removeEventListener(key, listener);
|
|
431
|
+
if (--active === 0) {
|
|
432
|
+
resolve();
|
|
433
|
+
}
|
|
434
|
+
return;
|
|
270
435
|
}
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
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;
|
|
274
454
|
}
|
|
455
|
+
accept(event, 0n);
|
|
275
456
|
};
|
|
276
|
-
|
|
457
|
+
element.addEventListener(key, listener);
|
|
277
458
|
}
|
|
278
459
|
}
|
|
279
460
|
}
|
|
280
461
|
}
|
|
281
|
-
}
|
|
282
|
-
|
|
283
|
-
throw new Error("Uncaught error as creating event semantic.");
|
|
284
|
-
}
|
|
462
|
+
});
|
|
463
|
+
await until;
|
|
285
464
|
});
|
|
286
465
|
}
|
|
287
466
|
}
|
|
288
467
|
throw new TypeError("Invalid arguments.");
|
|
289
468
|
};
|
|
290
|
-
export let
|
|
469
|
+
export let useEmpty = () => {
|
|
470
|
+
return new SynchronousSemantic(() => { });
|
|
471
|
+
};
|
|
472
|
+
;
|
|
473
|
+
export let useFill = (element, count) => {
|
|
291
474
|
if (validate(element) && count > 0n) {
|
|
292
|
-
return new
|
|
475
|
+
return new SynchronousSemantic((accept, interrupt) => {
|
|
293
476
|
try {
|
|
294
477
|
for (let i = 0n; i < count; i++) {
|
|
295
478
|
let item = isFunction(element) ? element() : element;
|
|
@@ -300,16 +483,16 @@ export let fill = (element, count) => {
|
|
|
300
483
|
}
|
|
301
484
|
}
|
|
302
485
|
catch (error) {
|
|
303
|
-
|
|
486
|
+
console.error(error);
|
|
304
487
|
}
|
|
305
488
|
});
|
|
306
489
|
}
|
|
307
490
|
throw new TypeError("Invalid arguments.");
|
|
308
491
|
};
|
|
309
492
|
;
|
|
310
|
-
export let
|
|
493
|
+
export let useFrom = (iterable) => {
|
|
311
494
|
if (isIterable(iterable)) {
|
|
312
|
-
return new
|
|
495
|
+
return new SynchronousSemantic((accept, interrupt) => {
|
|
313
496
|
try {
|
|
314
497
|
let index = 0n;
|
|
315
498
|
for (let element of iterable) {
|
|
@@ -321,12 +504,12 @@ export let from = (iterable) => {
|
|
|
321
504
|
}
|
|
322
505
|
}
|
|
323
506
|
catch (error) {
|
|
324
|
-
|
|
507
|
+
console.error(error);
|
|
325
508
|
}
|
|
326
509
|
});
|
|
327
510
|
}
|
|
328
511
|
else if (isAsyncIterable(iterable)) {
|
|
329
|
-
return new
|
|
512
|
+
return new SynchronousSemantic(async (accept, interrupt) => {
|
|
330
513
|
try {
|
|
331
514
|
let index = 0n;
|
|
332
515
|
for await (let element of iterable) {
|
|
@@ -338,15 +521,16 @@ export let from = (iterable) => {
|
|
|
338
521
|
}
|
|
339
522
|
}
|
|
340
523
|
catch (error) {
|
|
341
|
-
|
|
524
|
+
console.error(error);
|
|
342
525
|
}
|
|
343
526
|
});
|
|
344
527
|
}
|
|
345
528
|
throw new TypeError("Invalid arguments");
|
|
346
529
|
};
|
|
347
|
-
|
|
530
|
+
;
|
|
531
|
+
export let useGenerate = (supplier, interrupt) => {
|
|
348
532
|
if (isFunction(supplier) && isFunction(interrupt)) {
|
|
349
|
-
return new
|
|
533
|
+
return new SynchronousSemantic((accept, interrupt) => {
|
|
350
534
|
try {
|
|
351
535
|
let index = 0n;
|
|
352
536
|
while (true) {
|
|
@@ -359,15 +543,16 @@ export let generate = (supplier, interrupt) => {
|
|
|
359
543
|
}
|
|
360
544
|
}
|
|
361
545
|
catch (error) {
|
|
362
|
-
|
|
546
|
+
console.error(error);
|
|
363
547
|
}
|
|
364
548
|
});
|
|
365
549
|
}
|
|
366
550
|
throw new TypeError("Invalid arguments");
|
|
367
551
|
};
|
|
368
|
-
|
|
552
|
+
;
|
|
553
|
+
export let useInterval = (period, delay = 0) => {
|
|
369
554
|
if (period > 0 && delay >= 0) {
|
|
370
|
-
return new
|
|
555
|
+
return new SynchronousSemantic((accept, interrupt) => {
|
|
371
556
|
try {
|
|
372
557
|
if (delay > 0) {
|
|
373
558
|
setTimeout(() => {
|
|
@@ -397,26 +582,26 @@ export let interval = (period, delay = 0) => {
|
|
|
397
582
|
}
|
|
398
583
|
}
|
|
399
584
|
catch (error) {
|
|
400
|
-
|
|
585
|
+
console.error(error);
|
|
401
586
|
}
|
|
402
587
|
});
|
|
403
588
|
}
|
|
404
589
|
throw new TypeError("Invalid arguments.");
|
|
405
590
|
};
|
|
406
|
-
export let
|
|
591
|
+
export let useIterate = (generator) => {
|
|
407
592
|
if (isFunction(generator)) {
|
|
408
593
|
try {
|
|
409
|
-
return new
|
|
594
|
+
return new SynchronousSemantic(generator);
|
|
410
595
|
}
|
|
411
596
|
catch (error) {
|
|
412
|
-
|
|
597
|
+
console.error(error);
|
|
413
598
|
}
|
|
414
599
|
}
|
|
415
600
|
throw new TypeError("Invalid arguments.");
|
|
416
601
|
};
|
|
417
|
-
export let
|
|
602
|
+
export let usePromise = (promise) => {
|
|
418
603
|
if (isPromise(promise)) {
|
|
419
|
-
return new
|
|
604
|
+
return new SynchronousSemantic((accept, interrupt) => {
|
|
420
605
|
try {
|
|
421
606
|
promise.then((value) => {
|
|
422
607
|
if (interrupt(value, 0n)) {
|
|
@@ -428,7 +613,7 @@ export let promise = (promise) => {
|
|
|
428
613
|
});
|
|
429
614
|
}
|
|
430
615
|
catch (error) {
|
|
431
|
-
|
|
616
|
+
console.error(error);
|
|
432
617
|
}
|
|
433
618
|
});
|
|
434
619
|
}
|
|
@@ -436,77 +621,285 @@ export let promise = (promise) => {
|
|
|
436
621
|
throw new TypeError("Invalid arguments.");
|
|
437
622
|
}
|
|
438
623
|
};
|
|
439
|
-
|
|
624
|
+
;
|
|
625
|
+
export let useOf = (...target) => {
|
|
626
|
+
if (Array.isArray(target)) {
|
|
627
|
+
return new SynchronousSemantic((accept, interrupt) => {
|
|
628
|
+
try {
|
|
629
|
+
let index = 0n;
|
|
630
|
+
for (let element of target) {
|
|
631
|
+
if (interrupt(element, index)) {
|
|
632
|
+
break;
|
|
633
|
+
}
|
|
634
|
+
accept(element, index);
|
|
635
|
+
index++;
|
|
636
|
+
}
|
|
637
|
+
}
|
|
638
|
+
catch (error) {
|
|
639
|
+
console.error(error);
|
|
640
|
+
}
|
|
641
|
+
});
|
|
642
|
+
}
|
|
643
|
+
throw new TypeError("Invalid arguments.");
|
|
644
|
+
};
|
|
645
|
+
;
|
|
646
|
+
export let useRange = (start, end, step = (isNumber(start) && isNumber(end) ? 1 : 1n)) => {
|
|
440
647
|
if ((!isNumber(step) && !isBigInt(step)) || (isNumber(step) && useCompare(step, 0) === 0) || (isBigInt(step) && useCompare(step, 0n) === 0)) {
|
|
441
648
|
throw new TypeError("Step must be numeric and cannot be zero.");
|
|
442
649
|
}
|
|
443
650
|
if (isNumber(start) && isNumber(end)) {
|
|
444
|
-
let
|
|
445
|
-
|
|
446
|
-
|
|
651
|
+
let trusted = useToNumber(step);
|
|
652
|
+
return new SynchronousSemantic((accept, interrupt) => {
|
|
653
|
+
try {
|
|
654
|
+
let index = 0n;
|
|
655
|
+
for (let i = start; i < end; i += trusted) {
|
|
656
|
+
if (interrupt(i, index)) {
|
|
657
|
+
break;
|
|
658
|
+
}
|
|
659
|
+
accept(i, index);
|
|
660
|
+
index++;
|
|
661
|
+
}
|
|
662
|
+
}
|
|
663
|
+
catch (error) {
|
|
664
|
+
console.error(error);
|
|
665
|
+
}
|
|
666
|
+
});
|
|
667
|
+
}
|
|
668
|
+
else if (isBigInt(start) && isBigInt(end)) {
|
|
669
|
+
let trusted = useToBigInt(step);
|
|
670
|
+
return new SynchronousSemantic((accept, interrupt) => {
|
|
447
671
|
try {
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
if (interrupt(
|
|
672
|
+
let index = 0n;
|
|
673
|
+
for (let i = start; i < end; i += trusted) {
|
|
674
|
+
if (interrupt(i, index)) {
|
|
451
675
|
break;
|
|
452
676
|
}
|
|
453
|
-
accept(
|
|
677
|
+
accept(i, index);
|
|
678
|
+
index++;
|
|
454
679
|
}
|
|
455
680
|
}
|
|
456
681
|
catch (error) {
|
|
457
|
-
|
|
682
|
+
console.error(error);
|
|
458
683
|
}
|
|
459
684
|
});
|
|
460
685
|
}
|
|
461
686
|
throw new TypeError("Invalid arguments.");
|
|
462
687
|
};
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
688
|
+
;
|
|
689
|
+
;
|
|
690
|
+
export let useWebSocket = (argument1, argument2, argument3) => {
|
|
691
|
+
let debounce = 0;
|
|
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;
|
|
466
696
|
}
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
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;
|
|
703
|
+
if (isString(argument2)) {
|
|
704
|
+
let key = argument1;
|
|
705
|
+
return new AsynchronousSemantic(async (accept, interrupt) => {
|
|
706
|
+
let timeOut = null;
|
|
707
|
+
let lastEmitTime = 0;
|
|
708
|
+
let index = 0n;
|
|
709
|
+
let until = new Promise(resolve => {
|
|
710
|
+
let listener = (event) => {
|
|
711
|
+
if (debounce > 0) {
|
|
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;
|
|
746
|
+
}
|
|
747
|
+
accept(event, index);
|
|
748
|
+
index++;
|
|
749
|
+
};
|
|
750
|
+
websocket.addEventListener(key, listener);
|
|
751
|
+
});
|
|
752
|
+
await until;
|
|
479
753
|
});
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
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);
|
|
794
|
+
}
|
|
795
|
+
});
|
|
796
|
+
await until;
|
|
488
797
|
});
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
798
|
+
}
|
|
799
|
+
}
|
|
800
|
+
throw new TypeError("Invalid arguments.");
|
|
801
|
+
};
|
|
802
|
+
export let useWindow = (argument1, argument2 = {}) => {
|
|
803
|
+
let options = argument2;
|
|
804
|
+
let debounce = isObject(options) && isNumber(options.debounce) ? options.debounce : 0;
|
|
805
|
+
let throttle = isObject(options) && isNumber(options.throttle) ? options.throttle : 0;
|
|
806
|
+
if (isString(argument1)) {
|
|
807
|
+
let key = argument1;
|
|
808
|
+
return new AsynchronousSemantic(async (accept, interrupt) => {
|
|
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;
|
|
839
|
+
}
|
|
840
|
+
accept(event, index);
|
|
841
|
+
index++;
|
|
842
|
+
return;
|
|
843
|
+
}
|
|
844
|
+
if (interrupt(event, index)) {
|
|
845
|
+
window.removeEventListener(key, listener);
|
|
846
|
+
resolve();
|
|
847
|
+
accept(event, -1n);
|
|
848
|
+
return;
|
|
849
|
+
}
|
|
494
850
|
accept(event, index);
|
|
495
851
|
index++;
|
|
496
|
-
}
|
|
852
|
+
};
|
|
853
|
+
window.addEventListener(key, listener);
|
|
497
854
|
});
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
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;
|
|
892
|
+
}
|
|
893
|
+
accept(event, index);
|
|
894
|
+
index++;
|
|
895
|
+
};
|
|
896
|
+
window.addEventListener(key, listener);
|
|
505
897
|
}
|
|
506
898
|
});
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
});
|
|
899
|
+
await until;
|
|
900
|
+
});
|
|
901
|
+
}
|
|
902
|
+
throw new TypeError("Invalid arguments.");
|
|
512
903
|
};
|
|
904
|
+
export let useNullable = (target) => Optional.ofNullable(target);
|
|
905
|
+
export let useNonNull = (target) => Optional.ofNonNull(target);
|