UNPKG

json-schema-typescript-generator

Version:
57 lines 2.25 kB
import { isAbsolute, isRelative, isLocal, isAbsoluteSchemaId, } from '../ids'; export const referenceGenerator = (locatedSchema, gatheredInfo, inputInfo) => { const schema = locatedSchema.schema; const id = schema.$id; const ref = schema.$ref; if (!ref) { return; } if (isLocal(ref)) { return ref.fragment; } const references = gatheredInfo.references; const idFileLocations = inputInfo.idFileLocations; if (isAbsolute(ref)) { return createFromAbsoluteRef(references, idFileLocations, ref); } if (isRelative(ref)) { if (id && isAbsoluteSchemaId(id)) { const absoluteRef = { authority: id.authority, ...ref }; return createFromAbsoluteRef(references, idFileLocations, absoluteRef); } else { return createFromRelativeRef(references, idFileLocations, ref); } } return; }; 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, _]) => !isAbsoluteSchemaId(schemaId) || !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