Spaces:
Sleeping
Sleeping
| // 選択データのハッシュを生成する関数 | |
| 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<string, unknown> = {}; | |
| // オブジェクトのキーをソートして安定化 | |
| const sortedKeys = Object.keys(data).sort(); | |
| for (const key of sortedKeys) { | |
| normalized[key] = normalizeForHashing((data as Record<string, unknown>)[key]); | |
| } | |
| return normalized; | |
| } | |
| return data; | |
| } | |
| // キャッシュキーを生成する関数 | |
| export function createCacheKey(prefix: string, data: unknown): string { | |
| return `${prefix}_${generateSelectionHash(data)}`; | |
| } | |