UNPKG

@scalar/api-reference

Version:

Generate beautiful API references from OpenAPI documents

66 lines (65 loc) 2.23 kB
import { apiReferenceConfigurationWithSourceSchema, isConfigurationWithSources } from "@scalar/types/api-reference"; import { slugger } from "@scalar/helpers/string/slugger"; import { parseJsonOrYaml } from "@scalar/oas-utils/helpers"; //#region src/helpers/normalize-configurations.ts /** * Take any configuration and return a flat array of configurations. */ var normalizeConfigurations = (configuration) => { const { slug } = slugger(); const normalized = {}; if (!configuration) return normalized; (Array.isArray(configuration) ? configuration : [configuration]).flatMap((c) => { if (isConfigurationWithSources(c)) { const { sources: configSources, ...rest } = c; return configSources?.map((source) => ({ ...rest, ...source })) ?? []; } return [c]; }).map((source) => { /** Validation with migrate deprecated attributes to their new format */ const validated = apiReferenceConfigurationWithSourceSchema.safeParse(source); return validated.success ? validated.data : null; }).filter((c) => !!c && (!!c.url || !!c.content)).map((source, index) => addSlugAndTitle(source, index, slug)).forEach((c) => { const { url, content, ...config } = c; normalized[c.slug] = { config, title: c.title, slug: c.slug, default: !!c?.default, agent: c.agent, source: content ? { content: normalizeContent(content) ?? {} } : { url } }; }); return normalized; }; /** Normalize content into a JS object or return null if it is falsey */ var normalizeContent = (content) => { if (!content) return null; if (typeof content === "function") return normalizeContent(content()); if (typeof content === "string") return parseJsonOrYaml(content); return content; }; /** Process a single spec configuration so that it has a title and a slug */ var addSlugAndTitle = (source, index = 0, slug) => { if (source.title) return { ...source, slug: source.slug || slug(source.title), title: source.title }; if (source.slug) return { ...source, slug: slug(source.slug), title: source.slug }; return { ...source, slug: `api-${index + 1}`, title: `API #${index + 1}` }; }; //#endregion export { normalizeConfigurations }; //# sourceMappingURL=normalize-configurations.js.map