ts-json-schema-generator
Version:
Generate JSON schema from your Typescript sources
70 lines • 2.31 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.removeUnreachable = void 0;
const util_1 = require("util");
function addReachable(definition, definitions, reachable) {
if (util_1.isBoolean(definition)) {
return;
}
if (definition.$ref) {
const typeName = decodeURIComponent(definition.$ref.slice(14));
if (reachable.has(typeName)) {
return;
}
reachable.add(typeName);
addReachable(definitions[typeName], definitions, reachable);
}
else if (definition.anyOf) {
for (const def of definition.anyOf) {
addReachable(def, definitions, reachable);
}
}
else if (definition.allOf) {
for (const def of definition.allOf) {
addReachable(def, definitions, reachable);
}
}
else if (definition.oneOf) {
for (const def of definition.oneOf) {
addReachable(def, definitions, reachable);
}
}
else if (definition.not) {
addReachable(definition.not, definitions, reachable);
}
else if (definition.type === "object") {
for (const prop in definition.properties || {}) {
const propDefinition = definition.properties[prop];
addReachable(propDefinition, definitions, reachable);
}
const additionalProperties = definition.additionalProperties;
if (additionalProperties) {
addReachable(additionalProperties, definitions, reachable);
}
}
else if (definition.type === "array") {
const items = definition.items;
if (util_1.isArray(items)) {
for (const item of items) {
addReachable(item, definitions, reachable);
}
}
else if (items) {
addReachable(items, definitions, reachable);
}
}
}
function removeUnreachable(rootTypeDefinition, definitions) {
if (!rootTypeDefinition) {
return definitions;
}
const reachable = new Set();
addReachable(rootTypeDefinition, definitions, reachable);
const out = {};
for (const def of reachable) {
out[def] = definitions[def];
}
return out;
}
exports.removeUnreachable = removeUnreachable;
//# sourceMappingURL=removeUnreachable.js.map