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) 28 .split(' ') 29 .splice(0, length) 30 .join('-'); 31 32 // NOTE(jim): This will strip out commas from stringToSlug 33 const slug = slugger.slug(stringToSlug); 34 35 return slug; 36}; 37 38export const isVersionedUrl = (url: string) => { 39 return /https?:\/\/(.*)(\/versions\/.*)/.test(url); 40}; 41 42export const replaceVersionInUrl = (url: string, replaceWith: string) => { 43 const urlArr = url.split('/'); 44 urlArr[2] = replaceWith; 45 return urlArr.join('/'); 46}; 47 48export const getVersionFromUrl = (url: string) => { 49 return url.split('/')[2]; 50}; 51 52/** 53 * Get the user facing or human-readable version from the SDK verion. 54 * If you provide a `latestVersion`, `latest` will include the sdk version in parentheses. 55 */ 56export const getUserFacingVersionString = ( 57 version: string, 58 latestVersion?: string, 59 betaVersion?: string 60): string => { 61 if (version === 'latest') { 62 return latestVersion ? `Latest (${getUserFacingVersionString(latestVersion)})` : 'Latest'; 63 } else if (version === 'unversioned') { 64 return 'Unversioned'; 65 } 66 67 const versionString = `SDK${version?.substring(1, 3)}`; 68 69 if (version === betaVersion) { 70 return `Beta (${versionString})`; 71 } 72 73 return versionString; 74}; 75