thegamesdb
Version:
TheGamesDB.net API wrapper
112 lines (98 loc) • 4.14 kB
JavaScript
;
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
};
};