improve types
This commit is contained in:
		
							parent
							
								
									466c083233
								
							
						
					
					
						commit
						db3724cf33
					
				
					 4 changed files with 19 additions and 15 deletions
				
			
		|  | @ -5,6 +5,8 @@ import { ApiError } from './error'; | ||||||
| import { SchemaType } from '@/misc/schema'; | import { SchemaType } from '@/misc/schema'; | ||||||
| import { AccessToken } from '../../models/entities/access-token'; | import { AccessToken } from '../../models/entities/access-token'; | ||||||
| 
 | 
 | ||||||
|  | type NonOptional<T> = T extends undefined ? never : T; | ||||||
|  | 
 | ||||||
| type SimpleUserInfo = { | type SimpleUserInfo = { | ||||||
| 	id: ILocalUser['id']; | 	id: ILocalUser['id']; | ||||||
| 	host: ILocalUser['host']; | 	host: ILocalUser['host']; | ||||||
|  | @ -17,11 +19,12 @@ type SimpleUserInfo = { | ||||||
| 	isSilenced: ILocalUser['isSilenced']; | 	isSilenced: ILocalUser['isSilenced']; | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| // TODO: defaultが設定されている場合はその型も考慮する
 |  | ||||||
| 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 Function | ||||||
| 		? ReturnType<NonNullable<T['params']>[P]['transform']> | 		? ReturnType<NonNullable<T['params']>[P]['transform']> | ||||||
| 		: ReturnType<NonNullable<T['params']>[P]['validator']['get']>[0]; | 		: NonNullable<T['params']>[P]['default'] extends null | number | string | ||||||
|  | 			? NonOptional<ReturnType<NonNullable<T['params']>[P]['validator']['get']>[0]> | ||||||
|  | 			: ReturnType<NonNullable<T['params']>[P]['validator']['get']>[0]; | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| export type Response = Record<string, any> | void; | export type Response = Record<string, any> | void; | ||||||
|  |  | ||||||
|  | @ -6,6 +6,7 @@ import { DriveFiles, GalleryPosts } from '../../../../../models'; | ||||||
| import { genId } from '../../../../../misc/gen-id'; | import { genId } from '../../../../../misc/gen-id'; | ||||||
| import { GalleryPost } from '../../../../../models/entities/gallery-post'; | import { GalleryPost } from '../../../../../models/entities/gallery-post'; | ||||||
| import { ApiError } from '../../../error'; | import { ApiError } from '../../../error'; | ||||||
|  | import { DriveFile } from '@/models/entities/drive-file'; | ||||||
| 
 | 
 | ||||||
| export const meta = { | export const meta = { | ||||||
| 	tags: ['gallery'], | 	tags: ['gallery'], | ||||||
|  | @ -55,7 +56,7 @@ export default define(meta, async (ps, user) => { | ||||||
| 			id: fileId, | 			id: fileId, | ||||||
| 			userId: user.id | 			userId: user.id | ||||||
| 		}) | 		}) | ||||||
| 	))).filter(file => file != null); | 	))).filter((file): file is DriveFile => file != null); | ||||||
| 
 | 
 | ||||||
| 	if (files.length === 0) { | 	if (files.length === 0) { | ||||||
| 		throw new Error(); | 		throw new Error(); | ||||||
|  |  | ||||||
|  | @ -5,6 +5,7 @@ import { ID } from '../../../../../misc/cafy-id'; | ||||||
| import { DriveFiles, GalleryPosts } from '../../../../../models'; | import { DriveFiles, GalleryPosts } from '../../../../../models'; | ||||||
| import { GalleryPost } from '../../../../../models/entities/gallery-post'; | import { GalleryPost } from '../../../../../models/entities/gallery-post'; | ||||||
| import { ApiError } from '../../../error'; | import { ApiError } from '../../../error'; | ||||||
|  | import { DriveFile } from '@/models/entities/drive-file'; | ||||||
| 
 | 
 | ||||||
| export const meta = { | export const meta = { | ||||||
| 	tags: ['gallery'], | 	tags: ['gallery'], | ||||||
|  | @ -58,7 +59,7 @@ export default define(meta, async (ps, user) => { | ||||||
| 			id: fileId, | 			id: fileId, | ||||||
| 			userId: user.id | 			userId: user.id | ||||||
| 		}) | 		}) | ||||||
| 	))).filter(file => file != null); | 	))).filter((file): file is DriveFile => file != null); | ||||||
| 
 | 
 | ||||||
| 	if (files.length === 0) { | 	if (files.length === 0) { | ||||||
| 		throw new Error(); | 		throw new Error(); | ||||||
|  |  | ||||||
|  | @ -93,7 +93,7 @@ export default abstract class Chart<T extends Record<string, any>> { | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	@autobind | 	@autobind | ||||||
| 	private static convertFlattenColumnsToObject(x: Record<string, number>) { | 	private static convertFlattenColumnsToObject(x: Record<string, any>): Record<string, any> { | ||||||
| 		const obj = {} as any; | 		const obj = {} as any; | ||||||
| 		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
 | ||||||
|  | @ -285,8 +285,7 @@ export default abstract class Chart<T extends Record<string, any>> { | ||||||
| 		const latest = await this.getLatestLog(group); | 		const latest = await this.getLatestLog(group); | ||||||
| 
 | 
 | ||||||
| 		if (latest != null) { | 		if (latest != null) { | ||||||
| 			const obj = Chart.convertFlattenColumnsToObject( | 			const obj = Chart.convertFlattenColumnsToObject(latest) as T; | ||||||
| 				latest as Record<string, any>); |  | ||||||
| 
 | 
 | ||||||
| 			// 空ログデータを作成
 | 			// 空ログデータを作成
 | ||||||
| 			data = this.getNewLog(obj); | 			data = this.getNewLog(obj); | ||||||
|  | @ -474,13 +473,13 @@ export default abstract class Chart<T extends Record<string, any>> { | ||||||
| 				const log = logs.find(l => isTimeSame(new Date(l.date * 1000), current)); | 				const log = logs.find(l => isTimeSame(new Date(l.date * 1000), current)); | ||||||
| 
 | 
 | ||||||
| 				if (log) { | 				if (log) { | ||||||
| 					const data = Chart.convertFlattenColumnsToObject(log as Record<string, any>); | 					const data = Chart.convertFlattenColumnsToObject(log); | ||||||
| 					chart.unshift(Chart.countUniqueFields(data)); | 					chart.unshift(Chart.countUniqueFields(data) as T); | ||||||
| 				} else { | 				} else { | ||||||
| 					// 隙間埋め
 | 					// 隙間埋め
 | ||||||
| 					const latest = logs.find(l => isTimeBefore(new Date(l.date * 1000), current)); | 					const latest = logs.find(l => isTimeBefore(new Date(l.date * 1000), current)); | ||||||
| 					const data = latest ? Chart.convertFlattenColumnsToObject(latest as Record<string, any>) : null; | 					const data = latest ? Chart.convertFlattenColumnsToObject(latest) as T : null; | ||||||
| 					chart.unshift(Chart.countUniqueFields(this.getNewLog(data))); | 					chart.unshift(Chart.countUniqueFields(this.getNewLog(data)) as T); | ||||||
| 				} | 				} | ||||||
| 			} | 			} | ||||||
| 		} else if (span === 'day') { | 		} else if (span === 'day') { | ||||||
|  | @ -497,14 +496,14 @@ export default abstract class Chart<T extends Record<string, any>> { | ||||||
| 
 | 
 | ||||||
| 				if (log) { | 				if (log) { | ||||||
| 					if (logsForEachDays[currentDayIndex]) { | 					if (logsForEachDays[currentDayIndex]) { | ||||||
| 						logsForEachDays[currentDayIndex].unshift(Chart.convertFlattenColumnsToObject(log)); | 						logsForEachDays[currentDayIndex].unshift(Chart.convertFlattenColumnsToObject(log) as T); | ||||||
| 					} else { | 					} else { | ||||||
| 						logsForEachDays[currentDayIndex] = [Chart.convertFlattenColumnsToObject(log)]; | 						logsForEachDays[currentDayIndex] = [Chart.convertFlattenColumnsToObject(log) as T]; | ||||||
| 					} | 					} | ||||||
| 				} else { | 				} else { | ||||||
| 					// 隙間埋め
 | 					// 隙間埋め
 | ||||||
| 					const latest = logs.find(l => isTimeBefore(new Date(l.date * 1000), current)); | 					const latest = logs.find(l => isTimeBefore(new Date(l.date * 1000), current)); | ||||||
| 					const data = latest ? Chart.convertFlattenColumnsToObject(latest as Record<string, any>) : null; | 					const data = latest ? Chart.convertFlattenColumnsToObject(latest) as T : null; | ||||||
| 					const newLog = this.getNewLog(data); | 					const newLog = this.getNewLog(data); | ||||||
| 					if (logsForEachDays[currentDayIndex]) { | 					if (logsForEachDays[currentDayIndex]) { | ||||||
| 						logsForEachDays[currentDayIndex].unshift(newLog); | 						logsForEachDays[currentDayIndex].unshift(newLog); | ||||||
|  | @ -516,7 +515,7 @@ export default abstract class Chart<T extends Record<string, any>> { | ||||||
| 
 | 
 | ||||||
| 			for (const logs of logsForEachDays) { | 			for (const logs of logsForEachDays) { | ||||||
| 				const log = this.aggregate(logs); | 				const log = this.aggregate(logs); | ||||||
| 				chart.unshift(Chart.countUniqueFields(log)); | 				chart.unshift(Chart.countUniqueFields(log) as T); | ||||||
| 			} | 			} | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue