diff options
| -rw-r--r-- | src/data/composite.js | 54 | ||||
| -rw-r--r-- | src/data/composite/control-flow/exitWithoutUpdateValue.js | 2 | ||||
| -rw-r--r-- | src/data/composite/wiki-data/splitContentNodesAround.js | 2 | ||||
| -rw-r--r-- | src/data/composite/wiki-data/withResolvedAnnotatedReferenceList.js | 8 | ||||
| -rw-r--r-- | src/data/composite/wiki-data/withResolvedContribs.js | 1 | ||||
| -rw-r--r-- | src/data/composite/wiki-properties/annotatedReferenceList.js | 8 | ||||
| -rw-r--r-- | src/data/composite/wiki-properties/commentatorArtists.js | 5 | ||||
| -rw-r--r-- | src/data/composite/wiki-properties/contributionList.js | 3 | ||||
| -rw-r--r-- | src/data/things/album.js | 3 | ||||
| -rw-r--r-- | src/data/things/flash.js | 1 | ||||
| -rw-r--r-- | src/data/things/track.js | 4 | ||||
| -rw-r--r-- | src/data/things/wiki-info.js | 5 |
12 files changed, 63 insertions, 33 deletions
diff --git a/src/data/composite.js b/src/data/composite.js index d3848806..8ac906c7 100644 --- a/src/data/composite.js +++ b/src/data/composite.js @@ -230,7 +230,14 @@ export function templateCompositeFrom(description) { ? Object.keys(description.inputs) : []); - const positionalInputNames = expectedInputNames; + const optionalInputNames = + expectedInputNames.filter(name => { + const inputDescription = getInputTokenValue(description.inputs[name]); + if (!inputDescription) return false; + if ('defaultValue' in inputDescription) return true; + if ('defaultDependency' in inputDescription) return true; + return false; + }); const instantiate = (...args) => { const preparedInputs = {}; @@ -245,13 +252,14 @@ export function templateCompositeFrom(description) { const expresslyProvidedInputNames = Object.keys(namedInputs); const positionallyProvidedInputNames = []; + const remainingInputNames = expectedInputNames.slice(); const apparentInputRoutes = {}; const wrongTypeInputPositions = []; const namedAndPositionalConflictInputPositions = []; - const maximumPositionalInputs = positionalInputNames.length; + const maximumPositionalInputs = expectedInputNames.length; const lastPossiblePositionalIndex = maximumPositionalInputs - 1; for (const [index, value] of positionalInputs.entries()) { @@ -269,7 +277,7 @@ export function templateCompositeFrom(description) { continue; } - const correspondingName = expectedInputNames[index]; + const correspondingName = remainingInputNames.shift(); if (expresslyProvidedInputNames.includes(correspondingName)) { namedAndPositionalConflictInputPositions.push(index); continue; @@ -289,6 +297,9 @@ export function templateCompositeFrom(description) { .filter(name => !expectedInputNames.includes(name)); const wrongTypeInputNames = []; + const skippedInputNames = []; + const passedInputNames = []; + const nameProvidedInputNames = []; for (const [name, value] of Object.entries(namedInputs)) { if (misplacedInputNames.includes(name)) { @@ -301,8 +312,33 @@ export function templateCompositeFrom(description) { continue; } + const index = remainingInputNames.indexOf(name); + if (index === 0) { + passedInputNames.push(remainingInputNames.shift()); + } else if (index === -1) { + // This input isn't misplaced, so it's an expected name, + // and SHOULD be in the list of remaining input names. + // But it isn't if it itself has already been skipped! + // And if so, that's already been tracked. + } else { + const til = remainingInputNames.splice(0, index); + passedInputNames.push(...til); + + const skipped = + til.filter(name => + !optionalInputNames.includes(name) || + expresslyProvidedInputNames.includes(name)); + + if (!empty(skipped)) { + skippedInputNames.push({skipped, before: name}); + } + + passedInputNames.push(remainingInputNames.shift()); + } + preparedInputs[name] = value; apparentInputRoutes[name] = name; + nameProvidedInputNames.push(name); } const totalProvidedInputNames = @@ -314,13 +350,7 @@ export function templateCompositeFrom(description) { const missingInputNames = expectedInputNames .filter(name => !totalProvidedInputNames.includes(name)) - .filter(name => { - const inputDescription = getInputTokenValue(description.inputs[name]); - if (!inputDescription) return true; - if ('defaultValue' in inputDescription) return false; - if ('defaultDependency' in inputDescription) return false; - return true; - }); + .filter(name => !optionalInputNames.includes(name)); const expectedStaticValueInputNames = []; const expectedStaticDependencyInputNames = []; @@ -389,6 +419,10 @@ export function templateCompositeFrom(description) { push(new Error(`${name}: Provided as both named and positional (i = ${index}) input`)); } + for (const {skipped, before} of skippedInputNames) { + push(new Error(`Expected ${skipped.join(', ')} before ${before}`)); + } + for (const name of expectedStaticDependencyInputNames) { const appearance = inputAppearance(preparedInputs[name]); const route = apparentInputRoutes[name]; diff --git a/src/data/composite/control-flow/exitWithoutUpdateValue.js b/src/data/composite/control-flow/exitWithoutUpdateValue.js index 3d9fbf76..5104a8c0 100644 --- a/src/data/composite/control-flow/exitWithoutUpdateValue.js +++ b/src/data/composite/control-flow/exitWithoutUpdateValue.js @@ -29,8 +29,8 @@ export default templateCompositeFrom({ steps: () => [ exitWithoutDependency({ dependency: input.updateValue(), - mode: input('mode'), value: input('value'), + mode: input('mode'), }), ], }); diff --git a/src/data/composite/wiki-data/splitContentNodesAround.js b/src/data/composite/wiki-data/splitContentNodesAround.js index afdbd3fa..f12bd8fc 100644 --- a/src/data/composite/wiki-data/splitContentNodesAround.js +++ b/src/data/composite/wiki-data/splitContentNodesAround.js @@ -42,8 +42,8 @@ export default templateCompositeFrom({ withMappedList({ list: '#separatorFilter', - filter: '#separatorFilter', map: input.value((_node, index) => index), + filter: '#separatorFilter', }), withFilteredList({ diff --git a/src/data/composite/wiki-data/withResolvedAnnotatedReferenceList.js b/src/data/composite/wiki-data/withResolvedAnnotatedReferenceList.js index 670dc422..71bc56ac 100644 --- a/src/data/composite/wiki-data/withResolvedAnnotatedReferenceList.js +++ b/src/data/composite/wiki-data/withResolvedAnnotatedReferenceList.js @@ -23,14 +23,14 @@ export default templateCompositeFrom({ acceptsNull: true, }), - reference: input({type: 'string', defaultValue: 'reference'}), - annotation: input({type: 'string', defaultValue: 'annotation'}), - thing: input({type: 'string', defaultValue: 'thing'}), - data: inputWikiData({allowMixedTypes: true}), find: inputSoupyFind(), findOptions: inputFindOptions(), + reference: input({type: 'string', defaultValue: 'reference'}), + annotation: input({type: 'string', defaultValue: 'annotation'}), + thing: input({type: 'string', defaultValue: 'thing'}), + notFoundMode: inputNotFoundMode(), }, diff --git a/src/data/composite/wiki-data/withResolvedContribs.js b/src/data/composite/wiki-data/withResolvedContribs.js index 60b5d4c6..7729d5b6 100644 --- a/src/data/composite/wiki-data/withResolvedContribs.js +++ b/src/data/composite/wiki-data/withResolvedContribs.js @@ -28,6 +28,7 @@ export default templateCompositeFrom({ date: input({ validate: isDate, acceptsNull: true, + defaultDependency: 'date', }), notFoundMode: inputNotFoundMode(), diff --git a/src/data/composite/wiki-properties/annotatedReferenceList.js b/src/data/composite/wiki-properties/annotatedReferenceList.js index aea0f22c..918f8567 100644 --- a/src/data/composite/wiki-properties/annotatedReferenceList.js +++ b/src/data/composite/wiki-properties/annotatedReferenceList.js @@ -57,13 +57,13 @@ export default templateCompositeFrom({ withResolvedAnnotatedReferenceList({ list: input.updateValue(), - reference: input('reference'), - annotation: input('annotation'), - thing: input('thing'), - data: input('data'), find: input('find'), findOptions: input('findOptions'), + + reference: input('reference'), + annotation: input('annotation'), + thing: input('thing'), }), exposeDependency({dependency: '#resolvedAnnotatedReferenceList'}), diff --git a/src/data/composite/wiki-properties/commentatorArtists.js b/src/data/composite/wiki-properties/commentatorArtists.js index 54d3e1a5..44dee028 100644 --- a/src/data/composite/wiki-properties/commentatorArtists.js +++ b/src/data/composite/wiki-properties/commentatorArtists.js @@ -14,10 +14,9 @@ export default templateCompositeFrom({ compose: false, steps: () => [ - exitWithoutDependency({ - dependency: 'commentary', - mode: input.value('falsy'), + exitWithoutDependency('commentary', { value: input.value([]), + mode: input.value('falsy'), }), withPropertyFromList({ diff --git a/src/data/composite/wiki-properties/contributionList.js b/src/data/composite/wiki-properties/contributionList.js index d9a6b417..04f93b52 100644 --- a/src/data/composite/wiki-properties/contributionList.js +++ b/src/data/composite/wiki-properties/contributionList.js @@ -29,6 +29,7 @@ export default templateCompositeFrom({ date: input({ validate: isDate, acceptsNull: true, + defaultDependency: 'date', }), artistProperty: input({ @@ -42,9 +43,9 @@ export default templateCompositeFrom({ steps: () => [ withResolvedContribs({ from: input.updateValue(), + date: input('date'), thingProperty: input.thisProperty(), artistProperty: input('artistProperty'), - date: input('date'), }), exposeDependencyOrContinue({ diff --git a/src/data/things/album.js b/src/data/things/album.js index 0fdc6fa8..107d02c7 100644 --- a/src/data/things/album.js +++ b/src/data/things/album.js @@ -141,7 +141,6 @@ export class Album extends Thing { // > Update & expose - Credits and contributors artistContribs: contributionList({ - date: '_date', artistProperty: input.value('albumArtistContributions'), }), @@ -152,7 +151,6 @@ export class Album extends Thing { from: input.updateValue({validate: isContributionList}), thingProperty: input.thisProperty(), artistProperty: input.value('albumTrackArtistContributions'), - date: '_date', }).outputs({ '#resolvedContribs': '#trackArtistContribs', }), @@ -163,7 +161,6 @@ export class Album extends Thing { from: '_artistContribs', thingProperty: input.thisProperty(), artistProperty: input.value('albumTrackArtistContributions'), - date: 'date', }).outputs({ '#resolvedContribs': '#trackArtistContribs', }), diff --git a/src/data/things/flash.js b/src/data/things/flash.js index cb791ef8..b595ec58 100644 --- a/src/data/things/flash.js +++ b/src/data/things/flash.js @@ -111,7 +111,6 @@ export class Flash extends Thing { .call(this, 'Cover Artwork'), contributorContribs: contributionList({ - date: 'date', artistProperty: input.value('flashContributorContributions'), }), diff --git a/src/data/things/track.js b/src/data/things/track.js index 37639eee..1095cce9 100644 --- a/src/data/things/track.js +++ b/src/data/things/track.js @@ -293,9 +293,9 @@ export class Track extends Thing { artistContribs: [ withResolvedContribs({ from: input.updateValue({validate: isContributionList}), + date: 'date', thingProperty: input.thisProperty(), artistProperty: input.value('trackArtistContributions'), - date: 'date', }).outputs({ '#resolvedContribs': '#artistContribs', }), @@ -404,9 +404,9 @@ export class Track extends Thing { withResolvedContribs({ from: input.updateValue({validate: isContributionList}), + date: 'coverArtDate', thingProperty: input.value('coverArtistContribs'), artistProperty: input.value('trackCoverArtistContributions'), - date: 'coverArtDate', }), exposeDependencyOrContinue('#resolvedContribs', V('empty')), diff --git a/src/data/things/wiki-info.js b/src/data/things/wiki-info.js index 96ae95f0..26b69ba6 100644 --- a/src/data/things/wiki-info.js +++ b/src/data/things/wiki-info.js @@ -79,10 +79,9 @@ export class WikiInfo extends Thing { enableGroupUI: flag(V(false)), enableSearch: [ - exitWithoutDependency({ - dependency: '_searchDataAvailable', - mode: input.value('falsy'), + exitWithoutDependency('_searchDataAvailable', { value: input.value(false), + mode: input.value('falsy'), }), flag(V(true)), |