diff options
author | (quasar) nebula <qznebula@protonmail.com> | 2022-02-12 15:27:14 -0400 |
---|---|---|
committer | (quasar) nebula <qznebula@protonmail.com> | 2022-02-12 15:27:14 -0400 |
commit | cfa02cb03a363c46408db7f0ec54bd3a7e4ad018 (patch) | |
tree | 9dbd2f26cc200838717404163037953924f3e194 /src | |
parent | f028105cbb268af2c3039215557ed6f531c688d4 (diff) |
brb gonna make these into one file now
Diffstat (limited to 'src')
-rw-r--r-- | src/thing/album.js | 16 | ||||
-rw-r--r-- | src/thing/thing.js | 30 | ||||
-rw-r--r-- | src/thing/track.js | 20 | ||||
-rwxr-xr-x | src/upd8.js | 7 |
4 files changed, 59 insertions, 14 deletions
diff --git a/src/thing/album.js b/src/thing/album.js index 426796b0..ba75352d 100644 --- a/src/thing/album.js +++ b/src/thing/album.js @@ -20,6 +20,8 @@ import { validateReferenceList, } from './validators.js'; +import Artist from './artist.js'; +import ArtTag from './art-tag.js'; import Track from './track.js'; import find from '../util/find.js'; @@ -75,7 +77,7 @@ export class TrackGroup extends CacheableObject { : []) ) } - } + }, }; } @@ -238,13 +240,17 @@ export default class Album extends Thing { // Update only - trackData: { - flags: {update: true}, - update: {validate: validateArrayItems(x => x instanceof Track)} - }, + artistData: Thing.genWikiDataProperty(Artist), + trackData: Thing.genWikiDataProperty(Track), // Expose only + // Previously known as: (album).artists + artistContribs: { + flags: {expose: true}, + expose: Thing.genContribsExpose('artistContribsByRef') + }, + tracks: { flags: {expose: true}, diff --git a/src/thing/thing.js b/src/thing/thing.js index 54a278d1..2d6def62 100644 --- a/src/thing/thing.js +++ b/src/thing/thing.js @@ -3,7 +3,12 @@ import CacheableObject from './cacheable-object.js'; +import { + validateArrayItems, +} from './validators.js'; + import { getKebabCase } from '../util/wiki-data.js'; +import find from '../util/find.js'; export default class Thing extends CacheableObject { static referenceType = Symbol('Thing.referenceType'); @@ -20,6 +25,31 @@ export default class Thing extends CacheableObject { } }; + static genContribsExpose(contribsByRefProperty) { + return { + dependencies: ['artistData', contribsByRefProperty], + compute: ({ artistData, [contribsByRefProperty]: contribsByRef }) => ( + (contribsByRef && artistData + ? (contribsByRef + .map(({ who: ref, what }) => ({ + who: find.artist(ref, {wikiData: {artistData}}), + what + })) + .filter(({ who }) => who)) + : []) + ) + }; + } + + static genWikiDataProperty(thingClass) { + return { + flags: {update: true}, + update: { + validate: validateArrayItems(x => x instanceof thingClass) + } + }; + } + static getReference(thing) { if (!thing.constructor[Thing.referenceType]) throw TypeError(`Passed Thing is ${thing.constructor.name}, which provides no [Thing.referenceType]`); diff --git a/src/thing/track.js b/src/thing/track.js index d0e88acf..3edabc92 100644 --- a/src/thing/track.js +++ b/src/thing/track.js @@ -17,6 +17,7 @@ import { } from './validators.js'; import Album from './album.js'; +import Artist from './artist.js'; import ArtTag from './art-tag.js'; import find from '../util/find.js'; @@ -100,6 +101,7 @@ export default class Track extends Thing { update: {validate: validateReferenceList('tag')} }, + // Previously known as: (track).aka originalReleaseTrackByRef: { flags: {update: true, expose: true}, update: {validate: validateReference('track')} @@ -117,15 +119,9 @@ export default class Track extends Thing { // Update only - albumData: { - flags: {update: true}, - update: {validate: validateArrayItems(x => x instanceof Album)} - }, - - artTagData: { - flags: {update: true}, - update: {validate: validateArrayItems(x => x instanceof ArtTag)} - }, + albumData: Thing.genWikiDataProperty(Album), + artistData: Thing.genWikiDataProperty(Artist), + artTagData: Thing.genWikiDataProperty(ArtTag), // Expose only @@ -152,6 +148,12 @@ export default class Track extends Thing { } }, + // Previously known as: (track).artists + artistContribs: { + flags: {expose: true}, + expose: Thing.genContribsExpose('artistContribsByRef') + }, + artTags: { flags: {expose: true}, diff --git a/src/upd8.js b/src/upd8.js index e82dff7e..2aa4eb29 100755 --- a/src/upd8.js +++ b/src/upd8.js @@ -2750,6 +2750,7 @@ async function main() { // result (many of which are required for page HTML generation). for (const album of WD.albumData) { + album.artistData = WD.artistData; album.trackData = WD.trackData; for (const trackGroup of album.trackGroups) { @@ -2759,6 +2760,7 @@ async function main() { for (const track of WD.trackData) { track.albumData = WD.albumData; + track.artistData = WD.artistData; track.artTagData = WD.artTagData; } @@ -2771,6 +2773,11 @@ async function main() { console.log(WD.trackData[0].name, WD.trackData[0].album.name); console.log(WD.albumData[0].name, WD.albumData[0].tracks[0].name); + console.log(WD.trackData[0].artistContribs[0].who.name); + console.log( + (WD.albumData + .find(album => album.name === 'Alternia') + .artistContribs[0].who.name)); return; |