1
0
mirror of synced 2026-01-05 03:06:35 -05:00
Files
docs/lib/render-content/plugins/rewrite-asset-paths-to-s3.js
Jason Etcovitch bd63f47636 Remove cheerio from Page#render (#17566)
* Write our plugin

* Include it

* Move the RegEx

* Don't rewriteLocalLinks with cheerio anymore

* Process after HTML ast is generated

* Use the same logic as before, just to see if it'll pass

* Don't require languageCode/version

* Only work on local links

* Needs an href

* Only update href if there's a new one to use

* Check for node.properties

* Some links are just mean

* Move use-english-headings to be a plugin

* Bail if no englishHeadings were passed

* Install rehype-wrap

* Wrap ol > li img in div.procedural-image-wrapper

* Test for platform without cheerio

* Use a plugin for rewriteAssetPathsToS3

* Remove cheerio from page.render

* Fix require paths

* SImplify

* Fix some 🐛s

* Use our own rehype-wrap

* Move rewriteAssetPathsToS3 after HTML AST

* Remove some console logs

* Fix check for includesPlatformSpecificContent

* Rename ast => tree
2021-01-29 15:44:50 -05:00

46 lines
1.8 KiB
JavaScript

const visit = require('unist-util-visit')
const latestEnterpriseRelease = require('../../enterprise-server-releases').latest
const nonEnterpriseDefaultVersion = require('../../non-enterprise-default-version')
const { getS3BucketPathFromVersion } = require('../../s3-bucket-path-utils')
const allVersions = require('../../all-versions')
const s3BasePath = 'https://github-images.s3.amazonaws.com'
const matcher = node => (
node.type === 'element' &&
node.tagName === 'img' &&
node.properties.src &&
node.properties.src.startsWith('/assets/images')
)
// This module rewrites asset paths on Enterprise versions to S3 paths.
// Source example: /assets/images/foo.png
// Rewritten: https://github-images.s3.amazonaws.com/enterprise/2.20/assets/images/foo.png
// The one exception is Admin pages on the latest GHES release.
module.exports = function rewriteAssetPathsToS3 ({ currentVersion, relativePath }) {
// Bail if we don't have a relativePath in this context
if (!relativePath) return
// skip if this is the homepage
if (relativePath === 'index.md') return
// if the current version is non-enterprise, do not rewrite
if (currentVersion === nonEnterpriseDefaultVersion) return
// the relativePath starts with the product, like /admin/foo or /github/foo
const product = relativePath.split('/')[0]
// if this is an Admin page on the latest GHES release, do not rewrite
if (product === 'admin' && allVersions[currentVersion].currentRelease === latestEnterpriseRelease) return
// if the version is enterprise-server@2.22, use `enterprise/2.22` as the bucket path
// otherwise, use the plan name, e.g., `github-ae`
const bucketPath = getS3BucketPathFromVersion(currentVersion)
return tree => {
visit(tree, matcher, node => {
// Rewrite the node's src
node.properties.src = `${s3BasePath}/${bucketPath}${node.properties.src}`
})
}
}