diff options
Diffstat (limited to 'includes/external/addressbook/node_modules/open-graph-scraper/dist/lib/media.js')
-rw-r--r-- | includes/external/addressbook/node_modules/open-graph-scraper/dist/lib/media.js | 163 |
1 files changed, 163 insertions, 0 deletions
diff --git a/includes/external/addressbook/node_modules/open-graph-scraper/dist/lib/media.js b/includes/external/addressbook/node_modules/open-graph-scraper/dist/lib/media.js new file mode 100644 index 0000000..c2dc885 --- /dev/null +++ b/includes/external/addressbook/node_modules/open-graph-scraper/dist/lib/media.js @@ -0,0 +1,163 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.mediaSetup = void 0; +const fields_1 = require("./fields"); +const mediaMapperTwitterImage = (item) => ({ + alt: item[3], + height: item[2], + url: item[0], + width: item[1], +}); +const mediaMapperTwitterPlayer = (item) => ({ + height: item[2], + stream: item[3], + url: item[0], + width: item[1], +}); +const mediaMapperMusicSong = (item) => ({ + disc: item[2], + track: item[1], + url: item[0], +}); +const mediaMapper = (item) => ({ + height: item[2], + type: item[3], + url: item[0], + width: item[1], +}); +const mediaSorter = (a, b) => { + if (!(a.url && b.url)) { + return 0; + } + const aRes = a.url.match(/\.(\w{2,5})$/); + const aExt = (aRes && aRes[1].toLowerCase()) || null; + const bRes = b.url.match(/\.(\w{2,5})$/); + const bExt = (bRes && bRes[1].toLowerCase()) || null; + if (aExt === 'gif' && bExt !== 'gif') { + return -1; + } + if (aExt !== 'gif' && bExt === 'gif') { + return 1; + } + return Math.max(b.width, b.height) - Math.max(a.width, a.height); +}; +const mediaSorterMusicSong = (a, b) => { + if (!(a.track && b.track)) { + return 0; + } + if (a.disc > b.disc) { + return 1; + } + if (a.disc < b.disc) { + return -1; + } + return a.track - b.track; +}; +// lodash zip replacement +const zip = (array, ...args) => { + if (array === undefined) + return []; + return array + .map((value, idx) => [value, ...args.map((arr) => arr[idx])]); +}; +/** + * formats the multiple media values + * + * @param {object} ogObject - the current ogObject + * @param {object} options - options for ogs + * @return {object} object with ogs results with updated media values + * + */ +function mediaSetup(ogObject, options) { + // sets ogImage image/width/height/type to null if one these exists + if (ogObject.ogImage || ogObject.ogImageWidth || ogObject.ogImageHeight || ogObject.ogImageType) { + ogObject.ogImage = ogObject.ogImage ? ogObject.ogImage : [null]; + ogObject.ogImageWidth = ogObject.ogImageWidth ? ogObject.ogImageWidth : [null]; + ogObject.ogImageHeight = ogObject.ogImageHeight ? ogObject.ogImageHeight : [null]; + ogObject.ogImageType = ogObject.ogImageType ? ogObject.ogImageType : [null]; + } + // format images + const ogImages = zip(ogObject.ogImage, ogObject.ogImageWidth, ogObject.ogImageHeight, ogObject.ogImageType) + .map(mediaMapper) + .sort(mediaSorter); + // sets ogVideo video/width/height/type to null if one these exists + if (ogObject.ogVideo || ogObject.ogVideoWidth || ogObject.ogVideoHeight || ogObject.ogVideoType) { + ogObject.ogVideo = ogObject.ogVideo ? ogObject.ogVideo : [null]; + ogObject.ogVideoWidth = ogObject.ogVideoWidth ? ogObject.ogVideoWidth : [null]; + ogObject.ogVideoHeight = ogObject.ogVideoHeight ? ogObject.ogVideoHeight : [null]; + ogObject.ogVideoType = ogObject.ogVideoType ? ogObject.ogVideoType : [null]; + } + // format videos + const ogVideos = zip(ogObject.ogVideo, ogObject.ogVideoWidth, ogObject.ogVideoHeight, ogObject.ogVideoType) + .map(mediaMapper) + .sort(mediaSorter); + // sets twitter image image/width/height/type to null if one these exists + if (ogObject.twitterImageSrc + || ogObject.twitterImage + || ogObject.twitterImageWidth + || ogObject.twitterImageHeight + || ogObject.twitterImageAlt) { + ogObject.twitterImageSrc = ogObject.twitterImageSrc ? ogObject.twitterImageSrc : [null]; + ogObject.twitterImage = ogObject.twitterImage ? ogObject.twitterImage : ogObject.twitterImageSrc; // deafult to twitterImageSrc + ogObject.twitterImageWidth = ogObject.twitterImageWidth ? ogObject.twitterImageWidth : [null]; + ogObject.twitterImageHeight = ogObject.twitterImageHeight ? ogObject.twitterImageHeight : [null]; + ogObject.twitterImageAlt = ogObject.twitterImageAlt ? ogObject.twitterImageAlt : [null]; + } + // format twitter images + const twitterImages = zip(ogObject.twitterImage, ogObject.twitterImageWidth, ogObject.twitterImageHeight, ogObject.twitterImageAlt).map(mediaMapperTwitterImage).sort(mediaSorter); + // sets twitter player/width/height/stream to null if one these exists + if (ogObject.twitterPlayer + || ogObject.twitterPlayerWidth + || ogObject.twitterPlayerHeight + || ogObject.twitterPlayerStream) { + ogObject.twitterPlayer = ogObject.twitterPlayer ? ogObject.twitterPlayer : [null]; + ogObject.twitterPlayerWidth = ogObject.twitterPlayerWidth ? ogObject.twitterPlayerWidth : [null]; + ogObject.twitterPlayerHeight = ogObject.twitterPlayerHeight ? ogObject.twitterPlayerHeight : [null]; + ogObject.twitterPlayerStream = ogObject.twitterPlayerStream ? ogObject.twitterPlayerStream : [null]; + } + // format twitter player + const twitterPlayers = zip(ogObject.twitterPlayer, ogObject.twitterPlayerWidth, ogObject.twitterPlayerHeight, ogObject.twitterPlayerStream).map(mediaMapperTwitterPlayer) + .sort(mediaSorter); + // sets music song/songTrack/songDisc to null if one these exists + if (ogObject.musicSong || ogObject.musicSongTrack || ogObject.musicSongDisc) { + ogObject.musicSong = ogObject.musicSong ? ogObject.musicSong : [null]; + ogObject.musicSongTrack = ogObject.musicSongTrack ? ogObject.musicSongTrack : [null]; + ogObject.musicSongDisc = ogObject.musicSongDisc ? ogObject.musicSongDisc : [null]; + } + // format music songs + const musicSongs = zip(ogObject.musicSong, ogObject.musicSongTrack, ogObject.musicSongDisc) + .map(mediaMapperMusicSong) + .sort(mediaSorterMusicSong); + // remove old values since everything will live under the main property + fields_1.default.filter((item) => (item.multiple && item.fieldName && item.fieldName.match('(ogImage|ogVideo|twitter|musicSong).*'))) + .forEach((item) => { + delete ogObject[item.fieldName]; + }); + if (options.allMedia) { + if (ogImages.length) + ogObject.ogImage = ogImages; + if (ogVideos.length) + ogObject.ogVideo = ogVideos; + if (twitterImages.length) + ogObject.twitterImage = twitterImages; + if (twitterPlayers.length) + ogObject.twitterPlayer = twitterPlayers; + if (musicSongs.length) + ogObject.musicSong = musicSongs; + } + else { + if (ogImages.length) + [ogObject.ogImage] = ogImages; + if (ogVideos.length) + [ogObject.ogVideo] = ogVideos; + if (twitterImages.length) + [ogObject.twitterImage] = twitterImages; + if (twitterPlayers.length) + [ogObject.twitterPlayer] = twitterPlayers; + if (musicSongs.length) + [ogObject.musicSong] = musicSongs; + } + return ogObject; +} +exports.mediaSetup = mediaSetup; +exports.default = mediaSetup; |