From bd81a6c8adb45067bee9582f84855a60a962e92b Mon Sep 17 00:00:00 2001 From: かっこかり <67428053+kakkokari-gtyih@users.noreply.github.com> Date: Wed, 14 Jan 2026 14:45:45 +0900 Subject: refactor(frontend): anyを除去2 (#17092) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * wip * fix types * fix --- packages/backend/src/misc/json-schema.ts | 2 + packages/backend/src/models/Meta.ts | 6 ++- packages/backend/src/models/json-schema/meta.ts | 23 ++++++++++- .../backend/src/server/api/endpoints/admin/meta.ts | 3 +- .../src/server/api/endpoints/admin/update-meta.ts | 20 ++++++++-- .../frontend/src/components/MkAchievements.vue | 6 +-- .../frontend/src/components/MkAutocomplete.vue | 17 ++++---- .../src/components/MkExtensionInstaller.vue | 9 +++-- .../frontend/src/components/MkNotification.vue | 2 +- .../components/MkPushNotificationAllowButton.vue | 2 +- .../src/components/MkRetentionLineChart.vue | 17 +++++--- .../src/components/MkServerSetupWizard.vue | 2 +- .../src/components/MkWidgetSettingsDialog.vue | 5 ++- .../src/components/global/MkCondensedLine.vue | 2 +- packages/frontend/src/instance.ts | 6 --- packages/frontend/src/pages/admin/branding.vue | 12 +++--- packages/frontend/src/pages/auth.form.vue | 8 +++- packages/frontend/src/pages/flash/flash.vue | 2 +- packages/frontend/src/pages/settings/plugin.vue | 2 +- .../frontend/src/pages/settings/preferences.vue | 4 +- packages/frontend/src/plugin.ts | 6 +-- packages/frontend/src/pref-migrate.ts | 9 +++-- packages/frontend/src/store.ts | 6 +-- packages/frontend/src/utility/autocomplete.ts | 45 +++++++++++++--------- packages/frontend/src/widgets/WidgetAichan.vue | 2 +- packages/frontend/src/widgets/WidgetTimeline.vue | 10 ++--- packages/frontend/src/widgets/WidgetTrends.vue | 2 +- packages/frontend/src/widgets/index.ts | 2 + packages/frontend/src/widgets/widget.ts | 3 +- packages/misskey-js/etc/misskey-js.api.md | 4 ++ packages/misskey-js/src/autogen/models.ts | 1 + packages/misskey-js/src/autogen/types.ts | 17 ++++++-- 32 files changed, 164 insertions(+), 93 deletions(-) diff --git a/packages/backend/src/misc/json-schema.ts b/packages/backend/src/misc/json-schema.ts index 3fa49e3cd1..cf233defd9 100644 --- a/packages/backend/src/misc/json-schema.ts +++ b/packages/backend/src/misc/json-schema.ts @@ -64,6 +64,7 @@ import { packedMetaDetailedOnlySchema, packedMetaDetailedSchema, packedMetaLiteSchema, + packedMetaClientOptionsSchema, } from '@/models/json-schema/meta.js'; import { packedUserWebhookSchema } from '@/models/json-schema/user-webhook.js'; import { packedSystemWebhookSchema } from '@/models/json-schema/system-webhook.js'; @@ -135,6 +136,7 @@ export const refs = { MetaLite: packedMetaLiteSchema, MetaDetailedOnly: packedMetaDetailedOnlySchema, MetaDetailed: packedMetaDetailedSchema, + MetaClientOptions: packedMetaClientOptionsSchema, UserWebhook: packedUserWebhookSchema, SystemWebhook: packedSystemWebhookSchema, AbuseReportNotificationRecipient: packedAbuseReportNotificationRecipientSchema, diff --git a/packages/backend/src/models/Meta.ts b/packages/backend/src/models/Meta.ts index a6f68194c5..620853450c 100644 --- a/packages/backend/src/models/Meta.ts +++ b/packages/backend/src/models/Meta.ts @@ -725,7 +725,11 @@ export class MiMeta { @Column('jsonb', { default: { }, }) - public clientOptions: Record; + public clientOptions: { + entrancePageStyle: 'classic' | 'simple'; + showTimelineForVisitor: boolean; + showActivitiesForVisitor: boolean; + }; } export type SoftwareSuspension = { diff --git a/packages/backend/src/models/json-schema/meta.ts b/packages/backend/src/models/json-schema/meta.ts index a0e7d490b3..0c3ec141bc 100644 --- a/packages/backend/src/models/json-schema/meta.ts +++ b/packages/backend/src/models/json-schema/meta.ts @@ -72,8 +72,7 @@ export const packedMetaLiteSchema = { optional: false, nullable: true, }, clientOptions: { - type: 'object', - optional: false, nullable: false, + ref: 'MetaClientOptions', }, disableRegistration: { type: 'boolean', @@ -397,3 +396,23 @@ export const packedMetaDetailedSchema = { }, ], } as const; + +export const packedMetaClientOptionsSchema = { + type: 'object', + optional: false, nullable: false, + properties: { + entrancePageStyle: { + type: 'string', + enum: ['classic', 'simple'], + optional: false, nullable: false, + }, + showTimelineForVisitor: { + type: 'boolean', + optional: false, nullable: false, + }, + showActivitiesForVisitor: { + type: 'boolean', + optional: false, nullable: false, + }, + }, +} as const; diff --git a/packages/backend/src/server/api/endpoints/admin/meta.ts b/packages/backend/src/server/api/endpoints/admin/meta.ts index 2c7f793584..5beed3a7e8 100644 --- a/packages/backend/src/server/api/endpoints/admin/meta.ts +++ b/packages/backend/src/server/api/endpoints/admin/meta.ts @@ -428,8 +428,7 @@ export const meta = { optional: false, nullable: true, }, clientOptions: { - type: 'object', - optional: false, nullable: false, + ref: 'MetaClientOptions', }, description: { type: 'string', diff --git a/packages/backend/src/server/api/endpoints/admin/update-meta.ts b/packages/backend/src/server/api/endpoints/admin/update-meta.ts index b3c2cecc67..7a8dfc4555 100644 --- a/packages/backend/src/server/api/endpoints/admin/update-meta.ts +++ b/packages/backend/src/server/api/endpoints/admin/update-meta.ts @@ -3,7 +3,8 @@ * SPDX-License-Identifier: AGPL-3.0-only */ -import { Injectable } from '@nestjs/common'; +import { Injectable, Inject } from '@nestjs/common'; +import { DI } from '@/di-symbols.js'; import type { MiMeta } from '@/models/Meta.js'; import { ModerationLogService } from '@/core/ModerationLogService.js'; import { Endpoint } from '@/server/api/endpoint-base.js'; @@ -67,7 +68,14 @@ export const paramDef = { description: { type: 'string', nullable: true }, defaultLightTheme: { type: 'string', nullable: true }, defaultDarkTheme: { type: 'string', nullable: true }, - clientOptions: { type: 'object', nullable: false }, + clientOptions: { + type: 'object', nullable: false, + properties: { + entrancePageStyle: { type: 'string', nullable: false, enum: ['classic', 'simple'] }, + showTimelineForVisitor: { type: 'boolean', nullable: false }, + showActivitiesForVisitor: { type: 'boolean', nullable: false }, + }, + }, cacheRemoteFiles: { type: 'boolean' }, cacheRemoteSensitiveFiles: { type: 'boolean' }, emailRequiredForSignup: { type: 'boolean' }, @@ -217,6 +225,9 @@ export const paramDef = { @Injectable() export default class extends Endpoint { // eslint-disable-line import/no-default-export constructor( + @Inject(DI.meta) + private serverSettings: MiMeta, + private metaService: MetaService, private moderationLogService: ModerationLogService, ) { @@ -329,7 +340,10 @@ export default class extends Endpoint { // eslint- } if (ps.clientOptions !== undefined) { - set.clientOptions = ps.clientOptions; + set.clientOptions = { + ...serverSettings.clientOptions, + ...ps.clientOptions, + }; } if (ps.cacheRemoteFiles !== undefined) { diff --git a/packages/frontend/src/components/MkAchievements.vue b/packages/frontend/src/components/MkAchievements.vue index d0e138c229..fe6415eabb 100644 --- a/packages/frontend/src/components/MkAchievements.vue +++ b/packages/frontend/src/components/MkAchievements.vue @@ -23,13 +23,13 @@ SPDX-License-Identifier: AGPL-3.0-only
- {{ (i18n.ts._achievements._types as any)['_' + achievement.name].title }} + {{ i18n.ts._achievements._types[`_${achievement.name}`].title }}
-
{{ withDescription ? (i18n.ts._achievements._types as any)['_' + achievement.name].description : '???' }}
-
{{ (i18n.ts._achievements._types as any)['_' + achievement.name].flavor }}
+
{{ withDescription ? i18n.ts._achievements._types[`_${achievement.name}`].description : '???' }}
+
{{ (i18n.ts._achievements._types[`_${achievement.name}`] as { flavor: string; }).flavor }}