{{ i18n.ts.pinnedNotes }}
-
+
- props.clipId, async () => {
favorited = clip.isFavorited;
}, {
immediate: true,
-});
+});
provide('currentClip', $$(clip));
diff --git a/packages/frontend/src/pages/custom-emojis-manager.vue b/packages/frontend/src/pages/custom-emojis-manager.vue
index 901fbc1eea1b..dde4d67f1801 100644
--- a/packages/frontend/src/pages/custom-emojis-manager.vue
+++ b/packages/frontend/src/pages/custom-emojis-manager.vue
@@ -311,13 +311,13 @@ definePageMetadata(computed(() => ({
.empty {
margin: var(--margin);
}
-
+
.ldhfsamy {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(190px, 1fr));
grid-gap: 12px;
margin: var(--margin) 0;
-
+
> .emoji {
display: flex;
align-items: center;
diff --git a/packages/frontend/src/pages/follow.vue b/packages/frontend/src/pages/follow.vue
index d14b66336476..2d08b66868f1 100644
--- a/packages/frontend/src/pages/follow.vue
+++ b/packages/frontend/src/pages/follow.vue
@@ -20,7 +20,7 @@ async function follow(user): Promise {
window.close();
return;
}
-
+
os.apiWithDialog('following/create', {
userId: user.id,
});
diff --git a/packages/frontend/src/pages/instance-info.vue b/packages/frontend/src/pages/instance-info.vue
index 83997b255549..ac765e88b744 100644
--- a/packages/frontend/src/pages/instance-info.vue
+++ b/packages/frontend/src/pages/instance-info.vue
@@ -49,7 +49,7 @@
N/A
-
+
Following (Pub)
diff --git a/packages/frontend/src/pages/list.vue b/packages/frontend/src/pages/list.vue
index 40934fb71d5d..3307eef3594b 100644
--- a/packages/frontend/src/pages/list.vue
+++ b/packages/frontend/src/pages/list.vue
@@ -112,7 +112,7 @@ definePageMetadata(computed(() => list ? {
flex: 1;
min-width: 0;
margin-right: 8px;
-
+
&:hover {
text-decoration: none;
}
diff --git a/packages/frontend/src/pages/registry.keys.vue b/packages/frontend/src/pages/registry.keys.vue
index b1d41fe2c779..59f1f7fdb5e9 100644
--- a/packages/frontend/src/pages/registry.keys.vue
+++ b/packages/frontend/src/pages/registry.keys.vue
@@ -13,7 +13,7 @@
{{ scope.join('/') }}
-
+
{{ i18n.ts._registry.createKey }}
diff --git a/packages/frontend/src/pages/registry.value.vue b/packages/frontend/src/pages/registry.value.vue
index 513a2f8febc9..ed01381d5768 100644
--- a/packages/frontend/src/pages/registry.value.vue
+++ b/packages/frontend/src/pages/registry.value.vue
@@ -20,7 +20,7 @@
{{ key }}
-
+
{{ i18n.ts.value }} (JSON)
diff --git a/packages/frontend/src/pages/reset-password.vue b/packages/frontend/src/pages/reset-password.vue
index 9d5730731433..fbd109b3f0c0 100644
--- a/packages/frontend/src/pages/reset-password.vue
+++ b/packages/frontend/src/pages/reset-password.vue
@@ -7,7 +7,7 @@
{{ i18n.ts.newPassword }}
-
+
{{ i18n.ts.save }}
diff --git a/packages/frontend/src/pages/settings/drive-cleaner.vue b/packages/frontend/src/pages/settings/drive-cleaner.vue
index 8178343bbb42..98471e94dbba 100644
--- a/packages/frontend/src/pages/settings/drive-cleaner.vue
+++ b/packages/frontend/src/pages/settings/drive-cleaner.vue
@@ -80,7 +80,7 @@ watch(sortModeSelect, () => {
sortMode.value = '+size';
fetchDriveInfo();
break;
-
+
case 'createdAtAsc':
sortMode.value = '-createdAt';
fetchDriveInfo();
diff --git a/packages/frontend/src/pages/settings/navbar.vue b/packages/frontend/src/pages/settings/navbar.vue
index 8780bfbc1e4e..f0e9a1c3d989 100644
--- a/packages/frontend/src/pages/settings/navbar.vue
+++ b/packages/frontend/src/pages/settings/navbar.vue
@@ -3,7 +3,7 @@
{{ i18n.ts.navbar }}
- {
defaultStore.set(key, settings.hot[key]);
}
}
-
+
// coldDeviceStorage
for (const key of coldDeviceStorageSaveKeys) {
if (settings.cold[key] !== undefined) {
diff --git a/packages/frontend/src/pages/settings/privacy.vue b/packages/frontend/src/pages/settings/privacy.vue
index 7fd4d6d34e1e..88d109c02114 100644
--- a/packages/frontend/src/pages/settings/privacy.vue
+++ b/packages/frontend/src/pages/settings/privacy.vue
@@ -7,7 +7,7 @@
{{ i18n.ts.makeReactionsPublic }}
{{ i18n.ts.makeReactionsPublicDescription }}
-
+
{{ i18n.ts.ffVisibility }}
@@ -15,7 +15,7 @@
{{ i18n.ts.ffVisibilityDescription }}
-
+
{{ i18n.ts.hideOnlineStatus }}
{{ i18n.ts.hideOnlineStatusDescription }}
diff --git a/packages/frontend/src/pages/settings/roles.vue b/packages/frontend/src/pages/settings/roles.vue
index 05753c9b60d7..4b842f56fd43 100644
--- a/packages/frontend/src/pages/settings/roles.vue
+++ b/packages/frontend/src/pages/settings/roles.vue
@@ -37,7 +37,7 @@ import MkRolePreview from '@/components/MkRolePreview.vue';
function save() {
os.apiWithDialog('i/update', {
-
+
});
}
diff --git a/packages/frontend/src/pages/settings/security.vue b/packages/frontend/src/pages/settings/security.vue
index 2da84763a3d6..bd5e2e350aee 100644
--- a/packages/frontend/src/pages/settings/security.vue
+++ b/packages/frontend/src/pages/settings/security.vue
@@ -78,7 +78,7 @@ async function change() {
});
return;
}
-
+
os.apiWithDialog('i/change-password', {
currentPassword,
newPassword,
diff --git a/packages/frontend/src/pizzax.ts b/packages/frontend/src/pizzax.ts
index d97bd4be62e9..996610602bf9 100644
--- a/packages/frontend/src/pizzax.ts
+++ b/packages/frontend/src/pizzax.ts
@@ -70,7 +70,7 @@ export class Storage {
this.state[k] = v.default;
this.reactiveState[k] = ref(v.default);
}
-
+
this.ready = this.init();
this.loaded = this.ready.then(() => this.load());
}
@@ -81,7 +81,7 @@ export class Storage {
const deviceState: State = await get(this.deviceStateKeyName) || {};
const deviceAccountState = $i ? await get(this.deviceAccountStateKeyName) || {} : {};
const registryCache = $i ? await get(this.registryCacheKeyName) || {} : {};
-
+
for (const [k, v] of Object.entries(this.def) as [keyof T, T[keyof T]['default']][]) {
if (v.where === 'device' && Object.prototype.hasOwnProperty.call(deviceState, k)) {
this.reactiveState[k].value = this.state[k] = deviceState[k];
@@ -110,7 +110,7 @@ export class Storage {
if (!scope || scope.length !== 2 || scope[0] !== 'client' || scope[1] !== this.key || this.state[key] === value) return;
this.reactiveState[key].value = this.state[key] = value;
-
+
this.addIdbSetJob(async () => {
const cache = await get(this.registryCacheKeyName);
if (cache[key] !== value) {
@@ -142,7 +142,7 @@ export class Storage {
}
}
}
-
+
return set(this.registryCacheKeyName, cache);
})
.then(() => resolve());
@@ -252,7 +252,7 @@ export class Storage {
// localStorage => indexedDBのマイグレーション
private async migrate() {
const deviceState = localStorage.getItem(this.deviceStateKeyName);
- if (deviceState) {
+ if (deviceState) {
await set(this.deviceStateKeyName, JSON.parse(deviceState));
localStorage.removeItem(this.deviceStateKeyName);
}
diff --git a/packages/frontend/src/scripts/aiscript/ui.ts b/packages/frontend/src/scripts/aiscript/ui.ts
index 2ca1b164ae14..c26ae5a4dff7 100644
--- a/packages/frontend/src/scripts/aiscript/ui.ts
+++ b/packages/frontend/src/scripts/aiscript/ui.ts
@@ -510,7 +510,7 @@ export function registerAsUiLib(components: Ref[], done: (root: R
// Ui:root.update({ children: [...] }) の糖衣構文
'Ui:render': values.FN_NATIVE(([children], opts) => {
utils.assertArray(children);
-
+
rootComponent.value.children = children.value.map(v => {
utils.assertObject(v);
return v.value.get('id').value;
diff --git a/packages/frontend/src/scripts/get-user-menu.ts b/packages/frontend/src/scripts/get-user-menu.ts
index b055d264737b..c884ed76cb99 100644
--- a/packages/frontend/src/scripts/get-user-menu.ts
+++ b/packages/frontend/src/scripts/get-user-menu.ts
@@ -196,7 +196,7 @@ export function getUserMenu(user: misskey.entities.UserDetailed, router: Router
default: 'indefinitely',
});
if (canceled) return;
-
+
const expiresAt = period === 'indefinitely' ? null
: period === 'oneHour' ? Date.now() + (1000 * 60 * 60)
: period === 'oneDay' ? Date.now() + (1000 * 60 * 60 * 24)
diff --git a/packages/frontend/src/scripts/lookup.ts b/packages/frontend/src/scripts/lookup.ts
index ce5b03fc3822..0b594e341216 100644
--- a/packages/frontend/src/scripts/lookup.ts
+++ b/packages/frontend/src/scripts/lookup.ts
@@ -10,7 +10,7 @@ export async function lookup(router?: Router) {
title: i18n.ts.lookup,
});
if (canceled) return;
-
+
if (query.startsWith('@') && !query.includes(' ')) {
_router.push(`/${query}`);
return;
diff --git a/packages/frontend/src/scripts/url.ts b/packages/frontend/src/scripts/url.ts
index b6a997449a78..07737d622841 100644
--- a/packages/frontend/src/scripts/url.ts
+++ b/packages/frontend/src/scripts/url.ts
@@ -2,7 +2,7 @@
* 1. 配列に何も入っていない時はクエリを付けない
* 2. プロパティがundefinedの時はクエリを付けない
* (new URLSearchParams(obj)ではそこまで丁寧なことをしてくれない)
- */
+ */
export function query(obj: Record): string {
const params = Object.entries(obj)
.filter(([, v]) => Array.isArray(v) ? v.length : v !== undefined)
diff --git a/packages/frontend/src/scripts/use-note-capture.ts b/packages/frontend/src/scripts/use-note-capture.ts
index 22a01e066a34..d057386b13a9 100644
--- a/packages/frontend/src/scripts/use-note-capture.ts
+++ b/packages/frontend/src/scripts/use-note-capture.ts
@@ -93,12 +93,12 @@ export function useNoteCapture(props: {
function onStreamConnected() {
capture(false);
}
-
+
capture(true);
if (connection) {
connection.on('_connected_', onStreamConnected);
}
-
+
onUnmounted(() => {
decapture(true);
if (connection) {
diff --git a/packages/frontend/src/style.scss b/packages/frontend/src/style.scss
index b376e4c42dd0..b4b80a4bbe4a 100644
--- a/packages/frontend/src/style.scss
+++ b/packages/frontend/src/style.scss
@@ -7,7 +7,7 @@
--margin: var(--marginFull);
--minBottomSpacing: 0px;
-
+
@media (max-width: 500px) {
--margin: var(--marginHalf);
--minBottomSpacing: calc(72px + max(12px, env(safe-area-inset-bottom, 0px)));
@@ -19,7 +19,7 @@
::selection {
color: var(--fgOnAccent);
background-color: var(--accent);
-}
+}
html {
background-color: var(--bg);
diff --git a/packages/frontend/src/themes/l-botanical.json5 b/packages/frontend/src/themes/l-botanical.json5
index 5c9892789641..17e9ca246f03 100644
--- a/packages/frontend/src/themes/l-botanical.json5
+++ b/packages/frontend/src/themes/l-botanical.json5
@@ -5,7 +5,7 @@
author: 'ThinaticSystem',
base: 'light',
-
+
props: {
accent: '#77b58c',
bg: 'e2deda',
diff --git a/packages/frontend/src/ui/classic.header.vue b/packages/frontend/src/ui/classic.header.vue
index 747d4edcb449..2c41e7759bff 100644
--- a/packages/frontend/src/ui/classic.header.vue
+++ b/packages/frontend/src/ui/classic.header.vue
@@ -82,7 +82,7 @@ function openAccountMenu(ev: MouseEvent) {
onMounted(() => {
window.addEventListener('resize', () => {
settingsWindowed = (window.innerWidth >= WINDOW_THRESHOLD);
- }, { passive: true });
+ }, { passive: true });
});
@@ -177,7 +177,7 @@ onMounted(() => {
> .post {
display: inline-block;
-
+
> .button {
width: 40px;
height: 40px;
diff --git a/packages/frontend/src/ui/classic.vue b/packages/frontend/src/ui/classic.vue
index d50f2b0454b8..2c58c2984022 100644
--- a/packages/frontend/src/ui/classic.vue
+++ b/packages/frontend/src/ui/classic.vue
@@ -219,7 +219,7 @@ onMounted(() => {
&.fullView {
margin: 0;
-
+
> .sidebar {
display: none;
}
diff --git a/packages/frontend/src/ui/minimum.vue b/packages/frontend/src/ui/minimum.vue
index e656f00bb209..baba9e4da566 100644
--- a/packages/frontend/src/ui/minimum.vue
+++ b/packages/frontend/src/ui/minimum.vue
@@ -1,6 +1,8 @@
-
-
+
diff --git a/packages/frontend/src/ui/zen.vue b/packages/frontend/src/ui/zen.vue
index d516a5df758e..6c8a98641120 100644
--- a/packages/frontend/src/ui/zen.vue
+++ b/packages/frontend/src/ui/zen.vue
@@ -1,6 +1,8 @@
-
-
+
diff --git a/packages/frontend/src/widgets/WidgetAiscriptApp.vue b/packages/frontend/src/widgets/WidgetAiscriptApp.vue
index 3b67972e400f..94d2d922d2c0 100644
--- a/packages/frontend/src/widgets/WidgetAiscriptApp.vue
+++ b/packages/frontend/src/widgets/WidgetAiscriptApp.vue
@@ -37,7 +37,7 @@ type WidgetProps = GetFormResultType
;
const props = defineProps>();
const emit = defineEmits>();
-
+
const { widgetProps, configure } = useWidgetPropsManager(name,
widgetPropsDef,
props,
diff --git a/packages/frontend/src/widgets/WidgetClicker.vue b/packages/frontend/src/widgets/WidgetClicker.vue
index b7be2e8c83a6..6a997f7da812 100644
--- a/packages/frontend/src/widgets/WidgetClicker.vue
+++ b/packages/frontend/src/widgets/WidgetClicker.vue
@@ -25,7 +25,7 @@ type WidgetProps = GetFormResultType;
const props = defineProps>();
const emit = defineEmits>();
-
+
const { widgetProps, configure } = useWidgetPropsManager(name,
widgetPropsDef,
props,
diff --git a/packages/frontend/src/widgets/WidgetNotifications.vue b/packages/frontend/src/widgets/WidgetNotifications.vue
index a24aa9b2e9a9..d4f9a07cb5e8 100644
--- a/packages/frontend/src/widgets/WidgetNotifications.vue
+++ b/packages/frontend/src/widgets/WidgetNotifications.vue
@@ -41,7 +41,7 @@ type WidgetProps = GetFormResultType;
const props = defineProps>();
const emit = defineEmits>();
-
+
const { widgetProps, configure, save } = useWidgetPropsManager(name,
widgetPropsDef,
props,
diff --git a/packages/misskey-js/src/streaming.ts b/packages/misskey-js/src/streaming.ts
index 92a220b4963d..c641706a4bfa 100644
--- a/packages/misskey-js/src/streaming.ts
+++ b/packages/misskey-js/src/streaming.ts
@@ -218,7 +218,7 @@ class Pool {
this.dec = this.dec.bind(this);
this.connect = this.connect.bind(this);
this.disconnect = this.disconnect.bind(this);
-
+
this.channel = channel;
this.stream = stream;
this.id = id;
diff --git a/packages/misskey-js/test-d/streaming.ts b/packages/misskey-js/test-d/streaming.ts
index 7ff7f95999d5..853f376e6ca8 100644
--- a/packages/misskey-js/test-d/streaming.ts
+++ b/packages/misskey-js/test-d/streaming.ts
@@ -16,7 +16,7 @@ describe('Streaming', () => {
// {
// otherparty?: User['id'] | null;
// group?: UserGroup['id'] | null;
- // }
+ // }
// になっている」というテストを行いたいけどtsdでの書き方がわからない
const messagingChannel = stream.useChannel('messaging', { otherparty: 'aaa' });
messagingChannel.on('message', message => {
diff --git a/packages/misskey-js/test/api.ts b/packages/misskey-js/test/api.ts
index 84b1fc09334c..6f9e656fefae 100644
--- a/packages/misskey-js/test/api.ts
+++ b/packages/misskey-js/test/api.ts
@@ -137,7 +137,7 @@ describe('API', () => {
origin: 'https://misskey.test',
credential: 'TOKEN',
});
-
+
await cli.request('i', {}, null);
} catch (e) {
expect(isAPIError(e)).toEqual(true);
@@ -165,7 +165,7 @@ describe('API', () => {
origin: 'https://misskey.test',
credential: 'TOKEN',
});
-
+
await cli.request('i');
} catch (e: any) {
expect(isAPIError(e)).toEqual(true);
@@ -182,7 +182,7 @@ describe('API', () => {
origin: 'https://misskey.test',
credential: 'TOKEN',
});
-
+
await cli.request('i');
} catch (e) {
expect(isAPIError(e)).toEqual(false);
@@ -203,7 +203,7 @@ describe('API', () => {
origin: 'https://misskey.test',
credential: 'TOKEN',
});
-
+
await cli.request('i');
} catch (e) {
expect(isAPIError(e)).toEqual(false);
diff --git a/packages/misskey-js/test/streaming.ts b/packages/misskey-js/test/streaming.ts
index 913db8b28765..9f6615a8d89c 100644
--- a/packages/misskey-js/test/streaming.ts
+++ b/packages/misskey-js/test/streaming.ts
@@ -131,7 +131,7 @@ describe('Streaming', () => {
main.on('meUpdated', payload => {
mainChannelReceived.push(payload);
});
-
+
const ws = await server.connected;
expect(new URLSearchParams(new URL(ws.url).search).get('i')).toEqual('TOKEN');
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 69d25e807d88..0d99cede2ea9 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -140,6 +140,9 @@ importers:
archiver:
specifier: 5.3.1
version: 5.3.1
+ async-mutex:
+ specifier: ^0.4.0
+ version: 0.4.0
autwh:
specifier: 0.1.0
version: 0.1.0
@@ -9468,6 +9471,12 @@ packages:
resolution: {integrity: sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==}
dev: true
+ /async-mutex@0.4.0:
+ resolution: {integrity: sha512-eJFZ1YhRR8UN8eBLoNzcDPcy/jqjsg6I1AP+KvWQX80BqOSW1oJPJXDylPUEeMr2ZQvHgnQ//Lp6f3RQ1zI7HA==}
+ dependencies:
+ tslib: 2.6.0
+ dev: false
+
/async-settle@1.0.0:
resolution: {integrity: sha512-VPXfB4Vk49z1LHHodrEQ6Xf7W4gg1w0dAPROHngx7qgDjqmIQ+fXmwgGXTW/ITLai0YLSvWepJOP9EVpMnEAcw==}
engines: {node: '>= 0.10'}