rittenhop-dev/versions/5.94.2/core/frontend/meta/asset-url.js

71 lines
2.1 KiB
JavaScript
Raw Normal View History

2024-09-23 19:40:12 -04:00
const crypto = require('crypto');
const config = require('../../shared/config');
const {blogIcon} = require('../../server/lib/image');
const urlUtils = require('../../shared/url-utils');
const {SafeString} = require('../services/handlebars');
/**
* Serve either uploaded favicon or default
* @return {string}
*/
function getFaviconUrl() {
return blogIcon.getIconUrl();
}
/**
* Prepare URL for an asset
* @param {string|SafeString} path the assets path
* @param {boolean} hasMinFile flag for the existence of a minified version for the asset
* @returns {string}
*/
function getAssetUrl(path, hasMinFile) {
path = path instanceof SafeString ? path.string : path;
// CASE: favicon - this is special path with its own functionality
if (path.match(/\/?favicon\.(ico|png)$/)) {
// @TODO, resolve this - we should only be resolving subdirectory and extension.
return getFaviconUrl();
}
// CASE: Build the output URL
// Add subdirectory...
let output = urlUtils.urlJoin(urlUtils.getSubdir(), '/');
// Optionally add /assets/
if (!path.match(/^public/) && !path.match(/^asset/)) {
output = urlUtils.urlJoin(output, 'assets/');
}
// replace ".foo" with ".min.foo" if configured
if (hasMinFile && config.get('useMinFiles') !== false) {
path = path.replace(/\.([^.]*)$/, '.min.$1');
}
// Add the path for the requested asset
output = urlUtils.urlJoin(output, path);
// Ensure we have an assetHash
// @TODO rework this!
if (!config.get('assetHash')) {
config.set('assetHash', (crypto.createHash('md5').update(Date.now().toString()).digest('hex')).substring(0, 10));
}
// if url has # make sure the hash is at th right place
let anchor;
if (path.match('#')) {
const index = output.indexOf('#');
anchor = output.substring(index);
output = output.slice(0, index);
}
// Finally add the asset hash to the output URL
output += '?v=' + config.get('assetHash');
if (anchor) {
output += anchor;
}
return output;
}
module.exports = getAssetUrl;