UNPKG

openapi-diff

Version:

A CLI tool to identify differences between Swagger/OpenAPI specs.

38 lines (37 loc) 1.8 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.dereferenceObject = void 0; const jsonPointer = require("jsonpointer"); const open_api_diff_error_impl_1 = require("../../../common/open-api-diff-error-impl"); const toJsonPointer = ($ref) => $ref.substr(1); const followReference = (reference, spec) => { const pointer = toJsonPointer(reference.$ref); return jsonPointer.get(spec, pointer); }; const throwCircularException = () => { throw new open_api_diff_error_impl_1.OpenApiDiffErrorImpl('OPENAPI_DIFF_PARSE_ERROR', 'the spec can not be parsed due to invalid circular references'); }; const hasBeenVisited = (reference, visitedReferences) => { return visitedReferences.indexOf(reference.$ref) !== -1; }; const getContentFromReference = (reference, spec, visitedReferences) => { const updatedVisitedReferences = [...visitedReferences, reference.$ref]; const referenceContent = followReference(reference, spec); return dereference(referenceContent, spec, updatedVisitedReferences); }; const attemptDereference = (reference, spec, visitedReferences) => { return hasBeenVisited(reference, visitedReferences) ? throwCircularException() : getContentFromReference(reference, spec, visitedReferences); }; const isReference = (object) => typeof object.$ref === 'string'; const dereference = (objectOrReference, spec, visitedReferences) => { return isReference(objectOrReference) ? attemptDereference(objectOrReference, spec, visitedReferences) : objectOrReference; }; const dereferenceObject = (objectOrReference, spec) => { const initialVisitedReferencesArray = []; return dereference(objectOrReference, spec, initialVisitedReferencesArray); }; exports.dereferenceObject = dereferenceObject;