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
|
// Raises if this property's update value isn't available.
// See withResultOfAvailabilityCheck for {mode} options!
import {input, templateCompositeFrom} from '#composite';
import inputAvailabilityCheckMode from './inputAvailabilityCheckMode.js';
import withResultOfAvailabilityCheck from './withResultOfAvailabilityCheck.js';
export default templateCompositeFrom({
annotation: `raiseOutputWithoutUpdateValue`,
inputs: {
mode: inputAvailabilityCheckMode(),
output: input.staticValue({defaultValue: {}}),
},
outputs: ({
[input.staticValue('output')]: output,
}) => Object.keys(output),
steps: () => [
withResultOfAvailabilityCheck({
from: input.updateValue(),
mode: input('mode'),
}),
// TODO: A bit of a kludge, below. Other "do something with the update
// value" type functions can get by pretty much just passing that value
// as an input (input.updateValue()) into the corresponding "do something
// with a dependency/arbitrary value" function. But we can't do that here,
// because the special behavior, raiseOutputAbove(), only works to raise
// output above the composition it's *directly* nested in. Other languages
// have a throw/catch system that might serve as inspiration for something
// better here.
{
dependencies: ['#availability', input('output')],
compute: (continuation, {
['#availability']: availability,
[input('output')]: output,
}) =>
(availability
? continuation()
: continuation.raiseOutputAbove(output)),
},
],
});
|