@docusaurus/utils 3.9.2-canary-6436 → 3.9.2-canary-6439

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.
Files changed (55) hide show
  1. package/lib/index.d.ts +3 -2
  2. package/lib/index.d.ts.map +1 -1
  3. package/lib/index.js +8 -5
  4. package/lib/index.js.map +1 -1
  5. package/lib/lastUpdateUtils.d.ts +2 -6
  6. package/lib/lastUpdateUtils.d.ts.map +1 -1
  7. package/lib/lastUpdateUtils.js +13 -60
  8. package/lib/lastUpdateUtils.js.map +1 -1
  9. package/lib/{gitUtils.d.ts → vcs/gitUtils.d.ts} +17 -0
  10. package/lib/vcs/gitUtils.d.ts.map +1 -0
  11. package/lib/vcs/gitUtils.js +330 -0
  12. package/lib/vcs/gitUtils.js.map +1 -0
  13. package/lib/vcs/vcs.d.ts +19 -0
  14. package/lib/vcs/vcs.d.ts.map +1 -0
  15. package/lib/vcs/vcs.js +46 -0
  16. package/lib/vcs/vcs.js.map +1 -0
  17. package/lib/vcs/vcsDefaultV1.d.ts +13 -0
  18. package/lib/vcs/vcsDefaultV1.d.ts.map +1 -0
  19. package/lib/vcs/vcsDefaultV1.js +33 -0
  20. package/lib/vcs/vcsDefaultV1.js.map +1 -0
  21. package/lib/vcs/vcsDefaultV2.d.ts +13 -0
  22. package/lib/vcs/vcsDefaultV2.d.ts.map +1 -0
  23. package/lib/vcs/vcsDefaultV2.js +33 -0
  24. package/lib/vcs/vcsDefaultV2.js.map +1 -0
  25. package/lib/vcs/vcsDisabled.d.ts +12 -0
  26. package/lib/vcs/vcsDisabled.d.ts.map +1 -0
  27. package/lib/vcs/vcsDisabled.js +24 -0
  28. package/lib/vcs/vcsDisabled.js.map +1 -0
  29. package/lib/vcs/vcsGitAdHoc.d.ts +16 -0
  30. package/lib/vcs/vcsGitAdHoc.d.ts.map +1 -0
  31. package/lib/vcs/vcsGitAdHoc.js +29 -0
  32. package/lib/vcs/vcsGitAdHoc.js.map +1 -0
  33. package/lib/vcs/vcsGitEager.d.ts +9 -0
  34. package/lib/vcs/vcsGitEager.d.ts.map +1 -0
  35. package/lib/vcs/vcsGitEager.js +68 -0
  36. package/lib/vcs/vcsGitEager.js.map +1 -0
  37. package/lib/vcs/vcsHardcoded.d.ts +17 -0
  38. package/lib/vcs/vcsHardcoded.d.ts.map +1 -0
  39. package/lib/vcs/vcsHardcoded.js +41 -0
  40. package/lib/vcs/vcsHardcoded.js.map +1 -0
  41. package/package.json +6 -6
  42. package/src/index.ts +5 -4
  43. package/src/lastUpdateUtils.ts +18 -76
  44. package/src/vcs/gitUtils.ts +524 -0
  45. package/src/vcs/vcs.ts +54 -0
  46. package/src/vcs/vcsDefaultV1.ts +33 -0
  47. package/src/vcs/vcsDefaultV2.ts +33 -0
  48. package/src/vcs/vcsDisabled.ts +25 -0
  49. package/src/vcs/vcsGitAdHoc.ts +30 -0
  50. package/src/vcs/vcsGitEager.ts +99 -0
  51. package/src/vcs/vcsHardcoded.ts +45 -0
  52. package/lib/gitUtils.d.ts.map +0 -1
  53. package/lib/gitUtils.js +0 -103
  54. package/lib/gitUtils.js.map +0 -1
  55. package/src/gitUtils.ts +0 -200
package/lib/index.d.ts CHANGED
@@ -6,7 +6,7 @@
6
6
  */
7
7
  export { NODE_MAJOR_VERSION, NODE_MINOR_VERSION, DOCUSAURUS_VERSION, DEFAULT_BUILD_DIR_NAME, DEFAULT_CONFIG_FILE_NAME, BABEL_CONFIG_FILE_NAME, GENERATED_FILES_DIR_NAME, SRC_DIR_NAME, DEFAULT_STATIC_DIR_NAME, OUTPUT_STATIC_ASSETS_DIR_NAME, THEME_PATH, DEFAULT_I18N_DIR_NAME, CODE_TRANSLATIONS_FILE_NAME, DEFAULT_PORT, DEFAULT_PLUGIN_ID, WEBPACK_URL_LOADER_LIMIT, } from './constants';
8
8
  export { generate, readOutputHTMLFile } from './emitUtils';
9
- export { getFileCommitDate, FileNotTrackedError, GitNotFoundError, } from './gitUtils';
9
+ export { getFileCommitDate, FileNotTrackedError, GitNotFoundError, } from './vcs/gitUtils';
10
10
  export { mergeTranslations, updateTranslationFileMessages, getPluginI18nPath, getLocaleConfig, } from './i18nUtils';
11
11
  export { mapAsyncSequential, findAsyncSequential } from './jsUtils';
12
12
  export { normalizeUrl, getEditUrl, fileToPath, encodePath, isValidPathname, resolvePathname, parseURLPath, parseLocalURLPath, parseURLOrPath, toURLPath, serializeURLPath, hasSSHProtocol, buildHttpsUrl, buildSshUrl, } from './urlUtils';
@@ -25,6 +25,7 @@ export { isDraft, isUnlisted } from './contentVisibilityUtils';
25
25
  export { escapeRegexp } from './regExpUtils';
26
26
  export { askPreferredLanguage } from './cliUtils';
27
27
  export { flattenRoutes } from './routeUtils';
28
- export { getGitLastUpdate, getLastUpdate, readLastUpdateData, LAST_UPDATE_FALLBACK, type LastUpdateData, type FrontMatterLastUpdate, } from './lastUpdateUtils';
28
+ export { readLastUpdateData, type LastUpdateData, type FrontMatterLastUpdate, } from './lastUpdateUtils';
29
+ export { VcsPresetNames, getVcsPreset, TEST_VCS } from './vcs/vcs';
29
30
  export { normalizeTags, reportInlineTags } from './tags';
30
31
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/lib/index.js CHANGED
@@ -7,7 +7,7 @@
7
7
  */
8
8
  Object.defineProperty(exports, "__esModule", { value: true });
9
9
  exports.parseMarkdownContentTitle = exports.DEFAULT_PARSE_FRONT_MATTER = exports.createExcerpt = exports.admonitionTitleToDirectiveLabel = exports.unwrapMdxCodeBlocks = exports.escapeMarkdownHeadingIds = exports.parseMarkdownHeadingId = exports.getTagVisibility = exports.groupTaggedItems = exports.buildSshUrl = exports.buildHttpsUrl = exports.hasSSHProtocol = exports.serializeURLPath = exports.toURLPath = exports.parseURLOrPath = exports.parseLocalURLPath = exports.parseURLPath = exports.resolvePathname = exports.isValidPathname = exports.encodePath = exports.fileToPath = exports.getEditUrl = exports.normalizeUrl = exports.findAsyncSequential = exports.mapAsyncSequential = exports.getLocaleConfig = exports.getPluginI18nPath = exports.updateTranslationFileMessages = exports.mergeTranslations = exports.GitNotFoundError = exports.FileNotTrackedError = exports.getFileCommitDate = exports.readOutputHTMLFile = exports.generate = exports.WEBPACK_URL_LOADER_LIMIT = exports.DEFAULT_PLUGIN_ID = exports.DEFAULT_PORT = exports.CODE_TRANSLATIONS_FILE_NAME = exports.DEFAULT_I18N_DIR_NAME = exports.THEME_PATH = exports.OUTPUT_STATIC_ASSETS_DIR_NAME = exports.DEFAULT_STATIC_DIR_NAME = exports.SRC_DIR_NAME = exports.GENERATED_FILES_DIR_NAME = exports.BABEL_CONFIG_FILE_NAME = exports.DEFAULT_CONFIG_FILE_NAME = exports.DEFAULT_BUILD_DIR_NAME = exports.DOCUSAURUS_VERSION = exports.NODE_MINOR_VERSION = exports.NODE_MAJOR_VERSION = void 0;
10
- exports.reportInlineTags = exports.normalizeTags = exports.LAST_UPDATE_FALLBACK = exports.readLastUpdateData = exports.getLastUpdate = exports.getGitLastUpdate = exports.flattenRoutes = exports.askPreferredLanguage = exports.escapeRegexp = exports.isUnlisted = exports.isDraft = exports.getFolderContainingFile = exports.findFolderContainingFile = exports.getContentPathList = exports.readDataFile = exports.getDataFilePath = exports.loadFreshModule = exports.getWebpackLoaderCompilerName = exports.getFileLoaderUtils = exports.createAbsoluteFilePathMatcher = exports.createMatcher = exports.globTranslatableSourceFiles = exports.safeGlobby = exports.GlobExcludeDefault = exports.Globby = exports.docuHash = exports.simpleHash = exports.md5Hash = exports.addTrailingPathSeparator = exports.escapePath = exports.aliasedSitePathToRelativePath = exports.aliasedSitePath = exports.toMessageRelativeFilePath = exports.posixPath = exports.shortName = exports.isNameTooLong = exports.createSlugger = exports.resolveMarkdownLinkPathname = exports.writeMarkdownHeadingId = exports.parseMarkdownFile = void 0;
10
+ exports.reportInlineTags = exports.normalizeTags = exports.TEST_VCS = exports.getVcsPreset = exports.VcsPresetNames = exports.readLastUpdateData = exports.flattenRoutes = exports.askPreferredLanguage = exports.escapeRegexp = exports.isUnlisted = exports.isDraft = exports.getFolderContainingFile = exports.findFolderContainingFile = exports.getContentPathList = exports.readDataFile = exports.getDataFilePath = exports.loadFreshModule = exports.getWebpackLoaderCompilerName = exports.getFileLoaderUtils = exports.createAbsoluteFilePathMatcher = exports.createMatcher = exports.globTranslatableSourceFiles = exports.safeGlobby = exports.GlobExcludeDefault = exports.Globby = exports.docuHash = exports.simpleHash = exports.md5Hash = exports.addTrailingPathSeparator = exports.escapePath = exports.aliasedSitePathToRelativePath = exports.aliasedSitePath = exports.toMessageRelativeFilePath = exports.posixPath = exports.shortName = exports.isNameTooLong = exports.createSlugger = exports.resolveMarkdownLinkPathname = exports.writeMarkdownHeadingId = exports.parseMarkdownFile = void 0;
11
11
  var constants_1 = require("./constants");
12
12
  Object.defineProperty(exports, "NODE_MAJOR_VERSION", { enumerable: true, get: function () { return constants_1.NODE_MAJOR_VERSION; } });
13
13
  Object.defineProperty(exports, "NODE_MINOR_VERSION", { enumerable: true, get: function () { return constants_1.NODE_MINOR_VERSION; } });
@@ -28,7 +28,9 @@ Object.defineProperty(exports, "WEBPACK_URL_LOADER_LIMIT", { enumerable: true, g
28
28
  var emitUtils_1 = require("./emitUtils");
29
29
  Object.defineProperty(exports, "generate", { enumerable: true, get: function () { return emitUtils_1.generate; } });
30
30
  Object.defineProperty(exports, "readOutputHTMLFile", { enumerable: true, get: function () { return emitUtils_1.readOutputHTMLFile; } });
31
- var gitUtils_1 = require("./gitUtils");
31
+ var gitUtils_1 = require("./vcs/gitUtils");
32
+ // TODO Docusaurus v4: remove these legacy exports,
33
+ // they are only kept for retro-compatibility
32
34
  Object.defineProperty(exports, "getFileCommitDate", { enumerable: true, get: function () { return gitUtils_1.getFileCommitDate; } });
33
35
  Object.defineProperty(exports, "FileNotTrackedError", { enumerable: true, get: function () { return gitUtils_1.FileNotTrackedError; } });
34
36
  Object.defineProperty(exports, "GitNotFoundError", { enumerable: true, get: function () { return gitUtils_1.GitNotFoundError; } });
@@ -113,10 +115,11 @@ Object.defineProperty(exports, "askPreferredLanguage", { enumerable: true, get:
113
115
  var routeUtils_1 = require("./routeUtils");
114
116
  Object.defineProperty(exports, "flattenRoutes", { enumerable: true, get: function () { return routeUtils_1.flattenRoutes; } });
115
117
  var lastUpdateUtils_1 = require("./lastUpdateUtils");
116
- Object.defineProperty(exports, "getGitLastUpdate", { enumerable: true, get: function () { return lastUpdateUtils_1.getGitLastUpdate; } });
117
- Object.defineProperty(exports, "getLastUpdate", { enumerable: true, get: function () { return lastUpdateUtils_1.getLastUpdate; } });
118
118
  Object.defineProperty(exports, "readLastUpdateData", { enumerable: true, get: function () { return lastUpdateUtils_1.readLastUpdateData; } });
119
- Object.defineProperty(exports, "LAST_UPDATE_FALLBACK", { enumerable: true, get: function () { return lastUpdateUtils_1.LAST_UPDATE_FALLBACK; } });
119
+ var vcs_1 = require("./vcs/vcs");
120
+ Object.defineProperty(exports, "VcsPresetNames", { enumerable: true, get: function () { return vcs_1.VcsPresetNames; } });
121
+ Object.defineProperty(exports, "getVcsPreset", { enumerable: true, get: function () { return vcs_1.getVcsPreset; } });
122
+ Object.defineProperty(exports, "TEST_VCS", { enumerable: true, get: function () { return vcs_1.TEST_VCS; } });
120
123
  var tags_2 = require("./tags");
121
124
  Object.defineProperty(exports, "normalizeTags", { enumerable: true, get: function () { return tags_2.normalizeTags; } });
122
125
  Object.defineProperty(exports, "reportInlineTags", { enumerable: true, get: function () { return tags_2.reportInlineTags; } });
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;;AAEH,yCAiBqB;AAhBnB,+GAAA,kBAAkB,OAAA;AAClB,+GAAA,kBAAkB,OAAA;AAClB,+GAAA,kBAAkB,OAAA;AAClB,mHAAA,sBAAsB,OAAA;AACtB,qHAAA,wBAAwB,OAAA;AACxB,mHAAA,sBAAsB,OAAA;AACtB,qHAAA,wBAAwB,OAAA;AACxB,yGAAA,YAAY,OAAA;AACZ,oHAAA,uBAAuB,OAAA;AACvB,0HAAA,6BAA6B,OAAA;AAC7B,uGAAA,UAAU,OAAA;AACV,kHAAA,qBAAqB,OAAA;AACrB,wHAAA,2BAA2B,OAAA;AAC3B,yGAAA,YAAY,OAAA;AACZ,8GAAA,iBAAiB,OAAA;AACjB,qHAAA,wBAAwB,OAAA;AAE1B,yCAAyD;AAAjD,qGAAA,QAAQ,OAAA;AAAE,+GAAA,kBAAkB,OAAA;AACpC,uCAIoB;AAHlB,6GAAA,iBAAiB,OAAA;AACjB,+GAAA,mBAAmB,OAAA;AACnB,4GAAA,gBAAgB,OAAA;AAElB,yCAKqB;AAJnB,8GAAA,iBAAiB,OAAA;AACjB,0HAAA,6BAA6B,OAAA;AAC7B,8GAAA,iBAAiB,OAAA;AACjB,4GAAA,eAAe,OAAA;AAEjB,qCAAkE;AAA1D,6GAAA,kBAAkB,OAAA;AAAE,8GAAA,mBAAmB,OAAA;AAC/C,uCAeoB;AAdlB,wGAAA,YAAY,OAAA;AACZ,sGAAA,UAAU,OAAA;AACV,sGAAA,UAAU,OAAA;AACV,sGAAA,UAAU,OAAA;AACV,2GAAA,eAAe,OAAA;AACf,2GAAA,eAAe,OAAA;AACf,wGAAA,YAAY,OAAA;AACZ,6GAAA,iBAAiB,OAAA;AACjB,0GAAA,cAAc,OAAA;AACd,qGAAA,SAAS,OAAA;AACT,4GAAA,gBAAgB,OAAA;AAChB,0GAAA,cAAc,OAAA;AACd,yGAAA,aAAa,OAAA;AACb,uGAAA,WAAW,OAAA;AAGb,+BAWgB;AAFd,wGAAA,gBAAgB,OAAA;AAChB,wGAAA,gBAAgB,OAAA;AAElB,iDAWyB;AAVvB,uHAAA,sBAAsB,OAAA;AACtB,yHAAA,wBAAwB,OAAA;AACxB,oHAAA,mBAAmB,OAAA;AACnB,gIAAA,+BAA+B,OAAA;AAC/B,8GAAA,aAAa,OAAA;AACb,2HAAA,0BAA0B,OAAA;AAC1B,0HAAA,yBAAyB,OAAA;AACzB,kHAAA,iBAAiB,OAAA;AACjB,uHAAA,sBAAsB,OAAA;AAGxB,iDAIyB;AADvB,4HAAA,2BAA2B,OAAA;AAE7B,qCAA2E;AAAhC,wGAAA,aAAa,OAAA;AACxD,yCASqB;AARnB,0GAAA,aAAa,OAAA;AACb,sGAAA,SAAS,OAAA;AACT,sGAAA,SAAS,OAAA;AACT,sHAAA,yBAAyB,OAAA;AACzB,4GAAA,eAAe,OAAA;AACf,0HAAA,6BAA6B,OAAA;AAC7B,uGAAA,UAAU,OAAA;AACV,qHAAA,wBAAwB,OAAA;AAE1B,yCAA0D;AAAlD,oGAAA,OAAO,OAAA;AAAE,uGAAA,UAAU,OAAA;AAAE,qGAAA,QAAQ,OAAA;AACrC,yCAOqB;AANnB,mGAAA,MAAM,OAAA;AACN,+GAAA,kBAAkB,OAAA;AAClB,uGAAA,UAAU,OAAA;AACV,wHAAA,2BAA2B,OAAA;AAC3B,0GAAA,aAAa,OAAA;AACb,0HAAA,6BAA6B,OAAA;AAE/B,+CAIwB;AAHtB,kHAAA,kBAAkB,OAAA;AAClB,4HAAA,4BAA4B,OAAA;AAG9B,6CAA8C;AAAtC,8GAAA,eAAe,OAAA;AACvB,iDAMyB;AALvB,gHAAA,eAAe,OAAA;AACf,6GAAA,YAAY,OAAA;AACZ,mHAAA,kBAAkB,OAAA;AAClB,yHAAA,wBAAwB,OAAA;AACxB,wHAAA,uBAAuB,OAAA;AAEzB,mEAA6D;AAArD,iHAAA,OAAO,OAAA;AAAE,oHAAA,UAAU,OAAA;AAC3B,6CAA2C;AAAnC,2GAAA,YAAY,OAAA;AACpB,uCAAgD;AAAxC,gHAAA,oBAAoB,OAAA;AAC5B,2CAA2C;AAAnC,2GAAA,aAAa,OAAA;AAErB,qDAO2B;AANzB,mHAAA,gBAAgB,OAAA;AAChB,gHAAA,aAAa,OAAA;AACb,qHAAA,kBAAkB,OAAA;AAClB,uHAAA,oBAAoB,OAAA;AAKtB,+BAAuD;AAA/C,qGAAA,aAAa,OAAA;AAAE,wGAAA,gBAAgB,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -4,7 +4,7 @@
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  */
7
- import type { PluginOptions } from '@docusaurus/types';
7
+ import type { PluginOptions, VcsConfig } from '@docusaurus/types';
8
8
  export type LastUpdateData = {
9
9
  /**
10
10
  * A timestamp in **milliseconds**, usually read from `git log`
@@ -19,10 +19,6 @@ export type LastUpdateData = {
19
19
  */
20
20
  lastUpdatedBy: string | undefined | null;
21
21
  };
22
- export declare function getGitLastUpdate(filePath: string): Promise<LastUpdateData | null>;
23
- export declare const LAST_UPDATE_FALLBACK: LastUpdateData;
24
- export declare const LAST_UPDATE_UNTRACKED_GIT_FILEPATH: string;
25
- export declare function getLastUpdate(filePath: string): Promise<LastUpdateData | null>;
26
22
  type LastUpdateOptions = Pick<PluginOptions, 'showLastUpdateAuthor' | 'showLastUpdateTime'>;
27
23
  export type FrontMatterLastUpdate = {
28
24
  author?: string;
@@ -32,6 +28,6 @@ export type FrontMatterLastUpdate = {
32
28
  */
33
29
  date?: Date | string;
34
30
  };
35
- export declare function readLastUpdateData(filePath: string, options: LastUpdateOptions, lastUpdateFrontMatter: FrontMatterLastUpdate | undefined): Promise<LastUpdateData>;
31
+ export declare function readLastUpdateData(filePath: string, options: LastUpdateOptions, lastUpdateFrontMatter: FrontMatterLastUpdate | undefined, vcsParam: Pick<VcsConfig, 'getFileLastUpdateInfo'>): Promise<LastUpdateData>;
36
32
  export {};
37
33
  //# sourceMappingURL=lastUpdateUtils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"lastUpdateUtils.d.ts","sourceRoot":"","sources":["../src/lastUpdateUtils.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AASH,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,mBAAmB,CAAC;AAErD,MAAM,MAAM,cAAc,GAAG;IAC3B;;;;OAIG;IACH,aAAa,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC;IACzC;;;;OAIG;IACH,aAAa,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC;CAC1C,CAAC;AAKF,wBAAsB,gBAAgB,CACpC,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAmChC;AAED,eAAO,MAAM,oBAAoB,EAAE,cAGlC,CAAC;AAGF,eAAO,MAAM,kCAAkC,QAAmC,CAAC;AAEnF,wBAAsB,aAAa,CACjC,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAYhC;AAED,KAAK,iBAAiB,GAAG,IAAI,CAC3B,aAAa,EACb,sBAAsB,GAAG,oBAAoB,CAC9C,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;OAGG;IACH,IAAI,CAAC,EAAE,IAAI,GAAG,MAAM,CAAC;CACtB,CAAC;AAEF,wBAAsB,kBAAkB,CACtC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,iBAAiB,EAC1B,qBAAqB,EAAE,qBAAqB,GAAG,SAAS,GACvD,OAAO,CAAC,cAAc,CAAC,CA6CzB"}
1
+ {"version":3,"file":"lastUpdateUtils.d.ts","sourceRoot":"","sources":["../src/lastUpdateUtils.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EAAC,aAAa,EAAE,SAAS,EAAC,MAAM,mBAAmB,CAAC;AAEhE,MAAM,MAAM,cAAc,GAAG;IAC3B;;;;OAIG;IACH,aAAa,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC;IACzC;;;;OAIG;IACH,aAAa,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC;CAC1C,CAAC;AAEF,KAAK,iBAAiB,GAAG,IAAI,CAC3B,aAAa,EACb,sBAAsB,GAAG,oBAAoB,CAC9C,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;OAGG;IACH,IAAI,CAAC,EAAE,IAAI,GAAG,MAAM,CAAC;CACtB,CAAC;AAIF,wBAAsB,kBAAkB,CACtC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,iBAAiB,EAC1B,qBAAqB,EAAE,qBAAqB,GAAG,SAAS,EACxD,QAAQ,EAAE,IAAI,CAAC,SAAS,EAAE,uBAAuB,CAAC,GACjD,OAAO,CAAC,cAAc,CAAC,CAsDzB"}
@@ -6,66 +6,19 @@
6
6
  * LICENSE file in the root directory of this source tree.
7
7
  */
8
8
  Object.defineProperty(exports, "__esModule", { value: true });
9
- exports.LAST_UPDATE_UNTRACKED_GIT_FILEPATH = exports.LAST_UPDATE_FALLBACK = void 0;
10
- exports.getGitLastUpdate = getGitLastUpdate;
11
- exports.getLastUpdate = getLastUpdate;
12
9
  exports.readLastUpdateData = readLastUpdateData;
13
10
  const tslib_1 = require("tslib");
14
11
  const lodash_1 = tslib_1.__importDefault(require("lodash"));
15
- const logger_1 = tslib_1.__importDefault(require("@docusaurus/logger"));
16
- const gitUtils_1 = require("./gitUtils");
17
- let showedGitRequirementError = false;
18
- let showedFileNotTrackedError = false;
19
- async function getGitLastUpdate(filePath) {
20
- if (!filePath) {
21
- return null;
22
- }
23
- // Wrap in try/catch in case the shell commands fail
24
- // (e.g. project doesn't use Git, etc).
25
- try {
26
- const result = await (0, gitUtils_1.getFileCommitDate)(filePath, {
27
- age: 'newest',
28
- includeAuthor: true,
29
- });
30
- return { lastUpdatedAt: result.timestamp, lastUpdatedBy: result.author };
31
- }
32
- catch (err) {
33
- if (err instanceof gitUtils_1.GitNotFoundError) {
34
- if (!showedGitRequirementError) {
35
- logger_1.default.warn('Sorry, the last update options require Git.');
36
- showedGitRequirementError = true;
37
- }
38
- }
39
- else if (err instanceof gitUtils_1.FileNotTrackedError) {
40
- if (!showedFileNotTrackedError) {
41
- logger_1.default.warn('Cannot infer the update date for some files, as they are not tracked by git.');
42
- showedFileNotTrackedError = true;
43
- }
44
- }
45
- else {
46
- throw new Error(`An error occurred when trying to get the last update date`, { cause: err });
47
- }
48
- return null;
49
- }
50
- }
51
- exports.LAST_UPDATE_FALLBACK = {
52
- lastUpdatedAt: 1539502055000,
53
- lastUpdatedBy: 'Author',
54
- };
55
- // Not proud of this, but convenient for tests :/
56
- exports.LAST_UPDATE_UNTRACKED_GIT_FILEPATH = `file/path/${Math.random()}.mdx`;
57
- async function getLastUpdate(filePath) {
58
- if (filePath === exports.LAST_UPDATE_UNTRACKED_GIT_FILEPATH) {
59
- return null;
60
- }
61
- if (process.env.NODE_ENV !== 'production' ||
62
- process.env.DOCUSAURUS_DISABLE_LAST_UPDATE === 'true') {
63
- // Use fake data in dev/test for faster development.
64
- return exports.LAST_UPDATE_FALLBACK;
65
- }
66
- return getGitLastUpdate(filePath);
67
- }
68
- async function readLastUpdateData(filePath, options, lastUpdateFrontMatter) {
12
+ const vcs_1 = require("./vcs/vcs");
13
+ // TODO Docusaurus v4: refactor/rename, make it clear this fn is only
14
+ // for Markdown files with front matter shared by content plugin
15
+ async function readLastUpdateData(filePath, options, lastUpdateFrontMatter, vcsParam) {
16
+ // We fallback to the default VSC config at runtime on purpose
17
+ // It preserves retro-compatibility if a third-party plugin imports it
18
+ // This also ensures unit tests keep working without extra setup
19
+ // We still want to ensure type safety by requiring the VCS param
20
+ // TODO Docusaurus v4: refactor all these Git read APIs
21
+ const vcs = vcsParam ?? (0, vcs_1.getVcsPreset)('default-v1');
69
22
  const { showLastUpdateAuthor, showLastUpdateTime } = options;
70
23
  if (!showLastUpdateAuthor && !showLastUpdateTime) {
71
24
  return { lastUpdatedBy: undefined, lastUpdatedAt: undefined };
@@ -77,20 +30,20 @@ async function readLastUpdateData(filePath, options, lastUpdateFrontMatter) {
77
30
  // We try to minimize git last update calls
78
31
  // We call it at most once
79
32
  // If all the data is provided as front matter, we do not call it
80
- const getLastUpdateMemoized = lodash_1.default.memoize(() => getLastUpdate(filePath));
33
+ const getLastUpdateMemoized = lodash_1.default.memoize(() => vcs.getFileLastUpdateInfo(filePath));
81
34
  const getLastUpdateBy = () => getLastUpdateMemoized().then((update) => {
82
35
  // Important, see https://github.com/facebook/docusaurus/pull/11211
83
36
  if (update === null) {
84
37
  return null;
85
38
  }
86
- return update?.lastUpdatedBy;
39
+ return update?.author;
87
40
  });
88
41
  const getLastUpdateAt = () => getLastUpdateMemoized().then((update) => {
89
42
  // Important, see https://github.com/facebook/docusaurus/pull/11211
90
43
  if (update === null) {
91
44
  return null;
92
45
  }
93
- return update?.lastUpdatedAt;
46
+ return update?.timestamp;
94
47
  });
95
48
  const lastUpdatedBy = showLastUpdateAuthor
96
49
  ? frontMatterAuthor ?? (await getLastUpdateBy())
@@ -1 +1 @@
1
- {"version":3,"file":"lastUpdateUtils.js","sourceRoot":"","sources":["../src/lastUpdateUtils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"lastUpdateUtils.js","sourceRoot":"","sources":["../src/lastUpdateUtils.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;AAsCH,gDA2DC;;AA/FD,4DAAuB;AACvB,mCAAuC;AAiCvC,qEAAqE;AACrE,iEAAiE;AAC1D,KAAK,UAAU,kBAAkB,CACtC,QAAgB,EAChB,OAA0B,EAC1B,qBAAwD,EACxD,QAAkD;IAElD,8DAA8D;IAC9D,sEAAsE;IACtE,gEAAgE;IAChE,iEAAiE;IACjE,uDAAuD;IACvD,MAAM,GAAG,GAAG,QAAQ,IAAI,IAAA,kBAAY,EAAC,YAAY,CAAC,CAAC;IAEnD,MAAM,EAAC,oBAAoB,EAAE,kBAAkB,EAAC,GAAG,OAAO,CAAC;IAE3D,IAAI,CAAC,oBAAoB,IAAI,CAAC,kBAAkB,EAAE,CAAC;QACjD,OAAO,EAAC,aAAa,EAAE,SAAS,EAAE,aAAa,EAAE,SAAS,EAAC,CAAC;IAC9D,CAAC;IAED,MAAM,iBAAiB,GAAG,qBAAqB,EAAE,MAAM,CAAC;IACxD,MAAM,oBAAoB,GAAG,qBAAqB,EAAE,IAAI;QACtD,CAAC,CAAC,IAAI,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE;QAChD,CAAC,CAAC,SAAS,CAAC;IAEd,2CAA2C;IAC3C,0BAA0B;IAC1B,iEAAiE;IACjE,MAAM,qBAAqB,GAAG,gBAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAC3C,GAAG,CAAC,qBAAqB,CAAC,QAAQ,CAAC,CACpC,CAAC;IACF,MAAM,eAAe,GAAG,GAAG,EAAE,CAC3B,qBAAqB,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE;QACtC,mEAAmE;QACnE,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;YACpB,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,MAAM,EAAE,MAAM,CAAC;IACxB,CAAC,CAAC,CAAC;IACL,MAAM,eAAe,GAAG,GAAG,EAAE,CAC3B,qBAAqB,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE;QACtC,mEAAmE;QACnE,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;YACpB,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,MAAM,EAAE,SAAS,CAAC;IAC3B,CAAC,CAAC,CAAC;IAEL,MAAM,aAAa,GAAG,oBAAoB;QACxC,CAAC,CAAC,iBAAiB,IAAI,CAAC,MAAM,eAAe,EAAE,CAAC;QAChD,CAAC,CAAC,SAAS,CAAC;IAEd,MAAM,aAAa,GAAG,kBAAkB;QACtC,CAAC,CAAC,oBAAoB,IAAI,CAAC,MAAM,eAAe,EAAE,CAAC;QACnD,CAAC,CAAC,SAAS,CAAC;IAEd,OAAO;QACL,aAAa;QACb,aAAa;KACd,CAAC;AACJ,CAAC"}
@@ -63,4 +63,21 @@ file: string, args: {
63
63
  /** The author's name, as returned from git. */
64
64
  author: string;
65
65
  }>;
66
+ type GitCommitInfo = {
67
+ timestamp: number;
68
+ author: string;
69
+ };
70
+ export declare function getGitLastUpdate(filePath: string): Promise<GitCommitInfo | null>;
71
+ export declare function getGitCreation(filePath: string): Promise<GitCommitInfo | null>;
72
+ export declare function getGitRepoRoot(cwd: string): Promise<string>;
73
+ export declare function getGitSuperProjectRoot(cwd: string): Promise<string | null>;
74
+ export declare function getGitSubmodulePaths(cwd: string): Promise<string[]>;
75
+ export declare function getGitAllRepoRoots(cwd: string): Promise<string[]>;
76
+ export type GitFileInfo = {
77
+ creation: GitCommitInfo;
78
+ lastUpdate: GitCommitInfo;
79
+ };
80
+ export type GitFileInfoMap = Map<string, GitFileInfo>;
81
+ export declare function getGitRepositoryFilesInfo(cwd: string): Promise<GitFileInfoMap>;
82
+ export {};
66
83
  //# sourceMappingURL=gitUtils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gitUtils.d.ts","sourceRoot":"","sources":["../../src/vcs/gitUtils.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAgDH,2DAA2D;AAC3D,qBAAa,gBAAiB,SAAQ,KAAK;CAAG;AAI9C,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;AA8FH,KAAK,aAAa,GAAG;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAC,CAAC;AAyCzD,wBAAsB,gBAAgB,CACpC,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAE/B;AAED,wBAAsB,cAAc,CAClC,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAE/B;AAED,wBAAsB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CA6BjE;AAKD,wBAAsB,sBAAsB,CAC1C,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAuCxB;AAGD,wBAAsB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAiDzE;AAGD,wBAAsB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAmBvE;AAGD,MAAM,MAAM,WAAW,GAAG;IACxB,QAAQ,EAAE,aAAa,CAAC;IACxB,UAAU,EAAE,aAAa,CAAC;CAC3B,CAAC;AAGF,MAAM,MAAM,cAAc,GAAG,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;AAKtD,wBAAsB,yBAAyB,CAC7C,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,cAAc,CAAC,CA8FzB"}
@@ -0,0 +1,330 @@
1
+ "use strict";
2
+ /**
3
+ * Copyright (c) Facebook, Inc. and its affiliates.
4
+ *
5
+ * This source code is licensed under the MIT license found in the
6
+ * LICENSE file in the root directory of this source tree.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.FileNotTrackedError = exports.GitNotFoundError = void 0;
10
+ exports.getFileCommitDate = getFileCommitDate;
11
+ exports.getGitLastUpdate = getGitLastUpdate;
12
+ exports.getGitCreation = getGitCreation;
13
+ exports.getGitRepoRoot = getGitRepoRoot;
14
+ exports.getGitSuperProjectRoot = getGitSuperProjectRoot;
15
+ exports.getGitSubmodulePaths = getGitSubmodulePaths;
16
+ exports.getGitAllRepoRoots = getGitAllRepoRoots;
17
+ exports.getGitRepositoryFilesInfo = getGitRepositoryFilesInfo;
18
+ const tslib_1 = require("tslib");
19
+ const path_1 = tslib_1.__importDefault(require("path"));
20
+ const fs_extra_1 = tslib_1.__importDefault(require("fs-extra"));
21
+ const os_1 = tslib_1.__importDefault(require("os"));
22
+ const lodash_1 = tslib_1.__importDefault(require("lodash"));
23
+ const execa_1 = tslib_1.__importDefault(require("execa"));
24
+ const p_queue_1 = tslib_1.__importDefault(require("p-queue"));
25
+ const logger_1 = tslib_1.__importDefault(require("@docusaurus/logger"));
26
+ // Quite high/conservative concurrency value (it was previously "Infinity")
27
+ // See https://github.com/facebook/docusaurus/pull/10915
28
+ const DefaultGitCommandConcurrency =
29
+ // TODO Docusaurus v4: bump node, availableParallelism() now always exists
30
+ (typeof os_1.default.availableParallelism === 'function'
31
+ ? os_1.default.availableParallelism()
32
+ : os_1.default.cpus().length) * 4;
33
+ const GitCommandConcurrencyEnv = process.env.DOCUSAURUS_GIT_COMMAND_CONCURRENCY
34
+ ? parseInt(process.env.DOCUSAURUS_GIT_COMMAND_CONCURRENCY, 10)
35
+ : undefined;
36
+ const GitCommandConcurrency = GitCommandConcurrencyEnv && GitCommandConcurrencyEnv > 0
37
+ ? GitCommandConcurrencyEnv
38
+ : DefaultGitCommandConcurrency;
39
+ // We use a queue to avoid running too many concurrent Git commands at once
40
+ // See https://github.com/facebook/docusaurus/issues/10348
41
+ const GitCommandQueue = new p_queue_1.default({
42
+ concurrency: GitCommandConcurrency,
43
+ });
44
+ const realHasGitFn = () => {
45
+ try {
46
+ return execa_1.default.sync('git', ['--version']).exitCode === 0;
47
+ }
48
+ catch (error) {
49
+ return false;
50
+ }
51
+ };
52
+ // The hasGit call is synchronous IO so we memoize it
53
+ // The user won't install Git in the middle of a build anyway...
54
+ const hasGit = process.env.NODE_ENV === 'test' ? realHasGitFn : lodash_1.default.memoize(realHasGitFn);
55
+ // TODO Docusaurus v4: remove this
56
+ // Exceptions are not made for control flow logic
57
+ /** Custom error thrown when git is not found in `PATH`. */
58
+ class GitNotFoundError extends Error {
59
+ }
60
+ exports.GitNotFoundError = GitNotFoundError;
61
+ // TODO Docusaurus v4: remove this, only kept for retro-compatibility
62
+ // Exceptions are not made for control flow logic
63
+ /** Custom error thrown when the current file is not tracked by git. */
64
+ class FileNotTrackedError extends Error {
65
+ }
66
+ exports.FileNotTrackedError = FileNotTrackedError;
67
+ async function getFileCommitDate(file, { age = 'oldest', includeAuthor = false, }) {
68
+ if (!hasGit()) {
69
+ throw new GitNotFoundError(`Failed to retrieve git history for "${file}" because git is not installed.`);
70
+ }
71
+ if (!(await fs_extra_1.default.pathExists(file))) {
72
+ throw new Error(`Failed to retrieve git history for "${file}" because the file does not exist.`);
73
+ }
74
+ // We add a "RESULT:" prefix to make parsing easier
75
+ // See why: https://github.com/facebook/docusaurus/pull/10022
76
+ const resultFormat = includeAuthor ? 'RESULT:%ct,%an' : 'RESULT:%ct';
77
+ const args = [
78
+ `--format=${resultFormat}`,
79
+ '--max-count=1',
80
+ age === 'oldest' ? '--follow --diff-filter=A' : undefined,
81
+ ]
82
+ .filter(Boolean)
83
+ .join(' ');
84
+ // Do not include GPG signature in the log output
85
+ // See https://github.com/facebook/docusaurus/pull/10022
86
+ const command = `git -c log.showSignature=false log ${args} -- "${path_1.default.basename(file)}"`;
87
+ const result = (await GitCommandQueue.add(() => {
88
+ return (0, execa_1.default)(command, {
89
+ cwd: path_1.default.dirname(file),
90
+ shell: true,
91
+ });
92
+ }));
93
+ if (result.exitCode !== 0) {
94
+ throw new Error(`Failed to retrieve the git history for file "${file}" with exit code ${result.exitCode}: ${result.stderr}`);
95
+ }
96
+ // We only parse the output line starting with our "RESULT:" prefix
97
+ // See why https://github.com/facebook/docusaurus/pull/10022
98
+ const regex = includeAuthor
99
+ ? /(?:^|\n)RESULT:(?<timestamp>\d+),(?<author>.+)(?:$|\n)/
100
+ : /(?:^|\n)RESULT:(?<timestamp>\d+)(?:$|\n)/;
101
+ const output = result.stdout.trim();
102
+ if (!output) {
103
+ throw new FileNotTrackedError(`Failed to retrieve the git history for file "${file}" because the file is not tracked by git.`);
104
+ }
105
+ const match = output.match(regex);
106
+ if (!match) {
107
+ throw new Error(`Failed to retrieve the git history for file "${file}" with unexpected output: ${output}`);
108
+ }
109
+ const timestampInSeconds = Number(match.groups.timestamp);
110
+ const timestamp = timestampInSeconds * 1000;
111
+ const date = new Date(timestamp);
112
+ if (includeAuthor) {
113
+ return { date, timestamp, author: match.groups.author };
114
+ }
115
+ return { date, timestamp };
116
+ }
117
+ let showedGitRequirementError = false;
118
+ let showedFileNotTrackedError = false;
119
+ async function getGitCommitInfo(filePath, age) {
120
+ if (!filePath) {
121
+ return null;
122
+ }
123
+ // Wrap in try/catch in case the shell commands fail
124
+ // (e.g. project doesn't use Git, etc).
125
+ try {
126
+ const result = await getFileCommitDate(filePath, {
127
+ age,
128
+ includeAuthor: true,
129
+ });
130
+ return { timestamp: result.timestamp, author: result.author };
131
+ }
132
+ catch (err) {
133
+ // TODO legacy perf issue: do not use exceptions for control flow!
134
+ if (err instanceof GitNotFoundError) {
135
+ if (!showedGitRequirementError) {
136
+ logger_1.default.warn('Sorry, the last update options require Git.');
137
+ showedGitRequirementError = true;
138
+ }
139
+ }
140
+ else if (err instanceof FileNotTrackedError) {
141
+ if (!showedFileNotTrackedError) {
142
+ logger_1.default.warn('Cannot infer the update date for some files, as they are not tracked by git.');
143
+ showedFileNotTrackedError = true;
144
+ }
145
+ }
146
+ else {
147
+ throw new Error(`An error occurred when trying to get the last update date`, { cause: err });
148
+ }
149
+ return null;
150
+ }
151
+ }
152
+ async function getGitLastUpdate(filePath) {
153
+ return getGitCommitInfo(filePath, 'newest');
154
+ }
155
+ async function getGitCreation(filePath) {
156
+ return getGitCommitInfo(filePath, 'oldest');
157
+ }
158
+ async function getGitRepoRoot(cwd) {
159
+ const createErrorMessageBase = () => {
160
+ return `Couldn't find the git repository root directory
161
+ Failure while running ${logger_1.default.code('git rev-parse --show-toplevel')} from cwd=${logger_1.default.path(cwd)}`;
162
+ };
163
+ const result = await (0, execa_1.default)('git', ['rev-parse', '--show-toplevel'], {
164
+ cwd,
165
+ }).catch((error) => {
166
+ // We enter this rejection when cwd is not a dir for example
167
+ throw new Error(`${createErrorMessageBase()}
168
+ The command executed throws an error: ${error.message}`, { cause: error });
169
+ });
170
+ if (result.exitCode !== 0) {
171
+ throw new Error(`${createErrorMessageBase()}
172
+ The command returned exit code ${logger_1.default.code(result.exitCode)}: ${logger_1.default.subdue(result.stderr)}`);
173
+ }
174
+ return fs_extra_1.default.realpath.native(result.stdout.trim());
175
+ }
176
+ // A Git "superproject" is a Git repository that contains submodules
177
+ // See https://git-scm.com/docs/git-rev-parse#Documentation/git-rev-parse.txt---show-superproject-working-tree
178
+ // See https://git-scm.com/book/en/v2/Git-Tools-Submodules
179
+ async function getGitSuperProjectRoot(cwd) {
180
+ const createErrorMessageBase = () => {
181
+ return `Couldn't find the git superproject root directory
182
+ Failure while running ${logger_1.default.code('git rev-parse --show-superproject-working-tree')} from cwd=${logger_1.default.path(cwd)}`;
183
+ };
184
+ const result = await (0, execa_1.default)('git', ['rev-parse', '--show-superproject-working-tree'], {
185
+ cwd,
186
+ }).catch((error) => {
187
+ // We enter this rejection when cwd is not a dir for example
188
+ throw new Error(`${createErrorMessageBase()}
189
+ The command executed throws an error: ${error.message}`, { cause: error });
190
+ });
191
+ if (result.exitCode !== 0) {
192
+ throw new Error(`${createErrorMessageBase()}
193
+ The command returned exit code ${logger_1.default.code(result.exitCode)}: ${logger_1.default.subdue(result.stderr)}`);
194
+ }
195
+ const output = result.stdout.trim();
196
+ // this command only works when inside submodules
197
+ // otherwise it doesn't return anything when we are inside the main repo
198
+ if (output) {
199
+ return fs_extra_1.default.realpath.native(output);
200
+ }
201
+ return getGitRepoRoot(cwd);
202
+ }
203
+ // See https://git-scm.com/book/en/v2/Git-Tools-Submodules
204
+ async function getGitSubmodulePaths(cwd) {
205
+ const createErrorMessageBase = () => {
206
+ return `Couldn't read the list of git submodules
207
+ Failure while running ${logger_1.default.code('git submodule status')} from cwd=${logger_1.default.path(cwd)}`;
208
+ };
209
+ const result = await (0, execa_1.default)('git', ['submodule', 'status'], {
210
+ cwd,
211
+ }).catch((error) => {
212
+ // We enter this rejection when cwd is not a dir for example
213
+ throw new Error(`${createErrorMessageBase()}
214
+ The command executed throws an error: ${error.message}`, { cause: error });
215
+ });
216
+ if (result.exitCode !== 0) {
217
+ throw new Error(`${createErrorMessageBase()}
218
+ The command returned exit code ${logger_1.default.code(result.exitCode)}: ${logger_1.default.subdue(result.stderr)}`);
219
+ }
220
+ const output = result.stdout.trim();
221
+ if (!output) {
222
+ return [];
223
+ }
224
+ /* The output may contain a space/-/+/U prefix, for example
225
+ 1234567e3e35d1f5b submodules/foo (heads/main)
226
+ -9ab1f1d3a2d77b0a4 submodules/bar (heads/dev)
227
+ +f00ba42e1b3ddead submodules/baz (remotes/origin/main)
228
+ Udeadbeefcafe1234 submodules/qux
229
+ */
230
+ const getSubmodulePath = async (line) => {
231
+ const submodulePath = line.substring(1).split(' ')[1];
232
+ if (!submodulePath) {
233
+ throw new Error(`Failed to parse git submodule line: ${line}`);
234
+ }
235
+ return submodulePath;
236
+ };
237
+ return Promise.all(output.split('\n').map(getSubmodulePath));
238
+ }
239
+ // Find the root git repository alongside all its submodules, if any
240
+ async function getGitAllRepoRoots(cwd) {
241
+ try {
242
+ const superProjectRoot = await getGitSuperProjectRoot(cwd);
243
+ if (!superProjectRoot) {
244
+ return [];
245
+ }
246
+ let submodulePaths = await getGitSubmodulePaths(superProjectRoot);
247
+ submodulePaths = await Promise.all(submodulePaths.map((submodulePath) => fs_extra_1.default.realpath.native(path_1.default.resolve(superProjectRoot, submodulePath))));
248
+ return [superProjectRoot, ...submodulePaths];
249
+ }
250
+ catch (error) {
251
+ throw new Error(`Could not get all the git repository root paths (superproject + submodules) from cwd=${cwd}`, { cause: error });
252
+ }
253
+ }
254
+ // Logic inspired from Astro Starlight:
255
+ // See https://bsky.app/profile/bluwy.me/post/3lyihod6qos2a
256
+ // See https://github.com/withastro/starlight/blob/c417f1efd463be63b7230617d72b120caed098cd/packages/starlight/utils/git.ts#L58
257
+ async function getGitRepositoryFilesInfo(cwd) {
258
+ // git --no-pager -c log.showSignature=false log --format=t:%ct,a:%an --name-status
259
+ const result = await (0, execa_1.default)('git', [
260
+ '--no-pager',
261
+ // Do not include GPG signature in the log output
262
+ // See https://github.com/facebook/docusaurus/pull/10022
263
+ '-c',
264
+ 'log.showSignature=false',
265
+ // The git command we want to run
266
+ 'log',
267
+ // Format each history entry as t:<seconds since epoch>
268
+ '--format=t:%ct,a:%an',
269
+ // In each entry include the name and status for each modified file
270
+ '--name-status',
271
+ // For creation info, should we use --follow --find-renames=100% ???
272
+ ], {
273
+ cwd,
274
+ encoding: 'utf-8',
275
+ // TODO use streaming to avoid a large buffer
276
+ // See https://github.com/withastro/starlight/issues/3154
277
+ maxBuffer: 20 * 1024 * 1024,
278
+ });
279
+ if (result.exitCode !== 0) {
280
+ throw new Error(`Docusaurus failed to run the 'git log' to retrieve tracked files last update date/author.
281
+ The command exited with code ${result.exitCode}: ${result.stderr}`);
282
+ }
283
+ const logLines = result.stdout.split('\n');
284
+ const now = Date.now();
285
+ // TODO not fail-fast
286
+ let runningDate = now;
287
+ let runningAuthor = 'N/A';
288
+ const runningMap = new Map();
289
+ for (const logLine of logLines) {
290
+ if (logLine.startsWith('t:')) {
291
+ // t:<timestamp>,a:<author name>
292
+ const [timestampStr, authorStr] = logLine.split(',');
293
+ const timestamp = Number.parseInt(timestampStr.slice(2), 10) * 1000;
294
+ const author = authorStr.slice(2);
295
+ runningDate = timestamp;
296
+ runningAuthor = author;
297
+ }
298
+ // TODO the code below doesn't handle delete/move/rename operations properly
299
+ // it returns files that no longer exist in the repo (deleted/moved)
300
+ // - Added files take the format `A\t<file>`
301
+ // - Modified files take the format `M\t<file>`
302
+ // - Deleted files take the format `D\t<file>`
303
+ // - Renamed files take the format `R<count>\t<old>\t<new>`
304
+ // - Copied files take the format `C<count>\t<old>\t<new>`
305
+ // The name of the file as of the commit being processed is always
306
+ // the last part of the log line.
307
+ const tabSplit = logLine.lastIndexOf('\t');
308
+ if (tabSplit === -1) {
309
+ continue;
310
+ }
311
+ const relativeFile = logLine.slice(tabSplit + 1);
312
+ const currentFileInfo = runningMap.get(relativeFile);
313
+ const currentCreationTime = currentFileInfo?.creation.timestamp || now;
314
+ const newCreationTime = Math.min(currentCreationTime, runningDate);
315
+ const newCreation = !currentFileInfo || newCreationTime !== currentCreationTime
316
+ ? { timestamp: newCreationTime, author: runningAuthor }
317
+ : currentFileInfo.creation;
318
+ const currentLastUpdateTime = currentFileInfo?.lastUpdate.timestamp || 0;
319
+ const newLastUpdateTime = Math.max(currentLastUpdateTime, runningDate);
320
+ const newLastUpdate = !currentFileInfo || newLastUpdateTime !== currentLastUpdateTime
321
+ ? { timestamp: newLastUpdateTime, author: runningAuthor }
322
+ : currentFileInfo.lastUpdate;
323
+ runningMap.set(relativeFile, {
324
+ creation: newCreation,
325
+ lastUpdate: newLastUpdate,
326
+ });
327
+ }
328
+ return runningMap;
329
+ }
330
+ //# sourceMappingURL=gitUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gitUtils.js","sourceRoot":"","sources":["../../src/vcs/gitUtils.ts"],"names":[],"mappings":"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"}