UNPKG

json-schema-typescript-generator

Version:
61 lines 2.42 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.referenceGenerator = void 0; const ids_1 = require("../ids"); const referenceGenerator = (locatedSchema, gatheredInfo, inputInfo) => { const schema = locatedSchema.schema; const id = schema.$id; const ref = schema.$ref; if (!ref) { return; } if ((0, ids_1.isLocal)(ref)) { return ref.fragment; } const references = gatheredInfo.references; const idFileLocations = inputInfo.idFileLocations; if ((0, ids_1.isAbsolute)(ref)) { return createFromAbsoluteRef(references, idFileLocations, ref); } if ((0, ids_1.isRelative)(ref)) { if (id && (0, ids_1.isAbsoluteSchemaId)(id)) { const absoluteRef = { authority: id.authority, ...ref }; return createFromAbsoluteRef(references, idFileLocations, absoluteRef); } else { return createFromRelativeRef(references, idFileLocations, ref); } } return; }; exports.referenceGenerator = referenceGenerator; const createFromAbsoluteRef = (references, idFileLocations, ref) => { const fileLocation = idFileLocations.get(ref); if (fileLocation) { return addExternalReference(references, fileLocation, ref.fragment); } return createFromRelativeRef(references, idFileLocations, ref); }; const createFromRelativeRef = (references, idFileLocations, ref) => { const foundFileLocations = Array.from(idFileLocations.entries()) .filter(([schemaId, _]) => !(0, ids_1.isAbsoluteSchemaId)(schemaId) || !(0, ids_1.isAbsolute)(ref) || schemaId.authority === ref.authority) .filter(([schemaId, _]) => schemaId.folder === ref.folder) .filter(([schemaId, _]) => schemaId.name === ref.name) .map(([_, fileLocation]) => fileLocation); return foundFileLocations && foundFileLocations.length === 1 ? addExternalReference(references, foundFileLocations[0], ref.fragment) : undefined; }; const addExternalReference = (references, fileLocation, importName) => { let importNames = references.schema.get(fileLocation); if (!importNames) { importNames = new Set(); references.schema.set(fileLocation, importNames); } const name = importName || fileLocation.fileName; importNames.add(name); return name; }; //# sourceMappingURL=reference-generator.js.map