diff --git a/README.md b/README.md index a05fbe657b..8b89c01ac3 100644 --- a/README.md +++ b/README.md @@ -85,7 +85,7 @@ Please see the [Contribution Guide](./CONTRIBUTING.md). -:heart: Backers & Sponsors +:heart: Backers ---------------------------------------------------------------- diff --git a/locales/en-US.yml b/locales/en-US.yml index 4b3bb98611..f94e6b4785 100644 --- a/locales/en-US.yml +++ b/locales/en-US.yml @@ -360,8 +360,8 @@ common/views/components/user-menu.vue: report-abuse: "Report abuse" report-abuse-detail: "What kind of nuisance did you encounter?" report-abuse-reported: "The issue has been reported to the administrator. Your cooperation is much appreciated." - silence: "Make Silence" - unsilence: "Unsilence" + silence: "Mute" + unsilence: "Unmute" suspend: "Suspend" unsuspend: "Unsuspend" common/views/components/poll.vue: @@ -1147,8 +1147,8 @@ admin/views/users.vue: unsuspend: "Unsuspend" unsuspend-confirm: "Are you sure you want to unsuspend this account?" unsuspended: "The user has successfully unsuspended." - make-silence: "Make Silence" - unmake-silence: "Unmake Silence" + make-silence: "Mute" + unmake-silence: "Unmute" verify: "Verify account" verify-confirm: "Do you want this to be a verified account?" verified: "The account is now being verified" diff --git a/locales/index.d.ts b/locales/index.d.ts new file mode 100644 index 0000000000..4a9672c63f --- /dev/null +++ b/locales/index.d.ts @@ -0,0 +1,5 @@ +type Locale = { [key: string]: string }; + +declare const locales: { [lang: string]: Locale }; + +export default locales; diff --git a/locales/pl-PL.yml b/locales/pl-PL.yml index ea549dfd67..d32d2ea59c 100644 --- a/locales/pl-PL.yml +++ b/locales/pl-PL.yml @@ -356,7 +356,7 @@ common/views/components/user-menu.vue: block: "Zablokuj" unblock: "Odblokuj" push-to-list: "Dodaj do listy" - select-list: "リストを選択してください" + select-list: "Wybierz listę" report-abuse: "Zgłoś nadużycie" report-abuse-detail: "どのような迷惑行為を行っていますか?" report-abuse-reported: "管理者に報告されました。ご協力ありがとうございました。" @@ -395,11 +395,11 @@ common/views/components/signin.vue: token: "Token" signing-in: "Logowanie…" signin: "Zaloguj" - or: "または" + or: "lub" signin-with-twitter: "Zaloguj się za pomocą Twittera" signin-with-github: "Zaloguj się za pomocą GitHuba" signin-with-discord: "Zaloguj się za pomocą Discorda" - login-failed: "ログインできませんでした。ユーザー名とパスワードを確認してください。" + login-failed: "Logowanie nie powiodło się. Upewnij się, że podałeś prawidłową nazwę użytkownika i hasło." common/views/components/signup.vue: invitation-code: "Kod zaproszenia" invitation-info: "招待コードをお持ちでない方は、管理者までご連絡ください。" @@ -472,13 +472,13 @@ common/views/components/visibility-chooser.vue: local-followers: "Dla śledzących (tylko lokalnie)" common/views/components/trends.vue: count: "{}人が投稿" - empty: "トレンドなし" + empty: "Brak popularnych hashtagów" common/views/components/language-settings.vue: title: "Język" pick-language: "Wybierz język" recommended: "Zalecane" auto: "Automatyczny" - specify-language: "言語を指定" + specify-language: "Wybierz język" info: "Musisz odświeżyć stronę, aby zmiany zostały uwzględnione." common/views/components/profile-editor.vue: title: "Twój profil" @@ -504,15 +504,15 @@ common/views/components/profile-editor.vue: upload-failed: "Wysyłanie nie powiodło się" email: "Ustawienia e-mail" email-address: "Adres e-mail" - email-verified: "メールアドレスが確認されました" + email-verified: "Twój adres e-mail został zweryfikowany." email-not-verified: "メールアドレスが確認されていません。メールボックスをご確認ください。" common/views/components/user-list-editor.vue: users: "Użytkownicy" rename: "Zmień nazwę listy" delete: "Usuń listę" remove-user: "Usuń z tej listy" - delete-are-you-sure: "リスト「$1」を削除しますか?" - deleted: "削除しました" + delete-are-you-sure: "Usunąć listę \"$1\"?" + deleted: "Usunięto" common/views/widgets/broadcast.vue: fetching: "Sprawdzanie" no-broadcasts: "Brak transmisji" @@ -595,7 +595,7 @@ desktop/views/components/activity.vue: title: "Aktywność" toggle: "Przełącz widok" desktop/views/components/calendar.vue: - title: "{year}年 {month}月" + title: "{year} / {month}" prev: "Poprzedni miesiąc" next: "Następny miesiąc" go: "Naciśnij, aby przejść" @@ -706,7 +706,7 @@ desktop/views/components/note.vue: add-reaction: "Dodaj reakcję" undo-reaction: "リアクション解除" detail: "Szczegóły" - private: "この投稿は非公開です" + private: "Ten wpis jest prywatny" deleted: "この投稿は削除されました" desktop/views/components/notes.vue: error: "Ładowanie nie powiodło się." @@ -1011,7 +1011,7 @@ admin/views/abuse.vue: target: "対象" reporter: "報告者" details: "詳細" - remove-report: "削除" + remove-report: "Usuń" admin/views/instance.vue: instance: "インスタンス" instance-name: "インスタンス名" diff --git a/package.json b/package.json index e4969ade31..53cdbdb433 100644 --- a/package.json +++ b/package.json @@ -48,6 +48,7 @@ "@types/is-svg": "3.0.0", "@types/is-url": "1.2.28", "@types/js-yaml": "3.12.0", + "@types/jsdom": "12.2.1", "@types/katex": "0.5.0", "@types/koa": "2.0.48", "@types/koa-bodyparser": "5.0.2", @@ -220,7 +221,7 @@ "ts-loader": "5.3.3", "ts-node": "7.0.1", "tslint": "5.12.0", - "tslint-sonarts": "1.8.0", + "tslint-sonarts": "1.9.0", "typescript": "3.2.4", "typescript-eslint-parser": "21.0.2", "uglify-es": "3.3.9", diff --git a/src/@types/const.json.d.ts b/src/@types/const.json.d.ts new file mode 100644 index 0000000000..40a96f2a2a --- /dev/null +++ b/src/@types/const.json.d.ts @@ -0,0 +1,3 @@ +declare module '*/const.json' { + const copyright: string; +} diff --git a/src/@types/deepcopy.d.ts b/src/@types/deepcopy.d.ts index afeee51913..3eb08d5772 100644 --- a/src/@types/deepcopy.d.ts +++ b/src/@types/deepcopy.d.ts @@ -8,7 +8,7 @@ declare namespace deepcopy { valueType: DeepcopyCustomizerValueType) => T; interface DeepcopyOptions { - customizer: DeepcopyCustomizer + customizer: DeepcopyCustomizer; } export function deepcopy( diff --git a/src/@types/escape-regexp.d.ts b/src/@types/escape-regexp.d.ts new file mode 100644 index 0000000000..d68e6048a1 --- /dev/null +++ b/src/@types/escape-regexp.d.ts @@ -0,0 +1,7 @@ +declare module 'escape-regexp' { + function escapeRegExp(str: string): string; + + namespace escapeRegExp {} // Hack + + export = escapeRegExp; +} diff --git a/src/@types/koa-slow.d.ts b/src/@types/koa-slow.d.ts new file mode 100644 index 0000000000..a7908d8607 --- /dev/null +++ b/src/@types/koa-slow.d.ts @@ -0,0 +1,14 @@ +declare module 'koa-slow' { + import { Middleware } from 'koa'; + + interface ISlowOptions { + url?: RegExp; + delay?: number; + } + + function slow(options?: ISlowOptions): Middleware; + + namespace slow { } // Hack + + export = slow; +} diff --git a/src/@types/langmap.d.ts b/src/@types/langmap.d.ts new file mode 100644 index 0000000000..a0f99028ab --- /dev/null +++ b/src/@types/langmap.d.ts @@ -0,0 +1,10 @@ +declare module 'langmap' { + type Lang = { + nativeName: string; + englishName: string; + }; + + const langmap: { [lang: string]: Lang }; + + export = langmap; +} diff --git a/src/@types/os-utils.d.ts b/src/@types/os-utils.d.ts new file mode 100644 index 0000000000..390df17d39 --- /dev/null +++ b/src/@types/os-utils.d.ts @@ -0,0 +1,30 @@ +declare module 'os-utils' { + type FreeCommandCallback = (usedmem: number) => void; + + type HarddriveCallback = (total: number, free: number, used: number) => void; + + type GetProcessesCallback = (result: string) => void; + + type CPUCallback = (perc: number) => void; + + export function platform(): NodeJS.Platform; + export function cpuCount(): number; + export function sysUptime(): number; + export function processUptime(): number; + + export function freemem(): number; + export function totalmem(): number; + export function freememPercentage(): number; + export function freeCommand(callback: FreeCommandCallback): void; + + export function harddrive(callback: HarddriveCallback): void; + + export function getProcesses(callback: GetProcessesCallback): void; + export function getProcesses(nProcess: number, callback: GetProcessesCallback): void; + + export function allLoadavg(): string; + export function loadavg(_time?: number): number; + + export function cpuFree(callback: CPUCallback): void; + export function cpuUsage(callback: CPUCallback): void; +} diff --git a/src/@types/recaptcha-promise.d.ts b/src/@types/recaptcha-promise.d.ts new file mode 100644 index 0000000000..cfbd5eebf2 --- /dev/null +++ b/src/@types/recaptcha-promise.d.ts @@ -0,0 +1,16 @@ +declare module 'recaptcha-promise' { + interface IVerifyOptions { + secret_key?: string; + } + + interface IVerify { + (response: string, remoteAddress?: string): Promise; + init(options: IVerifyOptions): IVerify; + } + + namespace recaptchaPromise {} // Hack + + const verify: IVerify; + + export = verify; +} diff --git a/src/daemons/server-stats.ts b/src/daemons/server-stats.ts index 6028277b25..b82f421779 100644 --- a/src/daemons/server-stats.ts +++ b/src/daemons/server-stats.ts @@ -3,7 +3,7 @@ import * as sysUtils from 'systeminformation'; import * as diskusage from 'diskusage'; import * as Deque from 'double-ended-queue'; import Xev from 'xev'; -const osUtils = require('os-utils'); +import * as osUtils from 'os-utils'; const ev = new Xev(); diff --git a/src/mfm/toHtml.ts b/src/mfm/toHtml.ts index 85e8c8a7fe..e67ccc5035 100644 --- a/src/mfm/toHtml.ts +++ b/src/mfm/toHtml.ts @@ -1,5 +1,4 @@ -const jsdom = require('jsdom'); -const { JSDOM } = jsdom; +import { JSDOM } from 'jsdom'; import config from '../config'; import { INote } from '../models/note'; import { intersperse } from '../prelude/array'; @@ -158,9 +157,9 @@ export function toHtml(tokens: MfmForest, mentionedRemoteUsers: INote['mentioned text(token) { const el = doc.createElement('span'); - const nodes = (token.node.props.text as string).split(/\r\n|\r|\n/).map(x => doc.createTextNode(x)); + const nodes = (token.node.props.text as string).split(/\r\n|\r|\n/).map(x => doc.createTextNode(x) as Node); - for (const x of intersperse('br', nodes)) { + for (const x of intersperse('br', nodes)) { el.appendChild(x === 'br' ? doc.createElement('br') : x); } diff --git a/src/server/api/endpoints/hashtags/search.ts b/src/server/api/endpoints/hashtags/search.ts index 4d753808d4..d8a2156357 100644 --- a/src/server/api/endpoints/hashtags/search.ts +++ b/src/server/api/endpoints/hashtags/search.ts @@ -1,7 +1,7 @@ import $ from 'cafy'; import Hashtag from '../../../../models/hashtag'; import define from '../../define'; -const escapeRegexp = require('escape-regexp'); +import * as escapeRegexp from 'escape-regexp'; export const meta = { desc: { diff --git a/src/server/api/endpoints/i/update.ts b/src/server/api/endpoints/i/update.ts index 4b02e393bf..d087687a51 100644 --- a/src/server/api/endpoints/i/update.ts +++ b/src/server/api/endpoints/i/update.ts @@ -9,7 +9,7 @@ import getDriveFileUrl from '../../../../misc/get-drive-file-url'; import { parse, parsePlain } from '../../../../mfm/parse'; import extractEmojis from '../../../../misc/extract-emojis'; import extractHashtags from '../../../../misc/extract-hashtags'; -const langmap = require('langmap'); +import * as langmap from 'langmap'; export const meta = { desc: { diff --git a/src/server/api/endpoints/users/search.ts b/src/server/api/endpoints/users/search.ts index 86b16dcbb1..b0a789c7d5 100644 --- a/src/server/api/endpoints/users/search.ts +++ b/src/server/api/endpoints/users/search.ts @@ -1,5 +1,5 @@ import $ from 'cafy'; -const escapeRegexp = require('escape-regexp'); +import * as escapeRegexp from 'escape-regexp'; import User, { pack, validateUsername, IUser } from '../../../../models/user'; import define from '../../define'; diff --git a/src/server/api/private/signup.ts b/src/server/api/private/signup.ts index b89629bcd1..6318eabdb8 100644 --- a/src/server/api/private/signup.ts +++ b/src/server/api/private/signup.ts @@ -8,14 +8,13 @@ import Meta from '../../../models/meta'; import RegistrationTicket from '../../../models/registration-tickets'; import usersChart from '../../../chart/users'; import fetchMeta from '../../../misc/fetch-meta'; +import * as recaptcha from 'recaptcha-promise'; export default async (ctx: Koa.BaseContext) => { const body = ctx.request.body as any; const instance = await fetchMeta(); - const recaptcha = require('recaptcha-promise'); - // Verify recaptcha // ただしテスト時はこの機構は障害となるため無効にする if (process.env.NODE_ENV !== 'test' && instance.enableRecaptcha) { diff --git a/src/server/index.ts b/src/server/index.ts index 57f1326f2f..be0a6f5c77 100644 --- a/src/server/index.ts +++ b/src/server/index.ts @@ -13,7 +13,7 @@ import * as mount from 'koa-mount'; import * as compress from 'koa-compress'; import * as koaLogger from 'koa-logger'; import * as requestStats from 'request-stats'; -//const slow = require('koa-slow'); +//import * as slow from 'koa-slow'; import activityPub from './activitypub'; import webFinger from './webfinger'; diff --git a/src/server/web/docs.ts b/src/server/web/docs.ts index f823c308c2..0597f50a9c 100644 --- a/src/server/web/docs.ts +++ b/src/server/web/docs.ts @@ -14,9 +14,9 @@ import * as glob from 'glob'; import * as yaml from 'js-yaml'; import config from '../../config'; import { licenseHtml } from '../../misc/license'; -const constants = require('../../const.json'); +import { copyright } from '../../const.json'; import endpoints from '../api/endpoints'; -const locales = require('../../../locales'); +import locales from '../../../locales'; import * as nestedProperty from 'nested-property'; function getLang(lang: string): string { @@ -59,7 +59,7 @@ async function genVars(lang: string): Promise<{ [key: string]: any }> { vars['config'] = config; - vars['copyright'] = constants.copyright; + vars['copyright'] = copyright; vars['license'] = licenseHtml;