fix lint errors
This commit is contained in:
		
							parent
							
								
									84df0714d8
								
							
						
					
					
						commit
						b9eaf906e7
					
				
					 22 changed files with 55 additions and 49 deletions
				
			
		|  | @ -22,6 +22,7 @@ module.exports = { | ||||||
| 		'eol-last': ['error', 'always'], | 		'eol-last': ['error', 'always'], | ||||||
| 		'semi': ['error', 'always'], | 		'semi': ['error', 'always'], | ||||||
| 		'quotes': ['warn', 'single'], | 		'quotes': ['warn', 'single'], | ||||||
|  | 		'comma-dangle': ['warn', 'always-multiline'], | ||||||
| 		'keyword-spacing': ['error', { | 		'keyword-spacing': ['error', { | ||||||
| 			'before': true, | 			'before': true, | ||||||
| 			'after': true, | 			'after': true, | ||||||
|  | @ -44,6 +45,8 @@ module.exports = { | ||||||
| 		'no-multi-spaces': ['warn'], | 		'no-multi-spaces': ['warn'], | ||||||
| 		'no-control-regex': ['warn'], | 		'no-control-regex': ['warn'], | ||||||
| 		'no-empty': ['warn'], | 		'no-empty': ['warn'], | ||||||
|  | 		'no-inner-declarations': ['off'], | ||||||
|  | 		'no-sparse-arrays': ['off'], | ||||||
| 		'@typescript-eslint/no-var-requires': ['warn'], | 		'@typescript-eslint/no-var-requires': ['warn'], | ||||||
| 		'@typescript-eslint/no-inferrable-types': ['warn'], | 		'@typescript-eslint/no-inferrable-types': ['warn'], | ||||||
| 		'@typescript-eslint/no-empty-function': ['off'], | 		'@typescript-eslint/no-empty-function': ['off'], | ||||||
|  |  | ||||||
							
								
								
									
										2
									
								
								packages/backend/@types/jsrsasign.d.ts
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								packages/backend/@types/jsrsasign.d.ts
									
										
									
									
										vendored
									
									
								
							|  | @ -171,7 +171,7 @@ declare module 'jsrsasign' { | ||||||
| 
 | 
 | ||||||
| 		public static getTLVbyList(h: ASN1S, currentIndex: Idx<ASN1ObjectString>, nthList: Mutable<Nth[]>, checkingTag?: string): ASN1TLV; | 		public static getTLVbyList(h: ASN1S, currentIndex: Idx<ASN1ObjectString>, nthList: Mutable<Nth[]>, checkingTag?: string): ASN1TLV; | ||||||
| 
 | 
 | ||||||
| 		// tslint:disable-next-line:bool-param-default
 | 		// eslint:disable-next-line:bool-param-default
 | ||||||
| 		public static getVbyList(h: ASN1S, currentIndex: Idx<ASN1ObjectString>, nthList: Mutable<Nth[]>, checkingTag?: string, removeUnusedbits?: boolean): ASN1V; | 		public static getVbyList(h: ASN1S, currentIndex: Idx<ASN1ObjectString>, nthList: Mutable<Nth[]>, checkingTag?: string, removeUnusedbits?: boolean): ASN1V; | ||||||
| 
 | 
 | ||||||
| 		public static hextooidstr(hex: ASN1OIDV): OID; | 		public static hextooidstr(hex: ASN1OIDV): OID; | ||||||
|  |  | ||||||
|  | @ -48,9 +48,10 @@ export function fromHtml(html: string, hashtagNames?: string[]): string | null { | ||||||
| 		if (!treeAdapter.isElementNode(node)) return; | 		if (!treeAdapter.isElementNode(node)) return; | ||||||
| 
 | 
 | ||||||
| 		switch (node.nodeName) { | 		switch (node.nodeName) { | ||||||
| 			case 'br': | 			case 'br': { | ||||||
| 				text += '\n'; | 				text += '\n'; | ||||||
| 				break; | 				break; | ||||||
|  | 			} | ||||||
| 
 | 
 | ||||||
| 			case 'a': | 			case 'a': | ||||||
| 			{ | 			{ | ||||||
|  |  | ||||||
|  | @ -1,5 +1,6 @@ | ||||||
| import { Context } from 'cafy'; | import { Context } from 'cafy'; | ||||||
| 
 | 
 | ||||||
|  | // eslint-disable-next-line @typescript-eslint/ban-types
 | ||||||
| export class ID<Maybe = string> extends Context<string | (Maybe extends {} ? string : Maybe)> { | export class ID<Maybe = string> extends Context<string | (Maybe extends {} ? string : Maybe)> { | ||||||
| 	public readonly name = 'ID'; | 	public readonly name = 'ID'; | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -56,7 +56,7 @@ export function genAvatar(seed: string, stream: WriteStream): Promise<void> { | ||||||
| 	// 1*n (filled by false)
 | 	// 1*n (filled by false)
 | ||||||
| 	const center: boolean[] = new Array(n).fill(false); | 	const center: boolean[] = new Array(n).fill(false); | ||||||
| 
 | 
 | ||||||
| 	// tslint:disable-next-line:prefer-for-of
 | 	// eslint:disable-next-line:prefer-for-of
 | ||||||
| 	for (let x = 0; x < side.length; x++) { | 	for (let x = 0; x < side.length; x++) { | ||||||
| 		for (let y = 0; y < side[x].length; y++) { | 		for (let y = 0; y < side[x].length; y++) { | ||||||
| 			side[x][y] = rand(3) === 0; | 			side[x][y] = rand(3) === 0; | ||||||
|  |  | ||||||
|  | @ -87,7 +87,7 @@ export function groupOn<T, S>(f: (x: T) => S, xs: T[]): T[][] { | ||||||
| export function groupByX<T>(collections: T[], keySelector: (x: T) => string) { | export function groupByX<T>(collections: T[], keySelector: (x: T) => string) { | ||||||
| 	return collections.reduce((obj: Record<string, T[]>, item: T) => { | 	return collections.reduce((obj: Record<string, T[]>, item: T) => { | ||||||
| 		const key = keySelector(item); | 		const key = keySelector(item); | ||||||
| 		if (!obj.hasOwnProperty(key)) { | 		if (!Object.prototype.hasOwnProperty.call(obj, key)) { | ||||||
| 			obj[key] = []; | 			obj[key] = []; | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -1,4 +1,4 @@ | ||||||
| export function query(obj: {}): string { | export function query(obj: Record<string, unknown>): string { | ||||||
| 	const params = Object.entries(obj) | 	const params = Object.entries(obj) | ||||||
| 		.filter(([, v]) => Array.isArray(v) ? v.length : v !== undefined) | 		.filter(([, v]) => Array.isArray(v) ? v.length : v !== undefined) | ||||||
| 		.reduce((a, [k, v]) => (a[k] = v, a), {} as Record<string, any>); | 		.reduce((a, [k, v]) => (a[k] = v, a), {} as Record<string, any>); | ||||||
|  |  | ||||||
|  | @ -7,7 +7,7 @@ import { MoreThan, Not, IsNull } from 'typeorm'; | ||||||
| 
 | 
 | ||||||
| const logger = queueLogger.createSubLogger('clean-remote-files'); | const logger = queueLogger.createSubLogger('clean-remote-files'); | ||||||
| 
 | 
 | ||||||
| export default async function cleanRemoteFiles(job: Bull.Job<{}>, done: any): Promise<void> { | export default async function cleanRemoteFiles(job: Bull.Job<Record<string, unknown>>, done: any): Promise<void> { | ||||||
| 	logger.info(`Deleting cached remote files...`); | 	logger.info(`Deleting cached remote files...`); | ||||||
| 
 | 
 | ||||||
| 	let deletedCount = 0; | 	let deletedCount = 0; | ||||||
|  |  | ||||||
|  | @ -3,9 +3,9 @@ import { resyncCharts } from './resync-charts'; | ||||||
| 
 | 
 | ||||||
| const jobs = { | const jobs = { | ||||||
| 	resyncCharts, | 	resyncCharts, | ||||||
| } as Record<string, Bull.ProcessCallbackFunction<{}> | Bull.ProcessPromiseFunction<{}>>; | } as Record<string, Bull.ProcessCallbackFunction<Record<string, unknown>> | Bull.ProcessPromiseFunction<Record<string, unknown>>>; | ||||||
| 
 | 
 | ||||||
| export default function(dbQueue: Bull.Queue<{}>) { | export default function(dbQueue: Bull.Queue<Record<string, unknown>>) { | ||||||
| 	for (const [k, v] of Object.entries(jobs)) { | 	for (const [k, v] of Object.entries(jobs)) { | ||||||
| 		dbQueue.process(k, v); | 		dbQueue.process(k, v); | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|  | @ -5,7 +5,7 @@ import { driveChart, notesChart, usersChart } from '@/services/chart/index'; | ||||||
| 
 | 
 | ||||||
| const logger = queueLogger.createSubLogger('resync-charts'); | const logger = queueLogger.createSubLogger('resync-charts'); | ||||||
| 
 | 
 | ||||||
| export default async function resyncCharts(job: Bull.Job<{}>, done: any): Promise<void> { | export async function resyncCharts(job: Bull.Job<Record<string, unknown>>, done: any): Promise<void> { | ||||||
| 	logger.info(`Resync charts...`); | 	logger.info(`Resync charts...`); | ||||||
| 
 | 
 | ||||||
| 	// TODO: ユーザーごとのチャートも更新する
 | 	// TODO: ユーザーごとのチャートも更新する
 | ||||||
|  |  | ||||||
|  | @ -2,7 +2,7 @@ import config from '@/config/index'; | ||||||
| import { initialize as initializeQueue } from './initialize'; | import { initialize as initializeQueue } from './initialize'; | ||||||
| import { DeliverJobData, InboxJobData, DbJobData, ObjectStorageJobData } from './types'; | import { DeliverJobData, InboxJobData, DbJobData, ObjectStorageJobData } from './types'; | ||||||
| 
 | 
 | ||||||
| export const systemQueue = initializeQueue<{}>('system'); | export const systemQueue = initializeQueue<Record<string, unknown>>('system'); | ||||||
| export const deliverQueue = initializeQueue<DeliverJobData>('deliver', config.deliverJobPerSec || 128); | export const deliverQueue = initializeQueue<DeliverJobData>('deliver', config.deliverJobPerSec || 128); | ||||||
| export const inboxQueue = initializeQueue<InboxJobData>('inbox', config.inboxJobPerSec || 16); | export const inboxQueue = initializeQueue<InboxJobData>('inbox', config.inboxJobPerSec || 16); | ||||||
| export const dbQueue = initializeQueue<DbJobData>('db'); | export const dbQueue = initializeQueue<DbJobData>('db'); | ||||||
|  |  | ||||||
|  | @ -33,7 +33,7 @@ export type DbUserImportJobData = { | ||||||
| 	fileId: DriveFile['id']; | 	fileId: DriveFile['id']; | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| export type ObjectStorageJobData = ObjectStorageFileJobData | {}; | export type ObjectStorageJobData = ObjectStorageFileJobData | Record<string, unknown>; | ||||||
| 
 | 
 | ||||||
| export type ObjectStorageFileJobData = { | export type ObjectStorageFileJobData = { | ||||||
| 	key: string; | 	key: string; | ||||||
|  |  | ||||||
|  | @ -274,7 +274,7 @@ export async function createPerson(uri: string, resolver?: Resolver): Promise<Us | ||||||
|  * @param resolver Resolver |  * @param resolver Resolver | ||||||
|  * @param hint Hint of Person object (この値が正当なPersonの場合、Remote resolveをせずに更新に利用します) |  * @param hint Hint of Person object (この値が正当なPersonの場合、Remote resolveをせずに更新に利用します) | ||||||
|  */ |  */ | ||||||
| export async function updatePerson(uri: string, resolver?: Resolver | null, hint?: object): Promise<void> { | export async function updatePerson(uri: string, resolver?: Resolver | null, hint?: Record<string, unknown>): Promise<void> { | ||||||
| 	if (typeof uri !== 'string') throw new Error('uri is not string'); | 	if (typeof uri !== 'string') throw new Error('uri is not string'); | ||||||
| 
 | 
 | ||||||
| 	// URIがこのサーバーを指しているならスキップ
 | 	// URIがこのサーバーを指しているならスキップ
 | ||||||
|  |  | ||||||
|  | @ -6,7 +6,7 @@ | ||||||
|  * @param last URL of last page (optional) |  * @param last URL of last page (optional) | ||||||
|  * @param orderedItems attached objects (optional) |  * @param orderedItems attached objects (optional) | ||||||
|  */ |  */ | ||||||
| export default function(id: string | null, totalItems: any, first?: string, last?: string, orderedItems?: object) { | export default function(id: string | null, totalItems: any, first?: string, last?: string, orderedItems?: Record<string, unknown>) { | ||||||
| 	const page: any = { | 	const page: any = { | ||||||
| 		id, | 		id, | ||||||
| 		type: 'OrderedCollection', | 		type: 'OrderedCollection', | ||||||
|  |  | ||||||
|  | @ -20,7 +20,7 @@ type SimpleUserInfo = { | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| type Params<T extends IEndpointMeta> = { | type Params<T extends IEndpointMeta> = { | ||||||
| 	[P in keyof T['params']]: NonNullable<T['params']>[P]['transform'] extends Function | 	[P in keyof T['params']]: NonNullable<T['params']>[P]['transform'] extends () => any | ||||||
| 		? ReturnType<NonNullable<T['params']>[P]['transform']> | 		? ReturnType<NonNullable<T['params']>[P]['transform']> | ||||||
| 		: NonNullable<T['params']>[P]['default'] extends null | number | string | 		: NonNullable<T['params']>[P]['default'] extends null | number | string | ||||||
| 			? NonOptional<ReturnType<NonNullable<T['params']>[P]['validator']['get']>[0]> | 			? NonOptional<ReturnType<NonNullable<T['params']>[P]['validator']['get']>[0]> | ||||||
|  | @ -30,7 +30,7 @@ type Params<T extends IEndpointMeta> = { | ||||||
| export type Response = Record<string, any> | void; | export type Response = Record<string, any> | void; | ||||||
| 
 | 
 | ||||||
| type executor<T extends IEndpointMeta> = | type executor<T extends IEndpointMeta> = | ||||||
| 	(params: Params<T>, user: T['requireCredential'] extends true ? SimpleUserInfo : SimpleUserInfo | null, token: AccessToken | null, file?: any, cleanup?: Function) => | 	(params: Params<T>, user: T['requireCredential'] extends true ? SimpleUserInfo : SimpleUserInfo | null, token: AccessToken | null, file?: any, cleanup?: () => any) => | ||||||
| 		Promise<T['res'] extends undefined ? Response : SchemaType<NonNullable<T['res']>>>; | 		Promise<T['res'] extends undefined ? Response : SchemaType<NonNullable<T['res']>>>; | ||||||
| 
 | 
 | ||||||
| export default function <T extends IEndpointMeta>(meta: T, cb: executor<T>) | export default function <T extends IEndpointMeta>(meta: T, cb: executor<T>) | ||||||
|  | @ -74,7 +74,7 @@ function getParams<T extends IEndpointMeta>(defs: T, params: any): [Params<T>, A | ||||||
| 			}); | 			}); | ||||||
| 			return true; | 			return true; | ||||||
| 		} else { | 		} else { | ||||||
| 			if (v === undefined && def.hasOwnProperty('default')) { | 			if (v === undefined && Object.prototype.hasOwnProperty.call(def, 'default')) { | ||||||
| 				x[k] = def.default; | 				x[k] = def.default; | ||||||
| 			} else { | 			} else { | ||||||
| 				x[k] = v; | 				x[k] = v; | ||||||
|  |  | ||||||
|  | @ -69,7 +69,7 @@ export default define(meta, async (ps, me) => { | ||||||
| 		throw new ApiError(meta.errors.accessDenied); | 		throw new ApiError(meta.errors.accessDenied); | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	// tslint:disable-next-line:no-unnecessary-initializer
 | 	// eslint:disable-next-line:no-unnecessary-initializer
 | ||||||
| 	let banner = undefined; | 	let banner = undefined; | ||||||
| 	if (ps.bannerId != null) { | 	if (ps.bannerId != null) { | ||||||
| 		banner = await DriveFiles.findOne({ | 		banner = await DriveFiles.findOne({ | ||||||
|  |  | ||||||
|  | @ -75,7 +75,7 @@ export default define(meta, async (ps, user) => { | ||||||
| 
 | 
 | ||||||
| 	const flags = attestation.authData[32]; | 	const flags = attestation.authData[32]; | ||||||
| 
 | 
 | ||||||
| 	// tslint:disable-next-line:no-bitwise
 | 	// eslint:disable-next-line:no-bitwise
 | ||||||
| 	if (!(flags & 1)) { | 	if (!(flags & 1)) { | ||||||
| 		throw new Error('user not present'); | 		throw new Error('user not present'); | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|  | @ -10,16 +10,16 @@ const logger = new Logger('limiter'); | ||||||
| export default (endpoint: IEndpoint, user: User) => new Promise<void>((ok, reject) => { | export default (endpoint: IEndpoint, user: User) => new Promise<void>((ok, reject) => { | ||||||
| 	const limitation = endpoint.meta.limit!; | 	const limitation = endpoint.meta.limit!; | ||||||
| 
 | 
 | ||||||
| 	const key = limitation.hasOwnProperty('key') | 	const key = Object.prototype.hasOwnProperty.call(limitation, 'key') | ||||||
| 		? limitation.key | 		? limitation.key | ||||||
| 		: endpoint.name; | 		: endpoint.name; | ||||||
| 
 | 
 | ||||||
| 	const hasShortTermLimit = | 	const hasShortTermLimit = | ||||||
| 		limitation.hasOwnProperty('minInterval'); | 		Object.prototype.hasOwnProperty.call(limitation, 'minInterval'); | ||||||
| 
 | 
 | ||||||
| 	const hasLongTermLimit = | 	const hasLongTermLimit = | ||||||
| 		limitation.hasOwnProperty('duration') && | 		Object.prototype.hasOwnProperty.call(limitation, 'duration') && | ||||||
| 		limitation.hasOwnProperty('max'); | 		Object.prototype.hasOwnProperty.call(limitation, 'max'); | ||||||
| 
 | 
 | ||||||
| 	if (hasShortTermLimit) { | 	if (hasShortTermLimit) { | ||||||
| 		min(); | 		min(); | ||||||
|  |  | ||||||
|  | @ -19,7 +19,7 @@ export default class extends Channel { | ||||||
| 	@autobind | 	@autobind | ||||||
| 	public async onMessage(type: string, body: any) { | 	public async onMessage(type: string, body: any) { | ||||||
| 		switch (type) { | 		switch (type) { | ||||||
| 			case 'ping': | 			case 'ping': { | ||||||
| 				if (body.id == null) return; | 				if (body.id == null) return; | ||||||
| 				const matching = await ReversiMatchings.findOne({ | 				const matching = await ReversiMatchings.findOne({ | ||||||
| 					parentId: this.user!.id, | 					parentId: this.user!.id, | ||||||
|  | @ -28,6 +28,7 @@ export default class extends Channel { | ||||||
| 				if (matching == null) return; | 				if (matching == null) return; | ||||||
| 				publishMainStream(matching.childId, 'reversiInvited', await ReversiMatchings.pack(matching, { id: matching.childId })); | 				publishMainStream(matching.childId, 'reversiInvited', await ReversiMatchings.pack(matching, { id: matching.childId })); | ||||||
| 				break; | 				break; | ||||||
|  | 			} | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -31,7 +31,7 @@ export interface BroadcastTypes { | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| export interface UserStreamTypes { | export interface UserStreamTypes { | ||||||
| 	terminate: {}; | 	terminate: Record<string, unknown>; | ||||||
| 	followChannel: Channel; | 	followChannel: Channel; | ||||||
| 	unfollowChannel: Channel; | 	unfollowChannel: Channel; | ||||||
| 	updateUserProfile: UserProfile; | 	updateUserProfile: UserProfile; | ||||||
|  |  | ||||||
|  | @ -70,7 +70,7 @@ export default abstract class Chart<T extends Record<string, any>> { | ||||||
| 
 | 
 | ||||||
| 	@autobind | 	@autobind | ||||||
| 	private static convertSchemaToFlatColumnDefinitions(schema: SimpleSchema) { | 	private static convertSchemaToFlatColumnDefinitions(schema: SimpleSchema) { | ||||||
| 		const columns = {} as any; | 		const columns = {} as Record<string, unknown>; | ||||||
| 		const flatColumns = (x: Obj, path?: string) => { | 		const flatColumns = (x: Obj, path?: string) => { | ||||||
| 			for (const [k, v] of Object.entries(x)) { | 			for (const [k, v] of Object.entries(x)) { | ||||||
| 				const p = path ? `${path}${this.columnDot}${k}` : k; | 				const p = path ? `${path}${this.columnDot}${k}` : k; | ||||||
|  | @ -93,8 +93,8 @@ export default abstract class Chart<T extends Record<string, any>> { | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	@autobind | 	@autobind | ||||||
| 	private static convertFlattenColumnsToObject(x: Record<string, any>): Record<string, any> { | 	private static convertFlattenColumnsToObject(x: Record<string, unknown>): Record<string, unknown> { | ||||||
| 		const obj = {} as any; | 		const obj = {} as Record<string, unknown>; | ||||||
| 		for (const k of Object.keys(x).filter(k => k.startsWith(Chart.columnPrefix))) { | 		for (const k of Object.keys(x).filter(k => k.startsWith(Chart.columnPrefix))) { | ||||||
| 			// now k is ___x_y_z
 | 			// now k is ___x_y_z
 | ||||||
| 			const path = k.substr(Chart.columnPrefix.length).split(Chart.columnDot).join('.'); | 			const path = k.substr(Chart.columnPrefix.length).split(Chart.columnDot).join('.'); | ||||||
|  | @ -104,7 +104,7 @@ export default abstract class Chart<T extends Record<string, any>> { | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	@autobind | 	@autobind | ||||||
| 	private static convertObjectToFlattenColumns(x: Record<string, any>) { | 	private static convertObjectToFlattenColumns(x: Record<string, unknown>) { | ||||||
| 		const columns = {} as Record<string, number | unknown[]>; | 		const columns = {} as Record<string, number | unknown[]>; | ||||||
| 		const flatten = (x: Obj, path?: string) => { | 		const flatten = (x: Obj, path?: string) => { | ||||||
| 			for (const [k, v] of Object.entries(x)) { | 			for (const [k, v] of Object.entries(x)) { | ||||||
|  | @ -121,9 +121,9 @@ export default abstract class Chart<T extends Record<string, any>> { | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	@autobind | 	@autobind | ||||||
| 	private static countUniqueFields(x: Record<string, any>) { | 	private static countUniqueFields(x: Record<string, unknown>) { | ||||||
| 		const exec = (x: Obj) => { | 		const exec = (x: Obj) => { | ||||||
| 			const res = {} as Record<string, any>; | 			const res = {} as Record<string, unknown>; | ||||||
| 			for (const [k, v] of Object.entries(x)) { | 			for (const [k, v] of Object.entries(x)) { | ||||||
| 				if (typeof v === 'object' && !Array.isArray(v)) { | 				if (typeof v === 'object' && !Array.isArray(v)) { | ||||||
| 					res[k] = exec(v); | 					res[k] = exec(v); | ||||||
|  | @ -140,7 +140,7 @@ export default abstract class Chart<T extends Record<string, any>> { | ||||||
| 
 | 
 | ||||||
| 	@autobind | 	@autobind | ||||||
| 	private static convertQuery(diff: Record<string, number | unknown[]>) { | 	private static convertQuery(diff: Record<string, number | unknown[]>) { | ||||||
| 		const query: Record<string, Function> = {}; | 		const query: Record<string, () => string> = {}; | ||||||
| 
 | 
 | ||||||
| 		for (const [k, v] of Object.entries(diff)) { | 		for (const [k, v] of Object.entries(diff)) { | ||||||
| 			if (typeof v === 'number') { | 			if (typeof v === 'number') { | ||||||
|  | @ -337,7 +337,7 @@ export default abstract class Chart<T extends Record<string, any>> { | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	@autobind | 	@autobind | ||||||
| 	public async save() { | 	public async save(): Promise<void> { | ||||||
| 		if (this.buffer.length === 0) { | 		if (this.buffer.length === 0) { | ||||||
| 			logger.info(`${this.name}: Write skipped`); | 			logger.info(`${this.name}: Write skipped`); | ||||||
| 			return; | 			return; | ||||||
|  |  | ||||||
|  | @ -37,74 +37,74 @@ class Publisher { | ||||||
| 			channel: channel, | 			channel: channel, | ||||||
| 			message: message | 			message: message | ||||||
| 		})); | 		})); | ||||||
| 	} | 	}; | ||||||
| 
 | 
 | ||||||
| 	public publishInternalEvent = <K extends keyof InternalStreamTypes>(type: K, value?: InternalStreamTypes[K]): void => { | 	public publishInternalEvent = <K extends keyof InternalStreamTypes>(type: K, value?: InternalStreamTypes[K]): void => { | ||||||
| 		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); | ||||||
| 	} | 	}; | ||||||
| 
 | 
 | ||||||
| 	public publishBroadcastStream = <K extends keyof BroadcastTypes>(type: K, value?: BroadcastTypes[K]): void => { | 	public publishBroadcastStream = <K extends keyof BroadcastTypes>(type: K, value?: BroadcastTypes[K]): void => { | ||||||
| 		this.publish('broadcast', type, typeof value === 'undefined' ? null : value); | 		this.publish('broadcast', type, typeof value === 'undefined' ? null : value); | ||||||
| 	} | 	}; | ||||||
| 
 | 
 | ||||||
| 	public publishMainStream = <K extends keyof MainStreamTypes>(userId: User['id'], type: K, value?: MainStreamTypes[K]): 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); | ||||||
| 	} | 	}; | ||||||
| 
 | 
 | ||||||
| 	public publishDriveStream = <K extends keyof DriveStreamTypes>(userId: User['id'], type: K, value?: DriveStreamTypes[K]): void => { | 	public publishDriveStream = <K extends keyof DriveStreamTypes>(userId: User['id'], type: K, value?: DriveStreamTypes[K]): void => { | ||||||
| 		this.publish(`driveStream:${userId}`, type, typeof value === 'undefined' ? null : value); | 		this.publish(`driveStream:${userId}`, type, typeof value === 'undefined' ? null : value); | ||||||
| 	} | 	}; | ||||||
| 
 | 
 | ||||||
| 	public publishNoteStream = <K extends keyof NoteStreamTypes>(noteId: Note['id'], type: K, value?: NoteStreamTypes[K]): void => { | 	public publishNoteStream = <K extends keyof NoteStreamTypes>(noteId: Note['id'], type: K, value?: NoteStreamTypes[K]): void => { | ||||||
| 		this.publish(`noteStream:${noteId}`, type, { | 		this.publish(`noteStream:${noteId}`, type, { | ||||||
| 			id: noteId, | 			id: noteId, | ||||||
| 			body: value | 			body: value | ||||||
| 		}); | 		}); | ||||||
| 	} | 	}; | ||||||
| 
 | 
 | ||||||
| 	public publishChannelStream = <K extends keyof ChannelStreamTypes>(channelId: Channel['id'], type: K, value?: ChannelStreamTypes[K]): void => { | 	public publishChannelStream = <K extends keyof ChannelStreamTypes>(channelId: Channel['id'], type: K, value?: ChannelStreamTypes[K]): void => { | ||||||
| 		this.publish(`channelStream:${channelId}`, type, typeof value === 'undefined' ? null : value); | 		this.publish(`channelStream:${channelId}`, type, typeof value === 'undefined' ? null : value); | ||||||
| 	} | 	}; | ||||||
| 
 | 
 | ||||||
| 	public publishUserListStream = <K extends keyof UserListStreamTypes>(listId: UserList['id'], type: K, value?: UserListStreamTypes[K]): void => { | 	public publishUserListStream = <K extends keyof UserListStreamTypes>(listId: UserList['id'], type: K, value?: UserListStreamTypes[K]): void => { | ||||||
| 		this.publish(`userListStream:${listId}`, type, typeof value === 'undefined' ? null : value); | 		this.publish(`userListStream:${listId}`, type, typeof value === 'undefined' ? null : value); | ||||||
| 	} | 	}; | ||||||
| 
 | 
 | ||||||
| 	public publishAntennaStream = <K extends keyof AntennaStreamTypes>(antennaId: Antenna['id'], type: K, value?: AntennaStreamTypes[K]): void => { | 	public publishAntennaStream = <K extends keyof AntennaStreamTypes>(antennaId: Antenna['id'], type: K, value?: AntennaStreamTypes[K]): void => { | ||||||
| 		this.publish(`antennaStream:${antennaId}`, type, typeof value === 'undefined' ? null : value); | 		this.publish(`antennaStream:${antennaId}`, type, typeof value === 'undefined' ? null : value); | ||||||
| 	} | 	}; | ||||||
| 
 | 
 | ||||||
| 	public publishMessagingStream = <K extends keyof MessagingStreamTypes>(userId: User['id'], otherpartyId: User['id'], type: K, value?: MessagingStreamTypes[K]): void => { | 	public publishMessagingStream = <K extends keyof MessagingStreamTypes>(userId: User['id'], otherpartyId: User['id'], type: K, value?: MessagingStreamTypes[K]): void => { | ||||||
| 		this.publish(`messagingStream:${userId}-${otherpartyId}`, type, typeof value === 'undefined' ? null : value); | 		this.publish(`messagingStream:${userId}-${otherpartyId}`, type, typeof value === 'undefined' ? null : value); | ||||||
| 	} | 	}; | ||||||
| 
 | 
 | ||||||
| 	public publishGroupMessagingStream = <K extends keyof GroupMessagingStreamTypes>(groupId: UserGroup['id'], type: K, value?: GroupMessagingStreamTypes[K]): void => { | 	public publishGroupMessagingStream = <K extends keyof GroupMessagingStreamTypes>(groupId: UserGroup['id'], type: K, value?: GroupMessagingStreamTypes[K]): void => { | ||||||
| 		this.publish(`messagingStream:${groupId}`, type, typeof value === 'undefined' ? null : value); | 		this.publish(`messagingStream:${groupId}`, type, typeof value === 'undefined' ? null : value); | ||||||
| 	} | 	}; | ||||||
| 
 | 
 | ||||||
| 	public publishMessagingIndexStream = <K extends keyof MessagingIndexStreamTypes>(userId: User['id'], type: K, value?: MessagingIndexStreamTypes[K]): void => { | 	public publishMessagingIndexStream = <K extends keyof MessagingIndexStreamTypes>(userId: User['id'], type: K, value?: MessagingIndexStreamTypes[K]): void => { | ||||||
| 		this.publish(`messagingIndexStream:${userId}`, type, typeof value === 'undefined' ? null : value); | 		this.publish(`messagingIndexStream:${userId}`, type, typeof value === 'undefined' ? null : value); | ||||||
| 	} | 	}; | ||||||
| 
 | 
 | ||||||
| 	public publishReversiStream = <K extends keyof ReversiStreamTypes>(userId: User['id'], type: K, value?: ReversiStreamTypes[K]): void => { | 	public publishReversiStream = <K extends keyof ReversiStreamTypes>(userId: User['id'], type: K, value?: ReversiStreamTypes[K]): void => { | ||||||
| 		this.publish(`reversiStream:${userId}`, type, typeof value === 'undefined' ? null : value); | 		this.publish(`reversiStream:${userId}`, type, typeof value === 'undefined' ? null : value); | ||||||
| 	} | 	}; | ||||||
| 
 | 
 | ||||||
| 	public publishReversiGameStream = <K extends keyof ReversiGameStreamTypes>(gameId: ReversiGame['id'], type: K, value?: ReversiGameStreamTypes[K]): void => { | 	public publishReversiGameStream = <K extends keyof ReversiGameStreamTypes>(gameId: ReversiGame['id'], type: K, value?: ReversiGameStreamTypes[K]): void => { | ||||||
| 		this.publish(`reversiGameStream:${gameId}`, type, typeof value === 'undefined' ? null : value); | 		this.publish(`reversiGameStream:${gameId}`, type, typeof value === 'undefined' ? null : value); | ||||||
| 	} | 	}; | ||||||
| 
 | 
 | ||||||
| 	public publishNotesStream = (note: Packed<'Note'>): void => { | 	public publishNotesStream = (note: Packed<'Note'>): void => { | ||||||
| 		this.publish('notesStream', null, note); | 		this.publish('notesStream', null, note); | ||||||
| 	} | 	}; | ||||||
| 
 | 
 | ||||||
| 	public publishAdminStream = <K extends keyof AdminStreamTypes>(userId: User['id'], type: K, value?: AdminStreamTypes[K]): void => { | 	public publishAdminStream = <K extends keyof AdminStreamTypes>(userId: User['id'], type: K, value?: AdminStreamTypes[K]): void => { | ||||||
| 		this.publish(`adminStream:${userId}`, type, typeof value === 'undefined' ? null : value); | 		this.publish(`adminStream:${userId}`, type, typeof value === 'undefined' ? null : value); | ||||||
| 	} | 	}; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| const publisher = new Publisher(); | const publisher = new Publisher(); | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue