mirror of
https://github.com/facebook/docusaurus.git
synced 2025-07-30 23:08:54 +02:00
chore: backport retro compatible commits for the Docusaurus v2.2 release (#8264)
Co-authored-by: Jan Peer Stoecklmair <jan.peer.stoecklmair@dynatrace.com> Co-authored-by: Joshua Chen <sidachen2003@gmail.com> Co-authored-by: sebastienlorber <lorber.sebastien@gmail.com> Co-authored-by: Sébastien Lorber <slorber@users.noreply.github.com> Co-authored-by: LittleboyHarry <littleboyharry@qq.com> Co-authored-by: Mikey O'Toole <mikey@homotechsual.dev> Co-authored-by: Jan Peer Stöcklmair <jan.oster94@gmail.com> Co-authored-by: Nguyễn Thành Nam <namnguyenthanh.work@gmail.com> Co-authored-by: Sanjaiyan Parthipan <parthipankalayini@gmail.com> Co-authored-by: Ramazan SANCAR <ramazansancar4545@gmail.com> Co-authored-by: mturoci <64769322+mturoci@users.noreply.github.com> Co-authored-by: Adnan Hashmi <56730784+adnanhashmi09@users.noreply.github.com> Co-authored-by: Pranav Joglekar <pranav2000joglekar@gmail.com> Co-authored-by: forgeRW <20483211+forgeRW@users.noreply.github.com> Co-authored-by: Masahiko Hara <pasora@sfc.wide.ad.jp> Co-authored-by: Johan Fagerberg <johanringmann@gmail.com> Co-authored-by: John Reilly <johnny_reilly@hotmail.com> Co-authored-by: Sam Wall <oss@samuelwall.co.uk> Co-authored-by: Jeferson S. Brito <30840709+jeferson-sb@users.noreply.github.com> Co-authored-by: evan <evanmccarthy@outlook.com> Co-authored-by: Xabier Lahuerta Vazquez <xlahuerta@protonmail.com> Co-authored-by: Forresst <forresst17@gmail.com> Co-authored-by: Shanmughapriyan S <priyanshan03@gmail.com> Co-authored-by: Alexey Pyltsyn <lex61rus@gmail.com>
This commit is contained in:
parent
7743aa6307
commit
de972142a8
155 changed files with 2822 additions and 563 deletions
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "@docusaurus/utils",
|
||||
"version": "2.1.0",
|
||||
"version": "2.2.0",
|
||||
"description": "Node utility functions for Docusaurus packages.",
|
||||
"main": "./lib/index.js",
|
||||
"types": "./lib/index.d.ts",
|
||||
|
@ -18,7 +18,7 @@
|
|||
},
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@docusaurus/logger": "2.1.0",
|
||||
"@docusaurus/logger": "2.2.0",
|
||||
"@svgr/webpack": "^6.2.1",
|
||||
"file-loader": "^6.2.0",
|
||||
"fs-extra": "^10.1.0",
|
||||
|
@ -38,7 +38,7 @@
|
|||
"node": ">=16.14"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@docusaurus/types": "2.1.0",
|
||||
"@docusaurus/types": "2.2.0",
|
||||
"@types/dedent": "^0.7.0",
|
||||
"@types/github-slugger": "^1.3.0",
|
||||
"@types/micromatch": "^4.0.2",
|
||||
|
|
1
packages/docusaurus-utils/src/__tests__/__fixtures__/build-snap/htmlFile.html
generated
Normal file
1
packages/docusaurus-utils/src/__tests__/__fixtures__/build-snap/htmlFile.html
generated
Normal file
|
@ -0,0 +1 @@
|
|||
htmlFile.html
|
|
@ -0,0 +1 @@
|
|||
nestedHtmlFile.html
|
|
@ -73,6 +73,38 @@ describe('readOutputHTMLFile', () => {
|
|||
).then(String),
|
||||
).resolves.toBe('file\n');
|
||||
});
|
||||
it('reads file ending in .html', async () => {
|
||||
await expect(
|
||||
readOutputHTMLFile(
|
||||
'/htmlFile.html',
|
||||
path.join(__dirname, '__fixtures__/build-snap'),
|
||||
false,
|
||||
).then(String),
|
||||
).resolves.toBe('htmlFile.html\n');
|
||||
await expect(
|
||||
readOutputHTMLFile(
|
||||
'/htmlFile.html',
|
||||
path.join(__dirname, '__fixtures__/build-snap'),
|
||||
undefined,
|
||||
).then(String),
|
||||
).resolves.toBe('htmlFile.html\n');
|
||||
});
|
||||
it('reads file ending in .html in folder containing .html', async () => {
|
||||
await expect(
|
||||
readOutputHTMLFile(
|
||||
'/weird.html.folder/nestedHtmlFile.html',
|
||||
path.join(__dirname, '__fixtures__/build-snap'),
|
||||
undefined,
|
||||
).then(String),
|
||||
).resolves.toBe('nestedHtmlFile.html\n');
|
||||
await expect(
|
||||
readOutputHTMLFile(
|
||||
'/weird.html.folder/nestedHtmlFile.html',
|
||||
path.join(__dirname, '__fixtures__/build-snap'),
|
||||
undefined,
|
||||
).then(String),
|
||||
).resolves.toBe('nestedHtmlFile.html\n');
|
||||
});
|
||||
// Can it ever happen?
|
||||
it('throws if file does not exist', async () => {
|
||||
await expect(
|
||||
|
@ -82,7 +114,7 @@ describe('readOutputHTMLFile', () => {
|
|||
undefined,
|
||||
).then(String),
|
||||
).rejects.toThrowErrorMatchingInlineSnapshot(
|
||||
`"Expected output HTML file to be found at <PROJECT_ROOT>/packages/docusaurus-utils/src/__tests__/__fixtures__/build-snap/nonExistent/index.html."`,
|
||||
`"Expected output HTML file to be found at <PROJECT_ROOT>/packages/docusaurus-utils/src/__tests__/__fixtures__/build-snap/nonExistent/index.html for permalink /nonExistent."`,
|
||||
);
|
||||
});
|
||||
});
|
||||
|
|
|
@ -156,7 +156,7 @@ describe('posixPath', () => {
|
|||
it('works', () => {
|
||||
const asserts: {[key: string]: string} = {
|
||||
'c:/aaaa\\bbbb': 'c:/aaaa/bbbb',
|
||||
'c:\\aaaa\\bbbb\\★': 'c:\\aaaa\\bbbb\\★',
|
||||
'c:\\aaaa\\bbbb\\★': 'c:/aaaa/bbbb/★',
|
||||
'\\\\?\\c:\\aaaa\\bbbb': '\\\\?\\c:\\aaaa\\bbbb',
|
||||
'c:\\aaaa\\bbbb': 'c:/aaaa/bbbb',
|
||||
'foo\\bar': 'foo/bar',
|
||||
|
|
|
@ -79,20 +79,22 @@ export async function readOutputHTMLFile(
|
|||
trailingSlash: boolean | undefined,
|
||||
): Promise<Buffer> {
|
||||
const withTrailingSlashPath = path.join(outDir, permalink, 'index.html');
|
||||
const withoutTrailingSlashPath = path.join(
|
||||
outDir,
|
||||
`${permalink.replace(/\/$/, '')}.html`,
|
||||
);
|
||||
const HTMLPath = await findAsyncSequential(
|
||||
[
|
||||
trailingSlash !== false && withTrailingSlashPath,
|
||||
trailingSlash !== true && withoutTrailingSlashPath,
|
||||
].filter((p): p is string => Boolean(p)),
|
||||
fs.pathExists,
|
||||
);
|
||||
const withoutTrailingSlashPath = (() => {
|
||||
const basePath = path.join(outDir, permalink.replace(/\/$/, ''));
|
||||
const htmlSuffix = /\.html?$/i.test(basePath) ? '' : '.html';
|
||||
return `${basePath}${htmlSuffix}`;
|
||||
})();
|
||||
|
||||
const possibleHtmlPaths = [
|
||||
trailingSlash !== false && withTrailingSlashPath,
|
||||
trailingSlash !== true && withoutTrailingSlashPath,
|
||||
].filter((p): p is string => Boolean(p));
|
||||
|
||||
const HTMLPath = await findAsyncSequential(possibleHtmlPaths, fs.pathExists);
|
||||
|
||||
if (!HTMLPath) {
|
||||
throw new Error(
|
||||
`Expected output HTML file to be found at ${withTrailingSlashPath}.`,
|
||||
`Expected output HTML file to be found at ${withTrailingSlashPath} for permalink ${permalink}.`,
|
||||
);
|
||||
}
|
||||
return fs.readFile(HTMLPath);
|
||||
|
|
|
@ -58,12 +58,7 @@ export function shortName(str: string): string {
|
|||
export function posixPath(str: string): string {
|
||||
const isExtendedLengthPath = str.startsWith('\\\\?\\');
|
||||
|
||||
// Forward slashes are only valid Windows paths when they don't contain non-
|
||||
// ascii characters.
|
||||
// eslint-disable-next-line no-control-regex
|
||||
const hasNonAscii = /[^\u0000-\u0080]+/.test(str);
|
||||
|
||||
if (isExtendedLengthPath || hasNonAscii) {
|
||||
if (isExtendedLengthPath) {
|
||||
return str;
|
||||
}
|
||||
return str.replace(/\\/g, '/');
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue