mirror of
https://github.com/facebook/docusaurus.git
synced 2025-04-30 10:48:05 +02:00
refactor: prefer fs.outputFile to ensureDir + writeFile (#6880)
* refactor: prefer fs.outputFile to ensureDir + writeFile * fix test * fix
This commit is contained in:
parent
73df485aec
commit
23a34c1a07
15 changed files with 66 additions and 108 deletions
|
@ -6,6 +6,10 @@ Array [
|
||||||
"<PROJECT_ROOT>/packages/docusaurus-migrate/src/__tests__/__fixtures__/complex_website/website/blog",
|
"<PROJECT_ROOT>/packages/docusaurus-migrate/src/__tests__/__fixtures__/complex_website/website/blog",
|
||||||
"<PROJECT_ROOT>/packages/docusaurus-migrate/src/__tests__/__fixtures__/migrated_complex_site/blog",
|
"<PROJECT_ROOT>/packages/docusaurus-migrate/src/__tests__/__fixtures__/migrated_complex_site/blog",
|
||||||
],
|
],
|
||||||
|
Array [
|
||||||
|
"<PROJECT_ROOT>/packages/docusaurus-migrate/src/__tests__/__fixtures__/complex_website/website/pages/en",
|
||||||
|
"<PROJECT_ROOT>/packages/docusaurus-migrate/src/__tests__/__fixtures__/migrated_complex_site/src/pages",
|
||||||
|
],
|
||||||
Array [
|
Array [
|
||||||
"<PROJECT_ROOT>/packages/docusaurus-migrate/src/__tests__/__fixtures__/complex_website/website/static",
|
"<PROJECT_ROOT>/packages/docusaurus-migrate/src/__tests__/__fixtures__/complex_website/website/static",
|
||||||
"<PROJECT_ROOT>/packages/docusaurus-migrate/src/__tests__/__fixtures__/migrated_complex_site/static",
|
"<PROJECT_ROOT>/packages/docusaurus-migrate/src/__tests__/__fixtures__/migrated_complex_site/static",
|
||||||
|
@ -16,10 +20,7 @@ Array [
|
||||||
exports[`migration test complex website: mkdirp 1`] = `
|
exports[`migration test complex website: mkdirp 1`] = `
|
||||||
Array [
|
Array [
|
||||||
Array [
|
Array [
|
||||||
"<PROJECT_ROOT>/packages/docusaurus-migrate/src/__tests__/__fixtures__/migrated_complex_site/src/css",
|
"<PROJECT_ROOT>/packages/docusaurus-migrate/src/__tests__/__fixtures__/migrated_complex_site/src/pages",
|
||||||
],
|
|
||||||
Array [
|
|
||||||
"<PROJECT_ROOT>/packages/docusaurus-migrate/src/__tests__/__fixtures__/migrated_complex_site/src/pages/",
|
|
||||||
],
|
],
|
||||||
]
|
]
|
||||||
`;
|
`;
|
||||||
|
@ -179,16 +180,6 @@ Array [
|
||||||
}
|
}
|
||||||
",
|
",
|
||||||
],
|
],
|
||||||
Array [
|
|
||||||
"<PROJECT_ROOT>/packages/docusaurus-migrate/src/__tests__/__fixtures__/migrated_complex_site/src/pages/index.js",
|
|
||||||
"import Layout from \\"@theme/Layout\\";
|
|
||||||
import React from \\"react\\";
|
|
||||||
|
|
||||||
export default () => {
|
|
||||||
return <Layout />;
|
|
||||||
};
|
|
||||||
",
|
|
||||||
],
|
|
||||||
]
|
]
|
||||||
`;
|
`;
|
||||||
|
|
||||||
|
@ -198,6 +189,10 @@ Array [
|
||||||
"<PROJECT_ROOT>/packages/docusaurus-migrate/src/__tests__/__fixtures__/missing_version_website/website/blog",
|
"<PROJECT_ROOT>/packages/docusaurus-migrate/src/__tests__/__fixtures__/missing_version_website/website/blog",
|
||||||
"<PROJECT_ROOT>/packages/docusaurus-migrate/src/__tests__/__fixtures__/migrated_missing_version_site/blog",
|
"<PROJECT_ROOT>/packages/docusaurus-migrate/src/__tests__/__fixtures__/migrated_missing_version_site/blog",
|
||||||
],
|
],
|
||||||
|
Array [
|
||||||
|
"<PROJECT_ROOT>/packages/docusaurus-migrate/src/__tests__/__fixtures__/missing_version_website/website/pages/en",
|
||||||
|
"<PROJECT_ROOT>/packages/docusaurus-migrate/src/__tests__/__fixtures__/migrated_missing_version_site/src/pages",
|
||||||
|
],
|
||||||
Array [
|
Array [
|
||||||
"<PROJECT_ROOT>/packages/docusaurus-migrate/src/__tests__/__fixtures__/missing_version_website/website/static",
|
"<PROJECT_ROOT>/packages/docusaurus-migrate/src/__tests__/__fixtures__/missing_version_website/website/static",
|
||||||
"<PROJECT_ROOT>/packages/docusaurus-migrate/src/__tests__/__fixtures__/migrated_missing_version_site/static",
|
"<PROJECT_ROOT>/packages/docusaurus-migrate/src/__tests__/__fixtures__/migrated_missing_version_site/static",
|
||||||
|
@ -208,10 +203,7 @@ Array [
|
||||||
exports[`migration test missing versions: mkdirp 1`] = `
|
exports[`migration test missing versions: mkdirp 1`] = `
|
||||||
Array [
|
Array [
|
||||||
Array [
|
Array [
|
||||||
"<PROJECT_ROOT>/packages/docusaurus-migrate/src/__tests__/__fixtures__/migrated_missing_version_site/src/css",
|
"<PROJECT_ROOT>/packages/docusaurus-migrate/src/__tests__/__fixtures__/migrated_missing_version_site/src/pages",
|
||||||
],
|
|
||||||
Array [
|
|
||||||
"<PROJECT_ROOT>/packages/docusaurus-migrate/src/__tests__/__fixtures__/migrated_missing_version_site/src/pages/",
|
|
||||||
],
|
],
|
||||||
]
|
]
|
||||||
`;
|
`;
|
||||||
|
@ -371,21 +363,15 @@ Array [
|
||||||
}
|
}
|
||||||
",
|
",
|
||||||
],
|
],
|
||||||
Array [
|
|
||||||
"<PROJECT_ROOT>/packages/docusaurus-migrate/src/__tests__/__fixtures__/migrated_missing_version_site/src/pages/index.js",
|
|
||||||
"import Layout from \\"@theme/Layout\\";
|
|
||||||
import React from \\"react\\";
|
|
||||||
|
|
||||||
export default () => {
|
|
||||||
return <Layout />;
|
|
||||||
};
|
|
||||||
",
|
|
||||||
],
|
|
||||||
]
|
]
|
||||||
`;
|
`;
|
||||||
|
|
||||||
exports[`migration test simple website: copy 1`] = `
|
exports[`migration test simple website: copy 1`] = `
|
||||||
Array [
|
Array [
|
||||||
|
Array [
|
||||||
|
"<PROJECT_ROOT>/packages/docusaurus-migrate/src/__tests__/__fixtures__/simple_website/website/pages/en",
|
||||||
|
"<PROJECT_ROOT>/packages/docusaurus-migrate/src/__tests__/__fixtures__/migrated_simple_site/src/pages",
|
||||||
|
],
|
||||||
Array [
|
Array [
|
||||||
"<PROJECT_ROOT>/packages/docusaurus-migrate/src/__tests__/__fixtures__/simple_website/website/static",
|
"<PROJECT_ROOT>/packages/docusaurus-migrate/src/__tests__/__fixtures__/simple_website/website/static",
|
||||||
"<PROJECT_ROOT>/packages/docusaurus-migrate/src/__tests__/__fixtures__/migrated_simple_site/static",
|
"<PROJECT_ROOT>/packages/docusaurus-migrate/src/__tests__/__fixtures__/migrated_simple_site/static",
|
||||||
|
@ -396,10 +382,7 @@ Array [
|
||||||
exports[`migration test simple website: mkdirp 1`] = `
|
exports[`migration test simple website: mkdirp 1`] = `
|
||||||
Array [
|
Array [
|
||||||
Array [
|
Array [
|
||||||
"<PROJECT_ROOT>/packages/docusaurus-migrate/src/__tests__/__fixtures__/migrated_simple_site/src/css",
|
"<PROJECT_ROOT>/packages/docusaurus-migrate/src/__tests__/__fixtures__/migrated_simple_site/src/pages",
|
||||||
],
|
|
||||||
Array [
|
|
||||||
"<PROJECT_ROOT>/packages/docusaurus-migrate/src/__tests__/__fixtures__/migrated_simple_site/src/pages/",
|
|
||||||
],
|
],
|
||||||
]
|
]
|
||||||
`;
|
`;
|
||||||
|
@ -560,24 +543,14 @@ Array [
|
||||||
}
|
}
|
||||||
",
|
",
|
||||||
],
|
],
|
||||||
Array [
|
|
||||||
"<PROJECT_ROOT>/packages/docusaurus-migrate/src/__tests__/__fixtures__/migrated_simple_site/src/pages/index.js",
|
|
||||||
"import Layout from \\"@theme/Layout\\";
|
|
||||||
import React from \\"react\\";
|
|
||||||
|
|
||||||
export default () => {
|
|
||||||
return <Layout />;
|
|
||||||
};
|
|
||||||
",
|
|
||||||
],
|
|
||||||
Array [
|
Array [
|
||||||
"<PROJECT_ROOT>/packages/docusaurus-migrate/src/__tests__/__fixtures__/simple_website/docs/api-commands.md",
|
"<PROJECT_ROOT>/packages/docusaurus-migrate/src/__tests__/__fixtures__/simple_website/docs/api-commands.md",
|
||||||
"---
|
"---
|
||||||
id: commands
|
id: commands
|
||||||
title: CLI Commands
|
title: CLI Commands
|
||||||
---
|
---
|
||||||
|
## Doc
|
||||||
## Doc ",
|
",
|
||||||
],
|
],
|
||||||
Array [
|
Array [
|
||||||
"<PROJECT_ROOT>/packages/docusaurus-migrate/src/__tests__/__fixtures__/simple_website/docs/api-doc-markdown.md",
|
"<PROJECT_ROOT>/packages/docusaurus-migrate/src/__tests__/__fixtures__/simple_website/docs/api-doc-markdown.md",
|
||||||
|
@ -585,8 +558,8 @@ title: CLI Commands
|
||||||
id: doc-markdown
|
id: doc-markdown
|
||||||
title: Markdown Features
|
title: Markdown Features
|
||||||
---
|
---
|
||||||
|
## Doc
|
||||||
## Doc",
|
",
|
||||||
],
|
],
|
||||||
]
|
]
|
||||||
`;
|
`;
|
||||||
|
|
|
@ -11,11 +11,11 @@ import fs from 'fs-extra';
|
||||||
import {posixPath} from '@docusaurus/utils';
|
import {posixPath} from '@docusaurus/utils';
|
||||||
|
|
||||||
async function testMigration(siteDir: string, newDir: string) {
|
async function testMigration(siteDir: string, newDir: string) {
|
||||||
const writeMock = jest.spyOn(fs, 'writeFile').mockImplementation();
|
const writeMock = jest.spyOn(fs, 'outputFile').mockImplementation();
|
||||||
const mkdirpMock = jest.spyOn(fs, 'mkdirp').mockImplementation();
|
const mkdirpMock = jest.spyOn(fs, 'mkdirp').mockImplementation();
|
||||||
const mkdirsMock = jest.spyOn(fs, 'mkdirs').mockImplementation();
|
const mkdirsMock = jest.spyOn(fs, 'mkdirs').mockImplementation();
|
||||||
const copyMock = jest.spyOn(fs, 'copy').mockImplementation();
|
const copyMock = jest.spyOn(fs, 'copy').mockImplementation();
|
||||||
await migrateDocusaurusProject(siteDir, newDir);
|
await migrateDocusaurusProject(siteDir, newDir, true, true);
|
||||||
expect(
|
expect(
|
||||||
writeMock.mock.calls.sort((a, b) =>
|
writeMock.mock.calls.sort((a, b) =>
|
||||||
posixPath(a[0] as string).localeCompare(posixPath(b[0] as string)),
|
posixPath(a[0] as string).localeCompare(posixPath(b[0] as string)),
|
||||||
|
|
|
@ -171,7 +171,7 @@ export async function migrateDocusaurusProject(
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
await fs.writeFile(
|
await fs.outputFile(
|
||||||
path.join(newDir, 'docusaurus.config.js'),
|
path.join(newDir, 'docusaurus.config.js'),
|
||||||
`module.exports=${JSON.stringify(migrationContext.v2Config, null, 2)}`,
|
`module.exports=${JSON.stringify(migrationContext.v2Config, null, 2)}`,
|
||||||
);
|
);
|
||||||
|
@ -388,7 +388,7 @@ async function createPages(context: MigrationContext) {
|
||||||
files.map(async (file) => {
|
files.map(async (file) => {
|
||||||
const filePath = path.join(newDir, 'src', 'pages', file);
|
const filePath = path.join(newDir, 'src', 'pages', file);
|
||||||
const content = await fs.readFile(filePath, 'utf-8');
|
const content = await fs.readFile(filePath, 'utf-8');
|
||||||
await fs.writeFile(filePath, migratePage(content));
|
await fs.outputFile(filePath, migratePage(content));
|
||||||
}),
|
}),
|
||||||
);
|
);
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
|
@ -408,8 +408,7 @@ async function createDefaultLandingPage({newDir}: MigrationContext) {
|
||||||
return <Layout />;
|
return <Layout />;
|
||||||
};
|
};
|
||||||
`;
|
`;
|
||||||
await fs.mkdirp(`${newDir}/src/pages/`);
|
await fs.outputFile(`${newDir}/src/pages/index.js`, indexPage);
|
||||||
await fs.writeFile(`${newDir}/src/pages/index.js`, indexPage);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
async function migrateStaticFiles({siteDir, newDir}: MigrationContext) {
|
async function migrateStaticFiles({siteDir, newDir}: MigrationContext) {
|
||||||
|
@ -428,7 +427,7 @@ async function migrateBlogFiles(context: MigrationContext) {
|
||||||
await Promise.all(
|
await Promise.all(
|
||||||
files.map(async (file) => {
|
files.map(async (file) => {
|
||||||
const content = await fs.readFile(file, 'utf-8');
|
const content = await fs.readFile(file, 'utf-8');
|
||||||
await fs.writeFile(
|
await fs.outputFile(
|
||||||
file,
|
file,
|
||||||
sanitizedFileContent(content, shouldMigrateMdFiles),
|
sanitizedFileContent(content, shouldMigrateMdFiles),
|
||||||
);
|
);
|
||||||
|
@ -508,7 +507,7 @@ async function migrateVersionedDocs(
|
||||||
files.map(async (pathToFile) => {
|
files.map(async (pathToFile) => {
|
||||||
if (path.extname(pathToFile) === '.md') {
|
if (path.extname(pathToFile) === '.md') {
|
||||||
const content = await fs.readFile(pathToFile, 'utf-8');
|
const content = await fs.readFile(pathToFile, 'utf-8');
|
||||||
await fs.writeFile(
|
await fs.outputFile(
|
||||||
pathToFile,
|
pathToFile,
|
||||||
sanitizedFileContent(
|
sanitizedFileContent(
|
||||||
content.replace(versionRegex, ''),
|
content.replace(versionRegex, ''),
|
||||||
|
@ -601,7 +600,7 @@ async function migrateVersionedSidebar(
|
||||||
},
|
},
|
||||||
{} as SidebarEntries,
|
{} as SidebarEntries,
|
||||||
);
|
);
|
||||||
await fs.writeFile(
|
await fs.outputFile(
|
||||||
path.join(
|
path.join(
|
||||||
newDir,
|
newDir,
|
||||||
'versioned_sidebars',
|
'versioned_sidebars',
|
||||||
|
@ -664,8 +663,10 @@ async function migrateLatestSidebar(context: MigrationContext) {
|
||||||
--ifm-color-primary-darkest: ${primaryColor.darken(0.3).hex()};
|
--ifm-color-primary-darkest: ${primaryColor.darken(0.3).hex()};
|
||||||
}
|
}
|
||||||
`;
|
`;
|
||||||
await fs.mkdirp(path.join(newDir, 'src', 'css'));
|
await fs.outputFile(
|
||||||
await fs.writeFile(path.join(newDir, 'src', 'css', 'customTheme.css'), css);
|
path.join(newDir, 'src', 'css', 'customTheme.css'),
|
||||||
|
css,
|
||||||
|
);
|
||||||
context.v2Config.presets[0][1].theme.customCss = path.join(
|
context.v2Config.presets[0][1].theme.customCss = path.join(
|
||||||
path.relative(newDir, path.join(siteDir, '..')),
|
path.relative(newDir, path.join(siteDir, '..')),
|
||||||
'src/css/customTheme.css',
|
'src/css/customTheme.css',
|
||||||
|
@ -685,7 +686,7 @@ async function migrateLatestDocs(context: MigrationContext) {
|
||||||
files.map(async (file) => {
|
files.map(async (file) => {
|
||||||
if (path.extname(file) === '.md') {
|
if (path.extname(file) === '.md') {
|
||||||
const content = await fs.readFile(file, 'utf-8');
|
const content = await fs.readFile(file, 'utf-8');
|
||||||
await fs.writeFile(
|
await fs.outputFile(
|
||||||
file,
|
file,
|
||||||
sanitizedFileContent(content, shouldMigrateMdFiles),
|
sanitizedFileContent(content, shouldMigrateMdFiles),
|
||||||
);
|
);
|
||||||
|
@ -725,7 +726,7 @@ async function migratePackageFile(context: MigrationContext): Promise<void> {
|
||||||
...packageFile.dependencies,
|
...packageFile.dependencies,
|
||||||
...deps,
|
...deps,
|
||||||
};
|
};
|
||||||
await fs.writeFile(
|
await fs.outputFile(
|
||||||
path.join(newDir, 'package.json'),
|
path.join(newDir, 'package.json'),
|
||||||
JSON.stringify(packageFile, null, 2),
|
JSON.stringify(packageFile, null, 2),
|
||||||
);
|
);
|
||||||
|
@ -743,7 +744,7 @@ export async function migrateMDToMDX(
|
||||||
files.map(async (filePath) => {
|
files.map(async (filePath) => {
|
||||||
if (path.extname(filePath) === '.md') {
|
if (path.extname(filePath) === '.md') {
|
||||||
const content = await fs.readFile(filePath, 'utf-8');
|
const content = await fs.readFile(filePath, 'utf-8');
|
||||||
await fs.writeFile(filePath, sanitizedFileContent(content, true));
|
await fs.outputFile(filePath, sanitizedFileContent(content, true));
|
||||||
}
|
}
|
||||||
}),
|
}),
|
||||||
);
|
);
|
||||||
|
|
|
@ -194,8 +194,7 @@ describe('writeRedirectFiles', () => {
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
|
|
||||||
await fs.ensureDir(path.dirname(filesMetadata[0].fileAbsolutePath));
|
await fs.outputFile(
|
||||||
await fs.writeFile(
|
|
||||||
filesMetadata[0].fileAbsolutePath,
|
filesMetadata[0].fileAbsolutePath,
|
||||||
'file already exists!',
|
'file already exists!',
|
||||||
);
|
);
|
||||||
|
|
|
@ -92,8 +92,7 @@ export async function writeRedirectFile(
|
||||||
'The redirect plugin is not supposed to override existing files.',
|
'The redirect plugin is not supposed to override existing files.',
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
await fs.ensureDir(path.dirname(file.fileAbsolutePath));
|
await fs.outputFile(
|
||||||
await fs.writeFile(
|
|
||||||
file.fileAbsolutePath,
|
file.fileAbsolutePath,
|
||||||
file.fileContent,
|
file.fileContent,
|
||||||
// Hard security to prevent file overrides
|
// Hard security to prevent file overrides
|
||||||
|
|
|
@ -13,7 +13,7 @@ import {
|
||||||
mapAsyncSequential,
|
mapAsyncSequential,
|
||||||
readOutputHTMLFile,
|
readOutputHTMLFile,
|
||||||
} from '@docusaurus/utils';
|
} from '@docusaurus/utils';
|
||||||
import cheerio from 'cheerio';
|
import {load as cheerioLoad} from 'cheerio';
|
||||||
import type {DocusaurusConfig} from '@docusaurus/types';
|
import type {DocusaurusConfig} from '@docusaurus/types';
|
||||||
import path from 'path';
|
import path from 'path';
|
||||||
import fs from 'fs-extra';
|
import fs from 'fs-extra';
|
||||||
|
@ -78,7 +78,7 @@ async function generateBlogFeed({
|
||||||
outDir,
|
outDir,
|
||||||
siteConfig.trailingSlash,
|
siteConfig.trailingSlash,
|
||||||
);
|
);
|
||||||
const $ = cheerio.load(content);
|
const $ = cheerioLoad(content);
|
||||||
|
|
||||||
const feedItem: FeedItem = {
|
const feedItem: FeedItem = {
|
||||||
title: metadataTitle,
|
title: metadataTitle,
|
||||||
|
|
|
@ -186,8 +186,7 @@ describe('docsVersion', () => {
|
||||||
|
|
||||||
test('first time versioning', async () => {
|
test('first time versioning', async () => {
|
||||||
const copyMock = jest.spyOn(fs, 'copy').mockImplementation();
|
const copyMock = jest.spyOn(fs, 'copy').mockImplementation();
|
||||||
const ensureMock = jest.spyOn(fs, 'ensureDir').mockImplementation();
|
const writeMock = jest.spyOn(fs, 'outputFile');
|
||||||
const writeMock = jest.spyOn(fs, 'writeFile');
|
|
||||||
let versionedSidebar;
|
let versionedSidebar;
|
||||||
let versionedSidebarPath;
|
let versionedSidebarPath;
|
||||||
writeMock.mockImplementationOnce((filepath, content) => {
|
writeMock.mockImplementationOnce((filepath, content) => {
|
||||||
|
@ -238,13 +237,11 @@ describe('docsVersion', () => {
|
||||||
copyMock.mockRestore();
|
copyMock.mockRestore();
|
||||||
writeMock.mockRestore();
|
writeMock.mockRestore();
|
||||||
consoleMock.mockRestore();
|
consoleMock.mockRestore();
|
||||||
ensureMock.mockRestore();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
test('not the first time versioning', async () => {
|
test('not the first time versioning', async () => {
|
||||||
const copyMock = jest.spyOn(fs, 'copy').mockImplementation();
|
const copyMock = jest.spyOn(fs, 'copy').mockImplementation();
|
||||||
const ensureMock = jest.spyOn(fs, 'ensureDir').mockImplementation();
|
const writeMock = jest.spyOn(fs, 'outputFile');
|
||||||
const writeMock = jest.spyOn(fs, 'writeFile');
|
|
||||||
let versionedSidebar;
|
let versionedSidebar;
|
||||||
let versionedSidebarPath;
|
let versionedSidebarPath;
|
||||||
writeMock.mockImplementationOnce((filepath, content) => {
|
writeMock.mockImplementationOnce((filepath, content) => {
|
||||||
|
@ -295,15 +292,13 @@ describe('docsVersion', () => {
|
||||||
copyMock.mockRestore();
|
copyMock.mockRestore();
|
||||||
writeMock.mockRestore();
|
writeMock.mockRestore();
|
||||||
consoleMock.mockRestore();
|
consoleMock.mockRestore();
|
||||||
ensureMock.mockRestore();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
test('second docs instance versioning', async () => {
|
test('second docs instance versioning', async () => {
|
||||||
const pluginId = 'community';
|
const pluginId = 'community';
|
||||||
|
|
||||||
const copyMock = jest.spyOn(fs, 'copy').mockImplementation();
|
const copyMock = jest.spyOn(fs, 'copy').mockImplementation();
|
||||||
const ensureMock = jest.spyOn(fs, 'ensureDir').mockImplementation();
|
const writeMock = jest.spyOn(fs, 'outputFile');
|
||||||
const writeMock = jest.spyOn(fs, 'writeFile');
|
|
||||||
let versionedSidebar;
|
let versionedSidebar;
|
||||||
let versionedSidebarPath;
|
let versionedSidebarPath;
|
||||||
writeMock.mockImplementationOnce((filepath, content) => {
|
writeMock.mockImplementationOnce((filepath, content) => {
|
||||||
|
@ -350,6 +345,5 @@ describe('docsVersion', () => {
|
||||||
copyMock.mockRestore();
|
copyMock.mockRestore();
|
||||||
writeMock.mockRestore();
|
writeMock.mockRestore();
|
||||||
consoleMock.mockRestore();
|
consoleMock.mockRestore();
|
||||||
ensureMock.mockRestore();
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
|
@ -47,8 +47,7 @@ async function createVersionedSidebarFile({
|
||||||
versionedSidebarsDir,
|
versionedSidebarsDir,
|
||||||
`version-${version}-sidebars.json`,
|
`version-${version}-sidebars.json`,
|
||||||
);
|
);
|
||||||
await fs.ensureDir(path.dirname(newSidebarFile));
|
await fs.outputFile(
|
||||||
await fs.writeFile(
|
|
||||||
newSidebarFile,
|
newSidebarFile,
|
||||||
`${JSON.stringify(sidebars, null, 2)}\n`,
|
`${JSON.stringify(sidebars, null, 2)}\n`,
|
||||||
'utf8',
|
'utf8',
|
||||||
|
@ -140,8 +139,7 @@ export async function cliDocsVersionCommand(
|
||||||
|
|
||||||
// Update versions.json file.
|
// Update versions.json file.
|
||||||
versions.unshift(version);
|
versions.unshift(version);
|
||||||
await fs.ensureDir(path.dirname(versionsJSONFile));
|
await fs.outputFile(
|
||||||
await fs.writeFile(
|
|
||||||
versionsJSONFile,
|
versionsJSONFile,
|
||||||
`${JSON.stringify(versions, null, 2)}\n`,
|
`${JSON.stringify(versions, null, 2)}\n`,
|
||||||
);
|
);
|
||||||
|
|
|
@ -140,7 +140,7 @@ ${warning}
|
||||||
async function readMessagesFile(filePath) {
|
async function readMessagesFile(filePath) {
|
||||||
if (!(await fs.pathExists(filePath))) {
|
if (!(await fs.pathExists(filePath))) {
|
||||||
logger.info`File path=${filePath} not found. Creating new translation base file.`;
|
logger.info`File path=${filePath} not found. Creating new translation base file.`;
|
||||||
await fs.writeFile(filePath, '{}\n');
|
await fs.outputFile(filePath, '{}\n');
|
||||||
}
|
}
|
||||||
return JSON.parse((await fs.readFile(filePath)).toString());
|
return JSON.parse((await fs.readFile(filePath)).toString());
|
||||||
}
|
}
|
||||||
|
|
|
@ -120,7 +120,7 @@ describe('readOutputHTMLFile', () => {
|
||||||
});
|
});
|
||||||
|
|
||||||
test('generate', async () => {
|
test('generate', async () => {
|
||||||
const writeMock = jest.spyOn(fs, 'writeFile').mockImplementation(() => {});
|
const writeMock = jest.spyOn(fs, 'outputFile').mockImplementation(() => {});
|
||||||
const existsMock = jest.spyOn(fs, 'pathExists');
|
const existsMock = jest.spyOn(fs, 'pathExists');
|
||||||
const readMock = jest.spyOn(fs, 'readFile');
|
const readMock = jest.spyOn(fs, 'readFile');
|
||||||
|
|
||||||
|
|
|
@ -88,9 +88,9 @@ describe('mapAsyncSequential', () => {
|
||||||
|
|
||||||
test('map sequentially', async () => {
|
test('map sequentially', async () => {
|
||||||
const itemToTimeout: Record<string, number> = {
|
const itemToTimeout: Record<string, number> = {
|
||||||
'1': 50,
|
'1': 200,
|
||||||
'2': 150,
|
'2': 600,
|
||||||
'3': 100,
|
'3': 400,
|
||||||
};
|
};
|
||||||
const items = Object.keys(itemToTimeout);
|
const items = Object.keys(itemToTimeout);
|
||||||
|
|
||||||
|
@ -112,14 +112,14 @@ describe('mapAsyncSequential', () => {
|
||||||
const timeTotal = timeAfter - timeBefore;
|
const timeTotal = timeAfter - timeBefore;
|
||||||
|
|
||||||
const totalTimeouts = _.sum(Object.values(itemToTimeout));
|
const totalTimeouts = _.sum(Object.values(itemToTimeout));
|
||||||
expect(timeTotal).toBeGreaterThanOrEqual(totalTimeouts - 20);
|
expect(timeTotal).toBeGreaterThanOrEqual(totalTimeouts - 100);
|
||||||
|
|
||||||
expect(itemMapStartsAt['1']).toBeGreaterThanOrEqual(0);
|
expect(itemMapStartsAt['1']).toBeGreaterThanOrEqual(0);
|
||||||
expect(itemMapStartsAt['2']).toBeGreaterThanOrEqual(
|
expect(itemMapStartsAt['2']).toBeGreaterThanOrEqual(
|
||||||
itemMapEndsAt['1'] - 20,
|
itemMapEndsAt['1'] - 100,
|
||||||
);
|
);
|
||||||
expect(itemMapStartsAt['3']).toBeGreaterThanOrEqual(
|
expect(itemMapStartsAt['3']).toBeGreaterThanOrEqual(
|
||||||
itemMapEndsAt['2'] - 20,
|
itemMapEndsAt['2'] - 100,
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -135,7 +135,7 @@ describe('findAsyncSequential', () => {
|
||||||
const items = ['1', '2', '3'];
|
const items = ['1', '2', '3'];
|
||||||
|
|
||||||
const findFn = jest.fn(async (item: string) => {
|
const findFn = jest.fn(async (item: string) => {
|
||||||
await sleep(50);
|
await sleep(400);
|
||||||
return item === '2';
|
return item === '2';
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -148,8 +148,8 @@ describe('findAsyncSequential', () => {
|
||||||
expect(findFn).toHaveBeenNthCalledWith(2, '2');
|
expect(findFn).toHaveBeenNthCalledWith(2, '2');
|
||||||
|
|
||||||
const timeTotal = timeAfter - timeBefore;
|
const timeTotal = timeAfter - timeBefore;
|
||||||
expect(timeTotal).toBeGreaterThanOrEqual(80);
|
expect(timeTotal).toBeGreaterThanOrEqual(600);
|
||||||
expect(timeTotal).toBeLessThan(120);
|
expect(timeTotal).toBeLessThan(1000);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -22,8 +22,7 @@ export async function generate(
|
||||||
const filepath = path.join(generatedFilesDir, file);
|
const filepath = path.join(generatedFilesDir, file);
|
||||||
|
|
||||||
if (skipCache) {
|
if (skipCache) {
|
||||||
await fs.ensureDir(path.dirname(filepath));
|
await fs.outputFile(filepath, content);
|
||||||
await fs.writeFile(filepath, content);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -41,8 +40,7 @@ export async function generate(
|
||||||
const currentHash = createHash('md5').update(content).digest('hex');
|
const currentHash = createHash('md5').update(content).digest('hex');
|
||||||
|
|
||||||
if (lastHash !== currentHash) {
|
if (lastHash !== currentHash) {
|
||||||
await fs.ensureDir(path.dirname(filepath));
|
await fs.outputFile(filepath, content);
|
||||||
await fs.writeFile(filepath, content);
|
|
||||||
fileHash.set(filepath, currentHash);
|
fileHash.set(filepath, currentHash);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -144,8 +144,7 @@ export default function ${wrapperComponentName}(props) {
|
||||||
}
|
}
|
||||||
`;
|
`;
|
||||||
|
|
||||||
await fs.ensureDir(path.dirname(toPath));
|
await fs.outputFile(toPath, content);
|
||||||
await fs.writeFile(toPath, content);
|
|
||||||
|
|
||||||
return {createdFiles: [toPath]};
|
return {createdFiles: [toPath]};
|
||||||
}
|
}
|
||||||
|
|
|
@ -552,8 +552,7 @@ describe('extractSiteSourceCodeTranslations', () => {
|
||||||
SRC_DIR_NAME,
|
SRC_DIR_NAME,
|
||||||
'site-component-1.jsx',
|
'site-component-1.jsx',
|
||||||
);
|
);
|
||||||
await fs.ensureDir(path.dirname(siteComponentFile1));
|
await fs.outputFile(
|
||||||
await fs.writeFile(
|
|
||||||
siteComponentFile1,
|
siteComponentFile1,
|
||||||
`
|
`
|
||||||
import Translate from '@docusaurus/Translate';
|
import Translate from '@docusaurus/Translate';
|
||||||
|
@ -586,8 +585,7 @@ export default function MySiteComponent1() {
|
||||||
|
|
||||||
const plugin1Dir = await createTmpDir();
|
const plugin1Dir = await createTmpDir();
|
||||||
const plugin1File1 = path.join(plugin1Dir, 'subpath', 'file1.jsx');
|
const plugin1File1 = path.join(plugin1Dir, 'subpath', 'file1.jsx');
|
||||||
await fs.ensureDir(path.dirname(plugin1File1));
|
await fs.outputFile(
|
||||||
await fs.writeFile(
|
|
||||||
plugin1File1,
|
plugin1File1,
|
||||||
`
|
`
|
||||||
import {translate} from '@docusaurus/Translate';
|
import {translate} from '@docusaurus/Translate';
|
||||||
|
@ -606,8 +604,7 @@ export default function MyComponent() {
|
||||||
`,
|
`,
|
||||||
);
|
);
|
||||||
const plugin1File2 = path.join(plugin1Dir, 'src', 'theme', 'file2.jsx');
|
const plugin1File2 = path.join(plugin1Dir, 'src', 'theme', 'file2.jsx');
|
||||||
await fs.ensureDir(path.dirname(plugin1File2));
|
await fs.outputFile(
|
||||||
await fs.writeFile(
|
|
||||||
plugin1File2,
|
plugin1File2,
|
||||||
`
|
`
|
||||||
import {translate} from '@docusaurus/Translate';
|
import {translate} from '@docusaurus/Translate';
|
||||||
|
@ -624,8 +621,7 @@ export default function MyComponent() {
|
||||||
|
|
||||||
// This one should not be found! On purpose!
|
// This one should not be found! On purpose!
|
||||||
const plugin1File3 = path.join(plugin1Dir, 'unscannedFolder', 'file3.jsx');
|
const plugin1File3 = path.join(plugin1Dir, 'unscannedFolder', 'file3.jsx');
|
||||||
await fs.ensureDir(path.dirname(plugin1File3));
|
await fs.outputFile(
|
||||||
await fs.writeFile(
|
|
||||||
plugin1File3,
|
plugin1File3,
|
||||||
`
|
`
|
||||||
import {translate} from '@docusaurus/Translate';
|
import {translate} from '@docusaurus/Translate';
|
||||||
|
@ -643,8 +639,7 @@ export default function MyComponent() {
|
||||||
|
|
||||||
const plugin2Dir = await createTmpDir();
|
const plugin2Dir = await createTmpDir();
|
||||||
const plugin2File = path.join(plugin1Dir, 'subpath', 'file.tsx');
|
const plugin2File = path.join(plugin1Dir, 'subpath', 'file.tsx');
|
||||||
await fs.ensureDir(path.dirname(plugin2File));
|
await fs.outputFile(
|
||||||
await fs.writeFile(
|
|
||||||
plugin2File,
|
plugin2File,
|
||||||
`
|
`
|
||||||
import Translate, {translate} from '@docusaurus/Translate';
|
import Translate, {translate} from '@docusaurus/Translate';
|
||||||
|
|
|
@ -131,8 +131,10 @@ Maybe you should remove them? ${unknownKeys}`;
|
||||||
} translations will be written at path=${toMessageRelativeFilePath(
|
} translations will be written at path=${toMessageRelativeFilePath(
|
||||||
filePath,
|
filePath,
|
||||||
)}.`;
|
)}.`;
|
||||||
await fs.ensureDir(path.dirname(filePath));
|
await fs.outputFile(
|
||||||
await fs.writeFile(filePath, `${JSON.stringify(mergedContent, null, 2)}\n`);
|
filePath,
|
||||||
|
`${JSON.stringify(mergedContent, null, 2)}\n`,
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue