33 lines
991 B
JavaScript
33 lines
991 B
JavaScript
![]() |
const path = require('path')
|
||
|
const spawn = require('cross-spawn')
|
||
|
|
||
|
module.exports = (options = {}, context) => ({
|
||
|
extendPageData ($page) {
|
||
|
const { transformer, dateOptions } = options
|
||
|
const timestamp = getGitLastUpdatedTimeStamp($page._filePath)
|
||
|
const $lang = $page._computed.$lang
|
||
|
if (timestamp) {
|
||
|
const lastUpdated = typeof transformer === 'function'
|
||
|
? transformer(timestamp, $lang)
|
||
|
: defaultTransformer(timestamp, $lang, dateOptions)
|
||
|
$page.lastUpdated = lastUpdated
|
||
|
}
|
||
|
}
|
||
|
})
|
||
|
|
||
|
function defaultTransformer (timestamp, lang, dateOptions) {
|
||
|
return new Date(timestamp).toLocaleString(lang, dateOptions)
|
||
|
}
|
||
|
|
||
|
function getGitLastUpdatedTimeStamp (filePath) {
|
||
|
let lastUpdated
|
||
|
try {
|
||
|
lastUpdated = parseInt(spawn.sync(
|
||
|
'git',
|
||
|
['log', '-1', '--format=%at', path.basename(filePath)],
|
||
|
{ cwd: path.dirname(filePath) }
|
||
|
).stdout.toString('utf-8')) * 1000
|
||
|
} catch (e) { /* do not handle for now */ }
|
||
|
return lastUpdated
|
||
|
}
|