Improve error handling of packaging functions
This commit is contained in:
		
							parent
							
								
									401d0b1298
								
							
						
					
					
						commit
						baf9b65801
					
				
					 6 changed files with 28 additions and 12 deletions
				
			
		| 
						 | 
					@ -1,7 +1,7 @@
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	"name": "misskey",
 | 
						"name": "misskey",
 | 
				
			||||||
	"author": "syuilo <i@syuilo.com>",
 | 
						"author": "syuilo <i@syuilo.com>",
 | 
				
			||||||
	"version": "9.5.0",
 | 
						"version": "9.6.0",
 | 
				
			||||||
	"clientVersion": "1.0.10090",
 | 
						"clientVersion": "1.0.10090",
 | 
				
			||||||
	"codename": "nighthike",
 | 
						"codename": "nighthike",
 | 
				
			||||||
	"main": "./built/index.js",
 | 
						"main": "./built/index.js",
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -127,6 +127,15 @@ export async function deleteDriveFile(driveFile: string | mongo.ObjectID | IDriv
 | 
				
			||||||
	});
 | 
						});
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export const packMany = async (
 | 
				
			||||||
 | 
						files: any[],
 | 
				
			||||||
 | 
						options?: {
 | 
				
			||||||
 | 
							detail: boolean
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					) => {
 | 
				
			||||||
 | 
						return (await Promise.all(files.map(f => pack(f, options)))).filter(x => x != null);
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Pack a drive file for API response
 | 
					 * Pack a drive file for API response
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
| 
						 | 
					@ -155,7 +164,11 @@ export const pack = (
 | 
				
			||||||
		_file = deepcopy(file);
 | 
							_file = deepcopy(file);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (!_file) return reject('invalid file arg.');
 | 
						// (データベースの欠損などで)ファイルがデータベース上に見つからなかったとき
 | 
				
			||||||
 | 
						if (_file == null) {
 | 
				
			||||||
 | 
							console.warn(`in packaging driveFile: driveFile not found on database: ${_file}`);
 | 
				
			||||||
 | 
							return null;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// rendered target
 | 
						// rendered target
 | 
				
			||||||
	let _target: any = {};
 | 
						let _target: any = {};
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -7,7 +7,7 @@ import { IUser, pack as packUser } from './user';
 | 
				
			||||||
import { pack as packApp } from './app';
 | 
					import { pack as packApp } from './app';
 | 
				
			||||||
import PollVote, { deletePollVote } from './poll-vote';
 | 
					import PollVote, { deletePollVote } from './poll-vote';
 | 
				
			||||||
import Reaction, { deleteNoteReaction } from './note-reaction';
 | 
					import Reaction, { deleteNoteReaction } from './note-reaction';
 | 
				
			||||||
import { pack as packFile, IDriveFile } from './drive-file';
 | 
					import { packMany as packFileMany, IDriveFile } from './drive-file';
 | 
				
			||||||
import NoteWatching, { deleteNoteWatching } from './note-watching';
 | 
					import NoteWatching, { deleteNoteWatching } from './note-watching';
 | 
				
			||||||
import NoteReaction from './note-reaction';
 | 
					import NoteReaction from './note-reaction';
 | 
				
			||||||
import Favorite, { deleteFavorite } from './favorite';
 | 
					import Favorite, { deleteFavorite } from './favorite';
 | 
				
			||||||
| 
						 | 
					@ -309,9 +309,7 @@ export const pack = async (
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Populate files
 | 
						// Populate files
 | 
				
			||||||
	_note.files = Promise.all((_note.fileIds || []).map((fileId: mongo.ObjectID) =>
 | 
						_note.files = packFileMany(_note.fileIds || []);
 | 
				
			||||||
		packFile(fileId)
 | 
					 | 
				
			||||||
	));
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// 後方互換性のため
 | 
						// 後方互換性のため
 | 
				
			||||||
	_note.mediaIds = _note.fileIds;
 | 
						_note.mediaIds = _note.fileIds;
 | 
				
			||||||
| 
						 | 
					@ -380,6 +378,12 @@ export const pack = async (
 | 
				
			||||||
	// resolve promises in _note object
 | 
						// resolve promises in _note object
 | 
				
			||||||
	_note = await rap(_note);
 | 
						_note = await rap(_note);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// (データベースの欠損などで)ユーザーがデータベース上に見つからなかったとき
 | 
				
			||||||
 | 
						if (_note.user == null) {
 | 
				
			||||||
 | 
							console.warn(`in packaging note: note user not found on database: note(${_note.id})`);
 | 
				
			||||||
 | 
							return null;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (_note.user.isCat && _note.text) {
 | 
						if (_note.user.isCat && _note.text) {
 | 
				
			||||||
		_note.text = _note.text.replace(/な/g, 'にゃ').replace(/ナ/g, 'ニャ').replace(/ナ/g, 'ニャ');
 | 
							_note.text = _note.text.replace(/な/g, 'にゃ').replace(/ナ/g, 'ニャ').replace(/ナ/g, 'ニャ');
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -361,7 +361,7 @@ export const pack = (
 | 
				
			||||||
		_user = deepcopy(user);
 | 
							_user = deepcopy(user);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// ユーザーがデータベース上に見つからなかったとき
 | 
						// (データベースの欠損などで)ユーザーがデータベース上に見つからなかったとき
 | 
				
			||||||
	if (_user == null) {
 | 
						if (_user == null) {
 | 
				
			||||||
		console.warn(`user not found on database: ${user}`);
 | 
							console.warn(`user not found on database: ${user}`);
 | 
				
			||||||
		return null;
 | 
							return null;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,5 +1,5 @@
 | 
				
			||||||
import $ from 'cafy'; import ID from '../../../../misc/cafy-id';
 | 
					import $ from 'cafy'; import ID from '../../../../misc/cafy-id';
 | 
				
			||||||
import DriveFile, { pack } from '../../../../models/drive-file';
 | 
					import DriveFile, { packMany } from '../../../../models/drive-file';
 | 
				
			||||||
import { ILocalUser } from '../../../../models/user';
 | 
					import { ILocalUser } from '../../../../models/user';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export const meta = {
 | 
					export const meta = {
 | 
				
			||||||
| 
						 | 
					@ -73,6 +73,5 @@ export default async (params: any, user: ILocalUser) => {
 | 
				
			||||||
		});
 | 
							});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Serialize
 | 
						// Serialize
 | 
				
			||||||
	const _files = await Promise.all(files.map(file => pack(file)));
 | 
						return await packMany(files);
 | 
				
			||||||
	return _files;
 | 
					 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,5 +1,5 @@
 | 
				
			||||||
import $ from 'cafy'; import ID from '../../../../misc/cafy-id';
 | 
					import $ from 'cafy'; import ID from '../../../../misc/cafy-id';
 | 
				
			||||||
import DriveFile, { pack } from '../../../../models/drive-file';
 | 
					import DriveFile, { packMany } from '../../../../models/drive-file';
 | 
				
			||||||
import { ILocalUser } from '../../../../models/user';
 | 
					import { ILocalUser } from '../../../../models/user';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export const meta = {
 | 
					export const meta = {
 | 
				
			||||||
| 
						 | 
					@ -63,5 +63,5 @@ export default (params: any, user: ILocalUser) => new Promise(async (res, rej) =
 | 
				
			||||||
		});
 | 
							});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Serialize
 | 
						// Serialize
 | 
				
			||||||
	res(await Promise.all(files.map(file => pack(file))));
 | 
						res(await packMany(files));
 | 
				
			||||||
});
 | 
					});
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue