ripunzel/src/interpolate.js

83 lines
3.0 KiB
JavaScript
Raw Normal View History

'use strict';
const config = require('config');
const path = require('path');
const url = require('url');
const dateFns = require('date-fns');
const mime = require('mime-types');
function interpolate(pattern, user, post, item, strip = true, dateFormat = config.library.dateFormat) {
2024-09-11 03:16:53 +00:00
const vars = {
$base: config.library.base,
2024-09-11 03:16:53 +00:00
};
if (user) {
Object.assign(vars, {
$user: user.name,
$username: user.name,
$userId: user.id,
$userCreated: dateFns.format(user.created, dateFormat),
$userVerified: user.verified ? config.library.booleans.verified : '',
$userVerifiedEmail: user.verifiedEmail ? config.library.booleans.verifiedEmail : '',
$userGold: user.gold ? config.library.booleans.gold : '',
});
2024-09-11 03:16:53 +00:00
if (user.profile) {
2024-09-11 03:16:53 +00:00
Object.assign(vars, {
$profileId: user.profile.id,
$profileTitle: user.profile.title,
$profileDescription: user.profile.description,
$profileOver18: user.profile.over18 ? config.library.booleans.over18 : '',
2024-09-11 03:16:53 +00:00
});
}
}
if (post) {
Object.assign(vars, {
$postId: post.id,
$postTitle: (post.title || '').slice(0, config.library.titleLength),
$postUser: post.user,
$postDate: dateFns.format(post.datetime, dateFormat),
$postIndex: post.index + config.library.indexOffset,
$postHash: post.hash,
$url: post.url,
2024-09-11 03:16:53 +00:00
$subreddit: post.subreddit,
$hostLabel: post.host.label,
$hostId: post.host.id,
});
if (post.content.album) {
Object.assign(vars, {
$albumId: post.content.album.id,
$albumTitle: (post.content.album.title || '').slice(0, config.library.titleLength),
$albumDescription: post.content.album.description,
$albumDate: dateFns.format(post.content.album.datetime, dateFormat),
});
}
}
if (item) {
Object.assign(vars, {
$itemId: item.id,
$itemTitle: (item.title || '').slice(0, config.library.titleLength),
$itemDescription: item.description,
$itemDate: dateFns.format(item.datetime, dateFormat),
$itemIndex: item.index + config.library.indexOffset,
$extracted: item.extracted ? config.library.booleans.extracted : '',
$preview: item.preview ? config.library.booleans.preview : '',
$ext: item.type ? `.${mime.extension(item.type)}` : path.extname(url.parse(item.url).pathname),
});
}
return Object.entries(vars).reduce((acc, [key, value]) => {
// substitute slashes for filesystem compatability
if (key !== '$base' && strip) {
2024-09-11 03:16:53 +00:00
value = (value || '').toString().replace(/\//g, config.library.slashSubstitute);
}
return acc.replace(key, value);
}, pattern);
}
module.exports = interpolate;