@juulsgaard/signal-tools 18.0.0 → 18.0.2

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.
Files changed (33) hide show
  1. package/dist/async.mjs +96 -0
  2. package/dist/data-structures/signal-map.mjs +134 -0
  3. package/dist/data-structures/signal-queue.js +115 -0
  4. package/dist/data-structures/signal-queue.mjs +115 -0
  5. package/dist/data-structures/signal-set.mjs +143 -0
  6. package/dist/data-structures/signal-stack.js +90 -0
  7. package/dist/data-structures/signal-stack.mjs +90 -0
  8. package/dist/index.d.ts +564 -62
  9. package/dist/index.js +12 -1
  10. package/dist/index.mjs +16 -0
  11. package/dist/interop.mjs +11 -0
  12. package/dist/loading-signal.mjs +68 -0
  13. package/dist/operators.js +13 -0
  14. package/dist/operators.mjs +13 -0
  15. package/dist/request-state/async-request-state.js +48 -0
  16. package/dist/request-state/async-request-state.mjs +48 -0
  17. package/dist/request-state/constructors.js +25 -0
  18. package/dist/request-state/constructors.mjs +25 -0
  19. package/dist/request-state/empty-request-state.js +20 -0
  20. package/dist/request-state/empty-request-state.mjs +20 -0
  21. package/dist/request-state/error-request-state.js +20 -0
  22. package/dist/request-state/error-request-state.mjs +20 -0
  23. package/dist/request-state/loading-request-state.js +25 -0
  24. package/dist/request-state/loading-request-state.mjs +25 -0
  25. package/dist/request-state/request-state.js +39 -0
  26. package/dist/request-state/request-state.mjs +39 -0
  27. package/dist/request-state/request-tracker.js +64 -0
  28. package/dist/request-state/request-tracker.mjs +64 -0
  29. package/dist/request-state/static-request-state.js +32 -0
  30. package/dist/request-state/static-request-state.mjs +32 -0
  31. package/dist/request-state/writable-request-state.js +75 -0
  32. package/dist/request-state/writable-request-state.mjs +75 -0
  33. package/package.json +12 -11
@@ -0,0 +1,90 @@
1
+ import { signal, computed, untracked } from '@angular/core';
2
+ import { pairwiseSignal } from '../operators.mjs';
3
+
4
+ class SignalStack {
5
+ constructor() {
6
+ this._items = signal([]);
7
+ /** A signal containing the items of the stack from bottom to top */
8
+ this.items = this._items.asReadonly();
9
+ /** A signal emitting the number of items in the stack */
10
+ this.length = computed(() => this.items().length);
11
+ /** A signal emitting true if there are no items in the stack */
12
+ this.empty = computed(() => this.length() <= 0);
13
+ this.top = computed(() => this.items().at(-1));
14
+ this.bottom = computed(() => this.items().at(0));
15
+ const delta = pairwiseSignal(this.items, []);
16
+ this.topDelta = computed(() => {
17
+ const [prev, next] = delta();
18
+ const item = next.at(-1);
19
+ return { item, added: !item ? false : !prev.includes(item) };
20
+ }, { equal: (a, b) => a.item === b.item });
21
+ this.bottomDelta = computed(() => {
22
+ const [prev, next] = delta();
23
+ const item = next.at(0);
24
+ return { item, added: !item ? false : !prev.includes(item) };
25
+ }, { equal: (a, b) => a.item === b.item });
26
+ }
27
+ //</editor-fold>
28
+ //<editor-fold desc="Actions">
29
+ /**
30
+ * Removes an item from the scheduler
31
+ * @param item
32
+ */
33
+ removeItem(item) {
34
+ const index = untracked(this.items).indexOf(item);
35
+ if (index < 0) return false;
36
+ const arr = [...untracked(this.items)];
37
+ arr.splice(index, 1);
38
+ this._items.set(arr);
39
+ return true;
40
+ }
41
+ removeFromBottom(count) {
42
+ if (count !== void 0) {
43
+ if (count < 1) return [];
44
+ if (!untracked(this.length)) return [];
45
+ const items = untracked(this.items).slice(0, count);
46
+ this._items.set(untracked(this.items).slice(count));
47
+ return items;
48
+ }
49
+ if (!untracked(this.length)) return void 0;
50
+ const item = untracked(this.items).at(0);
51
+ this._items.set(untracked(this.items).slice(1));
52
+ return item;
53
+ }
54
+ pop(count) {
55
+ if (count !== void 0) {
56
+ if (count < 1) return [];
57
+ if (!untracked(this.length)) return [];
58
+ const start = count * -1;
59
+ const items = untracked(this.items).slice(start);
60
+ this._items.set(untracked(this.items).slice(0, start));
61
+ return items;
62
+ }
63
+ if (!untracked(this.length)) return void 0;
64
+ const item = untracked(this.items).at(-1);
65
+ this._items.set(untracked(this.items).slice(0, -1));
66
+ return item;
67
+ }
68
+ push(...items) {
69
+ this._items.set([...untracked(this.items), ...items]);
70
+ }
71
+ addToBottom(...items) {
72
+ this._items.set([...items, ...untracked(this.items)]);
73
+ }
74
+ /**
75
+ * Checks if the item exists in the queue
76
+ * @param item
77
+ */
78
+ contains(item) {
79
+ return untracked(this.items).includes(item);
80
+ }
81
+ /**
82
+ * Remove all elements from the set
83
+ */
84
+ clear() {
85
+ this._items.set([]);
86
+ }
87
+ //</editor-fold>
88
+ }
89
+
90
+ export { SignalStack };