strictNullChecks (#4666)

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip
This commit is contained in:
syuilo
2019-04-13 01:43:22 +09:00
committed by GitHub
parent 4ee40c3345
commit 987168b863
214 changed files with 939 additions and 785 deletions

View File

@ -29,7 +29,7 @@ export const meta = {
export default define(meta, async (ps) => {
const query = makePaginationQuery(AbuseUserReports.createQueryBuilder('report'), ps.sinceId, ps.untilId);
const reports = await query.take(ps.limit).getMany();
const reports = await query.take(ps.limit!).getMany();
return await AbuseUserReports.packMany(reports);
});

View File

@ -56,8 +56,8 @@ export default define(meta, async (ps, me) => {
const files = await DriveFiles.find({
where: q,
take: ps.limit,
order: sort[ps.sort] || sort[fallback],
take: ps.limit!,
order: sort[ps.sort!] || sort[fallback],
skip: ps.offset
});

View File

@ -23,7 +23,7 @@ export const meta = {
export default define(meta, async (ps) => {
const emojis = await Emojis.find({
host: toPuny(ps.host)
host: ps.host ? toPuny(ps.host) : null
});
return emojis.map(e => ({

View File

@ -2,6 +2,7 @@ import $ from 'cafy';
import define from '../../../define';
import deleteFollowing from '../../../../../services/following/delete';
import { Followings, Users } from '../../../../../models';
import { ensure } from '../../../../../prelude/ensure';
export const meta = {
tags: ['admin'],
@ -22,13 +23,11 @@ export default define(meta, async (ps, me) => {
});
const pairs = await Promise.all(followings.map(f => Promise.all([
Users.findOne(f.followerId),
Users.findOne(f.followeeId)
Users.findOne(f.followerId).then(ensure),
Users.findOne(f.followeeId).then(ensure)
])));
for (const pair of pairs) {
deleteFollowing(pair[0], pair[1]);
}
return;
});

View File

@ -65,7 +65,7 @@ export default define(meta, async (ps) => {
}
}
const logs = await query.orderBy('log.createdAt', 'DESC').take(ps.limit).getMany();
const logs = await query.orderBy('log.createdAt', 'DESC').take(ps.limit!).getMany();
return logs;
});

View File

@ -28,9 +28,9 @@ export default define(meta, async (ps) => {
const queue =
ps.domain === 'deliver' ? deliverQueue :
ps.domain === 'inbox' ? inboxQueue :
null;
null as never;
const jobs = await queue.getJobs([ps.state], 0, ps.limit);
const jobs = await queue.getJobs([ps.state], 0, ps.limit!);
return jobs.map(job => ({
id: job.id,

View File

@ -82,7 +82,7 @@ export default define(meta, async (ps, me) => {
default: query.orderBy('user.id', 'ASC'); break;
}
query.take(ps.limit);
query.take(ps.limit!);
query.skip(ps.offset);
const users = await query.getMany();

View File

@ -28,5 +28,5 @@ export const meta = {
export default define(meta, async (ps) => {
const user = await getRemoteUser(ps.userId);
await updatePerson(user.uri);
await updatePerson(user.uri!);
});

View File

@ -123,14 +123,14 @@ async function fetchAny(uri: string) {
const note = await createNote(object.id);
return {
type: 'Note',
object: await Notes.pack(note, null, { detail: true })
object: await Notes.pack(note!, null, { detail: true })
};
}
return null;
}
async function mergePack(user: User, note: Note) {
async function mergePack(user: User | null | undefined, note: Note | null | undefined) {
if (user != null) {
return {
type: 'User',

View File

@ -5,6 +5,7 @@ import define from '../../define';
import { ApiError } from '../../error';
import { AuthSessions, AccessTokens, Apps } from '../../../../models';
import { genId } from '../../../../misc/gen-id';
import { ensure } from '../../../../prelude/ensure';
export const meta = {
tags: ['auth'],
@ -48,7 +49,7 @@ export default define(meta, async (ps, user) => {
if (exist == null) {
// Lookup app
const app = await Apps.findOne(session.appId);
const app = await Apps.findOne(session.appId).then(ensure);
// Generate Hash
const sha256 = crypto.createHash('sha256');

View File

@ -2,6 +2,7 @@ import $ from 'cafy';
import define from '../../../define';
import { ApiError } from '../../../error';
import { Apps, AuthSessions, AccessTokens, Users } from '../../../../../models';
import { ensure } from '../../../../../prelude/ensure';
export const meta = {
tags: ['auth'],
@ -90,7 +91,7 @@ export default define(meta, async (ps) => {
const accessToken = await AccessTokens.findOne({
appId: app.id,
userId: session.userId
});
}).then(ensure);
// Delete session
AuthSessions.delete(session.id);

View File

@ -44,7 +44,7 @@ export default define(meta, async (ps, me) => {
.andWhere(`blocking.blockerId = :meId`, { meId: me.id });
const blockings = await query
.take(ps.limit)
.take(ps.limit!)
.getMany();
return await Blockings.packMany(blockings, me);

View File

@ -33,5 +33,5 @@ export const meta = {
};
export default define(meta, async (ps) => {
return await activeUsersChart.getChart(ps.span as any, ps.limit);
return await activeUsersChart.getChart(ps.span as any, ps.limit!);
});

View File

@ -33,5 +33,5 @@ export const meta = {
};
export default define(meta, async (ps) => {
return await driveChart.getChart(ps.span as any, ps.limit);
return await driveChart.getChart(ps.span as any, ps.limit!);
});

View File

@ -33,5 +33,5 @@ export const meta = {
};
export default define(meta, async (ps) => {
return await federationChart.getChart(ps.span as any, ps.limit);
return await federationChart.getChart(ps.span as any, ps.limit!);
});

View File

@ -40,5 +40,5 @@ export const meta = {
};
export default define(meta, async (ps) => {
return await hashtagChart.getChart(ps.span as any, ps.limit, ps.tag);
return await hashtagChart.getChart(ps.span as any, ps.limit!, ps.tag);
});

View File

@ -41,5 +41,5 @@ export const meta = {
};
export default define(meta, async (ps) => {
return await instanceChart.getChart(ps.span as any, ps.limit, ps.host);
return await instanceChart.getChart(ps.span as any, ps.limit!, ps.host);
});

View File

@ -33,5 +33,5 @@ export const meta = {
};
export default define(meta, async (ps) => {
return await networkChart.getChart(ps.span as any, ps.limit);
return await networkChart.getChart(ps.span as any, ps.limit!);
});

View File

@ -33,5 +33,5 @@ export const meta = {
};
export default define(meta, async (ps) => {
return await notesChart.getChart(ps.span as any, ps.limit);
return await notesChart.getChart(ps.span as any, ps.limit!);
});

View File

@ -42,5 +42,5 @@ export const meta = {
};
export default define(meta, async (ps) => {
return await perUserDriveChart.getChart(ps.span as any, ps.limit, ps.userId);
return await perUserDriveChart.getChart(ps.span as any, ps.limit!, ps.userId);
});

View File

@ -42,5 +42,5 @@ export const meta = {
};
export default define(meta, async (ps) => {
return await perUserFollowingChart.getChart(ps.span as any, ps.limit, ps.userId);
return await perUserFollowingChart.getChart(ps.span as any, ps.limit!, ps.userId);
});

View File

@ -42,5 +42,5 @@ export const meta = {
};
export default define(meta, async (ps) => {
return await perUserNotesChart.getChart(ps.span as any, ps.limit, ps.userId);
return await perUserNotesChart.getChart(ps.span as any, ps.limit!, ps.userId);
});

View File

@ -42,5 +42,5 @@ export const meta = {
};
export default define(meta, async (ps) => {
return await perUserReactionsChart.getChart(ps.span as any, ps.limit, ps.userId);
return await perUserReactionsChart.getChart(ps.span as any, ps.limit!, ps.userId);
});

View File

@ -33,5 +33,5 @@ export const meta = {
};
export default define(meta, async (ps) => {
return await usersChart.getChart(ps.span as any, ps.limit);
return await usersChart.getChart(ps.span as any, ps.limit!);
});

View File

@ -66,7 +66,7 @@ export default define(meta, async (ps, user) => {
}
}
const files = await query.take(ps.limit).getMany();
const files = await query.take(ps.limit!).getMany();
return await DriveFiles.packMany(files, { detail: false, self: true });
});

View File

@ -92,6 +92,6 @@ export default define(meta, async (ps, user, app, file, cleanup) => {
apiLogger.error(e);
throw new ApiError();
} finally {
cleanup();
cleanup!();
}
});

View File

@ -63,7 +63,7 @@ export const meta = {
};
export default define(meta, async (ps, user) => {
let file: DriveFile;
let file: DriveFile | undefined;
if (ps.fileId) {
file = await DriveFiles.findOne(ps.fileId);
@ -81,14 +81,14 @@ export default define(meta, async (ps, user) => {
throw new ApiError(meta.errors.fileIdOrUrlRequired);
}
if (!user.isAdmin && !user.isModerator && (file.userId !== user.id)) {
throw new ApiError(meta.errors.accessDenied);
}
if (file == null) {
throw new ApiError(meta.errors.noSuchFile);
}
if (!user.isAdmin && !user.isModerator && (file.userId !== user.id)) {
throw new ApiError(meta.errors.accessDenied);
}
return await DriveFiles.pack(file, {
detail: true,
self: true

View File

@ -54,7 +54,7 @@ export default define(meta, async (ps, user) => {
query.andWhere('folder.parentId IS NULL');
}
const folders = await query.take(ps.limit).getMany();
const folders = await query.take(ps.limit!).getMany();
return await Promise.all(folders.map(folder => DriveFolders.pack(folder)));
});

View File

@ -102,10 +102,10 @@ export default define(meta, async (ps, user) => {
id: folderId
});
if (folder2.id === folder.id) {
if (folder2!.id === folder!.id) {
return true;
} else if (folder2.parentId) {
return await checkCircle(folder2.parentId);
} else if (folder2!.parentId) {
return await checkCircle(folder2!.parentId);
} else {
return false;
}

View File

@ -50,7 +50,7 @@ export default define(meta, async (ps, user) => {
}
}
const files = await query.take(ps.limit).getMany();
const files = await query.take(ps.limit!).getMany();
return await DriveFiles.packMany(files, { detail: false, self: true });
});

View File

@ -86,7 +86,7 @@ export default define(meta, async (ps, me) => {
}
}
const instances = await query.take(ps.limit).skip(ps.offset).getMany();
const instances = await query.take(ps.limit!).skip(ps.offset).getMany();
return instances;
});

View File

@ -41,7 +41,7 @@ export default define(meta, async (ps, user) => {
}
// Fetch games
const games = await query.take(ps.limit).getMany();
const games = await query.take(ps.limit!).getMany();
return await Promise.all(games.map((g) => ReversiGames.pack(g, user, {
detail: false

View File

@ -70,7 +70,7 @@ export default define(meta, async (ps, user) => {
map: eighteight.data,
bw: 'random',
isLlotheo: false
} as ReversiGame);
} as Partial<ReversiGame>);
publishReversiStream(exist.parentId, 'matched', await ReversiGames.pack(game, exist.parentId));
@ -107,6 +107,6 @@ export default define(meta, async (ps, user) => {
publishReversiStream(child.id, 'invited', packed);
publishMainStream(child.id, 'reversiInvited', packed);
return null;
return;
}
});

View File

@ -86,7 +86,7 @@ export default define(meta, async (ps, me) => {
'tag.attachedRemoteUsersCount',
]);
const tags = await query.take(ps.limit).getMany();
const tags = await query.take(ps.limit!).getMany();
return tags;
});

View File

@ -48,7 +48,7 @@ export default define(meta, async (ps) => {
const hashtags = await Hashtags.createQueryBuilder('tag')
.where('tag.name like :q', { q: ps.query.toLowerCase() + '%' })
.orderBy('tag.count', 'DESC')
.take(ps.limit)
.take(ps.limit!)
.skip(ps.offset)
.getMany();

View File

@ -79,7 +79,7 @@ export default define(meta, async (ps, me) => {
case '-updatedAt': query.orderBy('user.updatedAt', 'ASC'); break;
}
const users = await query.take(ps.limit).getMany();
const users = await query.take(ps.limit!).getMany();
return await Users.packMany(users, me, { detail: true });
});

View File

@ -2,6 +2,7 @@ import $ from 'cafy';
import * as speakeasy from 'speakeasy';
import define from '../../../define';
import { UserProfiles } from '../../../../../models';
import { ensure } from '../../../../../prelude/ensure';
export const meta = {
requireCredential: true,
@ -18,7 +19,7 @@ export const meta = {
export default define(meta, async (ps, user) => {
const token = ps.token.replace(/\s/g, '');
const profile = await UserProfiles.findOne({ userId: user.id });
const profile = await UserProfiles.findOne({ userId: user.id }).then(ensure);
if (profile.twoFactorTempSecret == null) {
throw new Error('二段階認証の設定が開始されていません');

View File

@ -5,6 +5,7 @@ import * as QRCode from 'qrcode';
import config from '../../../../../config';
import define from '../../../define';
import { UserProfiles } from '../../../../../models';
import { ensure } from '../../../../../prelude/ensure';
export const meta = {
requireCredential: true,
@ -19,10 +20,10 @@ export const meta = {
};
export default define(meta, async (ps, user) => {
const profile = await UserProfiles.findOne({ userId: user.id });
const profile = await UserProfiles.findOne({ userId: user.id }).then(ensure);
// Compare password
const same = await bcrypt.compare(ps.password, profile.password);
const same = await bcrypt.compare(ps.password, profile.password!);
if (!same) {
throw new Error('incorrect password');

View File

@ -2,6 +2,7 @@ import $ from 'cafy';
import * as bcrypt from 'bcryptjs';
import define from '../../../define';
import { UserProfiles } from '../../../../../models';
import { ensure } from '../../../../../prelude/ensure';
export const meta = {
requireCredential: true,
@ -16,10 +17,10 @@ export const meta = {
};
export default define(meta, async (ps, user) => {
const profile = await UserProfiles.findOne({ userId: user.id });
const profile = await UserProfiles.findOne({ userId: user.id }).then(ensure);
// Compare password
const same = await bcrypt.compare(ps.password, profile.password);
const same = await bcrypt.compare(ps.password, profile.password!);
if (!same) {
throw new Error('incorrect password');

View File

@ -31,7 +31,7 @@ export default define(meta, async (ps, user) => {
where: {
userId: user.id
},
take: ps.limit,
take: ps.limit!,
skip: ps.offset,
order: {
id: ps.sort == 'asc' ? 1 : -1

View File

@ -2,6 +2,7 @@ import $ from 'cafy';
import * as bcrypt from 'bcryptjs';
import define from '../../define';
import { UserProfiles } from '../../../../models';
import { ensure } from '../../../../prelude/ensure';
export const meta = {
requireCredential: true,
@ -20,10 +21,10 @@ export const meta = {
};
export default define(meta, async (ps, user) => {
const profile = await UserProfiles.findOne({ userId: user.id });
const profile = await UserProfiles.findOne({ userId: user.id }).then(ensure);
// Compare password
const same = await bcrypt.compare(ps.currentPassword, profile.password);
const same = await bcrypt.compare(ps.currentPassword, profile.password!);
if (!same) {
throw new Error('incorrect password');

View File

@ -2,6 +2,7 @@ import $ from 'cafy';
import * as bcrypt from 'bcryptjs';
import define from '../../define';
import { Users, UserProfiles } from '../../../../models';
import { ensure } from '../../../../prelude/ensure';
export const meta = {
requireCredential: true,
@ -16,10 +17,10 @@ export const meta = {
};
export default define(meta, async (ps, user) => {
const profile = await UserProfiles.findOne({ userId: user.id });
const profile = await UserProfiles.findOne({ userId: user.id }).then(ensure);
// Compare password
const same = await bcrypt.compare(ps.password, profile.password);
const same = await bcrypt.compare(ps.password, profile.password!);
if (!same) {
throw new Error('incorrect password');

View File

@ -38,7 +38,7 @@ export default define(meta, async (ps, user) => {
.leftJoinAndSelect('favorite.note', 'note');
const favorites = await query
.take(ps.limit)
.take(ps.limit!)
.getMany();
return await NoteFavorites.packMany(favorites, user);

View File

@ -81,13 +81,13 @@ export default define(meta, async (ps, user) => {
query.setParameters(followingQuery.getParameters());
}
if (ps.includeTypes.length > 0) {
if (ps.includeTypes!.length > 0) {
query.andWhere(`notification.type IN (:...includeTypes)`, { includeTypes: ps.includeTypes });
} else if (ps.excludeTypes.length > 0) {
} else if (ps.excludeTypes!.length > 0) {
query.andWhere(`notification.type NOT IN (:...excludeTypes)`, { excludeTypes: ps.excludeTypes });
}
const notifications = await query.take(ps.limit).getMany();
const notifications = await query.take(ps.limit!).getMany();
// Mark all as read
if (notifications.length > 0 && ps.markAsRead) {

View File

@ -4,6 +4,7 @@ import { publishMainStream } from '../../../../services/stream';
import generateUserToken from '../../common/generate-native-user-token';
import define from '../../define';
import { Users, UserProfiles } from '../../../../models';
import { ensure } from '../../../../prelude/ensure';
export const meta = {
requireCredential: true,
@ -18,10 +19,10 @@ export const meta = {
};
export default define(meta, async (ps, user) => {
const profile = await UserProfiles.findOne({ userId: user.id });
const profile = await UserProfiles.findOne({ userId: user.id }).then(ensure);
// Compare password
const same = await bcrypt.compare(ps.password, profile.password);
const same = await bcrypt.compare(ps.password, profile.password!);
if (!same) {
throw new Error('incorrect password');

View File

@ -29,7 +29,7 @@ export default define(meta, async (ps, user) => {
const query = makePaginationQuery(Signins.createQueryBuilder('signin'), ps.sinceId, ps.untilId)
.andWhere(`signin.userId = :meId`, { meId: user.id });
const history = await query.take(ps.limit).getMany();
const history = await query.take(ps.limit!).getMany();
return await Promise.all(history.map(record => Signins.pack(record)));
});

View File

@ -9,6 +9,7 @@ import * as ms from 'ms';
import * as bcrypt from 'bcryptjs';
import { apiLogger } from '../../logger';
import { Users, UserProfiles } from '../../../../models';
import { ensure } from '../../../../prelude/ensure';
export const meta = {
requireCredential: true,
@ -32,10 +33,10 @@ export const meta = {
};
export default define(meta, async (ps, user) => {
const profile = await UserProfiles.findOne({ userId: user.id });
const profile = await UserProfiles.findOne({ userId: user.id }).then(ensure);
// Compare password
const same = await bcrypt.compare(ps.password, profile.password);
const same = await bcrypt.compare(ps.password, profile.password!);
if (!same) {
throw new Error('incorrect password');

View File

@ -206,13 +206,13 @@ export default define(meta, async (ps, user, app) => {
if (updates.name != null) {
const tokens = parsePlain(updates.name);
emojis = emojis.concat(extractEmojis(tokens));
emojis = emojis.concat(extractEmojis(tokens!));
}
if (profile.description != null) {
const tokens = parse(profile.description);
emojis = emojis.concat(extractEmojis(tokens));
tags = extractHashtags(tokens).map(tag => tag.toLowerCase());
emojis = emojis.concat(extractEmojis(tokens!));
tags = extractHashtags(tokens!).map(tag => tag.toLowerCase());
}
updates.emojis = emojis;

View File

@ -38,7 +38,7 @@ export default define(meta, async (ps, user) => {
const history: MessagingMessage[] = [];
for (let i = 0; i < ps.limit; i++) {
for (let i = 0; i < ps.limit!; i++) {
const found = history.map(m => (m.userId === user.id) ? m.recipientId : m.userId);
const query = MessagingMessages.createQueryBuilder('message')

View File

@ -44,7 +44,7 @@ export default define(meta, async (ps, me) => {
.andWhere(`muting.muterId = :meId`, { meId: me.id });
const mutings = await query
.take(ps.limit)
.take(ps.limit!)
.getMany();
return await Mutings.packMany(mutings, me);

View File

@ -32,7 +32,7 @@ export default define(meta, async (ps, user) => {
const apps = await Apps.find({
where: query,
take: ps.limit,
take: ps.limit!,
skip: ps.offset,
});

View File

@ -100,7 +100,7 @@ export default define(meta, async (ps) => {
// query.isBot = bot;
//}
const notes = await query.take(ps.limit).getMany();
const notes = await query.take(ps.limit!).getMany();
return await Notes.packMany(notes);
});

View File

@ -66,7 +66,7 @@ export default define(meta, async (ps, user) => {
if (user) generateVisibilityQuery(query, user);
if (user) generateMuteQuery(query, user);
const notes = await query.take(ps.limit).getMany();
const notes = await query.take(ps.limit!).getMany();
return await Notes.packMany(notes, user);
});

View File

@ -64,12 +64,13 @@ export default define(meta, async (ps, user) => {
async function get(id: any) {
i++;
const p = await Notes.findOne(id);
if (p == null) return;
if (i > ps.offset) {
if (i > ps.offset!) {
conversation.push(p);
}
if (conversation.length == ps.limit) {
if (conversation.length == ps.limit!) {
return;
}

View File

@ -225,23 +225,24 @@ export const meta = {
export default define(meta, async (ps, user, app) => {
let visibleUsers: User[] = [];
if (ps.visibleUserIds) {
visibleUsers = await Promise.all(ps.visibleUserIds.map(id => Users.findOne(id)));
visibleUsers = (await Promise.all(ps.visibleUserIds.map(id => Users.findOne(id))))
.filter(x => x != null) as User[];
}
let files: DriveFile[] = [];
const fileIds = ps.fileIds != null ? ps.fileIds : ps.mediaIds != null ? ps.mediaIds : null;
if (fileIds != null) {
files = await Promise.all(fileIds.map(fileId => {
return DriveFiles.findOne({
files = (await Promise.all(fileIds.map(fileId =>
DriveFiles.findOne({
id: fileId,
userId: user.id
});
}));
})
))).filter(file => file != null) as DriveFile[];
files = files.filter(file => file != null);
files = files;
}
let renote: Note = null;
let renote: Note | undefined;
if (ps.renoteId != null) {
// Fetch renote to note
renote = await Notes.findOne(ps.renoteId);
@ -253,7 +254,7 @@ export default define(meta, async (ps, user, app) => {
}
}
let reply: Note = null;
let reply: Note | undefined;
if (ps.replyId != null) {
// Fetch reply
reply = await Notes.findOne(ps.replyId);
@ -290,8 +291,8 @@ export default define(meta, async (ps, user, app) => {
choices: ps.poll.choices,
multiple: ps.poll.multiple || false,
expiresAt: ps.poll.expiresAt ? new Date(ps.poll.expiresAt) : null
} : null,
text: ps.text,
} : undefined,
text: ps.text || undefined,
reply,
renote,
cw: ps.cw,
@ -300,9 +301,9 @@ export default define(meta, async (ps, user, app) => {
localOnly: ps.localOnly,
visibility: ps.visibility,
visibleUsers,
apMentions: ps.noExtractMentions ? [] : null,
apHashtags: ps.noExtractHashtags ? [] : null,
apEmojis: ps.noExtractEmojis ? [] : null,
apMentions: ps.noExtractMentions ? [] : undefined,
apHashtags: ps.noExtractHashtags ? [] : undefined,
apEmojis: ps.noExtractEmojis ? [] : undefined,
geo: ps.geo
});

View File

@ -6,6 +6,7 @@ import * as ms from 'ms';
import { getNote } from '../../common/getters';
import { ApiError } from '../../error';
import { Users } from '../../../../models';
import { ensure } from '../../../../prelude/ensure';
export const meta = {
stability: 'stable',
@ -63,5 +64,5 @@ export default define(meta, async (ps, user) => {
}
// この操作を行うのが投稿者とは限らない(例えばモデレーター)ため
await deleteNote(await Users.findOne(note.userId), note);
await deleteNote(await Users.findOne(note.userId).then(ensure), note);
});

View File

@ -41,7 +41,7 @@ export default define(meta, async (ps, user) => {
if (user) generateMuteQuery(query, user);
const notes = await query.orderBy('note.score', 'DESC').take(ps.limit).getMany();
const notes = await query.orderBy('note.score', 'DESC').take(ps.limit!).getMany();
return await Notes.packMany(notes, user);
});

View File

@ -84,7 +84,7 @@ export default define(meta, async (ps, user) => {
}
//#endregion
const timeline = await query.take(ps.limit).getMany();
const timeline = await query.take(ps.limit!).getMany();
if (user) {
activeUsersChart.update(user);

View File

@ -185,7 +185,7 @@ export default define(meta, async (ps, user) => {
}
//#endregion
const timeline = await query.take(ps.limit).getMany();
const timeline = await query.take(ps.limit!).getMany();
if (user) {
activeUsersChart.update(user);

View File

@ -100,11 +100,11 @@ export default define(meta, async (ps, user) => {
query.andWhere('note.fileIds != \'{}\'');
}
if (ps.fileType) {
if (ps.fileType != null) {
query.andWhere('note.fileIds != \'{}\'');
query.andWhere(new Brackets(qb => {
for (const type of ps.fileType) {
const i = ps.fileType.indexOf(type);
for (const type of ps.fileType!) {
const i = ps.fileType!.indexOf(type);
qb.orWhere(`:type${i} = ANY(note.attachedFileTypes)`, { [`type${i}`]: type });
}
}));
@ -120,7 +120,7 @@ export default define(meta, async (ps, user) => {
}
//#endregion
const timeline = await query.take(ps.limit).getMany();
const timeline = await query.take(ps.limit!).getMany();
if (user) {
activeUsersChart.update(user);

View File

@ -74,7 +74,7 @@ export default define(meta, async (ps, user) => {
query.setParameters(followingQuery.getParameters());
}
const mentions = await query.take(ps.limit).getMany();
const mentions = await query.take(ps.limit!).getMany();
for (const note of mentions) {
read(user.id, note.id);

View File

@ -58,7 +58,7 @@ export default define(meta, async (ps, user) => {
query.setParameters(mutingQuery.getParameters());
//#endregion
const polls = await query.take(ps.limit).skip(ps.offset).getMany();
const polls = await query.take(ps.limit!).skip(ps.offset).getMany();
if (polls.length === 0) return [];

View File

@ -14,6 +14,7 @@ import { PollVotes, NoteWatchings, Users, Polls, UserProfiles } from '../../../.
import { Not } from 'typeorm';
import { IRemoteUser } from '../../../../../models/entities/user';
import { genId } from '../../../../../misc/gen-id';
import { ensure } from '../../../../../prelude/ensure';
export const meta = {
desc: {
@ -87,7 +88,7 @@ export default define(meta, async (ps, user) => {
throw new ApiError(meta.errors.noPoll);
}
const poll = await Polls.findOne({ noteId: note.id });
const poll = await Polls.findOne({ noteId: note.id }).then(ensure);
if (poll.expiresAt && poll.expiresAt < createdAt) {
throw new ApiError(meta.errors.alreadyExpired);
@ -149,7 +150,7 @@ export default define(meta, async (ps, user) => {
}
});
const profile = await UserProfiles.findOne({ userId: user.id });
const profile = await UserProfiles.findOne({ userId: user.id }).then(ensure);
// この投稿をWatchする
if (profile.autoWatch !== false) {
@ -158,7 +159,7 @@ export default define(meta, async (ps, user) => {
// リモート投票の場合リプライ送信
if (note.userHost != null) {
const pollOwner: IRemoteUser = await Users.findOne(note.userId);
const pollOwner = await Users.findOne(note.userId).then(ensure) as IRemoteUser;
deliver(user, renderActivity(await renderVote(user, vote, note, poll, pollOwner)), pollOwner.inbox);
}

View File

@ -71,7 +71,7 @@ export default define(meta, async (ps, user) => {
const reactions = await NoteReactions.find({
where: query,
take: ps.limit,
take: ps.limit!,
skip: ps.offset,
order: {
id: -1

View File

@ -70,7 +70,7 @@ export default define(meta, async (ps, user) => {
if (user) generateVisibilityQuery(query, user);
if (user) generateMuteQuery(query, user);
const renotes = await query.take(ps.limit).getMany();
const renotes = await query.take(ps.limit!).getMany();
return await Notes.packMany(renotes, user);
});

View File

@ -61,7 +61,7 @@ export default define(meta, async (ps, user) => {
if (user) generateVisibilityQuery(query, user);
if (user) generateMuteQuery(query, user);
const timeline = await query.take(ps.limit).getMany();
const timeline = await query.take(ps.limit!).getMany();
return await Notes.packMany(timeline, user);
});

View File

@ -100,7 +100,7 @@ export default define(meta, async (ps, me) => {
} else {
let i = 0;
query.andWhere(new Brackets(qb => {
for (const tags of ps.query) {
for (const tags of ps.query!) {
qb.orWhere(new Brackets(qb => {
for (const tag of tags) {
qb.andWhere(`:tag${i} = ANY(note.tags)`, { [`tag${i}`]: tag });
@ -140,7 +140,7 @@ export default define(meta, async (ps, me) => {
}
// Search notes
const notes = await query.take(ps.limit).getMany();
const notes = await query.take(ps.limit!).getMany();
return await Notes.packMany(notes, me);
});

View File

@ -54,7 +54,7 @@ export default define(meta, async (ps, me) => {
index: 'misskey',
type: 'note',
body: {
size: ps.limit,
size: ps.limit!,
from: ps.offset,
query: {
simple_query_string: {

View File

@ -171,7 +171,7 @@ export default define(meta, async (ps, user) => {
}
//#endregion
const timeline = await query.take(ps.limit).getMany();
const timeline = await query.take(ps.limit!).getMany();
activeUsersChart.update(user);

View File

@ -189,7 +189,7 @@ export default define(meta, async (ps, user) => {
}
//#endregion
const timeline = await query.take(ps.limit).getMany();
const timeline = await query.take(ps.limit!).getMany();
activeUsersChart.update(user);

View File

@ -88,7 +88,7 @@ export default define(meta, async (ps, me) => {
if (me) generateMuteQueryForUsers(query, me);
query.take(ps.limit);
query.take(ps.limit!);
query.skip(ps.offset);
const users = await query.getMany();

View File

@ -66,7 +66,7 @@ export const meta = {
export default define(meta, async (ps, me) => {
const user = await Users.findOne(ps.userId != null
? { id: ps.userId }
: { usernameLower: ps.username.toLowerCase(), host: toPuny(ps.host) });
: { usernameLower: ps.username!.toLowerCase(), host: toPuny(ps.host!) });
if (user == null) {
throw new ApiError(meta.errors.noSuchUser);
@ -76,7 +76,7 @@ export default define(meta, async (ps, me) => {
.andWhere(`following.followeeId = :userId`, { userId: user.id });
const followings = await query
.take(ps.limit)
.take(ps.limit!)
.getMany();
return await Followings.packMany(followings, me, { populateFollower: true });

View File

@ -66,7 +66,7 @@ export const meta = {
export default define(meta, async (ps, me) => {
const user = await Users.findOne(ps.userId != null
? { id: ps.userId }
: { usernameLower: ps.username.toLowerCase(), host: toPuny(ps.host) });
: { usernameLower: ps.username!.toLowerCase(), host: toPuny(ps.host!) });
if (user == null) {
throw new ApiError(meta.errors.noSuchUser);
@ -76,7 +76,7 @@ export default define(meta, async (ps, me) => {
.andWhere(`following.followerId = :userId`, { userId: user.id });
const followings = await query
.take(ps.limit)
.take(ps.limit!)
.getMany();
return await Followings.packMany(followings, me, { populateFollowee: true });

View File

@ -94,7 +94,7 @@ export default define(meta, async (ps, me) => {
const repliedUsersSorted = Object.keys(repliedUsers).sort((a, b) => repliedUsers[b] - repliedUsers[a]);
// Extract top replied users
const topRepliedUsers = repliedUsersSorted.slice(0, ps.limit);
const topRepliedUsers = repliedUsersSorted.slice(0, ps.limit!);
// Make replies object (includes weights)
const repliesObj = await Promise.all(topRepliedUsers.map(async (user) => ({

View File

@ -153,11 +153,11 @@ export default define(meta, async (ps, me) => {
query.andWhere('note.fileIds != \'{}\'');
}
if (ps.fileType) {
if (ps.fileType != null) {
query.andWhere('note.fileIds != \'{}\'');
query.andWhere(new Brackets(qb => {
for (const type of ps.fileType) {
const i = ps.fileType.indexOf(type);
for (const type of ps.fileType!) {
const i = ps.fileType!.indexOf(type);
qb.orWhere(`:type${i} = ANY(note.attachedFileTypes)`, { [`type${i}`]: type });
}
}));
@ -194,7 +194,7 @@ export default define(meta, async (ps, me) => {
//#endregion
const timeline = await query.take(ps.limit).getMany();
const timeline = await query.take(ps.limit!).getMany();
return await Notes.packMany(timeline, user);
});

View File

@ -53,7 +53,7 @@ export default define(meta, async (ps, me) => {
query.setParameters(followingQuery.getParameters());
const users = await query.take(ps.limit).skip(ps.offset).getMany();
const users = await query.take(ps.limit!).skip(ps.offset).getMany();
return await Users.packMany(users, me, { detail: true });
});

View File

@ -71,16 +71,16 @@ export default define(meta, async (ps, me) => {
.where('user.host IS NULL')
.andWhere('user.isSuspended = FALSE')
.andWhere('user.usernameLower like :username', { username: ps.query.replace('@', '').toLowerCase() + '%' })
.take(ps.limit)
.take(ps.limit!)
.skip(ps.offset)
.getMany();
if (users.length < ps.limit && !ps.localOnly) {
if (users.length < ps.limit! && !ps.localOnly) {
const otherUsers = await Users.createQueryBuilder('user')
.where('user.host IS NOT NULL')
.andWhere('user.isSuspended = FALSE')
.andWhere('user.usernameLower like :username', { username: ps.query.replace('@', '').toLowerCase() + '%' })
.take(ps.limit - users.length)
.take(ps.limit! - users.length)
.getMany();
users = users.concat(otherUsers);

View File

@ -74,7 +74,7 @@ export default define(meta, async (ps, me) => {
})));
} else {
// Lookup user
if (typeof ps.host === 'string') {
if (typeof ps.host === 'string' && typeof ps.username === 'string') {
user = await resolveUser(ps.username, ps.host).catch(e => {
apiLogger.warn(`failed to resolve remote user: ${e}`);
throw new ApiError(meta.errors.failedToResolveRemoteUser);
@ -82,7 +82,7 @@ export default define(meta, async (ps, me) => {
} else {
const q: any = ps.userId != null
? { id: ps.userId }
: { usernameLower: ps.username.toLowerCase(), host: null };
: { usernameLower: ps.username!.toLowerCase(), host: null };
user = await Users.findOne(q);
}
@ -94,7 +94,7 @@ export default define(meta, async (ps, me) => {
// ユーザー情報更新
if (Users.isRemoteUser(user)) {
if (user.lastFetchedAt == null || Date.now() - user.lastFetchedAt.getTime() > 1000 * 60 * 60 * 24) {
resolveUser(ps.username, ps.host, { }, true);
resolveUser(user.username, user.host, { }, true);
}
}