« get me outta code hell

hsmusic-wiki - HSMusic - static wiki software cataloguing collaborative creation
about summary refs log tree commit diff
path: root/src/data/composite/wiki-properties
diff options
context:
space:
mode:
Diffstat (limited to 'src/data/composite/wiki-properties')
-rw-r--r--src/data/composite/wiki-properties/additionalFiles.js30
-rw-r--r--src/data/composite/wiki-properties/additionalNameList.js14
-rw-r--r--src/data/composite/wiki-properties/annotatedReferenceList.js17
-rw-r--r--src/data/composite/wiki-properties/canonicalBase.js16
-rw-r--r--src/data/composite/wiki-properties/color.js28
-rw-r--r--src/data/composite/wiki-properties/commentatorArtists.js5
-rw-r--r--src/data/composite/wiki-properties/constitutibleArtwork.js2
-rw-r--r--src/data/composite/wiki-properties/constitutibleArtworkList.js2
-rw-r--r--src/data/composite/wiki-properties/contribsPresent.js30
-rw-r--r--src/data/composite/wiki-properties/contributionList.js3
-rw-r--r--src/data/composite/wiki-properties/fileExtension.js29
-rw-r--r--src/data/composite/wiki-properties/flag.js30
-rw-r--r--src/data/composite/wiki-properties/hasArtwork.js90
-rw-r--r--src/data/composite/wiki-properties/index.js6
-rw-r--r--src/data/composite/wiki-properties/name.js28
-rw-r--r--src/data/composite/wiki-properties/referenceList.js11
-rw-r--r--src/data/composite/wiki-properties/referencedArtworkList.js3
-rw-r--r--src/data/composite/wiki-properties/seriesList.js31
-rw-r--r--src/data/composite/wiki-properties/singleReference.js31
19 files changed, 240 insertions, 166 deletions
diff --git a/src/data/composite/wiki-properties/additionalFiles.js b/src/data/composite/wiki-properties/additionalFiles.js
deleted file mode 100644
index 6760527a..00000000
--- a/src/data/composite/wiki-properties/additionalFiles.js
+++ /dev/null
@@ -1,30 +0,0 @@
-// This is a somewhat more involved data structure - it's for additional
-// or "bonus" files associated with albums or tracks (or anything else).
-// It's got this form:
-//
-//   [
-//     {title: 'Booklet', files: ['Booklet.pdf']},
-//     {
-//       title: 'Wallpaper',
-//       description: 'Cool Wallpaper!',
-//       files: ['1440x900.png', '1920x1080.png']
-//     },
-//     {title: 'Alternate Covers', description: null, files: [...]},
-//     ...
-//   ]
-//
-
-import {isAdditionalFileList} from '#validators';
-
-// TODO: Not templateCompositeFrom.
-
-export default function() {
-  return {
-    flags: {update: true, expose: true},
-    update: {validate: isAdditionalFileList},
-    expose: {
-      transform: (additionalFiles) =>
-        additionalFiles ?? [],
-    },
-  };
-}
diff --git a/src/data/composite/wiki-properties/additionalNameList.js b/src/data/composite/wiki-properties/additionalNameList.js
deleted file mode 100644
index c5971d4a..00000000
--- a/src/data/composite/wiki-properties/additionalNameList.js
+++ /dev/null
@@ -1,14 +0,0 @@
-// A list of additional names! These can be used for a variety of purposes,
-// e.g. providing extra searchable titles, localizations, romanizations or
-// original titles, and so on. Each item has a name and, optionally, a
-// descriptive annotation.
-
-import {isAdditionalNameList} from '#validators';
-
-export default function() {
-  return {
-    flags: {update: true, expose: true},
-    update: {validate: isAdditionalNameList},
-    expose: {transform: value => value ?? []},
-  };
-}
diff --git a/src/data/composite/wiki-properties/annotatedReferenceList.js b/src/data/composite/wiki-properties/annotatedReferenceList.js
index 8e6c96a1..918f8567 100644
--- a/src/data/composite/wiki-properties/annotatedReferenceList.js
+++ b/src/data/composite/wiki-properties/annotatedReferenceList.js
@@ -9,8 +9,13 @@ import {
 } from '#validators';
 
 import {exposeDependency} from '#composite/control-flow';
-import {inputSoupyFind, inputWikiData, withResolvedAnnotatedReferenceList}
-  from '#composite/wiki-data';
+
+import {
+  inputFindOptions,
+  inputSoupyFind,
+  inputWikiData,
+  withResolvedAnnotatedReferenceList,
+} from '#composite/wiki-data';
 
 import {referenceListInputDescriptions, referenceListUpdateDescription}
   from './helpers/reference-list-helpers.js';
@@ -25,6 +30,7 @@ export default templateCompositeFrom({
 
     data: inputWikiData({allowMixedTypes: true}),
     find: inputSoupyFind(),
+    findOptions: inputFindOptions(),
 
     reference: input.staticValue({type: 'string', defaultValue: 'reference'}),
     annotation: input.staticValue({type: 'string', defaultValue: 'annotation'}),
@@ -51,12 +57,13 @@ export default templateCompositeFrom({
     withResolvedAnnotatedReferenceList({
       list: input.updateValue(),
 
+      data: input('data'),
+      find: input('find'),
+      findOptions: input('findOptions'),
+
       reference: input('reference'),
       annotation: input('annotation'),
       thing: input('thing'),
-
-      data: input('data'),
-      find: input('find'),
     }),
 
     exposeDependency({dependency: '#resolvedAnnotatedReferenceList'}),
diff --git a/src/data/composite/wiki-properties/canonicalBase.js b/src/data/composite/wiki-properties/canonicalBase.js
new file mode 100644
index 00000000..81740d6c
--- /dev/null
+++ b/src/data/composite/wiki-properties/canonicalBase.js
@@ -0,0 +1,16 @@
+import {isURL} from '#validators';
+
+export default function() {
+  return {
+    flags: {update: true, expose: true},
+    update: {validate: isURL},
+    expose: {
+      transform: (value) =>
+        (value === null
+          ? null
+       : value.endsWith('/')
+          ? value
+          : value + '/'),
+    },
+  };
+}
diff --git a/src/data/composite/wiki-properties/color.js b/src/data/composite/wiki-properties/color.js
index 1bc9888b..e7fe472a 100644
--- a/src/data/composite/wiki-properties/color.js
+++ b/src/data/composite/wiki-properties/color.js
@@ -1,12 +1,26 @@
 // A color! This'll be some CSS-ready value.
 
+import {input, templateCompositeFrom} from '#composite';
 import {isColor} from '#validators';
 
-// TODO: Not templateCompositeFrom.
+export default templateCompositeFrom({
+  annotation: 'color',
 
-export default function() {
-  return {
-    flags: {update: true, expose: true},
-    update: {validate: isColor},
-  };
-}
+  compose: false,
+
+  inputs: {
+    default: input({validate: isColor, defaultValue: null}),
+  },
+
+  update: {
+    validate: isColor,
+  },
+
+  steps: () => [
+    {
+      dependencies: [input('default')],
+      transform: (value, {[input('default')]: defaultValue}) =>
+        value ?? defaultValue,
+    },
+  ],
+});
\ No newline at end of file
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/constitutibleArtwork.js b/src/data/composite/wiki-properties/constitutibleArtwork.js
index 0ee3bfcd..48f4211a 100644
--- a/src/data/composite/wiki-properties/constitutibleArtwork.js
+++ b/src/data/composite/wiki-properties/constitutibleArtwork.js
@@ -17,6 +17,7 @@ const template = templateCompositeFrom({
   compose: false,
 
   inputs: {
+    thingProperty: input({type: 'string', acceptsNull: true}),
     dimensionsFromThingProperty: input({type: 'string', acceptsNull: true}),
     fileExtensionFromThingProperty: input({type: 'string', acceptsNull: true}),
     dateFromThingProperty: input({type: 'string', acceptsNull: true}),
@@ -35,6 +36,7 @@ const template = templateCompositeFrom({
     }),
 
     withConstitutedArtwork({
+      thingProperty: input('thingProperty'),
       dimensionsFromThingProperty: input('dimensionsFromThingProperty'),
       fileExtensionFromThingProperty: input('fileExtensionFromThingProperty'),
       dateFromThingProperty: input('dateFromThingProperty'),
diff --git a/src/data/composite/wiki-properties/constitutibleArtworkList.js b/src/data/composite/wiki-properties/constitutibleArtworkList.js
index 246c08b5..dad3a957 100644
--- a/src/data/composite/wiki-properties/constitutibleArtworkList.js
+++ b/src/data/composite/wiki-properties/constitutibleArtworkList.js
@@ -16,6 +16,7 @@ const template = templateCompositeFrom({
   compose: false,
 
   inputs: {
+    thingProperty: input({type: 'string', acceptsNull: true}),
     dimensionsFromThingProperty: input({type: 'string', acceptsNull: true}),
     fileExtensionFromThingProperty: input({type: 'string', acceptsNull: true}),
     dateFromThingProperty: input({type: 'string', acceptsNull: true}),
@@ -34,6 +35,7 @@ const template = templateCompositeFrom({
     }),
 
     withConstitutedArtwork({
+      thingProperty: input('thingProperty'),
       dimensionsFromThingProperty: input('dimensionsFromThingProperty'),
       fileExtensionFromThingProperty: input('fileExtensionFromThingProperty'),
       dateFromThingProperty: input('dateFromThingProperty'),
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-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/composite/wiki-properties/fileExtension.js b/src/data/composite/wiki-properties/fileExtension.js
index c926fa8b..fa933f56 100644
--- a/src/data/composite/wiki-properties/fileExtension.js
+++ b/src/data/composite/wiki-properties/fileExtension.js
@@ -1,13 +1,26 @@
 // A file extension! Or the default, if provided when calling this.
 
+import {input, templateCompositeFrom} from '#composite';
 import {isFileExtension} from '#validators';
 
-// TODO: Not templateCompositeFrom.
+export default templateCompositeFrom({
+  annotation: 'name',
 
-export default function(defaultFileExtension = null) {
-  return {
-    flags: {update: true, expose: true},
-    update: {validate: isFileExtension},
-    expose: {transform: (value) => value ?? defaultFileExtension},
-  };
-}
+  compose: false,
+
+  inputs: {
+    default: input({validate: isFileExtension, acceptsNull: true}),
+  },
+
+  update: {
+    validate: isFileExtension,
+  },
+
+  steps: () => [
+    {
+      dependencies: [input('default')],
+      transform: (value, {[input('default')]: defaultValue}) =>
+        value ?? defaultValue,
+    },
+  ],
+});
\ No newline at end of file
diff --git a/src/data/composite/wiki-properties/flag.js b/src/data/composite/wiki-properties/flag.js
index 076e663f..fa787f92 100644
--- a/src/data/composite/wiki-properties/flag.js
+++ b/src/data/composite/wiki-properties/flag.js
@@ -1,19 +1,27 @@
 // Straightforward flag descriptor for a variety of property purposes.
 // Provide a default value, true or false!
 
+import {input, templateCompositeFrom} from '#composite';
 import {isBoolean} from '#validators';
 
-// TODO: Not templateCompositeFrom.
+export default templateCompositeFrom({
+  annotation: 'flag',
 
-// TODO: The description is a lie. This defaults to false. Bad.
+  compose: false,
 
-export default function(defaultValue = false) {
-  if (typeof defaultValue !== 'boolean') {
-    throw new TypeError(`Always set explicit defaults for flags!`);
-  }
+  inputs: {
+    default: input({type: 'boolean'}),
+  },
 
-  return {
-    flags: {update: true, expose: true},
-    update: {validate: isBoolean, default: defaultValue},
-  };
-}
+  update: {
+    validate: isBoolean,
+  },
+
+  steps: () => [
+    {
+      dependencies: [input('default')],
+      transform: (value, {[input('default')]: defaultValue}) =>
+        value ?? defaultValue,
+    },
+  ],
+});
\ No newline at end of file
diff --git a/src/data/composite/wiki-properties/hasArtwork.js b/src/data/composite/wiki-properties/hasArtwork.js
new file mode 100644
index 00000000..e403a7e2
--- /dev/null
+++ b/src/data/composite/wiki-properties/hasArtwork.js
@@ -0,0 +1,90 @@
+import {input, templateCompositeFrom, V} from '#composite';
+import {isContributionList, isThing, strictArrayOf} from '#validators';
+
+import {fillMissingListItems, withFlattenedList, withPropertyFromList}
+  from '#composite/data';
+
+import {
+  exitWithoutDependency,
+  exposeWhetherDependencyAvailable,
+  withResultOfAvailabilityCheck,
+} from '#composite/control-flow';
+
+export default templateCompositeFrom({
+  annotation: 'hasArtwork',
+
+  inputs: {
+    contribs: input({
+      validate: isContributionList,
+      defaultValue: null,
+    }),
+
+    artwork: input({
+      validate: isThing,
+      defaultValue: null,
+    }),
+
+    artworks: input({
+      validate: strictArrayOf(isThing),
+      defaultValue: null,
+    }),
+  },
+
+  compose: false,
+
+  steps: () => [
+    withResultOfAvailabilityCheck({
+      from: input('contribs'),
+      mode: input.value('empty'),
+    }),
+
+    {
+      dependencies: ['#availability'],
+      compute: (continuation, {
+        ['#availability']: availability,
+      }) =>
+        (availability
+          ? true
+          : continuation()),
+    },
+
+    {
+      dependencies: [input('artwork'), input('artworks')],
+      compute: (continuation, {
+        [input('artwork')]: artwork,
+        [input('artworks')]: artworks,
+      }) =>
+        continuation({
+          ['#artworks']:
+            (artwork && artworks
+              ? [artwork, ...artworks]
+           : artwork
+              ? [artwork]
+           : artworks
+              ? artworks
+              : []),
+        }),
+    },
+
+    exitWithoutDependency('#artworks', {
+      value: input.value(false),
+      mode: input.value('empty'),
+    }),
+
+    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('#artworks.artistContribs', V([])),
+
+    withFlattenedList('#artworks.artistContribs'),
+
+    exposeWhetherDependencyAvailable({
+      dependency: '#flattenedList',
+      mode: input.value('empty'),
+    }),
+  ],
+});
\ 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 d5e7657e..9ef7ccc4 100644
--- a/src/data/composite/wiki-properties/index.js
+++ b/src/data/composite/wiki-properties/index.js
@@ -3,15 +3,13 @@
 // Entries here may depend on entries in #composite/control-flow,
 // #composite/data, and #composite/wiki-data.
 
-export {default as additionalFiles} from './additionalFiles.js';
-export {default as additionalNameList} from './additionalNameList.js';
 export {default as annotatedReferenceList} from './annotatedReferenceList.js';
+export {default as canonicalBase} from './canonicalBase.js';
 export {default as color} from './color.js';
 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';
@@ -19,11 +17,11 @@ 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';
 export {default as reverseReferenceList} from './reverseReferenceList.js';
-export {default as seriesList} from './seriesList.js';
 export {default as simpleDate} from './simpleDate.js';
 export {default as simpleString} from './simpleString.js';
 export {default as singleReference} from './singleReference.js';
diff --git a/src/data/composite/wiki-properties/name.js b/src/data/composite/wiki-properties/name.js
index 5146488b..e4a28860 100644
--- a/src/data/composite/wiki-properties/name.js
+++ b/src/data/composite/wiki-properties/name.js
@@ -1,11 +1,27 @@
 // A wiki data object's name! Its directory (i.e. unique identifier) will be
 // computed based on this value if not otherwise specified.
 
+import {input, templateCompositeFrom} from '#composite';
 import {isName} from '#validators';
 
-export default function(defaultName) {
-  return {
-    flags: {update: true, expose: true},
-    update: {validate: isName, default: defaultName},
-  };
-}
+export default templateCompositeFrom({
+  annotation: 'name',
+
+  compose: false,
+
+  inputs: {
+    default: input({type: 'string'}),
+  },
+
+  update: {
+    validate: isName,
+  },
+
+  steps: () => [
+    {
+      dependencies: [input('default')],
+      transform: (value, {[input('default')]: defaultValue}) =>
+        value ?? defaultValue,
+    },
+  ],
+});
\ No newline at end of file
diff --git a/src/data/composite/wiki-properties/referenceList.js b/src/data/composite/wiki-properties/referenceList.js
index 4f8207b5..663349ee 100644
--- a/src/data/composite/wiki-properties/referenceList.js
+++ b/src/data/composite/wiki-properties/referenceList.js
@@ -11,8 +11,13 @@ import {input, templateCompositeFrom} from '#composite';
 import {validateReferenceList} from '#validators';
 
 import {exposeDependency} from '#composite/control-flow';
-import {inputSoupyFind, inputWikiData, withResolvedReferenceList}
-  from '#composite/wiki-data';
+
+import {
+  inputFindOptions,
+  inputSoupyFind,
+  inputWikiData,
+  withResolvedReferenceList,
+} from '#composite/wiki-data';
 
 import {referenceListInputDescriptions, referenceListUpdateDescription}
   from './helpers/reference-list-helpers.js';
@@ -27,6 +32,7 @@ export default templateCompositeFrom({
 
     data: inputWikiData({allowMixedTypes: true}),
     find: inputSoupyFind(),
+    findOptions: inputFindOptions(),
   },
 
   update:
@@ -39,6 +45,7 @@ export default templateCompositeFrom({
       list: input.updateValue(),
       data: input('data'),
       find: input('find'),
+      findOptions: input('findOptions'),
     }),
 
     exposeDependency({dependency: '#resolvedReferenceList'}),
diff --git a/src/data/composite/wiki-properties/referencedArtworkList.js b/src/data/composite/wiki-properties/referencedArtworkList.js
index 9ba2e393..278f063d 100644
--- a/src/data/composite/wiki-properties/referencedArtworkList.js
+++ b/src/data/composite/wiki-properties/referencedArtworkList.js
@@ -1,6 +1,5 @@
 import {input, templateCompositeFrom} from '#composite';
 import find from '#find';
-import {isDate} from '#validators';
 
 import annotatedReferenceList from './annotatedReferenceList.js';
 
@@ -23,7 +22,7 @@ export default templateCompositeFrom({
     annotatedReferenceList({
       referenceType: input.value(['album', 'track']),
 
-      data: 'artworkData',
+      data: '_artworkData',
       find: '#find',
 
       thing: input.value('artwork'),
diff --git a/src/data/composite/wiki-properties/seriesList.js b/src/data/composite/wiki-properties/seriesList.js
deleted file mode 100644
index 2a101b45..00000000
--- a/src/data/composite/wiki-properties/seriesList.js
+++ /dev/null
@@ -1,31 +0,0 @@
-import {input, templateCompositeFrom} from '#composite';
-import {isSeriesList, validateThing} from '#validators';
-
-import {exposeDependency} from '#composite/control-flow';
-import {withResolvedSeriesList} from '#composite/wiki-data';
-
-export default templateCompositeFrom({
-  annotation: `seriesList`,
-
-  compose: false,
-
-  inputs: {
-    group: input({
-      validate: validateThing({referenceType: 'group'}),
-    }),
-  },
-
-  steps: () => [
-    withResolvedSeriesList({
-      group: input('group'),
-
-      list: input.updateValue({
-        validate: isSeriesList,
-      }),
-    }),
-
-    exposeDependency({
-      dependency: '#resolvedSeriesList',
-    }),
-  ],
-});
diff --git a/src/data/composite/wiki-properties/singleReference.js b/src/data/composite/wiki-properties/singleReference.js
index f532ebbe..25b97907 100644
--- a/src/data/composite/wiki-properties/singleReference.js
+++ b/src/data/composite/wiki-properties/singleReference.js
@@ -8,11 +8,19 @@
 //
 
 import {input, templateCompositeFrom} from '#composite';
-import {isThingClass, validateReference} from '#validators';
+import {validateReference} from '#validators';
 
 import {exposeDependency} from '#composite/control-flow';
-import {inputSoupyFind, inputWikiData, withResolvedReference}
-  from '#composite/wiki-data';
+
+import {
+  inputFindOptions,
+  inputSoupyFind,
+  inputWikiData,
+  withResolvedReference,
+} from '#composite/wiki-data';
+
+import {referenceListInputDescriptions, referenceListUpdateDescription}
+  from './helpers/reference-list-helpers.js';
 
 export default templateCompositeFrom({
   annotation: `singleReference`,
@@ -20,25 +28,24 @@ export default templateCompositeFrom({
   compose: false,
 
   inputs: {
-    class: input.staticValue({validate: isThingClass}),
+    ...referenceListInputDescriptions(),
 
+    data: inputWikiData({allowMixedTypes: true}),
     find: inputSoupyFind(),
-    data: inputWikiData({allowMixedTypes: false}),
+    findOptions: inputFindOptions(),
   },
 
-  update: ({
-    [input.staticValue('class')]: thingClass,
-  }) => ({
-    validate:
-      validateReference(
-        thingClass[Symbol.for('Thing.referenceType')]),
-  }),
+  update:
+    referenceListUpdateDescription({
+      validateReferenceList: validateReference,
+    }),
 
   steps: () => [
     withResolvedReference({
       ref: input.updateValue(),
       data: input('data'),
       find: input('find'),
+      findOptions: input('findOptions'),
     }),
 
     exposeDependency({dependency: '#resolvedReference'}),