Skip to content
English

结构键的排序与序列化 ​

策略的具体实现如下。

ts
export function retrievalQueryKey(value: unknown): string {
  const serialized = JSON.stringify(canonical(value));
  breakWhile(serialized === undefined, () => new TypeError('Query cannot be serialized'));
  return serialized!;
}

function canonical(value: unknown): unknown {
  if (Array.isArray(value)) return value.map(canonical);
  if (value && typeof value === 'object') {
    return Object.fromEntries(
      Object.entries(value)
        .sort(([left], [right]) => left.localeCompare(right))
        .map(([key, item]) => [key, canonical(item)]),
    );
  }
  return value;
}

接口参考、使用示例与开发指南。