UNPKG

@mintlify/common

Version:

Commonly shared code within Mintlify

144 lines (143 loc) 4.25 kB
import { parse } from 'path'; import { SNIPPET_EXTENSIONS } from './mdx/snippets/constants.js'; import { isImportedAsSnippet } from './mdx/snippets/isImportedAsSnippet.js'; import { optionallyRemoveLeadingSlash } from './optionallyRemoveLeadingSlash.js'; const excludedMdFiles = ['readme', 'license', 'contributing', 'contribute']; export const generatedStaticFiles = [ 'llms.txt', 'robots.txt', 'sitemap.xml', 'llms-full.txt', ]; export const IMAGE_FORMATS = [ '.jpeg', '.jpg', '.jfif', '.pjpeg', '.pjp', '.png', '.svg', '.svgz', '.ico', '.webp', '.gif', '.apng', '.avif', '.bmp', '.tiff', '.tif', ]; export const VIDEO_FORMATS = [ '.mp4', '.webm', '.ogg', '.avi', '.mov', '.wmv', '.flv', '.mkv', '.m4v', ]; export const AUDIO_FORMATS = ['.mp3', '.wav', '.flac', '.aac', '.ogg', '.wma', '.m4a']; export const DOCUMENT_FORMATS = [ '.pdf', '.txt', '.doc', '.docx', '.xls', '.xlsx', '.ppt', '.pptx', '.rtf', '.odt', '.ods', '.odp', ]; export const DATA_FORMATS = ['.csv', '.tsv', '.xml']; export const FONT_FORMATS = ['.woff', '.woff2', '.ttf', '.eot', '.otf']; export const COMPRESSED_FORMATS = ['.zip', '.rar', '.7z', '.tar', '.gz', '.bz2']; const supportedStaticFileExtensions = [ ...IMAGE_FORMATS, ...VIDEO_FORMATS, ...AUDIO_FORMATS, ...DOCUMENT_FORMATS, ...DATA_FORMATS, ...FONT_FORMATS, ...COMPRESSED_FORMATS, ]; const gatedStaticAssetExtensions = [...DOCUMENT_FORMATS, ...DATA_FORMATS, ...COMPRESSED_FORMATS]; export function isGatedFormat({ filePath, ext }) { if (ext == undefined) { ext = filePath.split('.').at(-1); if (!ext) return false; } ext = ext.startsWith('.') ? ext : `.${ext}`; return gatedStaticAssetExtensions.includes(ext.toLowerCase()); } export const getFileCategory = (filePath, options) => { const normalizedFilePath = optionallyRemoveLeadingSlash(filePath.toLowerCase()); const parsed = parse(normalizedFilePath); if (parsed.base === 'mint.json') { return 'mintConfig'; } if (parsed.base === 'docs.json') { return 'docsConfig'; } if (parsed.base === '.mintignore') { return 'mintIgnore'; } const fileName = parsed.name; const extension = parsed.ext; if (generatedStaticFiles.includes(parsed.base)) { return 'generatedStaticFile'; } if (normalizedFilePath === 'skill.md' || (normalizedFilePath.startsWith('.mintlify/skills/') && parsed.base === 'skill.md')) { return 'skillFile'; } if ((normalizedFilePath.startsWith('_snippets/') || normalizedFilePath.startsWith('snippets/')) && SNIPPET_EXTENSIONS.some((ext) => extension === ext)) { if (normalizedFilePath.startsWith('_snippets/')) { return 'snippet'; } else if (normalizedFilePath.startsWith('snippets/')) { return 'snippet-v2'; } } else if (extension === '.mdx') { if ((options === null || options === void 0 ? void 0 : options.importedFiles) != null && isImportedAsSnippet(filePath, options.importedFiles)) { return 'snippet-v2'; } return 'page'; } else if (extension === '.md') { // Exclude common markdown files people don't want on their docs website if (excludedMdFiles.includes(fileName)) { return null; } if ((options === null || options === void 0 ? void 0 : options.importedFiles) != null && isImportedAsSnippet(filePath, options.importedFiles)) { return 'snippet-v2'; } return 'page'; } else if (extension === '.jsx' || extension === '.tsx') { return 'snippet-v2'; } else if (extension === '.yaml' || extension === '.yml') { return 'potentialYamlOpenApiSpec'; } else if (extension === '.json') { return 'potentialJsonOpenApiSpec'; } else if (extension === '.css') { return 'css'; } else if (extension === '.js') { return 'js'; } else if (supportedStaticFileExtensions.includes(extension)) { return 'staticFile'; } return null; };