BattleSim/assets.coffee

49 lines
1.4 KiB
CoffeeScript

crypto = require 'crypto'
path = require 'path'
fs = require 'fs'
config = require('./server/config')
cachedVersion = null
cachedAssetHash = null
cachedFingerprints = {}
S3_ASSET_PREFIX = 'sim/'
get = (src, options = {}) ->
return src if config.IS_LOCAL
hash = options.fingerprint || getFingerprint(src)
extName = path.extname(src)
"#{S3_ASSET_PREFIX}#{src[0...-extName.length]}-#{hash}#{extName}"
getFingerprint = (src) ->
return cachedFingerprints[src] if cachedFingerprints[src]
contents = fs.readFileSync("public/#{src}")
fingerprint = crypto.createHash('md5').update(contents).digest('hex')
cachedFingerprints[src] = fingerprint
fingerprint
getAbsolute = (src, options = {}) ->
prefix = (if config.IS_LOCAL then "" else "//media.pokebattle.com")
"#{prefix}/#{get(src, options)}"
# Returns a MD5 hash representing the version of the assets.
getVersion = ->
return cachedVersion if cachedVersion
hash = crypto.createHash('md5')
for jsPath in fs.readdirSync('public/js')
hash = hash.update(fs.readFileSync("public/js/#{jsPath}"))
cachedVersion = hash.digest('hex')
cachedVersion
# Returns a hash of asset hashes, keyed by filename
asHash = ->
return cachedAssetHash if cachedAssetHash
cachedAssetHash = {}
for jsPath in fs.readdirSync('public/js')
jsPath = "js/#{jsPath}"
cachedAssetHash[jsPath] = getFingerprint(jsPath)
cachedAssetHash
module.exports = {S3_ASSET_PREFIX, get, asHash, getAbsolute, getVersion}