graphbrainz/src/types/artist.js
Brian Beck f095cd4de7
Modernize dependencies, syntax, imports (#93)
* wip: Modernize dependencies, syntax, imports

* Use final release of ava-nock v2

* Update Travis config

* Remove Node 13 from test matrix

* Replace errorClass with parseErrorMessage in subclasses

* define exports, apply updated lint rules

* Remove markdown eslint plugin

* Update README

* v9.0.0-beta.1

* Add gql tag to exports

* v9.0.0-beta.2

* Bump ava-nock, add test

* Update dataloader loadMany usage

* Add modules note to README

* Add retry option to got calls
2021-04-15 21:34:29 -07:00

98 lines
3 KiB
JavaScript

import GraphQL from 'graphql';
import { Node } from './node.js';
import { Entity } from './entity.js';
import { Area } from './area.js';
import { aliases } from './alias.js';
import { collections } from './collection.js';
import { lifeSpan } from './life-span.js';
import { recordings } from './recording.js';
import { releases } from './release.js';
import { releaseGroups } from './release-group.js';
import { works } from './work.js';
import { relationships } from './relationship.js';
import { rating } from './rating.js';
import { tags } from './tag.js';
import { IPI, ISNI } from './scalars.js';
import {
resolveWithFallback,
fieldWithID,
id,
mbid,
name,
sortName,
disambiguation,
connectionWithExtras,
linkedQuery,
} from './helpers.js';
const { GraphQLObjectType, GraphQLString, GraphQLList } = GraphQL;
export const Artist = new GraphQLObjectType({
name: 'Artist',
description: `An [artist](https://musicbrainz.org/doc/Artist) is generally a
musician, group of musicians, or other music professional (like a producer or
engineer). Occasionally, it can also be a non-musical person (like a
photographer, an illustrator, or a poet whose writings are set to music), or
even a fictional character.`,
interfaces: () => [Node, Entity],
fields: () => ({
id,
mbid,
name,
sortName,
disambiguation,
aliases,
country: {
type: GraphQLString,
description: `The country with which an artist is primarily identified. It
is often, but not always, its birth/formation country.`,
},
area: {
type: Area,
description: `The area with which an artist is primarily identified. It
is often, but not always, its birth/formation country.`,
},
beginArea: {
type: Area,
description: `The area in which an artist began their career (or where
they were born, if the artist is a person).`,
resolve: resolveWithFallback(['begin-area', 'begin_area']),
},
endArea: {
type: Area,
description: `The area in which an artist ended their career (or where
they died, if the artist is a person).`,
resolve: resolveWithFallback(['end-area', 'end_area']),
},
lifeSpan,
...fieldWithID('gender', {
description: `Whether a person or character identifies as male, female, or
neither. Groups do not have genders.`,
}),
...fieldWithID('type', {
description: 'Whether an artist is a person, a group, or something else.',
}),
ipis: {
type: new GraphQLList(IPI),
description: `List of [Interested Parties Information](https://musicbrainz.org/doc/IPI)
(IPI) codes for the artist.`,
},
isnis: {
type: new GraphQLList(ISNI),
description: `List of [International Standard Name Identifier](https://musicbrainz.org/doc/ISNI)
(ISNI) codes for the artist.`,
},
recordings,
releases,
releaseGroups,
works,
relationships,
collections,
rating,
tags,
}),
});
export const ArtistConnection = connectionWithExtras(Artist);
export const artists = linkedQuery(ArtistConnection);