2021-04-16 04:34:29 +00:00
|
|
|
|
import GraphQL from 'graphql';
|
|
|
|
|
|
import { Node } from './node.js';
|
|
|
|
|
|
import { Entity } from './entity.js';
|
|
|
|
|
|
import { DateType } from './scalars.js';
|
|
|
|
|
|
import { ReleaseGroupType } from './enums.js';
|
2016-08-08 07:54:06 +00:00
|
|
|
|
import {
|
2016-08-20 05:59:32 +00:00
|
|
|
|
id,
|
2016-08-31 06:33:29 +00:00
|
|
|
|
mbid,
|
2016-08-20 05:59:32 +00:00
|
|
|
|
title,
|
|
|
|
|
|
disambiguation,
|
2016-11-28 13:49:04 +00:00
|
|
|
|
fieldWithID,
|
2021-04-16 04:34:29 +00:00
|
|
|
|
releaseGroupType,
|
2016-12-02 08:21:10 +00:00
|
|
|
|
resolveHyphenated,
|
2021-04-16 04:34:29 +00:00
|
|
|
|
connectionWithExtras,
|
|
|
|
|
|
linkedQuery,
|
|
|
|
|
|
} from './helpers.js';
|
|
|
|
|
|
import { aliases } from './alias.js';
|
|
|
|
|
|
import { artistCredit, artistCredits } from './artist-credit.js';
|
|
|
|
|
|
import { artists } from './artist.js';
|
|
|
|
|
|
import { releases } from './release.js';
|
|
|
|
|
|
import { relationships } from './relationship.js';
|
|
|
|
|
|
import { collections } from './collection.js';
|
|
|
|
|
|
import { rating } from './rating.js';
|
|
|
|
|
|
import { tags } from './tag.js';
|
2016-08-08 07:54:06 +00:00
|
|
|
|
|
2021-04-16 04:34:29 +00:00
|
|
|
|
const { GraphQLObjectType, GraphQLList } = GraphQL;
|
|
|
|
|
|
|
|
|
|
|
|
export const ReleaseGroup = new GraphQLObjectType({
|
2016-08-08 07:54:06 +00:00
|
|
|
|
name: 'ReleaseGroup',
|
2016-11-26 01:38:32 +00:00
|
|
|
|
description: `A [release group](https://musicbrainz.org/doc/Release_Group) is
|
|
|
|
|
|
used to group several different releases into a single logical entity. Every
|
|
|
|
|
|
release belongs to one, and only one release group.
|
|
|
|
|
|
|
|
|
|
|
|
Both release groups and releases are “albums” in a general sense, but with an
|
|
|
|
|
|
important difference: a release is something you can buy as media such as a CD
|
|
|
|
|
|
or a vinyl record, while a release group embraces the overall concept of an
|
|
|
|
|
|
album – it doesn’t matter how many CDs or editions/versions it had.`,
|
2016-08-31 06:33:29 +00:00
|
|
|
|
interfaces: () => [Node, Entity],
|
2016-08-08 07:54:06 +00:00
|
|
|
|
fields: () => ({
|
2016-08-20 05:59:32 +00:00
|
|
|
|
id,
|
2016-08-31 06:33:29 +00:00
|
|
|
|
mbid,
|
2016-08-20 05:59:32 +00:00
|
|
|
|
title,
|
|
|
|
|
|
disambiguation,
|
2016-11-28 13:49:04 +00:00
|
|
|
|
aliases,
|
2016-08-20 05:59:32 +00:00
|
|
|
|
artistCredit,
|
2016-12-11 20:32:58 +00:00
|
|
|
|
artistCredits,
|
2016-11-26 01:38:32 +00:00
|
|
|
|
firstReleaseDate: {
|
|
|
|
|
|
type: DateType,
|
|
|
|
|
|
description: 'The date of the earliest release in the group.',
|
2021-04-16 04:34:29 +00:00
|
|
|
|
resolve: resolveHyphenated,
|
2016-11-26 01:38:32 +00:00
|
|
|
|
},
|
|
|
|
|
|
...fieldWithID('primaryType', {
|
|
|
|
|
|
type: ReleaseGroupType,
|
|
|
|
|
|
description: `The [type](https://musicbrainz.org/doc/Release_Group/Type)
|
|
|
|
|
|
of a release group describes what kind of releases the release group represents,
|
|
|
|
|
|
e.g. album, single, soundtrack, compilation, etc. A release group can have a
|
2021-04-16 04:34:29 +00:00
|
|
|
|
“main” type and an unspecified number of additional types.`,
|
2016-11-26 01:38:32 +00:00
|
|
|
|
}),
|
|
|
|
|
|
...fieldWithID('secondaryTypes', {
|
|
|
|
|
|
type: new GraphQLList(ReleaseGroupType),
|
|
|
|
|
|
description: `Additional [types](https://musicbrainz.org/doc/Release_Group/Type)
|
2021-04-16 04:34:29 +00:00
|
|
|
|
that apply to this release group.`,
|
2016-11-26 01:38:32 +00:00
|
|
|
|
}),
|
2016-08-20 05:59:32 +00:00
|
|
|
|
artists,
|
|
|
|
|
|
releases,
|
2016-11-28 13:49:04 +00:00
|
|
|
|
relationships,
|
2016-12-12 08:34:26 +00:00
|
|
|
|
collections,
|
2016-12-14 04:50:38 +00:00
|
|
|
|
rating,
|
2021-04-16 04:34:29 +00:00
|
|
|
|
tags,
|
|
|
|
|
|
}),
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
export const ReleaseGroupConnection = connectionWithExtras(ReleaseGroup);
|
2016-08-20 05:59:32 +00:00
|
|
|
|
|
2021-04-16 04:34:29 +00:00
|
|
|
|
export const releaseGroups = linkedQuery(ReleaseGroupConnection, {
|
|
|
|
|
|
args: {
|
|
|
|
|
|
type: releaseGroupType,
|
|
|
|
|
|
},
|
|
|
|
|
|
});
|