| 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
 | import {input, templateCompositeFrom} from '#composite';
import {withResultOfAvailabilityCheck} from '#composite/control-flow';
import {withPropertyFromObject} from '#composite/data';
import withAttachedArtwork from './withAttachedArtwork.js';
function getOutputName({
  [input.staticValue('property')]: property,
}) {
  if (property) {
    return `#attachedArtwork.${property}`;
  } else {
    return '#value';
  }
}
export default templateCompositeFrom({
  annotation: `withPropertyFromAttachedArtwork`,
  inputs: {
    property: input({type: 'string'}),
  },
  outputs: inputs => [getOutputName(inputs)],
  steps: () => [
    {
      dependencies: [input.staticValue('property')],
      compute: (continuation, inputs) =>
        continuation({'#output': getOutputName(inputs)}),
    },
    withAttachedArtwork(),
    withResultOfAvailabilityCheck({
      from: '#attachedArtwork',
    }),
    {
      dependencies: ['#availability', '#output'],
      compute: (continuation, {
        ['#availability']: availability,
        ['#output']: output,
      }) =>
        (availability
          ? continuation()
          : continuation.raiseOutput({[output]: null})),
    },
    withPropertyFromObject({
      object: '#attachedArtwork',
      property: input('property'),
    }),
    {
      dependencies: ['#value', '#output'],
      compute: (continuation, {
        ['#value']: value,
        ['#output']: output,
      }) =>
        continuation.raiseOutput({[output]: value}),
    },
  ],
});
 |