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