@xrengine/server-core
Version:
Shared components for XREngine server
39 lines (34 loc) • 1.03 kB
text/typescript
import * as fs from 'fs'
import { isEqual } from 'lodash'
import mime from 'mime-types'
import path from 'path'
export const getContentType = (url: string): string => {
return /\.ts$/.exec(url) ? 'application/octet-stream' : mime.lookup(url) || 'application/octet-stream'
}
export type DirectorySnapshot = {
modified: number
files: {
uri: string
modified: number
}[]
}
export function snapshot(directory: string): DirectorySnapshot {
let dirModified = 0
const files = fs.readdirSync(directory).map((file) => {
const uri = path.join(directory, file)
const stat = fs.statSync(uri)
const modified = stat.mtime.getDate()
dirModified = Math.max(dirModified, modified)
return { uri, modified }
})
return {
modified: dirModified,
files
}
}
export function delta(shot1: DirectorySnapshot, shot2: DirectorySnapshot): DirectorySnapshot {
return {
modified: shot2.modified,
files: shot2.files.filter((file) => !shot1.files.find((oldFile) => isEqual(file, oldFile)))
}
}