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> = {
|
||||
[K in keyof T]: Promise<T[K]> | T[K];
|
||||
};
|
||||
|
||||
export async function awaitAll<T>(obj: Promiseable<T>): Promise<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 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 { publishInternalEvent } from "@/services/stream.js";
|
||||
import define from "../../define.js";
|
||||
import type { EmojiModPerm } from "@/models/entities/user.js";
|
||||
import { unsafeCast } from "@/prelude/unsafe-cast.js";
|
||||
|
||||
export const meta = {
|
||||
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, {
|
||||
emojiModPerm: _emojiModPerm,
|
||||
emojiModPerm: unsafeCast<EmojiModPerm>(ps.emojiModPerm),
|
||||
});
|
||||
|
||||
publishInternalEvent("userChangeModeratorState", {
|
||||
|
|
Loading…
Reference in a new issue