diff --git a/docusaurus.config.js b/docusaurus.config.js
index 2872b4008..4ae4dc09f 100644
--- a/docusaurus.config.js
+++ b/docusaurus.config.js
@@ -329,6 +329,7 @@ const config = {
},
};
},
+ [require.resolve('./src/plugins/git-commit-info'), {}],
],
};
diff --git a/package-lock.json b/package-lock.json
index b1c409e87..5d117f498 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -18,6 +18,7 @@
"@node-rs/jieba": "^1.10.3",
"@svgr/webpack": "^6.3.1",
"autoprefixer": "^10.4.14",
+ "caniuse-lite": "^1.0.30001726",
"classnames": "^2.2.6",
"clsx": "^1.1.1",
"file-loader": "^6.2.0",
@@ -1847,25 +1848,6 @@
"node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
}
},
- "node_modules/@babel/plugin-transform-runtime/node_modules/caniuse-lite": {
- "version": "1.0.30001546",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001546.tgz",
- "integrity": "sha512-zvtSJwuQFpewSyRrI3AsftF6rM0X80mZkChIt1spBGEvRglCrjTniXvinc8JKRoqTwXAgvqTImaN9igfSMtUBw==",
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/browserslist"
- },
- {
- "type": "tidelift",
- "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
- },
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ]
- },
"node_modules/@babel/plugin-transform-runtime/node_modules/core-js-compat": {
"version": "3.33.0",
"resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.33.0.tgz",
@@ -5664,9 +5646,9 @@
}
},
"node_modules/caniuse-lite": {
- "version": "1.0.30001514",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001514.tgz",
- "integrity": "sha512-ENcIpYBmwAAOm/V2cXgM7rZUrKKaqisZl4ZAI520FIkqGXUxJjmaIssbRW5HVVR5tyV6ygTLIm15aU8LUmQSaQ==",
+ "version": "1.0.30001726",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001726.tgz",
+ "integrity": "sha512-VQAUIUzBiZ/UnlM28fSp2CRF3ivUn1BWEvxMcVTNwpw91Py1pGbPIyIKtd+tzct9C3ouceCVdGAXxZOpZAsgdw==",
"funding": [
{
"type": "opencollective",
@@ -5680,7 +5662,8 @@
"type": "github",
"url": "https://github.com/sponsors/ai"
}
- ]
+ ],
+ "license": "CC-BY-4.0"
},
"node_modules/ccount": {
"version": "1.1.0",
diff --git a/package.json b/package.json
index 555f01ab1..a6115c65c 100644
--- a/package.json
+++ b/package.json
@@ -25,6 +25,7 @@
"@node-rs/jieba": "^1.10.3",
"@svgr/webpack": "^6.3.1",
"autoprefixer": "^10.4.14",
+ "caniuse-lite": "^1.0.30001726",
"classnames": "^2.2.6",
"clsx": "^1.1.1",
"file-loader": "^6.2.0",
diff --git a/src/plugins/git-commit-info/index.js b/src/plugins/git-commit-info/index.js
new file mode 100644
index 000000000..0180740ae
--- /dev/null
+++ b/src/plugins/git-commit-info/index.js
@@ -0,0 +1,32 @@
+const { exec } = require('child_process');
+
+function getLastCommitHashAsync(filePath) {
+ return new Promise((resolve) => {
+ exec(`git log -n 1 --pretty=format:%h -- "${filePath}"`, { encoding: 'utf8' }, (err, stdout) => {
+ if (err) return resolve(null);
+ resolve(stdout.trim());
+ });
+ });
+}
+
+console.log('[git-commit-info] Plugin loaded');
+
+module.exports = function (context, options) {
+ return {
+ name: 'docusaurus-plugin-git-commit-info',
+ async extendMarkdownPageData(mdData) {
+ console.log('[git-commit-info] mdData:', mdData);
+ console.log('[git-commit-info] filePath:', mdData.filePath);
+ if (mdData.filePath) {
+ const commitHash = await getLastCommitHashAsync(mdData.filePath);
+ console.log('[git-commit-info] commitHash for', mdData.filePath, ':', commitHash);
+ if (commitHash) {
+ mdData.frontMatter.lastUpdatedCommit = commitHash;
+ mdData.metadata = mdData.metadata || {};
+ mdData.metadata.lastUpdatedCommit = commitHash;
+ }
+ }
+ return mdData;
+ },
+ };
+};
\ No newline at end of file
diff --git a/src/theme/DocItem/index.js b/src/theme/DocItem/index.js
new file mode 100644
index 000000000..bc85e32ac
--- /dev/null
+++ b/src/theme/DocItem/index.js
@@ -0,0 +1,27 @@
+import React from 'react';
+import OriginalDocItem from '@theme-original/DocItem';
+import { useDoc } from '@docusaurus/theme-common';
+
+export default function DocItem(props) {
+ const { metadata } = useDoc();
+ const commit = metadata?.lastUpdatedCommit;
+
+ return (
+ <>
+
{commit}
+