diff options
| author | (quasar) nebula <qznebula@protonmail.com> | 2025-11-27 21:09:29 -0400 |
|---|---|---|
| committer | (quasar) nebula <qznebula@protonmail.com> | 2025-11-27 21:09:29 -0400 |
| commit | f2161a3fe8ff9b574f53156d08ca7853427be8e4 (patch) | |
| tree | d79e117ddf638729c20c4e4deb847ae5a50d92ca /src/data | |
| parent | 861810685da73fa9fd6d4a1cb965155c61c99d11 (diff) | |
data: Track, Album: concise-retouch toplevel property descriptors
notably chopped exitWithoutArtwork and contribsPresent, replaced with new hasArtwork and more exitWithoutDependency
Diffstat (limited to 'src/data')
| -rw-r--r-- | src/data/composite/wiki-data/exitWithoutArtwork.js | 45 | ||||
| -rw-r--r-- | src/data/composite/wiki-data/index.js | 2 | ||||
| -rw-r--r-- | src/data/composite/wiki-properties/contribsPresent.js | 30 | ||||
| -rw-r--r-- | src/data/composite/wiki-properties/hasArtwork.js (renamed from src/data/composite/wiki-data/withHasArtwork.js) | 43 | ||||
| -rw-r--r-- | src/data/composite/wiki-properties/index.js | 2 | ||||
| -rw-r--r-- | src/data/things/album.js | 175 | ||||
| -rw-r--r-- | src/data/things/track.js | 357 |
7 files changed, 175 insertions, 479 deletions
diff --git a/src/data/composite/wiki-data/exitWithoutArtwork.js b/src/data/composite/wiki-data/exitWithoutArtwork.js deleted file mode 100644 index 8e799fda..00000000 --- a/src/data/composite/wiki-data/exitWithoutArtwork.js +++ /dev/null @@ -1,45 +0,0 @@ -import {input, templateCompositeFrom} from '#composite'; -import {isContributionList, isThing, strictArrayOf} from '#validators'; - -import {exitWithoutDependency} from '#composite/control-flow'; - -import withHasArtwork from './withHasArtwork.js'; - -export default templateCompositeFrom({ - annotation: `exitWithoutArtwork`, - - inputs: { - contribs: input({ - validate: isContributionList, - defaultValue: null, - }), - - artwork: input({ - validate: isThing, - defaultValue: null, - }), - - artworks: input({ - validate: strictArrayOf(isThing), - defaultValue: null, - }), - - value: input({ - defaultValue: null, - }), - }, - - steps: () => [ - withHasArtwork({ - contribs: input('contribs'), - artwork: input('artwork'), - artworks: input('artworks'), - }), - - exitWithoutDependency({ - dependency: '#hasArtwork', - mode: input.value('falsy'), - value: input('value'), - }), - ], -}); diff --git a/src/data/composite/wiki-data/index.js b/src/data/composite/wiki-data/index.js index beb6f3b8..41f34d21 100644 --- a/src/data/composite/wiki-data/index.js +++ b/src/data/composite/wiki-data/index.js @@ -7,7 +7,6 @@ export {default as constituteFrom} from './constituteFrom.js'; export {default as constituteOrContinue} from './constituteOrContinue.js'; export {default as exitWithoutContribs} from './exitWithoutContribs.js'; -export {default as exitWithoutArtwork} from './exitWithoutArtwork.js'; export {default as gobbleSoupyFind} from './gobbleSoupyFind.js'; export {default as gobbleSoupyReverse} from './gobbleSoupyReverse.js'; export {default as inputFindOptions} from './inputFindOptions.js'; @@ -21,7 +20,6 @@ export {default as withConstitutedArtwork} from './withConstitutedArtwork.js'; export {default as withContentNodes} from './withContentNodes.js'; export {default as withContributionListSums} from './withContributionListSums.js'; export {default as withDirectory} from './withDirectory.js'; -export {default as withHasArtwork} from './withHasArtwork.js'; export {default as withRecontextualizedContributionList} from './withRecontextualizedContributionList.js'; export {default as withRedatedContributionList} from './withRedatedContributionList.js'; export {default as withResolvedAnnotatedReferenceList} from './withResolvedAnnotatedReferenceList.js'; diff --git a/src/data/composite/wiki-properties/contribsPresent.js b/src/data/composite/wiki-properties/contribsPresent.js deleted file mode 100644 index 24f302a5..00000000 --- a/src/data/composite/wiki-properties/contribsPresent.js +++ /dev/null @@ -1,30 +0,0 @@ -// Nice 'n simple shorthand for an exposed-only flag which is true when any -// contributions are present in the specified property. - -import {input, templateCompositeFrom} from '#composite'; -import {isContributionList} from '#validators'; - -import {exposeDependency, withResultOfAvailabilityCheck} - from '#composite/control-flow'; - -export default templateCompositeFrom({ - annotation: `contribsPresent`, - - compose: false, - - inputs: { - contribs: input.staticDependency({ - validate: isContributionList, - acceptsNull: true, - }), - }, - - steps: () => [ - withResultOfAvailabilityCheck({ - from: input('contribs'), - mode: input.value('empty'), - }), - - exposeDependency({dependency: '#availability'}), - ], -}); diff --git a/src/data/composite/wiki-data/withHasArtwork.js b/src/data/composite/wiki-properties/hasArtwork.js index 9c22f439..e403a7e2 100644 --- a/src/data/composite/wiki-data/withHasArtwork.js +++ b/src/data/composite/wiki-properties/hasArtwork.js @@ -1,13 +1,17 @@ -import {input, templateCompositeFrom} from '#composite'; +import {input, templateCompositeFrom, V} from '#composite'; import {isContributionList, isThing, strictArrayOf} from '#validators'; -import {raiseOutputWithoutDependency, withResultOfAvailabilityCheck} - from '#composite/control-flow'; import {fillMissingListItems, withFlattenedList, withPropertyFromList} from '#composite/data'; +import { + exitWithoutDependency, + exposeWhetherDependencyAvailable, + withResultOfAvailabilityCheck, +} from '#composite/control-flow'; + export default templateCompositeFrom({ - annotation: 'withHasArtwork', + annotation: 'hasArtwork', inputs: { contribs: input({ @@ -26,7 +30,7 @@ export default templateCompositeFrom({ }), }, - outputs: ['#hasArtwork'], + compose: false, steps: () => [ withResultOfAvailabilityCheck({ @@ -40,9 +44,7 @@ export default templateCompositeFrom({ ['#availability']: availability, }) => (availability - ? continuation.raiseOutput({ - ['#hasArtwork']: true, - }) + ? true : continuation()), }, @@ -64,34 +66,25 @@ export default templateCompositeFrom({ }), }, - raiseOutputWithoutDependency({ - dependency: '#artworks', + exitWithoutDependency('#artworks', { + value: input.value(false), mode: input.value('empty'), - output: input.value({'#hasArtwork': false}), }), - withPropertyFromList({ - list: '#artworks', + withPropertyFromList('#artworks', { property: input.value('artistContribs'), internal: input.value(true), }), // Since we're getting the update value for each artwork's artistContribs, // it may not be set at all, and in that case won't be exposing as []. - fillMissingListItems({ - list: '#artworks.artistContribs', - fill: input.value([]), - }), + fillMissingListItems('#artworks.artistContribs', V([])), - withFlattenedList({ - list: '#artworks.artistContribs', - }), + withFlattenedList('#artworks.artistContribs'), - withResultOfAvailabilityCheck({ - from: '#flattenedList', + exposeWhetherDependencyAvailable({ + dependency: '#flattenedList', mode: input.value('empty'), - }).outputs({ - '#availability': '#hasArtwork', }), ], -}); +}); \ No newline at end of file diff --git a/src/data/composite/wiki-properties/index.js b/src/data/composite/wiki-properties/index.js index 57a2b8f2..9ef7ccc4 100644 --- a/src/data/composite/wiki-properties/index.js +++ b/src/data/composite/wiki-properties/index.js @@ -10,7 +10,6 @@ export {default as commentatorArtists} from './commentatorArtists.js'; export {default as constitutibleArtwork} from './constitutibleArtwork.js'; export {default as constitutibleArtworkList} from './constitutibleArtworkList.js'; export {default as contentString} from './contentString.js'; -export {default as contribsPresent} from './contribsPresent.js'; export {default as contributionList} from './contributionList.js'; export {default as dimensions} from './dimensions.js'; export {default as directory} from './directory.js'; @@ -18,6 +17,7 @@ export {default as duration} from './duration.js'; export {default as externalFunction} from './externalFunction.js'; export {default as fileExtension} from './fileExtension.js'; export {default as flag} from './flag.js'; +export {default as hasArtwork} from './hasArtwork.js'; export {default as name} from './name.js'; export {default as referenceList} from './referenceList.js'; export {default as referencedArtworkList} from './referencedArtworkList.js'; diff --git a/src/data/things/album.js b/src/data/things/album.js index e660a2b1..5f5492ce 100644 --- a/src/data/things/album.js +++ b/src/data/things/album.js @@ -4,7 +4,7 @@ import * as path from 'node:path'; import {inspect} from 'node:util'; import {colors} from '#cli'; -import {input} from '#composite'; +import {input, V} from '#composite'; import {traverse} from '#node-utils'; import {sortAlbumsTracksChronologically, sortChronologically} from '#sort'; import {empty} from '#sugar'; @@ -33,6 +33,8 @@ import { parseWallpaperParts, } from '#yaml'; +import {withResolvedContribs} from '#composite/wiki-data'; + import { exitWithoutDependency, exposeConstant, @@ -50,24 +52,17 @@ import { } from '#composite/data'; import { - exitWithoutArtwork, - withDirectory, - withHasArtwork, - withResolvedContribs, -} from '#composite/wiki-data'; - -import { color, commentatorArtists, constitutibleArtwork, constitutibleArtworkList, contentString, - contribsPresent, contributionList, dimensions, directory, fileExtension, flag, + hasArtwork, name, referencedArtworkList, referenceList, @@ -119,11 +114,7 @@ export class Album extends Thing { validate: input.value(isDirectory), }), - withDirectory(), - - exposeDependency({ - dependency: '#directory', - }), + exposeDependency('directory'), ], alwaysReferenceByDirectory: flag(false), @@ -138,9 +129,7 @@ export class Album extends Thing { ])), }), - exposeConstant({ - value: input.value('album'), - }), + exposeConstant(V('album')), ], bandcampAlbumIdentifier: simpleString(), @@ -172,10 +161,7 @@ export class Album extends Thing { '#resolvedContribs': '#trackArtistContribs', }), - exposeDependencyOrContinue({ - dependency: '#trackArtistContribs', - mode: input.value('empty'), - }), + exposeDependencyOrContinue('#trackArtistContribs', V('empty')), withResolvedContribs({ from: '_artistContribs', @@ -186,7 +172,7 @@ export class Album extends Thing { '#resolvedContribs': '#trackArtistContribs', }), - exposeDependency({dependency: '#trackArtistContribs'}), + exposeDependency('#trackArtistContribs'), ], // > Update & expose - General configuration @@ -210,10 +196,9 @@ export class Album extends Thing { // > Update & expose - Artworks coverArtworks: [ - exitWithoutArtwork({ - contribs: '_coverArtistContribs', - artworks: '_coverArtworks', + exitWithoutDependency('hasCoverArt', { value: input.value([]), + mode: input.value('falsy'), }), constitutibleArtworkList.fromYAMLFieldSpec @@ -226,13 +211,8 @@ export class Album extends Thing { }), coverArtDate: [ - withHasArtwork({ - contribs: '_coverArtistContribs', - artworks: '_coverArtworks', - }), - - exitWithoutDependency({ - dependency: '#hasArtwork', + exitWithoutDependency('hasCoverArt', { + value: input.value(null), mode: input.value('falsy'), }), @@ -240,34 +220,31 @@ export class Album extends Thing { validate: input.value(isDate), }), - exposeDependency({ - dependency: 'date', - }), + exposeDependency('date'), ], coverArtFileExtension: [ - exitWithoutArtwork({ - contribs: '_coverArtistContribs', - artworks: '_coverArtworks', + exitWithoutDependency('hasCoverArt', { + value: input.value(null), + mode: input.value('falsy'), }), fileExtension('jpg'), ], coverArtDimensions: [ - exitWithoutArtwork({ - contribs: '_coverArtistContribs', - artworks: '_coverArtworks', + exitWithoutDependency('hasCoverArt', { + value: input.value(null), + mode: input.value('falsy'), }), dimensions(), ], artTags: [ - exitWithoutArtwork({ - contribs: '_coverArtistContribs', - artworks: '_coverArtworks', + exitWithoutDependency('hasCoverArt', { value: input.value([]), + mode: input.value('falsy'), }), referenceList({ @@ -277,10 +254,9 @@ export class Album extends Thing { ], referencedArtworks: [ - exitWithoutArtwork({ - contribs: '_coverArtistContribs', - artworks: '_coverArtworks', + exitWithoutDependency('hasCoverArt', { value: input.value([]), + mode: input.value('falsy'), }), referencedArtworkList(), @@ -289,7 +265,7 @@ export class Album extends Thing { trackCoverArtistContribs: contributionList({ // May be null, indicating cover art was added for tracks on the date // each track specifies, or else the track's own release date. - date: '_trackArtDate', + date: 'trackArtDate', // This is the "correct" value, but it gets overwritten - with the same // value - regardless. @@ -303,10 +279,9 @@ export class Album extends Thing { trackDimensions: dimensions(), wallpaperArtwork: [ - exitWithoutDependency({ - dependency: '_wallpaperArtistContribs', - mode: input.value('empty'), + exitWithoutDependency('hasWallpaperArt', { value: input.value(null), + mode: input.value('falsy'), }), constitutibleArtwork.fromYAMLFieldSpec @@ -319,39 +294,36 @@ export class Album extends Thing { }), wallpaperFileExtension: [ - exitWithoutArtwork({ - contribs: '_wallpaperArtistContribs', - artwork: '_wallpaperArtwork', + exitWithoutDependency('hasWallpaperArt', { + value: input.value(null), + mode: input.value('falsy'), }), fileExtension('jpg'), ], wallpaperStyle: [ - exitWithoutArtwork({ - contribs: '_wallpaperArtistContribs', - artwork: '_wallpaperArtwork', + exitWithoutDependency('hasWallpaperArt', { + value: input.value(null), + mode: input.value('falsy'), }), simpleString(), ], wallpaperParts: [ - // kinda nonsensical or at least unlikely lol, but y'know - exitWithoutArtwork({ - contribs: '_wallpaperArtistContribs', - artwork: '_wallpaperArtwork', + exitWithoutDependency('hasWallpaperArt', { value: input.value([]), + mode: input.value('falsy'), }), wallpaperParts(), ], bannerArtwork: [ - exitWithoutDependency({ - dependency: '_bannerArtistContribs', - mode: input.value('empty'), + exitWithoutDependency('hasBannerArt', { value: input.value(null), + mode: input.value('falsy'), }), constitutibleArtwork.fromYAMLFieldSpec @@ -364,27 +336,27 @@ export class Album extends Thing { }), bannerFileExtension: [ - exitWithoutArtwork({ - contribs: '_bannerArtistContribs', - artwork: '_bannerArtwork', + exitWithoutDependency('hasBannerArt', { + value: input.value(null), + mode: input.value('falsy'), }), fileExtension('jpg'), ], bannerDimensions: [ - exitWithoutArtwork({ - contribs: '_bannerArtistContribs', - artwork: '_bannerArtwork', + exitWithoutDependency('hasBannerArt', { + value: input.value(null), + mode: input.value('falsy'), }), dimensions(), ], bannerStyle: [ - exitWithoutArtwork({ - contribs: '_bannerArtistContribs', - artwork: '_bannerArtwork', + exitWithoutDependency('hasBannerArt', { + value: input.value(null), + mode: input.value('falsy'), }), simpleString(), @@ -430,44 +402,31 @@ export class Album extends Thing { // > Expose only - isAlbum: [ - exposeConstant({ - value: input.value(true), - }), - ], + isAlbum: exposeConstant(V(true)), commentatorArtists: commentatorArtists(), - hasCoverArt: [ - withHasArtwork({ - contribs: '_coverArtistContribs', - artworks: '_coverArtworks', - }), + hasCoverArt: hasArtwork({ + contribs: '_coverArtistContribs', + artworks: '_coverArtworks', + }), - exposeDependency({dependency: '#hasArtwork'}), - ], + hasWallpaperArt: hasArtwork({ + contribs: '_wallpaperArtistContribs', + artwork: '_wallpaperArtwork', + }), - hasWallpaperArt: contribsPresent({contribs: '_wallpaperArtistContribs'}), - hasBannerArt: contribsPresent({contribs: '_bannerArtistContribs'}), + hasBannerArt: hasArtwork({ + contribs: '_bannerArtistContribs', + artwork: '_bannerArtwork', + }), tracks: [ - exitWithoutDependency({ - dependency: 'trackSections', - value: input.value([]), - }), - - withPropertyFromList({ - list: 'trackSections', - property: input.value('tracks'), - }), + exitWithoutDependency('trackSections', V([])), - withFlattenedList({ - list: '#trackSections.tracks', - }), - - exposeDependency({ - dependency: '#flattenedList', - }), + withPropertyFromList('trackSections', V('tracks')), + withFlattenedList('#trackSections.tracks'), + exposeDependency('#flattenedList'), ], }); @@ -1126,17 +1085,11 @@ export class TrackSection extends Thing { property: input.value('directory'), }), - withDirectory({ - directory: '_unqualifiedDirectory', - }).outputs({ - '#directory': '#unqualifiedDirectory', - }), - { - dependencies: ['#album.directory', '#unqualifiedDirectory'], + dependencies: ['#album.directory', 'unqualifiedDirectory'], compute: ({ ['#album.directory']: albumDirectory, - ['#unqualifiedDirectory']: unqualifiedDirectory, + ['unqualifiedDirectory']: unqualifiedDirectory, }) => albumDirectory + '/' + unqualifiedDirectory, }, diff --git a/src/data/things/track.js b/src/data/things/track.js index 030778a3..08b0f94f 100644 --- a/src/data/things/track.js +++ b/src/data/things/track.js @@ -248,10 +248,7 @@ export class Track extends Thing { : null), }, - withPropertyFromObject({ - object: '#matchingAlbum', - property: input.value('tracks'), - }), + withPropertyFromObject( '#matchingAlbum', V('tracks')), { dependencies: [ @@ -285,14 +282,8 @@ export class Track extends Thing { validate: input.value(isContentString), }), - withPropertyFromObject({ - object: 'album', - property: input.value('trackArtistText'), - }), - - exposeDependency({ - dependency: '#album.trackArtistText', - }), + withPropertyFromObject('album', V('trackArtistText')), + exposeDependency('#album.trackArtistText'), ], artistTextInLists: [ @@ -316,19 +307,13 @@ export class Track extends Thing { '#resolvedContribs': '#artistContribs', }), - exposeDependencyOrContinue({ - dependency: '#artistContribs', - mode: input.value('empty'), - }), + exposeDependencyOrContinue('#artistContribs', V('empty')), // Specifically inherit artist contributions later than artist contribs. // Secondary releases' artists may differ from the main release. inheritContributionListFromMainRelease(), - withPropertyFromObject({ - object: 'album', - property: input.value('trackArtistContribs'), - }), + withPropertyFromObject('album', V('trackArtistContribs')), withRecontextualizedContributionList({ list: '#album.trackArtistContribs', @@ -340,7 +325,7 @@ export class Track extends Thing { date: 'date', }), - exposeDependency({dependency: '#album.trackArtistContribs'}), + exposeDependency('#album.trackArtistContribs'), ], contributorContribs: [ @@ -359,12 +344,8 @@ export class Track extends Thing { validate: input.value(isBoolean), }), - withPropertyFromObject({ - object: 'trackSection', - property: input.value('countTracksInArtistTotals'), - }), - - exposeDependency({dependency: '#trackSection.countTracksInArtistTotals'}), + withPropertyFromObject('trackSection', V('countTracksInArtistTotals')), + exposeDependency('#trackSection.countTracksInArtistTotals'), ], disableUniqueCoverArt: flag(), @@ -379,19 +360,11 @@ export class Track extends Thing { validate: input.value(isColor), }), - withPropertyFromObject({ - object: 'trackSection', - property: input.value('color'), - }), - - exposeDependencyOrContinue({dependency: '#trackSection.color'}), - - withPropertyFromObject({ - object: 'album', - property: input.value('color'), - }), + withPropertyFromObject('trackSection', V('color')), + exposeDependencyOrContinue('#trackSection.color'), - exposeDependency({dependency: '#album.color'}), + withPropertyFromObject('album', V('color')), + exposeDependency('#album.color'), ], needsLyrics: [ @@ -400,16 +373,12 @@ export class Track extends Thing { validate: input.value(isBoolean), }), - exitWithoutDependency({ - dependency: '_lyrics', - mode: input.value('empty'), + exitWithoutDependency('_lyrics', { value: input.value(false), + mode: input.value('empty'), }), - withPropertyFromList({ - list: '_lyrics', - property: input.value('helpNeeded'), - }), + withPropertyFromList('_lyrics', V('helpNeeded')), { dependencies: ['#lyrics.helpNeeded'], @@ -425,10 +394,9 @@ export class Track extends Thing { // > Update & expose - Artworks trackArtworks: [ - exitWithoutDependency({ - dependency: 'hasUniqueCoverArt', - mode: input.value('falsy'), + exitWithoutDependency('hasUniqueCoverArt', { value: input.value([]), + mode: input.value('falsy'), }), constitutibleArtworkList.fromYAMLFieldSpec @@ -436,10 +404,9 @@ export class Track extends Thing { ], coverArtistContribs: [ - exitWithoutDependency({ - dependency: 'hasUniqueCoverArt', - mode: input.value('falsy'), + exitWithoutDependency('hasUniqueCoverArt', { value: input.value([]), + mode: input.value('falsy'), }), withResolvedContribs({ @@ -449,15 +416,9 @@ export class Track extends Thing { date: 'coverArtDate', }), - exposeDependencyOrContinue({ - dependency: '#resolvedContribs', - mode: input.value('empty'), - }), + exposeDependencyOrContinue('#resolvedContribs', V('empty')), - withPropertyFromObject({ - object: 'album', - property: input.value('trackCoverArtistContribs'), - }), + withPropertyFromObject('album', V('trackCoverArtistContribs')), withRecontextualizedContributionList({ list: '#album.trackCoverArtistContribs', @@ -469,14 +430,12 @@ export class Track extends Thing { date: 'coverArtDate', }), - exposeDependency({ - dependency: '#album.trackCoverArtistContribs', - }), + exposeDependency('#album.trackCoverArtistContribs'), ], coverArtDate: [ - exitWithoutDependency({ - dependency: 'hasUniqueCoverArt', + exitWithoutDependency('hasUniqueCoverArt', { + value: input.value(null), mode: input.value('falsy'), }), @@ -484,23 +443,15 @@ export class Track extends Thing { validate: input.value(isDate), }), - withPropertyFromObject({ - object: 'album', - property: input.value('trackArtDate'), - }), - - exposeDependencyOrContinue({ - dependency: '#album.trackArtDate', - }), + withPropertyFromObject('album', V('trackArtDate')), + exposeDependencyOrContinue('#album.trackArtDate'), - exposeDependency({ - dependency: 'date', - }), + exposeDependency('date'), ], coverArtFileExtension: [ - exitWithoutDependency({ - dependency: 'hasUniqueCoverArt', + exitWithoutDependency('hasUniqueCoverArt', { + value: input.value(null), mode: input.value('falsy'), }), @@ -508,41 +459,30 @@ export class Track extends Thing { validate: input.value(isFileExtension), }), - withPropertyFromObject({ - object: 'album', - property: input.value('trackCoverArtFileExtension'), - }), - - exposeDependencyOrContinue({dependency: '#album.trackCoverArtFileExtension'}), + withPropertyFromObject('album', V('trackCoverArtFileExtension')), + exposeDependencyOrContinue('#album.trackCoverArtFileExtension'), - exposeConstant({ - value: input.value('jpg'), - }), + exposeConstant(V('jpg')), ], coverArtDimensions: [ - exitWithoutDependency({ - dependency: 'hasUniqueCoverArt', + exitWithoutDependency('hasUniqueCoverArt', { + value: input.value(null), mode: input.value('falsy'), }), exposeUpdateValueOrContinue(), - withPropertyFromObject({ - object: 'album', - property: input.value('trackDimensions'), - }), - - exposeDependencyOrContinue({dependency: '#album.trackDimensions'}), + withPropertyFromObject('album', V('trackDimensions')), + exposeDependencyOrContinue('#album.trackDimensions'), dimensions(), ], artTags: [ - exitWithoutDependency({ - dependency: 'hasUniqueCoverArt', - mode: input.value('falsy'), + exitWithoutDependency('hasUniqueCoverArt', { value: input.value([]), + mode: input.value('falsy'), }), referenceList({ @@ -552,10 +492,9 @@ export class Track extends Thing { ], referencedArtworks: [ - exitWithoutDependency({ - dependency: 'hasUniqueCoverArt', - mode: input.value('falsy'), + exitWithoutDependency('hasUniqueCoverArt', { value: input.value([]), + mode: input.value('falsy'), }), referencedArtworkList(), @@ -646,28 +585,18 @@ export class Track extends Thing { // > Expose only - isTrack: [ - exposeConstant({ - value: input.value(true), - }), - ], + isTrack: exposeConstant(V(true)), commentatorArtists: commentatorArtists(), directorySuffix: [ - exitWithoutDependency({ - dependency: 'suffixDirectoryFromAlbum', + exitWithoutDependency('suffixDirectoryFromAlbum', { + value: input.value(null), mode: input.value('falsy'), }), - withPropertyFromObject({ - object: 'trackSection', - property: input.value('directorySuffix'), - }), - - exposeDependency({ - dependency: '#trackSection.directorySuffix', - }), + withPropertyFromObject('trackSection', V('directorySuffix')), + exposeDependency('#trackSection.directorySuffix'), ], date: [ @@ -679,43 +608,21 @@ export class Track extends Thing { : continuation()), }, - exposeDependencyOrContinue({ - dependency: 'dateFirstReleased', - }), - - withPropertyFromObject({ - object: 'album', - property: input.value('date'), - }), + exposeDependencyOrContinue('dateFirstReleased'), - exposeDependency({ - dependency: '#album.date', - }), + withPropertyFromObject('album', V('date')), + exposeDependency('#album.date'), ], trackNumber: [ // Zero is the fallback, not one, but in most albums the first track // (and its intended output by this composition) will be one. - exitWithoutDependency({ - dependency: 'trackSection', - value: input.value(0), - }), - withPropertiesFromObject({ - object: 'trackSection', - properties: input.value(['tracks', 'startCountingFrom']), - }), + exitWithoutDependency('trackSection', V(0)), + withPropertiesFromObject('trackSection', V(['tracks', 'startCountingFrom'])), - withIndexInList({ - list: '#trackSection.tracks', - item: input.myself(), - }), - - exitWithoutDependency({ - dependency: '#index', - value: input.value(0), - mode: input.value('index'), - }), + withIndexInList('#trackSection.tracks', input.myself()), + exitWithoutDependency('#index', V(0), V('index')), { dependencies: ['#trackSection.startCountingFrom', '#index'], @@ -762,8 +669,7 @@ export class Track extends Thing { : continuation()), }, - withPropertyFromObject({ - object: 'album', + withPropertyFromObject('album', { property: input.value('trackCoverArtistContribs'), internal: input.value(true), }), @@ -783,61 +689,43 @@ export class Track extends Thing { : continuation()), }, - exitWithoutDependency({ - dependency: '_trackArtworks', - mode: input.value('empty'), + exitWithoutDependency('_trackArtworks', { value: input.value(false), + mode: input.value('empty'), }), - withPropertyFromList({ - list: '_trackArtworks', + withPropertyFromList('_trackArtworks', { property: input.value('artistContribs'), internal: input.value(true), }), // Since we're getting the update value for each artwork's artistContribs, // it may not be set at all, and in that case won't be exposing as []. - fillMissingListItems({ - list: '#trackArtworks.artistContribs', - fill: input.value([]), - }), + fillMissingListItems('#trackArtworks.artistContribs', V([])), - withFlattenedList({ - list: '#trackArtworks.artistContribs', - }), + withFlattenedList('#trackArtworks.artistContribs'), - withResultOfAvailabilityCheck({ - from: '#flattenedList', + exposeWhetherDependencyAvailable({ + dependency: '#flattenedList', mode: input.value('empty'), }), - - exposeDependency({ - dependency: '#availability', - }), ], - isMainRelease: [ + isMainRelease: exposeWhetherDependencyAvailable({ dependency: 'mainReleaseTrack', negate: input.value(true), }), - ], - isSecondaryRelease: [ + isSecondaryRelease: exposeWhetherDependencyAvailable({ dependency: 'mainReleaseTrack', }), - ], mainReleaseTrack: [ - exitWithoutDependency({ - dependency: 'mainRelease', - }), + exitWithoutDependency('mainRelease'), - withPropertyFromObject({ - object: 'mainRelease', - property: input.value('isTrack'), - }), + withPropertyFromObject('mainRelease', V('isTrack')), { dependencies: ['mainRelease', '#mainRelease.isTrack'], @@ -878,20 +766,14 @@ export class Track extends Thing { }, }, - withPropertyFromObject({ - object: 'mainRelease', - property: input.value('tracks'), - }), + withPropertyFromObject('mainRelease', V('tracks')), - withPropertyFromList({ - list: '#mainRelease.tracks', + withPropertyFromList('#mainRelease.tracks', { property: input.value('mainRelease'), internal: input.value(true), }), - withAvailabilityFilter({ - from: '#mainRelease.tracks.mainRelease', - }), + withAvailabilityFilter({from: '#mainRelease.tracks.mainRelease'}), withMappedList({ list: '#availabilityFilter', @@ -900,79 +782,39 @@ export class Track extends Thing { '#mappedList': '#availabilityFilter', }), - withFilteredList({ - list: '#mainRelease.tracks', - filter: '#availabilityFilter', - }).outputs({ - '#filteredList': '#mainRelease.tracks', - }), + withFilteredList('#mainRelease.tracks', '#availabilityFilter') + .outputs({'#filteredList': '#mainRelease.tracks'}), - withPropertyFromList({ - list: '#mainRelease.tracks', - property: input.value('name'), - }), + withPropertyFromList('#mainRelease.tracks', V('name')), - withPropertyFromList({ - list: '#mainRelease.tracks', + withPropertyFromList('#mainRelease.tracks', { property: input.value('directory'), internal: input.value(true), }), - withMappedList({ - list: '#mainRelease.tracks.name', - map: '#mapItsNameLikeName', - }).outputs({ - '#mappedList': '#filterItsNameLikeName', - }), + withMappedList('#mainRelease.tracks.name', '#mapItsNameLikeName') + .outputs({'#mappedList': '#filterItsNameLikeName'}), - withMappedList({ - list: '#mainRelease.tracks.directory', - map: '#mapItsDirectoryLikeDirectory', - }).outputs({ - '#mappedList': '#filterItsDirectoryLikeDirectory', - }), + withMappedList('#mainRelease.tracks.directory', '#mapItsDirectoryLikeDirectory') + .outputs({'#mappedList': '#filterItsDirectoryLikeDirectory'}), - withMappedList({ - list: '#mainRelease.tracks.name', - map: '#mapItsNameLikeDirectory', - }).outputs({ - '#mappedList': '#filterItsNameLikeDirectory', - }), + withMappedList('#mainRelease.tracks.name', '#mapItsNameLikeDirectory') + .outputs({'#mappedList': '#filterItsNameLikeDirectory'}), - withMappedList({ - list: '#mainRelease.tracks.directory', - map: '#mapItsDirectoryLikeName', - }).outputs({ - '#mappedList': '#filterItsDirectoryLikeName', - }), + withMappedList('#mainRelease.tracks.directory', '#mapItsDirectoryLikeName') + .outputs({'#mappedList': '#filterItsDirectoryLikeName'}), - withFilteredList({ - list: '#mainRelease.tracks', - filter: '#filterItsNameLikeName', - }).outputs({ - '#filteredList': '#matchingItsNameLikeName', - }), + withFilteredList('#mainRelease.tracks', '#filterItsNameLikeName') + .outputs({'#filteredList': '#matchingItsNameLikeName'}), - withFilteredList({ - list: '#mainRelease.tracks', - filter: '#filterItsDirectoryLikeDirectory', - }).outputs({ - '#filteredList': '#matchingItsDirectoryLikeDirectory', - }), + withFilteredList('#mainRelease.tracks', '#filterItsDirectoryLikeDirectory') + .outputs({'#filteredList': '#matchingItsDirectoryLikeDirectory'}), - withFilteredList({ - list: '#mainRelease.tracks', - filter: '#filterItsNameLikeDirectory', - }).outputs({ - '#filteredList': '#matchingItsNameLikeDirectory', - }), + withFilteredList('#mainRelease.tracks', '#filterItsNameLikeDirectory') + .outputs({'#filteredList': '#matchingItsNameLikeDirectory'}), - withFilteredList({ - list: '#mainRelease.tracks', - filter: '#filterItsDirectoryLikeName', - }).outputs({ - '#filteredList': '#matchingItsDirectoryLikeName', - }), + withFilteredList('#mainRelease.tracks', '#filterItsDirectoryLikeName') + .outputs({'#filteredList': '#matchingItsDirectoryLikeName'}), { dependencies: [ @@ -1065,30 +907,15 @@ export class Track extends Thing { ], commentaryFromMainRelease: [ - exitWithoutDependency({ - dependency: 'mainReleaseTrack', - value: input.value([]), - }), + exitWithoutDependency('mainReleaseTrack', V([])), - withPropertyFromObject({ - object: 'mainReleaseTrack', - property: input.value('commentary'), - }), - - exposeDependency({ - dependency: '#mainReleaseTrack.commentary', - }), + withPropertyFromObject('mainReleaseTrack', V('commentary')), + exposeDependency('#mainReleaseTrack.commentary'), ], groups: [ - withPropertyFromObject({ - object: 'album', - property: input.value('groups'), - }), - - exposeDependency({ - dependency: '#album.groups', - }), + withPropertyFromObject('album', V('groups')), + exposeDependency('#album.groups'), ], followingProductionTracks: reverseReferenceList({ |