1import GithubSlugger from 'github-slugger'; 2 3function hasChildren(node: React.ReactNode): node is React.ReactElement { 4 return (node as React.ReactElement)?.props?.children !== undefined; 5} 6 7/** 8 * Converts any object to string accepted by _Slugger_. 9 * This is needed, because sometimes we receive pure string node, 10 * but sometimes (e.g. when using styled text), we receive whole object (React.Element) 11 * 12 * @param {React.ReactNode} node React Node object to stringify 13 */ 14export const toString = (node: React.ReactNode): string => { 15 if (typeof node === 'string') { 16 return node; 17 } else if (Array.isArray(node)) { 18 return node.map(toString).join(''); 19 } else if (hasChildren(node)) { 20 return toString(node.props.children); 21 } else { 22 return ''; 23 } 24}; 25 26export const generateSlug = (slugger: GithubSlugger, node: React.ReactNode, length = 7): string => { 27 const stringToSlug = toString(node).split(' ').splice(0, length).join('-'); 28 29 // NOTE(jim): This will strip out commas from stringToSlug 30 const slug = slugger.slug(stringToSlug); 31 32 return slug; 33}; 34 35export const isVersionedUrl = (url: string) => { 36 return /https?:\/\/(.*)(\/versions\/.*)/.test(url); 37}; 38 39export const replaceVersionInUrl = (url: string, replaceWith: string) => { 40 const urlArr = url.split('/'); 41 urlArr[2] = replaceWith; 42 return urlArr.join('/'); 43}; 44 45export const getVersionFromUrl = (url: string) => { 46 return url.split('/')[2]; 47}; 48 49/** 50 * Get the user facing or human-readable version from the SDK verion. 51 * If you provide a `latestVersion`, `latest` will include the sdk version in parentheses. 52 */ 53export const getUserFacingVersionString = ( 54 version: string, 55 latestVersion?: string, 56 betaVersion?: string 57): string => { 58 if (version === 'latest') { 59 return latestVersion ? `Latest (${getUserFacingVersionString(latestVersion)})` : 'Latest'; 60 } else if (version === 'unversioned') { 61 return 'Unversioned'; 62 } 63 64 const versionString = `SDK${version?.substring(1, 3)}`; 65 66 if (version === betaVersion) { 67 return `Beta (${versionString})`; 68 } 69 70 return versionString; 71}; 72