diff --git a/src/api/endpoints/aggregation/posts/likes.ts b/src/api/endpoints/aggregation/posts/likes.ts index 454368ede..5031edbff 100644 --- a/src/api/endpoints/aggregation/posts/likes.ts +++ b/src/api/endpoints/aggregation/posts/likes.ts @@ -49,7 +49,7 @@ module.exports = (params) => new Promise(async (res, rej) => { day = new Date(day.setSeconds(59)); day = new Date(day.setMinutes(59)); day = new Date(day.setHours(23)); - //day = day.getTime(); + // day = day.getTime(); const count = likes.filter(l => l.created_at < day && (l.deleted_at == null || l.deleted_at > day) diff --git a/src/api/endpoints/i/appdata/get.ts b/src/api/endpoints/i/appdata/get.ts index 47e1b8d20..a1a57fa13 100644 --- a/src/api/endpoints/i/appdata/get.ts +++ b/src/api/endpoints/i/appdata/get.ts @@ -32,14 +32,14 @@ module.exports = (params, user, app, isSecure) => new Promise(async (res, rej) = } else { const select = {}; if (key !== null) { - select['data.' + key] = true; + select[`data.${key}`] = true; } const appdata = await Appdata.findOne({ app_id: app._id, user_id: user._id }, { - fields: select - }); + fields: select + }); if (appdata) { res(appdata.data); diff --git a/src/api/endpoints/i/appdata/set.ts b/src/api/endpoints/i/appdata/set.ts index eea17fd0d..07178d650 100644 --- a/src/api/endpoints/i/appdata/set.ts +++ b/src/api/endpoints/i/appdata/set.ts @@ -37,10 +37,10 @@ module.exports = (params, user, app, isSecure) => new Promise(async (res, rej) = let set = {}; if (data) { Object.entries(data).forEach(([k, v]) => { - set['data.' + k] = v; + set[`data.${k}`] = v; }); } else { - set['data.' + key] = value; + set[`data.${key}`] = value; } if (isSecure) { @@ -63,10 +63,10 @@ module.exports = (params, user, app, isSecure) => new Promise(async (res, rej) = app_id: app._id, user_id: user._id }, { - $set: set - }), { - upsert: true - }); + $set: set + }), { + upsert: true + }); res(204); } diff --git a/src/api/endpoints/posts/create.ts b/src/api/endpoints/posts/create.ts index 9a86318d7..9f313bc20 100644 --- a/src/api/endpoints/posts/create.ts +++ b/src/api/endpoints/posts/create.ts @@ -45,8 +45,8 @@ module.exports = (params, user, app) => new Promise(async (res, rej) => { _id: mediaId, user_id: user._id }, { - _id: true - }); + _id: true + }); if (entity === null) { return rej('file not found'); @@ -79,23 +79,23 @@ module.exports = (params, user, app) => new Promise(async (res, rej) => { const latestPost = await Post.findOne({ user_id: user._id }, { - sort: { - _id: -1 - } - }); + sort: { + _id: -1 + } + }); // 直近と同じRepost対象かつ引用じゃなかったらエラー if (latestPost && - latestPost.repost_id && - latestPost.repost_id.equals(repost._id) && - text === undefined && files === null) { + latestPost.repost_id && + latestPost.repost_id.equals(repost._id) && + text === undefined && files === null) { return rej('二重Repostです(NEED TRANSLATE)'); } // 直近がRepost対象かつ引用じゃなかったらエラー if (latestPost && - latestPost._id.equals(repost._id) && - text === undefined && files === null) { + latestPost._id.equals(repost._id) && + text === undefined && files === null) { return rej('二重Repostです(NEED TRANSLATE)'); } } @@ -152,11 +152,11 @@ module.exports = (params, user, app) => new Promise(async (res, rej) => { repost: user.latest_post.repost_id ? user.latest_post.repost_id.toString() : null, media_ids: (user.latest_post.media_ids || []).map(id => id.toString()) }, { - text: text, - reply: inReplyToPost ? inReplyToPost._id.toString() : null, - repost: repost ? repost._id.toString() : null, - media_ids: (files || []).map(file => file._id.toString()) - })) { + text: text, + reply: inReplyToPost ? inReplyToPost._id.toString() : null, + repost: repost ? repost._id.toString() : null, + media_ids: (files || []).map(file => file._id.toString()) + })) { return rej('duplicate'); } } @@ -179,7 +179,7 @@ module.exports = (params, user, app) => new Promise(async (res, rej) => { // Reponse res(postObj); - //-------------------------------- + // -------------------------------- // Post processes User.update({ _id: user._id }, { @@ -288,17 +288,17 @@ module.exports = (params, user, app) => new Promise(async (res, rej) => { if (text) { // Analyze const tokens = parse(text); -/* - // Extract a hashtags - const hashtags = tokens - .filter(t => t.type == 'hashtag') - .map(t => t.hashtag) - // Drop dupulicates - .filter((v, i, s) => s.indexOf(v) == i); + /* + // Extract a hashtags + const hashtags = tokens + .filter(t => t.type == 'hashtag') + .map(t => t.hashtag) + // Drop dupulicates + .filter((v, i, s) => s.indexOf(v) == i); - // ハッシュタグをデータベースに登録 - registerHashtags(user, hashtags); -*/ + // ハッシュタグをデータベースに登録 + registerHashtags(user, hashtags); + */ // Extract an '@' mentions const atMentions = tokens .filter(t => t.type == 'mention') diff --git a/src/api/endpoints/posts/reactions/create.ts b/src/api/endpoints/posts/reactions/create.ts index 5425eaea0..a3b25baa6 100644 --- a/src/api/endpoints/posts/reactions/create.ts +++ b/src/api/endpoints/posts/reactions/create.ts @@ -67,7 +67,7 @@ module.exports = (params, user) => new Promise(async (res, rej) => { res(); const inc = {}; - inc['reaction_counts.' + reaction] = 1; + inc[`reaction_counts.${reaction}`] = 1; // Increment reactions count await Post.update({ _id: post._id }, { diff --git a/src/api/endpoints/posts/reactions/delete.ts b/src/api/endpoints/posts/reactions/delete.ts index 89f6beb10..922c57ab1 100644 --- a/src/api/endpoints/posts/reactions/delete.ts +++ b/src/api/endpoints/posts/reactions/delete.ts @@ -42,16 +42,16 @@ module.exports = (params, user) => new Promise(async (res, rej) => { await Reaction.update({ _id: exist._id }, { - $set: { - deleted_at: new Date() - } - }); + $set: { + deleted_at: new Date() + } + }); // Send response res(); const dec = {}; - dec['reaction_counts.' + exist.reaction] = -1; + dec[`reaction_counts.${exist.reaction}`] = -1; // Decrement reactions count Post.update({ _id: post._id }, { diff --git a/src/api/private/signup.ts b/src/api/private/signup.ts index bd2a7ef02..2375c2284 100644 --- a/src/api/private/signup.ts +++ b/src/api/private/signup.ts @@ -58,7 +58,7 @@ export default async (req: express.Request, res: express.Response) => { const hash = bcrypt.hashSync(password, salt); // Generate secret - const secret = '!' + rndstr('a-zA-Z0-9', 32); + const secret = `!${rndstr('a-zA-Z0-9', 32)}`; // Create account const account = await User.insert({ diff --git a/src/api/server.ts b/src/api/server.ts index 0b30222d3..0e059f5d2 100644 --- a/src/api/server.ts +++ b/src/api/server.ts @@ -34,10 +34,10 @@ app.get('/', (req, res) => { */ endpoints.forEach(endpoint => endpoint.withFile ? - app.post('/' + endpoint.name, + app.post(`/${endpoint.name}`, endpoint.withFile ? multer({ dest: 'uploads/' }).single('file') : null, require('./api-handler').default.bind(null, endpoint)) : - app.post('/' + endpoint.name, + app.post(`/${endpoint.name}`, require('./api-handler').default.bind(null, endpoint)) ); diff --git a/src/api/service/github.ts b/src/api/service/github.ts index 68bc03bd5..0d6e66341 100644 --- a/src/api/service/github.ts +++ b/src/api/service/github.ts @@ -22,7 +22,7 @@ module.exports = async (app: express.Application) => { const handler = new EventEmitter(); app.post('/hooks/github', (req, res, next) => { - if ((new Buffer(req.headers['x-hub-signature'])).equals(new Buffer('sha1=' + crypto.createHmac('sha1', config.github_bot.hook_secret).update(JSON.stringify(req.body)).digest('hex')))) { + if ((new Buffer(req.headers['x-hub-signature'])).equals(new Buffer(`sha1=${crypto.createHmac('sha1', config.github_bot.hook_secret).update(JSON.stringify(req.body)).digest('hex')}`))) { handler.emit(req.headers['x-github-event'], req.body); res.sendStatus(200); } else { @@ -40,7 +40,7 @@ module.exports = async (app: express.Application) => { // Fetch parent status request({ - url: parent.url + '/statuses', + url: `${parent.url}/statuses`, headers: { 'User-Agent': 'misskey' } diff --git a/src/api/service/twitter.ts b/src/api/service/twitter.ts index 160956cf9..9fb274aac 100644 --- a/src/api/service/twitter.ts +++ b/src/api/service/twitter.ts @@ -1,6 +1,6 @@ import * as express from 'express'; -//import * as Twitter from 'twitter'; -//const Twitter = require('twitter'); +// import * as Twitter from 'twitter'; +// const Twitter = require('twitter'); import autwh from 'autwh'; import redis from '../../db/redis'; import User from '../models/user'; @@ -14,10 +14,10 @@ module.exports = (app: express.Application) => { const user = await User.findOneAndUpdate({ token: res.locals.user }, { - $set: { - twitter: null - } - }); + $set: { + twitter: null + } + }); res.send(`Twitterの連携を解除しました :v:`); @@ -38,7 +38,7 @@ module.exports = (app: express.Application) => { const twAuth = autwh({ consumerKey: config.twitter.consumer_key, consumerSecret: config.twitter.consumer_secret, - callbackUrl: config.api_url + '/tw/cb' + callbackUrl: `${config.api_url}/tw/cb` }); app.get('/connect/twitter', async (req, res): Promise => { @@ -56,15 +56,15 @@ module.exports = (app: express.Application) => { const user = await User.findOneAndUpdate({ token: res.locals.user }, { - $set: { - twitter: { - access_token: result.accessToken, - access_token_secret: result.accessTokenSecret, - user_id: result.userId, - screen_name: result.screenName + $set: { + twitter: { + access_token: result.accessToken, + access_token_secret: result.accessTokenSecret, + user_id: result.userId, + screen_name: result.screenName + } } - } - }); + }); res.send(`Twitter: @${result.screenName} を、Misskey: @${user.username} に接続しました!`); diff --git a/src/file/server.ts b/src/file/server.ts index 8ab638aa6..ee67cf786 100644 --- a/src/file/server.ts +++ b/src/file/server.ts @@ -24,7 +24,7 @@ app.use(cors()); /** * Statics */ -app.use('/assets', express.static(__dirname + '/assets', { +app.use('/assets', express.static(`${__dirname}/assets`, { maxAge: 1000 * 60 * 60 * 24 * 365 // 一年 })); @@ -33,12 +33,12 @@ app.get('/', (req, res) => { }); app.get('/default-avatar.jpg', (req, res) => { - const file = fs.readFileSync(__dirname + '/assets/avatar.jpg'); + const file = fs.readFileSync(`${__dirname}/assets/avatar.jpg`); send(file, 'image/jpeg', req, res); }); app.get('/app-default.jpg', (req, res) => { - const file = fs.readFileSync(__dirname + '/assets/dummy.png'); + const file = fs.readFileSync(`${__dirname}/assets/dummy.png`); send(file, 'image/png', req, res); }); @@ -54,7 +54,7 @@ async function raw(data: Buffer, type: string, download: boolean, res: express.R async function thumbnail(data: Buffer, type: string, resize: number, res: express.Response): Promise { if (!/^image\/.*$/.test(type)) { - data = fs.readFileSync(__dirname + '/assets/dummy.png'); + data = fs.readFileSync(`${__dirname}/assets/dummy.png`); } let g = gm(data); @@ -64,18 +64,18 @@ async function thumbnail(data: Buffer, type: string, resize: number, res: expres } g - .compress('jpeg') - .quality(80) - .toBuffer('jpeg', (err, img) => { - if (err !== undefined && err !== null) { - console.error(err); - res.sendStatus(500); - return; - } + .compress('jpeg') + .quality(80) + .toBuffer('jpeg', (err, img) => { + if (err !== undefined && err !== null) { + console.error(err); + res.sendStatus(500); + return; + } - res.header('Content-Type', 'image/jpeg'); - res.send(img); - }); + res.header('Content-Type', 'image/jpeg'); + res.send(img); + }); } function send(data: Buffer, type: string, req: express.Request, res: express.Response): void { @@ -97,10 +97,10 @@ app.get('/:id', async (req, res) => { return; } - const file = await File.findOne({_id: new mongodb.ObjectID(req.params.id)}); + const file = await File.findOne({ _id: new mongodb.ObjectID(req.params.id) }); if (file == null) { - res.status(404).sendFile(__dirname + '/assets/dummy.png'); + res.status(404).sendFile(`${__dirname} / assets / dummy.png`); return; } else if (file.data == null) { res.sendStatus(400); @@ -117,10 +117,10 @@ app.get('/:id/:name', async (req, res) => { return; } - const file = await File.findOne({_id: new mongodb.ObjectID(req.params.id)}); + const file = await File.findOne({ _id: new mongodb.ObjectID(req.params.id) }); if (file == null) { - res.status(404).sendFile(__dirname + '/assets/dummy.png'); + res.status(404).sendFile(`${__dirname}/assets/dummy.png`); return; } else if (file.data == null) { res.sendStatus(400); diff --git a/src/himasaku/server.ts b/src/himasaku/server.ts index 17edc6648..fb129513d 100644 --- a/src/himasaku/server.ts +++ b/src/himasaku/server.ts @@ -13,11 +13,11 @@ app.disable('x-powered-by'); app.locals.cache = true; app.get('/himasaku.png', (req, res) => { - res.sendFile(__dirname + '/assets/himasaku.png'); + res.sendFile(`${__dirname}/assets/himasaku.png`); }); app.get('*', (req, res) => { - res.sendFile(__dirname + '/assets/index.html'); + res.sendFile(`${__dirname}/assets/index.html`); }); module.exports = app; diff --git a/src/index.ts b/src/index.ts index a820c8b75..15e17a16a 100644 --- a/src/index.ts +++ b/src/index.ts @@ -12,7 +12,7 @@ import * as os from 'os'; import * as cluster from 'cluster'; import * as debug from 'debug'; import * as chalk from 'chalk'; -//import portUsed = require('tcp-port-used'); +// import portUsed = require('tcp-port-used'); import isRoot = require('is-root'); import { master } from 'accesses'; diff --git a/src/utils/cli/progressbar.ts b/src/utils/cli/progressbar.ts index f9b690a90..1a0023e8d 100644 --- a/src/utils/cli/progressbar.ts +++ b/src/utils/cli/progressbar.ts @@ -52,7 +52,7 @@ export default class extends ev.EventEmitter { private render(): string { const width = 30; - const t = this.text ? this.text + ' ' : ''; + const t = this.text ? `${this.text} ` : ''; const v = Math.floor((this.value / this.max) * width); const vs = new Array(v + 1).join('*'); @@ -61,7 +61,7 @@ export default class extends ev.EventEmitter { const ps = new Array(p + 1).join(' '); const percentage = Math.floor((this.value / this.max) * 100); - const percentages = chalk.gray(`(${percentage}%)`); + const percentages = chalk.gray(`(${percentage} %)`); let i: string; switch (this.indicator) { @@ -72,7 +72,7 @@ export default class extends ev.EventEmitter { case null: i = '+'; break; } - return `${i} ${t}[${vs}${ps}] ${this.value}/${this.max} ${percentages}`; + return `${i} ${t}[${vs}${ps}] ${this.value} / ${this.max} ${percentages}`; } } diff --git a/src/web/server.ts b/src/web/server.ts index cd3560d83..17e455b17 100644 --- a/src/web/server.ts +++ b/src/web/server.ts @@ -38,8 +38,8 @@ app.use((req, res, next) => { * Static assets */ app.use(favicon(`${__dirname}/assets/favicon.ico`)); -app.get('/manifest.json', (req, res) => res.sendFile(__dirname + '/assets/manifest.json')); -app.get('/apple-touch-icon.png', (req, res) => res.sendFile(__dirname + '/assets/apple-touch-icon.png')); +app.get('/manifest.json', (req, res) => res.sendFile(`${__dirname}/assets/manifest.json`)); +app.get('/apple-touch-icon.png', (req, res) => res.sendFile(`${__dirname}/assets/apple-touch-icon.png`)); app.use('/assets', express.static(`${__dirname}/assets`, { maxAge: ms('7 days') })); @@ -47,7 +47,7 @@ app.use('/assets', express.static(`${__dirname}/assets`, { /** * Common API */ -app.get(/\/api:url/, require('./service/url-preview')); +app.get(/\/api:url/, require('./service/url-preview')); app.post(/\/api:rss/, require('./service/rss-proxy')); /** @@ -74,7 +74,7 @@ app.use(subdomain({ */ app.use(require('./about')); // about docs app.get('/@/auth/*', serveApp('auth')); // authorize form -app.get('/@/dev/*', serveApp('dev')); // developer center -app.get('*', serveApp('client')); // client +app.get('/@/dev/*', serveApp('dev')); // developer center +app.get('*', serveApp('client')); // client module.exports = app; diff --git a/tslint.json b/tslint.json index 644a7159a..6f21b4b7e 100644 --- a/tslint.json +++ b/tslint.json @@ -63,6 +63,7 @@ true, "check-function-in-method" ], + "no-misused-new": true, "no-null-keyword": false, "no-shadowed-variable": false, "no-string-literal": false, @@ -92,7 +93,10 @@ "no-default-export": false, "no-mergeable-namespace": true, "no-require-imports": false, + "no-reference-import": true, "no-trailing-whitespace": true, + "no-unnecessary-callback-wrapper": true, + "no-unnecessary-initializer": true, "object-literal-sort-keys": false, "trailing-comma": true, // Style @@ -102,8 +106,12 @@ "statements" ], "arrow-parens": false, + "arrow-return-shorthand": true, "class-name": true, - "comment-format": false, + "comment-format": [ + true, + "check-space" + ], "interface-name": false, "jsdoc-format": true, "match-default-export-name": false, @@ -122,6 +130,9 @@ ], "one-variable-per-declaration": true, "ordered-imports": false, + "prefer-function-over-method": true, + "prefer-method-signature": true, + "prefer-template": true, "quotemark": [ true, "single", @@ -135,7 +146,8 @@ "check-decl", "check-operator", "check-separator", - "check-type" + "check-type", + "check-preblock" ] } }