···161162 }
163 }
164+165+ ["artists"] {
166+ type = "object"
167+ properties {
168+ ["mbid"] = new StringType {
169+ type = "string"
170+ description = "The MusicBrainz Identifier (MBID) of the artist."
171+ }
172+ ["name"] = new StringType {
173+ type = "string"
174+ description = "The name of the artist."
175+ minLength = 1
176+ maxLength = 256
177+ }
178+ }
179+ }
180}
+10
apps/api/pkl/defs/scrobble/scrobble.pkl
···25 maxLength = 256
26 }
27000000000028 ["albumArtist"] = new StringType {
29 type = "string"
30 description = "The album artist of the song."
···25 maxLength = 256
26 }
2728+29+30+ ["artists"] = new Array {
31+ type = "array"
32+ description = "The artists of the song with MusicBrainz IDs."
33+ items = new Ref {
34+ ref = "app.rocksky.artist.defs#artistMbid"
35+ }
36+ }
37+38 ["albumArtist"] = new StringType {
39 type = "string"
40 description = "The album artist of the song."
+8
apps/api/pkl/defs/song/song.pkl
···25 maxLength = 256
26 }
270000000028 ["albumArtist"] = new StringType {
29 type = "string"
30 description = "The album artist of the song."
···25 maxLength = 256
26 }
2728+ ["artists"] = new Array {
29+ type = "array"
30+ description = "The artists of the song with MusicBrainz IDs."
31+ items = new Ref {
32+ ref = "app.rocksky.artist.defs#artistMbid"
33+ }
34+ }
35+36 ["albumArtist"] = new StringType {
37 type = "string"
38 description = "The album artist of the song."
+31
apps/api/src/lexicon/lexicons.ts
···1720 },
1721 },
1722 },
0000000000000001723 },
1724 },
1725 AppRockskyArtistGetArtistAlbums: {
···3769 minLength: 1,
3770 maxLength: 256,
3771 },
000000003772 albumArtist: {
3773 type: "string",
3774 description: "The album artist of the song.",
···4675 description: "The artist of the song.",
4676 minLength: 1,
4677 maxLength: 256,
000000004678 },
4679 albumArtist: {
4680 type: "string",
···1720 },
1721 },
1722 },
1723+ artists: {
1724+ type: "object",
1725+ properties: {
1726+ mbid: {
1727+ type: "string",
1728+ description: "The MusicBrainz Identifier (MBID) of the artist.",
1729+ },
1730+ name: {
1731+ type: "string",
1732+ description: "The name of the artist.",
1733+ minLength: 1,
1734+ maxLength: 256,
1735+ },
1736+ },
1737+ },
1738 },
1739 },
1740 AppRockskyArtistGetArtistAlbums: {
···3784 minLength: 1,
3785 maxLength: 256,
3786 },
3787+ artists: {
3788+ type: "array",
3789+ description: "The artists of the song with MusicBrainz IDs.",
3790+ items: {
3791+ type: "ref",
3792+ ref: "lex:app.rocksky.artist.defs#artistMbid",
3793+ },
3794+ },
3795 albumArtist: {
3796 type: "string",
3797 description: "The album artist of the song.",
···4698 description: "The artist of the song.",
4699 minLength: 1,
4700 maxLength: 256,
4701+ },
4702+ artists: {
4703+ type: "array",
4704+ description: "The artists of the song with MusicBrainz IDs.",
4705+ items: {
4706+ type: "ref",
4707+ ref: "lex:app.rocksky.artist.defs#artistMbid",
4708+ },
4709 },
4710 albumArtist: {
4711 type: "string",
···5import { lexicons } from "../../../lexicons";
6import { isObj, hasProp } from "../../../util";
7import { CID } from "multiformats/cid";
089export interface Record {
10 /** The title of the song. */
11 title: string;
12 /** The artist of the song. */
13 artist: string;
0014 /** The album artist of the song. */
15 albumArtist: string;
16 /** The album of the song. */
···5import { lexicons } from "../../../lexicons";
6import { isObj, hasProp } from "../../../util";
7import { CID } from "multiformats/cid";
8+import type * as AppRockskyArtistDefs from "./artist/defs";
910export interface Record {
11 /** The title of the song. */
12 title: string;
13 /** The artist of the song. */
14 artist: string;
15+ /** The artists of the song with MusicBrainz IDs. */
16+ artists?: AppRockskyArtistDefs.ArtistMbid[];
17 /** The album artist of the song. */
18 albumArtist: string;
19 /** The album of the song. */
+3
apps/api/src/lexicon/types/app/rocksky/song.ts
···5import { lexicons } from "../../../lexicons";
6import { isObj, hasProp } from "../../../util";
7import { CID } from "multiformats/cid";
089export interface Record {
10 /** The title of the song. */
11 title: string;
12 /** The artist of the song. */
13 artist: string;
0014 /** The album artist of the song. */
15 albumArtist: string;
16 /** The album of the song. */
···5import { lexicons } from "../../../lexicons";
6import { isObj, hasProp } from "../../../util";
7import { CID } from "multiformats/cid";
8+import type * as AppRockskyArtistDefs from "./artist/defs";
910export interface Record {
11 /** The title of the song. */
12 title: string;
13 /** The artist of the song. */
14 artist: string;
15+ /** The artists of the song with MusicBrainz IDs. */
16+ artists?: AppRockskyArtistDefs.ArtistMbid[];
17 /** The album artist of the song. */
18 albumArtist: string;
19 /** The album of the song. */