From 67403b3b65be4eb9252288f7016d9464b4699662 Mon Sep 17 00:00:00 2001 From: Alexey Pyltsyn Date: Tue, 12 Oct 2021 17:49:01 +0300 Subject: [PATCH] fix: preserve hash in asset link (#5690) --- .../__tests__/__snapshots__/index.test.ts.snap | 6 +++++- .../remark/transformLinks/__tests__/fixtures/asset.md | 4 ++++ .../src/remark/transformLinks/index.ts | 10 +++++++--- 3 files changed, 16 insertions(+), 4 deletions(-) diff --git a/packages/docusaurus-mdx-loader/src/remark/transformLinks/__tests__/__snapshots__/index.test.ts.snap b/packages/docusaurus-mdx-loader/src/remark/transformLinks/__tests__/__snapshots__/index.test.ts.snap index 57d77f8a74..9bfd2f2c63 100644 --- a/packages/docusaurus-mdx-loader/src/remark/transformLinks/__tests__/__snapshots__/index.test.ts.snap +++ b/packages/docusaurus-mdx-loader/src/remark/transformLinks/__tests__/__snapshots__/index.test.ts.snap @@ -14,7 +14,9 @@ exports[`transformAsset plugin transform md links to 1`] = ` asset -asset +asset with hash + +asset ## Heading @@ -32,6 +34,8 @@ exports[`transformAsset plugin transform md links to 1`] = ` @site/static/staticAsset.pdf +@site/static/staticAsset.pdf + Just staticAsset.pdf, and awesome staticAsset 2.pdf 'It is really "AWESOME"', but also coded staticAsset 3.pdf {\\"Clickable diff --git a/packages/docusaurus-mdx-loader/src/remark/transformLinks/__tests__/fixtures/asset.md b/packages/docusaurus-mdx-loader/src/remark/transformLinks/__tests__/fixtures/asset.md index 2cd2ca2649..ac15b648da 100644 --- a/packages/docusaurus-mdx-loader/src/remark/transformLinks/__tests__/fixtures/asset.md +++ b/packages/docusaurus-mdx-loader/src/remark/transformLinks/__tests__/fixtures/asset.md @@ -4,6 +4,8 @@ [asset](./asset.pdf) +[asset with hash](./asset.pdf#page=2) + [asset](asset.pdf 'Title') ## Heading @@ -22,6 +24,8 @@ [@site/static/staticAsset.pdf](@site/static/staticAsset.pdf) +[@site/static/staticAsset.pdf](@site/static/staticAsset.pdf#page=2 'Title') + [Just staticAsset.pdf](/staticAsset.pdf), and [**awesome** staticAsset 2.pdf 'It is really "AWESOME"'](/staticAsset.pdf), but also [coded `staticAsset 3.pdf`](/staticAsset.pdf) [![Clickable Docusaurus logo](./static/staticAssetImage.png)](/staticAssetImage.png) diff --git a/packages/docusaurus-mdx-loader/src/remark/transformLinks/index.ts b/packages/docusaurus-mdx-loader/src/remark/transformLinks/index.ts index 2ef202a4e8..b45907738c 100644 --- a/packages/docusaurus-mdx-loader/src/remark/transformLinks/index.ts +++ b/packages/docusaurus-mdx-loader/src/remark/transformLinks/index.ts @@ -23,6 +23,7 @@ import type {Link, Literal} from 'mdast'; const { loaders: {inlineMarkdownLinkFileLoader}, } = getFileLoaderUtils(); +const hashRegex = /#.*$/; interface PluginOptions { filePath: string; @@ -56,6 +57,9 @@ function toAssetRequireNode({ let relativeRequireAssetPath = posixPath( path.relative(path.dirname(filePath), requireAssetPath), ); + const hash = hashRegex.test(node.url) + ? node.url.substr(node.url.indexOf('#')) + : ''; // nodejs does not like require("assets/file.pdf") relativeRequireAssetPath = relativeRequireAssetPath.startsWith('.') @@ -64,9 +68,9 @@ function toAssetRequireNode({ const href = `require('${inlineMarkdownLinkFileLoader}${escapePath( relativeRequireAssetPath, - )}').default`; + )}').default${hash ? ` + '${hash}'` : ''}`; const children = stringifyContent(node); - const title = node.title ? `title="${escapeHtml(node.title)}"` : ''; + const title = node.title ? ` title="${escapeHtml(node.title)}"` : ''; (node as unknown as Literal).type = 'jsx'; ( @@ -82,7 +86,7 @@ async function convertToAssetLinkIfNeeded({ staticDir, filePath, }: {node: Link} & PluginOptions) { - const assetPath = node.url; + const assetPath = node.url.replace(hashRegex, ''); const hasSiteAlias = assetPath.startsWith('@site/'); const hasAssetLikeExtension =