misskey-js側にinterfaceを置いて型エラーを解消
This commit is contained in:
@@ -5,7 +5,7 @@
|
||||
|
||||
import { EventEmitter } from 'eventemitter3';
|
||||
import * as Misskey from 'misskey-js';
|
||||
import type { Channels, StreamEvents } from 'misskey-js';
|
||||
import type { Channels, StreamEvents, IStream, IChannelConnection } from 'misskey-js';
|
||||
|
||||
type AnyOf<T extends Record<any, any>> = T[keyof T];
|
||||
type OmitFirst<T extends any[]> = T extends [any, ...infer R] ? R : never;
|
||||
@@ -13,7 +13,7 @@ type OmitFirst<T extends any[]> = T extends [any, ...infer R] ? R : never;
|
||||
/**
|
||||
* Websocket無効化時に使うStreamのモック(なにもしない)
|
||||
*/
|
||||
export class StreamMock extends EventEmitter<StreamEvents> {
|
||||
export class StreamMock extends EventEmitter<StreamEvents> implements IStream {
|
||||
public readonly state = 'initializing';
|
||||
|
||||
constructor(...args: ConstructorParameters<typeof Misskey.Stream>) {
|
||||
@@ -57,12 +57,18 @@ export class StreamMock extends EventEmitter<StreamEvents> {
|
||||
}
|
||||
}
|
||||
|
||||
class ChannelConnectionMock<Channel extends AnyOf<Channels> = any> extends EventEmitter<Channel['events']> {
|
||||
class ChannelConnectionMock<Channel extends AnyOf<Channels> = any> extends EventEmitter<Channel['events']> implements IChannelConnection<Channel> {
|
||||
public id = '';
|
||||
public name?: string; // for debug
|
||||
public inCount = 0; // for debug
|
||||
public outCount = 0; // for debug
|
||||
public channel: string;
|
||||
|
||||
constructor(stream: StreamMock, ...args: OmitFirst<ConstructorParameters<typeof Misskey.ChannelConnection<Channel>>>) {
|
||||
constructor(stream: IStream, ...args: OmitFirst<ConstructorParameters<typeof Misskey.ChannelConnection<Channel>>>) {
|
||||
super();
|
||||
// do nothing
|
||||
|
||||
this.channel = args[0];
|
||||
this.name = args[1];
|
||||
}
|
||||
|
||||
public send<T extends keyof Channel['receives']>(type: T, body: Channel['receives'][T]): void {
|
||||
|
@@ -13,16 +13,16 @@ import { isEmbedPage } from '@/scripts/embed-page.js';
|
||||
// heart beat interval in ms
|
||||
const HEART_BEAT_INTERVAL = 1000 * 60;
|
||||
|
||||
let stream: Misskey.Stream | null = null;
|
||||
let timeoutHeartBeat: ReturnType<typeof setTimeout> | null = null;
|
||||
let stream: Misskey.IStream | null = null;
|
||||
let timeoutHeartBeat: number | null = null;
|
||||
let lastHeartbeatCall = 0;
|
||||
|
||||
export function useStream(): Misskey.Stream {
|
||||
export function useStream(): Misskey.IStream {
|
||||
if (stream) return stream;
|
||||
|
||||
// TODO: No Websocketモードもここで判定
|
||||
if (isEmbedPage()) {
|
||||
stream = markRaw(new StreamMock(wsOrigin, null) as unknown as Misskey.Stream);
|
||||
stream = markRaw(new StreamMock(wsOrigin, null));
|
||||
return stream;
|
||||
} else {
|
||||
stream = markRaw(new Misskey.Stream(wsOrigin, $i ? {
|
||||
|
Reference in New Issue
Block a user