Merge branch 'develop' into mkjs-add-flash
This commit is contained in:
commit
5e1b8a245c
11
CHANGELOG.md
11
CHANGELOG.md
|
@ -8,20 +8,23 @@
|
|||
-
|
||||
|
||||
### Server
|
||||
- Fix: 外部サーバーの投稿がタイムラインに表示されないことがある問題を修正
|
||||
-
|
||||
|
||||
-->
|
||||
## 13.x.x (unreleased)
|
||||
|
||||
### General
|
||||
-
|
||||
## 13.14.2
|
||||
|
||||
### Client
|
||||
- リストTLで、ユーザーが追加・削除されてもTLを初期化しないように
|
||||
- URL取得変数を関数に変更 CURRENT_URL -> Mk:url()
|
||||
- Fix: モバイル表示のときページ下部がナビゲーションバーに隠れる問題を修正
|
||||
- Fix: 一部モーダルダイアログでスクロールできない問題を修正
|
||||
- Fix: Selecting all emojis in Custom emoji is impossible
|
||||
- Fix: PhotoSwipeによるメモリリークの修正
|
||||
|
||||
### Server
|
||||
- Fix: APIのオフセットが壊れていたせいで「もっと見る」でもっと見れない問題を修正
|
||||
- Fix: 外部サーバーの投稿がタイムラインに表示されないことがある問題を修正
|
||||
|
||||
## 13.x.x (unreleased)
|
||||
|
||||
|
|
|
@ -1042,7 +1042,7 @@ vertical: "Vertical"
|
|||
horizontal: "Horizontal"
|
||||
position: "Position"
|
||||
serverRules: "Server rules"
|
||||
pleaseConfirmBelowBeforeSignup: "Please confirm the below before signing up."
|
||||
pleaseConfirmBelowBeforeSignup: "To register on this server, you must review and agree to the following:"
|
||||
pleaseAgreeAllToContinue: "You must agree to all above fields to continue."
|
||||
continue: "Continue"
|
||||
preservedUsernames: "Reserved usernames"
|
||||
|
@ -1999,7 +1999,7 @@ _deck:
|
|||
introduction: "Create the perfect interface for you by arranging columns freely!"
|
||||
introduction2: "Click on the + on the right of the screen to add new colums whenever you want."
|
||||
widgetsIntroduction: "Please select \"Edit widgets\" in the column menu and add a widget."
|
||||
useSimpleUiForNonRootPages: "Use simple UI for navigated pages"
|
||||
useSimpleUiForNonRootPages: "Use simplified UI to navigated pages"
|
||||
_columns:
|
||||
main: "Main"
|
||||
widgets: "Widgets"
|
||||
|
|
|
@ -58,10 +58,10 @@ copyNoteId: "Copier l'identifiant de la note"
|
|||
copyFileId: "Copier l'identifiant du fichier"
|
||||
copyFolderId: "Copier l'identifiant du dossier"
|
||||
copyProfileUrl: "Copier l'URL du profil"
|
||||
searchUser: "Chercher un·e utilisateur·rice"
|
||||
searchUser: "Chercher un utilisateur"
|
||||
reply: "Répondre"
|
||||
loadMore: "Afficher plus …"
|
||||
showMore: "Afficher plus …"
|
||||
showMore: "Voir plus"
|
||||
showLess: "Fermer"
|
||||
youGotNewFollower: "Vous suit"
|
||||
receiveFollowRequest: "Demande d’abonnement reçue"
|
||||
|
@ -74,16 +74,16 @@ import: "Importer"
|
|||
export: "Exporter"
|
||||
files: "Fichiers"
|
||||
download: "Télécharger"
|
||||
driveFileDeleteConfirm: "Êtes-vous sûr·e de vouloir supprimer le fichier \"{name}\" ? Les notes liées à ce fichier seront aussi supprimées."
|
||||
driveFileDeleteConfirm: "Êtes-vous sûr de vouloir supprimer le fichier \"{name}\" ? Les notes liées à ce fichier seront aussi supprimées."
|
||||
unfollowConfirm: "Désirez-vous vous désabonner de {name} ?"
|
||||
exportRequested: "Vous avez demandé une exportation. L’opération pourrait prendre un peu de temps. Une terminée, le fichier résultant sera ajouté au Drive."
|
||||
importRequested: "Vous avez initié un import. Cela pourrait prendre un peu de temps."
|
||||
lists: "Listes"
|
||||
noLists: "Vous n’avez aucune liste"
|
||||
note: "Notes"
|
||||
note: "Note"
|
||||
notes: "Notes"
|
||||
following: "Abonnements"
|
||||
followers: "Abonné·e·s"
|
||||
followers: "Abonnés"
|
||||
followsYou: "Vous suit"
|
||||
createList: "Créer une liste"
|
||||
manageLists: "Gérer les listes"
|
||||
|
@ -122,7 +122,7 @@ reaction: "Réactions"
|
|||
reactions: "Réactions"
|
||||
reactionSetting: "Réactions à afficher 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."
|
||||
rememberNoteVisibility: "Se souvenir de la visibilité des notes"
|
||||
attachCancel: "Supprimer le fichier attaché"
|
||||
markAsSensitive: "Marquer comme sensible"
|
||||
unmarkAsSensitive: "Supprimer le marquage comme sensible"
|
||||
|
|
|
@ -1 +1,103 @@
|
|||
---
|
||||
_lang_: "Japán"
|
||||
monthAndDay: "{month}.{day}."
|
||||
search: "Keresés"
|
||||
notifications: "Értesítések"
|
||||
username: "Felhasználónév"
|
||||
password: "Jelszó"
|
||||
forgotPassword: "Elfelejtett jelszó"
|
||||
ok: "OK"
|
||||
gotIt: "Rendben"
|
||||
cancel: "Mégse"
|
||||
noThankYou: "Nem, köszönöm"
|
||||
enterUsername: "Felhasználónév megadása"
|
||||
renotedBy: "{user} Renotolta"
|
||||
noNotes: "Nincs Note"
|
||||
noNotifications: "Nincs értesítés"
|
||||
instance: "Szerver"
|
||||
settings: "Beállítások"
|
||||
notificationSettings: "Értesítés beállításai"
|
||||
basicSettings: "Alapbeállítás"
|
||||
otherSettings: "Egyéb beállítások"
|
||||
openInWindow: "Megnyitás ablakban"
|
||||
profile: "Saját profil"
|
||||
timeline: "Idővonal"
|
||||
noAccountDescription: "Nincs leírás"
|
||||
login: "Bejelentkezés"
|
||||
loggingIn: "Belépés"
|
||||
logout: "Kijelentkezés"
|
||||
signup: "Regisztráció"
|
||||
uploading: "Feltöltés"
|
||||
save: "Mentés"
|
||||
users: "Felhasználók"
|
||||
addUser: "Felhasználó hozzáadása"
|
||||
favorite: "Kedvencek"
|
||||
favorites: "Kedvencek"
|
||||
unfavorite: "Törlés a kedvencek közül."
|
||||
favorited: "Kedvencek közé rakva."
|
||||
alreadyFavorited: "Már a kedvencek között van."
|
||||
cantFavorite: "Nem sikerült a kedvencek közé rakni."
|
||||
pin: "Rögzítés"
|
||||
unpin: "Rögzítés feloldása"
|
||||
copyContent: "Tartalom másolása"
|
||||
copyLink: "Hivatkozás Másolása"
|
||||
delete: "Törlés"
|
||||
deleteAndEdit: "Törlés és szerkesztés"
|
||||
deleteAndEditConfirm: "Biztosan törlöd ezt a jegyzetet és újrafogalmazza? Így eveszíted az összes reakciót, renote-ot és választ."
|
||||
addToList: "Hozzáadás a listákhoz"
|
||||
privacy: "Adatvédelem"
|
||||
makeFollowManuallyApprove: "Csak jóváhagyással követhetnek"
|
||||
defaultNoteVisibility: "Alapértelmezett láthatóság"
|
||||
follow: "Követés"
|
||||
followRequest: "Követés kérése"
|
||||
followRequests: "Követési kérések"
|
||||
unfollow: "Követés visszavonása"
|
||||
followRequestPending: "Függőben levő követési kérés"
|
||||
enterEmoji: "Írj egy emoji-t"
|
||||
renote: "Renote"
|
||||
unrenote: "Renote visszavonása"
|
||||
renoted: "Renotolva"
|
||||
cantRenote: "Nem lehet Renotolni"
|
||||
cantReRenote: "A Renote nem renotálható"
|
||||
quote: "Idézet"
|
||||
inChannelRenote: "Csak csatornán bellüli Renote"
|
||||
inChannelQuote: "Csak csatornán bellüli idézet"
|
||||
pinnedNote: "Csatolt jegyzet"
|
||||
pinned: "Rögzítés"
|
||||
you: "Te"
|
||||
clickToShow: "Kattints ide"
|
||||
sensitive: "Érzékeny"
|
||||
add: "Hozzáad"
|
||||
reaction: "Reakciók"
|
||||
reactions: "Reakciók"
|
||||
instances: "Szerver"
|
||||
remove: "Törlés"
|
||||
pinnedNotes: "Csatolt jegyzet"
|
||||
smtpUser: "Felhasználónév"
|
||||
smtpPass: "Jelszó"
|
||||
user: "Felhasználók"
|
||||
searchByGoogle: "Keresés"
|
||||
_theme:
|
||||
keys:
|
||||
renote: "Renote"
|
||||
_sfx:
|
||||
notification: "Értesítések"
|
||||
_2fa:
|
||||
renewTOTPCancel: "Nem, köszönöm"
|
||||
_widgets:
|
||||
profile: "Saját profil"
|
||||
notifications: "Értesítések"
|
||||
timeline: "Idővonal"
|
||||
_profile:
|
||||
username: "Felhasználónév"
|
||||
_notification:
|
||||
_types:
|
||||
renote: "Renote"
|
||||
quote: "Idézet"
|
||||
reaction: "Reakciók"
|
||||
_actions:
|
||||
renote: "Renote"
|
||||
_deck:
|
||||
_columns:
|
||||
notifications: "Értesítések"
|
||||
tl: "Idővonal"
|
||||
|
|
|
@ -49,11 +49,15 @@ delete: "Hapus"
|
|||
deleteAndEdit: "Hapus dan sunting"
|
||||
deleteAndEditConfirm: "Apakah kamu yakin ingin menghapus note ini dan menyuntingnya? Kamu akan kehilangan semua reaksi, renote dan balasan di note ini."
|
||||
addToList: "Tambahkan ke daftar"
|
||||
addToAntenna: "Tambahkan ke Antena"
|
||||
sendMessage: "Kirim pesan"
|
||||
copyRSS: "Salin RSS"
|
||||
copyUsername: "Salin nama pengguna"
|
||||
copyUserId: "Salin ID pengguna"
|
||||
copyNoteId: "Salin ID catatan"
|
||||
copyFileId: "Salin Berkas"
|
||||
copyFolderId: "Salin Folder"
|
||||
copyProfileUrl: "Salin Alamat Web Profil"
|
||||
searchUser: "Cari pengguna"
|
||||
reply: "Balas"
|
||||
loadMore: "Selebihnya"
|
||||
|
@ -313,6 +317,7 @@ copyUrl: "Salin tautan"
|
|||
rename: "Ubah nama"
|
||||
avatar: "Avatar"
|
||||
banner: "Banner"
|
||||
displayOfSensitiveMedia: "Tampilkan media NSFW"
|
||||
whenServerDisconnected: "Ketika kehilangan koneksi dengan peladen"
|
||||
disconnectedFromServer: "Terputus koneksi dari peladen"
|
||||
reload: "Muat ulang"
|
||||
|
@ -1066,6 +1071,11 @@ installed: "Terpasang"
|
|||
branding: "Merek"
|
||||
enableServerMachineStats: "Tampilkan informasi mesin peladen menjadi publik"
|
||||
enableIdenticonGeneration: "Nyalakan pembuatan Identicon per pengguna"
|
||||
turnOffToImprovePerformance: "Matikan untuk tingkatkan performa."
|
||||
createInviteCode: "Buat kode undangan"
|
||||
inviteCodeCreated: "Kode undangan dibuat"
|
||||
inviteLimitExceeded: "Kamu telah mencapai jumlah maksimum kode undangan yang dapat dibuat."
|
||||
expirationDate: "Tanggal kedaluwarsa"
|
||||
_initialAccountSetting:
|
||||
accountCreated: "Akun kamu telah sukses dibuat!"
|
||||
letsStartAccountSetup: "Untuk pemula, ayo atur profilmu dulu."
|
||||
|
|
|
@ -621,10 +621,10 @@ smtpHost: "Server remoto"
|
|||
smtpPort: "Porta"
|
||||
smtpUser: "Nome utente"
|
||||
smtpPass: "Password"
|
||||
emptyToDisableSmtpAuth: "Lasciare il nome utente e la password vuoti per disabilitare la verifica SMTP"
|
||||
smtpSecure: "Usare la porta SSL/TLS implicito per le connessioni SMTP"
|
||||
emptyToDisableSmtpAuth: "Lasciare i campi vuoti se non c'è autenticazione SMTP"
|
||||
smtpSecure: "Usare SSL/TLS implicito per le connessioni SMTP"
|
||||
smtpSecureInfo: "Disabilitare quando è attivo STARTTLS."
|
||||
testEmail: "Testa la consegna di posta elettronica"
|
||||
testEmail: "Verifica il funzionamento"
|
||||
wordMute: "Filtri parole"
|
||||
regexpError: "errore regex"
|
||||
regexpErrorDescription: "Si è verificato un errore nell'espressione regolare alla riga {line} della parola muta {tab}:"
|
||||
|
@ -1091,6 +1091,9 @@ usedAt: "Usato alle"
|
|||
unused: "Inutilizzato"
|
||||
used: "Utilizzato"
|
||||
expired: "Scaduto"
|
||||
doYouAgree: "Sei d'accordo?"
|
||||
beSureToReadThisAsItIsImportant: "Si prega di leggere attentamente perché è importante."
|
||||
iHaveReadXCarefullyAndAgree: "Ho letto accuratamente \"{x}\" e sono d'accordo."
|
||||
_initialAccountSetting:
|
||||
accountCreated: "Il tuo profilo è stato creato!"
|
||||
letsStartAccountSetup: "Per iniziare, impostiamo il tuo profilo."
|
||||
|
@ -1444,7 +1447,7 @@ _sensitiveMediaDetection:
|
|||
_emailUnavailable:
|
||||
used: "Email già in uso"
|
||||
format: "Formato email non valido"
|
||||
disposable: "Email non riutilizzabile"
|
||||
disposable: "Indirizzo email non utilizzabile"
|
||||
mx: "Server email non corretto"
|
||||
smtp: "Il server email non risponde"
|
||||
_ffVisibility:
|
||||
|
|
|
@ -713,6 +713,8 @@ pageLikedCount: "Número de curtidas recebidas nas suas páginas"
|
|||
contact: "Contato"
|
||||
useSystemFont: "Utilizar a fonte padrão do sistema"
|
||||
clips: "Clipe"
|
||||
experimentalFeatures: "Funcionalidades Experimentais"
|
||||
experimental: "Experimental"
|
||||
duplicate: "Duplicar"
|
||||
left: "Esquerda"
|
||||
wide: "Largo"
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
---
|
||||
_lang_: "O'zbek tili"
|
||||
headlineMisskey: "Qaydlar bilan bog'langan tarmoq"
|
||||
introMisskey: "Xush kelibsiz! Misskey ochiq kodli, markazlashmagan mikroblogging xizmati.\nO'zingizni fikrlaringizni atrofingizdagilar bilan ulashish uchun \"Qaydlar\" yarating. 📡\nUstiga-ustak, \"Reaktsiyalar\" yordamida siz boshqalarning xatlari haqidagi o'zingizni xissiyotlaringizni tez ravishda bildiring. 👍\nQani, yangi dunyoni kashf qilaylik! 🚀"
|
||||
headlineMisskey: "Qaydlar tarmog'i"
|
||||
introMisskey: "Xush kelibsiz! Misskey ochiq kodli, markazlashmagan mikroblogging xizmati.\nO'zingizni fikrlaringizni atrofingizdagilar bilan ulashish uchun \"Qaydlar\" yarating. 📡\nUstiga-ustak, \"Reaktsiyalar\" yordamida siz boshqalarning xatlari haqidagi o'zingizni xissiyotlaringizni bildiring. 👍\nQani, yangi dunyoni kashf qilaylik! 🚀"
|
||||
poweredByMisskeyDescription: "{name} ochiq manbali <b>Misskey</b>(\"Misskey instance\" deb ataladi) platformasi tomonidan qurilgan servislardan biri. "
|
||||
monthAndDay: "{day}/{month}"
|
||||
search: "Izlash"
|
||||
|
@ -17,10 +17,10 @@ noThankYou: "Hozir emas"
|
|||
enterUsername: "Foydalanuvchini nomini kiriting"
|
||||
renotedBy: "{user} tomonidan qayta qayd etildi"
|
||||
noNotes: "Qaydlar mavjud emas"
|
||||
noNotifications: "Xabarnomalar mavjud emas"
|
||||
noNotifications: "Xabarlar mavjud emas"
|
||||
instance: "Server"
|
||||
settings: "Sozalamalar"
|
||||
notificationSettings: "Xabarnomalar sozlamalari"
|
||||
settings: "Sozlamalar"
|
||||
notificationSettings: "Xabarnoma sozlamalari"
|
||||
basicSettings: "Asosiy sozlamalar"
|
||||
otherSettings: "Qo‘shimcha sozlamalar"
|
||||
openInWindow: "Yangi oynada ochish"
|
||||
|
@ -36,18 +36,18 @@ save: "Saqlash"
|
|||
users: "Foydalanuvchilar"
|
||||
addUser: "Foydalanuvchi qo'shish"
|
||||
favorite: "Sevimli"
|
||||
favorites: "Sevimli"
|
||||
favorites: "Sevimlilar"
|
||||
unfavorite: "Sevimlidan chiqarish"
|
||||
favorited: "sevimli"
|
||||
alreadyFavorited: "allaqachon sevimlilar orasida"
|
||||
cantFavorite: "sevimlilarga qo'shib bo'lmadi"
|
||||
pin: "Profilga qadab qo'yish"
|
||||
unpin: "Profildan olib tashlash"
|
||||
copyContent: "Tarkibini nusxalash"
|
||||
copyContent: "kontentni nusxalash"
|
||||
copyLink: "Havolani nuxalash"
|
||||
delete: "O'chirib tashlash"
|
||||
deleteAndEdit: "O'chirish va tahrirlash"
|
||||
deleteAndEditConfirm: "O'chirib, tahrirlamoqchiligingizga ishonchingiz komilmi? Siz bu qaydga tegishli barcha reaktsiyalar, qayta qaydlar va javoblarni yo'qotasiz."
|
||||
deleteAndEditConfirm: "O'chirib, tahrirlamoqchiligingizga ishonchingiz komilmi? Siz bu qaydga tegishli barcha reaktsiyalar va javoblarni yo'qotasiz."
|
||||
addToList: "Ro‘yxatga qo‘shish"
|
||||
addToAntenna: "Antennaga qo'shish"
|
||||
sendMessage: "Xabar yuborish"
|
||||
|
@ -74,7 +74,7 @@ import: "Import"
|
|||
export: "Eksport"
|
||||
files: "Fayllar"
|
||||
download: "Yuklab olish"
|
||||
driveFileDeleteConfirm: "\"{name}\" o'chirib tashlamoqchimisiz? Buni ishlatadihan kontentni hammasidan o'chadi"
|
||||
driveFileDeleteConfirm: "\"{name}\" o'chirib tashlamoqchimisiz? Ushbu fayldan foydalanadigan har qanday kontent ham oʻchiriladi."
|
||||
unfollowConfirm: "{name}ga obunani bekor qilmoqchimisiz?"
|
||||
exportRequested: "Eksport so'raldi. Bu ozgina vaqt olishi mumkin. Tugatilgandan so'ng sizning Diskingizga qo'shiladi"
|
||||
importRequested: "Import so'raldi. Bu ozgina vaqt olishi mumkin."
|
||||
|
@ -91,26 +91,28 @@ error: "Xato"
|
|||
somethingHappened: "Xatolik yuz berdi"
|
||||
retry: "Qayta urinib ko'rish"
|
||||
pageLoadError: "Sahifani yuklayotganda xatolik yuz berdi"
|
||||
pageLoadErrorDescription: "Buni odatda tarmoq muammolari yoki browser keshi keltirib chiqaradi. Keshni tozalab, keyinroq urinib ko'ring"
|
||||
pageLoadErrorDescription: "Buni odatda tarmoq muammolarni yoki browser keshi keltirib chiqaradi. Keshni tozalab, keyinroq urinib ko'ring"
|
||||
serverIsDead: "Server javob bermayabdi. Iltimos kuting va keyinroq urinib ko'ring"
|
||||
youShouldUpgradeClient: "Iltimos, ushbu sahifani ko'rish uchun sahifani yangilang."
|
||||
enterListName: "Ro'yxatga nom kiriting"
|
||||
privacy: "Maxfiylik"
|
||||
makeFollowManuallyApprove: "Yopiq akkaunt"
|
||||
defaultNoteVisibility: "Standart ko'rinish"
|
||||
follow: "Obuna bo‘lish"
|
||||
followRequest: "Obuna bo'lish uchun ruxsat olish"
|
||||
followRequests: "Obuna bo'lmoqchilar"
|
||||
unfollow: "obunani bker qilish"
|
||||
unfollow: "obunani bekor qilish"
|
||||
followRequestPending: "obuna bo'lishga ruxsat kutilmoqda"
|
||||
enterEmoji: "Emojini kiriting"
|
||||
renote: "Qayta qayd etish"
|
||||
unrenote: "Qayta qayd etishni bekor qilish"
|
||||
renoted: "Qayta qayd etildi"
|
||||
cantRenote: "Qyta qayd etish mumkin emas"
|
||||
cantRenote: "Qayta qayd etish mumkin emas"
|
||||
cantReRenote: "Repostni qayta joylashtirish mumkin emas."
|
||||
quote: "Iqtibos keltirish"
|
||||
inChannelRenote: "Faqat kanalga qayta qayd etish"
|
||||
inChannelQuote: "Kanaldagi eslatmalar"
|
||||
pinnedNote: "Qadanlgan qayd"
|
||||
pinnedNote: "Qadalgan qayd"
|
||||
pinned: "Profilga qadab qo'yish"
|
||||
you: "Siz"
|
||||
clickToShow: "Ko'rsatish uchun bosing"
|
||||
|
@ -118,9 +120,12 @@ sensitive: "Sezuvchan"
|
|||
add: "Qo'shish"
|
||||
reaction: "Reaktsiyalar"
|
||||
reactions: "Reaktsiyalar"
|
||||
reactionSetting: "Reaksiyalar ro'yxatingiz "
|
||||
reactionSetting: "Reaksiyalar ro'yxati"
|
||||
reactionSettingDescription2: "Qayta tartiblash uchun ushlab turib siljiting, oʻchirish uchun bosing, qoʻshish uchun “+” tugmasini bosing."
|
||||
rememberNoteVisibility: "Qaydning ko'rinish sozlamarini eslab qolish"
|
||||
attachCancel: "Qo'shimchani olib tashlash"
|
||||
markAsSensitive: "\"Hamma ko'rishi mumkin emas\" deb belgilash"
|
||||
unmarkAsSensitive: "\"Hamma ko'rishi mumkin\" deb belgilash"
|
||||
enterFileName: "Fayl nomini kiriting"
|
||||
mute: "Ovozni o‘chirish"
|
||||
unmute: "Ovozni yoqish"
|
||||
|
@ -152,11 +157,14 @@ settingGuide: "Tavsiya qilingan sozlamalar"
|
|||
cacheRemoteFiles: "Tashqi fayllarni keshlash"
|
||||
cacheRemoteFilesDescription: "Ushbu sozlama o'chirilgan bo'lsa tashqi fayllar bevosita tashqi serverdan yuklanadi. Buni o'chirish ombor ishlatilishini kamaytiradi, lekin traffikni ko'paytiradi, chunki eskizlar generatsiya qilinmaydi."
|
||||
cacheRemoteSensitiveFiles: "Tashqi fayllarni keshlash"
|
||||
cacheRemoteSensitiveFilesDescription: "Bu sozlama oʻchiq boʻlsa, \"barcha ko'rishi mumkin bo'lmagan\" fayllar keshlashsiz toʻgʻridan-toʻgʻri masofaviy serverdan yuklanadi."
|
||||
flagAsBot: "Ushbu akkauntni bot sifatida belgilash"
|
||||
flagAsBotDescription: "Agar bu akkaunt bot tomonidan boshqaralayotgan bo'ls, bu sozlamani yoqing. Sozlama yoqilganda, boshqa foydalanuvchilar uchun belgi sifatida ishlaydi, va Misskey ichki tizimlari bu akkauntni bot ekanini biladi."
|
||||
flagAsBotDescription: "Agar bu akkaunt bot tomonidan boshqaralayotgan bo'lsa, bu sozlamani yoqing. Sozlama yoqilganda, boshqa foydalanuvchilar uchun belgi sifatida ishlaydi, va Misskey ichki tizimlari bu akkauntni bot ekanini biladi."
|
||||
flagAsCat: "Bu akkauntni mushuk sifatida belgilash"
|
||||
flagAsCatDescription: "Ushbu akkauntni mushuk sifatida belgilash uchun ushbu sozlamani yoqing."
|
||||
flagShowTimelineReplies: "Javbolarni xronogoliya bo'yicha ko'rsatish"
|
||||
flagShowTimelineReplies: "Javoblarni xronogoliya bo'yicha ko'rsatish"
|
||||
flagShowTimelineRepliesDescription: "Bu parametr yoqilganda, lentada foydalanuvchi xabarlariga javob berilgan xabarlar ham ko'rinadi"
|
||||
autoAcceptFollowed: "Obunachilarni avtomatik ravishda qabul qilish"
|
||||
addAccount: "Akkaunt qo'shish"
|
||||
reloadAccountsList: "Hisoblar ro'yxatini yangilash"
|
||||
loginFailed: "Tizimga kirishda xatolik yuz berdi"
|
||||
|
@ -169,6 +177,7 @@ searchWith: "Izlash: {q}"
|
|||
youHaveNoLists: "Sizda hech qanday ro'yxatlar mavjud emas"
|
||||
followConfirm: "{name} ga obuna bo'lmoqchimisiz?"
|
||||
proxyAccount: "Proksi hisob"
|
||||
proxyAccountDescription: "Proksi-hisob qaydnomasi - bu ma'lum shartlar ostida foydalanuvchi uchun masofaviy kuzatuvchi sifatida ishlaydigan hisob. Misol uchun, foydalanuvchi uzoq foydalanuvchini roʻyxatga qoʻyganda, roʻyxatdagi foydalanuvchini hech kim kuzatib turmasa, faoliyat serverga yetkazilmaydi, shuning uchun biz proksi hisobi ularning oʻrniga ularni kuzatishini xohlaymiz."
|
||||
host: "Host"
|
||||
selectUser: "Foydalanuvchini tanlang"
|
||||
recipient: "Qabul qiluvchi"
|
||||
|
@ -176,6 +185,7 @@ annotation: "Izohlar"
|
|||
federation: "Federatsiya"
|
||||
instances: "Serverlar"
|
||||
registeredAt: "Ro'yhatdan o'tgan"
|
||||
latestRequestReceivedAt: "Oxirgi qabul qilingan so'rov"
|
||||
latestStatus: "So'nggi holat"
|
||||
storageUsage: "Ishlatilgan xotira"
|
||||
charts: "Diagrammalar"
|
||||
|
@ -197,8 +207,11 @@ instanceInfo: "Instans haqida ma'lumot"
|
|||
statistics: "Statistika"
|
||||
clearQueue: "Navbatni tozalash"
|
||||
clearQueueConfirmTitle: "Navbatni tozalamoqchimisiz?"
|
||||
clearQueueConfirmText: "Yetkazib berilmagan xabarlar yetkazilmaydi. Odatda buni qilish shart emas."
|
||||
clearCachedFiles: "Keshni tozalash"
|
||||
clearCachedFilesConfirm: "Barcha keshlangan masofaviy fayllar oʻchirilsinmi?"
|
||||
blockedInstances: "Bloklangan serverlar"
|
||||
blockedInstancesDescription: "Bloklanmoqchi bo'lgan serverlaringiz hostlarini yangi qatorlar bilan ajrating. Bloklangan server bu server bilan o‘zaro aloqada bo‘lmaydi. Subdomenlar ham bloklangan."
|
||||
muteAndBlock: "Ovozsiz va Bloklangan"
|
||||
mutedUsers: "Ovozsiz foydalanuvchilar"
|
||||
blockedUsers: "Bloklangan foydalanuvchilar"
|
||||
|
@ -214,12 +227,16 @@ default: "Odatiy"
|
|||
defaultValueIs: "Sukut bo'yicha: {value}"
|
||||
noCustomEmojis: "Emojilar mavjud emas"
|
||||
noJobs: "Vazifalar yo'q"
|
||||
federating: "Ittifoqdosh"
|
||||
blocked: "Bloklangan"
|
||||
suspended: "To'xtatilgan"
|
||||
all: "Barcha"
|
||||
subscribing: "Obuna bo'lish"
|
||||
publishing: "Yuborilmoqda"
|
||||
notResponding: "Javob bermayapti"
|
||||
instanceFollowing: "server obuna bo'ladi"
|
||||
instanceFollowers: "server obunachisi"
|
||||
instanceUsers: "server foydalanuvchisi"
|
||||
changePassword: "Parolni o‘zgartirish"
|
||||
security: "Xavfsizlik"
|
||||
retypedNotMatch: "Maydonlar mos kelmayapti"
|
||||
|
@ -228,6 +245,7 @@ newPassword: "Yangi parol"
|
|||
newPasswordRetype: "Yangi parolni boshqatdan tering"
|
||||
attachFile: "Fayl biriktirish"
|
||||
more: "Ko'proq!"
|
||||
featured: "ta'kidlash"
|
||||
noSuchUser: "Foydalanuvchi topilmadi"
|
||||
lookup: "So'rov"
|
||||
announcements: "Bildirishnomalar"
|
||||
|
@ -241,9 +259,13 @@ saved: "Saqlandi"
|
|||
messaging: "Suhbat"
|
||||
upload: "Yuklash"
|
||||
keepOriginalUploading: "Asl rasmni saqlang"
|
||||
fromUrl: "URL dan"
|
||||
uploadFromUrlDescription: "Yuklamoqchi bo'lgan faylingizga havola"
|
||||
uploadFromUrlRequested: "yuklab olish so'ralgan"
|
||||
uploadFromUrlMayTakeTime: "Yuklash tugallanishi uchun biroz vaqt ketishi mumkin."
|
||||
explore: "Ko'rib chiqish"
|
||||
messageRead: "O‘qildi"
|
||||
noMoreHistory: "Buning ortida hech qanday hikoya yo'q"
|
||||
startMessaging: "Yangi suhbatni boshlash"
|
||||
nUsersRead: "{n} tomonidan o'qildi"
|
||||
agreeTo: "Men {0} ga roziman"
|
||||
|
@ -267,6 +289,7 @@ light: "Yorug'"
|
|||
dark: "Qorongʻi"
|
||||
lightThemes: "Yorug‘ rang sxemasi"
|
||||
darkThemes: "Qorong'i rang sxemasi"
|
||||
syncDeviceDarkMode: "Qurilmangizning qorong‘i rejimi bilan sinxronlashtiring"
|
||||
drive: "Disk"
|
||||
fileName: "Fayl nomi"
|
||||
selectFile: "Faylni tanlang"
|
||||
|
@ -283,11 +306,14 @@ emptyDrive: "Diskingiz bo'sh"
|
|||
emptyFolder: "Ushbu papka bo'sh"
|
||||
unableToDelete: "O'chirilmadi"
|
||||
inputNewFileName: "Yangi fayl nomini kiriting"
|
||||
inputNewDescription: "Iltimos, yangi sarlavha kiriting."
|
||||
inputNewFolderName: "Yangi papka nomini kiriting"
|
||||
hasChildFilesOrFolders: "Bu papka boʻsh emas va uni oʻchirib boʻlmaydi."
|
||||
copyUrl: "Bog'lamadan nusxa olish"
|
||||
rename: "Qayta nomlash"
|
||||
avatar: "Avatar"
|
||||
banner: "Banner"
|
||||
whenServerDisconnected: "server bilan aloqa uzilganda"
|
||||
disconnectedFromServer: "Server bilan ulanish uzulib qoldi"
|
||||
reload: "Yangilash"
|
||||
doNothing: "E'tiborsiz qoldirish"
|
||||
|
@ -318,10 +344,12 @@ registration: "Ro'yxatdan o'tish"
|
|||
enableRegistration: "Ro'yxatdan o'tishni yoqing"
|
||||
invite: "Taklif qilish"
|
||||
inMb: "Megabaytlarda"
|
||||
iconUrl: "Ikonkaning URL manzili (masalan: favicon)"
|
||||
backgroundImageUrl: "Fon rasmi URL manzili"
|
||||
basicInfo: "Asosiy ma'lumot"
|
||||
pinnedUsers: "Qadalgan foydalanuvchilar"
|
||||
pinnedPages: "Qadalgan Sahifalar"
|
||||
pinnedNotes: "Qadanlgan qayd"
|
||||
pinnedNotes: "Qadalgan qayd"
|
||||
hcaptcha: "hCaptcha"
|
||||
enableHcaptcha: "hCaptchani yoqish"
|
||||
hcaptchaSiteKey: "Sayt kaliti"
|
||||
|
@ -336,7 +364,12 @@ antennas: "Antennalar"
|
|||
manageAntennas: "Antennalarni boshqarish"
|
||||
name: "Ism"
|
||||
antennaSource: "Antenna manbai"
|
||||
antennaKeywords: "Kalit so'zni qabul qilish"
|
||||
notifyAntenna: "Yangi qaydlar haqida menga xabar bering"
|
||||
connectedTo: "Quyidagi akkountlarga ulangan"
|
||||
silence: "Sukunat"
|
||||
popularUsers: "Mashhur foydalanuvchilar."
|
||||
recentlyRegisteredUsers: "Yaqinda ro'yxatdan o'tgan foydalanuvchilar"
|
||||
exploreUsersCount: "{count} ta foydalanuvchi bor"
|
||||
popularTags: "Ommabop teglar"
|
||||
userList: "Ro'yxatlar"
|
||||
|
@ -348,20 +381,56 @@ token: "Tasdiqlash"
|
|||
totp: "Autentifikatsiya ilovasi"
|
||||
totpDescription: "Bir martalik parollarni kiritish uchun autentifikatsiya ilovasidan foydalaning"
|
||||
moderator: "Moderator"
|
||||
nUsersMentioned: "{n} tomonidan chop etilgan"
|
||||
resetPassword: "Parolni tiklash"
|
||||
share: "Yuborish"
|
||||
notFound: "Topilmadi"
|
||||
uploadFolder: "Jildni yuklash"
|
||||
cacheClear: "Keshni tozalash"
|
||||
markAsReadAllTalkMessages: "Barcha suhbatlarni o'qilgan deb belgilang"
|
||||
help: "Yordam"
|
||||
inputMessageHere: "Xabar kiriting"
|
||||
close: "Yopish"
|
||||
invites: "Taklif qilish"
|
||||
members: "A'zolar"
|
||||
transfer: "topshiriq"
|
||||
title: "Sarlavha"
|
||||
text: "Matn"
|
||||
enable: "Yoqish"
|
||||
next: "Keyingisi"
|
||||
retype: "Qayta kiriting"
|
||||
onlyOneFileCanBeAttached: "Faqat bitta faylni biriktirish mumkin"
|
||||
signinRequired: "Davom etishdan oldin ro'yhatdan o'tishingiz yoki tizimga kirishingiz kerak"
|
||||
invitations: "Taklif qilish"
|
||||
invitationCode: "taklif qilish kodi"
|
||||
checking: "Tekshirilmoqda"
|
||||
available: "Mavjud"
|
||||
unavailable: "Mavjud emas"
|
||||
usernameInvalidFormat: "Siz a~z, A~Z, 0~9, _ dan foydalanishingiz mumkin"
|
||||
tooShort: "Juda qisqa"
|
||||
tooLong: "juda uzun"
|
||||
weakPassword: "Zaif parol"
|
||||
normalPassword: "Oddiy parol"
|
||||
strongPassword: "Kuchli parol"
|
||||
passwordMatched: "Mos keldi"
|
||||
passwordNotMatched: "mos kelmadi"
|
||||
signinWith: "{x} bilan tizimga kirish"
|
||||
signinFailed: "Tizimga kirishda xatolik yuz berdi. Iltimos, foydalanuvchi nomingiz va parolingizni tekshiring."
|
||||
or: "yoki"
|
||||
language: "til"
|
||||
aboutX: "{x} haqida"
|
||||
showNoteActionsOnlyHover: "Eslatma amallarini faqat sichqonchani olib borganda ko‘rsatish"
|
||||
noHistory: "Tarix yo'q"
|
||||
signinHistory: "kirish tarixi"
|
||||
category: "kategoriya"
|
||||
tags: "teg"
|
||||
docSource: "Ushbu hujjatning manbasi"
|
||||
createAccount: "Akkaunt yaratish"
|
||||
existingAccount: "mavjud akkaunt"
|
||||
regenerate: "regeneratsiya"
|
||||
fontSize: "shrift hajmi"
|
||||
limitTo: "{x} gacha"
|
||||
noFollowRequests: "obuna uchun so'rov yo'q"
|
||||
dashboard: "Boshqaruv paneli"
|
||||
local: "Mahalliy"
|
||||
total: "Jami"
|
||||
|
@ -370,17 +439,46 @@ dayOverDayChanges: "Kecha bo'lgan o'zgarishlar"
|
|||
appearance: "Tasgqi ko'rinish"
|
||||
clientSettings: "Klient sozlamalari"
|
||||
accountSettings: "Profil sozlamalari"
|
||||
promotion: "rag'batlantirish"
|
||||
promote: "targ'ib qilish"
|
||||
numberOfDays: "kunlar soni"
|
||||
hideThisNote: "bu eslatmani yashiring"
|
||||
showFeaturedNotesInTimeline: "Tanlangan qaydlarni Timelineda ko'rsatish"
|
||||
objectStorageBaseUrl: "Asosiy URL"
|
||||
objectStorageRegion: "Mintaqa"
|
||||
objectStorageUseSSL: "SSL dan foydalaning"
|
||||
sounds: "Tovushlar"
|
||||
sound: "ovoz"
|
||||
none: "Hechnima"
|
||||
volume: "Ovoz balandligi"
|
||||
details: "Batafsil"
|
||||
output: "Chiqish"
|
||||
deleteAllFiles: "barcha fayllarni o'chirish"
|
||||
deleteAllFilesConfirm: "Barcha fayllar oʻchirilsinmi?"
|
||||
userSuspended: "Bu foydalanuvchi muzlatilgan."
|
||||
yourAccountSuspendedTitle: "akkaunt muzlatilgan"
|
||||
yourAccountSuspendedDescription: "Ushbu akkaunt serverning xizmat ko'rsatish shartlarini buzish kabi sabablarga ko'ra to'xtatilgan. Tafsilotlar uchun administratoringizga murojaat qiling. Iltimos, yangi akkaunt yaratmang."
|
||||
tokenRevoked: "token yaroqsiz"
|
||||
tokenRevokedDescription: "Kirish tokeningizni muddati tugagan. Iltimos, qaytadan kiring."
|
||||
accountDeleted: "akkaunt o'chirildi"
|
||||
accountDeletedDescription: "Bu akkaunt oʻchirildi."
|
||||
menu: "Menyu"
|
||||
divider: "Ajratrmoq"
|
||||
addItem: "Element qo'shish"
|
||||
serviceworkerInfo: "bildirishnomalar uchun yoqilgan bo'lishi kerak."
|
||||
deletedNote: "Oʻchirilgan post"
|
||||
themeEditor: "Rang sxemasi muharriri"
|
||||
describeFile: "sarlavha qo'shing"
|
||||
enterFileDescription: "sarlavha kiriting"
|
||||
author: "muallif"
|
||||
leaveConfirm: "Sizda saqlanmagan oʻzgarishlar bor. Bekor qilinsinmi?"
|
||||
useBlurEffectForModal: "Modal uchun xiralashtirish effektidan foydalaning"
|
||||
width: "kengligi"
|
||||
height: "balandligi"
|
||||
large: "Katta"
|
||||
small: "kichik"
|
||||
enableAll: "Yoqish"
|
||||
disableAll: "hammasini o'chirib qo'ying"
|
||||
edit: "Tahrirlash"
|
||||
email: "Email"
|
||||
smtpHost: "Host"
|
||||
|
@ -464,6 +562,10 @@ _sfx:
|
|||
note: "Qaydlar"
|
||||
notification: "Xabarnomalar"
|
||||
chat: "Suhbat"
|
||||
_ago:
|
||||
minutesAgo: "{n} daqiqa oldin"
|
||||
hoursAgo: "{n} soat oldin"
|
||||
daysAgo: "{n} kun oldin"
|
||||
_2fa:
|
||||
renewTOTPCancel: "Hozir emas"
|
||||
_permissions:
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "misskey",
|
||||
"version": "13.14.1",
|
||||
"version": "13.14.2",
|
||||
"codename": "nasubi",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
|
|
|
@ -28,6 +28,7 @@
|
|||
"@swc/core-android-arm64": "1.3.11",
|
||||
"@swc/core-darwin-arm64": "1.3.56",
|
||||
"@swc/core-darwin-x64": "1.3.56",
|
||||
"@swc/core-freebsd-x64": "1.3.11",
|
||||
"@swc/core-linux-arm-gnueabihf": "1.3.56",
|
||||
"@swc/core-linux-arm64-gnu": "1.3.56",
|
||||
"@swc/core-linux-arm64-musl": "1.3.56",
|
||||
|
@ -39,18 +40,19 @@
|
|||
"@tensorflow/tfjs": "4.4.0",
|
||||
"@tensorflow/tfjs-node": "4.4.0",
|
||||
"bufferutil": "^4.0.7",
|
||||
"slacc-android-arm-eabi": "0.0.9",
|
||||
"slacc-android-arm64": "0.0.9",
|
||||
"slacc-darwin-arm64": "0.0.9",
|
||||
"slacc-darwin-universal": "0.0.9",
|
||||
"slacc-darwin-x64": "0.0.9",
|
||||
"slacc-freebsd-x64": "0.0.9",
|
||||
"slacc-linux-arm-gnueabihf": "0.0.9",
|
||||
"slacc-linux-arm64-gnu": "0.0.9",
|
||||
"slacc-linux-arm64-musl": "0.0.9",
|
||||
"slacc-linux-x64-gnu": "0.0.9",
|
||||
"slacc-win32-arm64-msvc": "0.0.9",
|
||||
"slacc-win32-x64-msvc": "0.0.9",
|
||||
"slacc-android-arm-eabi": "0.0.10",
|
||||
"slacc-android-arm64": "0.0.10",
|
||||
"slacc-darwin-arm64": "0.0.10",
|
||||
"slacc-darwin-universal": "0.0.10",
|
||||
"slacc-darwin-x64": "0.0.10",
|
||||
"slacc-freebsd-x64": "0.0.10",
|
||||
"slacc-linux-arm-gnueabihf": "0.0.10",
|
||||
"slacc-linux-arm64-gnu": "0.0.10",
|
||||
"slacc-linux-arm64-musl": "0.0.10",
|
||||
"slacc-linux-x64-gnu": "0.0.10",
|
||||
"slacc-linux-x64-musl": "0.0.10",
|
||||
"slacc-win32-arm64-msvc": "0.0.10",
|
||||
"slacc-win32-x64-msvc": "0.0.10",
|
||||
"utf-8-validate": "^6.0.3"
|
||||
},
|
||||
"dependencies": {
|
||||
|
@ -141,7 +143,7 @@
|
|||
"semver": "7.5.4",
|
||||
"sharp": "0.32.3",
|
||||
"sharp-read-bmp": "github:misskey-dev/sharp-read-bmp",
|
||||
"slacc": "0.0.9",
|
||||
"slacc": "0.0.10",
|
||||
"strict-event-emitter-types": "2.0.0",
|
||||
"stringz": "2.1.0",
|
||||
"summaly": "github:misskey-dev/summaly",
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
import * as fs from 'node:fs';
|
||||
import * as stream from 'node:stream';
|
||||
import * as util from 'node:util';
|
||||
import * as stream from 'node:stream/promises';
|
||||
import { Inject, Injectable } from '@nestjs/common';
|
||||
import ipaddr from 'ipaddr.js';
|
||||
import chalk from 'chalk';
|
||||
|
@ -14,7 +13,6 @@ import { StatusError } from '@/misc/status-error.js';
|
|||
import { LoggerService } from '@/core/LoggerService.js';
|
||||
import type Logger from '@/logger.js';
|
||||
|
||||
const pipeline = util.promisify(stream.pipeline);
|
||||
import { bindThis } from '@/decorators.js';
|
||||
|
||||
@Injectable()
|
||||
|
@ -102,7 +100,7 @@ export class DownloadService {
|
|||
});
|
||||
|
||||
try {
|
||||
await pipeline(req, fs.createWriteStream(path));
|
||||
await stream.pipeline(req, fs.createWriteStream(path));
|
||||
} catch (e) {
|
||||
if (e instanceof Got.HTTPError) {
|
||||
throw new StatusError(`${e.response.statusCode} ${e.response.statusMessage}`, e.response.statusCode, e.response.statusMessage);
|
||||
|
@ -129,7 +127,7 @@ export class DownloadService {
|
|||
// write content at URL to temp file
|
||||
await this.downloadUrl(url, path);
|
||||
|
||||
const text = await util.promisify(fs.readFile)(path, 'utf8');
|
||||
const text = await fs.promises.readFile(path, 'utf8');
|
||||
|
||||
return text;
|
||||
} finally {
|
||||
|
|
|
@ -1,8 +1,7 @@
|
|||
import * as fs from 'node:fs';
|
||||
import * as crypto from 'node:crypto';
|
||||
import { join } from 'node:path';
|
||||
import * as stream from 'node:stream';
|
||||
import * as util from 'node:util';
|
||||
import * as stream from 'node:stream/promises';
|
||||
import { Injectable } from '@nestjs/common';
|
||||
import { FSWatcher } from 'chokidar';
|
||||
import * as fileType from 'file-type';
|
||||
|
@ -16,8 +15,6 @@ import { createTempDir } from '@/misc/create-temp.js';
|
|||
import { AiService } from '@/core/AiService.js';
|
||||
import { bindThis } from '@/decorators.js';
|
||||
|
||||
const pipeline = util.promisify(stream.pipeline);
|
||||
|
||||
export type FileInfo = {
|
||||
size: number;
|
||||
md5: string;
|
||||
|
@ -371,8 +368,7 @@ export class FileInfoService {
|
|||
*/
|
||||
@bindThis
|
||||
public async getFileSize(path: string): Promise<number> {
|
||||
const getStat = util.promisify(fs.stat);
|
||||
return (await getStat(path)).size;
|
||||
return (await fs.promises.stat(path)).size;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -381,7 +377,7 @@ export class FileInfoService {
|
|||
@bindThis
|
||||
private async calcHash(path: string): Promise<string> {
|
||||
const hash = crypto.createHash('md5').setEncoding('hex');
|
||||
await pipeline(fs.createReadStream(path), hash);
|
||||
await stream.pipeline(fs.createReadStream(path), hash);
|
||||
return hash.read();
|
||||
}
|
||||
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
import { randomUUID } from 'node:crypto';
|
||||
import { pipeline } from 'node:stream';
|
||||
import * as fs from 'node:fs';
|
||||
import { promisify } from 'node:util';
|
||||
import * as stream from 'node:stream/promises';
|
||||
import { Inject, Injectable } from '@nestjs/common';
|
||||
import { DI } from '@/di-symbols.js';
|
||||
import { getIpHash } from '@/misc/get-ip-hash.js';
|
||||
|
@ -21,8 +20,6 @@ import type { FastifyRequest, FastifyReply } from 'fastify';
|
|||
import type { OnApplicationShutdown } from '@nestjs/common';
|
||||
import type { IEndpointMeta, IEndpoint } from './endpoints.js';
|
||||
|
||||
const pump = promisify(pipeline);
|
||||
|
||||
const accessDenied = {
|
||||
message: 'Access denied.',
|
||||
code: 'ACCESS_DENIED',
|
||||
|
@ -138,7 +135,7 @@ export class ApiCallService implements OnApplicationShutdown {
|
|||
}
|
||||
|
||||
const [path] = await createTemp();
|
||||
await pump(multipartData.file, fs.createWriteStream(path));
|
||||
await stream.pipeline(multipartData.file, fs.createWriteStream(path));
|
||||
|
||||
const fields = {} as Record<string, unknown>;
|
||||
for (const [k, v] of Object.entries(multipartData.fields)) {
|
||||
|
|
|
@ -5,6 +5,7 @@ import { Note } from '@/models/entities/Note.js';
|
|||
import { signup, post, uploadUrl, startServer, initTestDb, api, uploadFile } from '../utils.js';
|
||||
import type { INestApplicationContext } from '@nestjs/common';
|
||||
import type * as misskey from 'misskey-js';
|
||||
import { MAX_NOTE_TEXT_LENGTH } from '@/const.js';
|
||||
|
||||
describe('Note', () => {
|
||||
let app: INestApplicationContext;
|
||||
|
@ -164,7 +165,7 @@ describe('Note', () => {
|
|||
|
||||
test('文字数ぎりぎりで怒られない', async () => {
|
||||
const post = {
|
||||
text: '!'.repeat(3000),
|
||||
text: '!'.repeat(MAX_NOTE_TEXT_LENGTH), // 3000文字
|
||||
};
|
||||
const res = await api('/notes/create', post, alice);
|
||||
assert.strictEqual(res.status, 200);
|
||||
|
@ -172,7 +173,7 @@ describe('Note', () => {
|
|||
|
||||
test('文字数オーバーで怒られる', async () => {
|
||||
const post = {
|
||||
text: '!'.repeat(3001),
|
||||
text: '!'.repeat(MAX_NOTE_TEXT_LENGTH + 1), // 3001文字
|
||||
};
|
||||
const res = await api('/notes/create', post, alice);
|
||||
assert.strictEqual(res.status, 400);
|
||||
|
|
|
@ -22,8 +22,43 @@
|
|||
</div>
|
||||
</template>
|
||||
|
||||
<script lang="ts">
|
||||
/**
|
||||
* アスペクト比算出のためにHTMLElement.clientWidthを使うが、
|
||||
* 大変重たいのでコンテナ要素とメディアリスト幅のペアをキャッシュする
|
||||
* (タイムラインごとにスクロールコンテナが存在する前提だが……)
|
||||
*/
|
||||
const widthCache = new Map<Element, number>();
|
||||
|
||||
/**
|
||||
* コンテナ要素がリサイズされたらキャッシュを削除する
|
||||
*/
|
||||
const ro = new ResizeObserver(entries => {
|
||||
for (const entry of entries) {
|
||||
widthCache.delete(entry.target);
|
||||
}
|
||||
});
|
||||
|
||||
async function getClientWidthWithCache(targetEl: HTMLElement, containerEl: HTMLElement, count = 0) {
|
||||
if (_DEV_) console.log('getClientWidthWithCache', { targetEl, containerEl, count, cache: widthCache.get(containerEl) });
|
||||
if (widthCache.has(containerEl)) return widthCache.get(containerEl)!;
|
||||
|
||||
const width = targetEl.clientWidth;
|
||||
|
||||
if (count <= 10 && width < 64) {
|
||||
// widthが64未満はおかしいのでリトライする
|
||||
await new Promise(resolve => setTimeout(resolve, 50));
|
||||
return getClientWidthWithCache(targetEl, containerEl, count + 1);
|
||||
}
|
||||
|
||||
widthCache.set(containerEl, width);
|
||||
ro.observe(containerEl);
|
||||
return width;
|
||||
}
|
||||
</script>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { onMounted, shallowRef } from 'vue';
|
||||
import { onMounted, onUnmounted, shallowRef } from 'vue';
|
||||
import * as misskey from 'misskey-js';
|
||||
import PhotoSwipeLightbox from 'photoswipe/lightbox';
|
||||
import PhotoSwipe from 'photoswipe';
|
||||
|
@ -47,12 +82,19 @@ const gallery = shallowRef<HTMLDivElement>();
|
|||
const pswpZIndex = os.claimZIndex('middle');
|
||||
document.documentElement.style.setProperty('--mk-pswp-root-z-index', pswpZIndex.toString());
|
||||
const count = $computed(() => props.mediaList.filter(media => previewable(media)).length);
|
||||
let lightbox: PhotoSwipeLightbox | null;
|
||||
|
||||
const popstateHandler = (): void => {
|
||||
if (lightbox.pswp && lightbox.pswp.isOpen === true) {
|
||||
lightbox.pswp.close();
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* アスペクト比をmediaListWithOneImageAppearanceに基づいていい感じに調整する
|
||||
* aspect-ratioではなくheightを使う
|
||||
*/
|
||||
function calcAspectRatio() {
|
||||
async function calcAspectRatio() {
|
||||
if (!gallery.value || !root.value) return;
|
||||
|
||||
let img = props.mediaList[0];
|
||||
|
@ -62,7 +104,8 @@ function calcAspectRatio() {
|
|||
return;
|
||||
}
|
||||
|
||||
const width = gallery.value.clientWidth;
|
||||
if (!container.value) container.value = getScrollContainer(root.value);
|
||||
const width = container.value ? await getClientWidthWithCache(root.value, container.value) : root.value.clientWidth;
|
||||
|
||||
const heightMin = (ratio: number) => {
|
||||
const imgResizeRatio = width / img.properties.width;
|
||||
|
@ -84,7 +127,6 @@ function calcAspectRatio() {
|
|||
gallery.value.style.height = heightMin(3 / 2);
|
||||
break;
|
||||
default: {
|
||||
if (!container.value) container.value = getScrollContainer(root.value);
|
||||
const maxHeight = Math.max(64, (container.value ? container.value.clientHeight : getBodyScrollHeight()) * 0.5 || 360);
|
||||
if (width === 0 || !maxHeight) return;
|
||||
const imgResizeRatio = width / img.properties.width;
|
||||
|
@ -102,7 +144,7 @@ function calcAspectRatio() {
|
|||
onMounted(() => {
|
||||
calcAspectRatio();
|
||||
|
||||
const lightbox = new PhotoSwipeLightbox({
|
||||
lightbox = new PhotoSwipeLightbox({
|
||||
dataSource: props.mediaList
|
||||
.filter(media => {
|
||||
if (media.type === 'image/svg+xml') return true; // svgのwebpublicはpngなのでtrue
|
||||
|
@ -186,12 +228,7 @@ onMounted(() => {
|
|||
|
||||
lightbox.init();
|
||||
|
||||
window.addEventListener('popstate', () => {
|
||||
if (lightbox.pswp && lightbox.pswp.isOpen === true) {
|
||||
lightbox.pswp.close();
|
||||
return;
|
||||
}
|
||||
});
|
||||
window.addEventListener('popstate', popstateHandler);
|
||||
|
||||
lightbox.on('beforeOpen', () => {
|
||||
history.pushState(null, '', '#pswp');
|
||||
|
@ -204,6 +241,12 @@ onMounted(() => {
|
|||
});
|
||||
});
|
||||
|
||||
onUnmounted(() => {
|
||||
window.removeEventListener('popstate', popstateHandler);
|
||||
lightbox?.destroy();
|
||||
lightbox = null;
|
||||
});
|
||||
|
||||
const previewable = (file: misskey.entities.DriveFile): boolean => {
|
||||
if (file.type === 'image/svg+xml') return true; // svgのwebpublic/thumbnailはpngなのでtrue
|
||||
// FILE_TYPE_BROWSERSAFEに適合しないものはブラウザで表示するのに不適切
|
||||
|
|
|
@ -431,6 +431,7 @@ defineExpose({
|
|||
margin: auto;
|
||||
padding: 32px;
|
||||
display: flex;
|
||||
overflow: auto;
|
||||
|
||||
@media (max-width: 500px) {
|
||||
padding: 16px;
|
||||
|
|
|
@ -341,6 +341,7 @@ function reply(viaKeyboard = false): void {
|
|||
pleaseLogin();
|
||||
os.post({
|
||||
reply: appearNote,
|
||||
channel: appearNote.channel,
|
||||
animation: !viaKeyboard,
|
||||
}, () => {
|
||||
focus();
|
||||
|
@ -758,6 +759,7 @@ function showReactions(): void {
|
|||
padding: 16px;
|
||||
border: dashed 1px var(--renote);
|
||||
border-radius: 8px;
|
||||
overflow: clip;
|
||||
}
|
||||
|
||||
.channel {
|
||||
|
|
|
@ -320,6 +320,7 @@ function reply(viaKeyboard = false): void {
|
|||
showMovedDialog();
|
||||
os.post({
|
||||
reply: appearNote,
|
||||
channel: appearNote.channel,
|
||||
animation: !viaKeyboard,
|
||||
}, () => {
|
||||
focus();
|
||||
|
@ -595,6 +596,7 @@ if (appearNote.replyId) {
|
|||
padding: 16px;
|
||||
border: dashed 1px var(--renote);
|
||||
border-radius: 8px;
|
||||
overflow: clip;
|
||||
}
|
||||
|
||||
.channel {
|
||||
|
|
|
@ -37,7 +37,6 @@ const showContent = $ref(false);
|
|||
display: flex;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
overflow: clip;
|
||||
font-size: 0.95em;
|
||||
}
|
||||
|
||||
|
|
|
@ -907,7 +907,6 @@ defineExpose({
|
|||
display: flex;
|
||||
flex-wrap: nowrap;
|
||||
gap: 4px;
|
||||
margin-bottom: -10px;
|
||||
}
|
||||
|
||||
.headerLeft {
|
||||
|
@ -1025,7 +1024,7 @@ defineExpose({
|
|||
}
|
||||
|
||||
.targetNote {
|
||||
padding: 10px 20px 16px 20px;
|
||||
padding: 0 20px 16px 20px;
|
||||
}
|
||||
|
||||
.withQuote {
|
||||
|
|
|
@ -110,7 +110,7 @@ const selectAll = () => {
|
|||
if (selectedEmojis.value.length > 0) {
|
||||
selectedEmojis.value = [];
|
||||
} else {
|
||||
selectedEmojis.value = emojisPaginationComponent.value.items.map(item => item.id);
|
||||
selectedEmojis.value = Array.from(emojisPaginationComponent.value.items.values(), item => item.id);
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
@ -166,7 +166,7 @@ const headerActions = $computed(() => []);
|
|||
const headerTabs = $computed(() => []);
|
||||
|
||||
definePageMetadata(computed(() => page ? {
|
||||
title: computed(() => page.title || page.name),
|
||||
title: page.title || page.name,
|
||||
avatar: page.user,
|
||||
path: `/@${page.user.username}/pages/${page.name}`,
|
||||
share: {
|
||||
|
|
|
@ -32,7 +32,7 @@
|
|||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { computed, onMounted, onUnmounted } from 'vue';
|
||||
import { computed, onMounted, onUnmounted, ref } from 'vue';
|
||||
import { v4 as uuid } from 'uuid';
|
||||
import FormSection from '@/components/form/section.vue';
|
||||
import MkButton from '@/components/MkButton.vue';
|
||||
|
@ -93,15 +93,6 @@ const coldDeviceStorageSaveKeys: (keyof typeof ColdDeviceStorage.default)[] = [
|
|||
'darkTheme',
|
||||
'syncDeviceDarkMode',
|
||||
'plugins',
|
||||
'mediaVolume',
|
||||
'sound_masterVolume',
|
||||
'sound_note',
|
||||
'sound_noteMy',
|
||||
'sound_notification',
|
||||
'sound_chat',
|
||||
'sound_chatBg',
|
||||
'sound_antenna',
|
||||
'sound_channel',
|
||||
];
|
||||
|
||||
const scope = ['clientPreferencesProfiles'];
|
||||
|
@ -125,18 +116,18 @@ type Profile = {
|
|||
|
||||
const connection = $i && useStream().useChannel('main');
|
||||
|
||||
let profiles = $ref<Record<string, Profile> | null>(null);
|
||||
const profiles = ref<Record<string, Profile> | null>(null);
|
||||
|
||||
os.api('i/registry/get-all', { scope })
|
||||
.then(res => {
|
||||
profiles = res || {};
|
||||
profiles.value = res || {};
|
||||
});
|
||||
|
||||
function isObject(value: unknown): value is Record<string, unknown> {
|
||||
return value != null && typeof value === 'object' && !Array.isArray(value);
|
||||
}
|
||||
|
||||
function validate(profile: unknown): void {
|
||||
function validate(profile: any): void {
|
||||
if (!isObject(profile)) throw new Error('not an object');
|
||||
|
||||
// Check if unnecessary properties exist
|
||||
|
@ -147,9 +138,9 @@ function validate(profile: unknown): void {
|
|||
|
||||
// Check if createdAt and updatedAt is Date
|
||||
// https://zenn.dev/lollipop_onl/articles/eoz-judge-js-invalid-date
|
||||
if (!profile.createdAt || Number.isNaN(new Date(profile.createdAt).getTime())) throw new Error('createdAt is falsy or not Date');
|
||||
if (!profile.createdAt || Number.isNaN(new Date(profile.createdAt as any).getTime())) throw new Error('createdAt is falsy or not Date');
|
||||
if (profile.updatedAt) {
|
||||
if (Number.isNaN(new Date(profile.updatedAt).getTime())) {
|
||||
if (Number.isNaN(new Date(profile.updatedAt as any).getTime())) {
|
||||
throw new Error('updatedAt is not Date');
|
||||
}
|
||||
} else if (profile.updatedAt !== null) {
|
||||
|
@ -181,14 +172,14 @@ function getSettings(): Profile['settings'] {
|
|||
}
|
||||
|
||||
async function saveNew(): Promise<void> {
|
||||
if (!profiles) return;
|
||||
if (!profiles.value) return;
|
||||
|
||||
const { canceled, result: name } = await os.inputText({
|
||||
title: ts._preferencesBackups.inputName,
|
||||
});
|
||||
if (canceled) return;
|
||||
|
||||
if (Object.values(profiles).some(x => x.name === name)) {
|
||||
if (Object.values(profiles.value).some(x => x.name === name)) {
|
||||
return os.alert({
|
||||
title: ts._preferencesBackups.cannotSave,
|
||||
text: t('_preferencesBackups.nameAlreadyExists', { name }),
|
||||
|
@ -212,7 +203,7 @@ function loadFile(): void {
|
|||
input.type = 'file';
|
||||
input.multiple = false;
|
||||
input.onchange = async () => {
|
||||
if (!profiles) return;
|
||||
if (!profiles.value) return;
|
||||
if (!input.files || input.files.length === 0) return;
|
||||
|
||||
const file = input.files[0];
|
||||
|
@ -233,7 +224,7 @@ function loadFile(): void {
|
|||
return os.alert({
|
||||
type: 'error',
|
||||
title: ts._preferencesBackups.cannotLoad,
|
||||
text: err?.message,
|
||||
text: (err as any)?.message ?? '',
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -252,9 +243,9 @@ function loadFile(): void {
|
|||
}
|
||||
|
||||
async function applyProfile(id: string): Promise<void> {
|
||||
if (!profiles) return;
|
||||
if (!profiles.value) return;
|
||||
|
||||
const profile = profiles[id];
|
||||
const profile = profiles.value[id];
|
||||
|
||||
const { canceled: cancel1 } = await os.confirm({
|
||||
type: 'warning',
|
||||
|
@ -312,23 +303,23 @@ async function applyProfile(id: string): Promise<void> {
|
|||
}
|
||||
|
||||
async function deleteProfile(id: string): Promise<void> {
|
||||
if (!profiles) return;
|
||||
if (!profiles.value) return;
|
||||
|
||||
const { canceled } = await os.confirm({
|
||||
type: 'info',
|
||||
title: ts.delete,
|
||||
text: t('deleteAreYouSure', { x: profiles[id].name }),
|
||||
text: t('deleteAreYouSure', { x: profiles.value[id].name }),
|
||||
});
|
||||
if (canceled) return;
|
||||
|
||||
await os.apiWithDialog('i/registry/remove', { scope, key: id });
|
||||
delete profiles[id];
|
||||
delete profiles.value[id];
|
||||
}
|
||||
|
||||
async function save(id: string): Promise<void> {
|
||||
if (!profiles) return;
|
||||
if (!profiles.value) return;
|
||||
|
||||
const { name, createdAt } = profiles[id];
|
||||
const { name, createdAt } = profiles.value[id];
|
||||
|
||||
const { canceled } = await os.confirm({
|
||||
type: 'info',
|
||||
|
@ -349,25 +340,25 @@ async function save(id: string): Promise<void> {
|
|||
}
|
||||
|
||||
async function rename(id: string): Promise<void> {
|
||||
if (!profiles) return;
|
||||
if (!profiles.value) return;
|
||||
|
||||
const { canceled: cancel1, result: name } = await os.inputText({
|
||||
title: ts._preferencesBackups.inputName,
|
||||
});
|
||||
if (cancel1 || profiles[id].name === name) return;
|
||||
if (cancel1 || profiles.value[id].name === name) return;
|
||||
|
||||
if (Object.values(profiles).some(x => x.name === name)) {
|
||||
if (Object.values(profiles.value).some(x => x.name === name)) {
|
||||
return os.alert({
|
||||
title: ts._preferencesBackups.cannotSave,
|
||||
text: t('_preferencesBackups.nameAlreadyExists', { name }),
|
||||
});
|
||||
}
|
||||
|
||||
const registry = Object.assign({}, { ...profiles[id] });
|
||||
const registry = Object.assign({}, { ...profiles.value[id] });
|
||||
|
||||
const { canceled: cancel2 } = await os.confirm({
|
||||
type: 'info',
|
||||
title: ts._preferencesBackups.rename,
|
||||
title: ts.rename,
|
||||
text: t('_preferencesBackups.renameConfirm', { old: registry.name, new: name }),
|
||||
});
|
||||
if (cancel2) return;
|
||||
|
@ -377,7 +368,7 @@ async function rename(id: string): Promise<void> {
|
|||
}
|
||||
|
||||
function menu(ev: MouseEvent, profileId: string) {
|
||||
if (!profiles) return;
|
||||
if (!profiles.value) return;
|
||||
|
||||
return os.popupMenu([{
|
||||
text: ts._preferencesBackups.apply,
|
||||
|
@ -387,8 +378,8 @@ function menu(ev: MouseEvent, profileId: string) {
|
|||
type: 'a',
|
||||
text: ts.download,
|
||||
icon: 'ti ti-download',
|
||||
href: URL.createObjectURL(new Blob([JSON.stringify(profiles[profileId], null, 2)], { type: 'application/json' })),
|
||||
download: `${profiles[profileId].name}.json`,
|
||||
href: URL.createObjectURL(new Blob([JSON.stringify(profiles.value[profileId], null, 2)], { type: 'application/json' })),
|
||||
download: `${profiles.value[profileId].name}.json`,
|
||||
}, null, {
|
||||
text: ts.rename,
|
||||
icon: 'ti ti-forms',
|
||||
|
@ -402,16 +393,16 @@ function menu(ev: MouseEvent, profileId: string) {
|
|||
icon: 'ti ti-trash',
|
||||
action: () => deleteProfile(profileId),
|
||||
danger: true,
|
||||
}], ev.currentTarget ?? ev.target);
|
||||
}], (ev.currentTarget ?? ev.target ?? undefined) as unknown as HTMLElement | undefined);
|
||||
}
|
||||
|
||||
onMounted(() => {
|
||||
// streamingのuser storage updateイベントを監視して更新
|
||||
connection?.on('registryUpdated', ({ scope: recievedScope, key, value }) => {
|
||||
if (!recievedScope || recievedScope.length !== scope.length || recievedScope[0] !== scope[0]) return;
|
||||
if (!profiles) return;
|
||||
if (!profiles.value) return;
|
||||
|
||||
profiles[key] = value;
|
||||
profiles.value[key] = value;
|
||||
});
|
||||
});
|
||||
|
||||
|
|
|
@ -11,7 +11,6 @@ export function createAiScriptEnv(opts) {
|
|||
USER_NAME: $i ? values.STR($i.name) : values.NULL,
|
||||
USER_USERNAME: $i ? values.STR($i.username) : values.NULL,
|
||||
CUSTOM_EMOJIS: utils.jsToVal(customEmojis.value),
|
||||
CURRENT_URL: values.STR(window.location.href),
|
||||
'Mk:dialog': values.FN_NATIVE(async ([title, text, type]) => {
|
||||
await os.alert({
|
||||
type: type ? type.value : 'info',
|
||||
|
@ -48,5 +47,8 @@ export function createAiScriptEnv(opts) {
|
|||
utils.assertString(key);
|
||||
return utils.jsToVal(JSON.parse(miLocalStorage.getItem(`aiscript:${opts.storageKey}:${key.value}`)));
|
||||
}),
|
||||
'Mk:url': values.FN_NATIVE(() => {
|
||||
return values.STR(window.location.href);
|
||||
}),
|
||||
};
|
||||
}
|
||||
|
|
193
pnpm-lock.yaml
193
pnpm-lock.yaml
|
@ -1,4 +1,4 @@
|
|||
lockfileVersion: '6.1'
|
||||
lockfileVersion: '6.0'
|
||||
|
||||
settings:
|
||||
autoInstallPeers: true
|
||||
|
@ -330,8 +330,8 @@ importers:
|
|||
specifier: github:misskey-dev/sharp-read-bmp
|
||||
version: github.com/misskey-dev/sharp-read-bmp/02d9dc189fa7df0c4bea09330be26741772dac01
|
||||
slacc:
|
||||
specifier: 0.0.9
|
||||
version: 0.0.9
|
||||
specifier: 0.0.10
|
||||
version: 0.0.10
|
||||
strict-event-emitter-types:
|
||||
specifier: 2.0.0
|
||||
version: 2.0.0
|
||||
|
@ -340,7 +340,7 @@ importers:
|
|||
version: 2.1.0
|
||||
summaly:
|
||||
specifier: github:misskey-dev/summaly
|
||||
version: github.com/misskey-dev/summaly/77dd5654bb82280b38c1f50e51a771c33f3df503
|
||||
version: github.com/misskey-dev/summaly/089a0ad8e8c780e5c088b1c528aa95c5827cbdcc
|
||||
systeminformation:
|
||||
specifier: 5.18.7
|
||||
version: 5.18.7
|
||||
|
@ -390,6 +390,9 @@ importers:
|
|||
'@swc/core-darwin-x64':
|
||||
specifier: 1.3.56
|
||||
version: 1.3.56
|
||||
'@swc/core-freebsd-x64':
|
||||
specifier: 1.3.11
|
||||
version: 1.3.11
|
||||
'@swc/core-linux-arm-gnueabihf':
|
||||
specifier: 1.3.56
|
||||
version: 1.3.56
|
||||
|
@ -424,41 +427,44 @@ importers:
|
|||
specifier: ^4.0.7
|
||||
version: 4.0.7
|
||||
slacc-android-arm-eabi:
|
||||
specifier: 0.0.9
|
||||
version: 0.0.9
|
||||
specifier: 0.0.10
|
||||
version: 0.0.10
|
||||
slacc-android-arm64:
|
||||
specifier: 0.0.9
|
||||
version: 0.0.9
|
||||
specifier: 0.0.10
|
||||
version: 0.0.10
|
||||
slacc-darwin-arm64:
|
||||
specifier: 0.0.9
|
||||
version: 0.0.9
|
||||
specifier: 0.0.10
|
||||
version: 0.0.10
|
||||
slacc-darwin-universal:
|
||||
specifier: 0.0.9
|
||||
version: 0.0.9
|
||||
specifier: 0.0.10
|
||||
version: 0.0.10
|
||||
slacc-darwin-x64:
|
||||
specifier: 0.0.9
|
||||
version: 0.0.9
|
||||
specifier: 0.0.10
|
||||
version: 0.0.10
|
||||
slacc-freebsd-x64:
|
||||
specifier: 0.0.9
|
||||
version: 0.0.9
|
||||
specifier: 0.0.10
|
||||
version: 0.0.10
|
||||
slacc-linux-arm-gnueabihf:
|
||||
specifier: 0.0.9
|
||||
version: 0.0.9
|
||||
specifier: 0.0.10
|
||||
version: 0.0.10
|
||||
slacc-linux-arm64-gnu:
|
||||
specifier: 0.0.9
|
||||
version: 0.0.9
|
||||
specifier: 0.0.10
|
||||
version: 0.0.10
|
||||
slacc-linux-arm64-musl:
|
||||
specifier: 0.0.9
|
||||
version: 0.0.9
|
||||
specifier: 0.0.10
|
||||
version: 0.0.10
|
||||
slacc-linux-x64-gnu:
|
||||
specifier: 0.0.9
|
||||
version: 0.0.9
|
||||
specifier: 0.0.10
|
||||
version: 0.0.10
|
||||
slacc-linux-x64-musl:
|
||||
specifier: 0.0.10
|
||||
version: 0.0.10
|
||||
slacc-win32-arm64-msvc:
|
||||
specifier: 0.0.9
|
||||
version: 0.0.9
|
||||
specifier: 0.0.10
|
||||
version: 0.0.10
|
||||
slacc-win32-x64-msvc:
|
||||
specifier: 0.0.9
|
||||
version: 0.0.9
|
||||
specifier: 0.0.10
|
||||
version: 0.0.10
|
||||
utf-8-validate:
|
||||
specifier: ^6.0.3
|
||||
version: 6.0.3
|
||||
|
@ -955,7 +961,7 @@ importers:
|
|||
version: github.com/misskey-dev/storybook-addon-misskey-theme/cf583db098365b2ccc81a82f63ca9c93bc32b640(@storybook/blocks@7.0.27)(@storybook/components@7.1.0)(@storybook/core-events@7.0.27)(@storybook/manager-api@7.0.27)(@storybook/preview-api@7.0.27)(@storybook/theming@7.0.27)(@storybook/types@7.0.27)(react-dom@18.2.0)(react@18.2.0)
|
||||
summaly:
|
||||
specifier: github:misskey-dev/summaly
|
||||
version: github.com/misskey-dev/summaly/77dd5654bb82280b38c1f50e51a771c33f3df503
|
||||
version: github.com/misskey-dev/summaly/089a0ad8e8c780e5c088b1c528aa95c5827cbdcc
|
||||
vite-plugin-turbosnap:
|
||||
specifier: 1.0.2
|
||||
version: 1.0.2
|
||||
|
@ -976,7 +982,7 @@ importers:
|
|||
dependencies:
|
||||
'@swc/cli':
|
||||
specifier: 0.1.62
|
||||
version: 0.1.62(@swc/core@1.3.70)(chokidar@3.5.3)
|
||||
version: 0.1.62(@swc/core@1.3.69)
|
||||
'@swc/core':
|
||||
specifier: 1.3.69
|
||||
version: 1.3.69
|
||||
|
@ -7222,12 +7228,32 @@ packages:
|
|||
ts-dedent: 2.2.0
|
||||
type-fest: 2.19.0
|
||||
vue: 3.3.4
|
||||
vue-component-type-helpers: 1.8.5
|
||||
vue-component-type-helpers: 1.8.6
|
||||
transitivePeerDependencies:
|
||||
- encoding
|
||||
- supports-color
|
||||
dev: true
|
||||
|
||||
/@swc/cli@0.1.62(@swc/core@1.3.69):
|
||||
resolution: {integrity: sha512-kOFLjKY3XH1DWLfXL1/B5MizeNorHR8wHKEi92S/Zi9Md/AK17KSqR8MgyRJ6C1fhKHvbBCl8wboyKAFXStkYw==}
|
||||
engines: {node: '>= 12.13'}
|
||||
hasBin: true
|
||||
peerDependencies:
|
||||
'@swc/core': ^1.2.66
|
||||
chokidar: ^3.5.1
|
||||
peerDependenciesMeta:
|
||||
chokidar:
|
||||
optional: true
|
||||
dependencies:
|
||||
'@mole-inc/bin-wrapper': 8.0.1
|
||||
'@swc/core': 1.3.69
|
||||
commander: 7.2.0
|
||||
fast-glob: 3.2.12
|
||||
semver: 7.5.4
|
||||
slash: 3.0.0
|
||||
source-map: 0.7.4
|
||||
dev: false
|
||||
|
||||
/@swc/cli@0.1.62(@swc/core@1.3.70)(chokidar@3.5.3):
|
||||
resolution: {integrity: sha512-kOFLjKY3XH1DWLfXL1/B5MizeNorHR8wHKEi92S/Zi9Md/AK17KSqR8MgyRJ6C1fhKHvbBCl8wboyKAFXStkYw==}
|
||||
engines: {node: '>= 12.13'}
|
||||
|
@ -7310,6 +7336,17 @@ packages:
|
|||
requiresBuild: true
|
||||
optional: true
|
||||
|
||||
/@swc/core-freebsd-x64@1.3.11:
|
||||
resolution: {integrity: sha512-02uqYktPp6WmZfZ2Crc/yIVOcgANtjo8ciHcT7yLHvz7v+S7gx1I2tyNGUFtTX5hcR2IFNGrL8Yj4DvpTABFHg==}
|
||||
engines: {node: '>=10'}
|
||||
cpu: [x64]
|
||||
os: [freebsd]
|
||||
requiresBuild: true
|
||||
dependencies:
|
||||
'@swc/wasm': 1.2.130
|
||||
dev: false
|
||||
optional: true
|
||||
|
||||
/@swc/core-linux-arm-gnueabihf@1.3.56:
|
||||
resolution: {integrity: sha512-LWwPo6NnJkH01+ukqvkoNIOpMdw+Zundm4vBeicwyVrkP+mC3kwVfi03TUFpQUz3kRKdw/QEnxGTj+MouCPbtw==}
|
||||
engines: {node: '>=10'}
|
||||
|
@ -19097,8 +19134,8 @@ packages:
|
|||
resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==}
|
||||
dev: true
|
||||
|
||||
/slacc-android-arm-eabi@0.0.9:
|
||||
resolution: {integrity: sha512-T5P5kJ5UwW3UMoPXqqHh9TpCnuCJDCoivoiuONDXrYPYKF8sKDPMVVg1x/KU9/m7e562x9vAMBrIyqFFbEW0Jw==}
|
||||
/slacc-android-arm-eabi@0.0.10:
|
||||
resolution: {integrity: sha512-U3dVBuM1m8rT1D/w6S4knJ/uscNwsCR+MKxSQFbgDJEh8Atv+ovuC+FMGuaBT4iOQjpMj5dWSsN3ZPjVeo3hgA==}
|
||||
engines: {node: '>= 10'}
|
||||
cpu: [arm]
|
||||
os: [android]
|
||||
|
@ -19106,8 +19143,8 @@ packages:
|
|||
dev: false
|
||||
optional: true
|
||||
|
||||
/slacc-android-arm64@0.0.9:
|
||||
resolution: {integrity: sha512-bcKB3ukcI5wWJa2clK/5cy6a4TKp51DRkdRuFgKLG05gBj1jbH+7+8iBPojljeY28LC2frmwVHGj3vDmkFUeYg==}
|
||||
/slacc-android-arm64@0.0.10:
|
||||
resolution: {integrity: sha512-guVp88sW+4j1clTSXMzyDJHG8ondVnd8/FMKXIOfzKCEwSwX3uBxsuyHqtGvXkEwyZAGsBUy13Ei/PZAwElwYA==}
|
||||
engines: {node: '>= 10'}
|
||||
cpu: [arm64]
|
||||
os: [android]
|
||||
|
@ -19115,8 +19152,8 @@ packages:
|
|||
dev: false
|
||||
optional: true
|
||||
|
||||
/slacc-darwin-arm64@0.0.9:
|
||||
resolution: {integrity: sha512-EspX0Hj6t0Afxbsyc6rY9mTOUQQrPVtWPwwNRaljGRorPyRDDefrU1OnJXRcwcIp0oCZrRrivRYlO7lai63EMw==}
|
||||
/slacc-darwin-arm64@0.0.10:
|
||||
resolution: {integrity: sha512-633qnOMTP7egvd5IeljAOku0tnxlBXSoCRu7HiT0yeXxN9y5Tbg2X2/FaRzstI36lClfIJ0Lavne4mOw/90z9A==}
|
||||
engines: {node: '>= 10'}
|
||||
cpu: [arm64]
|
||||
os: [darwin]
|
||||
|
@ -19124,16 +19161,16 @@ packages:
|
|||
dev: false
|
||||
optional: true
|
||||
|
||||
/slacc-darwin-universal@0.0.9:
|
||||
resolution: {integrity: sha512-oQySg+9MPyKI9rwwwhmSZQkPks2/rq3k1P5HKwUgnaFZDvDtS/hpDycB3BxSDqWdD5kVA8PLCVa8pt9T5KyKfg==}
|
||||
/slacc-darwin-universal@0.0.10:
|
||||
resolution: {integrity: sha512-x5kEqRMTEQTi3NCufPEukWvaWqcOL+7EkP18ZCCiajcWH83jWnT8DOSGOmmLYdrXd0B7ZZcbd8GyLp3i5zu8PA==}
|
||||
engines: {node: '>= 10'}
|
||||
os: [darwin]
|
||||
requiresBuild: true
|
||||
dev: false
|
||||
optional: true
|
||||
|
||||
/slacc-darwin-x64@0.0.9:
|
||||
resolution: {integrity: sha512-9Xp7mVKKF2QvDiIZOBgwsDdL/+95KBiFTdbo+XtH6YKoh6zNw0aPpkA3JojsdSMYdGHUrxl8b7avhzI0USqeEg==}
|
||||
/slacc-darwin-x64@0.0.10:
|
||||
resolution: {integrity: sha512-5gQYboy/4T6Bj3sVXiCpM3EvF1sK/Zx1Nq5YBMUuYb2GzrIwywghHbCD6bK4JYGvNsLN7r4PC45ZUB4gVkU8yA==}
|
||||
engines: {node: '>= 10'}
|
||||
cpu: [x64]
|
||||
os: [darwin]
|
||||
|
@ -19141,8 +19178,8 @@ packages:
|
|||
dev: false
|
||||
optional: true
|
||||
|
||||
/slacc-freebsd-x64@0.0.9:
|
||||
resolution: {integrity: sha512-jRd8WmXZLU2mcxV7SN8CzZzGiwbpxtaTjLwrYMTryQZ2TFr1xd1r5mQfTN5sBiwu3tnyK5dmHnRAPy+215mOkQ==}
|
||||
/slacc-freebsd-x64@0.0.10:
|
||||
resolution: {integrity: sha512-Jmi5YszELef/aCzYto+LwiNGhCk5mrlJfTJU/pOI91HBbrZlV+aRyIsPCcxAMg5yPsPQuyRljrDouVYrPzNmjw==}
|
||||
engines: {node: '>= 10'}
|
||||
cpu: [x64]
|
||||
os: [freebsd]
|
||||
|
@ -19150,8 +19187,8 @@ packages:
|
|||
dev: false
|
||||
optional: true
|
||||
|
||||
/slacc-linux-arm-gnueabihf@0.0.9:
|
||||
resolution: {integrity: sha512-nhP6+jgd30sq+zFxFW7fGhnPwCfCCU0l1JKk3ORGFMl7wH7ippTDd1xGapKq7N+zgdgURbyj83P3wWb2gcRZ1w==}
|
||||
/slacc-linux-arm-gnueabihf@0.0.10:
|
||||
resolution: {integrity: sha512-9lTM3DGtISQlZYSKrMuQyKCiUnHYRcy04mY6HF1ywYcQ2sqfv3bKEnrypVewepIFUtytlIGzkgpiUAk/ghYGoA==}
|
||||
engines: {node: '>= 10'}
|
||||
cpu: [arm]
|
||||
os: [linux]
|
||||
|
@ -19159,8 +19196,8 @@ packages:
|
|||
dev: false
|
||||
optional: true
|
||||
|
||||
/slacc-linux-arm64-gnu@0.0.9:
|
||||
resolution: {integrity: sha512-x7v0rDe0KNVe1Hl6/XCtkCpqdT283pyVaUmk+af0AnoesNRjYEK8DBc8i53N4nhotionHzPIZfu5gPAFkf6RhA==}
|
||||
/slacc-linux-arm64-gnu@0.0.10:
|
||||
resolution: {integrity: sha512-qXrNWSINXOjHRO3c9idGm8DeOAjAjG1xHY8WiplCoHWgsZf3E7V+sPhWqRUaGQEvftsJg40+cFYREBaLQhpAVQ==}
|
||||
engines: {node: '>= 10'}
|
||||
cpu: [arm64]
|
||||
os: [linux]
|
||||
|
@ -19168,8 +19205,8 @@ packages:
|
|||
dev: false
|
||||
optional: true
|
||||
|
||||
/slacc-linux-arm64-musl@0.0.9:
|
||||
resolution: {integrity: sha512-jyq/ylITHIXTQX5ZqAbi7Mn5SdRgYJi+uEoUCi5UhoXb9LjpNzhkFuY29Je3IkVIIV7AEcAxIlvjdymXdzcF5w==}
|
||||
/slacc-linux-arm64-musl@0.0.10:
|
||||
resolution: {integrity: sha512-3lUX7752f6Okn54aONioaA+9M5TvifqXBAart+u2lNXEdWmmh003cVSU2Vcwg7nJ9lLHtju2DkDmKKfJjFuShA==}
|
||||
engines: {node: '>= 10'}
|
||||
cpu: [arm64]
|
||||
os: [linux]
|
||||
|
@ -19177,8 +19214,8 @@ packages:
|
|||
dev: false
|
||||
optional: true
|
||||
|
||||
/slacc-linux-x64-gnu@0.0.9:
|
||||
resolution: {integrity: sha512-Xs/F81H7cKhlIBigFID6CJlgjy0NeDUGV1CI1MI5mSVHsVI8dUO8zXWETjo6o8krJPgfjT5Jd4tAgvUFct5hng==}
|
||||
/slacc-linux-x64-gnu@0.0.10:
|
||||
resolution: {integrity: sha512-BxxvylF9zlOLRLCpiyMvKTIUpdLlpetNBJ+DSMDh5+Ggq+AmQz2NUGawmcBJw58F8nMCj9TpWLlGNWc2AuY+JQ==}
|
||||
engines: {node: '>= 10'}
|
||||
cpu: [x64]
|
||||
os: [linux]
|
||||
|
@ -19186,8 +19223,17 @@ packages:
|
|||
dev: false
|
||||
optional: true
|
||||
|
||||
/slacc-win32-arm64-msvc@0.0.9:
|
||||
resolution: {integrity: sha512-C+H0VkKbEEnRbcXRIG5rIaXlg7IZw3o1BbvqA71B8ouQRCu/dNRuH9EQsOYXWltndY42zZi8IupNIwydTUg+Mg==}
|
||||
/slacc-linux-x64-musl@0.0.10:
|
||||
resolution: {integrity: sha512-TYJi8LOtJiTFcZvka4du7bMjF9Bz1RHRwyLnScr5E5yjjgoLRrsvgSu7bxp87xH+rgJ3CdEwE3w3Ux8EiewHpA==}
|
||||
engines: {node: '>= 10'}
|
||||
cpu: [x64]
|
||||
os: [linux]
|
||||
requiresBuild: true
|
||||
dev: false
|
||||
optional: true
|
||||
|
||||
/slacc-win32-arm64-msvc@0.0.10:
|
||||
resolution: {integrity: sha512-1CHPLiDB4exzFyT5ndtJDsRRhBxNg8mGz6I6eJEMjelGkJR2KZPT9LZuby/1bS/bcVOr7zuJvGNfbEGBeHRwPQ==}
|
||||
engines: {node: '>= 10'}
|
||||
cpu: [arm64]
|
||||
os: [win32]
|
||||
|
@ -19195,8 +19241,8 @@ packages:
|
|||
dev: false
|
||||
optional: true
|
||||
|
||||
/slacc-win32-x64-msvc@0.0.9:
|
||||
resolution: {integrity: sha512-bElMnBbeMatCtVp2/+hBS6Z+846nQImEul9nBEr4gfezHotOM6MqR6PI7UQQzGhozpgwiDg2l1ub1MdOIgYizg==}
|
||||
/slacc-win32-x64-msvc@0.0.10:
|
||||
resolution: {integrity: sha512-wAXBy5yKCAzfYWjVlyPpu6PscD+j4QhCQEy0wZaVuzNyx60HpXWcTZxxVnMR730Y7tfc7cBxSI8NtRb8RguSgg==}
|
||||
engines: {node: '>= 10'}
|
||||
cpu: [x64]
|
||||
os: [win32]
|
||||
|
@ -19204,22 +19250,23 @@ packages:
|
|||
dev: false
|
||||
optional: true
|
||||
|
||||
/slacc@0.0.9:
|
||||
resolution: {integrity: sha512-BwhjD3daQB3VIx7GxkComMYrnkWuMt4YmDAueMMchblfUUBbP8EcuonJ1Bz9nqtRn1mAH2YPrrRDP95akM+ZuQ==}
|
||||
/slacc@0.0.10:
|
||||
resolution: {integrity: sha512-2jgms2/4mLr1AMq4oloAwPdKQK9RQvgmoEpMIxvC+HeHMwCR0XxB7gr/rKo4iLOKJ6gx02mnBU0JHWcTIonpmA==}
|
||||
engines: {node: '>= 10'}
|
||||
optionalDependencies:
|
||||
slacc-android-arm-eabi: 0.0.9
|
||||
slacc-android-arm64: 0.0.9
|
||||
slacc-darwin-arm64: 0.0.9
|
||||
slacc-darwin-universal: 0.0.9
|
||||
slacc-darwin-x64: 0.0.9
|
||||
slacc-freebsd-x64: 0.0.9
|
||||
slacc-linux-arm-gnueabihf: 0.0.9
|
||||
slacc-linux-arm64-gnu: 0.0.9
|
||||
slacc-linux-arm64-musl: 0.0.9
|
||||
slacc-linux-x64-gnu: 0.0.9
|
||||
slacc-win32-arm64-msvc: 0.0.9
|
||||
slacc-win32-x64-msvc: 0.0.9
|
||||
slacc-android-arm-eabi: 0.0.10
|
||||
slacc-android-arm64: 0.0.10
|
||||
slacc-darwin-arm64: 0.0.10
|
||||
slacc-darwin-universal: 0.0.10
|
||||
slacc-darwin-x64: 0.0.10
|
||||
slacc-freebsd-x64: 0.0.10
|
||||
slacc-linux-arm-gnueabihf: 0.0.10
|
||||
slacc-linux-arm64-gnu: 0.0.10
|
||||
slacc-linux-arm64-musl: 0.0.10
|
||||
slacc-linux-x64-gnu: 0.0.10
|
||||
slacc-linux-x64-musl: 0.0.10
|
||||
slacc-win32-arm64-msvc: 0.0.10
|
||||
slacc-win32-x64-msvc: 0.0.10
|
||||
dev: false
|
||||
|
||||
/slash@3.0.0:
|
||||
|
@ -20982,8 +21029,8 @@ packages:
|
|||
resolution: {integrity: sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==}
|
||||
engines: {node: '>=0.10.0'}
|
||||
|
||||
/vue-component-type-helpers@1.8.5:
|
||||
resolution: {integrity: sha512-SBNsskF7L5x604V1BN4ZzdTtWgCqo5cfl//YuBXtc3LLyPdFRqUeJn2Q+FPNmCtl23LBT2tH79M/uv13fL0MgQ==}
|
||||
/vue-component-type-helpers@1.8.6:
|
||||
resolution: {integrity: sha512-vKWeoKVEV51ZzoB8+UY0apMXiifbPQxWlcZlvQRDVdiOHmEkCBClWeIGbqQ8cCR9P4j+oCyLW87sraZFMz/qnA==}
|
||||
dev: true
|
||||
|
||||
/vue-docgen-api@4.64.1(vue@3.3.4):
|
||||
|
@ -21585,8 +21632,8 @@ packages:
|
|||
react-dom: 18.2.0(react@18.2.0)
|
||||
dev: true
|
||||
|
||||
github.com/misskey-dev/summaly/77dd5654bb82280b38c1f50e51a771c33f3df503:
|
||||
resolution: {tarball: https://codeload.github.com/misskey-dev/summaly/tar.gz/77dd5654bb82280b38c1f50e51a771c33f3df503}
|
||||
github.com/misskey-dev/summaly/089a0ad8e8c780e5c088b1c528aa95c5827cbdcc:
|
||||
resolution: {tarball: https://codeload.github.com/misskey-dev/summaly/tar.gz/089a0ad8e8c780e5c088b1c528aa95c5827cbdcc}
|
||||
name: summaly
|
||||
version: 4.0.2
|
||||
dependencies:
|
||||
|
|
Loading…
Reference in New Issue