UNPKG

@mintlify/scraping

Version:

Scrape documentation frameworks to Mintlify docs

55 lines (51 loc) 1.95 kB
import { AsyncAPIDocumentInterface, validateAsyncApi, isAllowedLocalSchemaUrl, } from '@mintlify/common'; import * as fs from 'fs/promises'; import * as path from 'path'; import { fetchAsyncApi } from '../utils/network.js'; export const getAsyncApiDefinition = async ( pathOrDocumentOrUrl: string | URL, localSchema?: boolean ): Promise<{ document: AsyncAPIDocumentInterface | undefined; isUrl: boolean }> => { let document: AsyncAPIDocumentInterface | undefined = undefined; if (typeof pathOrDocumentOrUrl === 'string') { if (pathOrDocumentOrUrl.startsWith('http:') && !localSchema) { // This is an invalid location either for a file or a URL throw new Error( 'Only HTTPS URLs are supported. HTTP URLs are only supported with the cli option --local-schema.' ); } else { try { const url = new URL(pathOrDocumentOrUrl); pathOrDocumentOrUrl = url; } catch { const pathname = path.join(process.cwd(), pathOrDocumentOrUrl.toString()); try { const file = await fs.readFile(pathname, 'utf-8'); const { document: asyncApiDocument, errorMessage } = await validateAsyncApi(file); if (!asyncApiDocument) { throw new Error( `${pathname} - this document is not a valid AsyncAPI document - ${errorMessage}` ); } document = asyncApiDocument; } catch (error) { throw new Error(`Failed to read file ${pathname} - ${error}`); } } } } const isUrl = pathOrDocumentOrUrl instanceof URL; if (pathOrDocumentOrUrl instanceof URL) { if (!isAllowedLocalSchemaUrl(pathOrDocumentOrUrl.toString(), localSchema)) { throw new Error( 'Only HTTPS URLs are supported. HTTP URLs are only supported with the cli option --local-schema.' ); } document = await fetchAsyncApi(pathOrDocumentOrUrl); } return { document, isUrl }; };