49 lines
1.4 KiB
CoffeeScript
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}
|