wip
This commit is contained in:
parent
f4652ec4ac
commit
5db28922d0
|
@ -1,7 +1,8 @@
|
||||||
import { EntityRepository, Repository } from 'typeorm';
|
import { EntityRepository, Repository } from 'typeorm';
|
||||||
import { Emoji } from '@/models/entities/emoji';
|
import { Emoji } from '@/models/entities/emoji';
|
||||||
|
import { Resolved } from '@/prelude/types';
|
||||||
|
|
||||||
export type PackedEmoji = FIXME;
|
export type PackedEmoji = Resolved<ReturnType<EmojiRepository['pack']>>;
|
||||||
|
|
||||||
@EntityRepository(Emoji)
|
@EntityRepository(Emoji)
|
||||||
export class EmojiRepository extends Repository<Emoji> {
|
export class EmojiRepository extends Repository<Emoji> {
|
||||||
|
|
|
@ -2,8 +2,9 @@ import { User } from '@/models/entities/user';
|
||||||
import { EntityRepository, Repository } from 'typeorm';
|
import { EntityRepository, Repository } from 'typeorm';
|
||||||
import { Users } from '../../../index';
|
import { Users } from '../../../index';
|
||||||
import { ReversiGame } from '@/models/entities/games/reversi/game';
|
import { ReversiGame } from '@/models/entities/games/reversi/game';
|
||||||
|
import { Resolved } from '@/prelude/types';
|
||||||
|
|
||||||
export type PackedReversiGame = FIXME;
|
export type PackedReversiGame = Resolved<ReturnType<ReversiGameRepository['pack']>>;
|
||||||
|
|
||||||
@EntityRepository(ReversiGame)
|
@EntityRepository(ReversiGame)
|
||||||
export class ReversiGameRepository extends Repository<ReversiGame> {
|
export class ReversiGameRepository extends Repository<ReversiGame> {
|
||||||
|
|
|
@ -3,8 +3,9 @@ import { ReversiMatching } from '@/models/entities/games/reversi/matching';
|
||||||
import { Users } from '../../../index';
|
import { Users } from '../../../index';
|
||||||
import { awaitAll } from '@/prelude/await-all';
|
import { awaitAll } from '@/prelude/await-all';
|
||||||
import { User } from '@/models/entities/user';
|
import { User } from '@/models/entities/user';
|
||||||
|
import { Resolved } from '@/prelude/types';
|
||||||
|
|
||||||
export type PackedReversiMatching = FIXME;
|
export type PackedReversiMatching = Resolved<ReturnType<ReversiMatchingRepository['pack']>>;
|
||||||
|
|
||||||
@EntityRepository(ReversiMatching)
|
@EntityRepository(ReversiMatching)
|
||||||
export class ReversiMatchingRepository extends Repository<ReversiMatching> {
|
export class ReversiMatchingRepository extends Repository<ReversiMatching> {
|
||||||
|
|
|
@ -1,10 +1,13 @@
|
||||||
import { EntityRepository, Repository } from 'typeorm';
|
import { EntityRepository, Repository } from 'typeorm';
|
||||||
import { Signin } from '@/models/entities/signin';
|
import { Signin } from '@/models/entities/signin';
|
||||||
|
import { Resolved } from '@/prelude/types';
|
||||||
|
|
||||||
|
export type PackedSignin = Resolved<ReturnType<SigninRepository['pack']>>;
|
||||||
|
|
||||||
@EntityRepository(Signin)
|
@EntityRepository(Signin)
|
||||||
export class SigninRepository extends Repository<Signin> {
|
export class SigninRepository extends Repository<Signin> {
|
||||||
public async pack(
|
public async pack(
|
||||||
src: any,
|
src: Signin,
|
||||||
) {
|
) {
|
||||||
return src;
|
return src;
|
||||||
}
|
}
|
||||||
|
|
1
src/prelude/types.ts
Normal file
1
src/prelude/types.ts
Normal file
|
@ -0,0 +1 @@
|
||||||
|
export type Resolved<P extends Promise<any>> = P extends Promise<infer R> ? R : never;
|
|
@ -23,6 +23,8 @@ import { ReversiGame } from '@/models/entities/games/reversi/game';
|
||||||
import { AbuseUserReport } from '@/models/entities/abuse-user-report';
|
import { AbuseUserReport } from '@/models/entities/abuse-user-report';
|
||||||
import { PackedEmoji } from '@/models/repositories/emoji';
|
import { PackedEmoji } from '@/models/repositories/emoji';
|
||||||
import StreamTypes from 'misskey-js/built/streaming.types';
|
import StreamTypes from 'misskey-js/built/streaming.types';
|
||||||
|
import { PackedSignin } from '@/models/repositories/signin';
|
||||||
|
import { Page } from '@/models/entities/page';
|
||||||
|
|
||||||
// 辞書(interface or type)から{ type, body }ユニオンを定義
|
// 辞書(interface or type)から{ type, body }ユニオンを定義
|
||||||
// https://stackoverflow.com/questions/49311989/can-i-infer-the-type-of-a-value-using-extends-keyof-type
|
// https://stackoverflow.com/questions/49311989/can-i-infer-the-type-of-a-value-using-extends-keyof-type
|
||||||
|
@ -43,7 +45,7 @@ export interface InternalStreamTypes {
|
||||||
|
|
||||||
export interface BroadcastTypes {
|
export interface BroadcastTypes {
|
||||||
emojiAdded: PackedEmoji;
|
emojiAdded: PackedEmoji;
|
||||||
};
|
}
|
||||||
|
|
||||||
export interface UserStreamTypes {
|
export interface UserStreamTypes {
|
||||||
terminate: {};
|
terminate: {};
|
||||||
|
@ -66,23 +68,42 @@ export interface MainStreamTypes {
|
||||||
followed: PackedUser;
|
followed: PackedUser;
|
||||||
unfollow: PackedUser;
|
unfollow: PackedUser;
|
||||||
meUpdated: PackedUser;
|
meUpdated: PackedUser;
|
||||||
pageEvent: Payload<StreamTypes.Channels['main']['events']['pageEvent']>;
|
pageEvent: {
|
||||||
urlUploadFinished: Payload<StreamTypes.Channels['main']['events']['urlUploadFinished']>;
|
pageId: Page['id'];
|
||||||
readAllNotifications: never;
|
event: string;
|
||||||
unreadNotification: never;
|
var: any;
|
||||||
unreadMention: never;
|
userId: User['id'];
|
||||||
readAllUnreadMentions: never;
|
user: PackedUser;
|
||||||
unreadSpecifiedNote: never;
|
};
|
||||||
readAllUnreadSpecifiedNotes: never;
|
urlUploadFinished: {
|
||||||
readAllMessagingMessages: never;
|
marker?: string | null;
|
||||||
unreadMessagingMessage: never;
|
file: PackedDriveFile;
|
||||||
readAllAntennas: never;
|
};
|
||||||
unreadAntenna: never;
|
readAllNotifications: undefined;
|
||||||
readAllAnnouncements: never;
|
unreadNotification: PackedNotification;
|
||||||
readAllChannels: never;
|
unreadMention: Note['id'];
|
||||||
unreadChannel: never;
|
readAllUnreadMentions: undefined;
|
||||||
myTokenRegenerated: never;
|
unreadSpecifiedNote: Note['id'];
|
||||||
|
readAllUnreadSpecifiedNotes: undefined;
|
||||||
|
readAllMessagingMessages: undefined;
|
||||||
|
messagingMessage: PackedMessagingMessage;
|
||||||
|
unreadMessagingMessage: PackedMessagingMessage;
|
||||||
|
readAllAntennas: undefined;
|
||||||
|
unreadAntenna: Antenna;
|
||||||
|
readAllAnnouncements: undefined;
|
||||||
|
readAllChannels: undefined;
|
||||||
|
unreadChannel: Note['id'];
|
||||||
|
myTokenRegenerated: undefined;
|
||||||
|
reversiNoInvites: undefined;
|
||||||
reversiInvited: PackedReversiMatching;
|
reversiInvited: PackedReversiMatching;
|
||||||
|
signin: PackedSignin;
|
||||||
|
registryUpdated: {
|
||||||
|
scope?: string[];
|
||||||
|
key: string;
|
||||||
|
value: any | null;
|
||||||
|
};
|
||||||
|
driveFileCreated: PackedDriveFile;
|
||||||
|
readAntenna: Antenna;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface DriveStreamTypes {
|
export interface DriveStreamTypes {
|
||||||
|
@ -207,7 +228,7 @@ export interface AdminStreamTypes {
|
||||||
targetUserId: User['id'],
|
targetUserId: User['id'],
|
||||||
reporterId: User['id'],
|
reporterId: User['id'],
|
||||||
comment: string;
|
comment: string;
|
||||||
}
|
};
|
||||||
}
|
}
|
||||||
//#endregion
|
//#endregion
|
||||||
|
|
||||||
|
@ -272,7 +293,7 @@ interface StreamMessages {
|
||||||
admin: {
|
admin: {
|
||||||
name: `adminStream:${User['id']}`;
|
name: `adminStream:${User['id']}`;
|
||||||
spec: EventUnionFromDictionary<AdminStreamTypes>;
|
spec: EventUnionFromDictionary<AdminStreamTypes>;
|
||||||
}
|
};
|
||||||
// and notesStream (specにPackedNoteを突っ込むとなぜかバグる)
|
// and notesStream (specにPackedNoteを突っ込むとなぜかバグる)
|
||||||
}
|
}
|
||||||
//#endregion
|
//#endregion
|
||||||
|
|
|
@ -7,7 +7,7 @@ import { UserGroup } from '@/models/entities/user-group';
|
||||||
import config from '@/config/index';
|
import config from '@/config/index';
|
||||||
import { Antenna } from '@/models/entities/antenna';
|
import { Antenna } from '@/models/entities/antenna';
|
||||||
import { Channel } from '@/models/entities/channel';
|
import { Channel } from '@/models/entities/channel';
|
||||||
import { BroadcastTypes, Channels, InternalStreamTypes, UserStreamTypes } from '@/server/api/stream/types';
|
import { BroadcastTypes, Channels, InternalStreamTypes, MainStreamTypes, UserStreamTypes } from '@/server/api/stream/types';
|
||||||
|
|
||||||
class Publisher {
|
class Publisher {
|
||||||
private publish = (channel: Channels, type: string | null, value?: any): void => {
|
private publish = (channel: Channels, type: string | null, value?: any): void => {
|
||||||
|
@ -25,7 +25,7 @@ class Publisher {
|
||||||
this.publish('internal', type, typeof value === 'undefined' ? null : value);
|
this.publish('internal', type, typeof value === 'undefined' ? null : value);
|
||||||
}
|
}
|
||||||
|
|
||||||
public publishUserEvent = <K extends keyof UserStreamTypes>(userId: User['id'], type: K, value: UserStreamTypes[K]): void => {
|
public publishUserEvent = <K extends keyof UserStreamTypes>(userId: User['id'], type: K, value?: UserStreamTypes[K]): void => {
|
||||||
this.publish(`user:${userId}`, type, typeof value === 'undefined' ? null : value);
|
this.publish(`user:${userId}`, type, typeof value === 'undefined' ? null : value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -33,7 +33,7 @@ class Publisher {
|
||||||
this.publish('broadcast', type, typeof value === 'undefined' ? null : value);
|
this.publish('broadcast', type, typeof value === 'undefined' ? null : value);
|
||||||
}
|
}
|
||||||
|
|
||||||
public publishMainStream = (userId: User['id'], type: string, value?: any): void => {
|
public publishMainStream = <K extends keyof MainStreamTypes>(userId: User['id'], type: K, value?: MainStreamTypes[K]): void => {
|
||||||
this.publish(`mainStream:${userId}`, type, typeof value === 'undefined' ? null : value);
|
this.publish(`mainStream:${userId}`, type, typeof value === 'undefined' ? null : value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue