@docusaurus/utils 4.0.0-canary-6885 → 4.0.0-canary-6891
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/dataFileUtils.js +3 -3
- package/lib/dataFileUtils.js.map +1 -1
- package/lib/emitUtils.js +7 -7
- package/lib/emitUtils.js.map +1 -1
- package/lib/vcs/gitUtils.js +5 -5
- package/lib/vcs/gitUtils.js.map +1 -1
- package/package.json +5 -5
- package/src/dataFileUtils.ts +2 -2
- package/src/emitUtils.ts +5 -5
- package/src/vcs/gitUtils.ts +5 -5
package/lib/dataFileUtils.js
CHANGED
|
@@ -12,10 +12,10 @@ exports.getContentPathList = getContentPathList;
|
|
|
12
12
|
exports.findFolderContainingFile = findFolderContainingFile;
|
|
13
13
|
exports.getFolderContainingFile = getFolderContainingFile;
|
|
14
14
|
const tslib_1 = require("tslib");
|
|
15
|
-
const fs_extra_1 = tslib_1.__importDefault(require("fs-extra"));
|
|
16
15
|
const node_path_1 = tslib_1.__importDefault(require("node:path"));
|
|
17
16
|
const logger_1 = tslib_1.__importDefault(require("@docusaurus/logger"));
|
|
18
17
|
const Yaml = tslib_1.__importStar(require("js-yaml"));
|
|
18
|
+
const fs_1 = require("@docusaurus/fs");
|
|
19
19
|
const index_1 = require("./index");
|
|
20
20
|
/**
|
|
21
21
|
* Looks for a data file in the potential content paths; loads a localized data
|
|
@@ -45,7 +45,7 @@ async function readDataFile(params) {
|
|
|
45
45
|
return undefined;
|
|
46
46
|
}
|
|
47
47
|
try {
|
|
48
|
-
const contentString = await
|
|
48
|
+
const contentString = await fs_1.fs.readFile(filePath, { encoding: 'utf8' });
|
|
49
49
|
return Yaml.load(contentString);
|
|
50
50
|
}
|
|
51
51
|
catch (err) {
|
|
@@ -68,7 +68,7 @@ function getContentPathList(contentPaths) {
|
|
|
68
68
|
* none is found.
|
|
69
69
|
*/
|
|
70
70
|
async function findFolderContainingFile(folderPaths, relativeFilePath) {
|
|
71
|
-
return (0, index_1.findAsyncSequential)(folderPaths, (folderPath) =>
|
|
71
|
+
return (0, index_1.findAsyncSequential)(folderPaths, (folderPath) => (0, fs_1.pathExists)(node_path_1.default.join(folderPath, relativeFilePath)));
|
|
72
72
|
}
|
|
73
73
|
/**
|
|
74
74
|
* Fail-fast alternative to `findFolderContainingFile`.
|
package/lib/dataFileUtils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dataFileUtils.js","sourceRoot":"","sources":["../src/dataFileUtils.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;;;;;;AAEH,
|
|
1
|
+
{"version":3,"file":"dataFileUtils.js","sourceRoot":"","sources":["../src/dataFileUtils.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;;;;;;AAEH,kEAA6B;AAC7B,wEAAwC;AACxC,MAAY,IAAI,4CAAgB;AAChC,uCAA8C;AAC9C,mCAA4C;AAa5C;;;;;GAKG;AACI,KAAK,0BAA0B,EACpC,QAAQ,EACR,YAAY,GACG;IACf,MAAM,WAAW,GAAG,MAAM,wBAAwB,CAChD,kBAAkB,CAAC,YAAY,CAAC,EAChC,QAAQ,CACT,CAAC;IACF,IAAI,WAAW,EAAE,CAAC;QAChB,OAAO,mBAAI,CAAC,OAAO,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;IAC7C,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;;;;;GAQG;AACI,KAAK,uBAAuB,MAAsB;IACvD,MAAM,QAAQ,GAAG,MAAM,eAAe,CAAC,MAAM,CAAC,CAAC;IAC/C,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,IAAI,CAAC;QACH,MAAM,aAAa,GAAG,MAAM,OAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAC,QAAQ,EAAE,MAAM,EAAC,CAAC,CAAC;QACtE,OAAO,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAClC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,GAAG,GAAG,gBAAM,CAAC,WAAW,CAAA,oBAAoB,mBAAI,CAAC,QAAQ,CAC7D,OAAO,CAAC,GAAG,EAAE,EACb,QAAQ,CACT,qCAAqC,CAAC;QACvC,MAAM,IAAI,KAAK,CAAC,GAAG,EAAE,EAAC,KAAK,EAAE,GAAG,EAAC,CAAC,CAAC;IACrC,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,4BAAmC,YAA0B;IAC3D,OAAO,CAAC,YAAY,CAAC,oBAAoB,EAAE,YAAY,CAAC,WAAW,CAAC,CAAC,MAAM,CACzE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,SAAS,CACvB,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACI,KAAK,mCACV,WAAqB,EACrB,gBAAwB;IAExB,OAAO,IAAA,2BAAmB,EAAC,WAAW,EAAE,CAAC,UAAU,EAAE,EAAE,CACrD,IAAA,eAAU,EAAC,mBAAI,CAAC,IAAI,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAAC,CACpD,CAAC;AACJ,CAAC;AAED;;;;;;;;;GASG;AACI,KAAK,kCACV,WAAqB,EACrB,gBAAwB;IAExB,MAAM,eAAe,GAAG,MAAM,wBAAwB,CACpD,WAAW,EACX,gBAAgB,CACjB,CAAC;IACF,IAAI,CAAC,eAAe,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CACb,SAAS,gBAAgB;IAC3B,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CACzB,CAAC;IACJ,CAAC;IACD,OAAO,eAAe,CAAC;AACzB,CAAC"}
|
package/lib/emitUtils.js
CHANGED
|
@@ -10,8 +10,8 @@ exports.generate = generate;
|
|
|
10
10
|
exports.readOutputHTMLFile = readOutputHTMLFile;
|
|
11
11
|
const tslib_1 = require("tslib");
|
|
12
12
|
const node_path_1 = tslib_1.__importDefault(require("node:path"));
|
|
13
|
-
const fs_extra_1 = tslib_1.__importDefault(require("fs-extra"));
|
|
14
13
|
const node_crypto_1 = require("node:crypto");
|
|
14
|
+
const fs_1 = require("@docusaurus/fs");
|
|
15
15
|
const jsUtils_1 = require("./jsUtils");
|
|
16
16
|
const fileHash = new Map();
|
|
17
17
|
const hashContent = (content) => {
|
|
@@ -31,7 +31,7 @@ const hashContent = (content) => {
|
|
|
31
31
|
async function generate(generatedFilesDir, file, content, skipCache = process.env.NODE_ENV === 'production') {
|
|
32
32
|
const filepath = node_path_1.default.resolve(generatedFilesDir, file);
|
|
33
33
|
if (skipCache) {
|
|
34
|
-
await
|
|
34
|
+
await (0, fs_1.outputFile)(filepath, content);
|
|
35
35
|
// Cache still needs to be reset, otherwise, writing "A", "B", and "A" where
|
|
36
36
|
// "B" skips cache will cause the last "A" not be able to overwrite as the
|
|
37
37
|
// first "A" remains in cache. But if the file never existed in cache, no
|
|
@@ -45,14 +45,14 @@ async function generate(generatedFilesDir, file, content, skipCache = process.en
|
|
|
45
45
|
// If file already exists but it's not in runtime cache yet, we try to
|
|
46
46
|
// calculate the content hash and then compare. This is to avoid unnecessary
|
|
47
47
|
// overwriting and we can reuse old file.
|
|
48
|
-
if (!lastHash && (await
|
|
49
|
-
const lastContent = await
|
|
48
|
+
if (!lastHash && (await (0, fs_1.pathExists)(filepath))) {
|
|
49
|
+
const lastContent = await fs_1.fs.readFile(filepath, 'utf8');
|
|
50
50
|
lastHash = hashContent(lastContent);
|
|
51
51
|
fileHash.set(filepath, lastHash);
|
|
52
52
|
}
|
|
53
53
|
const currentHash = hashContent(content);
|
|
54
54
|
if (lastHash !== currentHash) {
|
|
55
|
-
await
|
|
55
|
+
await (0, fs_1.outputFile)(filepath, content);
|
|
56
56
|
fileHash.set(filepath, currentHash);
|
|
57
57
|
}
|
|
58
58
|
}
|
|
@@ -78,10 +78,10 @@ async function readOutputHTMLFile(permalink, outDir, trailingSlash) {
|
|
|
78
78
|
trailingSlash !== false && withTrailingSlashPath,
|
|
79
79
|
trailingSlash !== true && withoutTrailingSlashPath,
|
|
80
80
|
].filter((p) => Boolean(p));
|
|
81
|
-
const HTMLPath = await (0, jsUtils_1.findAsyncSequential)(possibleHtmlPaths,
|
|
81
|
+
const HTMLPath = await (0, jsUtils_1.findAsyncSequential)(possibleHtmlPaths, fs_1.pathExists);
|
|
82
82
|
if (!HTMLPath) {
|
|
83
83
|
throw new Error(`Expected output HTML file to be found at ${withTrailingSlashPath} for permalink ${permalink}.`);
|
|
84
84
|
}
|
|
85
|
-
return
|
|
85
|
+
return fs_1.fs.readFile(HTMLPath);
|
|
86
86
|
}
|
|
87
87
|
//# sourceMappingURL=emitUtils.js.map
|
package/lib/emitUtils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"emitUtils.js","sourceRoot":"","sources":["../src/emitUtils.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;;;AAEH,kEAA6B;AAC7B,
|
|
1
|
+
{"version":3,"file":"emitUtils.js","sourceRoot":"","sources":["../src/emitUtils.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;;;AAEH,kEAA6B;AAC7B,6CAAiC;AACjC,uCAA0D;AAC1D,uCAA8C;AAE9C,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAkB,CAAC;AAE3C,MAAM,WAAW,GAAG,CAAC,OAAe,EAAU,EAAE;IAC9C,OAAO,IAAA,kBAAI,EAAC,KAAK,EAAE,OAAO,CAAC,CAAC;AAC9B,CAAC,CAAC;AAEF;;;;;;;;;;GAUG;AACI,KAAK,mBACV,iBAAyB,EACzB,IAAY,EACZ,OAAe,EACf,SAAS,GAAY,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY;IAE1D,MAAM,QAAQ,GAAG,mBAAI,CAAC,OAAO,CAAC,iBAAiB,EAAE,IAAI,CAAC,CAAC;IAEvD,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,IAAA,eAAU,EAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACpC,4EAA4E;QAC5E,0EAA0E;QAC1E,yEAAyE;QACzE,uBAAuB;QACvB,IAAI,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC3B,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC;QAC/C,CAAC;QACD,OAAO;IACT,CAAC;IAED,IAAI,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAEtC,sEAAsE;IACtE,4EAA4E;IAC5E,yCAAyC;IACzC,IAAI,CAAC,QAAQ,IAAI,CAAC,MAAM,IAAA,eAAU,EAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;QAC9C,MAAM,WAAW,GAAG,MAAM,OAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACxD,QAAQ,GAAG,WAAW,CAAC,WAAW,CAAC,CAAC;QACpC,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACnC,CAAC;IAED,MAAM,WAAW,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;IAEzC,IAAI,QAAQ,KAAK,WAAW,EAAE,CAAC;QAC7B,MAAM,IAAA,eAAU,EAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACpC,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;IACtC,CAAC;AACH,CAAC;AAED;;;;;;;;;;GAUG;AACI,KAAK,6BACV,SAAiB,EACjB,MAAc,EACd,aAAkC;IAElC,MAAM,qBAAqB,GAAG,mBAAI,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC;IACzE,MAAM,wBAAwB,GAAG,CAAC,GAAG,EAAE;QACrC,MAAM,QAAQ,GAAG,mBAAI,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC;QACjE,MAAM,UAAU,GAAG,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;QAC7D,OAAO,GAAG,QAAQ,GAAG,UAAU,EAAE,CAAC;IACpC,CAAC,CAAC,EAAE,CAAC;IAEL,MAAM,iBAAiB,GAAG;QACxB,aAAa,KAAK,KAAK,IAAI,qBAAqB;QAChD,aAAa,KAAK,IAAI,IAAI,wBAAwB;KACnD,CAAC,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IAEzC,MAAM,QAAQ,GAAG,MAAM,IAAA,6BAAmB,EAAC,iBAAiB,EAAE,eAAU,CAAC,CAAC;IAE1E,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CACb,4CAA4C,qBAAqB,kBAAkB,SAAS,GAAG,CAChG,CAAC;IACJ,CAAC;IACD,OAAO,OAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AAC/B,CAAC"}
|
package/lib/vcs/gitUtils.js
CHANGED
|
@@ -18,12 +18,12 @@ exports.getGitAllRepoRoots = getGitAllRepoRoots;
|
|
|
18
18
|
exports.getGitRepositoryFilesInfo = getGitRepositoryFilesInfo;
|
|
19
19
|
const tslib_1 = require("tslib");
|
|
20
20
|
const node_path_1 = tslib_1.__importDefault(require("node:path"));
|
|
21
|
-
const fs_extra_1 = tslib_1.__importDefault(require("fs-extra"));
|
|
22
21
|
const node_os_1 = tslib_1.__importDefault(require("node:os"));
|
|
23
22
|
const lodash_1 = tslib_1.__importDefault(require("lodash"));
|
|
24
23
|
const execa_1 = require("execa");
|
|
25
24
|
const p_queue_1 = tslib_1.__importDefault(require("p-queue"));
|
|
26
25
|
const logger_1 = tslib_1.__importDefault(require("@docusaurus/logger"));
|
|
26
|
+
const fs_1 = require("@docusaurus/fs");
|
|
27
27
|
// Quite high/conservative concurrency value (it was previously "Infinity")
|
|
28
28
|
// See https://github.com/facebook/docusaurus/pull/10915
|
|
29
29
|
const DefaultGitCommandConcurrency = node_os_1.default.availableParallelism() * 4;
|
|
@@ -64,7 +64,7 @@ async function getFileCommitDate(file, { age = 'oldest', includeAuthor = false,
|
|
|
64
64
|
if (!hasGit()) {
|
|
65
65
|
throw new GitNotFoundError(`Failed to retrieve git history for "${file}" because git is not installed.`);
|
|
66
66
|
}
|
|
67
|
-
if (!(await
|
|
67
|
+
if (!(await (0, fs_1.pathExists)(file))) {
|
|
68
68
|
throw new Error(`Failed to retrieve git history for "${file}" because the file does not exist.`);
|
|
69
69
|
}
|
|
70
70
|
// We add a "RESULT:" prefix to make parsing easier
|
|
@@ -169,7 +169,7 @@ async function getGitRepoRoot(cwd) {
|
|
|
169
169
|
Failure while running ${logger_1.default.code('git rev-parse --show-toplevel')} from cwd=${logger_1.default.path(cwd)}
|
|
170
170
|
The command executed throws an error: ${error.message}`, { cause: error });
|
|
171
171
|
});
|
|
172
|
-
return
|
|
172
|
+
return fs_1.fs.realpath(result.stdout.trim());
|
|
173
173
|
}
|
|
174
174
|
// A Git "superproject" is a Git repository that contains submodules
|
|
175
175
|
// See https://git-scm.com/docs/git-rev-parse#Documentation/git-rev-parse.txt---show-superproject-working-tree
|
|
@@ -187,7 +187,7 @@ The command executed throws an error: ${error.message}`, { cause: error });
|
|
|
187
187
|
// this command only works when inside submodules
|
|
188
188
|
// otherwise it doesn't return anything when we are inside the main repo
|
|
189
189
|
if (output) {
|
|
190
|
-
return
|
|
190
|
+
return fs_1.fs.realpath(output);
|
|
191
191
|
}
|
|
192
192
|
return getGitRepoRoot(cwd);
|
|
193
193
|
}
|
|
@@ -228,7 +228,7 @@ async function getGitAllRepoRoots(cwd) {
|
|
|
228
228
|
return [];
|
|
229
229
|
}
|
|
230
230
|
let submodulePaths = await getGitSubmodulePaths(superProjectRoot);
|
|
231
|
-
submodulePaths = await Promise.all(submodulePaths.map((submodulePath) =>
|
|
231
|
+
submodulePaths = await Promise.all(submodulePaths.map((submodulePath) => fs_1.fs.realpath(node_path_1.default.resolve(superProjectRoot, submodulePath))));
|
|
232
232
|
return [superProjectRoot, ...submodulePaths];
|
|
233
233
|
}
|
|
234
234
|
catch (error) {
|
package/lib/vcs/gitUtils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gitUtils.js","sourceRoot":"","sources":["../../src/vcs/gitUtils.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;;;;;;;;;;;AAEH,kEAA6B;AAC7B,
|
|
1
|
+
{"version":3,"file":"gitUtils.js","sourceRoot":"","sources":["../../src/vcs/gitUtils.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@docusaurus/utils",
|
|
3
|
-
"version": "4.0.0-canary-
|
|
3
|
+
"version": "4.0.0-canary-6891",
|
|
4
4
|
"description": "Node utility functions for Docusaurus packages.",
|
|
5
5
|
"main": "./lib/index.js",
|
|
6
6
|
"types": "./lib/index.d.ts",
|
|
@@ -19,11 +19,11 @@
|
|
|
19
19
|
"license": "MIT",
|
|
20
20
|
"dependencies": {
|
|
21
21
|
"@11ty/gray-matter": "^3.0.0",
|
|
22
|
-
"@docusaurus/
|
|
23
|
-
"@docusaurus/
|
|
22
|
+
"@docusaurus/fs": "4.0.0-canary-6891",
|
|
23
|
+
"@docusaurus/logger": "4.0.0-canary-6891",
|
|
24
|
+
"@docusaurus/types": "4.0.0-canary-6891",
|
|
24
25
|
"execa": "^10.0.1",
|
|
25
26
|
"file-loader": "^6.2.0",
|
|
26
|
-
"fs-extra": "^11.4.0",
|
|
27
27
|
"github-slugger": "^2.0.0",
|
|
28
28
|
"jiti": "^2.7.0",
|
|
29
29
|
"js-yaml": "^5.4.1",
|
|
@@ -42,5 +42,5 @@
|
|
|
42
42
|
"@types/react-dom": "^19.3.0",
|
|
43
43
|
"dedent": "^1.7.2"
|
|
44
44
|
},
|
|
45
|
-
"gitHead": "
|
|
45
|
+
"gitHead": "f276aff972dcc432c037123c6d522e6c50881e79"
|
|
46
46
|
}
|
package/src/dataFileUtils.ts
CHANGED
|
@@ -5,10 +5,10 @@
|
|
|
5
5
|
* LICENSE file in the root directory of this source tree.
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
|
-
import fs from 'fs-extra';
|
|
9
8
|
import path from 'node:path';
|
|
10
9
|
import logger from '@docusaurus/logger';
|
|
11
10
|
import * as Yaml from 'js-yaml';
|
|
11
|
+
import {fs, pathExists} from '@docusaurus/fs';
|
|
12
12
|
import {findAsyncSequential} from './index';
|
|
13
13
|
import type {ContentPaths} from './markdownLinks';
|
|
14
14
|
|
|
@@ -90,7 +90,7 @@ export async function findFolderContainingFile(
|
|
|
90
90
|
relativeFilePath: string,
|
|
91
91
|
): Promise<string | undefined> {
|
|
92
92
|
return findAsyncSequential(folderPaths, (folderPath) =>
|
|
93
|
-
|
|
93
|
+
pathExists(path.join(folderPath, relativeFilePath)),
|
|
94
94
|
);
|
|
95
95
|
}
|
|
96
96
|
|
package/src/emitUtils.ts
CHANGED
|
@@ -6,8 +6,8 @@
|
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
8
|
import path from 'node:path';
|
|
9
|
-
import fs from 'fs-extra';
|
|
10
9
|
import {hash} from 'node:crypto';
|
|
10
|
+
import {fs, pathExists, outputFile} from '@docusaurus/fs';
|
|
11
11
|
import {findAsyncSequential} from './jsUtils';
|
|
12
12
|
|
|
13
13
|
const fileHash = new Map<string, string>();
|
|
@@ -36,7 +36,7 @@ export async function generate(
|
|
|
36
36
|
const filepath = path.resolve(generatedFilesDir, file);
|
|
37
37
|
|
|
38
38
|
if (skipCache) {
|
|
39
|
-
await
|
|
39
|
+
await outputFile(filepath, content);
|
|
40
40
|
// Cache still needs to be reset, otherwise, writing "A", "B", and "A" where
|
|
41
41
|
// "B" skips cache will cause the last "A" not be able to overwrite as the
|
|
42
42
|
// first "A" remains in cache. But if the file never existed in cache, no
|
|
@@ -52,7 +52,7 @@ export async function generate(
|
|
|
52
52
|
// If file already exists but it's not in runtime cache yet, we try to
|
|
53
53
|
// calculate the content hash and then compare. This is to avoid unnecessary
|
|
54
54
|
// overwriting and we can reuse old file.
|
|
55
|
-
if (!lastHash && (await
|
|
55
|
+
if (!lastHash && (await pathExists(filepath))) {
|
|
56
56
|
const lastContent = await fs.readFile(filepath, 'utf8');
|
|
57
57
|
lastHash = hashContent(lastContent);
|
|
58
58
|
fileHash.set(filepath, lastHash);
|
|
@@ -61,7 +61,7 @@ export async function generate(
|
|
|
61
61
|
const currentHash = hashContent(content);
|
|
62
62
|
|
|
63
63
|
if (lastHash !== currentHash) {
|
|
64
|
-
await
|
|
64
|
+
await outputFile(filepath, content);
|
|
65
65
|
fileHash.set(filepath, currentHash);
|
|
66
66
|
}
|
|
67
67
|
}
|
|
@@ -94,7 +94,7 @@ export async function readOutputHTMLFile(
|
|
|
94
94
|
trailingSlash !== true && withoutTrailingSlashPath,
|
|
95
95
|
].filter((p): p is string => Boolean(p));
|
|
96
96
|
|
|
97
|
-
const HTMLPath = await findAsyncSequential(possibleHtmlPaths,
|
|
97
|
+
const HTMLPath = await findAsyncSequential(possibleHtmlPaths, pathExists);
|
|
98
98
|
|
|
99
99
|
if (!HTMLPath) {
|
|
100
100
|
throw new Error(
|
package/src/vcs/gitUtils.ts
CHANGED
|
@@ -6,12 +6,12 @@
|
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
8
|
import path from 'node:path';
|
|
9
|
-
import fs from 'fs-extra';
|
|
10
9
|
import os from 'node:os';
|
|
11
10
|
import _ from 'lodash';
|
|
12
11
|
import {execa, execaSync} from 'execa';
|
|
13
12
|
import PQueue from 'p-queue';
|
|
14
13
|
import logger from '@docusaurus/logger';
|
|
14
|
+
import {fs, pathExists} from '@docusaurus/fs';
|
|
15
15
|
|
|
16
16
|
// Quite high/conservative concurrency value (it was previously "Infinity")
|
|
17
17
|
// See https://github.com/facebook/docusaurus/pull/10915
|
|
@@ -133,7 +133,7 @@ export async function getFileCommitDate(
|
|
|
133
133
|
);
|
|
134
134
|
}
|
|
135
135
|
|
|
136
|
-
if (!(await
|
|
136
|
+
if (!(await pathExists(file))) {
|
|
137
137
|
throw new Error(
|
|
138
138
|
`Failed to retrieve git history for "${file}" because the file does not exist.`,
|
|
139
139
|
);
|
|
@@ -284,7 +284,7 @@ The command executed throws an error: ${error.message}`,
|
|
|
284
284
|
);
|
|
285
285
|
});
|
|
286
286
|
|
|
287
|
-
return fs.realpath
|
|
287
|
+
return fs.realpath(result.stdout.trim());
|
|
288
288
|
}
|
|
289
289
|
|
|
290
290
|
// A Git "superproject" is a Git repository that contains submodules
|
|
@@ -315,7 +315,7 @@ The command executed throws an error: ${error.message}`,
|
|
|
315
315
|
// this command only works when inside submodules
|
|
316
316
|
// otherwise it doesn't return anything when we are inside the main repo
|
|
317
317
|
if (output) {
|
|
318
|
-
return fs.realpath
|
|
318
|
+
return fs.realpath(output);
|
|
319
319
|
}
|
|
320
320
|
return getGitRepoRoot(cwd);
|
|
321
321
|
}
|
|
@@ -369,7 +369,7 @@ export async function getGitAllRepoRoots(cwd: string): Promise<string[]> {
|
|
|
369
369
|
let submodulePaths = await getGitSubmodulePaths(superProjectRoot);
|
|
370
370
|
submodulePaths = await Promise.all(
|
|
371
371
|
submodulePaths.map((submodulePath) =>
|
|
372
|
-
fs.realpath
|
|
372
|
+
fs.realpath(path.resolve(superProjectRoot, submodulePath)),
|
|
373
373
|
),
|
|
374
374
|
);
|
|
375
375
|
return [superProjectRoot, ...submodulePaths];
|