From ab1dada1aab0ef2e3d283d7bf96145d62adda221 Mon Sep 17 00:00:00 2001 From: Anthony McCaigue Date: Sun, 23 Jan 2022 03:46:27 +0000 Subject: [PATCH] fix: allow links to JSON in .md files to be transformed as asset links (#4827) * fix: fix links to JSON from .md files closes #3561 It seems to be a common problem that many people are having see: https://stackoverflow.com/questions/65307533/link-to-static-json-file Co-authored-by: Anthony McCaigue Co-authored-by: Alois Klink * Add dogfooding examples * actually fix * oops Co-authored-by: Alois Klink Co-authored-by: Josh-Cena --- .../remark/transformLinks/__tests__/__fixtures__/asset.md | 4 ++++ .../transformLinks/__tests__/__fixtures__/data.json | 1 + .../__tests__/__fixtures__/static/staticjson.json | 1 + .../__tests__/__snapshots__/index.test.ts.snap | 4 ++++ .../src/remark/transformLinks/index.ts | 7 ++++++- website/_dogfooding/_pages tests/_script.js | 8 ++++++++ website/_dogfooding/_pages tests/data.json | 3 +++ website/_dogfooding/_pages tests/markdown-tests.md | 6 ++++++ 8 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 packages/docusaurus-mdx-loader/src/remark/transformLinks/__tests__/__fixtures__/data.json create mode 100644 packages/docusaurus-mdx-loader/src/remark/transformLinks/__tests__/__fixtures__/static/staticjson.json create mode 100644 website/_dogfooding/_pages tests/_script.js create mode 100644 website/_dogfooding/_pages tests/data.json 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 e0e041b47c..a3808267d2 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 @@ -35,3 +35,7 @@ [![Clickable Docusaurus logo](./static/staticAssetImage.png)](/staticAssetImage.png) [Stylized link to asset file](./asset.pdf) + +[json](./data.json) + +[static json](/staticjson.json) diff --git a/packages/docusaurus-mdx-loader/src/remark/transformLinks/__tests__/__fixtures__/data.json b/packages/docusaurus-mdx-loader/src/remark/transformLinks/__tests__/__fixtures__/data.json new file mode 100644 index 0000000000..56c8e28033 --- /dev/null +++ b/packages/docusaurus-mdx-loader/src/remark/transformLinks/__tests__/__fixtures__/data.json @@ -0,0 +1 @@ +{"hello": "world"} diff --git a/packages/docusaurus-mdx-loader/src/remark/transformLinks/__tests__/__fixtures__/static/staticjson.json b/packages/docusaurus-mdx-loader/src/remark/transformLinks/__tests__/__fixtures__/static/staticjson.json new file mode 100644 index 0000000000..b60e84d9eb --- /dev/null +++ b/packages/docusaurus-mdx-loader/src/remark/transformLinks/__tests__/__fixtures__/static/staticjson.json @@ -0,0 +1 @@ +{"static": ["json", 1]} 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 fcf9a94faf..5f176b716c 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 @@ -47,5 +47,9 @@ exports[`transformAsset plugin transform md links to 1`] = ` {\\"Clickable Stylized link to asset file + +json + +static json " `; diff --git a/packages/docusaurus-mdx-loader/src/remark/transformLinks/index.ts b/packages/docusaurus-mdx-loader/src/remark/transformLinks/index.ts index 80a85a5c8d..e674bb6869 100644 --- a/packages/docusaurus-mdx-loader/src/remark/transformLinks/index.ts +++ b/packages/docusaurus-mdx-loader/src/remark/transformLinks/index.ts @@ -47,7 +47,12 @@ function toAssetRequireNode(node: Link, assetPath: string, filePath: string) { const hash = parsedUrl.hash ?? ''; const search = parsedUrl.search ?? ''; - const href = `require('${inlineMarkdownLinkFileLoader}${ + const href = `require('${ + // A hack to stop Webpack from using its built-in loader to parse JSON + path.extname(relativeAssetPath) === '.json' + ? `${relativeAssetPath.replace('.json', '.raw')}!=` + : '' + }${inlineMarkdownLinkFileLoader}${ escapePath(relativeAssetPath) + search }').default${hash ? ` + '${hash}'` : ''}`; const children = stringifyContent(node); diff --git a/website/_dogfooding/_pages tests/_script.js b/website/_dogfooding/_pages tests/_script.js new file mode 100644 index 0000000000..fd076832c2 --- /dev/null +++ b/website/_dogfooding/_pages tests/_script.js @@ -0,0 +1,8 @@ +/** + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +export default 1; diff --git a/website/_dogfooding/_pages tests/data.json b/website/_dogfooding/_pages tests/data.json new file mode 100644 index 0000000000..f2a886f39d --- /dev/null +++ b/website/_dogfooding/_pages tests/data.json @@ -0,0 +1,3 @@ +{ + "hello": "world" +} diff --git a/website/_dogfooding/_pages tests/markdown-tests.md b/website/_dogfooding/_pages tests/markdown-tests.md index f1a417b9c3..80d9ea8bad 100644 --- a/website/_dogfooding/_pages tests/markdown-tests.md +++ b/website/_dogfooding/_pages tests/markdown-tests.md @@ -25,3 +25,9 @@ See [#3309](https://github.com/facebook/docusaurus/issues/3309) - [pathname://../dogfooding/javadoc](pathname://../dogfooding/javadoc) - [pathname://../dogfooding/javadoc/index.html](pathname://../dogfooding/javadoc/index.html) + +## Linking to JSON + +- [./script.js](./_script.js) + +- [./data.json](./data.json)