adaptive-extender 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/CHANGELOG.md +3 -0
- package/README.md +0 -9
- package/dist/web/element.d.ts +8 -0
- package/dist/web/element.js +14 -0
- package/dist/web/element.js.map +1 -0
- package/dist/web/engine.d.ts +52 -0
- package/dist/web/engine.js +152 -0
- package/dist/web/engine.js.map +1 -0
- package/dist/web/index.d.ts +4 -0
- package/dist/web/index.js +4 -0
- package/dist/web/index.js.map +1 -1
- package/dist/web/parent-node.d.ts +10 -0
- package/dist/web/parent-node.js +56 -0
- package/dist/web/parent-node.js.map +1 -0
- package/dist/web/promise.d.ts +17 -0
- package/dist/web/promise.js +26 -0
- package/dist/web/promise.js.map +1 -0
- package/package.json +8 -10
- package/vitest.config.ts +23 -0
package/CHANGELOG.md
CHANGED
package/README.md
CHANGED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import "../core/index.js";
|
|
2
|
+
declare global {
|
|
3
|
+
interface Element {
|
|
4
|
+
getClosest<T extends typeof Element>(type: T, selectors: string): InstanceType<T>;
|
|
5
|
+
getClosestAsync<T extends typeof Element>(type: T, selectors: string): Promise<InstanceType<T>>;
|
|
6
|
+
}
|
|
7
|
+
}
|
|
8
|
+
export {};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
import "../core/index.js";
|
|
3
|
+
Element.prototype.getClosest = function (type, selectors) {
|
|
4
|
+
const element = ReferenceError.suppress(this.closest(selectors), `Element ${selectors} is missing`);
|
|
5
|
+
if (!(element instanceof type))
|
|
6
|
+
throw new TypeError(`Element ${selectors} has invalid type`);
|
|
7
|
+
return element;
|
|
8
|
+
};
|
|
9
|
+
Element.prototype.getClosestAsync = async function (type, selectors) {
|
|
10
|
+
return this.getClosest(type, selectors);
|
|
11
|
+
};
|
|
12
|
+
//#endregion
|
|
13
|
+
export {};
|
|
14
|
+
//# sourceMappingURL=element.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"element.js","sourceRoot":"","sources":["../../src/web/element.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,kBAAkB,CAAC;AAU1B,OAAO,CAAC,SAAS,CAAC,UAAU,GAAG,UAAoC,IAAO,EAAE,SAAiB;IAC5F,MAAM,OAAO,GAAY,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,WAAW,SAAS,aAAa,CAAC,CAAC;IAC7G,IAAI,CAAC,CAAC,OAAO,YAAY,IAAI,CAAC;QAAE,MAAM,IAAI,SAAS,CAAC,WAAW,SAAS,mBAAmB,CAAC,CAAC;IAC7F,OAAO,OAA0B,CAAC;AACnC,CAAC,CAAC;AAEF,OAAO,CAAC,SAAS,CAAC,eAAe,GAAG,KAAK,WAAqC,IAAO,EAAE,SAAiB;IACvG,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;AACzC,CAAC,CAAC;AACF,YAAY;AAEZ,OAAO,EAAG,CAAC"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import "../core/index.js";
|
|
2
|
+
import { type Engine } from "../core/index.js";
|
|
3
|
+
interface WebEngineEventMap {
|
|
4
|
+
"trigger": Event;
|
|
5
|
+
"change": Event;
|
|
6
|
+
}
|
|
7
|
+
interface WebEngineOptions {
|
|
8
|
+
launch: boolean;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* @abstract
|
|
12
|
+
*/
|
|
13
|
+
declare class WebEngine extends EventTarget implements Engine {
|
|
14
|
+
#private;
|
|
15
|
+
get launched(): boolean;
|
|
16
|
+
set launched(value: boolean);
|
|
17
|
+
get limit(): number;
|
|
18
|
+
set limit(value: number);
|
|
19
|
+
get fps(): number;
|
|
20
|
+
get delta(): number;
|
|
21
|
+
constructor();
|
|
22
|
+
constructor(options: Partial<WebEngineOptions>);
|
|
23
|
+
addEventListener<K extends keyof WebEngineEventMap>(type: K, listener: (this: this, ev: WebEngineEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
|
|
24
|
+
addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
|
|
25
|
+
removeEventListener<K extends keyof WebEngineEventMap>(type: K, listener: (this: WebEngine, ev: WebEngineEventMap[K]) => any, options?: boolean | EventListenerOptions): void;
|
|
26
|
+
removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;
|
|
27
|
+
}
|
|
28
|
+
declare class FastEngine extends WebEngine {
|
|
29
|
+
#private;
|
|
30
|
+
get fps(): number;
|
|
31
|
+
get delta(): number;
|
|
32
|
+
constructor();
|
|
33
|
+
constructor(options: Partial<WebEngineOptions>);
|
|
34
|
+
}
|
|
35
|
+
declare class PreciseEngine extends WebEngine {
|
|
36
|
+
#private;
|
|
37
|
+
get fps(): number;
|
|
38
|
+
get delta(): number;
|
|
39
|
+
constructor();
|
|
40
|
+
constructor(options: Partial<WebEngineOptions>);
|
|
41
|
+
}
|
|
42
|
+
declare class StaticEngine extends WebEngine {
|
|
43
|
+
#private;
|
|
44
|
+
get limit(): number;
|
|
45
|
+
set limit(value: number);
|
|
46
|
+
get fps(): number;
|
|
47
|
+
get delta(): number;
|
|
48
|
+
constructor();
|
|
49
|
+
constructor(options: Partial<WebEngineOptions>);
|
|
50
|
+
}
|
|
51
|
+
export { type WebEngineEventMap, type WebEngineOptions, WebEngine };
|
|
52
|
+
export { FastEngine, PreciseEngine, StaticEngine };
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
import "../core/index.js";
|
|
3
|
+
import {} from "../core/index.js";
|
|
4
|
+
const { trunc } = Math;
|
|
5
|
+
/**
|
|
6
|
+
* @abstract
|
|
7
|
+
*/
|
|
8
|
+
class WebEngine extends EventTarget {
|
|
9
|
+
#launched;
|
|
10
|
+
get launched() {
|
|
11
|
+
return this.#launched;
|
|
12
|
+
}
|
|
13
|
+
set launched(value) {
|
|
14
|
+
if (this.#launched === value)
|
|
15
|
+
return;
|
|
16
|
+
this.#launched = value;
|
|
17
|
+
this.dispatchEvent(new Event("change"));
|
|
18
|
+
}
|
|
19
|
+
#gap = 0;
|
|
20
|
+
get limit() {
|
|
21
|
+
return 1000 / this.#gap;
|
|
22
|
+
}
|
|
23
|
+
set limit(value) {
|
|
24
|
+
if (Number.isNaN(value))
|
|
25
|
+
return;
|
|
26
|
+
if (value <= 0)
|
|
27
|
+
return;
|
|
28
|
+
this.#gap = 1000 / value;
|
|
29
|
+
}
|
|
30
|
+
get fps() {
|
|
31
|
+
throw new Error("Method not implemented");
|
|
32
|
+
}
|
|
33
|
+
get delta() {
|
|
34
|
+
throw new Error("Method not implemented");
|
|
35
|
+
}
|
|
36
|
+
constructor(options = {}) {
|
|
37
|
+
super();
|
|
38
|
+
if (new.target === WebEngine)
|
|
39
|
+
throw new TypeError("Unable to create an instance of an abstract class");
|
|
40
|
+
const { launch } = options;
|
|
41
|
+
this.#launched = launch ?? false;
|
|
42
|
+
}
|
|
43
|
+
addEventListener(type, listener, options) {
|
|
44
|
+
return super.addEventListener(type, listener, options);
|
|
45
|
+
}
|
|
46
|
+
removeEventListener(type, listener, options) {
|
|
47
|
+
return super.removeEventListener(type, listener, options);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
//#endregion
|
|
51
|
+
//#region Fast engine
|
|
52
|
+
class FastEngine extends WebEngine {
|
|
53
|
+
#fps = 0;
|
|
54
|
+
get fps() {
|
|
55
|
+
return this.#fps;
|
|
56
|
+
}
|
|
57
|
+
get delta() {
|
|
58
|
+
return 1 / this.#fps;
|
|
59
|
+
}
|
|
60
|
+
#previous = 0;
|
|
61
|
+
constructor(options = {}) {
|
|
62
|
+
super(options);
|
|
63
|
+
requestAnimationFrame(this.#callback);
|
|
64
|
+
}
|
|
65
|
+
#callback = (current) => {
|
|
66
|
+
const difference = current - this.#previous;
|
|
67
|
+
const fps = 1000 / difference;
|
|
68
|
+
if (fps < this.limit) {
|
|
69
|
+
if (this.launched) {
|
|
70
|
+
this.#fps = fps;
|
|
71
|
+
this.dispatchEvent(new Event("trigger"));
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
this.#fps = 0;
|
|
75
|
+
}
|
|
76
|
+
this.#previous = current;
|
|
77
|
+
}
|
|
78
|
+
requestAnimationFrame(this.#callback);
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
//#endregion
|
|
82
|
+
//#region Precise engine
|
|
83
|
+
class PreciseEngine extends WebEngine {
|
|
84
|
+
#fps = 0;
|
|
85
|
+
get fps() {
|
|
86
|
+
return this.#fps;
|
|
87
|
+
}
|
|
88
|
+
get delta() {
|
|
89
|
+
return 1 / this.#fps;
|
|
90
|
+
}
|
|
91
|
+
#previous;
|
|
92
|
+
constructor(options = {}) {
|
|
93
|
+
super(options);
|
|
94
|
+
this.#previous = performance.now();
|
|
95
|
+
setTimeout(this.#callback, 1000 / this.limit);
|
|
96
|
+
}
|
|
97
|
+
;
|
|
98
|
+
#callback = () => {
|
|
99
|
+
const current = performance.now();
|
|
100
|
+
const difference = current - this.#previous;
|
|
101
|
+
if (this.launched) {
|
|
102
|
+
this.#fps = (1000 / difference);
|
|
103
|
+
this.dispatchEvent(new Event("trigger"));
|
|
104
|
+
}
|
|
105
|
+
else {
|
|
106
|
+
this.#fps = 0;
|
|
107
|
+
}
|
|
108
|
+
this.#previous = current;
|
|
109
|
+
setTimeout(this.#callback, 1000 / this.limit);
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
//#endregion
|
|
113
|
+
//#region Static engine
|
|
114
|
+
class StaticEngine extends WebEngine {
|
|
115
|
+
get limit() {
|
|
116
|
+
return super.limit;
|
|
117
|
+
}
|
|
118
|
+
set limit(value) {
|
|
119
|
+
super.limit = value;
|
|
120
|
+
this.#fps = value;
|
|
121
|
+
}
|
|
122
|
+
#fps = 0;
|
|
123
|
+
get fps() {
|
|
124
|
+
return this.#fps;
|
|
125
|
+
}
|
|
126
|
+
get delta() {
|
|
127
|
+
return 1 / this.#fps;
|
|
128
|
+
}
|
|
129
|
+
#previous = 0;
|
|
130
|
+
constructor(options = {}) {
|
|
131
|
+
super(options);
|
|
132
|
+
super.limit = 120;
|
|
133
|
+
this.#previous = 0;
|
|
134
|
+
setTimeout(this.#callback);
|
|
135
|
+
}
|
|
136
|
+
#callback = () => {
|
|
137
|
+
const difference = performance.now() - this.#previous;
|
|
138
|
+
const delta = 1000 / this.limit;
|
|
139
|
+
const count = trunc(difference / delta);
|
|
140
|
+
this.#fps = (1000 * count) / difference;
|
|
141
|
+
for (let index = 0; index < count; index++) {
|
|
142
|
+
if (this.launched)
|
|
143
|
+
this.dispatchEvent(new Event("trigger"));
|
|
144
|
+
this.#previous += count * delta;
|
|
145
|
+
}
|
|
146
|
+
setTimeout(this.#callback);
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
//#endregion
|
|
150
|
+
export { WebEngine };
|
|
151
|
+
export { FastEngine, PreciseEngine, StaticEngine };
|
|
152
|
+
//# sourceMappingURL=engine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"engine.js","sourceRoot":"","sources":["../../src/web/engine.ts"],"names":[],"mappings":"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"}
|
package/dist/web/index.d.ts
CHANGED
package/dist/web/index.js
CHANGED
package/dist/web/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/web/index.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,cAAc,kBAAkB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/web/index.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import "../core/index.js";
|
|
2
|
+
declare global {
|
|
3
|
+
interface ParentNode {
|
|
4
|
+
getElement<T extends typeof Element>(type: T, selectors: string): InstanceType<T>;
|
|
5
|
+
getElementAsync<T extends typeof Element>(type: T, selectors: string): Promise<InstanceType<T>>;
|
|
6
|
+
getElements<T extends typeof Element>(type: T, selectors: string): NodeListOf<InstanceType<T>>;
|
|
7
|
+
getElementsAsync<T extends typeof Element>(type: T, selectors: string): Promise<NodeListOf<InstanceType<T>>>;
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
export {};
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
import "../core/index.js";
|
|
3
|
+
function getElement(parent, type, selectors) {
|
|
4
|
+
const element = ReferenceError.suppress(parent.querySelector(selectors), `Element ${selectors} is missing`);
|
|
5
|
+
if (!(element instanceof type))
|
|
6
|
+
throw new TypeError(`Element ${selectors} has invalid type`);
|
|
7
|
+
return element;
|
|
8
|
+
}
|
|
9
|
+
function getElements(parent, type, selectors) {
|
|
10
|
+
const elements = parent.querySelectorAll(selectors);
|
|
11
|
+
for (let index = 0; index < elements.length; index++) {
|
|
12
|
+
const element = elements.item(index);
|
|
13
|
+
if (!(element instanceof type))
|
|
14
|
+
throw new TypeError(`Element ${selectors} at ${index} has invalid type`);
|
|
15
|
+
}
|
|
16
|
+
return elements;
|
|
17
|
+
}
|
|
18
|
+
Element.prototype.getElement = function (type, selectors) {
|
|
19
|
+
return getElement(this, type, selectors);
|
|
20
|
+
};
|
|
21
|
+
Element.prototype.getElementAsync = async function (type, selectors) {
|
|
22
|
+
return getElement(this, type, selectors);
|
|
23
|
+
};
|
|
24
|
+
Element.prototype.getElements = function (type, selectors) {
|
|
25
|
+
return getElements(this, type, selectors);
|
|
26
|
+
};
|
|
27
|
+
Element.prototype.getElementsAsync = async function (type, selectors) {
|
|
28
|
+
return getElements(this, type, selectors);
|
|
29
|
+
};
|
|
30
|
+
Document.prototype.getElement = function (type, selectors) {
|
|
31
|
+
return getElement(this, type, selectors);
|
|
32
|
+
};
|
|
33
|
+
Document.prototype.getElementAsync = async function (type, selectors) {
|
|
34
|
+
return getElement(this, type, selectors);
|
|
35
|
+
};
|
|
36
|
+
Document.prototype.getElements = function (type, selectors) {
|
|
37
|
+
return getElements(this, type, selectors);
|
|
38
|
+
};
|
|
39
|
+
Document.prototype.getElementsAsync = async function (type, selectors) {
|
|
40
|
+
return getElements(this, type, selectors);
|
|
41
|
+
};
|
|
42
|
+
DocumentFragment.prototype.getElement = function (type, selectors) {
|
|
43
|
+
return getElement(this, type, selectors);
|
|
44
|
+
};
|
|
45
|
+
DocumentFragment.prototype.getElementAsync = async function (type, selectors) {
|
|
46
|
+
return getElement(this, type, selectors);
|
|
47
|
+
};
|
|
48
|
+
DocumentFragment.prototype.getElements = function (type, selectors) {
|
|
49
|
+
return getElements(this, type, selectors);
|
|
50
|
+
};
|
|
51
|
+
DocumentFragment.prototype.getElementsAsync = async function (type, selectors) {
|
|
52
|
+
return getElements(this, type, selectors);
|
|
53
|
+
};
|
|
54
|
+
//#endregion
|
|
55
|
+
export {};
|
|
56
|
+
//# sourceMappingURL=parent-node.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parent-node.js","sourceRoot":"","sources":["../../src/web/parent-node.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,kBAAkB,CAAC;AAY1B,SAAS,UAAU,CAA2B,MAAkB,EAAE,IAAO,EAAE,SAAiB;IAC3F,MAAM,OAAO,GAAY,cAAc,CAAC,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,SAAS,CAAC,EAAE,WAAW,SAAS,aAAa,CAAC,CAAC;IACrH,IAAI,CAAC,CAAC,OAAO,YAAY,IAAI,CAAC;QAAE,MAAM,IAAI,SAAS,CAAC,WAAW,SAAS,mBAAmB,CAAC,CAAC;IAC7F,OAAO,OAA0B,CAAC;AACnC,CAAC;AAED,SAAS,WAAW,CAA2B,MAAkB,EAAE,IAAO,EAAE,SAAiB;IAC5F,MAAM,QAAQ,GAAwB,MAAM,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;IACzE,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,QAAQ,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;QACtD,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACrC,IAAI,CAAC,CAAC,OAAO,YAAY,IAAI,CAAC;YAAE,MAAM,IAAI,SAAS,CAAC,WAAW,SAAS,OAAO,KAAK,mBAAmB,CAAC,CAAC;IAC1G,CAAC;IACD,OAAO,QAAuC,CAAC;AAChD,CAAC;AAED,OAAO,CAAC,SAAS,CAAC,UAAU,GAAG,UAAoC,IAAO,EAAE,SAAiB;IAC5F,OAAO,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;AAC1C,CAAC,CAAC;AAEF,OAAO,CAAC,SAAS,CAAC,eAAe,GAAG,KAAK,WAAqC,IAAO,EAAE,SAAiB;IACvG,OAAO,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;AAC1C,CAAC,CAAC;AAEF,OAAO,CAAC,SAAS,CAAC,WAAW,GAAG,UAAoC,IAAO,EAAE,SAAiB;IAC7F,OAAO,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;AAC3C,CAAC,CAAC;AAEF,OAAO,CAAC,SAAS,CAAC,gBAAgB,GAAG,KAAK,WAAqC,IAAO,EAAE,SAAiB;IACxG,OAAO,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;AAC3C,CAAC,CAAC;AAEF,QAAQ,CAAC,SAAS,CAAC,UAAU,GAAG,UAAoC,IAAO,EAAE,SAAiB;IAC7F,OAAO,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;AAC1C,CAAC,CAAC;AAEF,QAAQ,CAAC,SAAS,CAAC,eAAe,GAAG,KAAK,WAAqC,IAAO,EAAE,SAAiB;IACxG,OAAO,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;AAC1C,CAAC,CAAC;AAEF,QAAQ,CAAC,SAAS,CAAC,WAAW,GAAG,UAAoC,IAAO,EAAE,SAAiB;IAC9F,OAAO,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;AAC3C,CAAC,CAAC;AAEF,QAAQ,CAAC,SAAS,CAAC,gBAAgB,GAAG,KAAK,WAAqC,IAAO,EAAE,SAAiB;IACzG,OAAO,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;AAC3C,CAAC,CAAC;AAEF,gBAAgB,CAAC,SAAS,CAAC,UAAU,GAAG,UAAoC,IAAO,EAAE,SAAiB;IACrG,OAAO,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;AAC1C,CAAC,CAAC;AAEF,gBAAgB,CAAC,SAAS,CAAC,eAAe,GAAG,KAAK,WAAqC,IAAO,EAAE,SAAiB;IAChH,OAAO,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;AAC1C,CAAC,CAAC;AAEF,gBAAgB,CAAC,SAAS,CAAC,WAAW,GAAG,UAAoC,IAAO,EAAE,SAAiB;IACtG,OAAO,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;AAC3C,CAAC,CAAC;AAEF,gBAAgB,CAAC,SAAS,CAAC,gBAAgB,GAAG,KAAK,WAAqC,IAAO,EAAE,SAAiB;IACjH,OAAO,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;AAC3C,CAAC,CAAC;AACF,YAAY;AAEZ,OAAO,EAAG,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import "../core/index.js";
|
|
2
|
+
import { type Promisable } from "../core/index.js";
|
|
3
|
+
declare global {
|
|
4
|
+
interface PromiseConstructor {
|
|
5
|
+
/**
|
|
6
|
+
* Creates a promise that resolves after the specified timeout.
|
|
7
|
+
* @param timeout The timeout in milliseconds.
|
|
8
|
+
*/
|
|
9
|
+
asTimeout(timeout: number): Promise<void>;
|
|
10
|
+
/**
|
|
11
|
+
* Creates a promise that can be controlled with an abort signal.
|
|
12
|
+
* @param callback The callback to execute with an abort signal, resolve, and reject functions.
|
|
13
|
+
*/
|
|
14
|
+
withSignal<T>(callback: (signal: AbortSignal, resolve: (value: Promisable<T>) => void, reject: (reason?: any) => void) => void): Promise<T>;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
export {};
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
import "../core/index.js";
|
|
3
|
+
import {} from "../core/index.js";
|
|
4
|
+
Promise.asTimeout = async function (timeout) {
|
|
5
|
+
let index;
|
|
6
|
+
try {
|
|
7
|
+
return await new Promise((resolve) => {
|
|
8
|
+
index = setTimeout(resolve, timeout);
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
finally {
|
|
12
|
+
clearTimeout(index);
|
|
13
|
+
}
|
|
14
|
+
};
|
|
15
|
+
Promise.withSignal = async function (callback) {
|
|
16
|
+
const controller = new AbortController();
|
|
17
|
+
try {
|
|
18
|
+
return await new Promise((resolve, reject) => callback(controller.signal, resolve, reject));
|
|
19
|
+
}
|
|
20
|
+
finally {
|
|
21
|
+
controller.abort();
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
//#endregion
|
|
25
|
+
export {};
|
|
26
|
+
//# sourceMappingURL=promise.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"promise.js","sourceRoot":"","sources":["../../src/web/promise.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,kBAAkB,CAAC;AAC1B,OAAO,EAAmB,MAAM,kBAAkB,CAAC;AAkBnD,OAAO,CAAC,SAAS,GAAG,KAAK,WAAW,OAAe;IAClD,IAAI,KAAyB,CAAC;IAC9B,IAAI,CAAC;QACJ,OAAO,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YACpC,KAAK,GAAG,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;IACJ,CAAC;YAAS,CAAC;QACV,YAAY,CAAC,KAAK,CAAC,CAAC;IACrB,CAAC;AACF,CAAC,CAAC;AAEF,OAAO,CAAC,UAAU,GAAG,KAAK,WAAc,QAAgH;IACvJ,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,IAAI,CAAC;QACJ,OAAO,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;IAC7F,CAAC;YAAS,CAAC;QACV,UAAU,CAAC,KAAK,EAAE,CAAC;IACpB,CAAC;AACF,CAAC,CAAC;AACF,YAAY;AAEZ,OAAO,EAAG,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "adaptive-extender",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.6.0",
|
|
4
4
|
"description": "Adaptive library for JS/TS development environments",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/core/index.js",
|
|
@@ -50,16 +50,14 @@
|
|
|
50
50
|
"build:node": "tsc -p ./src/node/tsconfig.json",
|
|
51
51
|
"build:web": "tsc -p ./src/web/tsconfig.json",
|
|
52
52
|
"build": "npm run build:core && npm run build:node && npm run build:web",
|
|
53
|
-
|
|
54
|
-
"
|
|
55
|
-
"
|
|
56
|
-
|
|
57
|
-
"start": "npm test"
|
|
53
|
+
|
|
54
|
+
"test": "vitest",
|
|
55
|
+
"coverage": "vitest run --coverage"
|
|
58
56
|
},
|
|
59
57
|
"devDependencies": {
|
|
60
|
-
"@types/
|
|
61
|
-
"
|
|
62
|
-
"
|
|
63
|
-
"
|
|
58
|
+
"@types/jsdom": "^21.1.7",
|
|
59
|
+
"jsdom": "^27.0.0",
|
|
60
|
+
"typescript": "^5.9.2",
|
|
61
|
+
"vitest": "^3.2.4"
|
|
64
62
|
}
|
|
65
63
|
}
|
package/vitest.config.ts
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { defineConfig } from "vitest/config";
|
|
2
|
+
|
|
3
|
+
export default defineConfig({
|
|
4
|
+
test: {
|
|
5
|
+
globals: true,
|
|
6
|
+
projects: [
|
|
7
|
+
{
|
|
8
|
+
test: {
|
|
9
|
+
name: "core",
|
|
10
|
+
environment: "node",
|
|
11
|
+
include: ["test/core/**/*.test.ts"],
|
|
12
|
+
},
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
test: {
|
|
16
|
+
name: "web",
|
|
17
|
+
environment: "jsdom",
|
|
18
|
+
include: ["test/web/**/*.test.ts"],
|
|
19
|
+
},
|
|
20
|
+
},
|
|
21
|
+
],
|
|
22
|
+
},
|
|
23
|
+
});
|