Compare commits

...

191 Commits

Author SHA1 Message Date
b14e347da1 12.101.0 2021-12-29 13:41:50 +09:00
034b8f09df enhance(client): 2021-12-29 13:36:17 +09:00
c537a0ba93 enhance(client): 2021-12-29 13:14:19 +09:00
897d775b14 Merge branch 'develop' of https://github.com/misskey-dev/misskey into develop 2021-12-29 05:09:34 +09:00
4f43f019e0 fix(test): ignore ResizeObserver error 2021-12-29 05:09:26 +09:00
1ea0aaef76 update deps 2021-12-29 05:00:39 +09:00
fd1cfcff5f New Crowdin updates (#8066)
* New translations ja-JP.yml (Chinese Simplified)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Chinese Simplified)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (French)

* New translations ja-JP.yml (Chinese Simplified)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Indonesian)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (Chinese Traditional)

* New translations ja-JP.yml (Ukrainian)

* New translations ja-JP.yml (Spanish)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Polish)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Italian)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (Arabic)

* New translations ja-JP.yml (Polish)

* New translations ja-JP.yml (Polish)

* New translations ja-JP.yml (Polish)

* New translations ja-JP.yml (Polish)

* New translations ja-JP.yml (Polish)

* New translations ja-JP.yml (Polish)

* New translations ja-JP.yml (Polish)

* New translations ja-JP.yml (Polish)

* New translations ja-JP.yml (Polish)

* New translations ja-JP.yml (Polish)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Chinese Simplified)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)
2021-12-29 04:55:29 +09:00
c7308f4178 fix(client): fix sidebar style 2021-12-29 04:38:25 +09:00
5cc65c5bd3 update deps 2021-12-29 04:30:38 +09:00
f216dd7617 clean up 2021-12-29 04:30:12 +09:00
af022fd8b8 fix html blockquote conversion (#8069) 2021-12-29 04:15:28 +09:00
5c7181ca21 feat(client): svg sparkle effect
Resolve #8088
2021-12-29 04:13:45 +09:00
30892ebfa3 Update .eslintrc.js 2021-12-28 00:33:27 +09:00
ae2d71553e enhance(client): 🎨 2021-12-27 22:59:14 +09:00
154e418c34 Update const.ts 2021-12-26 12:10:33 +09:00
cfd1888969 refactor 2021-12-26 12:08:22 +09:00
d53795184c enhance(server): better content type detection 2021-12-26 01:43:51 +09:00
fe3609451e enhance(client): 🎨 2021-12-26 01:42:50 +09:00
3692c9eb64 refactor 2021-12-26 01:42:06 +09:00
89a532eeac chore(client): tweak style 2021-12-25 16:53:15 +09:00
85740dd09f fix(client): fix sidebar style
Fix #8049
2021-12-25 16:03:57 +09:00
b05cfe4a84 enhance(client): improve note preview
Fix #8029
2021-12-25 15:49:37 +09:00
322b64c0b4 Merge branch 'develop' of https://github.com/misskey-dev/misskey into develop 2021-12-25 13:38:55 +09:00
601bc3e3cc clean up 2021-12-25 13:38:53 +09:00
c77fe1f2cf Truncate push notification message (#8089)
* Truncate push notification message

* fix
2021-12-25 02:01:35 +09:00
8e7744a695 fix(client): ドロワーメニューでセーフエリアを考慮するように 2021-12-24 23:25:23 +09:00
901d6894de Merge branch 'develop' of https://github.com/misskey-dev/misskey into develop 2021-12-24 12:34:27 +09:00
b463663175 enhance(client): tweak ui 2021-12-24 12:34:24 +09:00
2294e9ffdc Update CONTRIBUTING.md 2021-12-24 01:31:37 +09:00
1122f7281e ノートページでRenoteである場合にnoindexを付加 (#8074) 2021-12-24 01:16:58 +09:00
99ced12ac5 fix(client): fix zindex issue
Fix #8086
2021-12-24 01:07:04 +09:00
2e80f9dfba clean up 2021-12-23 17:05:50 +09:00
3a990dce75 refactor(client): refactor 2021-12-23 17:05:26 +09:00
cc441258db enhance(client): tweak channel pages 2021-12-23 16:10:13 +09:00
ee144acea9 Merge branch 'develop' of https://github.com/misskey-dev/misskey into develop 2021-12-22 22:38:45 +09:00
35b7ce1a96 enhance(client): メールアドレスの認証にクリック必須に 2021-12-22 22:38:42 +09:00
dc0e55bf16 wip (#8077) 2021-12-21 00:20:30 +09:00
a3dceee7c0 12.100.2 2021-12-18 20:59:05 +09:00
7940417d23 New Crowdin updates (#8058)
* New translations ja-JP.yml (Chinese Simplified)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (French)

* New translations ja-JP.yml (Chinese Simplified)

* New translations ja-JP.yml (Japanese, Kansai)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Indonesian)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (Chinese Traditional)

* New translations ja-JP.yml (Ukrainian)

* New translations ja-JP.yml (Spanish)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Polish)

* New translations ja-JP.yml (Dutch)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Italian)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (Czech)

* New translations ja-JP.yml (Arabic)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (Chinese Simplified)

* New translations ja-JP.yml (Japanese, Kansai)

* New translations ja-JP.yml (Japanese, Kansai)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (English)
2021-12-18 20:54:35 +09:00
b1751543aa fix(client): カスタム絵文字一覧ページの負荷が高いのを修正 2021-12-18 20:20:49 +09:00
034dcaeb9d clean up 2021-12-18 20:20:02 +09:00
936fb136d2 🎨 2021-12-18 20:12:09 +09:00
55ab528c87 Update CHANGELOG.md 2021-12-18 18:13:50 +09:00
c544e38f34 fix(client/deck): カラムの増減がページをリロードするまで正しく反映されない問題を修正
Fix #8065
2021-12-18 18:11:45 +09:00
9b771baa5e 🎨 2021-12-18 15:00:29 +09:00
f607faef0b refactor(client): improve $i type 2021-12-18 14:56:35 +09:00
cb16ff866c improve(client): show reload tip 2021-12-18 14:56:15 +09:00
d6e85ffb59 feat(client): improve toast component and show welcome message 2021-12-18 14:55:53 +09:00
f9e3fd7001 fix(client): fix zindex issue 2021-12-18 12:14:27 +09:00
ba1e14443c fix(client): fix zindex issue
Fix #8064
Fix #8063
2021-12-18 12:12:47 +09:00
35cd9e621a 12.100.1 2021-12-17 19:42:50 +09:00
ea66080197 fix(client): fix zindex issue 2021-12-17 19:38:17 +09:00
06837662a9 fix(client): tweak style 2021-12-17 19:36:18 +09:00
f9024a0058 improve(client): tweak drawer max height 2021-12-17 19:34:58 +09:00
493ff2eed5 fix(client): fix zindex issue 2021-12-17 17:37:58 +09:00
ac82435014 12.100.0 2021-12-17 16:17:56 +09:00
d9257a5c0e 🎨 2021-12-17 16:14:43 +09:00
f7c90b58d6 enhance(client): リアクションピッカーの表示方法を選択できるように 2021-12-17 16:14:31 +09:00
2f8e3559b5 update deps 2021-12-17 14:12:34 +09:00
e96a914b6b 🎨 2021-12-17 13:15:06 +09:00
6ab2c7780c enhance(client): improve modal menu for mobile 2021-12-17 02:14:40 +09:00
6d6162333e chore: remove ms-vscode.typescript-javascript-grammar (#8061) 2021-12-16 23:46:18 +09:00
58b9dc581e fix(client): fix zindex issues
Fix #8060
2021-12-16 10:57:07 +09:00
fa8eb43eaf fix(client): 一部のコンポーネントが裏に隠れるのを修正 2021-12-15 21:44:41 +09:00
cf5fe2d107 12.99.3 2021-12-14 23:28:19 +09:00
50f2025421 fix(client): オートコンプリートがダイアログの裏に隠れる問題を修正 2021-12-14 23:27:38 +09:00
1894df882b 12.99.2 2021-12-14 23:13:31 +09:00
983599bdae Update 1639325650583-chart-v3.js 2021-12-14 23:13:09 +09:00
6319dd1bfb 12.99.1 2021-12-14 23:03:45 +09:00
d1ea8654e6 fix: YAMLファイルへのバックスペース文字混入対策 2021-12-14 23:03:18 +09:00
13288e1ed8 12.99.0 2021-12-14 22:38:12 +09:00
6d82bbef17 Update CHANGELOG.md 2021-12-14 22:37:50 +09:00
a46e2f2868 Update formula-core.vue 2021-12-14 22:37:18 +09:00
6cbc460c19 Merge branch 'develop' of https://github.com/misskey-dev/misskey into develop 2021-12-14 22:27:52 +09:00
9cd2b767a9 enhance(client): make possible to leave a group 2021-12-14 22:27:33 +09:00
60b9c467e6 New Crowdin updates (#8053)
* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)
2021-12-14 21:57:12 +09:00
ceabd7c791 Update CHANGELOG.md 2021-12-14 21:55:48 +09:00
0be4e10462 enhance(backend): improve chart engine 2021-12-14 18:12:37 +09:00
d95fafb5b3 New Crowdin updates (#8033)
* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Chinese Simplified)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (Dutch)

* New translations ja-JP.yml (Dutch)

* New translations ja-JP.yml (Dutch)

* New translations ja-JP.yml (Dutch)

* New translations ja-JP.yml (Dutch)

* New translations ja-JP.yml (Dutch)

* New translations ja-JP.yml (French)

* New translations ja-JP.yml (Chinese Simplified)

* New translations ja-JP.yml (Japanese, Kansai)

* New translations ja-JP.yml (Indonesian)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (Chinese Traditional)

* New translations ja-JP.yml (Ukrainian)

* New translations ja-JP.yml (Spanish)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Polish)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Italian)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (Arabic)

* New translations ja-JP.yml (Dutch)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (Chinese Simplified)
2021-12-12 22:36:24 +09:00
ef485044ea Update export-custom-emojis.ts 2021-12-12 06:24:13 +09:00
c599a304c8 refactor 2021-12-12 06:21:48 +09:00
6d918f195a clean up 2021-12-11 23:21:33 +09:00
31a3748a18 fix(client): fix z-index bug 2021-12-11 23:01:05 +09:00
48212e7a44 tweak component 2021-12-10 21:41:37 +09:00
0f7241c2c2 Update CONTRIBUTING.md 2021-12-10 20:42:01 +09:00
bd903cdbb5 feat: カスタム絵文字エクスポート 2021-12-10 18:24:26 +09:00
0b038f6477 fix(client): メニューなどがウィンドウの裏に隠れる問題を修正 2021-12-10 18:20:41 +09:00
7e26daa51b fix(client): クリップの設定を編集できない問題を修正
Fix #8046
2021-12-10 16:15:36 +09:00
225d7701a4 🎨 2021-12-10 16:01:35 +09:00
1cae39e281 tweak style 2021-12-10 15:33:01 +09:00
b635b064ee fix: integration links (#8036) 2021-12-10 13:32:55 +09:00
640fc337af client: tweak style 2021-12-10 11:56:23 +09:00
43f2ac56ee Merge branch 'develop' of https://github.com/misskey-dev/misskey into develop 2021-12-10 10:46:40 +09:00
d3c7c0ebe3 client: tweak style 2021-12-10 10:46:29 +09:00
d15c8afcdf Fix japanese instanceMuteDescription string (#8047) 2021-12-10 10:05:18 +09:00
20134a5367 feat: improve follow export 2021-12-10 01:22:35 +09:00
46c0280764 refactor(client): 2021-12-10 01:22:22 +09:00
980a99b6c9 Update .eslintrc.js 2021-12-10 00:10:10 +09:00
c69b72e199 fix lint 2021-12-09 23:58:30 +09:00
0abe2dfee0 Update instance-mute.vue 2021-12-09 21:48:57 +09:00
caf0a219a6 Update instance-mute.vue 2021-12-09 21:45:14 +09:00
4341c4cccc Update CHANGELOG.md 2021-12-09 21:40:15 +09:00
054417354c feat: user-level instance mute (#7712)
* Update ja-JP.yml

* Added settable config for muted instances

* added psql query for removal of muted notes

* Added filtering and trimming for instance mutes

* cleaned up filtering of bad instance mutes and added a refresh at the end for the list on the client

* Added notification & streaming timeline muting

* Updated changelog

* Added missing semicolon

* Apply japanese string suggestions from robflop

Co-authored-by: Robin B. <robflop98@outlook.com>

* Changed Ja-JP instance mute title string to one suggested by sousuke

Co-authored-by: sousuke0422 <sousuke20xx@gmail.com>

* Update ja-JP instanceMuteDescription based on sousuke's suggestion

Co-authored-by: sousuke0422 <sousuke20xx@gmail.com>

* added notification mute

* added notification and note children muting

* Fixed a bug where local notifications were getting filtered on cold start

* Fixed instance mute imports

* Fixed not saving/loading instance mutes

* removed en-US translations for instance mute

* moved instance mute migration to js

* changed settings index back to spaces

* removed destructuring assignment from notification stream in instance mute check call

Co-authored-by: tamaina <tamaina@hotmail.co.jp>

* added .note accessor for checking note data instead of notification data

* changed note to use Packed<'Note'> instead of any and removed usage of snake case

Co-authored-by: tamaina <tamaina@hotmail.co.jp>

* changed notification mute check to check specifically for notification host

* changed to using single quotes

* moved @click to the end for the linter

* revert unnecessary changes

* restored newlines

* whitespace removal

Co-authored-by: syuilo <syuilotan@yahoo.co.jp>
Co-authored-by: Robin B. <robflop98@outlook.com>
Co-authored-by: sousuke0422 <sousuke20xx@gmail.com>
Co-authored-by: puffaboo <emilis@jigglypuff.club>
Co-authored-by: tamaina <tamaina@hotmail.co.jp>
2021-12-09 21:38:56 +09:00
b9095995eb update deps 2021-12-09 21:31:36 +09:00
a60bd33cfc Update about-misskey.vue 2021-12-09 21:30:02 +09:00
7eedb9b19b Fix(client): iをパラメーターに含めてもデフォルトのiが付与されるのを修正 (#8039) 2021-12-05 21:52:57 +09:00
e804a299e0 fix(client): better hover detection 2021-12-05 20:01:52 +09:00
bcf7530eef refactor(client): 2021-12-05 16:57:49 +09:00
bed982e705 add note 2021-12-05 13:13:46 +09:00
d9853d9683 Merge branch 'develop' of https://github.com/misskey-dev/misskey into develop 2021-12-05 13:10:29 +09:00
fbe4869d1e fix(client): タッチ機能付きディスプレイを使っていてマウス操作をしている場合に一部機能が動作しない問題を修正 2021-12-05 13:10:19 +09:00
ac04c46d3b Update other.vue (#8040) 2021-12-05 12:47:57 +09:00
b1bd7307bb Fix(client): APIコンソールで with credential がオフだとiが付与されないように (#8038) 2021-12-05 03:01:35 +09:00
8a3f860213 fix(client): fix range slider rendering 2021-12-04 20:35:08 +09:00
e42e9530cb fix(client): tweak style 2021-12-04 18:27:31 +09:00
b65353bc3c fix(client): pagesで関数を定義できない問題を修正 2021-12-04 18:12:03 +09:00
75c087b79f 12.98.0 2021-12-03 22:29:58 +09:00
300785923c New Crowdin updates (#8031)
* New translations ja-JP.yml (German)

* New translations ja-JP.yml (Chinese Simplified)
2021-12-03 22:28:42 +09:00
00982d2742 enhance(client): improve usability 2021-12-03 22:26:09 +09:00
4f208b99ff enhance(client): improve usability 2021-12-03 22:22:08 +09:00
fa36b88af4 refactor(client): refactor ui components 2021-12-03 22:09:40 +09:00
8223a069fe fix(server): Fix #8032 2021-12-03 17:47:44 +09:00
8de8de7669 client: tweak ui 2021-12-03 16:07:50 +09:00
705b46b3a0 Bump cypress from 9.0.0 to 9.1.0 (#8022)
Bumps [cypress](https://github.com/cypress-io/cypress) from 9.0.0 to 9.1.0.
- [Release notes](https://github.com/cypress-io/cypress/releases)
- [Changelog](https://github.com/cypress-io/cypress/blob/develop/.releaserc.base.js)
- [Commits](https://github.com/cypress-io/cypress/compare/v9.0.0...v9.1.0)

---
updated-dependencies:
- dependency-name: cypress
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-12-03 14:18:49 +09:00
e46e88344c New Crowdin updates (#8007)
* New translations ja-JP.yml (English)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Chinese Simplified)

* New translations ja-JP.yml (Arabic)

* New translations ja-JP.yml (Arabic)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (French)

* New translations ja-JP.yml (Chinese Simplified)

* New translations ja-JP.yml (Japanese, Kansai)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Indonesian)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (Chinese Traditional)

* New translations ja-JP.yml (Ukrainian)

* New translations ja-JP.yml (Spanish)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Polish)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Italian)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (Arabic)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Chinese Simplified)

* New translations ja-JP.yml (Spanish)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (Portuguese)

* New translations ja-JP.yml (Portuguese)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (Chinese Simplified)

* New translations ja-JP.yml (Arabic)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Dutch)

* New translations ja-JP.yml (Dutch)

* New translations ja-JP.yml (Dutch)

* New translations ja-JP.yml (Dutch)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Indonesian)
2021-12-03 14:14:58 +09:00
5c8561c903 client: tweak ui 2021-12-03 13:55:30 +09:00
5fe2e8a59a client: tweak ui 2021-12-03 13:52:57 +09:00
c722225c80 client: tweak ui 2021-12-03 12:41:30 +09:00
584ceb3714 Update CHANGELOG.md 2021-12-03 12:01:31 +09:00
902bed4db3 client: tweak ui 2021-12-03 12:00:11 +09:00
e617ced1d3 refactoring
https: //github.com/misskey-dev/misskey/pull/7901
Co-Authored-By: MeiMei <30769358+mei23@users.noreply.github.com>
2021-12-03 11:43:05 +09:00
22464c434e fix: 画像ファイルの縦横サイズの取得で Exif Orientation を考慮する (#8014)
* 画像ファイルの縦横サイズの取得で Exif Orientation を考慮する

* test: Add rotate.jpg test

* Webpublic 画像を返す時のみ Exif Orientation を考慮して縦横サイズを返す

* test: Support orientation
2021-12-03 11:19:28 +09:00
f33ded3107 feat: Undo Accept (#7980)
* allow breaking of follow

* send undo

* delete by using reject follow
2021-12-03 11:14:44 +09:00
a82ff360c6 add todo 2021-12-02 20:58:23 +09:00
14fa8b177d client: tweak ui 2021-12-02 20:46:16 +09:00
e46bb2f948 Update CHANGELOG.md 2021-12-02 20:29:35 +09:00
3eef0a65c2 fix mentions in replies (#8030) 2021-12-02 20:27:42 +09:00
bcd188a0e0 enhance(client): make possible to close image dialog with click
Related #8023
2021-12-02 20:20:40 +09:00
f38b6a1806 client: tweak ui 2021-12-02 20:09:12 +09:00
4cc2a561d5 🎨 2021-11-30 23:08:34 +09:00
f3e29c4f6a fix: LTLやGTLが無効になっている場合でもUI上にタブが表示される問題を修正 (#8026)
* wip

* add changelog

* 変換ミス修正
2021-11-30 23:03:03 +09:00
2fc58a780e feat(client): Renoteなノート詳細ページから元のノートページに遷移できるように 2021-11-28 20:29:37 +09:00
561b0fc10e feat(client): show confirm dialog when vote 2021-11-28 20:23:48 +09:00
b8f42fca56 Update CHANGELOG.md 2021-11-28 20:12:43 +09:00
e8005c8d3a client: refine ui 2021-11-28 20:07:37 +09:00
335e4bd213 /antennas/notes API で日付による絞り込みができるようにする (#8015) 2021-11-28 13:45:17 +09:00
0d21083c9a Fix install docs link in readme (#8017) 2021-11-28 12:43:08 +09:00
698e0d08a1 fix(client): モバイルでタップしたときにツールチップが表示される問題を修正 2021-11-27 18:29:23 +09:00
8e0108a0b8 fix: notification.vueのIntersectionObserverまわりを修正 (#8010)
* fix notification.vue

* remove a blank line

* disconnect intersection observer

* disconnect2

* Update packages/client/src/components/notification.vue

Co-authored-by: Acid Chicken (硫酸鶏) <root@acid-chicken.com>

* disconnect

* oops

Co-authored-by: Acid Chicken (硫酸鶏) <root@acid-chicken.com>
2021-11-26 13:43:11 +09:00
d9775c147f fix: toolsが動かないのを修正 (#8008)
* Move tools

* Fix DB
2021-11-26 13:41:49 +09:00
b4ebf254c8 Update ja-JP.yml 2021-11-26 13:41:31 +09:00
dec7c4f722 Implemented a rotate MFM (#8016)
Co-authored-by: Richard Bowey <me@epickitty.uk>
2021-11-26 13:39:57 +09:00
aaba43e754 Update README.md 2021-11-21 18:40:09 +09:00
9604ad3dc1 fix(client): リアクションツールチップ、Renoteツールチップのユーザーの並び順を修正 2021-11-21 14:09:41 +09:00
8e04bd12cf fix(client): ログインにおいてパスワードが誤っている際のエラーメッセージが正しく表示されない問題を修正 2021-11-21 14:01:53 +09:00
270df5c5b0 move tools dir into src 2021-11-21 13:43:07 +09:00
f5bea67515 client: ノートにモデレーターバッジを表示するのを廃止 2021-11-21 13:36:44 +09:00
1ec4156b49 Update README.md 2021-11-20 18:22:29 +09:00
5e33ca3da0 Update README.md 2021-11-20 18:21:18 +09:00
b9a57715e8 update banner image 2021-11-20 13:54:28 +09:00
24681bbe10 Update package.json 2021-11-19 20:41:32 +09:00
a0c6ae2cba 12.97.0 2021-11-19 20:39:43 +09:00
9a51ae5def New Crowdin updates (#7984)
* New translations ja-JP.yml (Czech)

* New translations ja-JP.yml (Chinese Simplified)

* New translations ja-JP.yml (Japanese, Kansai)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (Chinese Traditional)

* New translations ja-JP.yml (Ukrainian)

* New translations ja-JP.yml (Spanish)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Polish)

* New translations ja-JP.yml (Dutch)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Italian)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (Arabic)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Chinese Simplified)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)

* New translations ja-JP.yml (Esperanto)
2021-11-19 20:38:12 +09:00
f7c21868fe Update .eslintrc.js 2021-11-19 19:44:27 +09:00
5d968afa74 update linr 2021-11-19 19:36:12 +09:00
b6e3f1c490 Update .eslintrc.js 2021-11-19 19:05:03 +09:00
cb4d65b5c9 feat(client): keep line breaks of translated text to improve readability 2021-11-19 19:03:25 +09:00
a902576334 fix(client): better error handling of file upload 2021-11-19 18:57:34 +09:00
1c6463e66f feat(client): collapse sub note automatically 2021-11-19 18:56:30 +09:00
1cf5198372 Update CONTRIBUTING.md 2021-11-19 14:57:07 +09:00
a9a5673069 implement dev command 2021-11-19 14:48:59 +09:00
9d67857a34 fix(client): fix plugin activate and uninstall (#7991)
* fix(client): fix plugin activate and uninstall

* Fix(client): fix package activates
2021-11-19 00:38:20 +09:00
25fde3b5eb lint: add missing semicolon 2021-11-18 23:52:51 +09:00
0e3ca41b3c improve ide support 2021-11-18 23:52:41 +09:00
318759cfa4 fix 2021-11-18 23:36:04 +09:00
73b5c12927 introduce lint for client
Resolve #7998
2021-11-18 23:32:43 +09:00
c850cef711 Update CHANGELOG.md 2021-11-18 22:12:17 +09:00
12fad68f58 limit depth of reply posts (#7979)
* limit depth of reply posts

* some tweaks

Co-authored-by: syuilo <Syuilotan@yahoo.co.jp>
2021-11-18 22:11:44 +09:00
037db7c5ef lint: warn non-null-assertion to reduce unexpected behaviour 2021-11-18 20:12:50 +09:00
ea9aeef9d8 refactor(client): refactor dialog functions to improve type inference 2021-11-18 18:45:58 +09:00
63415f1074 Merge branch 'develop' of https://github.com/misskey-dev/misskey into develop 2021-11-18 17:41:21 +09:00
dded3912f8 ci: cache node_modules 2021-11-18 17:41:19 +09:00
d35f0247a2 Update CHANGELOG.md 2021-11-18 17:40:20 +09:00
76a7b5f067 fix(client):fix search all users (#7993) 2021-11-18 17:38:58 +09:00
c864d700d2 feat(client): アカウント削除に確認ダイアログを出すように 2021-11-14 13:27:46 +09:00
50e1040f1e fix(client): fix tooltip style 2021-11-14 13:13:22 +09:00
8a40026c5c fix(client): improve error handling 2021-11-14 13:13:05 +09:00
974250da6c Fix v12.96.x Docker (#7982) 2021-11-14 10:43:19 +09:00
7042933b3b Update build.js 2021-11-14 00:07:07 +09:00
8b7f5be878 fix for lint 2021-11-13 19:10:14 +09:00
01afdc410e Update .eslintrc.js 2021-11-13 19:10:08 +09:00
1034 changed files with 14718 additions and 11759 deletions

View File

@ -17,5 +17,9 @@ jobs:
- uses: actions/setup-node@v1
with:
node-version: 12.x
- uses: actions/cache@v2
with:
path: '**/node_modules'
key: ${{ runner.os }}-modules-${{ hashFiles('**/yarn.lock') }}
- run: yarn install
- run: yarn lint

View File

@ -75,6 +75,10 @@ jobs:
uses: actions/setup-node@v1
with:
node-version: ${{ matrix.node-version }}
- uses: actions/cache@v2
with:
path: '**/node_modules'
key: ${{ runner.os }}-modules-${{ hashFiles('**/yarn.lock') }}
- name: Install dependencies
run: yarn install
- name: Check yarn.lock

View File

@ -2,8 +2,7 @@
"recommendations": [
"editorconfig.editorconfig",
"eg2.vscode-npm-script",
"ms-vscode.typescript-javascript-grammar",
"ms-vscode.vscode-typescript-tslint-plugin",
"dbaeumer.vscode-eslint",
"johnsoncodehk.volar",
"sysoev.language-stylus"
]

View File

@ -7,6 +7,97 @@
-->
## 12.101.0 (2021/12/29)
### Improvements
- クライアント: ノートプレビューの精度を改善
- クライアント: MFM sparkleエフェクトの改善
- クライアント: デザインの調整
- セキュリティの向上
### Bugfixes
- クライアント: 一部のコンポーネントが裏に隠れるのを修正
- fix html blockquote conversion
## 12.100.2 (2021/12/18)
### Bugfixes
- クライアント: Deckカラムの増減がページをリロードするまで正しく反映されない問題を修正
- クライアント: 一部のコンポーネントが裏に隠れるのを修正
- クライアント: カスタム絵文字一覧ページの負荷が高いのを修正
## 12.100.1 (2021/12/17)
### Bugfixes
- クライアント: デザインの調整
## 12.100.0 (2021/12/17)
### Improvements
- クライアント: モバイルでの各種メニュー、リアクションピッカーの表示を改善
### Bugfixes
- クライアント: 一部のコンポーネントが裏に隠れるのを修正
## 12.99.3 (2021/12/14)
### Bugfixes
- クライアント: オートコンプリートがダイアログの裏に隠れる問題を修正
## 12.99.2 (2021/12/14)
## 12.99.1 (2021/12/14)
## 12.99.0 (2021/12/14)
### Improvements
- Added a user-level instance mute in user settings
- フォローエクスポートでミュートしているユーザーを含めないオプションを追加
- フォローエクスポートで使われていないアカウントを含めないオプションを追加
- カスタム絵文字エクスポート機能
- チャートのパフォーマンスの改善
- グループから抜けられるように
### Bugfixes
- クライアント: タッチ機能付きディスプレイを使っていてマウス操作をしている場合に一部機能が動作しない問題を修正
- クライアント: クリップの設定を編集できない問題を修正
- クライアント: メニューなどがウィンドウの裏に隠れる問題を修正
## 12.98.0 (2021/12/03)
### Improvements
- API: /antennas/notes API で日付による絞り込みができるように
- クライアント: アンケートに投票する際に確認ダイアログを出すように
- クライアント: Renoteなート詳細ページから元のートページに遷移できるように
- クライアント: 画像ポップアップでクリックで閉じられるように
- クライアント: デザインの調整
- フォロワーを解除できる機能
### Bugfixes
- クライアント: LTLやGTLが無効になっている場合でもUI上にタブが表示される問題を修正
- クライアント: ログインにおいてパスワードが誤っている際のエラーメッセージが正しく表示されない問題を修正
- クライアント: リアクションツールチップ、Renoteツールチップのユーザーの並び順を修正
- クライアント: サウンドのマスターボリュームが正しく保存されない問題を修正
- クライアント: 一部環境において通知が表示されると操作不能になる問題を修正
- クライアント: モバイルでタップしたときにツールチップが表示される問題を修正
- クライアント: リモートインスタンスのノートに返信するとき、対象のノートにそのリモートインスタンス内のユーザーへのメンションが含まれていると、返信テキスト内にローカルユーザーへのメンションとして引き継がれてしまう場合がある問題を修正
- クライアント: 画像ビューワーで全体表示した時に上側の一部しか表示されない画像がある問題を修正
- API: ユーザーを取得時に条件によっては内部エラーになる問題を修正
### Changes
- クライアント: ノートにモデレーターバッジを表示するのを廃止
## 12.97.0 (2021/11/19)
### Improvements
- クライアント: 返信先やRenoteに対しても自動折りたたみされるように
- クライアント: 長いスレッドの表示を改善
- クライアント: 翻訳にもMFMを適用し、元の文章の改行などを保持するように
- クライアント: アカウント削除に確認ダイアログを出すように
### Bugfixes
- クライアント: ユーザー検索の「全て」が動作しない問題を修正
- クライアント: リアクション一覧、Renote一覧ツールチップのスタイルを修正
## 12.96.1 (2021/11/13)
### Improvements
- npm scriptの互換性を向上

View File

@ -49,6 +49,11 @@ If your language is not listed in Crowdin, please open an issue.
![Crowdin](https://d322cqt584bo4o.cloudfront.net/misskey/localized.svg)
## Development
During development, it is useful to use the `npm run dev` command.
This command monitors the server-side and client-side source files and automatically builds them if they are modified.
In addition, it will also automatically start the Misskey server process.
## Testing
- Test codes are located in [`/test`](/test).
@ -80,6 +85,11 @@ TODO
Misskey uses GitHub Actions for executing automated tests.
Configuration files are located in [`/.github/workflows`](/.github/workflows).
## Vue
Misskey uses Vue(v3) as its front-end framework.
**When creating a new component, please use the Composition API (and [setup sugar](https://v3.vuejs.org/api/sfc-script-setup.html)) instead of the Options API.**
Some of the existing components are implemented in the Options API, but it is an old implementation. Refactors that migrate those components to the Composition API are also welcome.
## Adding MisskeyRoom items
* Use English for material, object and texture names.
* Use meter for unit of length.

View File

@ -29,7 +29,6 @@ COPY --from=builder /misskey/built ./built
COPY --from=builder /misskey/packages/backend/node_modules ./packages/backend/node_modules
COPY --from=builder /misskey/packages/backend/built ./packages/backend/built
COPY --from=builder /misskey/packages/client/node_modules ./packages/client/node_modules
COPY --from=builder /misskey/packages/client/built ./packages/client/built
COPY . ./
CMD ["npm", "run", "migrateandstart"]

129
README.md
View File

@ -1,116 +1,57 @@
[![Misskey](/assets/about/banner.svg)](https://join.misskey.page/)
<h1 align="center">Misskey</h1>
[![Misskey](https://github.com/misskey-dev/assets/blob/main/banner.png?raw=true)](https://join.misskey.page/)
<div align="center">
[![Dependencies](https://img.shields.io/david/misskey-dev/misskey.svg?style=for-the-badge&logo=npm)](https://david-dm.org/misskey-dev/misskey)
[![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=for-the-badge&logo=github)](http://makeapullrequest.com)
[![Awesome Humane Tech](https://raw.githubusercontent.com/humanetech-community/awesome-humane-tech/main/humane-tech-badge.svg?sanitize=true)](https://github.com/humanetech-community/awesome-humane-tech)
**🌎 A forever evolving, interplanetary microblogging platform. 🚀**
**A forever evolving, interplanetary microblogging platform.**
**Misskey** is a distributed microblogging platform with advanced features such as Reactions and a highly customizable UI.
<a href="https://join.misskey.page/">Misskey</a> is a decentralized microblogging platform born on Earth.
Since it exists within the Fediverse (a universe where various social media platforms are organized),
it is mutually linked with other social media platforms.
Why don't you take a short break from the hustle and bustle of the city, and dive into a new Internet? <a href="https://join.misskey.page/">Find an instance!</a>
[Learn more](https://misskey-hub.net/)
---
[✨ Find an instance](https://misskey-hub.net/instances.html)
[📦 Create your own instance](https://misskey-hub.net/docs/install.html)
[🛠️ Contribute](./CONTRIBUTING.md)
[🚀 Join the community](https://discord.gg/Wp8gVStHW3)
---
<a href="https://www.patreon.com/syuilo"><img src="https://c5.patreon.com/external/logo/become_a_patron_button@2x.png" alt="Become a Patron!" width="160" /></a>
</div>
---
<div>
Do you have a question? Or are you experiencing trouble?
Visit [our forum](https://forum.misskey.io/)!
<a href="https://xn--931a.moe/"><img src="https://github.com/misskey-dev/misskey/blob/develop/assets/ai.png?raw=true" align="right" height="320px"/></a>
---
## ✨ Features
- **ActivityPub support**\
It is possible to interact with other software.
- **Reactions**\
You can add "reactions" to each post, making it easy for you to express your feelings.
- **Drive**\
An interface to manage uploaded files such as images, videos, sounds, etc.
You can also organize your favorite content into folders, making it easy to share again.
- **Rich Web UI**\
Misskey has a rich WebUI by default.
It is highly customizable by flexibly changing the layout and installing various widgets and themes.
Furthermore, plug-ins can be created using AiScript, a original programming language.
- and more...
![](https://ja.mstdn.wiki/images/e/ed/Deck.jpg)
</div>
:sparkles: Features
----------------------------------------------------------------
<a href="https://xn--931a.moe/"><img src="https://github.com/misskey-dev/misskey/blob/develop/assets/ai-orig.png?raw=true" align="right" height="320px"/></a>
<div style="clear: both;"></div>
<h3>Posting</h3>
<p>
Post your ideas, discussion topics, fun moments, or anything else you want to share! Misskey supports text, emoji, pictures, videos, and polls!
</p>
---
<h3 >Reactions</h3>
<p>
Reactions are the simplest way to respond to others' posts. Simply pick a reaction emote from the list! Reactions on Misskey are much more expressive than other social media services which only allow “liking”.
</p>
---
<h3>Interface</h3>
<p>
Customize the UI to your own tastes! No UI will work for everyone, so Misskey is completely customizable. Make Misskey *yours* by editing the style, adjusting timeline layouts, and placing widgets.
</p>
---
<h3>Misskey Drive</h3>
<p>
Organize and store your files! Want to post a picture you have already uploaded? Wish you could organize your files into folders? Misskey Drive is a solution!
</p>
---
...and more!
:package: Create your own instance
----------------------------------------------------------------
Please see the [Setup and Installation Guide](https://misskey-hub.net/docs/install/install.html).
:wrench: Contribution
----------------------------------------------------------------
Please see the [Contribution Guide](./CONTRIBUTING.md).
### Collaborators
<table>
<tr>
<td><img src="https://avatars3.githubusercontent.com/u/4439005?s=460&v=4" alt="syuilo" width="100"></td>
<td><img src="https://avatars0.githubusercontent.com/u/10798641?s=460&v=4" alt="AyaMorisawa" width="100"></td>
<td><img src="https://avatars1.githubusercontent.com/u/30769358?s=460&v=4" alt="mei23" width="100"></td>
<td><img src="https://avatars2.githubusercontent.com/u/20679825?s=460&v=4" alt="acid-chicken" width="100"></td>
<td><img src="https://avatars2.githubusercontent.com/u/6533808?s=460&v=4" alt="rinsuki" width="100"></td>
<td><img src="https://avatars0.githubusercontent.com/u/7973572?s=460&v=4" alt="tamaina" width="100"></td>
<td><img src="https://avatars1.githubusercontent.com/u/7106976?s=460&v=4" alt="Xeltica" width="100"></td>
<td><img src="https://avatars1.githubusercontent.com/u/17376330?s=460&v=4" alt="u1-liquid" width="100"></td>
</tr>
<tr>
<td align="center"><a href="https://github.com/syuilo">@syuilo</a></td>
<td align="center"><a href="https://github.com/AyaMorisawa">@AyaMorisawa</a></td>
<td align="center"><a href="https://github.com/mei23">@mei23</a></td>
<td align="center"><a href="https://github.com/acid-chicken">@acid-chicken</a></td>
<td align="center"><a href="https://github.com/rinsuki">@rinsuki</a></td>
<td align="center"><a href="https://github.com/tamaina">@tamaina</a></td>
<td align="center"><a href="https://github.com/Xeltica">@Xeltica</a></td>
<td align="center"><a href="https://github.com/u1-liquid">@u1-liquid</a></td>
</tr>
</table>
---
To receive updates of this repo, follow [@repo@misskey.io](https://misskey.io/@repo) on fediverse.
Related projects
----------------------------------------------------------------
- [misskey.js](https://github.com/misskey-dev/misskey.js) - Misskey SDK for JavaScript
- [mfm.js](https://github.com/misskey-dev/mfm.js) - MFM parser
Sponsors
----------------------------------------------------------------
## Sponsors
<div align="center">
<a class="rss3" title="RSS3" href="https://rss3.io/" target="_blank" style="display: inline-block;"><img src="https://rss3.io/assets/images/Logo.svg" alt="RSS3" style="display: inline-block; height: 60px;"></a>
</div>
:heart: Backers
----------------------------------------------------------------
## Backers
<!-- PATREON_START -->
<table><tr>
<td><img src="https://c8.patreon.com/2/200/20832595" alt="Roujo " width="100"></td>

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 38 KiB

View File

@ -18,3 +18,9 @@ import './commands'
// Alternatively you can use CommonJS syntax:
// require('./commands')
Cypress.on('uncaught:exception', (err, runnable) => {
if (err.message.includes('ResizeObserver loop limit exceeded')) {
return false
}
});

View File

@ -57,6 +57,6 @@ gulp.task('default', gulp.task('build'));
gulp.task('watch', () => {
gulp.watch([
'./packages/**/*',
'./packages/*/src/**/*',
], { ignoreInitial: false }, gulp.task('build'));
});

File diff suppressed because it is too large Load Diff

View File

@ -52,6 +52,7 @@ searchUser: "Vyhledat uživatele"
reply: "Odpovědět"
loadMore: "Zobrazit více"
showMore: "Zobrazit více"
youGotNewFollower: "Máte nového následovníka"
mention: "Zmínění"
mentions: "Zmínění"
importAndExport: "Import a export"
@ -87,7 +88,6 @@ clickToShow: "Klikněte pro zobrazení"
sensitive: "NSFW"
add: "Přidat"
reaction: "Reakce"
reactionSettingDescription: "Vyberte Vaší oblíbenou reakci, kterou chcete připnout ve výběru."
reactionSettingDescription2: "Přetažením změníte pořadí, kliknutím smažete, zmáčkněte \"+\" k přidání"
rememberNoteVisibility: "Zapamatovat nastavení zobrazení poznámky"
attachCancel: "Odstranit přílohu"
@ -163,6 +163,7 @@ clearQueue: "Vyčistit frontu"
clearQueueConfirmTitle: "Jste si jisti že zrušit všechny úlohy ve frontě?"
clearCachedFiles: "Vyprázdnit mezipaměť"
blockedInstances: "Blokované instance"
noUsers: "Žádní uživatelé"
editProfile: "Upravit můj profil"
pinLimitExceeded: "Nemůžete připnout další poznámky."
intro: "Instalace Misskey byla dokončena! Prosím vytvořte admina."
@ -170,6 +171,7 @@ done: "Hotovo"
processing: "Zpracovávám"
preview: "Náhled"
default: "Výchozí"
noCustomEmojis: "Bez Emoji"
blocked: "Blokováno"
suspended: "Suspendováno"
all: "Vše"
@ -402,6 +404,9 @@ smtpPass: "Heslo"
clearCache: "Vyprázdnit mezipaměť"
info: "Informace"
user: "Uživatelé"
_email:
_follow:
title: "Máte nového následovníka"
_mfm:
mention: "Zmínění"
quote: "Citovat"
@ -464,6 +469,7 @@ _pages:
types:
array: "Seznamy"
_notification:
youWereFollowed: "Máte nového následovníka"
youWereInvitedToGroup: "Pozvat do skupiny"
_types:
follow: "Sledovaní"

View File

@ -106,7 +106,7 @@ clickToShow: "Zum Anzeigen anklicken"
sensitive: "NSFW"
add: "Hinzufügen"
reaction: "Reaktionen"
reactionSettingDescription: "Wähle die Reaktionen aus, die in der Reaktionsauswahl angezeigt werden sollen."
reactionSetting: "In der Reaktionsauswahl anzuzeigende Reaktionen"
reactionSettingDescription2: "Ziehe zum Anordnen, klicke zum Löschen, drücke + zum Hinzufügen"
rememberNoteVisibility: "Notizsichtbarkeit merken"
attachCancel: "Anhang entfernen"
@ -448,6 +448,7 @@ uiLanguage: "Sprache der Benutzeroberfläche"
groupInvited: "Du wurdest in eine Gruppe eingeladen"
aboutX: "Über {x}"
useOsNativeEmojis: "Eingebaute Emojis des Betriebssystems benutzen"
disableDrawer: "Keine ausfahrbaren Menüs verwenden"
youHaveNoGroups: "Keine Gruppen vorhanden"
joinOrCreateGroup: "Lass dich zu einer Gruppe einladen oder erstelle deine eigene."
noHistory: "Kein Verlauf"
@ -592,6 +593,7 @@ smtpSecure: "Für SMTP-Verbindungen implizit SSL/TLS verwenden"
smtpSecureInfo: "Schalte dies aus, falls du STARTTLS verwendest"
testEmail: "Email-Versand testen"
wordMute: "Wort-Stummschaltung"
instanceMute: "Instanzstummschaltungen"
userSaysSomething: "{name} hat etwas gesagt"
makeActive: "Aktivieren"
display: "Anzeigeart"
@ -612,7 +614,6 @@ regenerateLoginToken: "Anmeldungstoken regenerieren"
regenerateLoginTokenDescription: "Den zur Anmeldung intern verwendeten Token regenerieren. Normalerweise wird dies nicht benötigt. Bei Regeneration werden alle Geräte ausgeloggt."
setMultipleBySeparatingWithSpace: "Trenne Elemente durch ein Leerzeichen um mehrere Einstellungen zu kofigurieren."
fileIdOrUrl: "Datei-ID oder URL"
chatOpenBehavior: "Verhalten des Chatfensters bei Öffnung"
behavior: "Verhalten"
sample: "Beispiel"
abuseReports: "Meldungen"
@ -620,6 +621,8 @@ reportAbuse: "Melden"
reportAbuseOf: "{name} melden"
fillAbuseReportDescription: "Bitte gib zusätzliche Informationen zu dieser Meldung an. Falls es sich um eine spezielle Notiz handelt, bitte gib dessen URL an."
abuseReported: "Die Meldung wurde versendet. Vielen Dank."
reporteeOrigin: "Herkunft des Gemeldeten"
reporterOrigin: "Herkunft des Meldenden"
send: "Senden"
abuseMarkAsResolved: "Meldung als gelöst markieren"
openInNewTab: "In neuem Tab öffnen"
@ -682,6 +685,7 @@ center: "Mitte"
wide: "Breit"
narrow: "Schmal"
reloadToApplySetting: "Diese Einstellung tritt nach einer Aktualisierung der Seite in Kraft. Jetzt aktualisieren?"
needReloadToApply: "Diese Einstellung tritt nach einer Aktualisierung der Seite in Kraft."
showTitlebar: "Titelleiste anzeigen"
clearCache: "Cache leeren"
onlineUsersCount: "{n} Benutzer sind online"
@ -790,17 +794,41 @@ pubSub: "Pub/Sub Benutzerkonten"
lastCommunication: "Letzte Kommunikation"
resolved: "Gelöst"
unresolved: "Ungelöst"
breakFollow: "Follower entfernen"
itsOn: "Eingeschaltet"
itsOff: "Ausgeschaltet"
emailRequiredForSignup: "Angaben einer Email-Adresse als benötigt markieren"
unread: "Ungelesen"
filter: "Filter"
controlPanel: "Systemsteuerung"
manageAccounts: "Benutzerkonten verwalten"
makeReactionsPublic: "Reaktionsverlauf veröffentlichen"
makeReactionsPublicDescription: "Jeder wird die Liste deiner gesendeten Reaktionen einsehen können."
classic: "Classic"
muteThread: "Thread stummschalten"
unmuteThread: "Threadstummschaltung aufheben"
ffVisibility: "Sichtbarkeit von Gefolgten/Followern"
ffVisibilityDescription: "Konfiguriere wer sehen kann, wem du folgst sowie wer dir folgt."
continueThread: "Weiteren Threadverlauf anzeigen"
deleteAccountConfirm: "Dein Benutzerkonto wird unwiderruflich gelöscht. Trotzdem fortfahren?"
incorrectPassword: "Falsches Passwort."
voteConfirm: "Wirklich für \"{choice}\" abstimmen?"
hide: "Inhalt verbergen"
leaveGroup: "Gruppe verlassen"
leaveGroupConfirm: "Möchtest du \"{name}\" wirklich verlassen?"
useDrawerReactionPickerForMobile: "Auf mobilen Geräten ausfahrbare Reaktionsauswahl anzeigen"
welcomeBackWithName: "Willkommen zurück, {name}"
clickToFinishEmailVerification: "Drücke bitte auf [{ok}], um die Email-Bestätigung abzuschließen."
_emailUnavailable:
used: "Diese Email-Adresse wird bereits verwendet"
format: "Das Format dieser Email-Adresse ist ungültig"
disposable: "Wegwerf-Email-Adressen können nicht verwendet werden"
mx: "Dieser Email-Server ist ungültig"
smtp: "Dieser Email-Server antwortet nicht"
_ffVisibility:
public: "Öffentlich"
followers: "Nur für Follower sichtbar"
private: "Privat"
_signup:
almostThere: "Fast geschafft"
emailAddressInfo: "Bitte gib deine Email-Adresse ein."
@ -812,13 +840,6 @@ _accountDelete:
requestAccountDelete: "Löschung des Benutzerkontos anfordern"
started: "Löschung wurde eingeleitet."
inProgress: "Löschung in Bearbeitung"
_docs:
continueReading: "Mehr lesen"
features: "Funktionen"
generalTopics: "Allgemeine Themen"
advancedTopics: "Erweiterte Themen"
admin: "Administration"
translateWarn: "Dies ist ein übersetztes Dokument. Es kann zu Unterschieden mit dem Original kommen."
_ad:
back: "Zurück"
reduceFrequencyOfThisAd: "Diese Werbung weniger anzeigen"
@ -921,6 +942,8 @@ _mfm:
rainbowDescription: "Lässt den Inhalt in Regenbogenfarben erscheinen."
sparkle: "Glitzer"
sparkleDescription: "Verleiht Inhalt einen glitzernden Partikeleffekt."
rotate: "Drehen"
rotateDescription: "Dreht den Inhalt um einen angegebenen Winkel"
_reversi:
reversi: "Reversi"
gameSettings: "Spieleinstellungen"
@ -986,6 +1009,11 @@ _wordMute:
soft: "Leicht"
hard: "Schwer"
mutedNotes: "Stummgeschaltete Notizen"
_instanceMute:
instanceMuteDescription: "Schaltet alle Notizen/Renotes stumm, die von den gelisteten Instanzen stammen, inklusive Antworten von Benutzern an einen Benutzer einer stummgeschalteten Instanz."
instanceMuteDescription2: "Instanzen getrennt durch Zeilenumbrüchen angeben"
title: "Blendet Notizen von stummgeschalteten Instanzen aus."
heading: "Liste der stummzuschaltenden Instanzen"
_theme:
explore: "Themen erforschen"
install: "Thema installieren"
@ -1259,6 +1287,8 @@ _exportOrImport:
muteList: "Stummschaltungen"
blockingList: "Blockierungen"
userLists: "Listen"
excludeMutingUsers: "Stummgeschaltete Benutzer aussortieren"
excludeInactiveUsers: "Inaktive Benutzer aussortieren"
_charts:
federationInstancesIncDec: "Unterschied in der Anzahl von förderierenden Instanzen"
federationInstancesTotal: "Anzahl aller föderierenden Instanzen"

View File

@ -106,7 +106,7 @@ clickToShow: "Click to show"
sensitive: "NSFW"
add: "Add"
reaction: "Reactions"
reactionSettingDescription: "Configure which reactions you want to display in the reaction picker."
reactionSetting: "Reactions to show in the reaction picker"
reactionSettingDescription2: "Drag to reorder, Click to delete, Press \"+\" to add"
rememberNoteVisibility: "Remember note visibility settings"
attachCancel: "Remove attachment"
@ -137,7 +137,7 @@ addEmoji: "Add an emoji"
settingGuide: "Recommended settings"
cacheRemoteFiles: "Cache remote files"
cacheRemoteFilesDescription: "When this setting is disabled, remote files are loaded directly from the remote instance. Disabling this will decrease storage usage, but increase traffic, as thumbnails will not be generated."
flagAsBot: "Mark this account as as bot"
flagAsBot: "Mark this account as a bot"
flagAsBotDescription: "Enable this option if this account is controlled by a program. If enabled, it will act as a flag for other developers to prevent endless interaction chains with other bots and adjust Misskey's internal systems to treat this account as a bot."
flagAsCat: "Mark this account as a cat"
flagAsCatDescription: "Enable this option to mark this account as a cat."
@ -448,6 +448,7 @@ uiLanguage: "User interface language"
groupInvited: "You've been invited to a group"
aboutX: "About {x}"
useOsNativeEmojis: "Use OS native Emoji"
disableDrawer: "Don't use drawer-style menus"
youHaveNoGroups: "You have no groups"
joinOrCreateGroup: "Get invited to a group or create your own."
noHistory: "No history available"
@ -592,6 +593,7 @@ smtpSecure: "Use implicit SSL/TLS for SMTP connections"
smtpSecureInfo: "Turn this off when using STARTTLS"
testEmail: "Test email delivery"
wordMute: "Word mute"
instanceMute: "Instance mutes"
userSaysSomething: "{name} said something"
makeActive: "Activate"
display: "Display"
@ -612,7 +614,6 @@ regenerateLoginToken: "Regenerate login token"
regenerateLoginTokenDescription: "Regenerate the token used internally during login. Normally this action is not necessary. If regenerated, all devices will be logged out."
setMultipleBySeparatingWithSpace: "Separate multiple entries with spaces."
fileIdOrUrl: "File-ID or URL"
chatOpenBehavior: "Behavior of the chat window when opened"
behavior: "Behavior"
sample: "Sample"
abuseReports: "Reports"
@ -620,6 +621,8 @@ reportAbuse: "Report"
reportAbuseOf: "Report {name}"
fillAbuseReportDescription: "Please fill in details regarding this report. If it is about a specific note, please include its URL."
abuseReported: "Your report has been sent. Thank you very much."
reporteeOrigin: "Reportee Origin"
reporterOrigin: "Reporter Origin"
send: "Send"
abuseMarkAsResolved: "Mark report as resolved"
openInNewTab: "Open in new tab"
@ -682,6 +685,7 @@ center: "Center"
wide: "Wide"
narrow: "Narrow"
reloadToApplySetting: "This setting will only apply after a page reload. Reload now?"
needReloadToApply: "This setting will only apply after a page reload."
showTitlebar: "Show title bar"
clearCache: "Clear cache"
onlineUsersCount: "{n} users are online"
@ -802,6 +806,28 @@ makeReactionsPublicDescription: "This will make the list of all your past reacti
classic: "Classic"
muteThread: "Mute thread"
unmuteThread: "Unmute thread"
ffVisibility: "Follows/Followers Visibility"
ffVisibilityDescription: "Allows you to configure who can see who you follow and who follows you."
continueThread: "View thread continuation"
deleteAccountConfirm: "This will irreversibly delete your account. Proceed?"
incorrectPassword: "Incorrect password."
voteConfirm: "Confirm your vote for \"{choice}\"?"
hide: "Hide"
leaveGroup: "Leave Group"
leaveGroupConfirm: "Are you sure you want to leave \"{name}\"?"
useDrawerReactionPickerForMobile: "Display reaction picker as drawer on mobile"
welcomeBackWithName: "Welcome back, {name}"
clickToFinishEmailVerification: "Please click [{ok}] to complete email verification."
_emailUnavailable:
used: "This email address is already being used"
format: "The format of this email address is invalid"
disposable: "Disposable email addresses may not be used"
mx: "This email server is invalid"
smtp: "This email server is not responding"
_ffVisibility:
public: "Public"
followers: "Visible to followers only"
private: "Private"
_signup:
almostThere: "Almost there"
emailAddressInfo: "Please enter your email address."
@ -813,13 +839,6 @@ _accountDelete:
requestAccountDelete: "Request account deletion"
started: "Deletion has been started."
inProgress: "Deletion is currently in progress"
_docs:
continueReading: "Read more"
features: "Features"
generalTopics: "General topics"
advancedTopics: "Advanced Topics"
admin: "Administration"
translateWarn: "This is a translated document. Its contents may differ from the original."
_ad:
back: "Back"
reduceFrequencyOfThisAd: "Show this ad less"
@ -922,6 +941,8 @@ _mfm:
rainbowDescription: "Makes the content appear in rainbow colors."
sparkle: "Sparkle"
sparkleDescription: "Gives content a sparkling particle effect."
rotate: "Rotate"
rotateDescription: "Turns content by a specified angle."
_reversi:
reversi: "Reversi"
gameSettings: "Game settings"
@ -987,6 +1008,11 @@ _wordMute:
soft: "Soft"
hard: "Hard"
mutedNotes: "Muted notes"
_instanceMute:
instanceMuteDescription: "This will mute any notes/renotes from the listed instances, including those of users replying to a user from a muted instance."
instanceMuteDescription2: "Separate with newlines"
title: "Hides notes from listed instances."
heading: "List of instances to be muted"
_theme:
explore: "Explore Themes"
install: "Install a theme"
@ -1260,6 +1286,8 @@ _exportOrImport:
muteList: "Muted users"
blockingList: "Blocked users"
userLists: "User lists"
excludeMutingUsers: "Exclude muted users"
excludeInactiveUsers: "Exclude inactive users"
_charts:
federationInstancesIncDec: "Difference in # of federating instances"
federationInstancesTotal: "Total # of federating instances"

File diff suppressed because it is too large Load Diff

View File

@ -104,7 +104,6 @@ clickToShow: "Click para ver"
sensitive: "Marcado como sensible"
add: "Agregar"
reaction: "Reacción"
reactionSettingDescription: "Asigne sus reacción favoritas que desean anclar en el selector de reacciones."
reactionSettingDescription2: "Arrastre para reordenar, click para borrar, apriete la tecla + para añadir."
rememberNoteVisibility: "Recordar visibilidad"
attachCancel: "Quitar adjunto"
@ -610,7 +609,6 @@ regenerateLoginToken: "Regenerar token de login"
regenerateLoginTokenDescription: "Regenerar el token usado internamente durante el login. No siempre es necesario hacerlo. Al hacerlo de nuevo, se deslogueará en todos los dispositivos."
setMultipleBySeparatingWithSpace: "Puedes añadir mas de uno, separado por espacios."
fileIdOrUrl: "Id del archivo o URL"
chatOpenBehavior: "Comportamiento al abrir el chat"
behavior: "Comportamiento"
sample: "Muestra"
abuseReports: "Reportes"
@ -737,10 +735,10 @@ pubSub: "Cuentas Pub/Sub"
lastCommunication: "Última comunicación"
resolved: "Resuelto"
unresolved: "Sin resolver"
controlPanel: "Panel de control"
hide: "Ocultar"
_accountDelete:
accountDelete: "Eliminar Cuenta"
_docs:
admin: "Administrar"
_ad:
back: "Deseleccionar"
_gallery:
@ -769,6 +767,7 @@ _mfm:
flip: "Echar de un capirotazo"
flipDescription: "Voltea el contenido hacia arriba / abajo o hacia la izquierda / derecha."
font: "Fuente"
rotate: "Rotar"
_reversi:
reversi: "Reversi"
gameSettings: "Configuración del juego"

View File

@ -106,7 +106,6 @@ clickToShow: "Cliquer pour afficher"
sensitive: "Contenu sensible"
add: "Ajouter"
reaction: "Réactions"
reactionSettingDescription: "Choisissez vos réactions préférées que vous souhaitez épingler dans le sélecteur de réactions."
reactionSettingDescription2: "Déplacer pour réorganiser, cliquer pour effacer, utiliser « + » pour ajouter."
rememberNoteVisibility: "Activer l'option \" se souvenir de la visibilité des notes \" vous permet de réutiliser automatiquement la visibilité utilisée lors de la publication de votre note précédente."
attachCancel: "Supprimer le fichier attaché"
@ -612,7 +611,6 @@ regenerateLoginToken: "Régénérer le jeton de connexion"
regenerateLoginTokenDescription: "Générer un nouveau jeton d'authentification. Cette opération ne devrait pas être nécessaire ; lors de la génération d'un nouveau jeton, tous les appareils seront déconnectés. "
setMultipleBySeparatingWithSpace: "Vous pouvez en définir plusieurs, en les séparant par des espaces."
fileIdOrUrl: "ID du fichier ou URL"
chatOpenBehavior: "Comportement de la fenêtre de discussion lors de son ouverture"
behavior: "Comportement"
sample: "Exemple"
abuseReports: "Signalements"
@ -798,6 +796,7 @@ filter: "Filtre"
controlPanel: "Panneau de contrôle"
manageAccounts: "Gérer les comptes"
classic: "Classique"
hide: "Masquer"
_emailUnavailable:
format: "Le format de cette adresse de courriel est invalide"
mx: "Ce serveur de courriels est invalide"
@ -919,6 +918,7 @@ _mfm:
rainbowDescription: "Permet d'afficher le contenu en couleurs arc-en-ciel."
sparkle: "Paillettes"
sparkleDescription: "Ajoute un effet scintillant au contenu."
rotate: "Pivoter"
_reversi:
reversi: "Reversi"
gameSettings: "Réglages de la partie"

View File

@ -106,7 +106,6 @@ clickToShow: "Klik untuk melihat"
sensitive: "Konten sensitif"
add: "Tambahkan"
reaction: "Reaksi"
reactionSettingDescription: "Masukkan reaksi favorit yang ingin kamu sematkan pada bilah reaksi"
reactionSettingDescription2: "Geser untuk memindah urutkan, klik untuk menghapus, tekan \"+\" untuk menambahkan"
rememberNoteVisibility: "Ingat pengaturan visibilitas catatan"
attachCancel: "Hapus lampiran"
@ -612,7 +611,6 @@ regenerateLoginToken: "Perbarui token login"
regenerateLoginTokenDescription: "Perbarui token yang digunakan secara internal saat login. Normalnya aksi ini tidak diperlukan. Jika diperbarui, semua perangkat akan dilogout."
setMultipleBySeparatingWithSpace: "Kamu dapat menyetel banyak dengan memisahkannya menggunakan spasi."
fileIdOrUrl: "File-ID atau URL"
chatOpenBehavior: "Perilaku jendelan obrolan ketika dibuka"
behavior: "Perilaku"
sample: "Contoh"
abuseReports: "Laporkan"
@ -806,6 +804,11 @@ muteThread: "Bisukan thread"
unmuteThread: "Suarakan thread"
ffVisibility: "Visibilitas Mengikuti/Pengikut"
ffVisibilityDescription: "Mengatur siapa yang dapat melihat pengikutmu dan yang kamu ikuti."
continueThread: "Lihat lanjutan thread"
deleteAccountConfirm: "Akun akan dihapus. Apakah kamu yakin?"
incorrectPassword: "Kata sandi salah."
voteConfirm: "Konfirmasi suara kamu untuk ({choice})"
hide: "Sembunyikan"
_emailUnavailable:
used: "Alamat surel ini telah digunakan"
format: "Format tidak valid."
@ -929,6 +932,8 @@ _mfm:
rainbowDescription: "Membuat konten muncul dalam warna pelangi."
sparkle: "Kelap-kelip"
sparkleDescription: "Memberikan konten efek partikel kelap-kelip."
rotate: "Putar"
rotateDescription: "Putar konten sesuai sudut yang ditentukan."
_reversi:
reversi: "Reversi"
gameSettings: "Pengaturan permainan"

View File

@ -46,7 +46,10 @@ const primaries = {
'zh': 'CN',
};
const locales = languages.reduce((a, c) => (a[c] = yaml.load(fs.readFileSync(`${__dirname}/${c}.yml`, 'utf-8')) || {}, a), {});
// 何故か文字列にバックスペース文字が混入することがあり、YAMLが壊れるので取り除く
const clean = (text) => text.replace(new RegExp(String.fromCodePoint(0x08), 'g'), '');
const locales = languages.reduce((a, c) => (a[c] = yaml.load(clean(fs.readFileSync(`${__dirname}/${c}.yml`, 'utf-8'))) || {}, a), {});
module.exports = Object.entries(locales)
.reduce((a, [k ,v]) => (a[k] = (() => {

View File

@ -103,7 +103,6 @@ clickToShow: "Clicca per visualizzare"
sensitive: "Contenuto sensibile"
add: "Aggiungi"
reaction: "Reazione"
reactionSettingDescription: "Scegli le reazioni che preferisci e fissale nel pannello di reazioni."
reactionSettingDescription2: "Trascina per riorganizzare, clicca per cancellare, usa il pulsante \"+\" per aggiungere."
rememberNoteVisibility: "Ricordare le impostazioni di visibilità delle note"
attachCancel: "Rimuovi allegato"
@ -591,7 +590,6 @@ other: "Avanzate"
regenerateLoginToken: "Genera di nuovo un token di connessione"
regenerateLoginTokenDescription: "Genera un nuovo token di autenticazione. Solitamente questa operazione non è necessaria: quando si genera un nuovo token, tutti i dispositivi vanno disconnessi."
fileIdOrUrl: "ID o URL del file"
chatOpenBehavior: "Comportamento della finestra di chat quando viene aperta"
behavior: "Comportamento"
abuseReports: "Segnalazioni"
reportAbuse: "Segnalazioni"
@ -745,10 +743,9 @@ global: "Federata"
sent: "Inviare"
hashtags: "Hashtag"
troubleshooting: "Risoluzione problemi"
_docs:
continueReading: "Leggi di più"
features: "Funzionalità"
admin: "Gestione"
hide: "Nascondere"
_ffVisibility:
public: "Pubblico"
_ad:
back: "Indietro"
reduceFrequencyOfThisAd: "Visualizza questa pubblicità meno spesso"
@ -808,6 +805,7 @@ _mfm:
font: "Tipo di carattere"
fontDescription: "Puoi scegliere il tipo di carattere per il contenuto."
rainbow: "Arcobaleno"
rotate: "Ruota"
_reversi:
reversi: "Reversi"
gameSettings: "Impostazioni di gioco"

View File

@ -106,7 +106,7 @@ clickToShow: "クリックして表示"
sensitive: "閲覧注意"
add: "追加"
reaction: "リアクション"
reactionSettingDescription: "リアクションピッカーに表示するリアクションを設定します。"
reactionSetting: "ピッカーに表示するリアクション"
reactionSettingDescription2: "ドラッグして並び替え、クリックして削除、+を押して追加します。"
rememberNoteVisibility: "公開範囲を記憶する"
attachCancel: "添付取り消し"
@ -448,6 +448,7 @@ uiLanguage: "UIの表示言語"
groupInvited: "グループに招待されました"
aboutX: "{x}について"
useOsNativeEmojis: "OSネイティブの絵文字を使用"
disableDrawer: "メニューをドロワーで表示しない"
youHaveNoGroups: "グループがありません"
joinOrCreateGroup: "既存のグループに招待してもらうか、新しくグループを作成してください。"
noHistory: "履歴はありません"
@ -592,6 +593,7 @@ smtpSecure: "SMTP 接続に暗黙的なSSL/TLSを使用する"
smtpSecureInfo: "STARTTLS使用時はオフにします。"
testEmail: "配信テスト"
wordMute: "ワードミュート"
instanceMute: "インスタンスミュート"
userSaysSomething: "{name}が何かを言いました"
makeActive: "アクティブにする"
display: "表示"
@ -612,7 +614,6 @@ regenerateLoginToken: "ログイントークンを再生成"
regenerateLoginTokenDescription: "ログインに使用される内部トークンを再生成します。通常この操作を行う必要はありません。再生成すると、全てのデバイスでログアウトされます。"
setMultipleBySeparatingWithSpace: "スペースで区切って複数設定できます。"
fileIdOrUrl: "ファイルIDまたはURL"
chatOpenBehavior: "チャットを開くときの動作"
behavior: "動作"
sample: "サンプル"
abuseReports: "通報"
@ -684,6 +685,7 @@ center: "中央"
wide: "広い"
narrow: "狭い"
reloadToApplySetting: "設定はページリロード後に反映されます。今すぐリロードしますか?"
needReloadToApply: "反映には再起動が必要です。"
showTitlebar: "タイトルバーを表示する"
clearCache: "キャッシュをクリア"
onlineUsersCount: "{n}人がオンライン"
@ -792,6 +794,7 @@ pubSub: "Pub/Subのアカウント"
lastCommunication: "直近の通信"
resolved: "解決済み"
unresolved: "未解決"
breakFollow: "フォロワーを解除"
itsOn: "オンになっています"
itsOff: "オフになっています"
emailRequiredForSignup: "アカウント登録にメールアドレスを必須にする"
@ -806,6 +809,16 @@ muteThread: "スレッドをミュート"
unmuteThread: "スレッドのミュートを解除"
ffVisibility: "つながりの公開範囲"
ffVisibilityDescription: "自分のフォロー/フォロワー情報の公開範囲を設定できます。"
continueThread: "さらにスレッドを見る"
deleteAccountConfirm: "アカウントが削除されます。よろしいですか?"
incorrectPassword: "パスワードが間違っています。"
voteConfirm: "「{choice}」に投票しますか?"
hide: "隠す"
leaveGroup: "グループから抜ける"
leaveGroupConfirm: "「{name}」から抜けますか?"
useDrawerReactionPickerForMobile: "モバイルデバイスのときドロワーで表示"
welcomeBackWithName: "おかえりなさい、{name}さん"
clickToFinishEmailVerification: "[{ok}]を押して、メールアドレスの確認を完了してください。"
_emailUnavailable:
used: "既に使用されています"
@ -821,7 +834,7 @@ _ffVisibility:
_signup:
almostThere: "ほとんど完了です"
emailAddressInfo: "あなたが使っているメールアドレスを入力してください。"
emailAddressInfo: "あなたが使っているメールアドレスを入力してください。メールアドレスが公開されることはありません。"
emailSent: "入力されたメールアドレス({email})宛に確認のメールが送信されました。メールに記載されたリンクにアクセスすると、アカウントの作成が完了します。"
_accountDelete:
@ -942,6 +955,8 @@ _mfm:
rainbowDescription: "内容をレインボーにします。"
sparkle: "キラキラ"
sparkleDescription: "キラキラしたパーティクルのエフェクトを追加します。"
rotate: "回転"
rotateDescription: "指定した角度で回転させます。"
_reversi:
reversi: "リバーシ"
@ -1014,6 +1029,12 @@ _wordMute:
hard: "ハード"
mutedNotes: "ミュートされたノート"
_instanceMute:
instanceMuteDescription: "ミュートしたインスタンスのユーザーへの返信を含めて、設定したインスタンスの全てのートとRenoteをミュートします。"
instanceMuteDescription2: "改行で区切って設定します"
title: "設定したインスタンスのノートを隠します。"
heading: "ミュートするインスタンス"
_theme:
explore: "テーマを探す"
install: "テーマのインストール"
@ -1304,6 +1325,8 @@ _exportOrImport:
muteList: "ミュート"
blockingList: "ブロック"
userLists: "リスト"
excludeMutingUsers: "ミュートしているユーザーを除外"
excludeInactiveUsers: "使われていないアカウントを除外"
_charts:
federationInstancesIncDec: "連合の増減"

View File

@ -104,7 +104,6 @@ clickToShow: "押したら見えるで"
sensitive: "ちょっとアカンやつやで"
add: "増やす"
reaction: "リアクション"
reactionSettingDescription: "リアクションピッカーに出しとくリアクションを選んでや。"
reactionSettingDescription2: "ドラッグで並び替え、クリックで削除、+を押して追加やで。"
rememberNoteVisibility: "公開範囲覚えといて"
attachCancel: "のっけるのやめる"
@ -204,7 +203,7 @@ noJobs: "ジョブはあらへん"
federating: "連合しとる"
blocked: "ブロックしとる"
suspended: "配信せぇへん"
all: "みな"
all: "みな"
subscribing: "購読しとる"
publishing: "配信しとる"
notResponding: "応答してへんで"
@ -653,8 +652,7 @@ low: "低い"
global: "グローバル"
sent: "送信"
hashtags: "ハッシュタグ"
_docs:
admin: "管理"
hide: "隠す"
_ad:
back: "戻る"
_gallery:
@ -702,6 +700,7 @@ _mfm:
spin: "アニメーション(回転)"
blur: "ぼかし"
font: "フォント"
rotate: "回転"
_reversi:
reversi: "リバーシ"
gameSettings: "対局の設定"
@ -849,7 +848,7 @@ _permissions:
_auth:
permissionAsk: "このアプリは次の権限を要求しとるで"
_antennaSources:
all: "みなのノート"
all: "みなのノート"
homeTimeline: "フォローしとるユーザーのノート"
_weekday:
sunday: "日曜日"
@ -897,7 +896,7 @@ _poll:
votesCount: "{n}票"
vote: "投票する"
_visibility:
publicDescription: "みなのユーザーに公開"
publicDescription: "みなに公開"
home: "ホーム"
followers: "フォロワー"
_profile:

View File

@ -81,6 +81,8 @@ somethingHappened: "오류가 발생했습니다"
retry: "다시 시도"
pageLoadError: "페이지를 불러오지 못했습니다."
pageLoadErrorDescription: "네트워크 연결 또는 브라우저 캐시로 인해 발생했을 가능성이 높습니다. 캐시를 삭제하거나, 잠시 후 다시 시도해 주세요."
serverIsDead: "서버로부터 응답이 없습니다. 잠시 후 다시 시도해주세요."
youShouldUpgradeClient: "이 페이지를 표시하려면 새로고침하여 새로운 버전의 클라이언트를 이용해 주십시오."
enterListName: "리스트 이름을 입력"
privacy: "프라이버시"
makeFollowManuallyApprove: "팔로우를 수동으로 승인"
@ -104,7 +106,6 @@ clickToShow: "클릭하여 보기"
sensitive: "열람주의"
add: "추가"
reaction: "리액션"
reactionSettingDescription: "리액션 선택 상자에 표시할 리액션을 설정합니다."
reactionSettingDescription2: "끌어서 순서 변경, 클릭해서 삭제, +를 눌러서 추가할 수 있습니다."
rememberNoteVisibility: "공개 범위를 기억하기"
attachCancel: "첨부 취소"
@ -590,6 +591,7 @@ smtpSecure: "SMTP 연결에 Implicit SSL/TTS 사용"
smtpSecureInfo: "STARTTLS 사용 시에는 해제합니다."
testEmail: "이메일 전송 테스트"
wordMute: "단어 뮤트"
instanceMute: "인스턴스 뮤트"
userSaysSomething: "{name}님이 무언가를 말했습니다"
makeActive: "활성화"
display: "표시"
@ -610,7 +612,6 @@ regenerateLoginToken: "로그인 토큰을 재생성"
regenerateLoginTokenDescription: "로그인할 때 사용되는 내부 토큰을 재생성합니다. 일반적으로 이 작업을 실행할 필요는 없습니다. 이 기능을 사용하면 이 계정으로 로그인한 모든 기기에서 로그아웃됩니다."
setMultipleBySeparatingWithSpace: "공백으로 구분하여 여러 개 설정할 수 있습니다."
fileIdOrUrl: "파일 ID 또는 URL"
chatOpenBehavior: "대화를 열 때의 동작"
behavior: "동작"
sample: "예시"
abuseReports: "신고"
@ -618,6 +619,8 @@ reportAbuse: "신고"
reportAbuseOf: "{name}을 신고하기"
fillAbuseReportDescription: "신고하려는 이유를 자세히 알려주세요. 특정 게시물을 신고할 때에는 게시물의 URL도 포함해 주세요."
abuseReported: "신고를 보냈습니다. 신고해 주셔서 감사합니다."
reporteeOrigin: "피신고자"
reporterOrigin: "신고자"
send: "전송"
abuseMarkAsResolved: "해결됨으로 표시"
openInNewTab: "새 탭에서 열기"
@ -764,6 +767,7 @@ middle: "보통"
low: "낮음"
emailNotConfiguredWarning: "메일 주소가 설정되어 있지 않습니다."
ratio: "비율"
previewNoteText: "본문 미리보기"
customCss: "CSS 사용자화"
customCssWarn: "이 설정은 기능을 알고 있는 경우에만 사용해야 합니다. 잘못된 값을 입력하면 클라이언트가 정상적으로 작동하지 않을 수 있습니다."
global: "글로벌"
@ -787,7 +791,40 @@ pubSub: "Pub/Sub 계정"
lastCommunication: "마지막 통신"
resolved: "해결됨"
unresolved: "해결되지 않음"
breakFollow: "팔로워 해제"
itsOn: "켜짐"
itsOff: "꺼짐"
emailRequiredForSignup: "가입할 때 이메일 주소 입력을 필수로 하기"
unread: "읽지 않음"
filter: "필터"
controlPanel: "제어판"
manageAccounts: "계정 관리"
makeReactionsPublic: "리액션 목록을 공개하기"
makeReactionsPublicDescription: "나의 리액션을 누구나 볼 수 있게 합니다."
classic: "클래식"
muteThread: "이 글타래를 뮤트"
unmuteThread: "글타래 뮤트 해제"
ffVisibility: "내 인맥의 공개 범위"
ffVisibilityDescription: "나의 팔로우와 팔로워 정보에 대한 공개 범위를 설정할 수 있습니다."
continueThread: "이 글타래 이어서 보기"
deleteAccountConfirm: "계정이 삭제되고 되돌릴 수 없게 됩니다. 계속하시겠습니까? "
incorrectPassword: "비밀번호가 올바르지 않습니다."
voteConfirm: "\"{choice}\"에 투표하시겠습니까?"
hide: "숨기기"
_emailUnavailable:
used: "이 메일 주소는 사용중입니다"
format: "형식이 올바르지 않습니다"
disposable: "임시 이메일 주소는 사용할 수 없습니다"
mx: "메일 서버가 올바르지 않습니다"
smtp: "메일 서버가 응답하지 않습니다"
_ffVisibility:
public: "공개"
followers: "팔로워에게만 공개"
private: "비공개"
_signup:
almostThere: "거의 다 끝났습니다"
emailAddressInfo: "당신이 사용하고 있는 이메일 주소를 입력해 주세요. 이메일 주소는 다른 유저에게 공개되지 않습니다."
emailSent: "입력하신 메일 주소({email})로 확인 메일을 보내드렸습니다. 가입을 완료하시려면 보내드린 메일에 있는 링크로 접속해 주세요."
_accountDelete:
accountDelete: "계정 삭제"
mayTakeTime: "계정 삭제는 서버에 부하를 가하기 때문에, 작성한 콘텐츠나 업로드한 파일의 수가 많으면 완료까지 시간이 걸릴 수 있습니다."
@ -795,13 +832,6 @@ _accountDelete:
requestAccountDelete: "계정 삭제 요청"
started: "삭제 작업이 시작되었습니다."
inProgress: "삭제 진행 중"
_docs:
continueReading: "계속 읽기"
features: "기능"
generalTopics: "일반 주제"
advancedTopics: "심화 주제"
admin: "관리"
translateWarn: "이 문서는 번역되었기 때문에 원본과는 내용이 다를 수 있습니다."
_ad:
back: "뒤로"
reduceFrequencyOfThisAd: "이 광고의 표시 빈도 낮추기"
@ -904,6 +934,8 @@ _mfm:
rainbowDescription: "내용을 무지개로 표시합니다."
sparkle: "반짝반짝"
sparkleDescription: "반짝이는 파티클 효과를 추가합니다."
rotate: "회전"
rotateDescription: "지정한 각도로 회전시킵니다."
_reversi:
reversi: "리버시"
gameSettings: "대국 설정"
@ -969,6 +1001,11 @@ _wordMute:
soft: "보통"
hard: "보다 높은 수준"
mutedNotes: "뮤트된 노트"
_instanceMute:
instanceMuteDescription: "뮤트한 인스턴스에서 오는 답글을 포함한 모든 노트와 Renote를 뮤트합니다."
instanceMuteDescription2: "한 줄에 하나씩 입력해 주세요"
title: "지정한 인스턴스의 노트를 숨깁니다."
heading: "뮤트할 인스턴스"
_theme:
explore: "테마 찾아보기"
install: "테마 설치"
@ -1242,6 +1279,8 @@ _exportOrImport:
muteList: "뮤트"
blockingList: "차단"
userLists: "리스트"
excludeMutingUsers: "뮤트한 유저 제외하기"
excludeInactiveUsers: "휴면 중인 계정 제외하기"
_charts:
federationInstancesIncDec: "연합 인스턴스 수 증감"
federationInstancesTotal: "연합 인스턴스 수 합계"

View File

@ -1,3 +1,336 @@
---
_lang_: "Nederlands"
headlineMisskey: "Netwerk verbonden door notities"
introMisskey: "Welkom! Misskey is een open source, gedecentraliseerde microblogdienst.\nMaak \"notities\" om je gedachten te delen met iedereen om je heen. 📡\nMet \"reacties\" kun je ook snel je mening geven over berichten van anderen. 👍\nLaten we een nieuwe wereld verkennen! 🚀"
monthAndDay: "{day} {month}"
search: "Zoeken"
notifications: "Meldingen"
username: "Gebruikersnaam"
password: "Wachtwoord"
forgotPassword: "Wachtwoord vergeten"
fetchingAsApObject: "Ophalen vanuit de Fediverse"
ok: "Ok"
gotIt: "Begrepen"
cancel: "Annuleren"
enterUsername: "Voer een gebruikersnaam in"
renotedBy: "Hergedeeld door {user}"
noNotes: "Geen notities"
noNotifications: "Geen meldingen"
instance: "Server"
settings: "Instellingen"
basicSettings: "Basisinstellingen"
otherSettings: "Overige instellingen"
openInWindow: "In een venster openen"
profile: "Profiel"
timeline: "Tijdlijn"
noAccountDescription: "Deze gebruiker heeft nog geen bio geschreven"
login: "Inloggen"
loggingIn: "Aan het inloggen"
logout: "Afmelden"
signup: "Registreren"
uploading: "Bezig met uploaden"
save: "Opslaan"
users: "Gebruikers"
addUser: "Toevoegen gebruiker"
favorite: "Favorieten"
favorites: "Toevoegen aan favorieten"
unfavorite: "Verwijderen uit favorieten"
favorited: "Toegevoegd aan favorieten."
alreadyFavorited: "Al toegevoegd aan favorieten"
cantFavorite: "Kon niet toevoegen aan favorieten"
pin: "Vastmaken aan profielpagina"
unpin: "Losmaken van profielpagina"
copyContent: "Kopiëren inhoud"
copyLink: "Kopiëren link"
delete: "Verwijderen"
deleteAndEdit: "Verwijderen en bewerken"
deleteAndEditConfirm: "Weet je zeker dat je deze notitie wilt verwijderen en dan bewerken? Je verliest alle reacties, herdelingen en antwoorden erop."
addToList: "Aan lijst toevoegen"
sendMessage: "Verstuur bericht"
copyUsername: "Kopiëren gebruikersnaam "
searchUser: "Zoeken een gebruiker"
reply: "Antwoord"
loadMore: "Laad meer"
showMore: "Toon meer"
youGotNewFollower: "volgde jou"
receiveFollowRequest: "Volgverzoek ontvangen"
followRequestAccepted: "Volgverzoek geaccepteerd"
mention: "Vermelding"
mentions: "Vermeldingen"
directNotes: "Directe notities"
importAndExport: "Import / export"
import: "Import"
export: "Export"
files: "Bestanden"
download: "Downloaden"
driveFileDeleteConfirm: "Weet je zeker dat je het bestand \"{name}\" wilt verwijderen? Notities met dit bestand als bijlage worden ook verwijderd."
unfollowConfirm: "Weet je zeker dat je {name} wilt ontvolgen?"
exportRequested: "Je hebt een export aangevraagd. Dit kan een tijdje duren. Het wordt toegevoegd aan je Drive zodra het is voltooid."
importRequested: "Je hebt een import aangevraagd. Dit kan even duren."
lists: "Lijsten"
noLists: "Je hebt geen lijsten"
note: "Notitie"
notes: "Notities"
following: "Volgend"
followers: "Volgers"
followsYou: "Volgt jou"
createList: "Creëer lijst"
manageLists: "Beheren lijsten"
error: "Fout"
somethingHappened: "Er is iets misgegaan."
retry: "Probeer opnieuw"
pageLoadError: "Pagina laden mislukt"
pageLoadErrorDescription: "Dit wordt normaal gesproken veroorzaakt door netwerkfouten of door de cache van de browser. Probeer de cache te wissen en probeer het na een tijdje wachten opnieuw."
serverIsDead: "De server reageert niet. Wacht even en probeer het opnieuw."
youShouldUpgradeClient: "Werk je client bij om deze pagina te zien."
enterListName: "Voer de naam van de lijst in"
privacy: "Privacy"
makeFollowManuallyApprove: "Volgverzoeken vergen een goedkeuring"
defaultNoteVisibility: "Standaard zichtbaarheid"
follow: "Volgen"
followRequest: "Verzoek om te mogen volgen"
followRequests: "Volgverzoeken"
unfollow: "Ontvolgen"
followRequestPending: "Wachten op goedkeuring volgverzoek"
enterEmoji: "Voer een emoji in"
renote: "Herdelen"
unrenote: "Stop herdelen"
renoted: "Herdeeld"
cantRenote: "Dit bericht kan niet worden herdeeld"
cantReRenote: "Een herdeling kan niet worden herdeeld"
quote: "Quote"
pinnedNote: "Vastgemaakte notitie"
pinned: "Vastmaken aan profielpagina"
you: "Jij"
clickToShow: "Klik om te bekijken"
sensitive: "NSFW"
add: "Toevoegen"
reaction: "Reacties"
reactionSettingDescription2: "Sleep om opnieuw te ordenen, Klik om te verwijderen, Druk op \"+\" om toe te voegen"
rememberNoteVisibility: "Vergeet niet de notitie zichtbaarheidsinstellingen"
attachCancel: "Verwijder bijlage"
markAsSensitive: "Markeren als NSFW"
unmarkAsSensitive: "Geen NSFW"
enterFileName: "Invoeren bestandsnaam"
mute: "Dempen"
unmute: "Stop dempen"
block: "Blokkeren"
unblock: "Deblokkeren"
suspend: "Opschorten"
unsuspend: "Heractiveren"
blockConfirm: "Weet je zeker dat je dit account wil blokkeren?"
searchWith: "Zoeken: {q}"
youHaveNoLists: "Je hebt geen lijsten"
followConfirm: "Weet je zeker dat je {name} wilt volgen?"
proxyAccount: "Proxy account"
proxyAccountDescription: "Een proxy-account is een account dat onder bepaalde voorwaarden fungeert als externe volger voor gebruikers. Als een gebruiker bijvoorbeeld een externe gebruiker aan de lijst toevoegt, wordt de activiteit van de externe gebruiker niet aan de server geleverd als geen lokale gebruiker die gebruiker volgt, dus het proxy-account volgt in plaats daarvan."
host: "Server"
selectUser: "Kies een gebruiker"
recipient: "Ontvanger"
annotation: "Reacties"
federation: "Federatie"
instances: "Server"
registeredAt: "Geregistreerd op"
latestRequestSentAt: "Laatste aanvraag verstuurd"
latestRequestReceivedAt: "Laatste aanvraag ontvangen"
latestStatus: "Laatste status"
storageUsage: "Gebruikte opslagruimte"
charts: "Grafieken"
perHour: "Per uur"
perDay: "Per dag"
stopActivityDelivery: "Stop met versturen activiteiten"
blockThisInstance: "Blokkeer deze server"
operations: "Verwerkingen"
software: "Software"
version: "Versie"
metadata: "Metadata"
withNFiles: "{n} bestand(en)"
monitor: "Monitor"
jobQueue: "Job Queue"
cpuAndMemory: "CPU en geheugen"
network: "Netwerk"
disk: "Schijfruimte"
instanceInfo: "Serverinformatie"
statistics: "Statistieken"
clearQueue: "Wachtrij wissen"
clearQueueConfirmTitle: "Weet je zeker dat je de wachtrji leeg wil maken?"
clearQueueConfirmText: "Niet-bezorgde biljetten die nog in de wachtrij staan, worden niet gefedereerd. Meestal is deze operatie niet nodig."
clearCachedFiles: "Cache opschonen"
clearCachedFilesConfirm: "Weet je zeker dat je alle externe bestanden in de cache wilt verwijderen?"
blockedInstances: "Geblokkeerde servers"
blockedInstancesDescription: "Maak een lijst van de servers die moeten worden geblokkeerd, gescheiden door regeleinden. Geblokkeerde servers kunnen niet meer communiceren met deze server."
muteAndBlock: "Gedempt en geblokkeerd"
mutedUsers: "Gedempte gebruikers"
blockedUsers: "Geblokkeerde gebruikers"
noUsers: "Er zijn geen gebruikers."
editProfile: "Bewerk Profiel"
noteDeleteConfirm: "Ben je zeker dat je dit bericht wil verwijderen?"
pinLimitExceeded: "Je kunt geen berichten meer vastprikken"
intro: "Installatie van Misskey geëindigd! Maak nu een beheerder aan."
done: "Klaar"
processing: "Bezig met verwerken"
preview: "Voorbeeld"
default: "Standaard"
noCustomEmojis: "Er zijn geen emojis"
noJobs: "Er zijn geen taken"
federating: "Federeren"
blocked: "Geblokkeerd"
suspended: "Opgeschort"
all: "Alle"
subscribing: "Abonneren"
publishing: "Publiceren"
notResponding: "Reageert niet"
instanceFollowing: "Volgend op server"
instanceFollowers: "Volgers op server"
instanceUsers: "Gebruikers van deze server"
changePassword: "Wachtwoord wijzigen"
security: "Beveiliging"
retypedNotMatch: "Invoer komt niet overeen"
currentPassword: "Huidig wachtwoord"
newPassword: "Nieuwe wachtwoord"
newPasswordRetype: "Nieuw wachtwoord (herhalen)"
attachFile: "Bestanden toevoegen"
more: "Meer!"
featured: "Uitgelicht"
usernameOrUserId: "Gebruikersnaam of id"
noSuchUser: "Gebruiker niet gevonden"
lookup: "Opzoeken"
announcements: "Aankondigingen"
imageUrl: "AfbeeldingsURL"
remove: "Verwijderen"
removed: "Succesvol verwijderd"
removeAreYouSure: "Weet je zeker dat je \"{x}\" wil verwijderen?"
deleteAreYouSure: "Weet je zeker dat je \"{x}\" wil verwijderen?"
resetAreYouSure: "Resetten?"
saved: "Opgeslagen"
messaging: "Chat"
upload: "Uploaden"
fromDrive: "Van schijf"
fromUrl: "Van URL"
uploadFromUrl: "Uploaden vanaf een URL"
uploadFromUrlDescription: "URL van het bestand dat je wil uploaden"
uploadFromUrlRequested: "Uploadverzoek"
uploadFromUrlMayTakeTime: "Het kan even duren voordat het uploaden voltooid is."
explore: "Verkennen"
games: "Misskey spellen"
messageRead: "Lezen"
noMoreHistory: "Er is geen verdere geschiedenis"
startMessaging: "Start een gesprek"
nUsersRead: "gelezen door {n}"
agreeTo: "Ik stem in met {0}"
tos: "Gebruiksvoorwaarden"
start: "Aan de slag"
home: "Startpagina"
remoteUserCaution: "Aangezien deze gebruiker van een externe server afkomstig is, kan de weergegeven informatie onvolledig zijn."
activity: "Activiteit"
images: "Afbeeldingen"
birthday: "Geboortedatum"
yearsOld: "{age} jaar"
registeredDate: "Inschrijvingsdatum"
location: "Locatie"
theme: "Thema's"
themeForLightMode: "Thema voor gebruik in de lichte modus"
themeForDarkMode: "Thema voor gebruik in de donkere modus"
light: "Licht"
dark: "Donker"
lightThemes: "Licht thema's"
darkThemes: "Donkere thema's"
syncDeviceDarkMode: "Synchroniseer donkere modus met je apparaatinstellingen"
drive: "Schijf"
fileName: "Bestandsnaam"
selectFile: "Kies een bestand"
selectFiles: "Selecteer bestanden"
selectFolder: "Kies een map"
selectFolders: "Kies mappen"
renameFile: "Wijzig bestandsnaam"
folderName: "Mapnaam"
createFolder: "Map aanmaken"
renameFolder: "Map hernoemen"
nsfw: "NSFW"
pinnedNotes: "Vastgemaakte notitie"
userList: "Lijsten"
smtpHost: "Server"
smtpUser: "Gebruikersnaam"
smtpPass: "Wachtwoord"
clearCache: "Cache opschonen"
user: "Gebruikers"
muteThread: "Discussies dempen "
unmuteThread: "Dempen van discussie ongedaan maken"
hide: "Verbergen"
_email:
_follow:
title: "volgde jou"
_mfm:
mention: "Vermelding"
quote: "Quote"
search: "Zoeken"
_theme:
keys:
mention: "Vermelding"
renote: "Herdelen"
_sfx:
note: "Notities"
notification: "Meldingen"
chat: "Chat"
_widgets:
notifications: "Meldingen"
timeline: "Tijdlijn"
activity: "Activiteit"
federation: "Federatie"
jobQueue: "Job Queue"
_cw:
show: "Laad meer"
_visibility:
home: "Startpagina"
followers: "Volgers"
_profile:
username: "Gebruikersnaam"
_exportOrImport:
followingList: "Volgend"
muteList: "Dempen"
blockingList: "Blokkeren"
userLists: "Lijsten"
excludeMutingUsers: "Negeer gedempte gebruikers"
excludeInactiveUsers: "Negeer inactieve gebruikers"
_timelines:
home: "Startpagina"
_rooms:
_roomType:
default: "Standaard"
_furnitures:
monitor: "Monitor"
_pages:
blocks:
image: "Afbeeldingen"
script:
categories:
list: "Lijsten"
blocks:
_join:
arg1: "Lijsten"
_randomPick:
arg1: "Lijsten"
_dailyRandomPick:
arg1: "Lijsten"
_seedRandomPick:
arg2: "Lijsten"
_pick:
arg1: "Lijsten"
_listLen:
arg1: "Lijsten"
types:
array: "Lijsten"
_notification:
youWereFollowed: "volgde jou"
_types:
follow: "Volgend"
mention: "Vermelding"
renote: "Herdelen"
quote: "Quote"
reaction: "Reacties"
_deck:
_columns:
notifications: "Meldingen"
tl: "Tijdlijn"
list: "Lijsten"
mentions: "Vermeldingen"

View File

@ -81,6 +81,8 @@ somethingHappened: "Coś poszło nie tak"
retry: "Spróbuj ponownie"
pageLoadError: "Nie udało się załadować strony"
pageLoadErrorDescription: "Zwykle jest to spowodowane problemem z siecią lub cache przeglądarki. Spróbuj wyczyścić cache i sprawdź jeszcze raz za chwilę."
serverIsDead: "Serwer nie odpowiada. Zaczekaj chwilę i spróbuj ponownie."
youShouldUpgradeClient: "Odśwież stronę, by zaaktualizować klienta."
enterListName: "Nazwa listy"
privacy: "Prywatność"
makeFollowManuallyApprove: "Prośby o możliwość obserwacji wymagają zatwierdzenia"
@ -104,7 +106,7 @@ clickToShow: "Kliknij, aby wyświetlić"
sensitive: "NSFW"
add: "Dodaj"
reaction: "Reakcja"
reactionSettingDescription: "Przypisz swoje ulubione reakcje, które chcesz przypiąć w wyborze reakcji."
reactionSetting: "Reakcje do pokazania w wyborniku reakcji"
reactionSettingDescription2: "Przeciągnij aby zmienić kolejność, naciśnij aby usunąć, naciśnij „+” aby dodać"
rememberNoteVisibility: "Zapamiętuj ustawienia widoczności wpisu"
attachCancel: "Usuń załącznik"
@ -181,6 +183,7 @@ instanceInfo: "Informacje o instancji"
statistics: "Statystyki"
clearQueue: "Wyczyść kolejkę"
clearQueueConfirmTitle: "Czy na pewno chcesz wyczyścić kolejkę?"
clearQueueConfirmText: "Wszystkie niewysłane wpisy z kolejki nie zostaną wysłane. Zwykle to nie jest konieczne."
clearCachedFiles: "Wyczyść pamięć podręczną"
clearCachedFilesConfirm: "Czy na pewno chcesz usunąć wszystkie zdalne pliki z pamięci podręcznej?"
blockedInstances: "Zablokowane instancje"
@ -220,6 +223,7 @@ more: "Więcej!"
featured: "Wyróżnione"
usernameOrUserId: "Nazwa lub id użytkownika"
noSuchUser: "Nie znaleziono użytkownika"
lookup: "Zapytania"
announcements: "Ogłoszenia"
imageUrl: "Adres URL obrazka"
remove: "Usuń"
@ -309,22 +313,28 @@ monthX: "{month}"
yearX: "{year}"
pages: "Strony"
integration: "Integracja"
connectService: "Połącz"
disconnectService: "Rozłącz"
enableLocalTimeline: "Włącz lokalną oś czasu"
enableGlobalTimeline: "Włącz globalną oś czasu"
disablingTimelinesInfo: "Administratorzy i moderatorzy będą zawsze mieć dostęp do wszystkich osi czasu, nawet gdy są one wyłączone."
registration: "Zarejestruj się"
enableRegistration: "Włącz rejestrację nowych użytkowników"
invite: "Zaproś"
proxyRemoteFiles: "Przekierowuj pliki obcych instancji przez proxy"
proxyRemoteFilesDescription: "Gdy ta opcja jest włączona, zdalne pliki które nie są przechowywane lokalnie, lub zostały usunięte z powodu przekroczenia limitu miejsca będą kierowane przez proxy, razem z generowaniem miniatur. Nie ma to żadnego wpływu na przestrzeń dyskową serwera."
driveCapacityPerLocalAccount: "Powierzchnia dyskowa na lokalnego użytkownika"
driveCapacityPerRemoteAccount: "Powierzchnia dyskowa na zdalnego użytkownika"
inMb: "W megabajtach"
iconUrl: "Adres URL ikony"
bannerUrl: "Adres URL banera"
backgroundImageUrl: "Adres URL tła"
basicInfo: "Podstawowe informacje"
pinnedUsers: "Przypięty użytkownik"
pinnedUsersDescription: "Wypisz po jednej nazwie użytkownika w wierszu. Podani użytkownicy zostaną przypięci pod kartą „Eksploruj”."
pinnedPages: "Przypięte strony"
pinnedPagesDescription: "Wprowadź ścieżki stron które chcesz przypiąć na głównej stronie instancji, oddzielone znakiem nowego wiersza."
pinnedClipId: "ID przypiętego klipu"
pinnedNotes: "Przypięty wpis"
hcaptcha: "hCaptcha"
enableHcaptcha: "Włącz hCaptcha"
@ -339,7 +349,9 @@ antennas: "Anteny"
manageAntennas: "Zarządzaj Antenami"
name: "Nazwa"
antennaSource: "Źródło Anteny"
antennaKeywords: "Słowa kluczowe do obserwacji"
antennaExcludeKeywords: "Wykluczone słowa kluczowe"
antennaKeywordsDescription: "Oddziel spacjami dla warunku AND, albo wymuś koniec linii dla warunku OR"
notifyAntenna: "Powiadamiaj o nowych wpisach"
withFileAntenna: "Filtruj tylko wpisy z załączonym plikiem"
enableServiceworker: "Włącz ServiceWorker"
@ -587,8 +599,9 @@ useGlobalSetting: "Użyj globalnych ustawień"
useGlobalSettingDesc: "Jeżeli włączone, zostaną wykorzystane ustawienia powiadomień Twojego konta. Jeżeli wyłączone, mogą zostać wykonane oddzielne konfiguracje."
other: "Inne"
regenerateLoginToken: "Generuj token logowania ponownie"
regenerateLoginTokenDescription: "Regeneruje token używany wewnętrznie podczas logowania. Zazwyczaj nie jest to konieczne. Po regeneracji wszystkie urządzenia zostaną wylogowane."
setMultipleBySeparatingWithSpace: "Możesz ustawić wiele, oddzielając je spacjami."
chatOpenBehavior: "Zachowanie okna czatu po otwarciu"
fileIdOrUrl: "ID pliku albo URL"
behavior: "Zachowanie"
sample: "Przykład"
abuseReports: "Zgłoszenia"
@ -596,6 +609,8 @@ reportAbuse: "Zgłoś"
reportAbuseOf: "Zgłoś {name}"
fillAbuseReportDescription: "Wypełnij szczegóły zgłoszenia. Jeżeli dotyczy ono określonego wpisu, uwzględnij jego adres URL."
abuseReported: "Twoje zgłoszenie zostało wysłane. Dziękujemy."
reporteeOrigin: "Pochodzenie zgłoszonego"
reporterOrigin: "Pochodzenie zgłaszającego"
send: "Wyślij"
abuseMarkAsResolved: "Oznacz zgłoszenie jako rozwiązane"
openInNewTab: "Otwórz w nowej karcie"
@ -608,7 +623,7 @@ random: "Losowe"
system: "System"
switchUi: "Przełącz interfejs użytkownika"
desktop: "Pulpit"
createNew: "Utworzy nowy"
createNew: "Utwórz nowy"
optional: "Nieobowiązkowe"
public: "Publiczny"
i18nInfo: "Misskey jest tłumaczone na wiele języków przez wolontariuszy. Możesz pomóc na {link}."
@ -631,6 +646,7 @@ driveFilesCount: "Liczba plików na dysku"
driveUsage: "Użycie przestrzeni dyskowej"
noCrawle: "Odrzuć indeksowanie przez crawlery"
noCrawleDescription: "Proś wyszukiwarki internetowe, aby nie indeksowały Twojego profilu, wpisów, stron itd."
lockedAccountInfo: "Dopóki nie ustawisz widoczności wpisu na \"Obserwujący\", twoje wpisy będą mogli widzieć wszyscy, nawet jeśli ustawisz manualne zatwierdzanie obserwujących."
alwaysMarkSensitive: "Oznacz domyślnie jako NSFW"
loadRawImages: "Wyświetlaj zdjęcia w załącznikach w całości zamiast miniatur"
disableShowingAnimatedImages: "Nie odtwarzaj animowanych obrazów"
@ -654,6 +670,7 @@ center: "Wyśsrodkuj"
wide: "Szerokie"
narrow: "Wąskie"
reloadToApplySetting: "To ustawienie zostanie zastosowane po odświeżeniu strony. Chcesz odświeżyć?"
needReloadToApply: "To ustawienie zostanie zastosowane po odświeżeniu strony"
showTitlebar: "Pokazuj pasek tytułowy"
clearCache: "Wyczyść pamięć podręczną"
onlineUsersCount: "{n} osób jest online"
@ -698,6 +715,8 @@ unlikeConfirm: "Na pewno chcesz usunąć polubienie?"
fullView: "Pełny widok"
quitFullView: "Opuść pełny widok"
addDescription: "Dodaj opis"
userPagePinTip: "Możesz wyświetlać wpisy w tym miejscu po wybraniu \"Przypnij do profilu\" z menu pojedyńczego wpisu"
notSpecifiedMentionWarning: "Ten wpis zawiera wzmianki o użytkownikach niezawartych jako odbiorcy"
info: "Informacje"
userInfo: "Informacje o użykowniku"
unknown: "Nieznane"
@ -735,11 +754,18 @@ middle: "Średnie"
low: "Niski"
emailNotConfiguredWarning: "Nie podano adresu e-mail"
ratio: "Stosunek"
previewNoteText: "Pokaż podgląd"
customCss: "Własny CSS"
customCssWarn: "Używaj tego ustawienia tylko wtedy, gdy wiesz co ono robi. Nieprawidłowe wpisy mogą spowodować, że klient przestanie działać poprawnie."
global: "Globalna"
squareAvatars: "Wyświetlaj kwadratowe awatary"
sent: "Wyślij"
received: "Otrzymane"
hashtags: "Hashtag"
_docs:
admin: "Zarządzanie"
pubSub: "Konta Pub/Sub"
hide: "Ukryj"
_ffVisibility:
public: "Publikuj"
_ad:
back: "Wróć"
reduceFrequencyOfThisAd: "Pokazuj tę reklamę rzadziej"
@ -815,6 +841,7 @@ _mfm:
blur: "Rozmycie"
font: "Czcionka"
fontDescription: "Wybiera czcionkę do wyświetlania treści."
rotate: "Obróć"
_reversi:
reversi: "Reversi"
gameSettings: "Ustawienia gry"
@ -976,6 +1003,7 @@ _tutorial:
step1_3: "Twoja oś czasu jest jeszcze pusta, ponieważ nie opublikowałeś(-aś) jeszcze żadnych wpisów i nie obserwujesz jeszcze nikogo."
step2_1: "Ukończmy konfigurację profilu zanim utworzymy wpis lub zaczniemy kogoś obserwować."
step3_1: "Zakończyłeś(-aś) konfigurację profilu?"
step3_3: "Wypełnij pole i kliknij przycisk w prawym górnym rogu by wysłać post."
_2fa:
registerDevice: "Zarejestruj nowe urządzenie"
step1: "Najpierw, zainstaluj aplikację uwierzytelniającą (taką jak {a} lub {b}) na swoim urządzeniu."
@ -1047,7 +1075,7 @@ _poll:
deadlineDate: "Data zakończenia"
deadlineTime: "godz."
duration: "Czas trwania"
votesCount: "{} głosów"
votesCount: "{n} głosów"
totalVotes: "Łącznie {n} głosów"
vote: "Głosowanie w ankiecie"
showResult: "Pokaż wyniki"

View File

@ -1,22 +1,33 @@
---
_lang_: "Português"
headlineMisskey: "Rede conectada por notas"
monthAndDay: "{day}/{month}"
search: "Pesquisar"
notifications: "Notificações"
username: "Nome de usuário"
password: "Senha"
forgotPassword: "Esqueci a senha"
fetchingAsApObject: "Buscando no Fediverso"
ok: "OK"
gotIt: "Entendi"
cancel: "Cancelar"
enterUsername: "Digite o nome de usuário"
renotedBy: "Repostado por {user}"
noNotes: "Sem posts"
noNotifications: "Sem notificações"
instance: "Instância"
settings: "Configurações"
basicSettings: "Configurações básicas"
otherSettings: "Outras configurações"
openInWindow: "Abrir numa janela"
profile: "Perfil"
timeline: "Timeline"
login: "Iniciar sessão"
loggingIn: "Iniciando sessão…"
logout: "Sair"
signup: "Registrar-se"
uploading: "Enviando…"
save: "Guardar"
users: "Usuários"
favorite: "Favoritar"
favorites: "Favoritar"

View File

@ -106,7 +106,6 @@ clickToShow: "Нажмите для просмотра"
sensitive: "Содержимое не для всех"
add: "Добавить"
reaction: "Реакции"
reactionSettingDescription: "Подберите, что будет у вас в палитре реакций"
reactionSettingDescription2: "Расставляйте перетаскиванием, удаляйте нажатием, добавляйте кнопкой «+»."
rememberNoteVisibility: "Запоминать видимость заметок"
attachCancel: "Удалить вложение"
@ -612,7 +611,6 @@ regenerateLoginToken: "Создать новый токен для входа"
regenerateLoginTokenDescription: "Создаёт новый токен, используемый внутри программы во время входа. Обычно в этом нет необходимости. При создании все устройства будут отключены."
setMultipleBySeparatingWithSpace: "Можно написать несколько через пробел"
fileIdOrUrl: "Идентификатор файла или ссылка"
chatOpenBehavior: "Поведение окна чата при открытии"
behavior: "Поведение"
sample: "Пример"
abuseReports: "Жалобы"
@ -620,6 +618,8 @@ reportAbuse: "Жалоба"
reportAbuseOf: "Пожаловаться на пользователя {name}"
fillAbuseReportDescription: "Опишите, пожалуйста, причину жалобы подробнее. Если речь о конкретной заметке, будьте добры приложить ссылку на неё."
abuseReported: "Жалоба отправлена. Большое спасибо за информацию."
reporteeOrigin: "Куда сообщать"
reporterOrigin: "Сообщено"
send: "Отправить"
abuseMarkAsResolved: "Отметить жалобу как решённую"
openInNewTab: "Открыть в новой вкладке"
@ -682,6 +682,7 @@ center: "По центру"
wide: "Толстый"
narrow: "Тонкий"
reloadToApplySetting: "Это настройка вступает в силу при загрузке страницы. Перезагрузить сейчас?"
needReloadToApply: "Чтобы это вступило в силу, требуется перезагрузка."
showTitlebar: "Показать заголовок"
clearCache: "Очистить кэш"
onlineUsersCount: "Пользователей сейчас в сети: {n}"
@ -766,6 +767,7 @@ middle: "Средне"
low: "Низкий"
emailNotConfiguredWarning: "Не указан адрес электронной почты"
ratio: "Соотношение"
previewNoteText: "Предварительный просмотр текста"
customCss: "Индивидуальный CSS"
customCssWarn: "Используйте эту настройку только если знаете, что делаете. Ошибки здесь чреваты тем, что сайт перестанет нормально работать у вас."
global: "Всеобщая"
@ -780,19 +782,50 @@ learnMore: "Подробнее"
misskeyUpdated: "Misskey обновился!"
whatIsNew: "Что новенького?"
translate: "Перевод"
translatedFrom: "{x}Перевод с английского"
accountDeletionInProgress: "В настоящее время выполняется удаление учетной записи"
usernameInfo: "Имя, которое отличает вашу учетную запись от других на этом сервере. Вы можете использовать алфавит (a~z, A~Z), цифры (0~9) или символы подчеркивания (_). Имена пользователей не могут быть изменены позже."
aiChanMode: "ИИ режим"
keepCw: "Сохраняйте Предупреждения о содержимом"
lastCommunication: "Последнее сообщение"
resolved: "Решен"
unresolved: "Неразрешенные"
itsOff: "Он выключен!"
emailRequiredForSignup: "Требуется адрес электронной почты для регистрации аккаунта"
unread: "Непрочитанное"
filter: "Фильтры"
controlPanel: "Панель управления"
manageAccounts: "Управление аккаунтом"
_docs:
continueReading: "Читать подробнее"
features: "Возможности"
generalTopics: "Основные темы"
advancedTopics: "Дополнительные темы"
admin: "Управление"
translateWarn: "Это перевод документа. Он может неточно отражать содержимое оригинала."
makeReactionsPublic: "Опубликовать список реакций"
makeReactionsPublicDescription: "Список сделанных вами реакций доступен для просмотра всем желающим."
classic: "Классика"
unmuteThread: "Отключить звук"
ffVisibilityDescription: "Вы можете установить объем вашей следующей/последней информации."
voteConfirm: "Вы бы проголосовали за \"{choice}\"?"
hide: "Спрятать"
leaveGroup: "Покинуть группу"
leaveGroupConfirm: "Вы хотите оставить \"{name}\"?"
welcomeBackWithName: "С возвращением, {name}!"
clickToFinishEmailVerification: "Пожалуйста, нажмите [{ok}], чтобы завершить подтверждение адреса электронной почты."
_emailUnavailable:
used: "Уже используется"
format: "Неправильный формат"
mx: "Это неправильный почтовый сервер!"
smtp: "Почтовый сервер не отвечает"
_ffVisibility:
public: "Опубликовать"
private: "Частный"
_signup:
almostThere: "Почти готово!"
emailAddressInfo: "Пожалуйста, введите адрес электронной почты, который вы используете."
emailSent: "На указанный вами адрес электронной почты ({email}) было отправлено письмо с подтверждением. Перейдите по ссылке в электронном письме, чтобы завершить создание учетной записи."
_accountDelete:
accountDelete: "Удалить свой аккаунт"
mayTakeTime: "Удаление учетной записи - это тяжелый процесс, который может занять много времени, если у вас создано много контента или загружено много файлов."
sendEmail: "Мы отправим уведомление на зарегистрированный вами адрес электронной почты, когда ваша учетная запись будет удалена."
requestAccountDelete: "Запросить удаление вашей учетной записи"
started: "Процесс удаления начался."
inProgress: "Удаление в процессе"
_ad:
back: "Выход"
reduceFrequencyOfThisAd: "Реже показывать эту рекламу"
@ -893,6 +926,10 @@ _mfm:
fontDescription: "Так можно писать произвольным шрифтом."
rainbow: "Радуга"
rainbowDescription: "Заставлять содержимое отображаться в цветах радуги."
sparkle: "Блеск"
sparkleDescription: "Добавьте эффект искрящихся частиц."
rotate: "Повернуть"
rotateDescription: "Повернуть на указанный угол."
_reversi:
reversi: "Реверси"
gameSettings: "Настройки игры"
@ -1119,6 +1156,10 @@ _permissions:
"write:user-groups": "Изменять и удалять группы пользователей"
"read:channels": "Смотреть каналы"
"write:channels": "Изменять каналы"
"read:gallery": "Смотреть галерею"
"write:gallery": "Работа с галереей"
"read:gallery-likes": "Посмотреть галерею лайков"
"write:gallery-likes": "Манипулируйте понравившейся галереей"
_auth:
shareAccess: "Дать доступ для «{name}» к вашей учётной записи?"
shareAccessAsk: "Уверены, что хотите дать приложению доступ к своей учётной записи?"
@ -1227,6 +1268,7 @@ _exportOrImport:
muteList: "Скрытые"
blockingList: "Заблокированные"
userLists: "Списки"
excludeMutingUsers: "Исключение отключенных пользователей"
_charts:
federationInstancesIncDec: "Изменение внешних связей"
federationInstancesTotal: "Количество внешних связей"

View File

@ -103,7 +103,6 @@ clickToShow: "Натисніть для перегляду"
sensitive: "NSFW"
add: "Додати"
reaction: "Реакції"
reactionSettingDescription: "Виберіть свої улюблені реакції, які хочете закріпити в селекторі реакцій."
reactionSettingDescription2: "Перемістити щоб змінити порядок, Клацнути мишою щоб видалити, Натиснути \"+\" щоб додати."
rememberNoteVisibility: "Пам’ятати параметри видимісті"
attachCancel: "Видалити вкладення"
@ -593,7 +592,6 @@ regenerateLoginToken: "Оновити Login Token"
regenerateLoginTokenDescription: "Регенерувати внутрішній ключ використовуваний під час входу. Зазвичай цього не потрібно робити. При регенерації всі пристрої вийдуть з системи."
setMultipleBySeparatingWithSpace: "Можна вказати кілька значень, відділивши їх пробілом."
fileIdOrUrl: "Ідентифікатор файлу або посилання"
chatOpenBehavior: "Поводження вікна переписки під час відкриття"
behavior: "Поведінка"
sample: "Приклад"
abuseReports: "Скарги"
@ -692,8 +690,7 @@ middle: "Середній"
global: "Глобальна"
sent: "Відправити"
hashtags: "Хештеґ"
_docs:
admin: "Управління"
hide: "Сховати"
_ad:
back: "Назад"
_gallery:
@ -773,6 +770,7 @@ _mfm:
blurDescription: "Цей ефект зробить контент розмитим. Контент можна зробити чітким, якщо навести на нього вказівник миші."
font: "Шрифт"
fontDescription: "Встановлює шрифт для контенту."
rotate: "Обертати"
_reversi:
reversi: "Реверсі"
gameSettings: "Налаштування гри"

View File

@ -1,20 +1,20 @@
---
_lang_: "中文(简体)"
headlineMisskey: "通过帖子连接在一起的网络"
introMisskey: "欢迎Misskey是一个开源的、去中心化的“微博客”服务。\n通过编写「帖」来和大家分享你的以及你周围的事情吧!📡\n通过「回应」功能可以让你快速地对大家的帖表达反馈👍\n来探索新的世界吧🚀"
introMisskey: "欢迎Misskey是一个开源的、去中心化的“微博客”服务。\n通过编写「帖」来和大家分享你的以及你周围的事情吧!📡\n通过「回应」功能可以让你快速地对大家的帖表达反馈👍\n来探索新的世界吧🚀"
monthAndDay: "{month}月 {day}日"
search: "搜索"
notifications: "通知"
username: "用户名"
password: "密码"
forgotPassword: "重置密码"
fetchingAsApObject: "联合查询"
forgotPassword: "忘记密码"
fetchingAsApObject: "联合查询"
ok: "OK"
gotIt: "我明白了"
cancel: "取消"
enterUsername: "输入用户名"
renotedBy: "{user} 转发了"
noNotes: "没有帖"
renotedBy: "{user} 转"
noNotes: "没有帖"
noNotifications: "无通知"
instance: "实例"
settings: "设置"
@ -106,7 +106,7 @@ clickToShow: "点击以显示"
sensitive: "敏感内容"
add: "添加"
reaction: "回应"
reactionSettingDescription: "选择您想要置顶的回应"
reactionSetting: "选择器中显示的回应"
reactionSettingDescription2: "拖动重新排序,单击删除,点击 + 添加。"
rememberNoteVisibility: "保存上次设置的可见性"
attachCancel: "删除附件"
@ -124,9 +124,9 @@ unblockConfirm: "确定要解除拉黑吗?"
suspendConfirm: "要冻结吗?"
unsuspendConfirm: "要解除冻结吗?"
selectList: "选择列表"
selectAntenna: "天线选择"
selectAntenna: "选择天线"
selectWidget: "选择小工具"
editWidgets: "编辑小工具"
editWidgets: "编辑部件"
editWidgetsExit: "完成编辑"
customEmojis: "自定义表情符号"
emoji: "表情符号"
@ -139,9 +139,9 @@ cacheRemoteFiles: "远程文件缓存"
cacheRemoteFilesDescription: "当禁用此设定时远程文件将直接从远程实例载入。禁用后会减小储存空间需求,但是会增加流量,因为缩略图不会被生成。"
flagAsBot: "这是一个机器人账号"
flagAsBotDescription: "如果此帐户由程序控制请启用此项。启用后此标志可以帮助其他开发人员防止机器人之间产生无限互动的行为并让Misskey的内部系统将此帐户识别为机器人。"
flagAsCat: "这个账户一只猫"
flagAsCatDescription: "如果您想表明此帐户是一只猫,请打开此标志。\n开启后会在您的头像上出现猫耳朵并将你的帖子中的「na」替换为「nya」日文同理。"
autoAcceptFollowed: "自动允许关注者的关注"
flagAsCat: "这个账户设定为一只猫"
flagAsCatDescription: "如果您想表明此帐户是一只猫,请打开此标志。"
autoAcceptFollowed: "自动允许关注"
addAccount: "添加账户"
loginFailed: "登录失败"
showOnRemote: "转到所在实例显示"
@ -448,6 +448,7 @@ uiLanguage: "显示语言"
groupInvited: "您有新的群组邀请"
aboutX: "关于 {x}"
useOsNativeEmojis: "使用系统的原生表情符号"
disableDrawer: "不显示抽屉菜单"
youHaveNoGroups: "没有群组"
joinOrCreateGroup: "请加入一个现有的群组,或者创建新群组。"
noHistory: "没有历史记录"
@ -592,6 +593,7 @@ smtpSecure: "在 SMTP 连接中使用隐式 SSL / TLS"
smtpSecureInfo: "使用STARTTLS时关闭。"
testEmail: "邮件发送测试"
wordMute: "文字屏蔽"
instanceMute: "实例的屏蔽"
userSaysSomething: "{name}说了什么"
makeActive: "启用"
display: "显示"
@ -612,7 +614,6 @@ regenerateLoginToken: "重新生成登录令牌"
regenerateLoginTokenDescription: "重新生成用于登录的内部令牌。通常您不需要这样做。重新生成后,您将在所有设备上登出。"
setMultipleBySeparatingWithSpace: "您可以使用空格分隔多个项目。"
fileIdOrUrl: "文件ID或者URL"
chatOpenBehavior: "聊天窗口打开时的行为"
behavior: "行为"
sample: "示例"
abuseReports: "举报"
@ -620,6 +621,8 @@ reportAbuse: "举报"
reportAbuseOf: "举报{name}"
fillAbuseReportDescription: "请填写举报的详细原因。如果有对方发的帖子请同时填写URL地址。"
abuseReported: "内容已发送。感谢您的报告。"
reporteeOrigin: "举报来源"
reporterOrigin: "举报者来源"
send: "发送"
abuseMarkAsResolved: "处理完毕"
openInNewTab: "在新标签页中打开"
@ -682,6 +685,7 @@ center: "中央"
wide: "宽"
narrow: "窄"
reloadToApplySetting: "页面刷新后设置才会生效。是否现在刷新页面?"
needReloadToApply: "重启后应用才会生效。"
showTitlebar: "显示标题栏"
clearCache: "清除缓存"
onlineUsersCount: "{n}人在线"
@ -790,6 +794,7 @@ pubSub: "Pub/Sub账户"
lastCommunication: "最近通信"
resolved: "已解决"
unresolved: "未解决"
breakFollow: "移除关注者"
itsOn: "已开启"
itsOff: "已关闭"
emailRequiredForSignup: "注册账户需要电子邮件地址"
@ -797,7 +802,33 @@ unread: "未读"
filter: "筛选"
controlPanel: "控制面板"
manageAccounts: "管理账户"
makeReactionsPublic: "将回应设置为公开"
makeReactionsPublicDescription: "将您发表过的回应设置成公开可见。"
classic: "经典"
muteThread: "屏蔽帖子列表"
unmuteThread: "取消屏蔽帖子列表"
ffVisibility: "连接的可见范围"
ffVisibilityDescription: "您可以设置您的关注/关注者信息的公开范围"
continueThread: "查看更多帖子"
deleteAccountConfirm: "将要删除账户。是否确认?"
incorrectPassword: "密码错误"
voteConfirm: "确定投给“{choice}” "
hide: "隐藏"
leaveGroup: "离开群组"
leaveGroupConfirm: "确定离开「{name}」?"
useDrawerReactionPickerForMobile: "在移动设备上使用抽屉显示"
welcomeBackWithName: "欢迎回来,{name}"
clickToFinishEmailVerification: "点击 [{ok}] 完成电子邮件地址认证。"
_emailUnavailable:
used: "已经被使用过"
format: "无效的格式"
disposable: "不是永久可用的地址"
mx: "邮件服务器不正确"
smtp: "邮件服务器没有响应"
_ffVisibility:
public: "发布"
followers: "只有关注你的用户能看到"
private: "私密"
_signup:
almostThere: "即将完成"
emailAddressInfo: "请输入您所使用的电子邮件地址"
@ -809,13 +840,6 @@ _accountDelete:
requestAccountDelete: "请求删除账户"
started: "账户删除过程已开始。"
inProgress: "正在删除"
_docs:
continueReading: "继续阅读"
features: "特性"
generalTopics: "通常提示"
advancedTopics: "进阶提示"
admin: "管理"
translateWarn: "本文档是翻译后的文档。内容可能与原文有所不同。"
_ad:
back: "返回"
reduceFrequencyOfThisAd: "减少此广告的频率"
@ -918,6 +942,8 @@ _mfm:
rainbowDescription: "用彩虹色来显示内容。"
sparkle: "闪光"
sparkleDescription: "添加发光粒子效果。"
rotate: "旋转"
rotateDescription: "旋转指定的角度。"
_reversi:
reversi: "黑白棋"
gameSettings: "对局设置"
@ -983,6 +1009,11 @@ _wordMute:
soft: "软屏蔽"
hard: "硬屏蔽"
mutedNotes: "被屏蔽的帖子"
_instanceMute:
instanceMuteDescription: "屏蔽配置实例中的所有帖子和转帖,包括实例的用户回复。"
instanceMuteDescription2: "设置时用换行符来分隔"
title: "隐藏实例已设置的帖子。"
heading: "屏蔽实例"
_theme:
explore: "寻找主题"
install: "安装主题"
@ -1256,6 +1287,8 @@ _exportOrImport:
muteList: "屏蔽"
blockingList: "拉黑"
userLists: "列表"
excludeMutingUsers: "排除屏蔽用户"
excludeInactiveUsers: "排除不活跃用户"
_charts:
federationInstancesIncDec: "联合:增加/减少"
federationInstancesTotal: "联合总数"

View File

@ -104,7 +104,6 @@ clickToShow: "按一下以顯示"
sensitive: "敏感內容"
add: "新增"
reaction: "情感"
reactionSettingDescription: "置頂「反應」表情符號\n"
reactionSettingDescription2: "拖動以重新列序,點擊以刪除,按下 + 添加。"
rememberNoteVisibility: "記住貼文可見性"
attachCancel: "移除附件"
@ -598,7 +597,6 @@ regenerateLoginToken: "重新產生登入權杖"
regenerateLoginTokenDescription: "重新產生用於登入的內部權杖。一般情況下是不需要這樣做的。一旦重產,所有裝置將會被登出。"
setMultipleBySeparatingWithSpace: "您可以使用空格分隔多個項目。"
fileIdOrUrl: "檔案ID或URL"
chatOpenBehavior: "開啟聊天窗口時的行為"
behavior: "行為"
sample: "範例"
abuseReports: "檢舉"
@ -754,8 +752,9 @@ ratio: "%"
global: "公開"
sent: "發送"
hashtags: "#tag"
_docs:
admin: "管理"
hide: "隱藏"
_ffVisibility:
public: "發佈"
_ad:
back: "返回"
reduceFrequencyOfThisAd: "降低此廣告的頻率 "
@ -840,6 +839,7 @@ _mfm:
blur: "模糊"
font: "字型"
fontDescription: "您可以設定顯示內容的字型"
rotate: "旋轉"
_reversi:
reversi: "黑白棋"
gameSettings: "對弈設定"

View File

@ -1,6 +1,6 @@
{
"name": "misskey",
"version": "12.96.1",
"version": "12.101.0",
"codename": "indigo",
"repository": {
"type": "git",
@ -17,10 +17,8 @@
"migrate": "cd packages/backend && npx typeorm migration:run",
"migrateandstart": "npm run migrate && npm run start",
"gulp": "gulp build",
"watch": "concurrently \"npm:watch-*\"",
"watch-webpack": "webpack --watch",
"watch-ts": "tsc -w -p packages/tsconfig.json && tsc-alias -w -p packages/tsconfig.json",
"watch-gulp": "gulp watch",
"watch": "npm run dev",
"dev": "node ./scripts/dev.js",
"lint": "node ./scripts/lint.js",
"cy:open": "cypress open",
"cy:run": "cypress run",
@ -40,13 +38,16 @@
"gulp-cssnano": "2.1.3",
"gulp-rename": "2.0.0",
"gulp-replace": "1.1.3",
"gulp-terser": "2.1.0"
"gulp-terser": "2.1.0",
"js-yaml": "4.1.0"
},
"devDependencies": {
"@redocly/openapi-core": "1.0.0-beta.54",
"@types/fluent-ffmpeg": "2.1.17",
"@typescript-eslint/parser": "5.4.0",
"cross-env": "7.0.3",
"cypress": "9.0.0",
"start-server-and-test": "1.14.0"
"cypress": "9.1.0",
"start-server-and-test": "1.14.0",
"typescript": "4.5.2"
}
}

View File

@ -1,64 +1,9 @@
module.exports = {
root: true,
parser: '@typescript-eslint/parser',
parserOptions: {
tsconfigRootDir: __dirname,
project: ['./tsconfig.json'],
},
plugins: [
'@typescript-eslint',
'import'
],
extends: [
'eslint:recommended',
'plugin:@typescript-eslint/recommended',
'plugin:import/recommended',
'plugin:import/typescript'
'../shared/.eslintrc.js',
],
rules: {
'indent': ['warn', 'tab', {
'SwitchCase': 1,
'MemberExpression': 'off',
'flatTernaryExpressions': true,
'ArrayExpression': 'first',
'ObjectExpression': 'first',
}],
'eol-last': ['error', 'always'],
'semi': ['error', 'always'],
'quotes': ['warn', 'single'],
'comma-dangle': ['warn', 'always-multiline'],
'keyword-spacing': ['error', {
'before': true,
'after': true,
}],
/* TODO: path aliasを使わないとwarnする
'no-restricted-imports': ['warn', {
'patterns': [
]
}],
*/
'no-multi-spaces': ['error'],
'no-var': ['error'],
'prefer-arrow-callback': ['error'],
'no-throw-literal': ['warn'],
'no-param-reassign': ['warn'],
'no-constant-condition': ['warn'],
'no-empty-pattern': ['warn'],
'no-async-promise-executor': ['off'],
'no-useless-escape': ['off'],
'no-multi-spaces': ['warn'],
'no-control-regex': ['warn'],
'no-empty': ['warn'],
'no-inner-declarations': ['off'],
'no-sparse-arrays': ['off'],
'@typescript-eslint/no-var-requires': ['warn'],
'@typescript-eslint/no-inferrable-types': ['warn'],
'@typescript-eslint/no-empty-function': ['off'],
'@typescript-eslint/no-non-null-assertion': ['off'],
'@typescript-eslint/no-misused-promises': ['error', {
'checksVoidReturn': false,
}],
'import/no-unresolved': ['off'],
'import/no-default-export': ['warn'],
},
};

View File

@ -0,0 +1,6 @@
{
"typescript.tsdk": "node_modules\\typescript\\lib",
"path-intellisense.mappings": {
"@": "${workspaceRoot}/packages/backend/src/"
}
}

View File

@ -0,0 +1,15 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
class userInstanceBlocks1629968054000 {
constructor() {
this.name = 'userInstanceBlocks1629968054000';
}
async up(queryRunner) {
await queryRunner.query(`ALTER TABLE "user_profile" ADD "mutedInstances" jsonb NOT NULL DEFAULT '[]'`);
await queryRunner.query(`COMMENT ON COLUMN "user_profile"."mutedInstances" IS 'List of instances muted by the user.'`);
}
async down(queryRunner) {
await queryRunner.query(`ALTER TABLE "user_profile" DROP COLUMN "mutedInstances"`);
}
}
exports.userInstanceBlocks1629968054000 = userInstanceBlocks1629968054000;

View File

@ -0,0 +1,189 @@
const { MigrationInterface, QueryRunner } = require("typeorm");
module.exports = class chartV31639325650583 {
name = 'chartV31639325650583'
async up(queryRunner) {
await queryRunner.query(`DELETE FROM "__chart__per_user_drive" WHERE "group" IS NULL`);
await queryRunner.query(`DROP INDEX "public"."IDX_dd907becf76104e4b656659e6b"`);
await queryRunner.query(`DROP INDEX "public"."IDX_eddfed8fb40305a04c6f941050"`);
await queryRunner.query(`DROP INDEX "public"."IDX_f09d543e3acb16c5976bdb31fa"`);
await queryRunner.query(`DROP INDEX "public"."IDX_e60c358aaced5aab8900a4af31"`);
await queryRunner.query(`DROP INDEX "public"."IDX_337e9599f278bd7537fe30876f"`);
await queryRunner.query(`DROP INDEX "public"."IDX_66feba81e1795d176d06c0b1e6"`);
await queryRunner.query(`DROP INDEX "public"."IDX_0a905b992fecd2b5c3fb98759e"`);
await queryRunner.query(`DROP INDEX "public"."IDX_2082327b2699ce924fa654afc5"`);
await queryRunner.query(`DROP INDEX "public"."IDX_9a3ed15a30ab7e3a37702e6e08"`);
await queryRunner.query(`DROP INDEX "public"."IDX_60c5c6e7e538c09aa274ecd1cf"`);
await queryRunner.query(`DROP INDEX "public"."IDX_8111b817b9818c04d7eb8475b1"`);
await queryRunner.query(`DROP INDEX "public"."IDX_583a157ed0cf0ed1b5ec2a833f"`);
await queryRunner.query(`DROP INDEX "public"."IDX_3313d7288855ec105b5bbf6c21"`);
await queryRunner.query(`DROP INDEX "public"."IDX_ceab80a6729f8e2e6f5b8a1a3d"`);
await queryRunner.query(`DROP INDEX "public"."IDX_3b7697a96f522d0478972e6d6f"`);
await queryRunner.query(`DROP INDEX "public"."IDX_53a3604b939e2b479eb2cfaac8"`);
await queryRunner.query(`DROP INDEX "public"."IDX_dabbb38a51ab86ee3cab291326"`);
await queryRunner.query(`DROP INDEX "public"."IDX_a9a806d466b314f253a1a611c4"`);
await queryRunner.query(`CREATE TABLE "__chart_day__federation" ("id" SERIAL NOT NULL, "date" integer NOT NULL, "___instance_total" bigint NOT NULL, "___instance_inc" bigint NOT NULL, "___instance_dec" bigint NOT NULL, CONSTRAINT "UQ_617a8fe225a6e701d89e02d2c74" UNIQUE ("date"), CONSTRAINT "PK_7ca721c769f31698e0e1331e8e6" PRIMARY KEY ("id"))`);
await queryRunner.query(`CREATE UNIQUE INDEX "IDX_617a8fe225a6e701d89e02d2c7" ON "__chart_day__federation" ("date") `);
await queryRunner.query(`CREATE TABLE "__chart_day__notes" ("id" SERIAL NOT NULL, "date" integer NOT NULL, "___local_total" bigint NOT NULL, "___local_inc" bigint NOT NULL, "___local_dec" bigint NOT NULL, "___local_diffs_normal" bigint NOT NULL, "___local_diffs_reply" bigint NOT NULL, "___local_diffs_renote" bigint NOT NULL, "___remote_total" bigint NOT NULL, "___remote_inc" bigint NOT NULL, "___remote_dec" bigint NOT NULL, "___remote_diffs_normal" bigint NOT NULL, "___remote_diffs_reply" bigint NOT NULL, "___remote_diffs_renote" bigint NOT NULL, CONSTRAINT "UQ_1a527b423ad0858a1af5a056d43" UNIQUE ("date"), CONSTRAINT "PK_1fa4139e1f338272b758d05e090" PRIMARY KEY ("id"))`);
await queryRunner.query(`CREATE UNIQUE INDEX "IDX_1a527b423ad0858a1af5a056d4" ON "__chart_day__notes" ("date") `);
await queryRunner.query(`CREATE TABLE "__chart_day__users" ("id" SERIAL NOT NULL, "date" integer NOT NULL, "___local_total" bigint NOT NULL, "___local_inc" bigint NOT NULL, "___local_dec" bigint NOT NULL, "___remote_total" bigint NOT NULL, "___remote_inc" bigint NOT NULL, "___remote_dec" bigint NOT NULL, CONSTRAINT "UQ_cad6e07c20037f31cdba8a350c3" UNIQUE ("date"), CONSTRAINT "PK_d7f7185abb9851f70c4726c54bd" PRIMARY KEY ("id"))`);
await queryRunner.query(`CREATE UNIQUE INDEX "IDX_cad6e07c20037f31cdba8a350c" ON "__chart_day__users" ("date") `);
await queryRunner.query(`CREATE TABLE "__chart_day__network" ("id" SERIAL NOT NULL, "date" integer NOT NULL, "___incomingRequests" bigint NOT NULL, "___outgoingRequests" bigint NOT NULL, "___totalTime" bigint NOT NULL, "___incomingBytes" bigint NOT NULL, "___outgoingBytes" bigint NOT NULL, CONSTRAINT "UQ_8bfa548c2b31f9e07db113773ee" UNIQUE ("date"), CONSTRAINT "PK_cac499d6f471042dfed1e7e0132" PRIMARY KEY ("id"))`);
await queryRunner.query(`CREATE UNIQUE INDEX "IDX_8bfa548c2b31f9e07db113773e" ON "__chart_day__network" ("date") `);
await queryRunner.query(`CREATE TABLE "__chart_day__active_users" ("id" SERIAL NOT NULL, "date" integer NOT NULL, "___local_users" character varying array NOT NULL, "___remote_users" character varying array NOT NULL, CONSTRAINT "UQ_d5954f3df5e5e3bdfc3c03f3906" UNIQUE ("date"), CONSTRAINT "PK_b1790489b14f005ae8f404f5795" PRIMARY KEY ("id"))`);
await queryRunner.query(`CREATE UNIQUE INDEX "IDX_d5954f3df5e5e3bdfc3c03f390" ON "__chart_day__active_users" ("date") `);
await queryRunner.query(`CREATE TABLE "__chart_day__instance" ("id" SERIAL NOT NULL, "date" integer NOT NULL, "group" character varying(128) NOT NULL, "___requests_failed" bigint NOT NULL, "___requests_succeeded" bigint NOT NULL, "___requests_received" bigint NOT NULL, "___notes_total" bigint NOT NULL, "___notes_inc" bigint NOT NULL, "___notes_dec" bigint NOT NULL, "___notes_diffs_normal" bigint NOT NULL, "___notes_diffs_reply" bigint NOT NULL, "___notes_diffs_renote" bigint NOT NULL, "___users_total" bigint NOT NULL, "___users_inc" bigint NOT NULL, "___users_dec" bigint NOT NULL, "___following_total" bigint NOT NULL, "___following_inc" bigint NOT NULL, "___following_dec" bigint NOT NULL, "___followers_total" bigint NOT NULL, "___followers_inc" bigint NOT NULL, "___followers_dec" bigint NOT NULL, "___drive_totalFiles" bigint NOT NULL, "___drive_totalUsage" bigint NOT NULL, "___drive_incFiles" bigint NOT NULL, "___drive_incUsage" bigint NOT NULL, "___drive_decFiles" bigint NOT NULL, "___drive_decUsage" bigint NOT NULL, CONSTRAINT "UQ_fea7c0278325a1a2492f2d6acbf" UNIQUE ("date", "group"), CONSTRAINT "PK_479a8ff9d959274981087043023" PRIMARY KEY ("id"))`);
await queryRunner.query(`CREATE UNIQUE INDEX "IDX_fea7c0278325a1a2492f2d6acb" ON "__chart_day__instance" ("date", "group") `);
await queryRunner.query(`CREATE TABLE "__chart_day__per_user_notes" ("id" SERIAL NOT NULL, "date" integer NOT NULL, "group" character varying(128) NOT NULL, "___total" bigint NOT NULL, "___inc" bigint NOT NULL, "___dec" bigint NOT NULL, "___diffs_normal" bigint NOT NULL, "___diffs_reply" bigint NOT NULL, "___diffs_renote" bigint NOT NULL, CONSTRAINT "UQ_c5545d4b31cdc684034e33b81c3" UNIQUE ("date", "group"), CONSTRAINT "PK_58bab6b6d3ad9310cbc7460fd28" PRIMARY KEY ("id"))`);
await queryRunner.query(`CREATE UNIQUE INDEX "IDX_c5545d4b31cdc684034e33b81c" ON "__chart_day__per_user_notes" ("date", "group") `);
await queryRunner.query(`CREATE TABLE "__chart_day__drive" ("id" SERIAL NOT NULL, "date" integer NOT NULL, "___local_totalCount" bigint NOT NULL, "___local_totalSize" bigint NOT NULL, "___local_incCount" bigint NOT NULL, "___local_incSize" bigint NOT NULL, "___local_decCount" bigint NOT NULL, "___local_decSize" bigint NOT NULL, "___remote_totalCount" bigint NOT NULL, "___remote_totalSize" bigint NOT NULL, "___remote_incCount" bigint NOT NULL, "___remote_incSize" bigint NOT NULL, "___remote_decCount" bigint NOT NULL, "___remote_decSize" bigint NOT NULL, CONSTRAINT "UQ_0b60ebb3aa0065f10b0616c1171" UNIQUE ("date"), CONSTRAINT "PK_e7ec0de057c77c40fc8d8b62151" PRIMARY KEY ("id"))`);
await queryRunner.query(`CREATE UNIQUE INDEX "IDX_0b60ebb3aa0065f10b0616c117" ON "__chart_day__drive" ("date") `);
await queryRunner.query(`CREATE TABLE "__chart_day__per_user_reaction" ("id" SERIAL NOT NULL, "date" integer NOT NULL, "group" character varying(128) NOT NULL, "___local_count" bigint NOT NULL, "___remote_count" bigint NOT NULL, CONSTRAINT "UQ_d54b653660d808b118e36c184c0" UNIQUE ("date", "group"), CONSTRAINT "PK_8af24e2d51ff781a354fe595eda" PRIMARY KEY ("id"))`);
await queryRunner.query(`CREATE UNIQUE INDEX "IDX_d54b653660d808b118e36c184c" ON "__chart_day__per_user_reaction" ("date", "group") `);
await queryRunner.query(`CREATE TABLE "__chart_day__hashtag" ("id" SERIAL NOT NULL, "date" integer NOT NULL, "group" character varying(128) NOT NULL, "___local_users" character varying array NOT NULL, "___remote_users" character varying array NOT NULL, CONSTRAINT "UQ_8f589cf056ff51f09d6096f6450" UNIQUE ("date", "group"), CONSTRAINT "PK_13d5a3b089344e5557f8e0980b4" PRIMARY KEY ("id"))`);
await queryRunner.query(`CREATE UNIQUE INDEX "IDX_8f589cf056ff51f09d6096f645" ON "__chart_day__hashtag" ("date", "group") `);
await queryRunner.query(`CREATE TABLE "__chart_day__per_user_following" ("id" SERIAL NOT NULL, "date" integer NOT NULL, "group" character varying(128) NOT NULL, "___local_followings_total" bigint NOT NULL, "___local_followings_inc" bigint NOT NULL, "___local_followings_dec" bigint NOT NULL, "___local_followers_total" bigint NOT NULL, "___local_followers_inc" bigint NOT NULL, "___local_followers_dec" bigint NOT NULL, "___remote_followings_total" bigint NOT NULL, "___remote_followings_inc" bigint NOT NULL, "___remote_followings_dec" bigint NOT NULL, "___remote_followers_total" bigint NOT NULL, "___remote_followers_inc" bigint NOT NULL, "___remote_followers_dec" bigint NOT NULL, CONSTRAINT "UQ_e4849a3231f38281280ea4c0eee" UNIQUE ("date", "group"), CONSTRAINT "PK_68ce6b67da57166da66fc8fb27e" PRIMARY KEY ("id"))`);
await queryRunner.query(`CREATE UNIQUE INDEX "IDX_e4849a3231f38281280ea4c0ee" ON "__chart_day__per_user_following" ("date", "group") `);
await queryRunner.query(`CREATE TABLE "__chart_day__per_user_drive" ("id" SERIAL NOT NULL, "date" integer NOT NULL, "group" character varying(128) NOT NULL, "___totalCount" bigint NOT NULL, "___totalSize" bigint NOT NULL, "___incCount" bigint NOT NULL, "___incSize" bigint NOT NULL, "___decCount" bigint NOT NULL, "___decSize" bigint NOT NULL, CONSTRAINT "UQ_62aa5047b5aec92524f24c701d7" UNIQUE ("date", "group"), CONSTRAINT "PK_1ae135254c137011645da7f4045" PRIMARY KEY ("id"))`);
await queryRunner.query(`CREATE UNIQUE INDEX "IDX_62aa5047b5aec92524f24c701d" ON "__chart_day__per_user_drive" ("date", "group") `);
await queryRunner.query(`ALTER TABLE "__chart__federation" DROP COLUMN "group"`);
await queryRunner.query(`ALTER TABLE "__chart__notes" DROP COLUMN "group"`);
await queryRunner.query(`ALTER TABLE "__chart__users" DROP COLUMN "group"`);
await queryRunner.query(`ALTER TABLE "__chart__network" DROP COLUMN "group"`);
await queryRunner.query(`ALTER TABLE "__chart__active_users" DROP COLUMN "group"`);
await queryRunner.query(`ALTER TABLE "__chart__drive" DROP COLUMN "group"`);
await queryRunner.query(`ALTER TABLE "__chart__federation" ADD CONSTRAINT "UQ_36cb699c49580d4e6c2e6159f97" UNIQUE ("date")`);
await queryRunner.query(`ALTER TABLE "__chart__notes" ADD CONSTRAINT "UQ_42eb716a37d381cdf566192b2be" UNIQUE ("date")`);
await queryRunner.query(`ALTER TABLE "__chart__users" ADD CONSTRAINT "UQ_845254b3eaf708ae8a6cac30265" UNIQUE ("date")`);
await queryRunner.query(`ALTER TABLE "__chart__network" ADD CONSTRAINT "UQ_a1efd3e0048a5f2793a47360dc6" UNIQUE ("date")`);
await queryRunner.query(`ALTER TABLE "__chart__active_users" ADD CONSTRAINT "UQ_0ad37b7ef50f4ddc84363d7ccca" UNIQUE ("date")`);
await queryRunner.query(`ALTER TABLE "__chart__active_users" ALTER COLUMN "___local_users" DROP DEFAULT`);
await queryRunner.query(`ALTER TABLE "__chart__active_users" ALTER COLUMN "___remote_users" DROP DEFAULT`);
await queryRunner.query(`DROP INDEX "public"."IDX_39ee857ab2f23493037c6b6631"`);
await queryRunner.query(`ALTER TABLE "__chart__instance" ALTER COLUMN "group" SET NOT NULL`);
await queryRunner.query(`DROP INDEX "public"."IDX_5048e9daccbbbc6d567bb142d3"`);
await queryRunner.query(`ALTER TABLE "__chart__per_user_notes" ALTER COLUMN "group" SET NOT NULL`);
await queryRunner.query(`ALTER TABLE "__chart__drive" ADD CONSTRAINT "UQ_13565815f618a1ff53886c5b28a" UNIQUE ("date")`);
await queryRunner.query(`DROP INDEX "public"."IDX_229a41ad465f9205f1f5703291"`);
await queryRunner.query(`ALTER TABLE "__chart__per_user_reaction" ALTER COLUMN "group" SET NOT NULL`);
await queryRunner.query(`DROP INDEX "public"."IDX_25a97c02003338124b2b75fdbc"`);
await queryRunner.query(`ALTER TABLE "__chart__hashtag" ALTER COLUMN "group" SET NOT NULL`);
await queryRunner.query(`ALTER TABLE "__chart__hashtag" ALTER COLUMN "___local_users" DROP DEFAULT`);
await queryRunner.query(`ALTER TABLE "__chart__hashtag" ALTER COLUMN "___remote_users" DROP DEFAULT`);
await queryRunner.query(`DROP INDEX "public"."IDX_b77d4dd9562c3a899d9a286fcd"`);
await queryRunner.query(`ALTER TABLE "__chart__per_user_following" ALTER COLUMN "group" SET NOT NULL`);
await queryRunner.query(`DROP INDEX "public"."IDX_30bf67687f483ace115c5ca642"`);
await queryRunner.query(`ALTER TABLE "__chart__per_user_drive" ALTER COLUMN "group" SET NOT NULL`);
await queryRunner.query(`CREATE UNIQUE INDEX "IDX_36cb699c49580d4e6c2e6159f9" ON "__chart__federation" ("date") `);
await queryRunner.query(`CREATE UNIQUE INDEX "IDX_42eb716a37d381cdf566192b2b" ON "__chart__notes" ("date") `);
await queryRunner.query(`CREATE UNIQUE INDEX "IDX_845254b3eaf708ae8a6cac3026" ON "__chart__users" ("date") `);
await queryRunner.query(`CREATE UNIQUE INDEX "IDX_a1efd3e0048a5f2793a47360dc" ON "__chart__network" ("date") `);
await queryRunner.query(`CREATE UNIQUE INDEX "IDX_0ad37b7ef50f4ddc84363d7ccc" ON "__chart__active_users" ("date") `);
await queryRunner.query(`CREATE UNIQUE INDEX "IDX_39ee857ab2f23493037c6b6631" ON "__chart__instance" ("date", "group") `);
await queryRunner.query(`CREATE UNIQUE INDEX "IDX_5048e9daccbbbc6d567bb142d3" ON "__chart__per_user_notes" ("date", "group") `);
await queryRunner.query(`CREATE UNIQUE INDEX "IDX_13565815f618a1ff53886c5b28" ON "__chart__drive" ("date") `);
await queryRunner.query(`CREATE UNIQUE INDEX "IDX_229a41ad465f9205f1f5703291" ON "__chart__per_user_reaction" ("date", "group") `);
await queryRunner.query(`CREATE UNIQUE INDEX "IDX_25a97c02003338124b2b75fdbc" ON "__chart__hashtag" ("date", "group") `);
await queryRunner.query(`CREATE UNIQUE INDEX "IDX_b77d4dd9562c3a899d9a286fcd" ON "__chart__per_user_following" ("date", "group") `);
await queryRunner.query(`CREATE UNIQUE INDEX "IDX_30bf67687f483ace115c5ca642" ON "__chart__per_user_drive" ("date", "group") `);
await queryRunner.query(`ALTER TABLE "__chart__instance" ADD CONSTRAINT "UQ_39ee857ab2f23493037c6b66311" UNIQUE ("date", "group")`);
await queryRunner.query(`ALTER TABLE "__chart__per_user_notes" ADD CONSTRAINT "UQ_5048e9daccbbbc6d567bb142d34" UNIQUE ("date", "group")`);
await queryRunner.query(`ALTER TABLE "__chart__per_user_reaction" ADD CONSTRAINT "UQ_229a41ad465f9205f1f57032910" UNIQUE ("date", "group")`);
await queryRunner.query(`ALTER TABLE "__chart__hashtag" ADD CONSTRAINT "UQ_25a97c02003338124b2b75fdbc8" UNIQUE ("date", "group")`);
await queryRunner.query(`ALTER TABLE "__chart__per_user_following" ADD CONSTRAINT "UQ_b77d4dd9562c3a899d9a286fcd7" UNIQUE ("date", "group")`);
await queryRunner.query(`ALTER TABLE "__chart__per_user_drive" ADD CONSTRAINT "UQ_30bf67687f483ace115c5ca6429" UNIQUE ("date", "group")`);
}
async down(queryRunner) {
await queryRunner.query(`ALTER TABLE "__chart__per_user_drive" DROP CONSTRAINT "UQ_30bf67687f483ace115c5ca6429"`);
await queryRunner.query(`ALTER TABLE "__chart__per_user_following" DROP CONSTRAINT "UQ_b77d4dd9562c3a899d9a286fcd7"`);
await queryRunner.query(`ALTER TABLE "__chart__hashtag" DROP CONSTRAINT "UQ_25a97c02003338124b2b75fdbc8"`);
await queryRunner.query(`ALTER TABLE "__chart__per_user_reaction" DROP CONSTRAINT "UQ_229a41ad465f9205f1f57032910"`);
await queryRunner.query(`ALTER TABLE "__chart__per_user_notes" DROP CONSTRAINT "UQ_5048e9daccbbbc6d567bb142d34"`);
await queryRunner.query(`ALTER TABLE "__chart__instance" DROP CONSTRAINT "UQ_39ee857ab2f23493037c6b66311"`);
await queryRunner.query(`DROP INDEX "public"."IDX_30bf67687f483ace115c5ca642"`);
await queryRunner.query(`DROP INDEX "public"."IDX_b77d4dd9562c3a899d9a286fcd"`);
await queryRunner.query(`DROP INDEX "public"."IDX_25a97c02003338124b2b75fdbc"`);
await queryRunner.query(`DROP INDEX "public"."IDX_229a41ad465f9205f1f5703291"`);
await queryRunner.query(`DROP INDEX "public"."IDX_13565815f618a1ff53886c5b28"`);
await queryRunner.query(`DROP INDEX "public"."IDX_5048e9daccbbbc6d567bb142d3"`);
await queryRunner.query(`DROP INDEX "public"."IDX_39ee857ab2f23493037c6b6631"`);
await queryRunner.query(`DROP INDEX "public"."IDX_0ad37b7ef50f4ddc84363d7ccc"`);
await queryRunner.query(`DROP INDEX "public"."IDX_a1efd3e0048a5f2793a47360dc"`);
await queryRunner.query(`DROP INDEX "public"."IDX_845254b3eaf708ae8a6cac3026"`);
await queryRunner.query(`DROP INDEX "public"."IDX_42eb716a37d381cdf566192b2b"`);
await queryRunner.query(`DROP INDEX "public"."IDX_36cb699c49580d4e6c2e6159f9"`);
await queryRunner.query(`ALTER TABLE "__chart__per_user_drive" ALTER COLUMN "group" DROP NOT NULL`);
await queryRunner.query(`CREATE UNIQUE INDEX "IDX_30bf67687f483ace115c5ca642" ON "__chart__per_user_drive" ("date", "group") `);
await queryRunner.query(`ALTER TABLE "__chart__per_user_following" ALTER COLUMN "group" DROP NOT NULL`);
await queryRunner.query(`CREATE UNIQUE INDEX "IDX_b77d4dd9562c3a899d9a286fcd" ON "__chart__per_user_following" ("date", "group") `);
await queryRunner.query(`ALTER TABLE "__chart__hashtag" ALTER COLUMN "___remote_users" SET DEFAULT '{}'`);
await queryRunner.query(`ALTER TABLE "__chart__hashtag" ALTER COLUMN "___local_users" SET DEFAULT '{}'`);
await queryRunner.query(`ALTER TABLE "__chart__hashtag" ALTER COLUMN "group" DROP NOT NULL`);
await queryRunner.query(`CREATE UNIQUE INDEX "IDX_25a97c02003338124b2b75fdbc" ON "__chart__hashtag" ("date", "group") `);
await queryRunner.query(`ALTER TABLE "__chart__per_user_reaction" ALTER COLUMN "group" DROP NOT NULL`);
await queryRunner.query(`CREATE UNIQUE INDEX "IDX_229a41ad465f9205f1f5703291" ON "__chart__per_user_reaction" ("date", "group") `);
await queryRunner.query(`ALTER TABLE "__chart__drive" DROP CONSTRAINT "UQ_13565815f618a1ff53886c5b28a"`);
await queryRunner.query(`ALTER TABLE "__chart__per_user_notes" ALTER COLUMN "group" DROP NOT NULL`);
await queryRunner.query(`CREATE UNIQUE INDEX "IDX_5048e9daccbbbc6d567bb142d3" ON "__chart__per_user_notes" ("date", "group") `);
await queryRunner.query(`ALTER TABLE "__chart__instance" ALTER COLUMN "group" DROP NOT NULL`);
await queryRunner.query(`CREATE UNIQUE INDEX "IDX_39ee857ab2f23493037c6b6631" ON "__chart__instance" ("date", "group") `);
await queryRunner.query(`ALTER TABLE "__chart__active_users" ALTER COLUMN "___remote_users" SET DEFAULT '{}'`);
await queryRunner.query(`ALTER TABLE "__chart__active_users" ALTER COLUMN "___local_users" SET DEFAULT '{}'`);
await queryRunner.query(`ALTER TABLE "__chart__active_users" DROP CONSTRAINT "UQ_0ad37b7ef50f4ddc84363d7ccca"`);
await queryRunner.query(`ALTER TABLE "__chart__network" DROP CONSTRAINT "UQ_a1efd3e0048a5f2793a47360dc6"`);
await queryRunner.query(`ALTER TABLE "__chart__users" DROP CONSTRAINT "UQ_845254b3eaf708ae8a6cac30265"`);
await queryRunner.query(`ALTER TABLE "__chart__notes" DROP CONSTRAINT "UQ_42eb716a37d381cdf566192b2be"`);
await queryRunner.query(`ALTER TABLE "__chart__federation" DROP CONSTRAINT "UQ_36cb699c49580d4e6c2e6159f97"`);
await queryRunner.query(`ALTER TABLE "__chart__drive" ADD "group" character varying(128)`);
await queryRunner.query(`ALTER TABLE "__chart__active_users" ADD "group" character varying(128)`);
await queryRunner.query(`ALTER TABLE "__chart__network" ADD "group" character varying(128)`);
await queryRunner.query(`ALTER TABLE "__chart__users" ADD "group" character varying(128)`);
await queryRunner.query(`ALTER TABLE "__chart__notes" ADD "group" character varying(128)`);
await queryRunner.query(`ALTER TABLE "__chart__federation" ADD "group" character varying(128)`);
await queryRunner.query(`DROP INDEX "public"."IDX_62aa5047b5aec92524f24c701d"`);
await queryRunner.query(`DROP TABLE "__chart_day__per_user_drive"`);
await queryRunner.query(`DROP INDEX "public"."IDX_e4849a3231f38281280ea4c0ee"`);
await queryRunner.query(`DROP TABLE "__chart_day__per_user_following"`);
await queryRunner.query(`DROP INDEX "public"."IDX_8f589cf056ff51f09d6096f645"`);
await queryRunner.query(`DROP TABLE "__chart_day__hashtag"`);
await queryRunner.query(`DROP INDEX "public"."IDX_d54b653660d808b118e36c184c"`);
await queryRunner.query(`DROP TABLE "__chart_day__per_user_reaction"`);
await queryRunner.query(`DROP INDEX "public"."IDX_0b60ebb3aa0065f10b0616c117"`);
await queryRunner.query(`DROP TABLE "__chart_day__drive"`);
await queryRunner.query(`DROP INDEX "public"."IDX_c5545d4b31cdc684034e33b81c"`);
await queryRunner.query(`DROP TABLE "__chart_day__per_user_notes"`);
await queryRunner.query(`DROP INDEX "public"."IDX_fea7c0278325a1a2492f2d6acb"`);
await queryRunner.query(`DROP TABLE "__chart_day__instance"`);
await queryRunner.query(`DROP INDEX "public"."IDX_d5954f3df5e5e3bdfc3c03f390"`);
await queryRunner.query(`DROP TABLE "__chart_day__active_users"`);
await queryRunner.query(`DROP INDEX "public"."IDX_8bfa548c2b31f9e07db113773e"`);
await queryRunner.query(`DROP TABLE "__chart_day__network"`);
await queryRunner.query(`DROP INDEX "public"."IDX_cad6e07c20037f31cdba8a350c"`);
await queryRunner.query(`DROP TABLE "__chart_day__users"`);
await queryRunner.query(`DROP INDEX "public"."IDX_1a527b423ad0858a1af5a056d4"`);
await queryRunner.query(`DROP TABLE "__chart_day__notes"`);
await queryRunner.query(`DROP INDEX "public"."IDX_617a8fe225a6e701d89e02d2c7"`);
await queryRunner.query(`DROP TABLE "__chart_day__federation"`);
await queryRunner.query(`CREATE UNIQUE INDEX "IDX_a9a806d466b314f253a1a611c4" ON "__chart__per_user_drive" ("date") WHERE ("group" IS NULL)`);
await queryRunner.query(`CREATE UNIQUE INDEX "IDX_dabbb38a51ab86ee3cab291326" ON "__chart__per_user_following" ("date") WHERE ("group" IS NULL)`);
await queryRunner.query(`CREATE UNIQUE INDEX "IDX_53a3604b939e2b479eb2cfaac8" ON "__chart__hashtag" ("date") WHERE ("group" IS NULL)`);
await queryRunner.query(`CREATE UNIQUE INDEX "IDX_3b7697a96f522d0478972e6d6f" ON "__chart__per_user_reaction" ("date") WHERE ("group" IS NULL)`);
await queryRunner.query(`CREATE UNIQUE INDEX "IDX_ceab80a6729f8e2e6f5b8a1a3d" ON "__chart__drive" ("date") WHERE ("group" IS NULL)`);
await queryRunner.query(`CREATE UNIQUE INDEX "IDX_3313d7288855ec105b5bbf6c21" ON "__chart__drive" ("date", "group") `);
await queryRunner.query(`CREATE UNIQUE INDEX "IDX_583a157ed0cf0ed1b5ec2a833f" ON "__chart__per_user_notes" ("date") WHERE ("group" IS NULL)`);
await queryRunner.query(`CREATE UNIQUE INDEX "IDX_8111b817b9818c04d7eb8475b1" ON "__chart__instance" ("date") WHERE ("group" IS NULL)`);
await queryRunner.query(`CREATE UNIQUE INDEX "IDX_60c5c6e7e538c09aa274ecd1cf" ON "__chart__active_users" ("date") WHERE ("group" IS NULL)`);
await queryRunner.query(`CREATE UNIQUE INDEX "IDX_9a3ed15a30ab7e3a37702e6e08" ON "__chart__active_users" ("date", "group") `);
await queryRunner.query(`CREATE UNIQUE INDEX "IDX_2082327b2699ce924fa654afc5" ON "__chart__network" ("date") WHERE ("group" IS NULL)`);
await queryRunner.query(`CREATE UNIQUE INDEX "IDX_0a905b992fecd2b5c3fb98759e" ON "__chart__network" ("date", "group") `);
await queryRunner.query(`CREATE UNIQUE INDEX "IDX_66feba81e1795d176d06c0b1e6" ON "__chart__users" ("date") WHERE ("group" IS NULL)`);
await queryRunner.query(`CREATE UNIQUE INDEX "IDX_337e9599f278bd7537fe30876f" ON "__chart__users" ("date", "group") `);
await queryRunner.query(`CREATE UNIQUE INDEX "IDX_e60c358aaced5aab8900a4af31" ON "__chart__notes" ("date") WHERE ("group" IS NULL)`);
await queryRunner.query(`CREATE UNIQUE INDEX "IDX_f09d543e3acb16c5976bdb31fa" ON "__chart__notes" ("date", "group") `);
await queryRunner.query(`CREATE UNIQUE INDEX "IDX_eddfed8fb40305a04c6f941050" ON "__chart__federation" ("date") WHERE ("group" IS NULL)`);
await queryRunner.query(`CREATE UNIQUE INDEX "IDX_dd907becf76104e4b656659e6b" ON "__chart__federation" ("date", "group") `);
}
}

View File

@ -4,7 +4,7 @@
"scripts": {
"init": "npm run migrate",
"build": "tsc -p tsconfig.json || echo done. && tsc-alias -p tsconfig.json",
"watch": "tsc -w -p tsconfig.json && tsc-alias -w -p tsconfig.json",
"watch": "node watch.mjs",
"lint": "eslint --quiet src/**/*.ts",
"mocha": "cross-env TS_NODE_FILES=true TS_NODE_TRANSPILE_ONLY=true TS_NODE_PROJECT=\"./test/tsconfig.json\" mocha",
"test": "npm run mocha"
@ -46,10 +46,8 @@
"@types/node": "16.11.7",
"@types/node-fetch": "2.5.12",
"@types/nodemailer": "6.4.4",
"@types/nprogress": "0.2.0",
"@types/oauth": "0.9.1",
"@types/parse5": "6.0.2",
"@types/parsimmon": "1.10.6",
"@types/parse5": "6.0.3",
"@types/portscanner": "2.1.1",
"@types/pug": "2.0.5",
"@types/punycode": "2.1.0",
@ -76,6 +74,7 @@
"@typescript-eslint/eslint-plugin": "5.3.1",
"@typescript-eslint/parser": "5.1.0",
"abort-controller": "3.0.0",
"archiver": "5.3.0",
"autobind-decorator": "2.4.0",
"autosize": "4.0.4",
"autwh": "0.1.0",
@ -93,7 +92,6 @@
"chartjs-plugin-zoom": "1.1.1",
"cli-highlight": "2.1.11",
"compare-versions": "3.6.0",
"concurrently": "6.3.0",
"content-disposition": "0.5.3",
"crc-32": "1.2.0",
"css-loader": "6.5.1",
@ -134,6 +132,7 @@
"koa-views": "7.0.2",
"langmap": "0.0.16",
"mfm-js": "0.20.0",
"mime-types": "2.1.34",
"misskey-js": "0.0.8",
"mocha": "8.4.0",
"ms": "3.0.0-canary.1",
@ -171,7 +170,7 @@
"strict-event-emitter-types": "2.0.0",
"stringz": "2.1.0",
"style-loader": "3.3.1",
"summaly": "2.4.1",
"summaly": "2.5.0",
"syslog-pro": "1.0.0",
"systeminformation": "5.9.9",
"throttle-debounce": "3.0.1",
@ -179,7 +178,7 @@
"tmp": "0.2.1",
"ts-loader": "9.2.6",
"ts-node": "10.4.0",
"tsc-alias": "1.3.10",
"tsc-alias": "1.4.1",
"tsconfig-paths": "3.11.0",
"twemoji-parser": "13.1.0",
"typeorm": "0.2.39",
@ -194,6 +193,7 @@
"devDependencies": {
"@redocly/openapi-core": "1.0.0-beta.54",
"@types/fluent-ffmpeg": "2.1.17",
"cross-env": "7.0.3"
"cross-env": "7.0.3",
"execa": "6.0.0"
}
}

View File

@ -1,2 +1,47 @@
export const USER_ONLINE_THRESHOLD = 1000 * 60 * 10; // 10min
export const USER_ACTIVE_THRESHOLD = 1000 * 60 * 60 * 24 * 3; // 3days
// ブラウザで直接表示することを許可するファイルの種類のリスト
// ここに含まれないものは application/octet-stream としてレスポンスされる
// SVGはXSSを生むので許可しない
export const FILE_TYPE_BROWSERSAFE = [
// Images
'image/png',
'image/gif',
'image/jpeg',
'image/webp',
'image/apng',
'image/bmp',
'image/tiff',
'image/x-icon',
// OggS
'audio/opus',
'video/ogg',
'audio/ogg',
'application/ogg',
// ISO/IEC base media file format
'video/quicktime',
'video/mp4',
'audio/mp4',
'video/x-m4v',
'audio/x-m4a',
'video/3gpp',
'video/3gpp2',
'video/mpeg',
'audio/mpeg',
'video/webm',
'audio/webm',
'audio/aac',
'audio/x-flac',
'audio/vnd.wave',
];
/*
https://github.com/sindresorhus/file-type/blob/main/supported.js
https://github.com/sindresorhus/file-type/blob/main/core.js
https://developer.mozilla.org/en-US/docs/Web/Media/Formats/Containers
*/

View File

@ -10,7 +10,7 @@ import { LessThan } from 'typeorm';
export default function() {
async function tick() {
await AttestationChallenges.delete({
createdAt: LessThan(new Date(new Date().getTime() - 5 * 60 * 1000))
createdAt: LessThan(new Date(new Date().getTime() - 5 * 60 * 1000)),
});
}

View File

@ -35,13 +35,13 @@ export default function() {
activeSincePrevTick: activeDeliverJobs,
active: deliverJobCounts.active,
waiting: deliverJobCounts.waiting,
delayed: deliverJobCounts.delayed
delayed: deliverJobCounts.delayed,
},
inbox: {
activeSincePrevTick: activeInboxJobs,
active: inboxJobCounts.active,
waiting: inboxJobCounts.waiting,
delayed: inboxJobCounts.delayed
delayed: inboxJobCounts.delayed,
},
};

View File

@ -38,7 +38,7 @@ export default function() {
fs: {
r: round(Math.max(0, fsStats.rIO_sec)),
w: round(Math.max(0, fsStats.wIO_sec)),
}
},
};
ev.emit('serverStats', stats);
log.unshift(stats);

View File

@ -6,10 +6,10 @@ const index = {
analysis: {
analyzer: {
ngram: {
tokenizer: 'ngram'
}
}
}
tokenizer: 'ngram',
},
},
},
},
mappings: {
properties: {
@ -25,9 +25,9 @@ const index = {
userHost: {
type: 'keyword',
index: true,
}
}
}
},
},
},
};
// Init ElasticSearch connection
@ -35,9 +35,9 @@ const client = config.elasticsearch ? new elasticsearch.Client({
node: `${config.elasticsearch.ssl ? 'https://' : 'http://'}${config.elasticsearch.host}:${config.elasticsearch.port}`,
auth: (config.elasticsearch.user && config.elasticsearch.pass) ? {
username: config.elasticsearch.user,
password: config.elasticsearch.pass
password: config.elasticsearch.pass,
} : undefined,
pingTimeout: 30000
pingTimeout: 30000,
}) : null;
if (client) {
@ -47,7 +47,7 @@ if (client) {
if (!exist.body) {
client.indices.create({
index: config.elasticsearch.index || 'misskey_note',
body: index
body: index,
});
}
});

View File

@ -3,10 +3,10 @@ const types = require('pg').types;
types.setTypeParser(20, Number);
import { createConnection, Logger, getConnection } from 'typeorm';
import config from '@/config/index';
import { entities as charts } from '@/services/chart/entities';
import { dbLogger } from './logger';
import * as highlight from 'cli-highlight';
import config from '@/config/index';
import { dbLogger } from './logger';
import { User } from '@/models/entities/user';
import { DriveFile } from '@/models/entities/drive-file';
@ -74,6 +74,8 @@ import { Ad } from '@/models/entities/ad';
import { PasswordResetRequest } from '@/models/entities/password-reset-request';
import { UserPending } from '@/models/entities/user-pending';
import { entities as charts } from '@/services/chart/entities';
const sqlLogger = dbLogger.createSubLogger('sql', 'white', false);
class MyCustomLogger implements Logger {
@ -175,7 +177,7 @@ export const entities = [
Ad,
PasswordResetRequest,
UserPending,
...charts as any
...charts,
];
export function initDb(justBorrow = false, sync = false, forceRecreate = false) {
@ -205,12 +207,12 @@ export function initDb(justBorrow = false, sync = false, forceRecreate = false)
port: config.redis.port,
password: config.redis.pass,
prefix: `${config.redis.prefix}:query:`,
db: config.redis.db || 0
}
db: config.redis.db || 0,
},
} : false,
logging: log,
logger: log ? new MyCustomLogger() : undefined,
entities: entities
entities: entities,
});
}

View File

@ -8,7 +8,7 @@ export function createConnection() {
{
password: config.redis.pass,
prefix: config.redis.prefix,
db: config.redis.db || 0
db: config.redis.db || 0,
}
);
}

View File

@ -82,8 +82,7 @@ export default class Reversi {
//#endregion
// ゲームが始まった時点で片方の色の石しかないか、始まった時点で勝敗が決定するようなマップの場合がある
if (!this.canPutSomewhere(BLACK))
this.turn = this.canPutSomewhere(WHITE) ? WHITE : null;
if (!this.canPutSomewhere(BLACK)) this.turn = this.canPutSomewhere(WHITE) ? WHITE : null;
}
/**
@ -135,7 +134,7 @@ export default class Reversi {
color,
pos,
effects,
turn
turn,
});
this.calcTurn();
@ -212,7 +211,7 @@ export default class Reversi {
[ 0, +1], // 下
[ -1, +1], // 左下
[ -1, 0], // 左
[ -1, -1] // 左上
[ -1, -1], // 左上
];
const effectsInLine = ([dx, dy]: [number, number]): number[] => {
@ -226,11 +225,12 @@ export default class Reversi {
// 座標が指し示す位置がボード外に出たとき
if (this.opts.loopedBoard && this.transformXyToPos(
(x = ((x % this.mapWidth) + this.mapWidth) % this.mapWidth),
(y = ((y % this.mapHeight) + this.mapHeight) % this.mapHeight)) === initPos)
(y = ((y % this.mapHeight) + this.mapHeight) % this.mapHeight)) === initPos) {
// 盤面の境界でループし、自分が石を置く位置に戻ってきたとき、挟めるようにしている (ref: Test4のマップ)
return found;
else if (x === -1 || y === -1 || x === this.mapWidth || y === this.mapHeight)
} else if (x === -1 || y === -1 || x === this.mapWidth || y === this.mapHeight) {
return []; // 挟めないことが確定 (盤面外に到達)
}
const pos = this.transformXyToPos(x, y);
if (this.mapDataGet(pos) === 'null') return []; // 挟めないことが確定 (配置不可能なマスに到達)

View File

@ -22,8 +22,8 @@ export const fourfour: Map = {
'----',
'-wb-',
'-bw-',
'----'
]
'----',
],
};
export const sixsix: Map = {
@ -35,8 +35,8 @@ export const sixsix: Map = {
'--wb--',
'--bw--',
'------',
'------'
]
'------',
],
};
export const roundedSixsix: Map = {
@ -49,8 +49,8 @@ export const roundedSixsix: Map = {
'--wb--',
'--bw--',
'------',
' ---- '
]
' ---- ',
],
};
export const roundedSixsix2: Map = {
@ -63,8 +63,8 @@ export const roundedSixsix2: Map = {
'--wb--',
'--bw--',
' ---- ',
' -- '
]
' -- ',
],
};
export const eighteight: Map = {
@ -78,8 +78,8 @@ export const eighteight: Map = {
'---bw---',
'--------',
'--------',
'--------'
]
'--------',
],
};
export const eighteightH1: Map = {
@ -93,8 +93,8 @@ export const eighteightH1: Map = {
'---bw---',
'--------',
'--------',
'--------'
]
'--------',
],
};
export const eighteightH2: Map = {
@ -108,8 +108,8 @@ export const eighteightH2: Map = {
'---bw---',
'--------',
'--------',
'-------b'
]
'-------b',
],
};
export const eighteightH3: Map = {
@ -123,8 +123,8 @@ export const eighteightH3: Map = {
'---bw---',
'--------',
'--------',
'-------b'
]
'-------b',
],
};
export const eighteightH4: Map = {
@ -138,8 +138,8 @@ export const eighteightH4: Map = {
'---bw---',
'--------',
'--------',
'b------b'
]
'b------b',
],
};
export const eighteightH28: Map = {
@ -153,8 +153,8 @@ export const eighteightH28: Map = {
'b--bw--b',
'b------b',
'b------b',
'bbbbbbbb'
]
'bbbbbbbb',
],
};
export const roundedEighteight: Map = {
@ -169,8 +169,8 @@ export const roundedEighteight: Map = {
'---bw---',
'--------',
'--------',
' ------ '
]
' ------ ',
],
};
export const roundedEighteight2: Map = {
@ -185,8 +185,8 @@ export const roundedEighteight2: Map = {
'---bw---',
'--------',
' ------ ',
' ---- '
]
' ---- ',
],
};
export const roundedEighteight3: Map = {
@ -201,8 +201,8 @@ export const roundedEighteight3: Map = {
'---bw---',
' ------ ',
' ---- ',
' -- '
]
' -- ',
],
};
export const eighteightWithNotch: Map = {
@ -217,8 +217,8 @@ export const eighteightWithNotch: Map = {
' --bw-- ',
'--------',
'--------',
'--- ---'
]
'--- ---',
],
};
export const eighteightWithSomeHoles: Map = {
@ -233,8 +233,8 @@ export const eighteightWithSomeHoles: Map = {
'---bw- -',
' -------',
'--- ----',
'--------'
]
'--------',
],
};
export const circle: Map = {
@ -249,8 +249,8 @@ export const circle: Map = {
'---bw---',
' ------ ',
' ------ ',
' -- '
]
' -- ',
],
};
export const smile: Map = {
@ -265,8 +265,8 @@ export const smile: Map = {
'-- bw --',
'--- ---',
'--------',
' ------ '
]
' ------ ',
],
};
export const window: Map = {
@ -281,8 +281,8 @@ export const window: Map = {
'---bw---',
'- -- -',
'- -- -',
'--------'
]
'--------',
],
};
export const reserved: Map = {
@ -297,8 +297,8 @@ export const reserved: Map = {
'---bw---',
'--------',
'--------',
'b------w'
]
'b------w',
],
};
export const x: Map = {
@ -313,8 +313,8 @@ export const x: Map = {
'---bw---',
'--b--w--',
'-b----w-',
'b------w'
]
'b------w',
],
};
export const parallel: Map = {
@ -329,8 +329,8 @@ export const parallel: Map = {
'---ww---',
'--------',
'--------',
'--------'
]
'--------',
],
};
export const lackOfBlack: Map = {
@ -344,8 +344,8 @@ export const lackOfBlack: Map = {
'---bw---',
'--------',
'--------',
'--------'
]
'--------',
],
};
export const squareParty: Map = {
@ -360,8 +360,8 @@ export const squareParty: Map = {
'-bbbwww-',
'-b-bw-w-',
'-bbbwww-',
'--------'
]
'--------',
],
};
export const minesweeper: Map = {
@ -376,8 +376,8 @@ export const minesweeper: Map = {
'-w-bw-b-',
'b-w--b-w',
'-b-bw-w-',
'w-w--b-b'
]
'w-w--b-b',
],
};
export const tenthtenth: Map = {
@ -393,8 +393,8 @@ export const tenthtenth: Map = {
'----------',
'----------',
'----------',
'----------'
]
'----------',
],
};
export const hole: Map = {
@ -411,8 +411,8 @@ export const hole: Map = {
'--wb--wb--',
'--bw--bw--',
'----------',
'----------'
]
'----------',
],
};
export const grid: Map = {
@ -429,8 +429,8 @@ export const grid: Map = {
'- - -- - -',
'----------',
'- - -- - -',
'----------'
]
'----------',
],
};
export const cross: Map = {
@ -447,8 +447,8 @@ export const cross: Map = {
'----------',
' ---- ',
' ---- ',
' ---- '
]
' ---- ',
],
};
export const charX: Map = {
@ -465,8 +465,8 @@ export const charX: Map = {
' -------- ',
'----------',
'---- ----',
'--- ---'
]
'--- ---',
],
};
export const charY: Map = {
@ -483,8 +483,8 @@ export const charY: Map = {
' ------ ',
' ------ ',
' ------ ',
' ------ '
]
' ------ ',
],
};
export const walls: Map = {
@ -501,8 +501,8 @@ export const walls: Map = {
'w--------w',
'w--------w',
'w--------w',
' bbbbbbbb '
]
' bbbbbbbb ',
],
};
export const cpu: Map = {
@ -519,8 +519,8 @@ export const cpu: Map = {
'w--------w',
' -------- ',
'w--------w',
' b b b b '
]
' b b b b ',
],
};
export const checker: Map = {
@ -537,8 +537,8 @@ export const checker: Map = {
'---bwbw---',
'----------',
'----------',
'----------'
]
'----------',
],
};
export const japaneseCurry: Map = {
@ -555,8 +555,8 @@ export const japaneseCurry: Map = {
'w-w-w-b-b-',
'-w-w-w-b-b',
'w-w-w-w-b-',
'-w-w-w-w-b'
]
'-w-w-w-w-b',
],
};
export const mosaic: Map = {
@ -574,7 +574,7 @@ export const mosaic: Map = {
' - - - - -',
'- - - - - ',
' - - - - -',
]
],
};
export const arena: Map = {
@ -591,8 +591,8 @@ export const arena: Map = {
' -------- ',
'- ------ -',
' - - - - ',
'- - -- - -'
]
'- - -- - -',
],
};
export const reactor: Map = {
@ -609,8 +609,8 @@ export const reactor: Map = {
'---w b---',
'- --bw-- -',
'w- - - -b',
'-b------w-'
]
'-b------w-',
],
};
export const sixeight: Map = {
@ -624,8 +624,8 @@ export const sixeight: Map = {
'--bw--',
'------',
'------',
'------'
]
'------',
],
};
export const spark: Map = {
@ -642,8 +642,8 @@ export const spark: Map = {
' -------- ',
' -------- ',
'----------',
' - - '
]
' - - ',
],
};
export const islands: Map = {
@ -660,8 +660,8 @@ export const islands: Map = {
' --------',
' --------',
' --------',
' --------'
]
' --------',
],
};
export const galaxy: Map = {
@ -680,8 +680,8 @@ export const galaxy: Map = {
'---w--bbb---',
' ---w------ ',
' ---www-- ',
' ------ '
]
' ------ ',
],
};
export const triangle: Map = {
@ -698,8 +698,8 @@ export const triangle: Map = {
' -------- ',
' -------- ',
'----------',
'----------'
]
'----------',
],
};
export const iphonex: Map = {
@ -718,8 +718,8 @@ export const iphonex: Map = {
'--------',
'--------',
'--------',
' ------ '
]
' ------ ',
],
};
export const dealWithIt: Map = {
@ -731,8 +731,8 @@ export const dealWithIt: Map = {
'--w-b-------',
' --b-w------',
' --w-b---- ',
' ------- '
]
' ------- ',
],
};
export const experiment: Map = {
@ -750,8 +750,8 @@ export const experiment: Map = {
'bbbbbb wwwwww',
'bbbbbb wwwwww',
'bbbbbb wwwwww',
'wwwwww bbbbbb'
]
'wwwwww bbbbbb',
],
};
export const bigBoard: Map = {
@ -773,8 +773,8 @@ export const bigBoard: Map = {
'----------------',
'----------------',
'----------------',
'----------------'
]
'----------------',
],
};
export const twoBoard: Map = {
@ -789,8 +789,8 @@ export const twoBoard: Map = {
'---bw--- ---bw---',
'-------- --------',
'-------- --------',
'-------- --------'
]
'-------- --------',
],
};
export const test1: Map = {
@ -800,8 +800,8 @@ export const test1: Map = {
'--------',
'---wb---',
'---bw---',
'--------'
]
'--------',
],
};
export const test2: Map = {
@ -812,8 +812,8 @@ export const test2: Map = {
'------',
'-b--w-',
'-w--b-',
'-w--b-'
]
'-w--b-',
],
};
export const test3: Map = {
@ -832,7 +832,7 @@ export const test3: Map = {
'-w-',
'---',
'b--',
]
],
};
export const test4: Map = {
@ -843,8 +843,8 @@ export const test4: Map = {
'-w--b-',
'------',
'-w--b-',
'-w--b-'
]
'-w--b-',
],
};
// 検証用: この盤面で藍(lv3)が黒で始めると何故か(?)A1に打ってしまう
@ -860,7 +860,7 @@ export const test6: Map = {
'wwbwbbbb',
'--wbbbbb',
'-wwwww--',
]
],
};
// 検証用: この盤面で藍(lv3)が黒で始めると何故か(?)G7に打ってしまう
@ -876,7 +876,7 @@ export const test7: Map = {
'-wwbbwwb',
'--wwww--',
'--wwww--',
]
],
};
// 検証用: この盤面で藍(lv5)が黒で始めると何故か(?)A1に打ってしまう
@ -892,5 +892,5 @@ export const test8: Map = {
'wwwwww--',
'--www---',
'--ww----',
]
],
};

View File

@ -168,7 +168,7 @@ export function fromHtml(html: string, hashtagNames?: string[]): string | null {
case 'blockquote': {
const t = getText(node);
if (t) {
text += '> ';
text += '\n> ';
text += t.split('\n').join(`\n> `);
}
break;

View File

@ -144,7 +144,7 @@ export function toHtml(nodes: mfm.MfmNode[] | null, mentionedRemoteUsers: IMenti
a.href = `https://www.google.com/search?q=${node.props.query}`;
a.textContent = node.props.content;
return a;
}
},
};
appendChildren(nodes, doc.body);

View File

@ -10,7 +10,7 @@ export class Cache<T> {
public set(key: string | null, value: T): void {
this.cache.set(key, {
date: Date.now(),
value
value,
});
}

View File

@ -33,17 +33,17 @@ type CaptchaResponse = {
async function getCaptchaResponse(url: string, secret: string, response: string): Promise<CaptchaResponse> {
const params = new URLSearchParams({
secret,
response
response,
});
const res = await fetch(url, {
method: 'POST',
body: params,
headers: {
'User-Agent': config.userAgent
'User-Agent': config.userAgent,
},
timeout: 10 * 1000,
agent: getAgentByUrl
agent: getAgentByUrl,
}).catch(e => {
throw `${e.message || e}`;
});

View File

@ -24,7 +24,7 @@ export async function checkHitAntenna(antenna: Antenna, note: (Note | Packed<'No
if (antennaUserFollowing && !antennaUserFollowing.includes(note.userId)) return false;
} else if (antenna.src === 'list') {
const listUsers = (await UserListJoinings.find({
userListId: antenna.userListId!
userListId: antenna.userListId!,
})).map(x => x.userId);
if (!listUsers.includes(note.userId)) return false;
@ -32,7 +32,7 @@ export async function checkHitAntenna(antenna: Antenna, note: (Note | Packed<'No
const joining = await UserGroupJoinings.findOneOrFail(antenna.userGroupJoiningId!);
const groupUsers = (await UserGroupJoinings.find({
userGroupId: joining.userGroupId
userGroupId: joining.userGroupId,
})).map(x => x.userId);
if (!groupUsers.includes(note.userId)) return false;

View File

@ -11,7 +11,7 @@ const PrivateIp = require('private-ip');
const pipeline = util.promisify(stream.pipeline);
export async function downloadUrl(url: string, path: string) {
export async function downloadUrl(url: string, path: string): Promise<void> {
const logger = new Logger('download');
logger.info(`Downloading ${chalk.cyan(url)} ...`);
@ -22,7 +22,7 @@ export async function downloadUrl(url: string, path: string) {
const req = got.stream(url, {
headers: {
'User-Agent': config.userAgent
'User-Agent': config.userAgent,
},
timeout: {
lookup: timeout,

View File

@ -10,8 +10,8 @@ export async function fetchMeta(noCache = false): Promise<Meta> {
// 過去のバグでレコードが複数出来てしまっている可能性があるので新しいIDを優先する
const meta = await transactionalEntityManager.findOne(Meta, {
order: {
id: 'DESC'
}
id: 'DESC',
},
});
if (meta) {
@ -19,7 +19,7 @@ export async function fetchMeta(noCache = false): Promise<Meta> {
return meta;
} else {
const saved = await transactionalEntityManager.save(Meta, {
id: 'x'
id: 'x',
}) as Meta;
cache = saved;

View File

@ -12,9 +12,9 @@ export async function getJson(url: string, accept = 'application/json, */*', tim
method: 'GET',
headers: Object.assign({
'User-Agent': config.userAgent,
Accept: accept
Accept: accept,
}, headers || {}),
timeout
timeout,
});
return await res.json();
@ -26,9 +26,9 @@ export async function getHtml(url: string, accept = 'text/html, */*', timeout =
method: 'GET',
headers: Object.assign({
'User-Agent': config.userAgent,
Accept: accept
Accept: accept,
}, headers || {}),
timeout
timeout,
});
return await res.text();
@ -95,7 +95,7 @@ export const httpAgent = config.proxy
maxSockets,
maxFreeSockets: 256,
scheduling: 'lifo',
proxy: config.proxy
proxy: config.proxy,
})
: _http;
@ -109,7 +109,7 @@ export const httpsAgent = config.proxy
maxSockets,
maxFreeSockets: 256,
scheduling: 'lifo',
proxy: config.proxy
proxy: config.proxy,
})
: _https;

View File

@ -8,14 +8,14 @@ export async function genRsaKeyPair(modulusLength = 2048) {
modulusLength,
publicKeyEncoding: {
type: 'spki',
format: 'pem'
format: 'pem',
},
privateKeyEncoding: {
type: 'pkcs8',
format: 'pem',
cipher: undefined,
passphrase: undefined
}
passphrase: undefined,
},
});
}
@ -24,13 +24,13 @@ export async function genEcKeyPair(namedCurve: 'prime256v1' | 'secp384r1' | 'sec
namedCurve,
publicKeyEncoding: {
type: 'spki',
format: 'pem'
format: 'pem',
},
privateKeyEncoding: {
type: 'pkcs8',
format: 'pem',
cipher: undefined,
passphrase: undefined
}
passphrase: undefined,
},
});
}

View File

@ -19,18 +19,19 @@ export type FileInfo = {
};
width?: number;
height?: number;
orientation?: number;
blurhash?: string;
warnings: string[];
};
const TYPE_OCTET_STREAM = {
mime: 'application/octet-stream',
ext: null
ext: null,
};
const TYPE_SVG = {
mime: 'image/svg+xml',
ext: 'svg'
ext: 'svg',
};
/**
@ -47,6 +48,7 @@ export async function getFileInfo(path: string): Promise<FileInfo> {
// image dimensions
let width: number | undefined;
let height: number | undefined;
let orientation: number | undefined;
if (['image/jpeg', 'image/gif', 'image/png', 'image/apng', 'image/webp', 'image/bmp', 'image/tiff', 'image/svg+xml', 'image/vnd.adobe.photoshop'].includes(type.mime)) {
const imageSize = await detectImageSize(path).catch(e => {
@ -61,6 +63,7 @@ export async function getFileInfo(path: string): Promise<FileInfo> {
} else if (imageSize.wUnits === 'px') {
width = imageSize.width;
height = imageSize.height;
orientation = imageSize.orientation;
// 制限を超えている画像は octet-stream にする
if (imageSize.width > 16383 || imageSize.height > 16383) {
@ -87,6 +90,7 @@ export async function getFileInfo(path: string): Promise<FileInfo> {
type,
width,
height,
orientation,
blurhash,
warnings,
};
@ -95,7 +99,10 @@ export async function getFileInfo(path: string): Promise<FileInfo> {
/**
* Detect MIME Type and extension
*/
export async function detectType(path: string) {
export async function detectType(path: string): Promise<{
mime: string;
ext: string | null;
}> {
// Check 0 byte
const fileSize = await getFileSize(path);
if (fileSize === 0) {
@ -112,7 +119,7 @@ export async function detectType(path: string) {
return {
mime: type.mime,
ext: type.ext
ext: type.ext,
};
}
@ -163,6 +170,7 @@ async function detectImageSize(path: string): Promise<{
height: number;
wUnits: string;
hUnits: string;
orientation?: number;
}> {
const readable = fs.createReadStream(path);
const imageSize = await probeImageSize(readable);

View File

@ -0,0 +1,15 @@
import { Packed } from "./schema";
export function isInstanceMuted(note: Packed<'Note'>, mutedInstances: Set<string>): boolean {
if (mutedInstances.has(note?.user?.host ?? '')) return true;
if (mutedInstances.has(note?.reply?.user?.host ?? '')) return true;
if (mutedInstances.has(note?.renote?.user?.host ?? '')) return true;
return false;
}
export function isUserFromMutedInstance(notif: Packed<'Notification'>, mutedInstances: Set<string>): boolean {
if (mutedInstances.has(notif?.user?.host ?? '')) return true;
return false;
}

View File

@ -54,7 +54,7 @@ export async function populateEmoji(emojiName: string, noteUserHost: string | nu
const queryOrNull = async () => (await Emojis.findOne({
name,
host
host,
})) || null;
const emoji = await cache.fetch(`${name} ${host}`, queryOrNull);
@ -62,7 +62,7 @@ export async function populateEmoji(emojiName: string, noteUserHost: string | nu
if (emoji == null) return null;
const isLocal = emoji.host == null;
const url = isLocal ? emoji.url : `${config.url}/proxy/image.png?${query({url: emoji.url})}`;
const url = isLocal ? emoji.url : `${config.url}/proxy/image.png?${query({ url: emoji.url })}`;
return {
name: emojiName,
@ -111,12 +111,12 @@ export async function prefetchEmojis(emojis: { name: string; host: string | null
for (const host of hosts) {
emojisQuery.push({
name: In(notCachedEmojis.filter(e => e.host === host).map(e => e.name)),
host: host
host: host,
});
}
const _emojis = emojisQuery.length > 0 ? await Emojis.find({
where: emojisQuery,
select: ['name', 'host', 'url']
select: ['name', 'host', 'url'],
}) : [];
for (const emoji of _emojis) {
cache.set(`${emoji.name} ${emoji.host}`, emoji);

View File

@ -1,3 +1,4 @@
/* eslint-disable key-spacing */
import { emojiRegex } from './emoji-regex';
import { fetchMeta } from './fetch-meta';
import { Emojis } from '@/models/index';
@ -111,14 +112,14 @@ export function decodeReaction(str: string): DecodedReaction {
return {
reaction: `:${name}@${host || '.'}:`, // ローカル分は@以降を省略するのではなく.にする
name,
host
host,
};
}
return {
reaction: str,
name: undefined,
host: undefined
host: undefined,
};
}

View File

@ -9,7 +9,7 @@ export class AbuseUserReport {
@Index()
@Column('timestamp with time zone', {
comment: 'The created date of the AbuseUserReport.'
comment: 'The created date of the AbuseUserReport.',
})
public createdAt: Date;
@ -18,7 +18,7 @@ export class AbuseUserReport {
public targetUserId: User['id'];
@ManyToOne(type => User, {
onDelete: 'CASCADE'
onDelete: 'CASCADE',
})
@JoinColumn()
public targetUser: User | null;
@ -28,26 +28,26 @@ export class AbuseUserReport {
public reporterId: User['id'];
@ManyToOne(type => User, {
onDelete: 'CASCADE'
onDelete: 'CASCADE',
})
@JoinColumn()
public reporter: User | null;
@Column({
...id(),
nullable: true
nullable: true,
})
public assigneeId: User['id'] | null;
@ManyToOne(type => User, {
onDelete: 'SET NULL'
onDelete: 'SET NULL',
})
@JoinColumn()
public assignee: User | null;
@Index()
@Column('boolean', {
default: false
default: false,
})
public resolved: boolean;
@ -60,14 +60,14 @@ export class AbuseUserReport {
@Index()
@Column('varchar', {
length: 128, nullable: true,
comment: '[Denormalized]'
comment: '[Denormalized]',
})
public targetUserHost: string | null;
@Index()
@Column('varchar', {
length: 128, nullable: true,
comment: '[Denormalized]'
comment: '[Denormalized]',
})
public reporterHost: string | null;
//#endregion

View File

@ -9,7 +9,7 @@ export class AccessToken {
public id: string;
@Column('timestamp with time zone', {
comment: 'The created date of the AccessToken.'
comment: 'The created date of the AccessToken.',
})
public createdAt: Date;
@ -21,7 +21,7 @@ export class AccessToken {
@Index()
@Column('varchar', {
length: 128
length: 128,
})
public token: string;
@ -29,13 +29,13 @@ export class AccessToken {
@Column('varchar', {
length: 128,
nullable: true,
default: null
default: null,
})
public session: string | null;
@Index()
@Column('varchar', {
length: 128
length: 128,
})
public hash: string;
@ -44,7 +44,7 @@ export class AccessToken {
public userId: User['id'];
@ManyToOne(type => User, {
onDelete: 'CASCADE'
onDelete: 'CASCADE',
})
@JoinColumn()
public user: User | null;
@ -52,12 +52,12 @@ export class AccessToken {
@Column({
...id(),
nullable: true,
default: null
default: null,
})
public appId: App['id'] | null;
@ManyToOne(type => App, {
onDelete: 'CASCADE'
onDelete: 'CASCADE',
})
@JoinColumn()
public app: App | null;
@ -65,32 +65,32 @@ export class AccessToken {
@Column('varchar', {
length: 128,
nullable: true,
default: null
default: null,
})
public name: string | null;
@Column('varchar', {
length: 512,
nullable: true,
default: null
default: null,
})
public description: string | null;
@Column('varchar', {
length: 512,
nullable: true,
default: null
default: null,
})
public iconUrl: string | null;
@Column('varchar', {
length: 64, array: true,
default: '{}'
default: '{}',
})
public permission: string[];
@Column('boolean', {
default: false
default: false,
})
public fetched: boolean;
}

View File

@ -8,44 +8,44 @@ export class Ad {
@Index()
@Column('timestamp with time zone', {
comment: 'The created date of the Ad.'
comment: 'The created date of the Ad.',
})
public createdAt: Date;
@Index()
@Column('timestamp with time zone', {
comment: 'The expired date of the Ad.'
comment: 'The expired date of the Ad.',
})
public expiresAt: Date;
@Column('varchar', {
length: 32, nullable: false
length: 32, nullable: false,
})
public place: string;
// 今は使われていないが将来的に活用される可能性はある
@Column('varchar', {
length: 32, nullable: false
length: 32, nullable: false,
})
public priority: string;
@Column('integer', {
default: 1, nullable: false
default: 1, nullable: false,
})
public ratio: number;
@Column('varchar', {
length: 1024, nullable: false
length: 1024, nullable: false,
})
public url: string;
@Column('varchar', {
length: 1024, nullable: false
length: 1024, nullable: false,
})
public imageUrl: string;
@Column('varchar', {
length: 8192, nullable: false
length: 8192, nullable: false,
})
public memo: string;

View File

@ -10,7 +10,7 @@ export class AnnouncementRead {
public id: string;
@Column('timestamp with time zone', {
comment: 'The created date of the AnnouncementRead.'
comment: 'The created date of the AnnouncementRead.',
})
public createdAt: Date;
@ -19,7 +19,7 @@ export class AnnouncementRead {
public userId: User['id'];
@ManyToOne(type => User, {
onDelete: 'CASCADE'
onDelete: 'CASCADE',
})
@JoinColumn()
public user: User | null;
@ -29,7 +29,7 @@ export class AnnouncementRead {
public announcementId: Announcement['id'];
@ManyToOne(type => Announcement, {
onDelete: 'CASCADE'
onDelete: 'CASCADE',
})
@JoinColumn()
public announcement: Announcement | null;

View File

@ -8,28 +8,28 @@ export class Announcement {
@Index()
@Column('timestamp with time zone', {
comment: 'The created date of the Announcement.'
comment: 'The created date of the Announcement.',
})
public createdAt: Date;
@Column('timestamp with time zone', {
comment: 'The updated date of the Announcement.',
nullable: true
nullable: true,
})
public updatedAt: Date | null;
@Column('varchar', {
length: 8192, nullable: false
length: 8192, nullable: false,
})
public text: string;
@Column('varchar', {
length: 256, nullable: false
length: 256, nullable: false,
})
public title: string;
@Column('varchar', {
length: 1024, nullable: true
length: 1024, nullable: true,
})
public imageUrl: string | null;

View File

@ -12,12 +12,12 @@ export class AntennaNote {
@Index()
@Column({
...id(),
comment: 'The note ID.'
comment: 'The note ID.',
})
public noteId: Note['id'];
@ManyToOne(type => Note, {
onDelete: 'CASCADE'
onDelete: 'CASCADE',
})
@JoinColumn()
public note: Note | null;
@ -25,19 +25,19 @@ export class AntennaNote {
@Index()
@Column({
...id(),
comment: 'The antenna ID.'
comment: 'The antenna ID.',
})
public antennaId: Antenna['id'];
@ManyToOne(type => Antenna, {
onDelete: 'CASCADE'
onDelete: 'CASCADE',
})
@JoinColumn()
public antenna: Antenna | null;
@Index()
@Column('boolean', {
default: false
default: false,
})
public read: boolean;
}

View File

@ -10,26 +10,26 @@ export class Antenna {
public id: string;
@Column('timestamp with time zone', {
comment: 'The created date of the Antenna.'
comment: 'The created date of the Antenna.',
})
public createdAt: Date;
@Index()
@Column({
...id(),
comment: 'The owner ID.'
comment: 'The owner ID.',
})
public userId: User['id'];
@ManyToOne(type => User, {
onDelete: 'CASCADE'
onDelete: 'CASCADE',
})
@JoinColumn()
public user: User | null;
@Column('varchar', {
length: 128,
comment: 'The name of the Antenna.'
comment: 'The name of the Antenna.',
})
public name: string;
@ -38,51 +38,51 @@ export class Antenna {
@Column({
...id(),
nullable: true
nullable: true,
})
public userListId: UserList['id'] | null;
@ManyToOne(type => UserList, {
onDelete: 'CASCADE'
onDelete: 'CASCADE',
})
@JoinColumn()
public userList: UserList | null;
@Column({
...id(),
nullable: true
nullable: true,
})
public userGroupJoiningId: UserGroupJoining['id'] | null;
@ManyToOne(type => UserGroupJoining, {
onDelete: 'CASCADE'
onDelete: 'CASCADE',
})
@JoinColumn()
public userGroupJoining: UserGroupJoining | null;
@Column('varchar', {
length: 1024, array: true,
default: '{}'
default: '{}',
})
public users: string[];
@Column('jsonb', {
default: []
default: [],
})
public keywords: string[][];
@Column('jsonb', {
default: []
default: [],
})
public excludeKeywords: string[][];
@Column('boolean', {
default: false
default: false,
})
public caseSensitive: boolean;
@Column('boolean', {
default: false
default: false,
})
public withReplies: boolean;

View File

@ -9,7 +9,7 @@ export class App {
@Index()
@Column('timestamp with time zone', {
comment: 'The created date of the App.'
comment: 'The created date of the App.',
})
public createdAt: Date;
@ -17,7 +17,7 @@ export class App {
@Column({
...id(),
nullable: true,
comment: 'The owner ID.'
comment: 'The owner ID.',
})
public userId: User['id'] | null;
@ -30,31 +30,31 @@ export class App {
@Index()
@Column('varchar', {
length: 64,
comment: 'The secret key of the App.'
comment: 'The secret key of the App.',
})
public secret: string;
@Column('varchar', {
length: 128,
comment: 'The name of the App.'
comment: 'The name of the App.',
})
public name: string;
@Column('varchar', {
length: 512,
comment: 'The description of the App.'
comment: 'The description of the App.',
})
public description: string;
@Column('varchar', {
length: 64, array: true,
comment: 'The permission of the App.'
comment: 'The permission of the App.',
})
public permission: string[];
@Column('varchar', {
length: 512, nullable: true,
comment: 'The callbackUrl of the App.'
comment: 'The callbackUrl of the App.',
})
public callbackUrl: string | null;
}

View File

@ -12,7 +12,7 @@ export class AttestationChallenge {
public userId: User['id'];
@ManyToOne(type => User, {
onDelete: 'CASCADE'
onDelete: 'CASCADE',
})
@JoinColumn()
public user: User | null;
@ -20,19 +20,19 @@ export class AttestationChallenge {
@Index()
@Column('varchar', {
length: 64,
comment: 'Hex-encoded sha256 hash of the challenge.'
comment: 'Hex-encoded sha256 hash of the challenge.',
})
public challenge: string;
@Column('timestamp with time zone', {
comment: 'The date challenge was created for expiry purposes.'
comment: 'The date challenge was created for expiry purposes.',
})
public createdAt: Date;
@Column('boolean', {
comment:
'Indicates that the challenge is only for registration purposes if true to prevent the challenge for being used as authentication.',
default: false
default: false,
})
public registrationChallenge: boolean;

View File

@ -9,25 +9,25 @@ export class AuthSession {
public id: string;
@Column('timestamp with time zone', {
comment: 'The created date of the AuthSession.'
comment: 'The created date of the AuthSession.',
})
public createdAt: Date;
@Index()
@Column('varchar', {
length: 128
length: 128,
})
public token: string;
@Column({
...id(),
nullable: true
nullable: true,
})
public userId: User['id'];
@ManyToOne(type => User, {
onDelete: 'CASCADE',
nullable: true
nullable: true,
})
@JoinColumn()
public user: User | null;
@ -36,7 +36,7 @@ export class AuthSession {
public appId: App['id'];
@ManyToOne(type => App, {
onDelete: 'CASCADE'
onDelete: 'CASCADE',
})
@JoinColumn()
public app: App | null;

View File

@ -10,19 +10,19 @@ export class Blocking {
@Index()
@Column('timestamp with time zone', {
comment: 'The created date of the Blocking.'
comment: 'The created date of the Blocking.',
})
public createdAt: Date;
@Index()
@Column({
...id(),
comment: 'The blockee user ID.'
comment: 'The blockee user ID.',
})
public blockeeId: User['id'];
@ManyToOne(type => User, {
onDelete: 'CASCADE'
onDelete: 'CASCADE',
})
@JoinColumn()
public blockee: User | null;
@ -30,12 +30,12 @@ export class Blocking {
@Index()
@Column({
...id(),
comment: 'The blocker user ID.'
comment: 'The blocker user ID.',
})
public blockerId: User['id'];
@ManyToOne(type => User, {
onDelete: 'CASCADE'
onDelete: 'CASCADE',
})
@JoinColumn()
public blocker: User | null;

View File

@ -11,19 +11,19 @@ export class ChannelFollowing {
@Index()
@Column('timestamp with time zone', {
comment: 'The created date of the ChannelFollowing.'
comment: 'The created date of the ChannelFollowing.',
})
public createdAt: Date;
@Index()
@Column({
...id(),
comment: 'The followee channel ID.'
comment: 'The followee channel ID.',
})
public followeeId: Channel['id'];
@ManyToOne(type => Channel, {
onDelete: 'CASCADE'
onDelete: 'CASCADE',
})
@JoinColumn()
public followee: Channel | null;
@ -31,12 +31,12 @@ export class ChannelFollowing {
@Index()
@Column({
...id(),
comment: 'The follower user ID.'
comment: 'The follower user ID.',
})
public followerId: User['id'];
@ManyToOne(type => User, {
onDelete: 'CASCADE'
onDelete: 'CASCADE',
})
@JoinColumn()
public follower: User | null;

View File

@ -10,7 +10,7 @@ export class ChannelNotePining {
public id: string;
@Column('timestamp with time zone', {
comment: 'The created date of the ChannelNotePining.'
comment: 'The created date of the ChannelNotePining.',
})
public createdAt: Date;
@ -19,7 +19,7 @@ export class ChannelNotePining {
public channelId: Channel['id'];
@ManyToOne(type => Channel, {
onDelete: 'CASCADE'
onDelete: 'CASCADE',
})
@JoinColumn()
public channel: Channel | null;
@ -28,7 +28,7 @@ export class ChannelNotePining {
public noteId: Note['id'];
@ManyToOne(type => Note, {
onDelete: 'CASCADE'
onDelete: 'CASCADE',
})
@JoinColumn()
public note: Note | null;

View File

@ -10,13 +10,13 @@ export class Channel {
@Index()
@Column('timestamp with time zone', {
comment: 'The created date of the Channel.'
comment: 'The created date of the Channel.',
})
public createdAt: Date;
@Index()
@Column('timestamp with time zone', {
nullable: true
nullable: true,
})
public lastNotedAt: Date | null;
@ -24,37 +24,37 @@ export class Channel {
@Column({
...id(),
nullable: true,
comment: 'The owner ID.'
comment: 'The owner ID.',
})
public userId: User['id'] | null;
@ManyToOne(type => User, {
onDelete: 'SET NULL'
onDelete: 'SET NULL',
})
@JoinColumn()
public user: User | null;
@Column('varchar', {
length: 128,
comment: 'The name of the Channel.'
comment: 'The name of the Channel.',
})
public name: string;
@Column('varchar', {
length: 2048, nullable: true,
comment: 'The description of the Channel.'
comment: 'The description of the Channel.',
})
public description: string | null;
@Column({
...id(),
nullable: true,
comment: 'The ID of banner Channel.'
comment: 'The ID of banner Channel.',
})
public bannerId: DriveFile['id'] | null;
@ManyToOne(type => DriveFile, {
onDelete: 'SET NULL'
onDelete: 'SET NULL',
})
@JoinColumn()
public banner: DriveFile | null;
@ -62,14 +62,14 @@ export class Channel {
@Index()
@Column('integer', {
default: 0,
comment: 'The count of notes.'
comment: 'The count of notes.',
})
public notesCount: number;
@Index()
@Column('integer', {
default: 0,
comment: 'The count of users.'
comment: 'The count of users.',
})
public usersCount: number;
}

View File

@ -12,12 +12,12 @@ export class ClipNote {
@Index()
@Column({
...id(),
comment: 'The note ID.'
comment: 'The note ID.',
})
public noteId: Note['id'];
@ManyToOne(type => Note, {
onDelete: 'CASCADE'
onDelete: 'CASCADE',
})
@JoinColumn()
public note: Note | null;
@ -25,12 +25,12 @@ export class ClipNote {
@Index()
@Column({
...id(),
comment: 'The clip ID.'
comment: 'The clip ID.',
})
public clipId: Clip['id'];
@ManyToOne(type => Clip, {
onDelete: 'CASCADE'
onDelete: 'CASCADE',
})
@JoinColumn()
public clip: Clip | null;

View File

@ -8,37 +8,37 @@ export class Clip {
public id: string;
@Column('timestamp with time zone', {
comment: 'The created date of the Clip.'
comment: 'The created date of the Clip.',
})
public createdAt: Date;
@Index()
@Column({
...id(),
comment: 'The owner ID.'
comment: 'The owner ID.',
})
public userId: User['id'];
@ManyToOne(type => User, {
onDelete: 'CASCADE'
onDelete: 'CASCADE',
})
@JoinColumn()
public user: User | null;
@Column('varchar', {
length: 128,
comment: 'The name of the Clip.'
comment: 'The name of the Clip.',
})
public name: string;
@Column('boolean', {
default: false
default: false,
})
public isPublic: boolean;
@Column('varchar', {
length: 2048, nullable: true, default: null,
comment: 'The description of the Clip.'
comment: 'The description of the Clip.',
})
public description: string | null;
}

View File

@ -11,7 +11,7 @@ export class DriveFile {
@Index()
@Column('timestamp with time zone', {
comment: 'The created date of the DriveFile.'
comment: 'The created date of the DriveFile.',
})
public createdAt: Date;
@ -19,12 +19,12 @@ export class DriveFile {
@Column({
...id(),
nullable: true,
comment: 'The owner ID.'
comment: 'The owner ID.',
})
public userId: User['id'] | null;
@ManyToOne(type => User, {
onDelete: 'SET NULL'
onDelete: 'SET NULL',
})
@JoinColumn()
public user: User | null;
@ -32,52 +32,52 @@ export class DriveFile {
@Index()
@Column('varchar', {
length: 128, nullable: true,
comment: 'The host of owner. It will be null if the user in local.'
comment: 'The host of owner. It will be null if the user in local.',
})
public userHost: string | null;
@Index()
@Column('varchar', {
length: 32,
comment: 'The MD5 hash of the DriveFile.'
comment: 'The MD5 hash of the DriveFile.',
})
public md5: string;
@Column('varchar', {
length: 256,
comment: 'The file name of the DriveFile.'
comment: 'The file name of the DriveFile.',
})
public name: string;
@Index()
@Column('varchar', {
length: 128,
comment: 'The content type (MIME) of the DriveFile.'
comment: 'The content type (MIME) of the DriveFile.',
})
public type: string;
@Column('integer', {
comment: 'The file size (bytes) of the DriveFile.'
comment: 'The file size (bytes) of the DriveFile.',
})
public size: number;
@Column('varchar', {
length: 512, nullable: true,
comment: 'The comment of the DriveFile.'
comment: 'The comment of the DriveFile.',
})
public comment: string | null;
@Column('varchar', {
length: 128, nullable: true,
comment: 'The BlurHash string.'
comment: 'The BlurHash string.',
})
public blurhash: string | null;
@Column('jsonb', {
default: {},
comment: 'The any properties of the DriveFile. For example, it includes image width/height.'
comment: 'The any properties of the DriveFile. For example, it includes image width/height.',
})
public properties: { width?: number; height?: number; avgColor?: string };
public properties: { width?: number; height?: number; orientation?: number; avgColor?: string };
@Index()
@Column('boolean')
@ -85,19 +85,19 @@ export class DriveFile {
@Column('varchar', {
length: 512,
comment: 'The URL of the DriveFile.'
comment: 'The URL of the DriveFile.',
})
public url: string;
@Column('varchar', {
length: 512, nullable: true,
comment: 'The URL of the thumbnail of the DriveFile.'
comment: 'The URL of the thumbnail of the DriveFile.',
})
public thumbnailUrl: string | null;
@Column('varchar', {
length: 512, nullable: true,
comment: 'The URL of the webpublic of the DriveFile.'
comment: 'The URL of the webpublic of the DriveFile.',
})
public webpublicUrl: string | null;
@ -122,7 +122,7 @@ export class DriveFile {
@Index()
@Column('varchar', {
length: 512, nullable: true,
comment: 'The URI of the DriveFile. it will be null when the DriveFile is local.'
comment: 'The URI of the DriveFile. it will be null when the DriveFile is local.',
})
public uri: string | null;
@ -135,12 +135,12 @@ export class DriveFile {
@Column({
...id(),
nullable: true,
comment: 'The parent folder ID. If null, it means the DriveFile is located in root.'
comment: 'The parent folder ID. If null, it means the DriveFile is located in root.',
})
public folderId: DriveFolder['id'] | null;
@ManyToOne(type => DriveFolder, {
onDelete: 'SET NULL'
onDelete: 'SET NULL',
})
@JoinColumn()
public folder: DriveFolder | null;
@ -148,7 +148,7 @@ export class DriveFile {
@Index()
@Column('boolean', {
default: false,
comment: 'Whether the DriveFile is NSFW.'
comment: 'Whether the DriveFile is NSFW.',
})
public isSensitive: boolean;
@ -158,7 +158,7 @@ export class DriveFile {
@Index()
@Column('boolean', {
default: false,
comment: 'Whether the DriveFile is direct link to remote server.'
comment: 'Whether the DriveFile is direct link to remote server.',
})
public isLink: boolean;
}

View File

@ -9,13 +9,13 @@ export class DriveFolder {
@Index()
@Column('timestamp with time zone', {
comment: 'The created date of the DriveFolder.'
comment: 'The created date of the DriveFolder.',
})
public createdAt: Date;
@Column('varchar', {
length: 128,
comment: 'The name of the DriveFolder.'
comment: 'The name of the DriveFolder.',
})
public name: string;
@ -23,12 +23,12 @@ export class DriveFolder {
@Column({
...id(),
nullable: true,
comment: 'The owner ID.'
comment: 'The owner ID.',
})
public userId: User['id'] | null;
@ManyToOne(type => User, {
onDelete: 'CASCADE'
onDelete: 'CASCADE',
})
@JoinColumn()
public user: User | null;
@ -37,12 +37,12 @@ export class DriveFolder {
@Column({
...id(),
nullable: true,
comment: 'The parent folder ID. If null, it means the DriveFolder is located in root.'
comment: 'The parent folder ID. If null, it means the DriveFolder is located in root.',
})
public parentId: DriveFolder['id'] | null;
@ManyToOne(type => DriveFolder, {
onDelete: 'SET NULL'
onDelete: 'SET NULL',
})
@JoinColumn()
public parent: DriveFolder | null;

View File

@ -8,24 +8,24 @@ export class Emoji {
public id: string;
@Column('timestamp with time zone', {
nullable: true
nullable: true,
})
public updatedAt: Date | null;
@Index()
@Column('varchar', {
length: 128
length: 128,
})
public name: string;
@Index()
@Column('varchar', {
length: 128, nullable: true
length: 128, nullable: true,
})
public host: string | null;
@Column('varchar', {
length: 128, nullable: true
length: 128, nullable: true,
})
public category: string | null;
@ -35,17 +35,17 @@ export class Emoji {
public url: string;
@Column('varchar', {
length: 512, nullable: true
length: 512, nullable: true,
})
public uri: string | null;
@Column('varchar', {
length: 64, nullable: true
length: 64, nullable: true,
})
public type: string | null;
@Column('varchar', {
array: true, length: 128, default: '{}'
array: true, length: 128, default: '{}',
})
public aliases: string[];
}

View File

@ -9,19 +9,19 @@ export class FollowRequest {
public id: string;
@Column('timestamp with time zone', {
comment: 'The created date of the FollowRequest.'
comment: 'The created date of the FollowRequest.',
})
public createdAt: Date;
@Index()
@Column({
...id(),
comment: 'The followee user ID.'
comment: 'The followee user ID.',
})
public followeeId: User['id'];
@ManyToOne(type => User, {
onDelete: 'CASCADE'
onDelete: 'CASCADE',
})
@JoinColumn()
public followee: User | null;
@ -29,56 +29,56 @@ export class FollowRequest {
@Index()
@Column({
...id(),
comment: 'The follower user ID.'
comment: 'The follower user ID.',
})
public followerId: User['id'];
@ManyToOne(type => User, {
onDelete: 'CASCADE'
onDelete: 'CASCADE',
})
@JoinColumn()
public follower: User | null;
@Column('varchar', {
length: 128, nullable: true,
comment: 'id of Follow Activity.'
comment: 'id of Follow Activity.',
})
public requestId: string | null;
//#region Denormalized fields
@Column('varchar', {
length: 128, nullable: true,
comment: '[Denormalized]'
comment: '[Denormalized]',
})
public followerHost: string | null;
@Column('varchar', {
length: 512, nullable: true,
comment: '[Denormalized]'
comment: '[Denormalized]',
})
public followerInbox: string | null;
@Column('varchar', {
length: 512, nullable: true,
comment: '[Denormalized]'
comment: '[Denormalized]',
})
public followerSharedInbox: string | null;
@Column('varchar', {
length: 128, nullable: true,
comment: '[Denormalized]'
comment: '[Denormalized]',
})
public followeeHost: string | null;
@Column('varchar', {
length: 512, nullable: true,
comment: '[Denormalized]'
comment: '[Denormalized]',
})
public followeeInbox: string | null;
@Column('varchar', {
length: 512, nullable: true,
comment: '[Denormalized]'
comment: '[Denormalized]',
})
public followeeSharedInbox: string | null;
//#endregion

View File

@ -10,19 +10,19 @@ export class Following {
@Index()
@Column('timestamp with time zone', {
comment: 'The created date of the Following.'
comment: 'The created date of the Following.',
})
public createdAt: Date;
@Index()
@Column({
...id(),
comment: 'The followee user ID.'
comment: 'The followee user ID.',
})
public followeeId: User['id'];
@ManyToOne(type => User, {
onDelete: 'CASCADE'
onDelete: 'CASCADE',
})
@JoinColumn()
public followee: User | null;
@ -30,12 +30,12 @@ export class Following {
@Index()
@Column({
...id(),
comment: 'The follower user ID.'
comment: 'The follower user ID.',
})
public followerId: User['id'];
@ManyToOne(type => User, {
onDelete: 'CASCADE'
onDelete: 'CASCADE',
})
@JoinColumn()
public follower: User | null;
@ -43,37 +43,37 @@ export class Following {
//#region Denormalized fields
@Column('varchar', {
length: 128, nullable: true,
comment: '[Denormalized]'
comment: '[Denormalized]',
})
public followerHost: string | null;
@Column('varchar', {
length: 512, nullable: true,
comment: '[Denormalized]'
comment: '[Denormalized]',
})
public followerInbox: string | null;
@Column('varchar', {
length: 512, nullable: true,
comment: '[Denormalized]'
comment: '[Denormalized]',
})
public followerSharedInbox: string | null;
@Column('varchar', {
length: 128, nullable: true,
comment: '[Denormalized]'
comment: '[Denormalized]',
})
public followeeHost: string | null;
@Column('varchar', {
length: 512, nullable: true,
comment: '[Denormalized]'
comment: '[Denormalized]',
})
public followeeInbox: string | null;
@Column('varchar', {
length: 512, nullable: true,
comment: '[Denormalized]'
comment: '[Denormalized]',
})
public followeeSharedInbox: string | null;
//#endregion

View File

@ -17,7 +17,7 @@ export class GalleryLike {
public userId: User['id'];
@ManyToOne(type => User, {
onDelete: 'CASCADE'
onDelete: 'CASCADE',
})
@JoinColumn()
public user: User | null;
@ -26,7 +26,7 @@ export class GalleryLike {
public postId: GalleryPost['id'];
@ManyToOne(type => GalleryPost, {
onDelete: 'CASCADE'
onDelete: 'CASCADE',
})
@JoinColumn()
public post: GalleryPost | null;

View File

@ -10,13 +10,13 @@ export class GalleryPost {
@Index()
@Column('timestamp with time zone', {
comment: 'The created date of the GalleryPost.'
comment: 'The created date of the GalleryPost.',
})
public createdAt: Date;
@Index()
@Column('timestamp with time zone', {
comment: 'The updated date of the GalleryPost.'
comment: 'The updated date of the GalleryPost.',
})
public updatedAt: Date;
@ -26,19 +26,19 @@ export class GalleryPost {
public title: string;
@Column('varchar', {
length: 2048, nullable: true
length: 2048, nullable: true,
})
public description: string | null;
@Index()
@Column({
...id(),
comment: 'The ID of author.'
comment: 'The ID of author.',
})
public userId: User['id'];
@ManyToOne(type => User, {
onDelete: 'CASCADE'
onDelete: 'CASCADE',
})
@JoinColumn()
public user: User | null;
@ -46,26 +46,26 @@ export class GalleryPost {
@Index()
@Column({
...id(),
array: true, default: '{}'
array: true, default: '{}',
})
public fileIds: DriveFile['id'][];
@Index()
@Column('boolean', {
default: false,
comment: 'Whether the post is sensitive.'
comment: 'Whether the post is sensitive.',
})
public isSensitive: boolean;
@Index()
@Column('integer', {
default: 0
default: 0,
})
public likedCount: number;
@Index()
@Column('varchar', {
length: 128, array: true, default: '{}'
length: 128, array: true, default: '{}',
})
public tags: string[];

View File

@ -9,13 +9,13 @@ export class ReversiGame {
@Index()
@Column('timestamp with time zone', {
comment: 'The created date of the ReversiGame.'
comment: 'The created date of the ReversiGame.',
})
public createdAt: Date;
@Column('timestamp with time zone', {
nullable: true,
comment: 'The started date of the ReversiGame.'
comment: 'The started date of the ReversiGame.',
})
public startedAt: Date | null;
@ -23,7 +23,7 @@ export class ReversiGame {
public user1Id: User['id'];
@ManyToOne(type => User, {
onDelete: 'CASCADE'
onDelete: 'CASCADE',
})
@JoinColumn()
public user1: User | null;
@ -32,7 +32,7 @@ export class ReversiGame {
public user2Id: User['id'];
@ManyToOne(type => User, {
onDelete: 'CASCADE'
onDelete: 'CASCADE',
})
@JoinColumn()
public user2: User | null;
@ -69,13 +69,13 @@ export class ReversiGame {
@Column({
...id(),
nullable: true
nullable: true,
})
public winnerId: User['id'] | null;
@Column({
...id(),
nullable: true
nullable: true,
})
public surrendered: User['id'] | null;
@ -94,7 +94,7 @@ export class ReversiGame {
public map: string[];
@Column('varchar', {
length: 32
length: 32,
})
public bw: string;
@ -127,7 +127,7 @@ export class ReversiGame {
* ログのposを文字列としてすべて連結したもののCRC32値
*/
@Column('varchar', {
length: 32, nullable: true
length: 32, nullable: true,
})
public crc32: string | null;
}

View File

@ -9,7 +9,7 @@ export class ReversiMatching {
@Index()
@Column('timestamp with time zone', {
comment: 'The created date of the ReversiMatching.'
comment: 'The created date of the ReversiMatching.',
})
public createdAt: Date;
@ -18,7 +18,7 @@ export class ReversiMatching {
public parentId: User['id'];
@ManyToOne(type => User, {
onDelete: 'CASCADE'
onDelete: 'CASCADE',
})
@JoinColumn()
public parent: User | null;
@ -28,7 +28,7 @@ export class ReversiMatching {
public childId: User['id'];
@ManyToOne(type => User, {
onDelete: 'CASCADE'
onDelete: 'CASCADE',
})
@JoinColumn()
public child: User | null;

View File

@ -9,7 +9,7 @@ export class Hashtag {
@Index({ unique: true })
@Column('varchar', {
length: 128
length: 128,
})
public name: string;
@ -21,7 +21,7 @@ export class Hashtag {
@Index()
@Column('integer', {
default: 0
default: 0,
})
public mentionedUsersCount: number;
@ -33,7 +33,7 @@ export class Hashtag {
@Index()
@Column('integer', {
default: 0
default: 0,
})
public mentionedLocalUsersCount: number;
@ -45,7 +45,7 @@ export class Hashtag {
@Index()
@Column('integer', {
default: 0
default: 0,
})
public mentionedRemoteUsersCount: number;
@ -57,7 +57,7 @@ export class Hashtag {
@Index()
@Column('integer', {
default: 0
default: 0,
})
public attachedUsersCount: number;
@ -69,7 +69,7 @@ export class Hashtag {
@Index()
@Column('integer', {
default: 0
default: 0,
})
public attachedLocalUsersCount: number;
@ -81,7 +81,7 @@ export class Hashtag {
@Index()
@Column('integer', {
default: 0
default: 0,
})
public attachedRemoteUsersCount: number;
}

View File

@ -11,7 +11,7 @@ export class Instance {
*/
@Index()
@Column('timestamp with time zone', {
comment: 'The caught date of the Instance.'
comment: 'The caught date of the Instance.',
})
public caughtAt: Date;
@ -21,7 +21,7 @@ export class Instance {
@Index({ unique: true })
@Column('varchar', {
length: 128,
comment: 'The host of the Instance.'
comment: 'The host of the Instance.',
})
public host: string;
@ -30,7 +30,7 @@ export class Instance {
*/
@Column('integer', {
default: 0,
comment: 'The count of the users of the Instance.'
comment: 'The count of the users of the Instance.',
})
public usersCount: number;
@ -39,7 +39,7 @@ export class Instance {
*/
@Column('integer', {
default: 0,
comment: 'The count of the notes of the Instance.'
comment: 'The count of the notes of the Instance.',
})
public notesCount: number;
@ -109,7 +109,7 @@ export class Instance {
* このインスタンスと不通かどうか
*/
@Column('boolean', {
default: false
default: false,
})
public isNotResponding: boolean;
@ -118,13 +118,13 @@ export class Instance {
*/
@Index()
@Column('boolean', {
default: false
default: false,
})
public isSuspended: boolean;
@Column('varchar', {
length: 64, nullable: true, default: null,
comment: 'The software of the Instance.'
comment: 'The software of the Instance.',
})
public softwareName: string | null;

View File

@ -11,19 +11,19 @@ export class MessagingMessage {
@Index()
@Column('timestamp with time zone', {
comment: 'The created date of the MessagingMessage.'
comment: 'The created date of the MessagingMessage.',
})
public createdAt: Date;
@Index()
@Column({
...id(),
comment: 'The sender user ID.'
comment: 'The sender user ID.',
})
public userId: User['id'];
@ManyToOne(type => User, {
onDelete: 'CASCADE'
onDelete: 'CASCADE',
})
@JoinColumn()
public user: User | null;
@ -31,12 +31,12 @@ export class MessagingMessage {
@Index()
@Column({
...id(), nullable: true,
comment: 'The recipient user ID.'
comment: 'The recipient user ID.',
})
public recipientId: User['id'] | null;
@ManyToOne(type => User, {
onDelete: 'CASCADE'
onDelete: 'CASCADE',
})
@JoinColumn()
public recipient: User | null;
@ -44,18 +44,18 @@ export class MessagingMessage {
@Index()
@Column({
...id(), nullable: true,
comment: 'The recipient group ID.'
comment: 'The recipient group ID.',
})
public groupId: UserGroup['id'] | null;
@ManyToOne(type => UserGroup, {
onDelete: 'CASCADE'
onDelete: 'CASCADE',
})
@JoinColumn()
public group: UserGroup | null;
@Column('varchar', {
length: 4096, nullable: true
length: 4096, nullable: true,
})
public text: string | null;
@ -71,7 +71,7 @@ export class MessagingMessage {
@Column({
...id(),
array: true, default: '{}'
array: true, default: '{}',
})
public reads: User['id'][];
@ -82,7 +82,7 @@ export class MessagingMessage {
public fileId: DriveFile['id'] | null;
@ManyToOne(type => DriveFile, {
onDelete: 'CASCADE'
onDelete: 'CASCADE',
})
@JoinColumn()
public file: DriveFile | null;

View File

@ -7,17 +7,17 @@ import { Clip } from './clip';
export class Meta {
@PrimaryColumn({
type: 'varchar',
length: 32
length: 32,
})
public id: string;
@Column('varchar', {
length: 128, nullable: true
length: 128, nullable: true,
})
public name: string | null;
@Column('varchar', {
length: 1024, nullable: true
length: 1024, nullable: true,
})
public description: string | null;
@ -25,7 +25,7 @@ export class Meta {
* メンテナの名前
*/
@Column('varchar', {
length: 128, nullable: true
length: 128, nullable: true,
})
public maintainerName: string | null;
@ -33,7 +33,7 @@ export class Meta {
* メンテナの連絡先
*/
@Column('varchar', {
length: 128, nullable: true
length: 128, nullable: true,
})
public maintainerEmail: string | null;
@ -58,27 +58,27 @@ export class Meta {
public useStarForReactionFallback: boolean;
@Column('varchar', {
length: 64, array: true, default: '{}'
length: 64, array: true, default: '{}',
})
public langs: string[];
@Column('varchar', {
length: 256, array: true, default: '{}'
length: 256, array: true, default: '{}',
})
public pinnedUsers: string[];
@Column('varchar', {
length: 256, array: true, default: '{}'
length: 256, array: true, default: '{}',
})
public hiddenTags: string[];
@Column('varchar', {
length: 256, array: true, default: '{}'
length: 256, array: true, default: '{}',
})
public blockedHosts: string[];
@Column('varchar', {
length: 512, array: true, default: '{"/featured", "/channels", "/explore", "/pages", "/about-misskey"}'
length: 512, array: true, default: '{"/featured", "/channels", "/explore", "/pages", "/about-misskey"}',
})
public pinnedPages: string[];
@ -91,38 +91,38 @@ export class Meta {
@Column('varchar', {
length: 512,
nullable: true,
default: '/assets/ai.png'
default: '/assets/ai.png',
})
public mascotImageUrl: string | null;
@Column('varchar', {
length: 512,
nullable: true
nullable: true,
})
public bannerUrl: string | null;
@Column('varchar', {
length: 512,
nullable: true
nullable: true,
})
public backgroundImageUrl: string | null;
@Column('varchar', {
length: 512,
nullable: true
nullable: true,
})
public logoImageUrl: string | null;
@Column('varchar', {
length: 512,
nullable: true,
default: 'https://xn--931a.moe/aiart/yubitun.png'
default: 'https://xn--931a.moe/aiart/yubitun.png',
})
public errorImageUrl: string | null;
@Column('varchar', {
length: 512,
nullable: true
nullable: true,
})
public iconUrl: string | null;
@ -143,7 +143,7 @@ export class Meta {
public proxyAccountId: User['id'] | null;
@ManyToOne(type => User, {
onDelete: 'SET NULL'
onDelete: 'SET NULL',
})
@JoinColumn()
public proxyAccount: User | null;
@ -160,13 +160,13 @@ export class Meta {
@Column('varchar', {
length: 64,
nullable: true
nullable: true,
})
public hcaptchaSiteKey: string | null;
@Column('varchar', {
length: 64,
nullable: true
nullable: true,
})
public hcaptchaSecretKey: string | null;
@ -177,37 +177,37 @@ export class Meta {
@Column('varchar', {
length: 64,
nullable: true
nullable: true,
})
public recaptchaSiteKey: string | null;
@Column('varchar', {
length: 64,
nullable: true
nullable: true,
})
public recaptchaSecretKey: string | null;
@Column('integer', {
default: 1024,
comment: 'Drive capacity of a local user (MB)'
comment: 'Drive capacity of a local user (MB)',
})
public localDriveCapacityMb: number;
@Column('integer', {
default: 32,
comment: 'Drive capacity of a remote user (MB)'
comment: 'Drive capacity of a remote user (MB)',
})
public remoteDriveCapacityMb: number;
@Column('integer', {
default: 500,
comment: 'Max allowed note text length in characters'
comment: 'Max allowed note text length in characters',
})
public maxNoteTextLength: number;
@Column('varchar', {
length: 128,
nullable: true
nullable: true,
})
public summalyProxy: string | null;
@ -218,7 +218,7 @@ export class Meta {
@Column('varchar', {
length: 128,
nullable: true
nullable: true,
})
public email: string | null;
@ -229,24 +229,24 @@ export class Meta {
@Column('varchar', {
length: 128,
nullable: true
nullable: true,
})
public smtpHost: string | null;
@Column('integer', {
nullable: true
nullable: true,
})
public smtpPort: number | null;
@Column('varchar', {
length: 128,
nullable: true
nullable: true,
})
public smtpUser: string | null;
@Column('varchar', {
length: 128,
nullable: true
nullable: true,
})
public smtpPass: string | null;
@ -257,13 +257,13 @@ export class Meta {
@Column('varchar', {
length: 128,
nullable: true
nullable: true,
})
public swPublicKey: string | null;
@Column('varchar', {
length: 128,
nullable: true
nullable: true,
})
public swPrivateKey: string | null;
@ -274,13 +274,13 @@ export class Meta {
@Column('varchar', {
length: 128,
nullable: true
nullable: true,
})
public twitterConsumerKey: string | null;
@Column('varchar', {
length: 128,
nullable: true
nullable: true,
})
public twitterConsumerSecret: string | null;
@ -291,13 +291,13 @@ export class Meta {
@Column('varchar', {
length: 128,
nullable: true
nullable: true,
})
public githubClientId: string | null;
@Column('varchar', {
length: 128,
nullable: true
nullable: true,
})
public githubClientSecret: string | null;
@ -308,19 +308,19 @@ export class Meta {
@Column('varchar', {
length: 128,
nullable: true
nullable: true,
})
public discordClientId: string | null;
@Column('varchar', {
length: 128,
nullable: true
nullable: true,
})
public discordClientSecret: string | null;
@Column('varchar', {
length: 128,
nullable: true
nullable: true,
})
public deeplAuthKey: string | null;
@ -331,21 +331,21 @@ export class Meta {
@Column('varchar', {
length: 512,
nullable: true
nullable: true,
})
public ToSUrl: string | null;
@Column('varchar', {
length: 512,
default: 'https://github.com/misskey-dev/misskey',
nullable: false
nullable: false,
})
public repositoryUrl: string;
@Column('varchar', {
length: 512,
default: 'https://github.com/misskey-dev/misskey/issues/new',
nullable: true
nullable: true,
})
public feedbackUrl: string | null;
@ -356,48 +356,48 @@ export class Meta {
@Column('varchar', {
length: 512,
nullable: true
nullable: true,
})
public objectStorageBucket: string | null;
@Column('varchar', {
length: 512,
nullable: true
nullable: true,
})
public objectStoragePrefix: string | null;
@Column('varchar', {
length: 512,
nullable: true
nullable: true,
})
public objectStorageBaseUrl: string | null;
@Column('varchar', {
length: 512,
nullable: true
nullable: true,
})
public objectStorageEndpoint: string | null;
@Column('varchar', {
length: 512,
nullable: true
nullable: true,
})
public objectStorageRegion: string | null;
@Column('varchar', {
length: 512,
nullable: true
nullable: true,
})
public objectStorageAccessKey: string | null;
@Column('varchar', {
length: 512,
nullable: true
nullable: true,
})
public objectStorageSecretKey: string | null;
@Column('integer', {
nullable: true
nullable: true,
})
public objectStoragePort: number | null;

View File

@ -8,7 +8,7 @@ export class ModerationLog {
public id: string;
@Column('timestamp with time zone', {
comment: 'The created date of the ModerationLog.'
comment: 'The created date of the ModerationLog.',
})
public createdAt: Date;
@ -17,7 +17,7 @@ export class ModerationLog {
public userId: User['id'];
@ManyToOne(type => User, {
onDelete: 'CASCADE'
onDelete: 'CASCADE',
})
@JoinColumn()
public user: User | null;

View File

@ -13,12 +13,12 @@ export class MutedNote {
@Index()
@Column({
...id(),
comment: 'The note ID.'
comment: 'The note ID.',
})
public noteId: Note['id'];
@ManyToOne(type => Note, {
onDelete: 'CASCADE'
onDelete: 'CASCADE',
})
@JoinColumn()
public note: Note | null;
@ -26,12 +26,12 @@ export class MutedNote {
@Index()
@Column({
...id(),
comment: 'The user ID.'
comment: 'The user ID.',
})
public userId: User['id'];
@ManyToOne(type => User, {
onDelete: 'CASCADE'
onDelete: 'CASCADE',
})
@JoinColumn()
public user: User | null;
@ -42,7 +42,7 @@ export class MutedNote {
@Index()
@Column('enum', {
enum: mutedNoteReasons,
comment: 'The reason of the MutedNote.'
comment: 'The reason of the MutedNote.',
})
public reason: typeof mutedNoteReasons[number];
}

View File

@ -10,19 +10,19 @@ export class Muting {
@Index()
@Column('timestamp with time zone', {
comment: 'The created date of the Muting.'
comment: 'The created date of the Muting.',
})
public createdAt: Date;
@Index()
@Column({
...id(),
comment: 'The mutee user ID.'
comment: 'The mutee user ID.',
})
public muteeId: User['id'];
@ManyToOne(type => User, {
onDelete: 'CASCADE'
onDelete: 'CASCADE',
})
@JoinColumn()
public mutee: User | null;
@ -30,12 +30,12 @@ export class Muting {
@Index()
@Column({
...id(),
comment: 'The muter user ID.'
comment: 'The muter user ID.',
})
public muterId: User['id'];
@ManyToOne(type => User, {
onDelete: 'CASCADE'
onDelete: 'CASCADE',
})
@JoinColumn()
public muter: User | null;

View File

@ -10,7 +10,7 @@ export class NoteFavorite {
public id: string;
@Column('timestamp with time zone', {
comment: 'The created date of the NoteFavorite.'
comment: 'The created date of the NoteFavorite.',
})
public createdAt: Date;
@ -19,7 +19,7 @@ export class NoteFavorite {
public userId: User['id'];
@ManyToOne(type => User, {
onDelete: 'CASCADE'
onDelete: 'CASCADE',
})
@JoinColumn()
public user: User | null;
@ -28,7 +28,7 @@ export class NoteFavorite {
public noteId: Note['id'];
@ManyToOne(type => Note, {
onDelete: 'CASCADE'
onDelete: 'CASCADE',
})
@JoinColumn()
public note: Note | null;

View File

@ -11,7 +11,7 @@ export class NoteReaction {
@Index()
@Column('timestamp with time zone', {
comment: 'The created date of the NoteReaction.'
comment: 'The created date of the NoteReaction.',
})
public createdAt: Date;
@ -20,7 +20,7 @@ export class NoteReaction {
public userId: User['id'];
@ManyToOne(type => User, {
onDelete: 'CASCADE'
onDelete: 'CASCADE',
})
@JoinColumn()
public user?: User | null;
@ -30,7 +30,7 @@ export class NoteReaction {
public noteId: Note['id'];
@ManyToOne(type => Note, {
onDelete: 'CASCADE'
onDelete: 'CASCADE',
})
@JoinColumn()
public note?: Note | null;
@ -38,7 +38,7 @@ export class NoteReaction {
// TODO: 対象noteのuserIdを非正規化したい(「受け取ったリアクション一覧」のようなものを(JOIN無しで)実装したいため)
@Column('varchar', {
length: 260
length: 260,
})
public reaction: string;
}

View File

@ -20,7 +20,7 @@ export class NoteThreadMuting {
public userId: User['id'];
@ManyToOne(type => User, {
onDelete: 'CASCADE'
onDelete: 'CASCADE',
})
@JoinColumn()
public user: User | null;

View File

@ -15,7 +15,7 @@ export class NoteUnread {
public userId: User['id'];
@ManyToOne(type => User, {
onDelete: 'CASCADE'
onDelete: 'CASCADE',
})
@JoinColumn()
public user: User | null;
@ -25,7 +25,7 @@ export class NoteUnread {
public noteId: Note['id'];
@ManyToOne(type => Note, {
onDelete: 'CASCADE'
onDelete: 'CASCADE',
})
@JoinColumn()
public note: Note | null;
@ -48,7 +48,7 @@ export class NoteUnread {
@Index()
@Column({
...id(),
comment: '[Denormalized]'
comment: '[Denormalized]',
})
public noteUserId: User['id'];
@ -56,7 +56,7 @@ export class NoteUnread {
@Column({
...id(),
nullable: true,
comment: '[Denormalized]'
comment: '[Denormalized]',
})
public noteChannelId: Channel['id'] | null;
//#endregion

View File

@ -11,19 +11,19 @@ export class NoteWatching {
@Index()
@Column('timestamp with time zone', {
comment: 'The created date of the NoteWatching.'
comment: 'The created date of the NoteWatching.',
})
public createdAt: Date;
@Index()
@Column({
...id(),
comment: 'The watcher ID.'
comment: 'The watcher ID.',
})
public userId: User['id'];
@ManyToOne(type => User, {
onDelete: 'CASCADE'
onDelete: 'CASCADE',
})
@JoinColumn()
public user: User | null;
@ -31,12 +31,12 @@ export class NoteWatching {
@Index()
@Column({
...id(),
comment: 'The target Note ID.'
comment: 'The target Note ID.',
})
public noteId: Note['id'];
@ManyToOne(type => Note, {
onDelete: 'CASCADE'
onDelete: 'CASCADE',
})
@JoinColumn()
public note: Note | null;
@ -45,7 +45,7 @@ export class NoteWatching {
@Index()
@Column({
...id(),
comment: '[Denormalized]'
comment: '[Denormalized]',
})
public noteUserId: Note['userId'];
//#endregion

View File

@ -15,7 +15,7 @@ export class Note {
@Index()
@Column('timestamp with time zone', {
comment: 'The created date of the Note.'
comment: 'The created date of the Note.',
})
public createdAt: Date;
@ -23,12 +23,12 @@ export class Note {
@Column({
...id(),
nullable: true,
comment: 'The ID of reply target.'
comment: 'The ID of reply target.',
})
public replyId: Note['id'] | null;
@ManyToOne(type => Note, {
onDelete: 'CASCADE'
onDelete: 'CASCADE',
})
@JoinColumn()
public reply: Note | null;
@ -37,67 +37,67 @@ export class Note {
@Column({
...id(),
nullable: true,
comment: 'The ID of renote target.'
comment: 'The ID of renote target.',
})
public renoteId: Note['id'] | null;
@ManyToOne(type => Note, {
onDelete: 'CASCADE'
onDelete: 'CASCADE',
})
@JoinColumn()
public renote: Note | null;
@Index()
@Column('varchar', {
length: 256, nullable: true
length: 256, nullable: true,
})
public threadId: string | null;
@Column('varchar', {
length: 8192, nullable: true
length: 8192, nullable: true,
})
public text: string | null;
@Column('varchar', {
length: 256, nullable: true
length: 256, nullable: true,
})
public name: string | null;
@Column('varchar', {
length: 512, nullable: true
length: 512, nullable: true,
})
public cw: string | null;
@Index()
@Column({
...id(),
comment: 'The ID of author.'
comment: 'The ID of author.',
})
public userId: User['id'];
@ManyToOne(type => User, {
onDelete: 'CASCADE'
onDelete: 'CASCADE',
})
@JoinColumn()
public user: User | null;
@Column('boolean', {
default: false
default: false,
})
public localOnly: boolean;
@Column('smallint', {
default: 0
default: 0,
})
public renoteCount: number;
@Column('smallint', {
default: 0
default: 0,
})
public repliesCount: number;
@Column('jsonb', {
default: {}
default: {},
})
public reactions: Record<string, number>;
@ -113,66 +113,66 @@ export class Note {
@Index({ unique: true })
@Column('varchar', {
length: 512, nullable: true,
comment: 'The URI of a note. it will be null when the note is local.'
comment: 'The URI of a note. it will be null when the note is local.',
})
public uri: string | null;
@Column('varchar', {
length: 512, nullable: true,
comment: 'The human readable url of a note. it will be null when the note is local.'
comment: 'The human readable url of a note. it will be null when the note is local.',
})
public url: string | null;
@Column('integer', {
default: 0, select: false
default: 0, select: false,
})
public score: number;
@Index()
@Column({
...id(),
array: true, default: '{}'
array: true, default: '{}',
})
public fileIds: DriveFile['id'][];
@Index()
@Column('varchar', {
length: 256, array: true, default: '{}'
length: 256, array: true, default: '{}',
})
public attachedFileTypes: string[];
@Index()
@Column({
...id(),
array: true, default: '{}'
array: true, default: '{}',
})
public visibleUserIds: User['id'][];
@Index()
@Column({
...id(),
array: true, default: '{}'
array: true, default: '{}',
})
public mentions: User['id'][];
@Column('text', {
default: '[]'
default: '[]',
})
public mentionedRemoteUsers: string;
@Column('varchar', {
length: 128, array: true, default: '{}'
length: 128, array: true, default: '{}',
})
public emojis: string[];
@Index()
@Column('varchar', {
length: 128, array: true, default: '{}'
length: 128, array: true, default: '{}',
})
public tags: string[];
@Column('boolean', {
default: false
default: false,
})
public hasPoll: boolean;
@ -180,12 +180,12 @@ export class Note {
@Column({
...id(),
nullable: true, default: null,
comment: 'The ID of source channel.'
comment: 'The ID of source channel.',
})
public channelId: Channel['id'] | null;
@ManyToOne(type => Channel, {
onDelete: 'CASCADE'
onDelete: 'CASCADE',
})
@JoinColumn()
public channel: Channel | null;
@ -194,33 +194,33 @@ export class Note {
@Index()
@Column('varchar', {
length: 128, nullable: true,
comment: '[Denormalized]'
comment: '[Denormalized]',
})
public userHost: string | null;
@Column({
...id(),
nullable: true,
comment: '[Denormalized]'
comment: '[Denormalized]',
})
public replyUserId: User['id'] | null;
@Column('varchar', {
length: 128, nullable: true,
comment: '[Denormalized]'
comment: '[Denormalized]',
})
public replyUserHost: string | null;
@Column({
...id(),
nullable: true,
comment: '[Denormalized]'
comment: '[Denormalized]',
})
public renoteUserId: User['id'] | null;
@Column('varchar', {
length: 128, nullable: true,
comment: '[Denormalized]'
comment: '[Denormalized]',
})
public renoteUserHost: string | null;
//#endregion

View File

@ -14,7 +14,7 @@ export class Notification {
@Index()
@Column('timestamp with time zone', {
comment: 'The created date of the Notification.'
comment: 'The created date of the Notification.',
})
public createdAt: Date;
@ -24,12 +24,12 @@ export class Notification {
@Index()
@Column({
...id(),
comment: 'The ID of recipient user of the Notification.'
comment: 'The ID of recipient user of the Notification.',
})
public notifieeId: User['id'];
@ManyToOne(type => User, {
onDelete: 'CASCADE'
onDelete: 'CASCADE',
})
@JoinColumn()
public notifiee: User | null;
@ -41,12 +41,12 @@ export class Notification {
@Column({
...id(),
nullable: true,
comment: 'The ID of sender user of the Notification.'
comment: 'The ID of sender user of the Notification.',
})
public notifierId: User['id'] | null;
@ManyToOne(type => User, {
onDelete: 'CASCADE'
onDelete: 'CASCADE',
})
@JoinColumn()
public notifier: User | null;
@ -68,7 +68,7 @@ export class Notification {
@Index()
@Column('enum', {
enum: notificationTypes,
comment: 'The type of the Notification.'
comment: 'The type of the Notification.',
})
public type: typeof notificationTypes[number];
@ -78,53 +78,53 @@ export class Notification {
@Index()
@Column('boolean', {
default: false,
comment: 'Whether the Notification is read.'
comment: 'Whether the Notification is read.',
})
public isRead: boolean;
@Column({
...id(),
nullable: true
nullable: true,
})
public noteId: Note['id'] | null;
@ManyToOne(type => Note, {
onDelete: 'CASCADE'
onDelete: 'CASCADE',
})
@JoinColumn()
public note: Note | null;
@Column({
...id(),
nullable: true
nullable: true,
})
public followRequestId: FollowRequest['id'] | null;
@ManyToOne(type => FollowRequest, {
onDelete: 'CASCADE'
onDelete: 'CASCADE',
})
@JoinColumn()
public followRequest: FollowRequest | null;
@Column({
...id(),
nullable: true
nullable: true,
})
public userGroupInvitationId: UserGroupInvitation['id'] | null;
@ManyToOne(type => UserGroupInvitation, {
onDelete: 'CASCADE'
onDelete: 'CASCADE',
})
@JoinColumn()
public userGroupInvitation: UserGroupInvitation | null;
@Column('varchar', {
length: 128, nullable: true
length: 128, nullable: true,
})
public reaction: string | null;
@Column('integer', {
nullable: true
nullable: true,
})
public choice: number | null;
@ -132,7 +132,7 @@ export class Notification {
* アプリ通知のbody
*/
@Column('varchar', {
length: 2048, nullable: true
length: 2048, nullable: true,
})
public customBody: string | null;
@ -141,7 +141,7 @@ export class Notification {
* (省略時はアプリ名で表示されることを期待)
*/
@Column('varchar', {
length: 256, nullable: true
length: 256, nullable: true,
})
public customHeader: string | null;
@ -150,7 +150,7 @@ export class Notification {
* (省略時はアプリアイコンで表示されることを期待)
*/
@Column('varchar', {
length: 1024, nullable: true
length: 1024, nullable: true,
})
public customIcon: string | null;
@ -160,12 +160,12 @@ export class Notification {
@Index()
@Column({
...id(),
nullable: true
nullable: true,
})
public appAccessTokenId: AccessToken['id'] | null;
@ManyToOne(type => AccessToken, {
onDelete: 'CASCADE'
onDelete: 'CASCADE',
})
@JoinColumn()
public appAccessToken: AccessToken | null;

View File

@ -17,7 +17,7 @@ export class PageLike {
public userId: User['id'];
@ManyToOne(type => User, {
onDelete: 'CASCADE'
onDelete: 'CASCADE',
})
@JoinColumn()
public user: User | null;
@ -26,7 +26,7 @@ export class PageLike {
public pageId: Page['id'];
@ManyToOne(type => Page, {
onDelete: 'CASCADE'
onDelete: 'CASCADE',
})
@JoinColumn()
public page: Page | null;

View File

@ -11,13 +11,13 @@ export class Page {
@Index()
@Column('timestamp with time zone', {
comment: 'The created date of the Page.'
comment: 'The created date of the Page.',
})
public createdAt: Date;
@Index()
@Column('timestamp with time zone', {
comment: 'The updated date of the Page.'
comment: 'The updated date of the Page.',
})
public updatedAt: Date;
@ -33,7 +33,7 @@ export class Page {
public name: string;
@Column('varchar', {
length: 256, nullable: true
length: 256, nullable: true,
})
public summary: string | null;
@ -41,7 +41,7 @@ export class Page {
public alignCenter: boolean;
@Column('boolean', {
default: false
default: false,
})
public hideTitleWhenPinned: boolean;
@ -53,12 +53,12 @@ export class Page {
@Index()
@Column({
...id(),
comment: 'The ID of author.'
comment: 'The ID of author.',
})
public userId: User['id'];
@ManyToOne(type => User, {
onDelete: 'CASCADE'
onDelete: 'CASCADE',
})
@JoinColumn()
public user: User | null;
@ -70,24 +70,24 @@ export class Page {
public eyeCatchingImageId: DriveFile['id'] | null;
@ManyToOne(type => DriveFile, {
onDelete: 'CASCADE'
onDelete: 'CASCADE',
})
@JoinColumn()
public eyeCatchingImage: DriveFile | null;
@Column('jsonb', {
default: []
default: [],
})
public content: Record<string, any>[];
@Column('jsonb', {
default: []
default: [],
})
public variables: Record<string, any>[];
@Column('varchar', {
length: 16384,
default: ''
default: '',
})
public script: string;
@ -102,12 +102,12 @@ export class Page {
@Index()
@Column({
...id(),
array: true, default: '{}'
array: true, default: '{}',
})
public visibleUserIds: User['id'][];
@Column('integer', {
default: 0
default: 0,
})
public likedCount: number;

View File

@ -23,7 +23,7 @@ export class PasswordResetRequest {
public userId: User['id'];
@ManyToOne(type => User, {
onDelete: 'CASCADE'
onDelete: 'CASCADE',
})
@JoinColumn()
public user: User | null;

Some files were not shown because too many files have changed in this diff Show More