UNPKG

@redocly/openapi-core

Version:

See https://github.com/Redocly/redocly-cli

66 lines 2.65 kB
import { isEmptyArray, isEmptyObject, isPlainObject } from '../../utils.js'; import { isRef } from '../../ref-utils.js'; const DEFAULT_INTERNAL_PROPERTY_NAME = 'x-internal'; export const RemoveXInternal = ({ internalFlagProperty = DEFAULT_INTERNAL_PROPERTY_NAME, }) => { function removeInternal(node, ctx, originalMapping) { const { parent, key } = ctx; let didDelete = false; if (Array.isArray(node)) { for (let i = 0; i < node.length; i++) { if (isRef(node[i])) { const resolved = ctx.resolve(node[i]); if (resolved.node?.[internalFlagProperty]) { // First, remove the reference in the discriminator mapping, if it exists: if (isPlainObject(parent.discriminator?.mapping)) { for (const mapping in parent.discriminator.mapping) { if (originalMapping?.[mapping] === node[i].$ref) { delete parent.discriminator.mapping[mapping]; } } } node.splice(i, 1); didDelete = true; i--; } } if (node[i]?.[internalFlagProperty]) { node.splice(i, 1); didDelete = true; i--; } } } else if (isPlainObject(node)) { for (const key of Object.keys(node)) { if (isRef(node[key])) { const resolved = ctx.resolve(node[key]); if (isPlainObject(resolved.node) && resolved.node?.[internalFlagProperty]) { delete node[key]; didDelete = true; } } if (isPlainObject(node[key]) && node[key]?.[internalFlagProperty]) { delete node[key]; didDelete = true; } } } if (didDelete && (isEmptyObject(node) || isEmptyArray(node))) { delete parent[key]; } } let originalMapping = {}; return { DiscriminatorMapping: { enter: (mapping) => { originalMapping = JSON.parse(JSON.stringify(mapping)); }, }, any: { enter: (node, ctx) => { removeInternal(node, ctx, originalMapping); }, }, }; }; //# sourceMappingURL=remove-x-internal.js.map