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 CHANGED
@@ -1,3 +1,6 @@
1
+ ## 0.6.0 (27.09.2025)
2
+ - Added modules [promise](), [engine](), [parent-node](), [element]().
3
+
1
4
  ## 0.5.0 (19.09.2025)
2
5
  - Added [timespan]() module.
3
6
  - Improved module separation.
package/README.md CHANGED
@@ -3,12 +3,3 @@
3
3
  Adaptive library for JS/TS development environments
4
4
 
5
5
  [Change log](./CHANGELOG.md)
6
-
7
- ```powershell
8
- npm install
9
- npm link
10
- cd test
11
- npm link adaptive-extender
12
- cd ../
13
- npm start
14
- ```
@@ -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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"}
@@ -1 +1,5 @@
1
1
  export * from "../core/index.js";
2
+ export * from "./promise.js";
3
+ export * from "./engine.js";
4
+ export * from "./parent-node.js";
5
+ export * from "./element.js";
package/dist/web/index.js CHANGED
@@ -1,3 +1,7 @@
1
1
  "use strict";
2
2
  export * from "../core/index.js";
3
+ export * from "./promise.js";
4
+ export * from "./engine.js";
5
+ export * from "./parent-node.js";
6
+ export * from "./element.js";
3
7
  //# sourceMappingURL=index.js.map
@@ -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.5.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
- "pretest": "npm run build",
55
- "test": "mocha",
56
-
57
- "start": "npm test"
53
+
54
+ "test": "vitest",
55
+ "coverage": "vitest run --coverage"
58
56
  },
59
57
  "devDependencies": {
60
- "@types/mocha": "^10.0.10",
61
- "mocha": "^11.7.1",
62
- "ts-node": "^10.9.2",
63
- "typescript": "^5.9.2"
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
  }
@@ -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
+ });