UNPKG

graphbrainz

Version:

A GraphQL schema, Express server, and middleware for querying the MusicBrainz.

81 lines (79 loc) 2.54 kB
async function resolveMediaWikiImages(source, args, { loaders }) { const isURL = (relation) => relation['target-type'] === 'url'; let rels = source.relations ? source.relations.filter(isURL) : []; if (!rels.length) { rels = await loaders.lookup .load([source._type, source.id, { inc: 'url-rels' }]) .then((source) => source.relations.filter(isURL)); } const pages = rels .filter((rel) => { if (rel.type === args.type) { const url = new URL(rel.url.resource); if (url.pathname.match(/^\/wiki\/(File|Image):/)) { return true; } } return false; }) .map((rel) => rel.url.resource); return Promise.all(pages.map((page) => loaders.mediaWiki.load(page))); } export default { MediaWikiImage: { descriptionURL: (imageInfo) => imageInfo.descriptionurl, canonicalTitle: (imageInfo) => imageInfo.canonicaltitle, objectName: (imageInfo) => { const data = imageInfo.extmetadata.ObjectName; return data ? data.value : null; }, descriptionHTML: (imageInfo) => { const data = imageInfo.extmetadata.ImageDescription; return data ? data.value : null; }, originalDateTimeHTML: (imageInfo) => { const data = imageInfo.extmetadata.DateTimeOriginal; return data ? data.value : null; }, categories: (imageInfo) => { const data = imageInfo.extmetadata.Categories; return data ? data.value.split('|') : []; }, artistHTML: (imageInfo) => { const data = imageInfo.extmetadata.Artist; return data ? data.value : null; }, creditHTML: (imageInfo) => { const data = imageInfo.extmetadata.Credit; return data ? data.value : null; }, licenseShortName: (imageInfo) => { const data = imageInfo.extmetadata.LicenseShortName; return data ? data.value : null; }, licenseURL: (imageInfo) => { const data = imageInfo.extmetadata.LicenseUrl; return data ? data.value : null; }, metadata: (imageInfo) => Object.keys(imageInfo.extmetadata).map((key) => { const data = imageInfo.extmetadata[key]; return { ...data, name: key }; }), }, MediaWikiImageMetadata: { value: (obj) => (obj.value == null ? obj.value : `${obj.value}`), }, Artist: { mediaWikiImages: resolveMediaWikiImages, }, Instrument: { mediaWikiImages: resolveMediaWikiImages, }, Label: { mediaWikiImages: resolveMediaWikiImages, }, Place: { mediaWikiImages: resolveMediaWikiImages, }, };