@panyam/tsutils 0.0.65 → 0.0.67
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/lib/cjs/apis/evapis.js +1 -1
- package/lib/cjs/apis/evapis.js.map +1 -1
- package/lib/cjs/apis/index.js +5 -1
- package/lib/cjs/apis/index.js.map +1 -1
- package/lib/cjs/apis/net.js.map +1 -1
- package/lib/cjs/comms/actors.js +5 -5
- package/lib/cjs/comms/actors.js.map +1 -1
- package/lib/cjs/comms/bus.d.ts +1 -2
- package/lib/cjs/comms/bus.js.map +1 -1
- package/lib/cjs/comms/events.d.ts +1 -1
- package/lib/cjs/comms/events.js.map +1 -1
- package/lib/cjs/decorators.js +1 -2
- package/lib/cjs/decorators.js.map +1 -1
- package/lib/cjs/dom.js +22 -19
- package/lib/cjs/dom.js.map +1 -1
- package/lib/cjs/geom.js.map +1 -1
- package/lib/cjs/index.d.ts +2 -0
- package/lib/cjs/index.js +9 -2
- package/lib/cjs/index.js.map +1 -1
- package/lib/cjs/list.js.map +1 -1
- package/lib/cjs/misc.js +8 -8
- package/lib/cjs/misc.js.map +1 -1
- package/lib/cjs/numberutils.js +3 -3
- package/lib/cjs/numberutils.js.map +1 -1
- package/lib/cjs/scrolling.d.ts +38 -0
- package/lib/cjs/scrolling.js +140 -0
- package/lib/cjs/scrolling.js.map +1 -0
- package/lib/cjs/streams.js +5 -6
- package/lib/cjs/streams.js.map +1 -1
- package/lib/cjs/timer.d.ts +12 -0
- package/lib/cjs/timer.js +45 -0
- package/lib/cjs/timer.js.map +1 -0
- package/lib/cjs/timeutils.js +7 -7
- package/lib/cjs/timeutils.js.map +1 -1
- package/lib/cjs/types.d.ts +6 -6
- package/lib/cjs/types.js +1 -2
- package/lib/cjs/types.js.map +1 -1
- package/lib/esm/apis/net.js.map +1 -1
- package/lib/esm/comms/actors.js.map +1 -1
- package/lib/esm/comms/bus.d.ts +1 -2
- package/lib/esm/comms/bus.js.map +1 -1
- package/lib/esm/comms/events.d.ts +1 -1
- package/lib/esm/comms/events.js.map +1 -1
- package/lib/esm/dom.js.map +1 -1
- package/lib/esm/geom.js.map +1 -1
- package/lib/esm/index.d.ts +2 -0
- package/lib/esm/index.js +3 -0
- package/lib/esm/index.js.map +1 -1
- package/lib/esm/list.js.map +1 -1
- package/lib/esm/misc.js.map +1 -1
- package/lib/esm/numberutils.js.map +1 -1
- package/lib/esm/scrolling.d.ts +38 -0
- package/lib/esm/scrolling.js +135 -0
- package/lib/esm/scrolling.js.map +1 -0
- package/lib/esm/streams.js.map +1 -1
- package/lib/esm/timer.d.ts +12 -0
- package/lib/esm/timer.js +41 -0
- package/lib/esm/timer.js.map +1 -0
- package/lib/esm/timeutils.js.map +1 -1
- package/lib/esm/types.d.ts +6 -6
- package/lib/esm/types.js.map +1 -1
- package/package.json +32 -32
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
export class ScrollGroup {
|
|
2
|
+
constructor(debugLogs = false) {
|
|
3
|
+
this.debugLogs = debugLogs;
|
|
4
|
+
this.scrollables = [];
|
|
5
|
+
this.isScrolling = false;
|
|
6
|
+
this._focussedScrollable = null;
|
|
7
|
+
}
|
|
8
|
+
add(scrollable) {
|
|
9
|
+
const index = this.scrollables.indexOf(scrollable);
|
|
10
|
+
if (index >= 0)
|
|
11
|
+
return;
|
|
12
|
+
scrollable.attach(this);
|
|
13
|
+
this.scrollables.push(scrollable);
|
|
14
|
+
}
|
|
15
|
+
remove(scrollable) {
|
|
16
|
+
const index = this.scrollables.indexOf(scrollable);
|
|
17
|
+
if (index < 0)
|
|
18
|
+
return;
|
|
19
|
+
this.detachAtIndex(index);
|
|
20
|
+
}
|
|
21
|
+
clear() {
|
|
22
|
+
for (let i = this.scrollables.length - 1; i >= 0; i--) {
|
|
23
|
+
this.detachAtIndex(i);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
detachAtIndex(index) {
|
|
27
|
+
const scrollable = this.scrollables[index];
|
|
28
|
+
scrollable.detach();
|
|
29
|
+
this.scrollables.splice(index, 1);
|
|
30
|
+
return scrollable;
|
|
31
|
+
}
|
|
32
|
+
syncFollowersToLeader(source) {
|
|
33
|
+
if (this.isScrolling)
|
|
34
|
+
return;
|
|
35
|
+
this.isScrolling = true;
|
|
36
|
+
const remScroll = Math.max(1, source.scrollSize - source.pageSize);
|
|
37
|
+
const scrollPct = source.scrollOffset / remScroll;
|
|
38
|
+
for (let i = this.scrollables.length - 1; i >= 0; i--) {
|
|
39
|
+
const other = this.scrollables[i];
|
|
40
|
+
if (other != source) {
|
|
41
|
+
other.scrollOffset = scrollPct * (other.scrollSize - other.pageSize);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
setTimeout(() => { this.isScrolling = true; }, 50);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
export class HTMLElementScrollable {
|
|
48
|
+
constructor(element, vertical = true) {
|
|
49
|
+
this._scrollGroup = null;
|
|
50
|
+
this.vertical = true;
|
|
51
|
+
this.onScrollEventListener = this.onScrollEvent.bind(this);
|
|
52
|
+
this.onMouseEventListener = this.onMouseEvent.bind(this);
|
|
53
|
+
this.onTouchEventListener = this.onTouchEvent.bind(this);
|
|
54
|
+
this.element = element;
|
|
55
|
+
this.vertical = vertical;
|
|
56
|
+
}
|
|
57
|
+
attach(scrollGroup) {
|
|
58
|
+
if (this.element.scrollGroup == scrollGroup) {
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
else if (this.element.scrollGroup) {
|
|
62
|
+
throw new Error("Detach element from ScrollGroup first.");
|
|
63
|
+
}
|
|
64
|
+
this.element.scrollGroup = scrollGroup;
|
|
65
|
+
this._scrollGroup = scrollGroup;
|
|
66
|
+
this.element.addEventListener("scroll", this.onScrollEventListener);
|
|
67
|
+
this.element.addEventListener("mousedown", this.onMouseEventListener);
|
|
68
|
+
this.element.addEventListener("mouseenter", this.onMouseEventListener);
|
|
69
|
+
this.element.addEventListener("mouseleave", this.onMouseEventListener);
|
|
70
|
+
this.element.addEventListener("touchstart", this.onTouchEventListener);
|
|
71
|
+
}
|
|
72
|
+
detach() {
|
|
73
|
+
this.element.scrollGroup = null;
|
|
74
|
+
this.element.removeEventListener("scroll", this.onScrollEventListener);
|
|
75
|
+
this.element.removeEventListener("mousedown", this.onMouseEventListener);
|
|
76
|
+
this.element.removeEventListener("mouseenter", this.onMouseEventListener);
|
|
77
|
+
this.element.removeEventListener("mouseleave", this.onMouseEventListener);
|
|
78
|
+
this.element.removeEventListener("touchstart", this.onTouchEventListener);
|
|
79
|
+
}
|
|
80
|
+
get scrollGroup() {
|
|
81
|
+
return this._scrollGroup;
|
|
82
|
+
}
|
|
83
|
+
get scrollOffset() {
|
|
84
|
+
if (this.vertical) {
|
|
85
|
+
return this.element.scrollTop;
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
return this.element.scrollLeft;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
set scrollOffset(value) {
|
|
92
|
+
if (this.vertical) {
|
|
93
|
+
this.element.scrollTop = value;
|
|
94
|
+
}
|
|
95
|
+
else {
|
|
96
|
+
this.element.scrollLeft = value;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
get scrollSize() {
|
|
100
|
+
if (this.vertical) {
|
|
101
|
+
return this.element.scrollHeight;
|
|
102
|
+
}
|
|
103
|
+
else {
|
|
104
|
+
return this.element.scrollWidth;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
get pageSize() {
|
|
108
|
+
if (this.vertical) {
|
|
109
|
+
return this.element.clientHeight;
|
|
110
|
+
}
|
|
111
|
+
else {
|
|
112
|
+
return this.element.clientWidth;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
onScrollEvent(event) {
|
|
116
|
+
var _a;
|
|
117
|
+
(_a = this.scrollGroup) === null || _a === void 0 ? void 0 : _a.syncFollowersToLeader(this);
|
|
118
|
+
}
|
|
119
|
+
onTouchEvent(event) {
|
|
120
|
+
if (event.type == "touchstart" && this.scrollGroup) {
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
onMouseEvent(event) {
|
|
124
|
+
const element = event.target;
|
|
125
|
+
if (this.scrollGroup) {
|
|
126
|
+
if (event.type == "mouseenter") {
|
|
127
|
+
}
|
|
128
|
+
else if (event.type == "mouseleave") {
|
|
129
|
+
}
|
|
130
|
+
else if (event.type == "mousedown") {
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
//# sourceMappingURL=scrolling.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scrolling.js","sourceRoot":"","sources":["../../src/scrolling.ts"],"names":[],"mappings":"AAgBA,MAAM,OAAO,WAAW;IAKtB,YAAmB,YAAY,KAAK;QAAjB,cAAS,GAAT,SAAS,CAAQ;QAJ5B,gBAAW,GAAiB,EAAE,CAAC;QAC/B,gBAAW,GAAG,KAAK,CAAC;QACpB,wBAAmB,GAAsB,IAAI,CAAC;IAGtD,CAAC;IAED,GAAG,CAAC,UAAsB;QAExB,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QACnD,IAAI,KAAK,IAAI,CAAC;YAAE,OAAO;QACvB,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACxB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACpC,CAAC;IAED,MAAM,CAAC,UAAsB;QAC3B,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QACnD,IAAI,KAAK,GAAG,CAAC;YAAE,OAAO;QACtB,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IAC5B,CAAC;IAED,KAAK;QACH,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YACtD,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;QACxB,CAAC;IACH,CAAC;IAED,aAAa,CAAC,KAAa;QACzB,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAC3C,UAAU,CAAC,MAAM,EAAE,CAAC;QACpB,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAClC,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,qBAAqB,CAAC,MAAkB;QACtC,IAAI,IAAI,CAAC,WAAW;YAAE,OAAO;QAC7B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QAExB,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;QACnE,MAAM,SAAS,GAAG,MAAM,CAAC,YAAY,GAAG,SAAS,CAAC;QAClD,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YACtD,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;YAClC,IAAI,KAAK,IAAI,MAAM,EAAE,CAAC;gBAEpB,KAAK,CAAC,YAAY,GAAG,SAAS,GAAG,CAAC,KAAK,CAAC,UAAU,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAA;YACtE,CAAC;QACH,CAAC;QAED,UAAU,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACrD,CAAC;CACF;AAqBD,MAAM,OAAO,qBAAqB;IAQhC,YAAY,OAAoB,EAAE,QAAQ,GAAG,IAAI;QAPzC,iBAAY,GAAuB,IAAI,CAAC;QAExC,aAAQ,GAAG,IAAI,CAAC;QAChB,0BAAqB,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAkB,CAAC;QACvE,yBAAoB,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAkB,CAAC;QACrE,yBAAoB,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAkB,CAAC;QAG3E,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;IAED,MAAM,CAAC,WAAwB;QAC7B,IAAK,IAAI,CAAC,OAAe,CAAC,WAAW,IAAI,WAAW,EAAE,CAAC;YACrD,OAAO;QACT,CAAC;aAAM,IAAK,IAAI,CAAC,OAAe,CAAC,WAAW,EAAE,CAAC;YAC7C,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;QAC5D,CAAC;QACA,IAAI,CAAC,OAAe,CAAC,WAAW,GAAG,WAAW,CAAC;QAChD,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC;QAChC,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,qBAAqB,CAAC,CAAC;QACpE,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,WAAW,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC;QACtE,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,YAAY,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC;QACvE,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,YAAY,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC;QACvE,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,YAAY,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC;IACzE,CAAC;IAED,MAAM;QACH,IAAI,CAAC,OAAe,CAAC,WAAW,GAAG,IAAI,CAAC;QACzC,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,qBAAqB,CAAC,CAAC;QACvE,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,WAAW,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC;QACzE,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,YAAY,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC;QAC1E,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,YAAY,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC;QAC1E,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,YAAY,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC;IAC5E,CAAC;IAED,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;IAGD,IAAI,YAAY;QACd,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC;QAChC,CAAC;aAAM,CAAC;YACN,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC;QACjC,CAAC;IACH,CAAC;IAED,IAAI,YAAY,CAAC,KAAa;QAC5B,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,IAAI,CAAC,OAAO,CAAC,SAAS,GAAG,KAAK,CAAC;QACjC,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,OAAO,CAAC,UAAU,GAAG,KAAK,CAAC;QAClC,CAAC;IACH,CAAC;IAGD,IAAI,UAAU;QACZ,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,OAAO,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC;QACnC,CAAC;aAAM,CAAC;YACN,OAAO,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC;QAClC,CAAC;IACH,CAAC;IAID,IAAI,QAAQ;QACV,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,OAAO,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC;QACnC,CAAC;aAAM,CAAC;YACN,OAAO,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC;QAClC,CAAC;IACH,CAAC;IAED,aAAa,CAAC,KAAY;;QAgBxB,MAAA,IAAI,CAAC,WAAW,0CAAE,qBAAqB,CAAC,IAAI,CAAC,CAAC;IAChD,CAAC;IAED,YAAY,CAAC,KAAiB;QAE5B,IAAI,KAAK,CAAC,IAAI,IAAI,YAAY,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;QAGrD,CAAC;IACH,CAAC;IAED,YAAY,CAAC,KAAiB;QAE5B,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC;QAC7B,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,IAAI,KAAK,CAAC,IAAI,IAAI,YAAY,EAAE,CAAC;YAEjC,CAAC;iBAAM,IAAI,KAAK,CAAC,IAAI,IAAI,YAAY,EAAE,CAAC;YAExC,CAAC;iBAAM,IAAI,KAAK,CAAC,IAAI,IAAI,WAAW,EAAE,CAAC;YAGvC,CAAC;QACH,CAAC;IACH,CAAC;CACF","sourcesContent":["import { Timer } from \"./timer\";\n\n/**\n * A scroll group allows one to \"connect\" multiple elements to be\n * scrolled synchronously.\n *\n * A typical usecase would be a div showing lines for a code editor\n * and one that shows a line numbers for a code editor.\n *\n * We could also have recursive relationships where elements in\n * a scroll group are connected to other items outside the scroll\n * group and the would form a super scroll group. An example would\n * two UI components A and B that\n * a scroll group is synchronized\n */\n\nexport class ScrollGroup {\n private scrollables: Scrollable[] = [];\n private isScrolling = false;\n private _focussedScrollable: Scrollable | null = null;\n\n constructor(public debugLogs = false) {\n }\n\n add(scrollable: Scrollable): void {\n // skip if already exists\n const index = this.scrollables.indexOf(scrollable);\n if (index >= 0) return;\n scrollable.attach(this);\n this.scrollables.push(scrollable);\n }\n\n remove(scrollable: Scrollable): void {\n const index = this.scrollables.indexOf(scrollable);\n if (index < 0) return;\n this.detachAtIndex(index);\n }\n\n clear(): void {\n for (let i = this.scrollables.length - 1; i >= 0; i--) {\n this.detachAtIndex(i);\n }\n }\n\n detachAtIndex(index: number): Scrollable {\n const scrollable = this.scrollables[index];\n scrollable.detach();\n this.scrollables.splice(index, 1);\n return scrollable;\n }\n\n syncFollowersToLeader(source: Scrollable): void {\n if (this.isScrolling) return;\n this.isScrolling = true;\n\n const remScroll = Math.max(1, source.scrollSize - source.pageSize);\n const scrollPct = source.scrollOffset / remScroll;\n for (let i = this.scrollables.length - 1; i >= 0; i--) {\n const other = this.scrollables[i];\n if (other != source) {\n // const remOther = Math.max(1, other.scrollSize - other.pageSize);\n other.scrollOffset = scrollPct * (other.scrollSize - other.pageSize)\n }\n }\n\n setTimeout(() => { this.isScrolling = true; }, 50);\n }\n}\n\nexport interface Scrollable {\n // Set or get the current scroll offset\n scrollOffset: number;\n\n // Get total scroll size\n readonly scrollSize: number;\n\n // Size of the current \"page\".\n // Our scrollOffset + pageSize is always < scrollSize\n readonly pageSize: number;\n\n // Detaches a scrollable from further use\n attach(scrollGroup: ScrollGroup): void;\n detach(): void;\n}\n\n/**\n * A wrapper for html elements that can be scrolled.\n */\nexport class HTMLElementScrollable implements Scrollable {\n private _scrollGroup: ScrollGroup | null = null;\n readonly element: HTMLElement;\n private vertical = true;\n private onScrollEventListener = this.onScrollEvent.bind(this) as EventListener;\n private onMouseEventListener = this.onMouseEvent.bind(this) as EventListener;\n private onTouchEventListener = this.onTouchEvent.bind(this) as EventListener;\n\n constructor(element: HTMLElement, vertical = true) {\n this.element = element;\n this.vertical = vertical;\n }\n\n attach(scrollGroup: ScrollGroup): void {\n if ((this.element as any).scrollGroup == scrollGroup) {\n return;\n } else if ((this.element as any).scrollGroup) {\n throw new Error(\"Detach element from ScrollGroup first.\");\n }\n (this.element as any).scrollGroup = scrollGroup;\n this._scrollGroup = scrollGroup;\n this.element.addEventListener(\"scroll\", this.onScrollEventListener);\n this.element.addEventListener(\"mousedown\", this.onMouseEventListener);\n this.element.addEventListener(\"mouseenter\", this.onMouseEventListener);\n this.element.addEventListener(\"mouseleave\", this.onMouseEventListener);\n this.element.addEventListener(\"touchstart\", this.onTouchEventListener);\n }\n\n detach(): void {\n (this.element as any).scrollGroup = null;\n this.element.removeEventListener(\"scroll\", this.onScrollEventListener);\n this.element.removeEventListener(\"mousedown\", this.onMouseEventListener);\n this.element.removeEventListener(\"mouseenter\", this.onMouseEventListener);\n this.element.removeEventListener(\"mouseleave\", this.onMouseEventListener);\n this.element.removeEventListener(\"touchstart\", this.onTouchEventListener);\n }\n\n get scrollGroup(): ScrollGroup | null {\n return this._scrollGroup;\n }\n\n // Set or get the current scroll offset\n get scrollOffset(): number {\n if (this.vertical) {\n return this.element.scrollTop;\n } else {\n return this.element.scrollLeft;\n }\n }\n\n set scrollOffset(value: number) {\n if (this.vertical) {\n this.element.scrollTop = value;\n } else {\n this.element.scrollLeft = value;\n }\n }\n\n // Get total scroll size\n get scrollSize(): number {\n if (this.vertical) {\n return this.element.scrollHeight;\n } else {\n return this.element.scrollWidth;\n }\n }\n\n // Size of the current \"page\".\n // Our scrollOffset + pageSize is always < scrollSize\n get pageSize(): number {\n if (this.vertical) {\n return this.element.clientHeight;\n } else {\n return this.element.clientWidth;\n }\n }\n\n onScrollEvent(event: Event): void {\n /**\n * Scroll events will be sent for all elements that are scrolling\n * either programatically or invoked via gestures.\n * It is not possible to know which of these it is and the problem\n * with this is that by handling all events it could result in an\n * infinite loop kicking each other off.\n *\n * So we need a way to be able differentiate scroll events between\n * those that were the \"source\" and those that are \"followers\".\n * We can try a few strategies here:\n *\n * 1. Take the first scroll event's target as the source\n * and kick off a timer to check when scroll events stop. As long\n * as scroll events come from this source we update followers.\n */\n this.scrollGroup?.syncFollowersToLeader(this);\n }\n\n onTouchEvent(event: TouchEvent): void {\n // console.log(`Touched Eeent(${event.type}): `, event);\n if (event.type == \"touchstart\" && this.scrollGroup) {\n // this.scrollGroup.focussedScrollable = this;\n // this.setLeadScrollable(this.focussedElement);\n }\n }\n\n onMouseEvent(event: MouseEvent): void {\n // console.log(`Mouse Event(${event.type}): `, event);\n const element = event.target;\n if (this.scrollGroup) {\n if (event.type == \"mouseenter\") {\n // this.scrollGroup.focussedScrollable = this;\n } else if (event.type == \"mouseleave\") {\n // this.scrollGroup.focussedScrollable = null;\n } else if (event.type == \"mousedown\") {\n // this.scrollGroup.focussedScrollable = this;\n // this.setLeadScrollable(this.focussedElement);\n }\n }\n }\n}\n"]}
|
package/lib/esm/streams.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"streams.js","sourceRoot":"","sources":["../../src/streams.ts"],"names":[],"mappings":"AAAA,MAAM,SAAS,CAAC,CAAC,WAAW,CAAI,GAAqB;IACnD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;
|
|
1
|
+
{"version":3,"file":"streams.js","sourceRoot":"","sources":["../../src/streams.ts"],"names":[],"mappings":"AAAA,MAAM,SAAS,CAAC,CAAC,WAAW,CAAI,GAAqB;IACnD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACpC,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAM,CAAC,CAAC;IACzB,CAAC;AACH,CAAC;AAED,MAAM,SAAS,CAAC,CAAC,UAAU,CAA+B,IAAS;IACjE,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,CAAC,GAAQ,EAAE,IAAI,CAAC,GAAG,CAAM,CAAC,CAAC;IACnC,CAAC;AACH,CAAC;AAED,MAAM,SAAS,CAAC,CAAC,SAAS,CAAO,MAAoB,EAAE,MAAmC;IACxF,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,KAAK,IAAI,IAAI,GAAG,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;QAChE,MAAM,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAC5B,CAAC,EAAE,CAAC;IACN,CAAC;AACH,CAAC;AAED,MAAM,SAAS,CAAC,CAAC,YAAY,CAAI,MAAoB,EAAE,UAA8C;IACnG,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,KAAK,IAAI,IAAI,GAAG,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;QAChE,IAAI,UAAU,EAAE,CAAC;YACf,IAAI,UAAU,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC;gBAC9B,MAAM,IAAI,CAAC,KAAK,CAAC;YACnB,CAAC;QACH,CAAC;aAAM,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACtB,MAAM,IAAI,CAAC,KAAK,CAAC;QACnB,CAAC;QACD,CAAC,EAAE,CAAC;IACN,CAAC;AACH,CAAC;AAED,MAAM,UAAU,aAAa,CAC3B,MAAoB,EACpB,SAA4C,EAC5C,UAAa;IAEb,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,KAAK,IAAI,IAAI,GAAG,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;QAChE,UAAU,GAAG,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC;QAClD,CAAC,EAAE,CAAC;IACN,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC","sourcesContent":["export function* streamArray<V>(arr: ReadonlyArray<V>): Generator<[number, V]> {\n for (let i = 0; i < arr.length; i++) {\n yield [i, arr[i] as V];\n }\n}\n\nexport function* streamDict<K extends string | number, V>(dict: any): Generator<[K, V]> {\n for (const key in dict) {\n yield [key as K, dict[key] as V];\n }\n}\n\nexport function* mapStream<X, Y>(stream: Generator<X>, mapper: (x: X, index?: number) => Y): Generator<Y> {\n let i = 0;\n for (let next = stream.next(); !next.done; next = stream.next()) {\n yield mapper(next.value, i);\n i++;\n }\n}\n\nexport function* filterStream<X>(stream: Generator<X>, filterFunc?: (x: X, index?: number) => boolean): Generator<X> {\n let i = 0;\n for (let next = stream.next(); !next.done; next = stream.next()) {\n if (filterFunc) {\n if (filterFunc(next.value, i)) {\n yield next.value;\n }\n } else if (next.value) {\n yield next.value;\n }\n i++;\n }\n}\n\nexport function collectStream<X, Y>(\n stream: Generator<X>,\n collector: (x: X, y: Y, index?: number) => Y,\n collection: Y,\n): Y {\n let i = 0;\n for (let next = stream.next(); !next.done; next = stream.next()) {\n collection = collector(next.value, collection, i);\n i++;\n }\n return collection;\n}\n"]}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
type StepFunc = (ts: number) => void;
|
|
2
|
+
export declare class Timer {
|
|
3
|
+
private refreshInterval;
|
|
4
|
+
private lastRefreshAt;
|
|
5
|
+
private updateLoop;
|
|
6
|
+
stepFunc: StepFunc;
|
|
7
|
+
constructor(refreshInterval: number, stepFunc: StepFunc);
|
|
8
|
+
stop(): void;
|
|
9
|
+
start(): void;
|
|
10
|
+
protected kickOffUpdate(): void;
|
|
11
|
+
}
|
|
12
|
+
export {};
|
package/lib/esm/timer.js
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
export class Timer {
|
|
2
|
+
constructor(refreshInterval, stepFunc) {
|
|
3
|
+
this.refreshInterval = 1000;
|
|
4
|
+
this.lastRefreshAt = 0;
|
|
5
|
+
this.updateLoop = null;
|
|
6
|
+
this.refreshInterval = refreshInterval;
|
|
7
|
+
this.stepFunc = stepFunc;
|
|
8
|
+
}
|
|
9
|
+
stop() {
|
|
10
|
+
if (this.updateLoop != null) {
|
|
11
|
+
cancelAnimationFrame(this.updateLoop);
|
|
12
|
+
this.updateLoop = null;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
start() {
|
|
16
|
+
this.kickOffUpdate();
|
|
17
|
+
}
|
|
18
|
+
kickOffUpdate() {
|
|
19
|
+
if (this.updateLoop != null) {
|
|
20
|
+
cancelAnimationFrame(this.updateLoop);
|
|
21
|
+
}
|
|
22
|
+
this.updateLoop = requestAnimationFrame((timestamp) => {
|
|
23
|
+
if (this.updateLoop != null) {
|
|
24
|
+
if (timestamp - this.lastRefreshAt >= this.refreshInterval) {
|
|
25
|
+
try {
|
|
26
|
+
this.stepFunc(timestamp);
|
|
27
|
+
}
|
|
28
|
+
catch (err) {
|
|
29
|
+
console.log("Error from Timer Handler: ", err);
|
|
30
|
+
alert("Error from Timer Handler: " + err.message);
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
this.lastRefreshAt = timestamp;
|
|
34
|
+
}
|
|
35
|
+
this.updateLoop = null;
|
|
36
|
+
this.kickOffUpdate();
|
|
37
|
+
}
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=timer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timer.js","sourceRoot":"","sources":["../../src/timer.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,KAAK;IAMhB,YAAY,eAAuB,EAAE,QAAkB;QAL/C,oBAAe,GAAG,IAAI,CAAC;QACvB,kBAAa,GAAG,CAAC,CAAC;QAClB,eAAU,GAAkB,IAAI,CAAC;QAIvC,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC;QACvC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;IAED,IAAI;QACF,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,EAAE,CAAC;YAC5B,oBAAoB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACtC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACzB,CAAC;IACH,CAAC;IAED,KAAK;QACH,IAAI,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC;IAES,aAAa;QACrB,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,EAAE,CAAC;YAC5B,oBAAoB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACxC,CAAC;QACD,IAAI,CAAC,UAAU,GAAG,qBAAqB,CAAC,CAAC,SAAS,EAAE,EAAE;YACpD,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,EAAE,CAAC;gBAC5B,IAAI,SAAS,GAAG,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;oBAC3D,IAAI,CAAC;wBACH,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;oBAC3B,CAAC;oBAAC,OAAO,GAAQ,EAAE,CAAC;wBAClB,OAAO,CAAC,GAAG,CAAC,4BAA4B,EAAE,GAAG,CAAC,CAAC;wBAC/C,KAAK,CAAC,4BAA4B,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC;wBAClD,OAAO;oBACT,CAAC;oBACD,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC;gBACjC,CAAC;gBACD,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;gBACvB,IAAI,CAAC,aAAa,EAAE,CAAC;YACvB,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;CACF","sourcesContent":["type StepFunc = (ts: number) => void;\n\nexport class Timer {\n private refreshInterval = 1000;\n private lastRefreshAt = 0;\n private updateLoop: number | null = null;\n stepFunc: StepFunc;\n\n constructor(refreshInterval: number, stepFunc: StepFunc) {\n this.refreshInterval = refreshInterval;\n this.stepFunc = stepFunc;\n }\n\n stop(): void {\n if (this.updateLoop != null) {\n cancelAnimationFrame(this.updateLoop);\n this.updateLoop = null;\n }\n }\n\n start(): void {\n this.kickOffUpdate();\n }\n\n protected kickOffUpdate(): void {\n if (this.updateLoop != null) {\n cancelAnimationFrame(this.updateLoop);\n }\n this.updateLoop = requestAnimationFrame((timestamp) => {\n if (this.updateLoop != null) {\n if (timestamp - this.lastRefreshAt >= this.refreshInterval) {\n try {\n this.stepFunc(timestamp);\n } catch (err: any) {\n console.log(\"Error from Timer Handler: \", err);\n alert(\"Error from Timer Handler: \" + err.message);\n return;\n }\n this.lastRefreshAt = timestamp;\n }\n this.updateLoop = null;\n this.kickOffUpdate();\n }\n });\n }\n}\n"]}
|
package/lib/esm/timeutils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"timeutils.js","sourceRoot":"","sources":["../../src/timeutils.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,OAAO,GAAG,IAAI,CAAC;AAC5B,MAAM,CAAC,MAAM,MAAM,GAAG,OAAO,CAAC;AAC9B,MAAM,CAAC,MAAM,OAAO,GAAG,UAAU,CAAC;AAClC,MAAM,CAAC,MAAM,OAAO,GAAG,WAAW,CAAC;AACnC,MAAM,CAAC,MAAM,QAAQ,GAAG,aAAa,CAAC;AAMtC,MAAM,UAAU,KAAK,CAAC,GAAW;IAC/B,OAAO,QAAQ,GAAG,GAAG,CAAC;AACxB,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,GAAW;IACjC,OAAO,OAAO,GAAG,GAAG,CAAC;AACvB,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,GAAW;IACjC,OAAO,OAAO,GAAG,GAAG,CAAC;AACvB,CAAC;AAED,MAAM,UAAU,MAAM,CAAC,GAAW;IAChC,OAAO,OAAO,GAAG,GAAG,CAAC;AACvB,CAAC;AAED,MAAM,UAAU,MAAM,CAAC,GAAW;IAChC,OAAO,MAAM,GAAG,GAAG,CAAC;AACtB,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,KAAa;IACzC,KAAK,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;IAC5B,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IACjC,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;
|
|
1
|
+
{"version":3,"file":"timeutils.js","sourceRoot":"","sources":["../../src/timeutils.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,OAAO,GAAG,IAAI,CAAC;AAC5B,MAAM,CAAC,MAAM,MAAM,GAAG,OAAO,CAAC;AAC9B,MAAM,CAAC,MAAM,OAAO,GAAG,UAAU,CAAC;AAClC,MAAM,CAAC,MAAM,OAAO,GAAG,WAAW,CAAC;AACnC,MAAM,CAAC,MAAM,QAAQ,GAAG,aAAa,CAAC;AAMtC,MAAM,UAAU,KAAK,CAAC,GAAW;IAC/B,OAAO,QAAQ,GAAG,GAAG,CAAC;AACxB,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,GAAW;IACjC,OAAO,OAAO,GAAG,GAAG,CAAC;AACvB,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,GAAW;IACjC,OAAO,OAAO,GAAG,GAAG,CAAC;AACvB,CAAC;AAED,MAAM,UAAU,MAAM,CAAC,GAAW;IAChC,OAAO,OAAO,GAAG,GAAG,CAAC;AACvB,CAAC;AAED,MAAM,UAAU,MAAM,CAAC,GAAW;IAChC,OAAO,MAAM,GAAG,GAAG,CAAC;AACtB,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,KAAa;IACzC,KAAK,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;IAC5B,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IACjC,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACzB,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC1B,CAAC;SAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACjC,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC1B,CAAC;SAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAC/B,OAAO,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC3B,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC","sourcesContent":["import { Nullable } from \"./types\";\n\nexport const ONE_MUS = 1000;\nexport const ONE_MS = 1000000;\nexport const ONE_SEC = 1000000000;\nexport const ONE_MIN = 60000000000;\nexport const ONE_HOUR = 3600000000000;\n\nexport interface Diagnostics {\n notifyTimeTaken(time: number, label: string, source: any): void;\n}\n\nexport function Hours(val: number): number {\n return ONE_HOUR * val;\n}\n\nexport function Minutes(val: number): number {\n return ONE_MIN * val;\n}\n\nexport function Seconds(val: number): number {\n return ONE_SEC * val;\n}\n\nexport function Micros(val: number): number {\n return ONE_MUS * val;\n}\n\nexport function Millis(val: number): number {\n return ONE_MS * val;\n}\n\nexport function StrToDuration(value: string): number {\n value = value.toLowerCase();\n const intValue = parseInt(value);\n if (value.endsWith(\"ms\")) {\n return Millis(intValue);\n } else if (value.endsWith(\"mus\")) {\n return Micros(intValue);\n } else if (value.endsWith(\"s\")) {\n return Seconds(intValue);\n }\n return intValue;\n}\n"]}
|
package/lib/esm/types.d.ts
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
export
|
|
2
|
-
export
|
|
3
|
-
export
|
|
1
|
+
export type Timestamp = number;
|
|
2
|
+
export type NumberRange = [number, number];
|
|
3
|
+
export type StringMap<T> = {
|
|
4
4
|
[key: string]: T;
|
|
5
5
|
};
|
|
6
|
-
export
|
|
6
|
+
export type NumMap<T> = {
|
|
7
7
|
[key: number]: T;
|
|
8
8
|
};
|
|
9
|
-
export
|
|
10
|
-
export
|
|
9
|
+
export type Nullable<T> = T | null;
|
|
10
|
+
export type Undefined<T> = T | undefined | void;
|
|
11
11
|
export declare function assert(condition: boolean, msg?: string): asserts condition;
|
package/lib/esm/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AASA,MAAM,UAAU,MAAM,CAAC,SAAkB,EAAE,GAAY;IACrD,IAAI,CAAC,SAAS,EAAE;
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AASA,MAAM,UAAU,MAAM,CAAC,SAAkB,EAAE,GAAY;IACrD,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC;IACvB,CAAC;AACH,CAAC","sourcesContent":["export type Timestamp = number;\nexport type NumberRange = [number, number];\n\nexport type StringMap<T> = { [key: string]: T };\nexport type NumMap<T> = { [key: number]: T };\nexport type Nullable<T> = T | null;\n\nexport type Undefined<T> = T | undefined | void;\n\nexport function assert(condition: boolean, msg?: string): asserts condition {\n if (!condition) {\n throw new Error(msg);\n }\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@panyam/tsutils",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.67",
|
|
4
4
|
"author": "Sriram Panyam",
|
|
5
5
|
"description": "Some basic TS utils for personal use",
|
|
6
6
|
"homepage": "https://github.com/panyam/tsutils#readme",
|
|
@@ -43,42 +43,42 @@
|
|
|
43
43
|
"postversion": "git push && git push --tags"
|
|
44
44
|
},
|
|
45
45
|
"devDependencies": {
|
|
46
|
-
"@babel/core": "^7.
|
|
47
|
-
"@babel/plugin-proposal-class-properties": "^7.
|
|
48
|
-
"@babel/plugin-proposal-object-rest-spread": "^7.
|
|
49
|
-
"@babel/preset-flow": "^7.
|
|
50
|
-
"@babel/preset-typescript": "^7.
|
|
51
|
-
"@types/fs-extra": "^
|
|
52
|
-
"@types/jest": "^
|
|
53
|
-
"@typescript-eslint/eslint-plugin": "^
|
|
54
|
-
"autoprefixer": "^10.
|
|
46
|
+
"@babel/core": "^7.25.8",
|
|
47
|
+
"@babel/plugin-proposal-class-properties": "^7.18.6",
|
|
48
|
+
"@babel/plugin-proposal-object-rest-spread": "^7.20.7",
|
|
49
|
+
"@babel/preset-flow": "^7.25.7",
|
|
50
|
+
"@babel/preset-typescript": "^7.25.7",
|
|
51
|
+
"@types/fs-extra": "^11.0.4",
|
|
52
|
+
"@types/jest": "^29.5.13",
|
|
53
|
+
"@typescript-eslint/eslint-plugin": "^8.8.1",
|
|
54
|
+
"autoprefixer": "^10.4.20",
|
|
55
55
|
"babel-core": "^6.26.3",
|
|
56
|
-
"babel-jest": "^
|
|
57
|
-
"babel-loader": "^
|
|
56
|
+
"babel-jest": "^29.7.0",
|
|
57
|
+
"babel-loader": "^9.2.1",
|
|
58
58
|
"babel-preset-env": "^1.7.0",
|
|
59
|
-
"browserify": "17.0.
|
|
60
|
-
"codecov": "^3.8.
|
|
61
|
-
"eslint": "^
|
|
62
|
-
"eslint-config-prettier": "^
|
|
63
|
-
"eslint-plugin-prettier": "^
|
|
59
|
+
"browserify": "17.0.1",
|
|
60
|
+
"codecov": "^3.8.3",
|
|
61
|
+
"eslint": "^9.12.0",
|
|
62
|
+
"eslint-config-prettier": "^9.1.0",
|
|
63
|
+
"eslint-plugin-prettier": "^5.2.1",
|
|
64
64
|
"extract-loader": "^5.1.0",
|
|
65
|
-
"fs-extra": "^
|
|
66
|
-
"html-webpack-plugin": "^5.
|
|
67
|
-
"html-webpack-tags-plugin": "^3.0.
|
|
68
|
-
"jest": "^
|
|
69
|
-
"jest-each": "^
|
|
70
|
-
"jest-mock": "^
|
|
71
|
-
"jsdom": "^
|
|
65
|
+
"fs-extra": "^11.2.0",
|
|
66
|
+
"html-webpack-plugin": "^5.6.0",
|
|
67
|
+
"html-webpack-tags-plugin": "^3.0.2",
|
|
68
|
+
"jest": "^29.7.0",
|
|
69
|
+
"jest-each": "^29.7.0",
|
|
70
|
+
"jest-mock": "^29.7.0",
|
|
71
|
+
"jsdom": "^25.0.1",
|
|
72
72
|
"pre-commit": "^1.2.2",
|
|
73
|
-
"prettier": "^
|
|
74
|
-
"supertest": "^
|
|
75
|
-
"ts-jest": "^
|
|
76
|
-
"ts-node": "^10.
|
|
77
|
-
"typedoc": "^0.
|
|
78
|
-
"typescript": "^
|
|
79
|
-
"typescript-tslint-plugin": "^1.0.
|
|
73
|
+
"prettier": "^3.3.3",
|
|
74
|
+
"supertest": "^7.0.0",
|
|
75
|
+
"ts-jest": "^29.2.5",
|
|
76
|
+
"ts-node": "^10.9.2",
|
|
77
|
+
"typedoc": "^0.26.8",
|
|
78
|
+
"typescript": "^5.6.3",
|
|
79
|
+
"typescript-tslint-plugin": "^1.0.2"
|
|
80
80
|
},
|
|
81
81
|
"dependencies": {
|
|
82
|
-
"axios": "^
|
|
82
|
+
"axios": "^1.7.7"
|
|
83
83
|
}
|
|
84
84
|
}
|