- Notifications
You must be signed in to change notification settings - Fork 285
Open
Labels
Description
Schema Inaccuracy
The schema contains many inline schemas (that should be using re-usable components) and many inline schemas and components that have duplicate title
properties
This causes problems when using tools like json-schema-to-typescript
where you end up with many TypeScript interfaces named User_3
, Repository_1
, etc.
Expected
No inline schemas for re-used definitions, or schemas that have the same title
Reproduction Steps
This script logs all duplicate title
properties found
import schema from "./packages/openapi-webhooks/generated/api.github.com.json" with { type: "json" }; import { writeFileSync } from "node:fs"; function findDuplicateTitles(schema) { const seen = new Set(); const duplicates = []; function traverse(obj, path = []) { if (typeof obj !== "object" || obj === null) return; if (obj.title) { const titlePath = path.join("/"); if (seen.has(obj.title)) { duplicates.push({ title: obj.title, path: titlePath }); } else { seen.add(obj.title); } } // Traverse properties like oneOf, anyOf, etc. for (const [key, value] of Object.entries(obj)) { if (Array.isArray(value)) { value.forEach((item, index) => traverse(item, [...path, key, index])); } else if (typeof value === "object") { traverse(value, [...path, key]); } } } traverse(schema); return duplicates; } async function main() { const duplicates = findDuplicateTitles(schema) .sort((a, b) => { if (a.title < b.title) return -1; if (a.title > b.title) return 1; return 0; }) .map(({ title, path }) => `- [ ] Title: ${title}, Path: \`#/${path}\``); writeFileSync("duplicates.txt", duplicates.join("\n")); } main().catch(console.error);
Here is the list of duplicates I have found, which is too long to post directly into the issue body:
duplicates.txt