| 22 | } |
| 23 | |
| 24 | function stable(value: unknown): string { |
| 25 | if (Array.isArray(value)) { |
| 26 | return `[${value.map(stable).join(",")}]`; |
| 27 | } |
| 28 | if (value !== null && typeof value === "object") { |
| 29 | return `{${Object.entries(value) |
| 30 | .sort(([a], [b]) => a.localeCompare(b)) |
| 31 | .map(([key, item]) => `${JSON.stringify(key)}:${stable(item)}`) |
| 32 | .join(",")}}`; |
| 33 | } |
| 34 | return JSON.stringify(value); |
| 35 | } |
| 36 | |
| 37 | describe("catalog generation", () => { |
| 38 | test("base_model can factor metadata without changing provider JSON", async () => { |