Spaces:
Sleeping
Sleeping
File size: 1,171 Bytes
68f7925 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | // 選択データのハッシュを生成する関数
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)}`;
}
|