UNPKG

thegamesdb

Version:

TheGamesDB.net API wrapper

112 lines (98 loc) 4.14 kB
'use strict'; module.exports = function (metadata) { var similarGamesList = function similarGamesList(similar) { return similar.Game.map(function (game) { return { id: parseInt(game.id[0]), platformId: parseInt(game.PlatformId[0]) }; }); }; /* ************************************************************** * * Images and image lists reducers * ************************************************************** */ var originalImages = function originalImages(type, images) { return images.map(function (image) { return Object.assign({ type: type }, // URL { url: image._ ? metadata.staticUrl + '/' + image._ : metadata.staticUrl + '/' + image }, // Image attributes image['$'] ? Object.assign({}, image['$'].width ? { width: parseInt(image['$'].width) } : null, image['$'].height ? { height: parseInt(image['$'].height) } : null, image['$'].side ? { side: image['$'].side } : null) : null); }); }; var userImages = function userImages(type, images) { return images.map(function (image) { return Object.assign({ type: type }, image.original ? originalImages(type, image.original)[0] : null, image.thumb ? { thumb: metadata.staticUrl + '/' + image.thumb[0] } : null); }); }; var imagesList = function imagesList(images) { return Object.keys(images).map(function (type) { if (type !== 'fanart' && type !== 'screenshot') { return originalImages(type, images[type]); } else { return userImages(type, images[type]); } }).reduce(function (images, acc) { return acc.concat(images); }); }; /* ************************************************************** * * Games and game lists reducers * ************************************************************** */ var gameDetail = function gameDetail(game) { return Object.assign(metadata.gameDetail.reduce(function (g, field) { if (game[field.name]) { var value = field.parser ? field.parser(game[field.name][0]) : game[field.name][0]; field.rename ? g[field.rename] = value : g[field.name] = value; } return g; }, {}), game.Similar ? { similar: similarGamesList(game.Similar[0]) } : null, game.Images ? { images: imagesList(game.Images[0]) } : null); }; var gameList = function gameList(games) { return games.map(function (game) { return metadata.gameList.reduce(function (g, field) { if (game[field.name]) { var value = field.parser ? field.parser(game[field.name][0]) : game[field.name][0]; field.rename ? g[field.rename] = value : g[field.name] = value; } return g; }, {}); }); }; var gameArtList = function gameArtList(images) { return images.length ? imagesList(images[0]) : []; }; /* ************************************************************** * * Platforms and platform lists reducers * ************************************************************** */ var platformDetail = function platformDetail(platform) { return Object.assign(metadata.platformDetail.reduce(function (p, field) { if (platform[field.name]) { var value = field.parser ? field.parser(platform[field.name][0]) : platform[field.name][0]; field.rename ? p[field.rename] = value : p[field.name] = value; } return p; }, {}), platform.Images ? { images: imagesList(platform.Images[0]) } : null); }; var platformList = function platformList(platforms) { return platforms.map(function (platform) { return metadata.platformList.reduce(function (p, field) { if (platform[field.name]) { var value = field.parser ? field.parser(platform[field.name][0]) : platform[field.name][0]; field.rename ? p[field.rename] = value : p[field.name] = value; } return p; }, {}); }); }; return { similarGamesList: similarGamesList, imagesList: imagesList, gameDetail: gameDetail, gameList: gameList, gameArtList: gameArtList, platformDetail: platformDetail, platformList: platformList }; };