semantic-typescript 0.6.0 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/factory.js CHANGED
@@ -29,7 +29,7 @@ export let useAnimationFrame = (period, delay = 0) => {
29
29
  };
30
30
  }
31
31
  catch (error) {
32
- console.error(error);
32
+ throw error;
33
33
  }
34
34
  });
35
35
  };
@@ -53,7 +53,7 @@ export let useAttribute = (target) => {
53
53
  });
54
54
  }
55
55
  catch (error) {
56
- console.error(error);
56
+ throw error;
57
57
  }
58
58
  });
59
59
  }
@@ -115,7 +115,7 @@ export let useBlob = (blob, chunk = 64n * 1024n) => {
115
115
  }
116
116
  }
117
117
  catch (error) {
118
- console.error(error);
118
+ throw error;
119
119
  }
120
120
  finally {
121
121
  if (stoppable) {
@@ -126,7 +126,7 @@ export let useBlob = (blob, chunk = 64n * 1024n) => {
126
126
  })();
127
127
  }
128
128
  catch (error) {
129
- console.error(error);
129
+ throw error;
130
130
  }
131
131
  });
132
132
  };
@@ -195,6 +195,7 @@ export let useDocument = (argument1, argument2 = {}) => {
195
195
  let timeOut = null;
196
196
  let index = 0n;
197
197
  let activeCount = keys.size;
198
+ let listeners = new Map();
198
199
  let until = new Promise(resolve => {
199
200
  for (let key of keys) {
200
201
  if (!isString(key))
@@ -218,6 +219,10 @@ export let useDocument = (argument1, argument2 = {}) => {
218
219
  let handleEvent = (event, currentKey) => {
219
220
  if (interrupt(event, index)) {
220
221
  window.document.removeEventListener(currentKey, listener);
222
+ for (let [k, l] of listeners) {
223
+ window.document.removeEventListener(k, l);
224
+ }
225
+ listeners.clear();
221
226
  if (--activeCount === 0) {
222
227
  resolve();
223
228
  }
@@ -227,6 +232,7 @@ export let useDocument = (argument1, argument2 = {}) => {
227
232
  index++;
228
233
  };
229
234
  window.document.addEventListener(key, listener);
235
+ listeners.set(key, listener);
230
236
  }
231
237
  });
232
238
  await until;
@@ -255,8 +261,9 @@ export let useHTMLElement = (argument1, argument2, argument3 = {}) => {
255
261
  let until = new Promise((resolve) => {
256
262
  let listener = (event) => {
257
263
  if (debounce > 0) {
258
- if (timeOut)
264
+ if (timeOut) {
259
265
  clearTimeout(timeOut);
266
+ }
260
267
  timeOut = setTimeout(() => handle(event), debounce);
261
268
  return;
262
269
  }
@@ -271,8 +278,9 @@ export let useHTMLElement = (argument1, argument2, argument3 = {}) => {
271
278
  let handle = (event) => {
272
279
  if (interrupt(event, index)) {
273
280
  element.removeEventListener(key, listener);
274
- if (timeOut)
281
+ if (timeOut) {
275
282
  clearTimeout(timeOut);
283
+ }
276
284
  resolve();
277
285
  return;
278
286
  }
@@ -287,22 +295,25 @@ export let useHTMLElement = (argument1, argument2, argument3 = {}) => {
287
295
  if (isIterable(argument2)) {
288
296
  let keys = [...new Set(argument2)];
289
297
  return new AsynchronousSemantic(async (accept, interrupt) => {
290
- let active = keys.length;
291
298
  let index = 0n;
299
+ let listeners = new Map();
292
300
  let until = new Promise((resolve) => {
293
301
  for (let key of keys) {
294
302
  let listener = (event) => {
295
303
  if (interrupt(event, index)) {
296
304
  element.removeEventListener(key, listener);
297
- if (--active === 0) {
298
- resolve();
305
+ for (let [k, l] of listeners) {
306
+ element.removeEventListener(k, l);
299
307
  }
308
+ listeners.clear();
309
+ resolve();
300
310
  return;
301
311
  }
302
312
  accept(event, index);
303
313
  index++;
304
314
  };
305
315
  element.addEventListener(key, listener);
316
+ listeners.set(key, listener);
306
317
  }
307
318
  });
308
319
  await until;
@@ -315,23 +326,31 @@ export let useHTMLElement = (argument1, argument2, argument3 = {}) => {
315
326
  if (isString(argument2)) {
316
327
  let key = argument2;
317
328
  return new AsynchronousSemantic(async (accept, interrupt) => {
318
- let active = elements.length;
319
329
  let index = 0n;
330
+ let listeners = new WeakMap();
320
331
  let until = new Promise((resolve) => {
321
332
  for (let element of elements) {
322
333
  if (validate(element)) {
323
334
  let listener = (event) => {
324
335
  if (interrupt(event, index)) {
325
336
  element.removeEventListener(key, listener);
326
- if (--active === 0) {
327
- resolve();
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();
328
343
  }
344
+ resolve();
329
345
  return;
330
346
  }
331
347
  accept(event, index);
332
348
  index++;
333
349
  };
334
350
  element.addEventListener(key, listener);
351
+ let map = new Map() || new Map();
352
+ map.set(key, listener);
353
+ listeners.set(element, map);
335
354
  }
336
355
  }
337
356
  });
@@ -341,8 +360,8 @@ export let useHTMLElement = (argument1, argument2, argument3 = {}) => {
341
360
  if (isIterable(argument2)) {
342
361
  let keys = new Set(argument2);
343
362
  return new AsynchronousSemantic(async (accept, interrupt) => {
344
- let active = elements.length * keys.size;
345
363
  let index = 0n;
364
+ let listeners = new Map();
346
365
  let until = new Promise((resolve) => {
347
366
  for (let element of elements) {
348
367
  for (let key of keys) {
@@ -350,15 +369,18 @@ export let useHTMLElement = (argument1, argument2, argument3 = {}) => {
350
369
  let listener = (event) => {
351
370
  if (interrupt(event, index)) {
352
371
  element.removeEventListener(key, listener);
353
- if (--active === 0) {
354
- resolve();
372
+ for (let [k, l] of listeners) {
373
+ element.removeEventListener(k, l);
355
374
  }
375
+ listeners.clear();
376
+ resolve();
356
377
  return;
357
378
  }
358
379
  accept(event, index);
359
380
  index++;
360
381
  };
361
382
  element.addEventListener(key, listener);
383
+ listeners.set(key, listener);
362
384
  }
363
385
  }
364
386
  }
@@ -372,7 +394,7 @@ export let useHTMLElement = (argument1, argument2, argument3 = {}) => {
372
394
  if (isString(argument2)) {
373
395
  let key = argument2;
374
396
  return new AsynchronousSemantic(async (accept, interrupt) => {
375
- let active = elementsOrSelectors.size;
397
+ let listeners = new Map();
376
398
  let until = new Promise((resolve) => {
377
399
  for (let elementOrSelector of elementsOrSelectors) {
378
400
  if (validate(elementOrSelector)) {
@@ -381,14 +403,17 @@ export let useHTMLElement = (argument1, argument2, argument3 = {}) => {
381
403
  let listener = (event) => {
382
404
  if (interrupt(event, 0n)) {
383
405
  element.removeEventListener(key, listener);
384
- if (--active === 0) {
385
- resolve();
406
+ for (let [k, l] of listeners) {
407
+ element.removeEventListener(k, l);
386
408
  }
409
+ listeners.clear();
410
+ resolve();
387
411
  return;
388
412
  }
389
413
  accept(event, 0n);
390
414
  };
391
415
  element.addEventListener(key, listener);
416
+ listeners.set(key, listener);
392
417
  }
393
418
  else if (isString(elementOrSelector)) {
394
419
  let selector = elementOrSelector;
@@ -398,14 +423,17 @@ export let useHTMLElement = (argument1, argument2, argument3 = {}) => {
398
423
  let listener = (event) => {
399
424
  if (interrupt(event, 0n)) {
400
425
  element.removeEventListener(key, listener);
401
- if (--active === 0) {
402
- resolve();
426
+ for (let [k, l] of listeners) {
427
+ element.removeEventListener(k, l);
403
428
  }
429
+ listeners.clear();
430
+ resolve();
404
431
  return;
405
432
  }
406
433
  accept(event, 0n);
407
434
  };
408
435
  element.addEventListener(key, listener);
436
+ listeners.set(key, listener);
409
437
  }
410
438
  }
411
439
  }
@@ -418,7 +446,7 @@ export let useHTMLElement = (argument1, argument2, argument3 = {}) => {
418
446
  if (isIterable(argument2)) {
419
447
  let keys = new Set(argument2);
420
448
  return new AsynchronousSemantic(async (accept, interrupt) => {
421
- let active = elementsOrSelectors.size * keys.size;
449
+ let listeners = new Map();
422
450
  let until = new Promise((resolve) => {
423
451
  for (let elementOrSelector of elementsOrSelectors) {
424
452
  if (isHTMLElemet(elementOrSelector)) {
@@ -428,14 +456,17 @@ export let useHTMLElement = (argument1, argument2, argument3 = {}) => {
428
456
  let listener = (event) => {
429
457
  if (interrupt(event, 0n)) {
430
458
  element.removeEventListener(key, listener);
431
- if (--active === 0) {
432
- resolve();
459
+ for (let [k, l] of listeners) {
460
+ element.removeEventListener(k, l);
433
461
  }
462
+ listeners.clear();
463
+ resolve();
434
464
  return;
435
465
  }
436
466
  accept(event, 0n);
437
467
  };
438
468
  element.addEventListener(key, listener);
469
+ listeners.set(key, listener);
439
470
  }
440
471
  }
441
472
  }
@@ -447,14 +478,17 @@ export let useHTMLElement = (argument1, argument2, argument3 = {}) => {
447
478
  let listener = (event) => {
448
479
  if (interrupt(event, 0n)) {
449
480
  element.removeEventListener(key, listener);
450
- if (--active === 0) {
451
- resolve();
481
+ for (let [k, l] of listeners) {
482
+ element.removeEventListener(k, l);
452
483
  }
484
+ listeners.clear();
485
+ resolve();
453
486
  return;
454
487
  }
455
488
  accept(event, 0n);
456
489
  };
457
490
  element.addEventListener(key, listener);
491
+ listeners.set(key, listener);
458
492
  }
459
493
  }
460
494
  }
@@ -483,7 +517,7 @@ export let useFill = (element, count) => {
483
517
  }
484
518
  }
485
519
  catch (error) {
486
- console.error(error);
520
+ throw error;
487
521
  }
488
522
  });
489
523
  }
@@ -504,7 +538,7 @@ export let useFrom = (iterable) => {
504
538
  }
505
539
  }
506
540
  catch (error) {
507
- console.error(error);
541
+ throw error;
508
542
  }
509
543
  });
510
544
  }
@@ -521,7 +555,7 @@ export let useFrom = (iterable) => {
521
555
  }
522
556
  }
523
557
  catch (error) {
524
- console.error(error);
558
+ throw error;
525
559
  }
526
560
  });
527
561
  }
@@ -543,7 +577,7 @@ export let useGenerate = (supplier, interrupt) => {
543
577
  }
544
578
  }
545
579
  catch (error) {
546
- console.error(error);
580
+ throw error;
547
581
  }
548
582
  });
549
583
  }
@@ -582,7 +616,7 @@ export let useInterval = (period, delay = 0) => {
582
616
  }
583
617
  }
584
618
  catch (error) {
585
- console.error(error);
619
+ throw error;
586
620
  }
587
621
  });
588
622
  }
@@ -594,7 +628,7 @@ export let useIterate = (generator) => {
594
628
  return new SynchronousSemantic(generator);
595
629
  }
596
630
  catch (error) {
597
- console.error(error);
631
+ throw error;
598
632
  }
599
633
  }
600
634
  throw new TypeError("Invalid arguments.");
@@ -609,11 +643,11 @@ export let usePromise = (promise) => {
609
643
  }
610
644
  accept(value, 0n);
611
645
  }).catch((error) => {
612
- console.error(error);
646
+ throw error;
613
647
  });
614
648
  }
615
649
  catch (error) {
616
- console.error(error);
650
+ throw error;
617
651
  }
618
652
  });
619
653
  }
@@ -636,7 +670,7 @@ export let useOf = (...target) => {
636
670
  }
637
671
  }
638
672
  catch (error) {
639
- console.error(error);
673
+ throw error;
640
674
  }
641
675
  });
642
676
  }
@@ -661,7 +695,7 @@ export let useRange = (start, end, step = (isNumber(start) && isNumber(end) ? 1
661
695
  }
662
696
  }
663
697
  catch (error) {
664
- console.error(error);
698
+ throw error;
665
699
  }
666
700
  });
667
701
  }
@@ -679,13 +713,49 @@ export let useRange = (start, end, step = (isNumber(start) && isNumber(end) ? 1
679
713
  }
680
714
  }
681
715
  catch (error) {
682
- console.error(error);
716
+ throw error;
683
717
  }
684
718
  });
685
719
  }
686
720
  throw new TypeError("Invalid arguments.");
687
721
  };
688
722
  ;
723
+ export let useText = (argument1, argument2, argument3) => {
724
+ if (isString(argument1)) {
725
+ if (isNumber(argument2) || isBigInt(argument2)) {
726
+ let start = useToNumber(argument2);
727
+ if (isNumber(argument3) || isBigInt(argument3)) {
728
+ let end = useToNumber(argument3);
729
+ let characters = [...(argument1.substring(start, end))];
730
+ return new SynchronousSemantic((accept, interrupt) => {
731
+ let index = 0n;
732
+ for (let character of characters) {
733
+ if (interrupt(character, index)) {
734
+ break;
735
+ }
736
+ accept(character, index);
737
+ index++;
738
+ }
739
+ });
740
+ }
741
+ else {
742
+ let characters = [...(argument1.substring(start))];
743
+ return new SynchronousSemantic((accept, interrupt) => {
744
+ let index = 0n;
745
+ for (let character of characters) {
746
+ if (interrupt(character, index)) {
747
+ break;
748
+ }
749
+ accept(character, index);
750
+ index++;
751
+ }
752
+ });
753
+ }
754
+ }
755
+ }
756
+ throw new TypeError("Invalid arguments.");
757
+ };
758
+ ;
689
759
  ;
690
760
  export let useWebSocket = (argument1, argument2, argument3) => {
691
761
  let debounce = 0;
@@ -862,6 +932,7 @@ export let useWindow = (argument1, argument2 = {}) => {
862
932
  let timeOut = null;
863
933
  let index = 0n;
864
934
  let activeCount = keys.size;
935
+ let listeners = new Map();
865
936
  let until = new Promise(resolve => {
866
937
  for (let key of keys) {
867
938
  if (!isString(key))
@@ -885,6 +956,10 @@ export let useWindow = (argument1, argument2 = {}) => {
885
956
  let handleEvent = (event, currentKey) => {
886
957
  if (interrupt(event, index)) {
887
958
  window.removeEventListener(currentKey, listener);
959
+ for (let [k, l] of listeners) {
960
+ window.removeEventListener(k, l);
961
+ }
962
+ listeners.clear();
888
963
  if (--activeCount === 0) {
889
964
  resolve();
890
965
  }
@@ -894,6 +969,7 @@ export let useWindow = (argument1, argument2 = {}) => {
894
969
  index++;
895
970
  };
896
971
  window.addEventListener(key, listener);
972
+ listeners.set(key, listener);
897
973
  }
898
974
  });
899
975
  await until;
package/dist/hook.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { type DeepPropertyKey, type DeepPropertyValue } from "./utility";
2
- import type { Comparator, SynchronousGenerator } from "./utility";
2
+ import type { BiFunctional, Comparator, SynchronousGenerator } from "./utility";
3
3
  export declare let useCompare: <T>(t1: T, t2: T) => number;
4
4
  interface UseRandom {
5
5
  <N extends number | bigint>(start: N): N extends number ? number : (N extends bigint ? bigint : never);
@@ -30,4 +30,9 @@ interface UseArrange {
30
30
  export declare let useArrange: UseArrange;
31
31
  export declare let useToNumber: <T = unknown>(target: T) => number;
32
32
  export declare let useToBigInt: <T = unknown>(target: T) => bigint;
33
+ interface UseStringify {
34
+ <T extends object>(target: T): string;
35
+ <T extends object, K extends DeepPropertyKey<T>, V extends DeepPropertyValue<T>>(target: T, callback: BiFunctional<K, V, string>): string;
36
+ }
37
+ export declare let useStringify: UseStringify;
33
38
  export {};
package/dist/hook.js CHANGED
@@ -246,7 +246,7 @@ export let useToNumber = (target) => {
246
246
  return 0;
247
247
  }
248
248
  if (Reflect.has(target, Symbol.toPrimitive)) {
249
- let resolved = Reflect.apply(Reflect.get(target, Symbol.toPrimitive), target, ["default"]);
249
+ let resolved = Reflect.apply(Reflect.get(target, Symbol.toPrimitive), target, ["number"]);
250
250
  return isNumber(resolved) ? resolved : 0;
251
251
  }
252
252
  return 0;
@@ -257,7 +257,7 @@ export let useToNumber = (target) => {
257
257
  export let useToBigInt = (target) => {
258
258
  switch (typeof target) {
259
259
  case "number":
260
- return isNumber(target) ? BigInt(target) : 0n;
260
+ return isNumber(target) ? BigInt(Math.floor(target)) : 0n;
261
261
  case "boolean":
262
262
  return target ? 1n : 0n;
263
263
  case "string":
@@ -270,7 +270,7 @@ export let useToBigInt = (target) => {
270
270
  return 0n;
271
271
  }
272
272
  if (Reflect.has(target, Symbol.toPrimitive)) {
273
- let resolved = Reflect.apply(Reflect.get(target, Symbol.toPrimitive), target, ["default"]);
273
+ let resolved = Reflect.apply(Reflect.get(target, Symbol.toPrimitive), target, ["bigint"]);
274
274
  return isBigInt(resolved) ? resolved : 0n;
275
275
  }
276
276
  return 0n;
@@ -278,3 +278,20 @@ export let useToBigInt = (target) => {
278
278
  return 0n;
279
279
  }
280
280
  };
281
+ ;
282
+ export let useStringify = (target, callback) => {
283
+ let seen = new WeakSet();
284
+ let resolve = isFunction(callback) ? callback : (_key, value) => {
285
+ return JSON.stringify(value);
286
+ };
287
+ return JSON.stringify(target, (key, value) => {
288
+ if (isObject(value)) {
289
+ if (seen.has(value)) {
290
+ return (void 0);
291
+ }
292
+ seen.add(value);
293
+ return resolve(key, value);
294
+ }
295
+ return resolve(key, value);
296
+ });
297
+ };
package/dist/main.d.ts ADDED
@@ -0,0 +1 @@
1
+ export {};
package/dist/main.js ADDED
@@ -0,0 +1,6 @@
1
+ import { useHTMLElement } from "./factory";
2
+ let input = document.createElement("input");
3
+ input.type = "text";
4
+ input.placeholder = "Enter your name";
5
+ document.body.appendChild(input);
6
+ useHTMLElement(input, ["click", "change"]).peek(console.log).limit(5).toUnordered().log();
@@ -1,5 +1,5 @@
1
1
  import { Optional } from "../optional";
2
- import type { Supplier, Predicate, BiPredicate, TriPredicate, BiFunctional, TriFunctional, Functional, SynchronousGenerator, Comparator, Consumer, BiConsumer } from "../utility";
2
+ import type { BiFunctional, BiPredicate, Functional, Predicate, Supplier, TriFunctional, TriPredicate, Consumer, BiConsumer, Comparator, SynchronousGenerator } from "../utility";
3
3
  export declare class SynchronousCollector<E, A, R> {
4
4
  protected identity: Supplier<A>;
5
5
  protected interrupt: Predicate<E> | BiPredicate<E, bigint> | TriPredicate<E, bigint, A>;
@@ -14,6 +14,10 @@ export declare class SynchronousCollector<E, A, R> {
14
14
  collect(iterable: Iterable<E>): R;
15
15
  collect(start: number, end: number): R;
16
16
  collect(start: bigint, end: bigint): R;
17
+ getIdentity(): Supplier<A>;
18
+ getInterrupt(): Predicate<E> | BiPredicate<E, bigint> | TriPredicate<E, bigint, A>;
19
+ getAccumulator(): BiFunctional<A, E, A> | TriFunctional<A, E, bigint, A>;
20
+ getFinisher(): Functional<A, R>;
17
21
  static full<E, A, R>(identity: Supplier<A>, accumulator: BiFunctional<A, E, A>, finisher: Functional<A, R>): SynchronousCollector<E, A, R>;
18
22
  static full<E, A, R>(identity: Supplier<A>, accumulator: TriFunctional<A, E, bigint, A>, finisher: Functional<A, R>): SynchronousCollector<E, A, R>;
19
23
  static shortable<E, A, R>(identity: Supplier<A>, interrupt: Predicate<E>, accumulator: BiFunctional<A, E, A>, finisher: Functional<A, R>): SynchronousCollector<E, A, R>;
@@ -140,17 +144,17 @@ interface UseSynchronousWrite {
140
144
  export declare let useSynchronousWrite: UseSynchronousWrite;
141
145
  interface UseSynchronousNumericSummate {
142
146
  <E>(): SynchronousCollector<E, number, number>;
143
- <E>(mapper: Functional<E, number>): SynchronousCollector<E, number, number>;
147
+ <E>(mapper: Functional<E, number>): SynchronousCollector<number, number, number>;
144
148
  }
145
149
  export declare let useSynchronousNumericSummate: UseSynchronousNumericSummate;
146
150
  interface UseSynchronousBigIntSummate {
147
151
  <E>(): SynchronousCollector<E, bigint, bigint>;
148
- <E>(mapper: Functional<E, bigint>): SynchronousCollector<E, bigint, bigint>;
152
+ <E>(mapper: Functional<E, bigint>): SynchronousCollector<bigint, bigint, bigint>;
149
153
  }
150
154
  export declare let useSynchronousBigIntSummate: UseSynchronousBigIntSummate;
151
155
  interface UseSynchronousNumericAverage {
152
156
  <E>(): SynchronousCollector<E, NumericAverageAccumulator, number>;
153
- <E>(mapper: Functional<E, number>): SynchronousCollector<E, NumericAverageAccumulator, number>;
157
+ <E>(mapper: Functional<E, number>): SynchronousCollector<number, NumericAverageAccumulator, number>;
154
158
  }
155
159
  interface NumericAverageAccumulator {
156
160
  summate: number;