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:
Sébastien Lorber 2022-10-29 15:13:42 +02:00 committed by GitHub
parent 7743aa6307
commit de972142a8
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
155 changed files with 2822 additions and 563 deletions

View file

@ -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",

View file

@ -0,0 +1 @@
htmlFile.html

View file

@ -0,0 +1 @@
nestedHtmlFile.html

View file

@ -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."`,
);
});
});

View file

@ -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',

View file

@ -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);

View file

@ -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, '/');