mirror of
https://example.com
synced 2024-11-22 12:06:39 +09:00
chore: add utility for unsafe type casting
This commit is contained in:
parent
c44121c575
commit
290d9fcbc0
3 changed files with 10 additions and 6 deletions
|
@ -1,10 +1,12 @@
|
||||||
|
import { unsafeCast } from "./unsafe-cast.js";
|
||||||
|
|
||||||
export type Promiseable<T> = {
|
export type Promiseable<T> = {
|
||||||
[K in keyof T]: Promise<T[K]> | T[K];
|
[K in keyof T]: Promise<T[K]> | T[K];
|
||||||
};
|
};
|
||||||
|
|
||||||
export async function awaitAll<T>(obj: Promiseable<T>): Promise<T> {
|
export async function awaitAll<T>(obj: Promiseable<T>): Promise<T> {
|
||||||
const target = {} as T;
|
const target = {} as T;
|
||||||
const keys = Object.keys(obj) as unknown as (keyof T)[];
|
const keys = unsafeCast<(keyof T)[]>(Object.keys(obj));
|
||||||
const values = Object.values(obj) as any[];
|
const values = Object.values(obj) as any[];
|
||||||
|
|
||||||
const resolvedValues = await Promise.all(
|
const resolvedValues = await Promise.all(
|
||||||
|
|
4
packages/backend/src/prelude/unsafe-cast.ts
Normal file
4
packages/backend/src/prelude/unsafe-cast.ts
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
// unsafe type cast
|
||||||
|
export function unsafeCast<T>(val: unknown): T {
|
||||||
|
return val as T;
|
||||||
|
}
|
|
@ -1,6 +1,8 @@
|
||||||
import { Users } from "@/models/index.js";
|
import { Users } from "@/models/index.js";
|
||||||
import { publishInternalEvent } from "@/services/stream.js";
|
import { publishInternalEvent } from "@/services/stream.js";
|
||||||
import define from "../../define.js";
|
import define from "../../define.js";
|
||||||
|
import type { EmojiModPerm } from "@/models/entities/user.js";
|
||||||
|
import { unsafeCast } from "@/prelude/unsafe-cast.js";
|
||||||
|
|
||||||
export const meta = {
|
export const meta = {
|
||||||
tags: ["admin"],
|
tags: ["admin"],
|
||||||
|
@ -31,12 +33,8 @@ export default define(meta, paramDef, async (ps) => {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
const _emojiModPerm =
|
|
||||||
(ps.emojiModPerm as "unauthorized" | "add" | "mod" | "full") ??
|
|
||||||
"unauthorized";
|
|
||||||
|
|
||||||
await Users.update(user.id, {
|
await Users.update(user.id, {
|
||||||
emojiModPerm: _emojiModPerm,
|
emojiModPerm: unsafeCast<EmojiModPerm>(ps.emojiModPerm),
|
||||||
});
|
});
|
||||||
|
|
||||||
publishInternalEvent("userChangeModeratorState", {
|
publishInternalEvent("userChangeModeratorState", {
|
||||||
|
|
Loading…
Reference in a new issue