// 選択データのハッシュを生成する関数 export function generateSelectionHash(data: unknown): string { // データを正規化してからハッシュを生成 const normalizedData = normalizeForHashing(data); return Buffer.from(JSON.stringify(normalizedData)).toString('base64').slice(0, 16); } // ハッシュ生成用にデータを正規化する関数 function normalizeForHashing(data: unknown): unknown { if (data === null || data === undefined) { return data; } if (Array.isArray(data)) { return data.map(normalizeForHashing).sort(); // 配列はソートして安定化 } if (typeof data === 'object') { const normalized: Record = {}; // オブジェクトのキーをソートして安定化 const sortedKeys = Object.keys(data).sort(); for (const key of sortedKeys) { normalized[key] = normalizeForHashing((data as Record)[key]); } return normalized; } return data; } // キャッシュキーを生成する関数 export function createCacheKey(prefix: string, data: unknown): string { return `${prefix}_${generateSelectionHash(data)}`; }