From 010ec113c277252b8eb394357440106f3c06aca0 Mon Sep 17 00:00:00 2001
From: syuilo <4439005+syuilo@users.noreply.github.com>
Date: Thu, 13 Mar 2025 13:45:23 +0900
Subject: [PATCH] refactor(frontend): cond -> scope

---
 packages/frontend/src/preferences.ts         | 10 ++--
 packages/frontend/src/preferences/manager.ts | 62 ++++++++++----------
 2 files changed, 36 insertions(+), 36 deletions(-)

diff --git a/packages/frontend/src/preferences.ts b/packages/frontend/src/preferences.ts
index 67ccbbde8d..8785acd7d1 100644
--- a/packages/frontend/src/preferences.ts
+++ b/packages/frontend/src/preferences.ts
@@ -7,7 +7,7 @@ import { v4 as uuid } from 'uuid';
 import type { PreferencesProfile, StorageProvider } from '@/preferences/manager.js';
 import { cloudBackup } from '@/preferences/utility.js';
 import { miLocalStorage } from '@/local-storage.js';
-import { isSameCond, PreferencesManager } from '@/preferences/manager.js';
+import { isSameScope, PreferencesManager } from '@/preferences/manager.js';
 import { store } from '@/store.js';
 import { $i } from '@/account.js';
 import { misskeyApi } from '@/utility/misskey-api.js';
@@ -44,7 +44,7 @@ const storageProvider: StorageProvider = {
 				scope: ['client', 'preferences', 'sync'],
 				key: syncGroup + ':' + ctx.key,
 			}) as [any, any][];
-			const target = cloudData.find(([cond]) => isSameCond(cond, ctx.cond));
+			const target = cloudData.find(([scope]) => isSameScope(scope, ctx.scope));
 			if (target == null) return null;
 			return {
 				value: target[1],
@@ -73,12 +73,12 @@ const storageProvider: StorageProvider = {
 			}
 		}
 
-		const i = cloudData.findIndex(([cond]) => isSameCond(cond, ctx.cond));
+		const i = cloudData.findIndex(([scope]) => isSameScope(scope, ctx.scope));
 
 		if (i === -1) {
-			cloudData.push([ctx.cond, ctx.value]);
+			cloudData.push([ctx.scope, ctx.value]);
 		} else {
-			cloudData[i] = [ctx.cond, ctx.value];
+			cloudData[i] = [ctx.scope, ctx.value];
 		}
 
 		await misskeyApi('i/registry/set', {
diff --git a/packages/frontend/src/preferences/manager.ts b/packages/frontend/src/preferences/manager.ts
index c3e3ea7ed3..b053cadacb 100644
--- a/packages/frontend/src/preferences/manager.ts
+++ b/packages/frontend/src/preferences/manager.ts
@@ -25,7 +25,7 @@ type PREF = typeof PREF_DEF;
 type ValueOf<K extends keyof PREF> = PREF[K]['default'];
 type Account = string; // <host>/<userId>
 
-type Cond = Partial<{
+type Scope = Partial<{
 	server: string | null; // 将来のため
 	account: Account | null;
 	device: string | null; // 将来のため
@@ -35,33 +35,33 @@ type ValueMeta = Partial<{
 	sync: boolean;
 }>;
 
-type PrefRecord<K extends keyof PREF> = [cond: Cond, value: ValueOf<K>, meta: ValueMeta];
+type PrefRecord<K extends keyof PREF> = [scope: Scope, value: ValueOf<K>, meta: ValueMeta];
 
-function parseCond(cond: Cond): {
+function parseScope(scope: Scope): {
 	server: string | null;
 	account: Account | null;
 	device: string | null;
 } {
 	return {
-		server: cond.server ?? null,
-		account: cond.account ?? null,
-		device: cond.device ?? null,
+		server: scope.server ?? null,
+		account: scope.account ?? null,
+		device: scope.device ?? null,
 	};
 }
 
-function makeCond(cond: Partial<{
+function makeScope(scope: Partial<{
 	server: string | null;
 	account: Account | null;
 	device: string | null;
-}>): Cond {
-	const c = {} as Cond;
-	if (cond.server != null) c.server = cond.server;
-	if (cond.account != null) c.account = cond.account;
-	if (cond.device != null) c.device = cond.device;
+}>): Scope {
+	const c = {} as Scope;
+	if (scope.server != null) c.server = scope.server;
+	if (scope.account != null) c.account = scope.account;
+	if (scope.device != null) c.device = scope.device;
 	return c;
 }
 
-export function isSameCond(a: Cond, b: Cond): boolean {
+export function isSameScope(a: Scope, b: Scope): boolean {
 	// null と undefined (キー無し) は区別したくないので == で比較
 	// eslint-disable-next-line eqeqeq
 	return a.server == b.server && a.account == b.account && a.device == b.device;
@@ -80,9 +80,9 @@ export type PreferencesProfile = {
 
 export type StorageProvider = {
 	save: (ctx: { profile: PreferencesProfile; }) => void;
-	cloudGets: <K extends keyof PREF>(ctx: { needs: { key: K; cond: Cond; }[] }) => Promise<Partial<Record<K, ValueOf<K>>>>;
-	cloudGet: <K extends keyof PREF>(ctx: { key: K; cond: Cond; }) => Promise<{ value: ValueOf<K>; } | null>;
-	cloudSet: <K extends keyof PREF>(ctx: { key: K; cond: Cond; value: ValueOf<K>; }) => Promise<void>;
+	cloudGets: <K extends keyof PREF>(ctx: { needs: { key: K; scope: Scope; }[] }) => Promise<Partial<Record<K, ValueOf<K>>>>;
+	cloudGet: <K extends keyof PREF>(ctx: { key: K; scope: Scope; }) => Promise<{ value: ValueOf<K>; } | null>;
+	cloudSet: <K extends keyof PREF>(ctx: { key: K; scope: Scope; value: ValueOf<K>; }) => Promise<void>;
 };
 
 export type PreferencesDefinition = Record<string, {
@@ -141,8 +141,8 @@ export class PreferencesManager {
 		this.rewriteRawState(key, value);
 
 		const record = this.getMatchedRecordOf(key);
-		if (parseCond(record[0]).account == null && this.isAccountDependentKey(key)) {
-			this.profile.preferences[key].push([makeCond({
+		if (parseScope(record[0]).account == null && this.isAccountDependentKey(key)) {
+			this.profile.preferences[key].push([makeScope({
 				account: `${host}/${$i!.id}`,
 			}), value, {}]);
 			this.save();
@@ -155,7 +155,7 @@ export class PreferencesManager {
 		if (record[2].sync) {
 			// awaitの必要なし
 			// TODO: リクエストを間引く
-			this.storageProvider.cloudSet({ key, cond: record[0], value: record[1] });
+			this.storageProvider.cloudSet({ key, scope: record[0], value: record[1] });
 		}
 	}
 
@@ -208,14 +208,14 @@ export class PreferencesManager {
 	}
 
 	private async fetchCloudValues() {
-		const needs = [] as { key: keyof PREF; cond: Cond; }[];
+		const needs = [] as { key: keyof PREF; scope: Scope; }[];
 		for (const _key in PREF_DEF) {
 			const key = _key as keyof PREF;
 			const record = this.getMatchedRecordOf(key);
 			if (record[2].sync) {
 				needs.push({
 					key,
-					cond: record[0],
+					scope: record[0],
 				});
 			}
 		}
@@ -242,7 +242,7 @@ export class PreferencesManager {
 	public static newProfile(): PreferencesProfile {
 		const data = {} as PreferencesProfile['preferences'];
 		for (const key in PREF_DEF) {
-			data[key] = [[makeCond({}), PREF_DEF[key].default, {}]];
+			data[key] = [[makeScope({}), PREF_DEF[key].default, {}]];
 		}
 		return {
 			id: uuid(),
@@ -259,7 +259,7 @@ export class PreferencesManager {
 		for (const key in PREF_DEF) {
 			const records = profileLike.preferences[key];
 			if (records == null || records.length === 0) {
-				data[key] = [[makeCond({}), PREF_DEF[key].default, {}]];
+				data[key] = [[makeScope({}), PREF_DEF[key].default, {}]];
 				continue;
 			} else {
 				data[key] = records;
@@ -289,18 +289,18 @@ export class PreferencesManager {
 	public getMatchedRecordOf<K extends keyof PREF>(key: K): PrefRecord<K> {
 		const records = this.profile.preferences[key];
 
-		if ($i == null) return records.find(([cond, v]) => parseCond(cond).account == null)!;
+		if ($i == null) return records.find(([scope, v]) => parseScope(scope).account == null)!;
 
-		const accountOverrideRecord = records.find(([cond, v]) => parseCond(cond).account === `${host}/${$i!.id}`);
+		const accountOverrideRecord = records.find(([scope, v]) => parseScope(scope).account === `${host}/${$i!.id}`);
 		if (accountOverrideRecord) return accountOverrideRecord;
 
-		const record = records.find(([cond, v]) => parseCond(cond).account == null);
+		const record = records.find(([scope, v]) => parseScope(scope).account == null);
 		return record!;
 	}
 
 	public isAccountOverrided<K extends keyof PREF>(key: K): boolean {
 		if ($i == null) return false;
-		return this.profile.preferences[key].some(([cond, v]) => parseCond(cond).account === `${host}/${$i!.id}`) ?? false;
+		return this.profile.preferences[key].some(([scope, v]) => parseScope(scope).account === `${host}/${$i!.id}`) ?? false;
 	}
 
 	public setAccountOverride<K extends keyof PREF>(key: K) {
@@ -309,7 +309,7 @@ export class PreferencesManager {
 		if (this.isAccountOverrided(key)) return;
 
 		const records = this.profile.preferences[key];
-		records.push([makeCond({
+		records.push([makeScope({
 			account: `${host}/${$i!.id}`,
 		}), this.s[key], {}]);
 
@@ -322,7 +322,7 @@ export class PreferencesManager {
 
 		const records = this.profile.preferences[key];
 
-		const index = records.findIndex(([cond, v]) => parseCond(cond).account === `${host}/${$i!.id}`);
+		const index = records.findIndex(([scope, v]) => parseScope(scope).account === `${host}/${$i!.id}`);
 		if (index === -1) return;
 
 		records.splice(index, 1);
@@ -341,7 +341,7 @@ export class PreferencesManager {
 
 		const record = this.getMatchedRecordOf(key);
 
-		const existing = await this.storageProvider.cloudGet({ key, cond: record[0] });
+		const existing = await this.storageProvider.cloudGet({ key, scope: record[0] });
 		if (existing != null && !deepEqual(existing.value, record[1])) {
 			const { canceled, result } = await os.select({
 				title: i18n.ts.preferenceSyncConflictTitle,
@@ -371,7 +371,7 @@ export class PreferencesManager {
 		this.save();
 
 		// awaitの必要性は無い
-		this.storageProvider.cloudSet({ key, cond: record[0], value: this.s[key] });
+		this.storageProvider.cloudSet({ key, scope: record[0], value: this.s[key] });
 
 		return { enabled: true };
 	}