Files
cms.uldp.edu.vn/utils/shareLinkHelper.js
r2xrzh9q2z-lab d1b931d547 first commit
2026-02-02 11:07:09 +07:00

50 lines
1.6 KiB
JavaScript

/**
* Prefix FRONTEND_URL to social share links stored as relative paths.
* - Deep-clones the input and only modifies values under `social.shareLinks` that
* are strings starting with '/'.
* - Leaves absolute URLs (http/https) unchanged.
* - Normalizes to avoid double slashes between FRONTEND_URL and the path.
*
* @param {Object} data - object that may contain `social.shareLinks` (e.g., blog object)
* @returns {Object} - deep-cloned object with prefixed share links
*/
function addFrontendUrlToShareLinks(data) {
const FRONTEND_URL = (process.env.FRONTEND_URL || '').replace(/\/$/, '');
if (!data || typeof data !== 'object') return data;
// Deep clone to avoid mutating original
const cloned = JSON.parse(JSON.stringify(data));
try {
if (cloned.social && typeof cloned.social === 'object') {
const share = cloned.social.shareLinks;
if (share && typeof share === 'object') {
Object.keys(share).forEach(key => {
const val = share[key];
if (typeof val === 'string' && val.length > 0) {
// If already absolute URL, leave it
if (/^https?:\/\//i.test(val)) return;
// Only prefix relative paths that start with '/'
if (val.startsWith('/')) {
// Avoid double slashes
share[key] = FRONTEND_URL ? `${FRONTEND_URL}${val}` : val;
}
}
});
}
}
} catch (err) {
// In case of unexpected structure, return cloned original
console.error('addFrontendUrlToShareLinks error:', err);
return cloned;
}
return cloned;
}
module.exports = {
addFrontendUrlToShareLinks,
};