* testing out a rest operations sidebar * cleanup * renamed 5 files * renamed 5 files * set redirect_from on 5 files * renamed 1 files * renamed 1 files * renamed 3 files * renamed 1 files * renamed 1 files * renamed 3 files * renamed 1 files * renamed 2 files * renamed 1 files * renamed 4 files * renamed 15 files * renamed 2 files * renamed 6 files * renamed 1 files * renamed 4 files * renamed 7 files * renamed 1 files * renamed 3 files * renamed 3 files * renamed 1 files * renamed 5 files * renamed 1 files * renamed 1 files * renamed 3 files * renamed 4 files * renamed 1 files * renamed 1 files * renamed 2 files * renamed 4 files * renamed 1 files * renamed 1 files * renamed 1 files * renamed 6 files * renamed 6 files * renamed 4 files * move files * adding more * updating to add restcontext and start of removing data/reusables/rest-reference * removed data/reusables * add a RestMiniTocItem and updating the filtering to add a subcategory so all manually added H3s are in mini tocs in addition to operations * remove console log * [WIP]: REST New Proposal Sidebar (#26471) * saving * update sidebar * remove console log * update guides and overview * import Category for category level rest pages * update undefined restOperations * update restOperationData category and subcategory levels" * minor updates * update get mini toc items function * updating REST context for sidebar * updating rest data * remove console logs * WIP: mini-toc-ing the sidebar Co-authored-by: Robert Sese <rsese@github.com> * A little cleanup * Fix first subcategory link and add some comments * updating anchor links in sidebar * adding updates * remove standalone * update product and maptopic pages using article context * add conditional link wrapper * fix sidebar toggle and versions for enterprise admin * update versions per subcategory * Highlight sidebar link for current page * Update miniToc hash links and hash change tracking * fix unique key in CollapsibleSection * Fix list markup * remove title * update permissions * Hide minitocs on landing (#26594) * hide minitocs on landing page * simplify page components and remove minitoc from sidebar for guides/overview * fix carats and category fix * remove id Co-authored-by: Grace Park <gracepark@github.com> * updating content based on versions script check with the OpenAPI * update script and content files * update script and content/rest files * update to add TocLanding * update script * update index files * add codespaces repository-secrets * remove openapi schema check script * remove minitocs at the top * add h2 about the {title} api * fix tests/unit/openapi-schema.js * Fix linting tests * fix search/topics test * fix tests/unit/pages test * update rest/reference links in components * run prettier * Update components/rest/RestReferencePage.tsx Co-authored-by: Rachael Sewell <rachmari@github.com> * Update components/rest/RestReferencePage.tsx Co-authored-by: Rachael Sewell <rachmari@github.com> * Update pages/[versionId]/rest/[category]/[subcategory].tsx Co-authored-by: Rachael Sewell <rachmari@github.com> * Update pages/[versionId]/rest/[category]/[subcategory].tsx Co-authored-by: Rachael Sewell <rachmari@github.com> * Update pages/[versionId]/rest/[category]/[subcategory].tsx Co-authored-by: Rachael Sewell <rachmari@github.com> * Update pages/[versionId]/rest/[category]/[subcategory].tsx Co-authored-by: Rachael Sewell <rachmari@github.com> * Update tests/unit/openapi-schema.js Co-authored-by: Rachael Sewell <rachmari@github.com> * updating comment location * remove dependabot override * remove path-utils current product update for rest * run linter * remove dependabot.md and remove h2 heading on restreference * update the correct product to rest for rest pages * adding comments for updates to path-utils * remove console log * REST sidebar: handle legacy v3 redirects (#26686) * Add script to handle legacy v3 REST redirects * Run the script * Handle a redirect to a redirect * Update REST test URLs * 'await' and test runs subcategory of checks * Update REST URLs for routing/developer-site-redirects tests * Update developer-redirects fixture with new REST URLs * Resolve merge conflicts * Update rest-redirects fixture with new REST URLs * Fix broken links with REST pages re-org * redirectTo could be undefined * Fix script for posterity, can't redirect paths with hashes * Remove invalid hash redirects * Typically don't need to save one-off scripts * Undo redirect changes (not necessary for handling v3 redirects) * Remove script-added redirects * Update old v3 redirects with new REST URLs * No more GHES search indexing page * 'org' not 'organization' * Update fixture data for new REST URLs * revert any content directory changes Co-authored-by: Grace Park <gracepark@github.com> Co-authored-by: Rachael Sewell <rachmari@github.com> * Adding test rest (#26750) * add test to check openapi schema versions and content rest frontmatter versions * update lib/redirects * fix test and add error messages * adding repository secrets * adding repository-secrets.md * Revert "update lib/redirects" This reverts commit 3aafe28265764d5bc09c0c478c8e0ca099c8fbcf. * remove lib/redirects changes and console logs * Update lib/rest/index.js Co-authored-by: Rachael Sewell <rachmari@github.com> * update unique key * Rest client side redirects (#26754) * adding tags subcategory for the rest content repos category * run prettier * bug fix for anchor scrolls" (#26892) * updating width size for rest reference page * Rest sidebar consolidation (#26862) * refactor sidebar * fix articlecontext provider issue on rest product landing page for all versions * fix a bug, create new component * revert change to create new component and fix bug Co-authored-by: Rachael Sewell <rachmari@github.com> * Set currentAnchor with a hashchange handler (#26923) * Rest sidebar design tweaks (#26807) * Rest sidebar design tweaks * tweak color to subtle * use muted color and margin for line * update to design feedback Co-authored-by: Grace Park <gracepark@github.com> * Remove cheerio from rest-collapsible (#26948) * remove cheerio from rest-collapsible * update type * adding endswith instead * use productId instead * one off edge case for secret-scanning * Reorganize subcategory and category, Update pre -> div, Add RestContext (#26950) * reorganize subcategory and category * add RestContext * update comment * update for endpoints page * add comment * move object to restcontext * remove effectiveDate in restcontext * remove width calculation for rest reference page * fix adding manual writer's minitocs to sidebar * update with feedback * update comment * update isRestReferencePage * remove page component and fix bug * adding back rest/index.tsx Co-authored-by: Rachael Sewell <rachmari@github.com> * update content/rest" * add back design tweak * update to div * update margins on rest api reference * remove page component * adding tests * separate product from rest sidebar (#27065) * separate product from rest sidebar * Use ProductCollapsibleSections for product pages * fix tests Co-authored-by: Robert Sese <rsese@github.com> Co-authored-by: Grace Park <gracepark@github.com> * Rest sidebar translations (#27052) * update translations * remove general test Co-authored-by: Robert Sese <rsese@github.com> Co-authored-by: Rachael Sewell <rachmari@github.com>
130 lines
4.1 KiB
JavaScript
130 lines
4.1 KiB
JavaScript
import slash from 'slash'
|
|
import path from 'path'
|
|
import patterns from './patterns.js'
|
|
import { latest } from './enterprise-server-releases.js'
|
|
import { productIds } from './all-products.js'
|
|
import { allVersions } from './all-versions.js'
|
|
import nonEnterpriseDefaultVersion from './non-enterprise-default-version.js'
|
|
const supportedVersions = new Set(Object.keys(allVersions))
|
|
|
|
// Add the language to the given HREF
|
|
// /articles/foo -> /en/articles/foo
|
|
export function getPathWithLanguage(href, languageCode) {
|
|
return slash(path.posix.join('/', languageCode, getPathWithoutLanguage(href))).replace(
|
|
patterns.trailingSlash,
|
|
'$1'
|
|
)
|
|
}
|
|
|
|
// Remove the language from the given HREF
|
|
// /en/articles/foo -> /articles/foo
|
|
export function getPathWithoutLanguage(href) {
|
|
return slash(href.replace(patterns.hasLanguageCode, '/'))
|
|
}
|
|
|
|
// Remove the version segment from the path
|
|
export function getPathWithoutVersion(href) {
|
|
const versionFromPath = getVersionStringFromPath(href)
|
|
|
|
// If the derived version is not found in the list of all versions, just return the HREF
|
|
return allVersions[versionFromPath]
|
|
? href.replace(`/${getVersionStringFromPath(href)}`, '')
|
|
: href
|
|
}
|
|
|
|
// Return the version segment in a path
|
|
export function getVersionStringFromPath(href, supportedOnly = false) {
|
|
href = getPathWithoutLanguage(href)
|
|
|
|
// Return immediately if this is a link to the homepage
|
|
if (href === '/') {
|
|
return nonEnterpriseDefaultVersion
|
|
}
|
|
|
|
// Get the first segment
|
|
const versionFromPath = href.split('/')[1]
|
|
|
|
// If the first segment is a supported product, assume this is FPT
|
|
if (productIds.includes(versionFromPath)) {
|
|
return nonEnterpriseDefaultVersion
|
|
}
|
|
|
|
// Otherwise, check if it's a supported version
|
|
if (supportedVersions.has(versionFromPath)) {
|
|
return versionFromPath
|
|
}
|
|
|
|
// If the version segment is the latest enterprise-server release, return the latest release
|
|
if (versionFromPath === 'enterprise-server@latest') {
|
|
return `enterprise-server@${latest}`
|
|
}
|
|
|
|
// If it's just a plan with no @release (e.g., `enterprise-server`), return the latest release
|
|
const planObject = Object.values(allVersions).find((v) => v.plan === versionFromPath)
|
|
if (planObject) {
|
|
return allVersions[planObject.latestVersion].version
|
|
}
|
|
|
|
// If the caller of this function explicitly wants to know if the
|
|
// version part is *not* supported, they get back `undefined`.
|
|
// But this function is used in many other places where it potentially
|
|
// doesn't care if the version is supported.
|
|
// For example, in lib/redirects/permalinks.js it needs to know if the
|
|
// URL didn't contain a valid version.
|
|
if (supportedOnly) {
|
|
return
|
|
}
|
|
|
|
// Otherwise, return the first segment as-is, which may not be a real supported version,
|
|
// but additional checks are done on this segment in getVersionedPathWithoutLanguage
|
|
return versionFromPath
|
|
}
|
|
|
|
// Return the corresponding object for the version segment in a path
|
|
export function getVersionObjectFromPath(href) {
|
|
const versionFromPath = getVersionStringFromPath(href)
|
|
|
|
return allVersions[versionFromPath]
|
|
}
|
|
|
|
// Return the product segment from the path
|
|
export function getProductStringFromPath(href) {
|
|
href = getPathWithoutLanguage(href)
|
|
|
|
if (href === '/') return 'homepage'
|
|
|
|
const pathParts = href.split('/')
|
|
|
|
if (pathParts.includes('early-access')) return 'early-access'
|
|
|
|
// For rest pages the currentProduct should be rest
|
|
// We use this to show SidebarRest, which is a different sidebar than the rest of the site
|
|
if (pathParts[1] === 'rest') return 'rest'
|
|
|
|
return productIds.includes(pathParts[2]) ? pathParts[2] : pathParts[1]
|
|
}
|
|
|
|
export function getCategoryStringFromPath(href) {
|
|
href = getPathWithoutLanguage(href)
|
|
|
|
if (href === '/') return null
|
|
|
|
const pathParts = href.split('/')
|
|
|
|
if (pathParts.includes('early-access')) return null
|
|
|
|
const productIndex = productIds.includes(pathParts[2]) ? 2 : 1
|
|
|
|
return pathParts[productIndex + 1]
|
|
}
|
|
|
|
export default {
|
|
getPathWithLanguage,
|
|
getPathWithoutLanguage,
|
|
getPathWithoutVersion,
|
|
getVersionStringFromPath,
|
|
getVersionObjectFromPath,
|
|
getProductStringFromPath,
|
|
getCategoryStringFromPath,
|
|
}
|