UNPKG

@redocly/openapi-core

Version:

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

78 lines 3.22 kB
import { resolveDocument } from '../resolve.js'; import { normalizeVisitors } from '../visitors.js'; import { normalizeTypes } from '../types/index.js'; import { walkDocument } from '../walk.js'; import { detectSpec, getMajorSpecVersion } from '../detect-spec.js'; import { initRules } from '../config/rules.js'; import { RemoveUnusedComponents as RemoveUnusedComponentsOas2 } from '../decorators/oas2/remove-unused-components.js'; import { RemoveUnusedComponents as RemoveUnusedComponentsOas3 } from '../decorators/oas3/remove-unused-components.js'; import { makeBundleVisitor } from '../bundle/bundle-visitor.js'; export async function bundleDocument(opts) { const { document, config, types, externalRefResolver, dereference = false, removeUnusedComponents = false, keepUrlRefs = false, } = opts; const specVersion = detectSpec(document.parsed); const specMajorVersion = getMajorSpecVersion(specVersion); const rules = config.getRulesForSpecVersion(specMajorVersion); const normalizedTypes = normalizeTypes(config.extendTypes(types, specVersion), config); const preprocessors = initRules(rules, config, 'preprocessors', specVersion); const decorators = initRules(rules, config, 'decorators', specVersion); const ctx = { problems: [], specVersion, config, refTypes: new Map(), visitorsData: {}, }; if (removeUnusedComponents && !decorators.some((d) => d.ruleId === 'remove-unused-components')) { decorators.push({ severity: 'error', ruleId: 'remove-unused-components', visitor: specMajorVersion === 'oas2' ? RemoveUnusedComponentsOas2({}) : RemoveUnusedComponentsOas3({}), }); } let resolvedRefMap = await resolveDocument({ rootDocument: document, rootType: normalizedTypes.Root, externalRefResolver, }); if (preprocessors.length > 0) { // Make additional pass to resolve refs defined in preprocessors. walkDocument({ document, rootType: normalizedTypes.Root, normalizedVisitors: normalizeVisitors(preprocessors, normalizedTypes), resolvedRefMap, ctx, }); resolvedRefMap = await resolveDocument({ rootDocument: document, rootType: normalizedTypes.Root, externalRefResolver, }); } const bundleVisitor = normalizeVisitors([ { severity: 'error', ruleId: 'bundler', visitor: makeBundleVisitor(specMajorVersion, dereference, document, resolvedRefMap, keepUrlRefs), }, ...decorators, ], normalizedTypes); walkDocument({ document, rootType: normalizedTypes.Root, normalizedVisitors: bundleVisitor, resolvedRefMap, ctx, }); return { bundle: document, problems: ctx.problems.map((problem) => config.addProblemToIgnore(problem)), fileDependencies: externalRefResolver.getFiles(), rootType: normalizedTypes.Root, refTypes: ctx.refTypes, visitorsData: ctx.visitorsData, }; } //# sourceMappingURL=bundle-document.js.map