await-mtime.js 1.13 KB
const fs = require('fs').promises

// Returns a Promise<number> that computes the most recent
// modification time for any file inside a directory
async function modifiedTime(path) {
  // First, we wait for the fs.stat() Promise
  const stats = await fs.stat(path)
  // Use the modification time of the file or directory itself
  let latestTime = stats.mtimeMs
  // If this is a directory, check all files inside for later modified times
  if (stats.isDirectory()) {
    // Wait to get a list of all files/subdirectories in the directory
    const files = await fs.readdir(path)
    // Then get the modified time of each file/subdirectory
    for (const file of files) {
      const fileModifiedTime = await modifiedTime(path + '/' + file)
      // update latestTime if the modification time is later
      latestTime = Math.max(latestTime, fileModifiedTime)
    }
  }
  // Return the latest modification time
  return latestTime
}

// Even though we return a number from modifiedTime, the number
// is wrapped in a Promise because it is an async function
modifiedTime('.').then(mTime => {
  console.log(`Most recent modification: ${new Date(mTime)}`)
})