@docusaurus/utils 0.0.0-5872 → 0.0.0-5878
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/emitUtils.d.ts.map +1 -1
- package/lib/emitUtils.js +6 -3
- package/lib/emitUtils.js.map +1 -1
- package/lib/gitUtils.d.ts.map +1 -1
- package/lib/gitUtils.js +9 -3
- package/lib/gitUtils.js.map +1 -1
- package/package.json +4 -4
- package/src/emitUtils.ts +7 -3
- package/src/gitUtils.ts +12 -3
package/lib/emitUtils.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"emitUtils.d.ts","sourceRoot":"","sources":["../src/emitUtils.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;;
|
|
1
|
+
{"version":3,"file":"emitUtils.d.ts","sourceRoot":"","sources":["../src/emitUtils.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;;AAaH;;;;;;;;;;GAUG;AACH,wBAAsB,QAAQ,CAC5B,iBAAiB,EAAE,MAAM,EACzB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,SAAS,GAAE,OAA+C,GACzD,OAAO,CAAC,IAAI,CAAC,CAgCf;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,kBAAkB,CACtC,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,OAAO,GAAG,SAAS,GACjC,OAAO,CAAC,MAAM,CAAC,CAqBjB"}
|
package/lib/emitUtils.js
CHANGED
|
@@ -13,6 +13,9 @@ const fs_extra_1 = tslib_1.__importDefault(require("fs-extra"));
|
|
|
13
13
|
const crypto_1 = require("crypto");
|
|
14
14
|
const jsUtils_1 = require("./jsUtils");
|
|
15
15
|
const fileHash = new Map();
|
|
16
|
+
const hashContent = (content) => {
|
|
17
|
+
return (0, crypto_1.createHash)('md5').update(content).digest('hex');
|
|
18
|
+
};
|
|
16
19
|
/**
|
|
17
20
|
* Outputs a file to the generated files directory. Only writes files if content
|
|
18
21
|
* differs from cache (for hot reload performance).
|
|
@@ -33,7 +36,7 @@ async function generate(generatedFilesDir, file, content, skipCache = process.en
|
|
|
33
36
|
// first "A" remains in cache. But if the file never existed in cache, no
|
|
34
37
|
// need to register it.
|
|
35
38
|
if (fileHash.get(filepath)) {
|
|
36
|
-
fileHash.set(filepath, (
|
|
39
|
+
fileHash.set(filepath, hashContent(content));
|
|
37
40
|
}
|
|
38
41
|
return;
|
|
39
42
|
}
|
|
@@ -43,10 +46,10 @@ async function generate(generatedFilesDir, file, content, skipCache = process.en
|
|
|
43
46
|
// overwriting and we can reuse old file.
|
|
44
47
|
if (!lastHash && (await fs_extra_1.default.pathExists(filepath))) {
|
|
45
48
|
const lastContent = await fs_extra_1.default.readFile(filepath, 'utf8');
|
|
46
|
-
lastHash = (
|
|
49
|
+
lastHash = hashContent(lastContent);
|
|
47
50
|
fileHash.set(filepath, lastHash);
|
|
48
51
|
}
|
|
49
|
-
const currentHash = (
|
|
52
|
+
const currentHash = hashContent(content);
|
|
50
53
|
if (lastHash !== currentHash) {
|
|
51
54
|
await fs_extra_1.default.outputFile(filepath, content);
|
|
52
55
|
fileHash.set(filepath, currentHash);
|
package/lib/emitUtils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"emitUtils.js","sourceRoot":"","sources":["../src/emitUtils.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;;AAEH,wDAAwB;AACxB,gEAA0B;AAC1B,mCAAkC;AAClC,uCAA8C;AAE9C,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAkB,CAAC;AAE3C;;;;;;;;;;GAUG;AACI,KAAK,UAAU,QAAQ,CAC5B,iBAAyB,EACzB,IAAY,EACZ,OAAe,EACf,YAAqB,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY;IAE1D,MAAM,QAAQ,GAAG,cAAI,CAAC,OAAO,CAAC,iBAAiB,EAAE,IAAI,CAAC,CAAC;IAEvD,IAAI,SAAS,EAAE;QACb,MAAM,kBAAE,CAAC,UAAU,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACvC,4EAA4E;QAC5E,0EAA0E;QAC1E,yEAAyE;QACzE,uBAAuB;QACvB,IAAI,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;YAC1B,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,
|
|
1
|
+
{"version":3,"file":"emitUtils.js","sourceRoot":"","sources":["../src/emitUtils.ts"],"names":[],"mappings":"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"}
|
package/lib/gitUtils.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gitUtils.d.ts","sourceRoot":"","sources":["../src/gitUtils.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"gitUtils.d.ts","sourceRoot":"","sources":["../src/gitUtils.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAcH,2DAA2D;AAC3D,qBAAa,gBAAiB,SAAQ,KAAK;CAAG;AAE9C,uEAAuE;AACvE,qBAAa,mBAAoB,SAAQ,KAAK;CAAG;AAEjD;;;;;;;;;GASG;AACH,wBAAsB,iBAAiB;AACrC,iCAAiC;AACjC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE;IACJ;;;OAGG;IACH,GAAG,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAC1B,uEAAuE;IACvE,aAAa,CAAC,EAAE,KAAK,CAAC;CACvB,GACA,OAAO,CAAC;IACT,4BAA4B;IAC5B,IAAI,EAAE,IAAI,CAAC;IACX,kEAAkE;IAClE,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC,CAAC;AACH;;;;;;;;;GASG;AACH,wBAAsB,iBAAiB;AACrC,iCAAiC;AACjC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE;IACJ;;;OAGG;IACH,GAAG,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAC1B,aAAa,EAAE,IAAI,CAAC;CACrB,GACA,OAAO,CAAC;IACT,4BAA4B;IAC5B,IAAI,EAAE,IAAI,CAAC;IACX,kEAAkE;IAClE,SAAS,EAAE,MAAM,CAAC;IAClB,+CAA+C;IAC/C,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC,CAAC"}
|
package/lib/gitUtils.js
CHANGED
|
@@ -9,7 +9,13 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
9
9
|
exports.getFileCommitDate = exports.FileNotTrackedError = exports.GitNotFoundError = void 0;
|
|
10
10
|
const tslib_1 = require("tslib");
|
|
11
11
|
const path_1 = tslib_1.__importDefault(require("path"));
|
|
12
|
-
const
|
|
12
|
+
const fs_extra_1 = tslib_1.__importDefault(require("fs-extra"));
|
|
13
|
+
const lodash_1 = tslib_1.__importDefault(require("lodash"));
|
|
14
|
+
const shelljs_1 = tslib_1.__importDefault(require("shelljs")); // TODO replace with async-first version
|
|
15
|
+
const realHasGitFn = () => !!shelljs_1.default.which('git');
|
|
16
|
+
// The hasGit call is synchronous IO so we memoize it
|
|
17
|
+
// The user won't install Git in the middle of a build anyway...
|
|
18
|
+
const hasGit = process.env.NODE_ENV === 'test' ? realHasGitFn : lodash_1.default.memoize(realHasGitFn);
|
|
13
19
|
/** Custom error thrown when git is not found in `PATH`. */
|
|
14
20
|
class GitNotFoundError extends Error {
|
|
15
21
|
}
|
|
@@ -19,10 +25,10 @@ class FileNotTrackedError extends Error {
|
|
|
19
25
|
}
|
|
20
26
|
exports.FileNotTrackedError = FileNotTrackedError;
|
|
21
27
|
async function getFileCommitDate(file, { age = 'oldest', includeAuthor = false, }) {
|
|
22
|
-
if (!
|
|
28
|
+
if (!hasGit()) {
|
|
23
29
|
throw new GitNotFoundError(`Failed to retrieve git history for "${file}" because git is not installed.`);
|
|
24
30
|
}
|
|
25
|
-
if (!
|
|
31
|
+
if (!(await fs_extra_1.default.pathExists(file))) {
|
|
26
32
|
throw new Error(`Failed to retrieve git history for "${file}" because the file does not exist.`);
|
|
27
33
|
}
|
|
28
34
|
const args = [
|
package/lib/gitUtils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gitUtils.js","sourceRoot":"","sources":["../src/gitUtils.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;;AAEH,wDAAwB;AACxB,8DAA4B;
|
|
1
|
+
{"version":3,"file":"gitUtils.js","sourceRoot":"","sources":["../src/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": "0.0.0-
|
|
3
|
+
"version": "0.0.0-5878",
|
|
4
4
|
"description": "Node utility functions for Docusaurus packages.",
|
|
5
5
|
"main": "./lib/index.js",
|
|
6
6
|
"types": "./lib/index.d.ts",
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
},
|
|
19
19
|
"license": "MIT",
|
|
20
20
|
"dependencies": {
|
|
21
|
-
"@docusaurus/logger": "0.0.0-
|
|
21
|
+
"@docusaurus/logger": "0.0.0-5878",
|
|
22
22
|
"@svgr/webpack": "^6.5.1",
|
|
23
23
|
"escape-string-regexp": "^4.0.0",
|
|
24
24
|
"file-loader": "^6.2.0",
|
|
@@ -41,7 +41,7 @@
|
|
|
41
41
|
"node": ">=18.0"
|
|
42
42
|
},
|
|
43
43
|
"devDependencies": {
|
|
44
|
-
"@docusaurus/types": "0.0.0-
|
|
44
|
+
"@docusaurus/types": "0.0.0-5878",
|
|
45
45
|
"@types/dedent": "^0.7.0",
|
|
46
46
|
"@types/github-slugger": "^1.3.0",
|
|
47
47
|
"@types/micromatch": "^4.0.2",
|
|
@@ -57,5 +57,5 @@
|
|
|
57
57
|
"optional": true
|
|
58
58
|
}
|
|
59
59
|
},
|
|
60
|
-
"gitHead": "
|
|
60
|
+
"gitHead": "d12884c09795e4d0a536df1840d86a0bcbcd9a99"
|
|
61
61
|
}
|
package/src/emitUtils.ts
CHANGED
|
@@ -12,6 +12,10 @@ import {findAsyncSequential} from './jsUtils';
|
|
|
12
12
|
|
|
13
13
|
const fileHash = new Map<string, string>();
|
|
14
14
|
|
|
15
|
+
const hashContent = (content: string): string => {
|
|
16
|
+
return createHash('md5').update(content).digest('hex');
|
|
17
|
+
};
|
|
18
|
+
|
|
15
19
|
/**
|
|
16
20
|
* Outputs a file to the generated files directory. Only writes files if content
|
|
17
21
|
* differs from cache (for hot reload performance).
|
|
@@ -38,7 +42,7 @@ export async function generate(
|
|
|
38
42
|
// first "A" remains in cache. But if the file never existed in cache, no
|
|
39
43
|
// need to register it.
|
|
40
44
|
if (fileHash.get(filepath)) {
|
|
41
|
-
fileHash.set(filepath,
|
|
45
|
+
fileHash.set(filepath, hashContent(content));
|
|
42
46
|
}
|
|
43
47
|
return;
|
|
44
48
|
}
|
|
@@ -50,11 +54,11 @@ export async function generate(
|
|
|
50
54
|
// overwriting and we can reuse old file.
|
|
51
55
|
if (!lastHash && (await fs.pathExists(filepath))) {
|
|
52
56
|
const lastContent = await fs.readFile(filepath, 'utf8');
|
|
53
|
-
lastHash =
|
|
57
|
+
lastHash = hashContent(lastContent);
|
|
54
58
|
fileHash.set(filepath, lastHash);
|
|
55
59
|
}
|
|
56
60
|
|
|
57
|
-
const currentHash =
|
|
61
|
+
const currentHash = hashContent(content);
|
|
58
62
|
|
|
59
63
|
if (lastHash !== currentHash) {
|
|
60
64
|
await fs.outputFile(filepath, content);
|
package/src/gitUtils.ts
CHANGED
|
@@ -6,7 +6,16 @@
|
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
8
|
import path from 'path';
|
|
9
|
-
import
|
|
9
|
+
import fs from 'fs-extra';
|
|
10
|
+
import _ from 'lodash';
|
|
11
|
+
import shell from 'shelljs'; // TODO replace with async-first version
|
|
12
|
+
|
|
13
|
+
const realHasGitFn = () => !!shell.which('git');
|
|
14
|
+
|
|
15
|
+
// The hasGit call is synchronous IO so we memoize it
|
|
16
|
+
// The user won't install Git in the middle of a build anyway...
|
|
17
|
+
const hasGit =
|
|
18
|
+
process.env.NODE_ENV === 'test' ? realHasGitFn : _.memoize(realHasGitFn);
|
|
10
19
|
|
|
11
20
|
/** Custom error thrown when git is not found in `PATH`. */
|
|
12
21
|
export class GitNotFoundError extends Error {}
|
|
@@ -86,13 +95,13 @@ export async function getFileCommitDate(
|
|
|
86
95
|
timestamp: number;
|
|
87
96
|
author?: string;
|
|
88
97
|
}> {
|
|
89
|
-
if (!
|
|
98
|
+
if (!hasGit()) {
|
|
90
99
|
throw new GitNotFoundError(
|
|
91
100
|
`Failed to retrieve git history for "${file}" because git is not installed.`,
|
|
92
101
|
);
|
|
93
102
|
}
|
|
94
103
|
|
|
95
|
-
if (!
|
|
104
|
+
if (!(await fs.pathExists(file))) {
|
|
96
105
|
throw new Error(
|
|
97
106
|
`Failed to retrieve git history for "${file}" because the file does not exist.`,
|
|
98
107
|
);
|