-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdomUtils.js
More file actions
35 lines (29 loc) · 810 Bytes
/
domUtils.js
File metadata and controls
35 lines (29 loc) · 810 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
class DOMQueryError extends Error {
/** @param {string} message */
constructor(message) {
super(message);
this.name = "DOMQueryError";
}
}
class DOMTypeError extends Error {
/** @param {string} message */
constructor(message) {
super(message);
this.name = "DOMTypeError";
}
}
/**
* @template {HTMLElement} T
* @param {string} selector
* @param {{ new (...args: any[]) => T }} instance
* @returns {T}
*/
export function querySelector_s(selector, instance) {
const element = document.querySelector(selector);
if (element === null) {
throw new DOMQueryError(`Cannot find element by selector: "${selector}"`);
} else if (!(element instanceof instance)) {
throw new DOMTypeError(`"${selector}": Expected <${instance.name}>, but <${element.constructor.name}>`);
}
return element;
}