Skip to content

Commit 2fdc089

Browse files
committed
init type updates
1 parent 98c0785 commit 2fdc089

23 files changed

Lines changed: 442 additions & 2 deletions

src/webpage/app.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,7 @@ <h2 id="serverName" class="ellipsis">Server Name</h2>
147147
</body>
148148
<script src="/index.js" type="module"></script>
149149
<!-- <script src="/service.js" --->
150+
<!-- <script src="/typeChecker/chekerIndex.js" --->
150151
<!-- <script src="/audio/worklet/worklet.js" --->
151152
<!-- <script src="/utils/dirrWorker.js" --->
152153
</html>

src/webpage/index.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,25 @@ import "./oauth2/auth.js";
1818
import "./audio/page.js";
1919
import "./404.js";
2020
import {Channel} from "./channel.js";
21+
import type * as C from "./typeChecker/chekerIndex.js";
2122

2223
if (window.location.pathname === "/app") {
2324
window.location.pathname = "/channels/@me";
2425
}
2526
export interface CustomHTMLDivElement extends HTMLDivElement {
2627
markdown: MarkDown;
2728
}
29+
declare global {
30+
interface Window {
31+
checker?: typeof C.Check;
32+
}
33+
}
34+
if (localStorage.getItem("checkTypes")) {
35+
const i = (await import(
36+
"/typeChecker/chekerIndex.js" as "./typeChecker/chekerIndex.js"
37+
)) as typeof C;
38+
window.checker = i.Check;
39+
}
2840
if (window.location.pathname.startsWith("/channels")) {
2941
let templateID = new URLSearchParams(window.location.search).get("templateID");
3042
await I18n.done;

src/webpage/localuser.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -722,6 +722,11 @@ class Localuser {
722722
}
723723
conectionChange = () => {};
724724
async handleEvent(temp: wsjson) {
725+
try {
726+
window.checker?.checkEvent(temp);
727+
} catch (e) {
728+
console.error(e);
729+
}
725730
if (temp.d._trace) this.handleTrace(temp.d._trace);
726731
if (getDeveloperSettings().gatewayLogging) console.debug(temp);
727732
if (temp.s) this.lastSequence = temp.s;
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
import {ArrayChecker} from "./checkers/array";
2+
import {BoolChecker} from "./checkers/bool";
3+
import {Never} from "./checkers/never";
4+
import {NumberChecker} from "./checkers/number";
5+
import {ObjectChecker} from "./checkers/object";
6+
import {StringChecker} from "./checkers/string";
7+
8+
export abstract class TypeChecker {
9+
abstract check(obj: unknown): void;
10+
static resolve(r: resolveable): TypeChecker {
11+
if (r instanceof TypeChecker) return r;
12+
if (typeof r === "string" || r instanceof RegExp) {
13+
return new StringChecker(r);
14+
} else if (r === String) {
15+
return new StringChecker();
16+
} else if (r === Boolean) {
17+
return new BoolChecker();
18+
} else if (r === Number) {
19+
return new NumberChecker();
20+
} else if (typeof r === "number") {
21+
return new NumberChecker(r);
22+
} else if (r instanceof Array) {
23+
return new ArrayChecker(r);
24+
} else if (r instanceof Object) {
25+
return new ObjectChecker(r as {[key: string]: resolveable});
26+
} else {
27+
return new Never();
28+
}
29+
}
30+
}
31+
32+
export type resolveable =
33+
| typeof String
34+
| string
35+
| number
36+
| typeof Number
37+
| RegExp
38+
| resolveable[]
39+
| {[key: string]: resolveable}
40+
| TypeChecker
41+
| typeof Boolean;
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import {TypeChecker} from "../basetype";
2+
3+
export class Any extends TypeChecker {
4+
constructor() {
5+
super();
6+
}
7+
check() {
8+
return;
9+
}
10+
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
import {resolveable, TypeChecker} from "../basetype";
2+
3+
export class ArrayChecker extends TypeChecker {
4+
arr: TypeChecker | TypeChecker[];
5+
constructor(arr: resolveable | resolveable[]) {
6+
super();
7+
if (arr instanceof Array) {
8+
this.arr = arr.map((_) => TypeChecker.resolve(_));
9+
} else {
10+
this.arr = TypeChecker.resolve(arr);
11+
}
12+
}
13+
check(obj: unknown) {
14+
if (!(obj instanceof Array)) throw new Error(`${obj} is not of type array`);
15+
if (this.arr instanceof Array) {
16+
if (this.arr.length !== obj.length) throw new Error(`${obj} does not match array schema`);
17+
for (let i = 0; i < obj.length; i++) {
18+
this.arr[i].check(obj[i]);
19+
}
20+
} else {
21+
for (const elm of obj) {
22+
this.arr.check(elm);
23+
}
24+
}
25+
}
26+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import {TypeChecker} from "../basetype";
2+
3+
export class BoolChecker extends TypeChecker {
4+
constructor() {
5+
super();
6+
}
7+
check(obj: unknown): void {
8+
if (typeof obj !== "boolean") throw new Error(`${obj} is not a bool`);
9+
}
10+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import {TypeChecker} from "../basetype";
2+
3+
export class Never extends TypeChecker {
4+
constructor() {
5+
super();
6+
}
7+
check(): void {
8+
throw new Error(`never`);
9+
}
10+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import {TypeChecker} from "../basetype";
2+
3+
export class NullChecker extends TypeChecker {
4+
constructor() {
5+
super();
6+
}
7+
check(obj: unknown): void {
8+
if (obj !== null) throw new Error(`${obj} is not null`);
9+
}
10+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import {resolveable, TypeChecker} from "../basetype";
2+
3+
export class Nullish extends TypeChecker {
4+
checker: TypeChecker;
5+
constructor(check: resolveable) {
6+
super();
7+
this.checker = TypeChecker.resolve(check);
8+
}
9+
check(obj: unknown) {
10+
if (obj === null) return;
11+
this.checker.check(obj);
12+
}
13+
}

0 commit comments

Comments
 (0)