[Schema Inaccuracy] Duplicate title properties and inline schemas
@bearcherian is already working on this.
Since Mar 27, 2025.
Assessment
This issue has not been assessed yet.
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
- Dominant language
- No language data
- Stars
- 1.6k
- Forks
- 342
- Avg merge
- 3h 33m
- Merged PRs (30d)
- 51
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from github/rest-api-description
-
feature
Difficulty 2/5 1-3 hours Newbie friendliness 82/100
github/rest-api-description#7201 ·
-
feature
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
github/rest-api-description#7163 ·
-
feature
Difficulty 2/5 1-3 hours Newbie friendliness 68/100
github/rest-api-description#7162 ·
-
feature
Difficulty 2/5 1-3 hours Newbie friendliness 68/100
github/rest-api-description#7135 ·
-
feature
Difficulty 2/5 1-3 hours Newbie friendliness 74/100
github/rest-api-description#7111 · 1 comment ·